패거리 상점 만들기

2007.04.12 13:02

그리움 조회 수:163 추천:48

출처 : INS BBS (gamebbs.co.kr)

제 목 : [MORDOR/소스] 패거리 상점 만들기 찬성 : 0 반대 : 0
올린이 : 우리짱이 (정현우 ) 읽음 : 25 날짜 : 99/11/12 14:00

1) 플래그 제작
   아이템 플레그에 OGROUP 라는 플래그를 추가 시킵니다. mtype.h에
   줄 한출만 추가시키면 되겠죠.?

2) 등록 명령어 제작
   등록 이라는 명령어를 하나 만드시고 (5142번 참고) 아래와 같이
   함수를 짜주세요.

   int item_accept(ply_ptr, cmnd)
   creature *ply_ptr;
   cmd *cmnd;
   {
     room *rom_ptr, *dep_ptr;
     object *obj_ptr;
     int fd;

     fd = ply_ptr->fd;
     rom_ptr = ply_ptr->parent_rom;

     if(!F_ISSET(ply_ptr, PFMBOS)) {
        print(fd, "당신은 패거리의 리더가 아닙니다.");
        return(0);
     }
        
     if(!F_ISSET(rom_ptr, RSHOPP)) {
        print(fd, "여기는 상점이 아닙니다.");
        return(0);
     }

     if(cmnd->num < 2) {
        print(fd, "무엇을 등록할까요?");
        return(0);
     }

     obj_ptr = find_obj(ply_ptr, ply_ptr->first_obj, cmnd->str[1],
               cmnd->val[1]);

     if(!obj_ptr) {
        print(fd, "당신은 그런것을 갖고 있지 않습니다.");
        return(0);
     }

     if(obj_ptr->questnum && ply_ptr->class < DM) {
        print(fd, "임무 아이템은 등록하지 못합니다.");
        return(0);
     }

     if(F_ISSET(obj_ptr, OEVENT) && ply_ptr->class < DM) {
        print(fd, "이벤트 아이템은 등록하지 못합니다.");
        return(0);
     }

     if(obj_ptr->first_obj) {
        print(fd, "내용물이 있는 보자기는 등록하지 못합니다.");
        return(0);
     }

     if(load_rom(rom_ptr->rom_num + 1, &dep_ptr) < 0) {
        print(fd, "등록할 수 없습니다.");
        return(0);
     }

     F_SET(obj_ptr, OGROUP);

     del_obj_crt(obj_ptr, ply_ptr);
     add_obj_rom(obj_ptr, dep_ptr);
     savegame_nomsg(ply_ptr);
     resave_rom(dep_ptr->rom_num);

     print(fd, "당신은 %1i%j 등록하였습니다.", obj_ptr,"3");
     broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 등록했습니다.",
                   ply_ptr,"1", obj_ptr,"3");

     return(0);
   }

   이렇게 하면 대충 등록 명령은 끝날것 같군요.

3) 사 명령어 편집
   command7.c 의 buy 함수에서 다음 부분을 찾아주세요.

    add_obj_crt(obj_ptr2, ply_ptr);
    ply_ptr->gold -= obj_ptr2->value;
    print(fd, "당신은 %1i%j 샀습니다", obj_ptr2, "3");
    broadcast_rom(fd, ply_ptr->rom_num, "\n%M이 %1i%j 샀습니다.",
                  ply_ptr, obj_ptr2,"3");

   이 부분 바로 위에 다음을 추가해 주세요.

    if(F_ISSET(obj_ptr, OGROUP)) {
       num = ply_ptr->daily[DL_EXPND].max;

       crt_ptr = find_who(fmboss_str[num]);
       if (crt_ptr) {
           crt_ptr->war_gold += obj_ptr2->value;
         } else {
           load_ply(fmboss_str[num], &crt_ptr);
           crt_ptr->war_gold += obj_ptr2->value;
           save_ply(fmboss_str[num], &crt_ptr);
        }

       del_obj_rom(obj_ptr, dep_ptr);
       resave_rom(dep_ptr->rom_num);
    }

    그리고 추가로 선언해 주어야 할 함수

     int num;
     creature *crt_ptr;
                      
홈지기 "그륨"


XE Login