패거리 전쟁 승패 기록

2007.04.12 11:45

그리움 조회 수:159 추천:47

이니 님의 글 퍼옴


우선 패거리전투 승패에 관한 이야기를 먼저 하지요.

원래 Mordor 소스에는 없는 부분으로 저도 확실히 어디 들어가 있는지는

모르거든요. 소스를 받아서 대충 살펴보긴 했지만.. 아마 지연님이

대충 집어 넣을 부분은 계산 하셔야 할껍니다.



우선.. 2가지 방법이 있습니다.
첫번째로는 패거리원들 목록처럼 다른 파일에 저장하는 것. 두번째는

리더에 변수를 두어 계산하는 법. 기부 명령도 있고 하니 두번째 방법으로

하겠습니다.



1) 변수 설정 (mstruct.h)

   변수를 잡아야 합니다. 이전에 설명 한번 했었는데.. 잘 모르신다면
   5130 번 게시물의 1번 항목을 보세요.

    char name[80];
                        
   이걸.. 이렇게 바꿉니다.

    char name[72];
    short war_win;
    short war_lose;
    long war_gold;

2) 승패 처리
   이제 변수를 만들었으니, 승패 처리를 해야 합니다. 이긴 패거리에겐
   war_win을 +1 해구어야 하고 진 패거리에겐 war_lose를 +1 해주어야
   겠죠.

   패거리 전쟁이 있는 소스는 제가 구하지 못해서 자세히 설명은 못
   드리겠네요. 하지만 이건 쉬우니까 뒤져봐서 '*** 패거리가 이겼습니다'
   이런 부분에 껴 넣어 주시면 됩니다.

   A. 이겼을때
      변수 선언 부분에 이걸 선언해 주세요.

       creature *lea_ptr; <-

      승이라고 생각되는 부분에 이걸 넣어주세요.

       lea_ptr = find_who(fmboss_str[(ㄱ)]); <-
       if (crt_ptr) crt_ptr->war_win ++; <-
       if (!crt_ptr) { <-
           load_ply(fmboss_str[(ㄱ)], &crt_ptr); <-
           crt_ptr->war_win ++; <-
           save_ply(fmboss_str[(ㄱ)], &crt_ptr); <-
       }

      (ㄱ) 부분에는 찾아보면.. 이긴 패거리의 고유 번호가 있을 껍니다.
      그 번호를 적어 주시면 됩니다.

   B. 졌을때
      변수 선언 부분에 이걸 선언해 주세요.

       creature *lea_ptr; <-

      승이라고 생각되는 부분에 이걸 넣어주세요.

       crt_ptr = find_who(fmboss_str[(ㄴ)]); <-
       if (crt_ptr) crt_ptr->war_lost ++; <-
       if (!crt_ptr) { <-
           load_ply(fmboss_str[(ㄴ)], &crt_ptr); <-
           crt_ptr->war_lost ++; <-
           save_ply(fmboss_str[(ㄴ)], &crt_ptr); <-
       }

      (ㄴ) 부분에는 찾아보면.. 진 패거리의 고유 번호가 있을 껍니다.
      그 번호를 적어 주시면 됩니다.

3) 승패 보기 (command11.c)
   승패를 볼 수 있는 루틴이 있어야 겠죠. '모든패거리' 명령어로
   같이 볼 수 있도록 합시다.

   int list_family(ply_ptr, cmnd)
   creature *ply_ptr;
   cmd *cmnd;
   {
     int fd, i;
     int ftotal;

     fd = ply_ptr->fd;
     ftotal = load_family();

     F_SET(ply_ptr, PREADI);
     print(fd, "다음과 같은 패거리가 있습니다.\n");
     print(fd, "%-14s %-14s \n", "패거리이름", "두목이름");
     print(fd, "--------------------------------------------\n");
     for(i = 1; i < ftotal; i++) {
         print(fd, "%-14s %-14s \n", family_str[i], fmboss_str[i]);
     }
     print(fd, "\n총 %d 개의 패거리가 활동중에 있습니다.", ftotal-1);
     F_CLR(ply_ptr, PREADI);
     return(0);
   }

   이건 list_family 함수 입니다. 여기에 우리가 원하는 루틴을 넣도록
   합시다.

   int list_family(ply_ptr, cmnd)
   creature *ply_ptr;
   cmd *cmnd;
   {
     int fd, i, win, lose; <-
     int ftotal;
     creature *crt_ptr; <-

     fd = ply_ptr->fd;
     ftotal = load_family();

     F_SET(ply_ptr, PREADI);
     print(fd, "다음과 같은 패거리가 있습니다.\n");
     print(fd, "%-14s %-14s %-3s %-3s\n", "패거리이름", "두목이름", <-
               "승", "패"); <-
     print(fd, "--------------------------------------------\n");
     for(i = 1; i < ftotal; i++) {
         win = 0; <-
         lose = 0; <-
         crt_ptr = find_who(fmboss_str[i]); <-
         if (!crt_ptr) load_ply(fmboss_str[i], &crt_ptr); <-
         if (crt_ptr) { <-
             win = crt_ptr->war_win; <-
             lose = crt_ptr->war_lose; <-
         } <-

         print(fd, "%-14s %-14s %-3d %-3d\n", family_str[i], <-
                   fmboss_str[i], win, lose); <-
     }
     print(fd, "\n총 %d 개의 패거리가 활동중에 있습니다.", ftotal-1);
     F_CLR(ply_ptr, PREADI);
     return(0);
   }

이렇게 하면 간단히 끝날것 같군요. 물론 컴파일은 안해봤습니다. -_-+
문제가 있으면 수정해서 쓰세요. load_ply만 한게 아니라 find_who도 한
까닭은 리더가 접속해 있을때 플레이어 데이타가 바로바로 저장되지
않기 때문입니다.

홈지기 "그륨"


XE Login