패거리전쟁중 "휴전"

2007.04.12 11:43

그리움 조회 수:220 추천:69

제 목:[강좌] 패거리 전쟁 중 휴전 명령..
올린이:moriah (고빈섭 )
-----------------------------------------------------------------------------
/*


                패거리 전쟁 중 휴전 명령

   본 코드는 크로키님의 멀티 전쟁 코드를 도입 하신 분만에게 만
   해당 되는 코드입니다.
   (필요하시다면 멀티 전쟁 소스를 도입 하지 않은 분을 위한 휴전 명령
    도 올려드리겠습니다.)

### 이 코드는 크로키님의 멀티 전쟁 코드를 응용하였슴을 알려드립니다.


   아래의 코드에 대한 일차 저작권은 크로키님에게 있으며
   그후 이차 저작권은 본인에게 있습니다.
   상업적 목적의 머드에서는 사용할수 없습니다.

   무료 운영중인 머드에서 사용시, 자유롭게 사용할수 있으나,

   저에게 이야기하지 않고 사용할 경우에는, 이 코드로 인해 발생하는
   문제에 대해서 저는 책임을 지지 않습니다.

1999/1/21

  키르

*/


/******************/
/* file : mtype.h */
/******************/

/* 이부분을 추가하세요. */
#define H_ISSET(p,f) (HWar[p][(f)/8] & (1<<((f)%8)))
#define H_SET(p,f) (HWar[p][(f)/8] |= 1<<((f)%8))
#define H_CLR(p,f) (HWar[p][(f)/8] &= ~(1<<((f)%8)))

/*******************/
/* file : global.c */
/*******************/
int Spy[PMAX];
int Numlockedout;
lockout *Lockout;
char HWar[16][2]; /* 추가 */

/********************/
/* file : mextern.h */
/********************/

/* 전쟁 플레그 외부변수 선언 */
extern char HWar[16][2]; /* 추가 */

/****************/
/* special1.c */
/****************/

int cancle_war(ply_ptr, cmnd)
creature *ply_ptr;
cmd *cmnd;
{
   int fd, i;
   int fnum, num, ftotal=16, fal=0;
   creature *crt_ptr;

   fd = ply_ptr->fd;
   fnum = ply_ptr->daily[DL_EXPND].max;

     if(!F_ISSET(ply_ptr,PFMBOS) || fnum == 0) {
        print(fd, "당신은 휴전 제의를 할 권리가 없습니다.\n");
        return(0);
     }
   if(cmnd->num != 2) {
       print(fd, "어느 패거리와 휴전을 하시려고요?");
       return(0);
   }

   for(num=1; num         if(!strcmp(cmnd->str[1], family_str[num])) {
           crt_ptr = find_who(fmboss_str[num]);
           if(!crt_ptr) {
               print(fd, "상대편의 두목인 %s님이 이용중이 아닙니다.",
                       fmboss_str[num]);
               return(0);
           }
           break;
       }
       fal++;
   }
   if(fal >= 15) {
       print(fd, "그런 패거리는 없습니다.");
       return(0);
   }
   if(fnum == num) {
       print(fd, "자기 자신들과 휴전을 하시려고요?");
       return(0);
   }

   if(!W_ISSET(num, fnum) && !W_ISSET(fnum, num)) {
       print(fd, "%s 패거리와는 전쟁중이 아닙니다.", family_str[num]);
       return(0);
   }

   if(H_ISSET(fnum, num)) {
       print(fd, "휴전제의를 취소합니다.");
       H_CLR(fnum, num);
       broadcast(
           "\n### %s 패거리에서 %s 패거리에의 휴전제의를 취소하였습니다.",
           family_str[fnum], family_str[num]);
       return(0);
   }
   if(H_ISSET(num, fnum)) {
       H_SET(fnum, num);
       W_CLR(fnum, num);
       W_CLR(num, fnum);
       print(fd, "%s 패거리의 휴전제의를 받아들였습니다.", family_str[num]);
       broadcast(
           "\n### %s 패거리와 %s 패거리가 휴전을 하였습니다.",
           family_str[fnum], family_str[num]);
       return(0);
   }

   H_SET(fnum, num);
   print(fd, "당신은 %s 패거리에 휴전 제의를 하였습니다.", family_str[num]);
   print(crt_ptr->fd, "\n>>> %s 패거리에서 휴전 제의를 합니다.",
           family_str[fnum]);
   broadcast(
       "\n### %s 패거리에서 %s 패거리에게 휴전제의를 하였습니다.",
       family_str[fnum], family_str[num]);
   return(0);
}

[1] 명령어 추가..

global.c

명령어들 있는 부분에..

{ "휴전제의", 200, cancle_war }, /* 휴전 제의 */



[2] 함수 선언..

mextern.h

/* SPECIAL1.C */
extern int cancle_war();

==> 이상으로 휴전 명령이 완성.. 한번 실험 해보세여..
   그리고 멀티 전쟁 으로 안 바꾸신분들도 잘 보시면 휴전 명령을 만드실 수
   있을 겁니다..(응용 해서 못할 것이 거의 없더군요..->실력은 안늘어도^^;)

[참고 : 궁금 하신거 있으면 질문 해도 괜찮아여^^;]


XE Login