Mordor에 있는 몹 소환 소스

2007.04.12 13:08

그리움 조회 수:277 추천:58

*****************************************************************************
귀환장소 소스 수정판. 메카 총관리 히네시스
*****************************************************************************
/* 이 소스는 김광철 (그리움)님의 귀환장소 소스를
약간만 수정한 버젼입니다. -오류가 날 수 있기 때문에-
최대한 초보자도 이해할 수 있게 설명하려 애썼습니다.
무한대전 1.04b에서 테스트 했습니다.
현제 사용하고 있는 소스입니다.

1. global.c 에 '귀환장소'명령어를 추가한다. "귀환장소", 빈번호 return_place
2. mextern.h 에 return_square 밑에 return_place를 추가.
3. mtype.h 에 PRTACI , PRTNOW , PRTPAS 를 추가해 준다. 사용안하는 플레그번호로
4. command1.c 에 귀환 소스를 모두 지운다.
  return_square를 모두 지우면 된다. 아마도 소스 맨 끝쯤에 있을것이다.
5. 지운 후 아래의 return_square와 return_place 두개 소스를 그대로 복사한다.
6. 복사가 끝났으면 각자 자신의 머드에 맞게 출력문을 수정한다.
  (이 소스 그대로 썼다가는 -- 귀환할때 "어쩌고 저쩌고 귀환합니다." 라고
   나오게 된다. 머드를 조잡하게 만들고 싶으시다면 그대로 쓰시길 -,.-)
7. 이제 게임상에서 [설정] 이라고 치면 나오는 화면에 설정된 귀환장소가 나오게
  추가해 주면 끝. (한.. 3줄? 정도 추가하면 끝.)
  참고로 command5.c 에 960번째줄 쯤에 설정화면 소스가 있다.
  위에있는 것들 보고 그대로 이름만 바꿔서 추가하면됨.

소스 나갑니다.
/****************************************************************************/
/* 귀환장소 설정 */
/****************************************************************************/
/* 텔넷- bit.bbs.co.kr 메카 히네시스 */

int return_square(ply_ptr,cmnd)
creature *ply_ptr;
cmd *cmnd;

{
       room *rom_ply;
       int fd;
       ctag *cp;

rom_ply=ply_ptr->parent_rom;
fd=ply_ptr->fd;
if(ply_is_attacking(ply_ptr,cmnd)) {
print(fd,"당신은_싸우고_있는_중입니다!!");
return 0;
}


/*if(rom_ply->rom_num==1001) {
print(fd,"당신은 이미 광장에 와 있습니다!");
return 0;
}*/
/* 무한대전에 디폴트로 잡혀있는 1001번 방을 채크 */
if(F_ISSET(ply_ptr,PRTNOW) && rom_ply->rom_num==1001)
       { print(fd,"당신은_이미_광장에_와_있습니다!\n");
       return 0; }

/* else if(F_ISSET(ply_ptr,PRTACI) && rom_ply->rom_num==방번호)
  형식으로 지금 있는방을 체크해서 귀환이 안되게 함. */

               else if(F_ISSET(ply_ptr,PRTACI) && rom_ply->rom_num==1002)
       { print(fd,"당신은_이미_광장에_와_있습니다!\n");
       return 0; }

               else if(F_ISSET(ply_ptr,PRTPAS) && rom_ply->rom_num==1003)
       { print(fd,"당신은_이미_광장에_와_있습니다!\n");
       return 0; }
                  

       if(ply_ptr->following) {
           cp = ply_ptr->following->first_fol;
       }
       else {
           cp = ply_ptr->first_fol;
       }
       if(cp){
           print(fd,"먼저_그룹에서_나오세요.");
           return(0);

/* 아래 소스에는 ply_ptr->level>20 으로. 레벨이 20 이하면
  귀환할때 도력이 모두 없어진다. 원치 않으면 1로 수정해도 상관없다. */

       } if(ply_ptr->level>20 && ply_ptr->class print(fd, "당신이_귀환하려하자_흑암의_세력이_당신의_도력을_뺏습니다.\n");
ply_ptr->mpcur = 0;
}


/* 귀환 명령을 썼을때 나오는 글. */
print(fd, "당신이_\"귀환!\"이라고_외치자 어쩌고 저쩌고 ");

if(!F_ISSET(ply_ptr,PDMINV))

broadcast_rom(fd,ply_ptr->rom_num,"\n%m님이_갑자기_사라집니다!",ply_ptr);
                                                                      
       del_ply_rom(ply_ptr,rom_ply); if(!F_ISSET(ply_ptr,PFRTUN)){

       if(F_ISSET(ply_ptr,PRTNOW))
/*디폴트1001번 광장으로 귀환*/

       load_rom(1001,&rom_ply);

/*두번째 귀환장소로 귀환*/

       else if(F_ISSET(ply_ptr,PRTACI))
       load_rom(1002,&rom_ply);
                          
/*세번째 귀환장소로 귀환*/

       else if(F_ISSET(ply_ptr,PRTPAS))
       load_rom(1003,&rom_ply); }

       else
       load_rom(3300 + ply_ptr->daily[DL_EXPND].max, &rom_ply);
       add_ply_rom(ply_ptr,rom_ply);

if(!F_ISSET(ply_ptr,PDMINV))
/*도착한 방에 모든 사람들에게 보여줄 글.*/
broadcast_rom(fd,ply_ptr->rom_num, "\n%m님이_어쩌고저쩌고귀환했슴다",ply_ptr);
return 0;
}

