방 전체공격 소스

2007.04.12 11:40

그리움 조회 수:197 추천:50

/*
* 무한 소스를 이용한 방전체 공격.
*
* 이 함수는 누구나 사용이 가능하며, 사용에 아무런 제약은 없습니다.
* 또한, 이 함수의 사용에 따른 문제점에 대해서 전 아무런 책임을
* 지지 않습니다. 이 함수에 대한 문의사항은 아래의 E-Mail 주소로
* 해주시면 됩니다. 단, 제가 답변을 해야 한다는 의무는 없다는 것을
* 미리 밝혀둡니다.
* 몇부분 정도 체크를 하는 부분은 간단한 예만 있으므로, 자신의 소스에
* 맞춰서 더 추가하거나 고치시면 됩니다.
*/

int room_attack(ply_ptr, cmnd)
creature *ply_ptr;
cmd *cmnd;
{
   room *rom_ptr;
   int fd, m, n, mpdown;
   ctag *cp, *ctemp;
   long i, t;

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

/* 직업 체크 */
   if(ply_ptr->class < CARETAKER) {
       print(fd, "이건 초인만 쓸수 있어요!!!");
       return(0);
   }

   if(F_ISSET(ply_ptr, PBLIND)) {
       print(fd, "아무것도 보이지 않습니다.");
       return(0);
   } /* 실명 상태인지 체크. 벙어리 상태인지 체크등 추가하면 됨. */

   mpdown = (ply_ptr->mpmax) * 2 /10;
   /* 도력 소모량 : 최대 도력의 20%를 사용 */
   /* mpdown = 100; 등과 같이 사용하면 됨. */

   if(ply_ptr->mpcur < mpdown) {
       print(fd, "당신의 도력이 부족합니다.");
       return(0);
   }

/* 딜레이의 체크 */
/* 먼저 mtype.h 에서 LT_RATTCK 이라는 것을 정의해둬야 함 */

   i = LT(ply_ptr, LT_RATTCK);
   t = time(0);

   if(i > t) {
       please_wait(fd, i-t);
       return(0);
   }

   ply_ptr->lasttime[LT_RATTCK].ltime = t;
   ply_ptr->lasttime[LT_RATTCK].interval = 20L; /* 딜레이가 20초임 */
   ply_ptr->mpcur -= mpdown;

   F_CLR(ply_ptr, PHIDDN); /* 은신 상태 해제 */
   if(F_ISSET(ply_ptr, PINVIS)) { /* 은둔법 걸고 있을 경우 */
       F_CLR(ply_ptr, PINVIS);
       print(fd, "당신의 모습이 서서히 드러납니다.\n");
       broadcast_rom(fd, ply_ptr->rom_num,
               "\n%M의 모습이 서서히 드러납니다.", ply_ptr);
   }

   print(fd, "당신은 어쩌구저쩌구 하여서 방전체 공격을 합니다.");
   broadcast_rom(fd, ply_ptr->rom_num,
           "\n%M%j 어쩌구저쩌구 하여서 방전체 공격을 합니다.", ply_ptr, "1");

/* 여기서부터가 실제 공격을 들어가는 부분 */
   n = mdice(ply_ptr) + mpdown/5;
       /* 공격의 타격치 계산 : 아래 while 문에서 중간에 넣어도 관계없음 */
   cp = rom_ptr->first_mon;
   while(cp) {
       ctemp = cp->next_tag; /* ctemp를 사용하는 이유는, 공격으로 인해
                                 몹이 죽을 경우를 대비해서 사용
                                 사용하지 않으면, 버그 생김 -.- */
       if(F_ISSET(cp->crt, MUNKIL)) {
           cp = ctemp;
           continue;
       } /* 공격할수 없는 몹 체크 */
       if(cp->crt == ply_ptr) {
           cp = ctemp;
           continue;
       } /* 몹이 이 기술을 사용할 경우를 대비해서 넣어둠.
              그럴 가능성은 없으므로 빼도 됨. --; */
       m = MIN(cp->crt->hpcur, n);
       add_enm_crt(ply_ptr->name, cp->crt);
       add_enm_dmg(ply_ptr->name, cp->crt, m);
       cp->crt->hpcur -= n;

       printa(fd, "\n%M%j 어쩌구하면서 기술에 맞았습니다.", cp->crt, "1");
       broadcast_rom(fd, rom_ptr->rom_num,
               "\n%M%j 어쩌구하면서 기술에 맞았습니다.", cp->crt, "1");

   if(cp->crt->hpcur < 1) { /* 죽였을 경우 */
           printa(fd, "\n당신은 %M%j 죽였습니다.", cp->crt,"3");
           broadcast_rom(fd, cp->crt->rom_num,
               "\n%M%j %M%j 죽였습니다.", ply_ptr,"1", cp->crt, "3");
           die(cp->crt, ply_ptr);
       }
   else /* 자동 도망 체크 */
           check_for_flee(ply_ptr, cp->crt);

       cp = ctemp;
   }
   return(0);
}



p.s 이소스를 사용해 보신 분이. 에러가 난다고 하는군요.
   어느부분인지 잘 모르지만..
   그럼.


XE Login