/****************************************************************************/
/* 귀환장소 설정 */
/****************************************************************************/
/* 메카 히네시스 */

int return_place(ply_ptr,cmnd)

creature *ply_ptr;
cmd *cmnd;
{

      room *rom_ptr;
      char *str[20];
      int fd;
      fd = ply_ptr->fd;
      rom_ptr = ply_ptr->parent_rom;

      if(cmnd->num < 2){
      ANSI(fd,CYAN);

      print(fd,"어디로_귀환하시려구요?\n");
      print(fd,"형식_:_귀환희망장소_귀환장소_-\n");
      ANSI(fd,WHITE);
      return(0);
      }
                  if(!strcmp(cmnd->str[1],"귀환1")){
     F_SET(ply_ptr,PRTACI);
     F_CLR(ply_ptr,PRTNOW);
/* 예전 소스에는 이부분이 F_CRL으로 표기되어 있었다.
  이렇게 할 경우 오류가 나므로 F_CLR로 옳은 함수를 사용했다. */
     F_CLR(ply_ptr,PRTPAS);
     print(fd,"어쩌고 저쩌고해서 귀환1번 방으로 귀환합니다.\n");
     return 0;
     }

/*디폴트 1001번 방으로 귀환.*/
     else if(!strcmp(cmnd->str[1],"광장")){
     F_SET(ply_ptr,PRTNOW);
     F_CLR(ply_ptr,PRTACI);
     F_CLR(ply_ptr,PRTPAS);
     print(fd,"어쩌고저쩌고 해서 광장으로_귀환합니다.\n");
     return 0;
     }

     else if(!strcmp(cmnd->str[1],"귀환2")){
     F_SET(ply_ptr,PRTPAS);
     F_CLR(ply_ptr,PRTACI);
     F_CLR(ply_ptr,PRTNOW);
     print(fd,"어쩌고 저쩌고해서 귀환2번 방으로_귀환합니다.\n");
     return 0;
     }

     else{
     print(fd,"그런_귀환장소는_없습니다.\n");
     print(fd,"광장으로_귀환합니다.\n");
     F_CLR(ply_ptr,PRTPAS);
     F_CLR(ply_ptr,PRTACI);
     F_SET(ply_ptr,PRTNOW);
     return 0; }
}

*주의! 이대로 컴파일 해버리면 아이디를 새로 만들고 들어올경우 귀환장소가 설정되어 있지 않기 때문에 귀환이 안된다.
때문에 [어디 귀환장소]를 해주어야 귀환이 가능해 진다.
이것을 처음부터 설정되도록 해줘야 한다.
command1.c 의 create_ply 부분의 마지막쯤에
[입력된 암호가 너무 짧습니다.] 다음부분에
아이디 생성 후 바로 귀환장소가 설정되어 있도록 해줘야 합니다.

/* 중략 */
print(fd, "입력된_암호가_너무_짧습니다.\n암호를_다시_넣으십시요(3자이상_14자이하):_");
RETURN(fd, create_ply, 8);
}
     strncpy(Ply[fd].ply->password, str, 14);
     strcpy(Ply[fd].ply->name, Ply[fd].extr->tempstr[0]);
        up_level(Ply[fd].ply);
        Ply[fd].ply->fd = fd;
        init_ply(Ply[fd].ply);
        init_alias(Ply[fd].ply);
        F_SET(Ply[fd].ply,PLECHO); /* 없는 소스도 있습니다. */
        F_SET(Ply[fd].ply,PPROMP); /* 없는 소스도 있습니다. */
/* 이부분만 추가. PRTNOW는 디폴트 1001번방인 장소 */
        F_SET(Ply[fd].ply,PRTNOW);
/* 추가 끝. */
        Ply[fd].ply->gold = 10000;
        save_ply(Ply[fd].ply->name, Ply[fd].ply);
        print(fd, "%c%c%c\n",255,252,1);
        /* 하략 */

이렇게 한줄을 추가해 주시면 아이디 생성 후 자동으로
귀환장소가 1001번 방인 곳으로 설정됩니다.
이해 하시겠죠? ^_^

* 이 외에도 [출구 설정] 이나 [묘사보기 설정] 등을
아이디 생성 후 자동으로 설정되어 있게 하려면
위에 추가한 것처럼 응용하시면 됩니다.

-메카 총관리 히네시스-


XE Login