이동력 추가하기

2007.04.12 13:03

그리움 조회 수:188 추천:56

제 목 : [소스] 이동력 소스에요 찬성 : 0 반대 : 0
올린이 : han0440 (김아람 ) 읽음 : 37 날짜 : 2000/01/24 14:03
------------------------------------------------------------------------------
우선 무한에서는 이동력이라는 개념이 없으니 변수를 하나 잡아야 합니다.



1) mstruct.h (typedef struct creature 부분. 거의 아래 입니다)
   char name[80];


   이 부분을 다음과 같이 바꿔주셔야 합니다.

   char name[78];
   short move_point;


   이렇게 하면 변수 제작은 끝납니다.

변수를 만들었으니 행동에 관한 제약을 해야겠죠.
2) command2.c (move 함수)
   mmm: 부분의 라벨를 찾습니다. 모든 상황 처리가 끝난 거의 아래부분에
   있습니다.
   mmm:
        if(t-login_time[fd]<120) login_time[fd]-=120;
   이런 부분이 쭉 있는데. mmm: 바로 밑줄에 다음을 추가 합니다.
   mmm:
        if(ply_ptr->move_point < 0) { <-
           print(fd, "이동력이 부족합니다"); <-
           return(0); <-
        } else ply_ptr->move_point--; <-
        if(t-login_time[fd]<120) login_time[fd]-=120;
   이동력 처리가 끝나고 이동력 감소 처리도 끝났습니다.
   무리 이동은 move 함수가 여러번 도니깐 수정을 안해도 될것 같고요
   주의 할점은 '가' 명령으로의 처리를 다시 해주어야 합니다.
3) command6.c (go 함수)
   2번과 똑같은 방식으로 수정해 줍니다.
그러면 이동력에 관한 처리는 끝났습니다.
이동력의 벨런싱이나 처음 셋팅은 동구님의 몫이구요.
보너스로 이동력 채우는 법도 간단히..
4) magic1.c (drink 함수)
   case 1: ... case 4: 부분이 있습니다.
   case 4: ....
                           ....
   }
   이 부분에 case 를 하나 추가해 주세요.
   case 4: ....
                           ....
   case 5: <-
           ply_ptr->move_point += 100; <-
           break; <-
   }
   이렇게 추가하시고 식품의 pdice 에 5를 넣어 주시면 이동력 회복제가
   되는겁니다. 100 이란 수치는 변경해 주셔도 되구요.
   또... 생각해야 하는게... 흐음..
   시간이 지나면 이동력이 회복되는 것도 괜찮겠군요.
5) update.c (update_users 함수)
   if(Ply[i].ply->fd < 0) continue;
   update_ply(Ply[i].ply);
   이 부분이 있습니다. 이 부분에 다음 줄을 추가해 주세요.
   if(Ply[i].ply->fd < 0) continue;
   Ply[i].ply->move_point += 10; <-
   if(Ply[i].ply->move_point > 100) <-
      Ply[i].ply->move_point = 100; <-
   update_ply(Ply[i].ply);
   이렇게 하면 이동력이 시간에 따라 회복이 됩니다. 사실 이곳이 회복
   루틴은 아니지만 쉽게 하려구 같다 붙인거구요... -_-+
   update_users 루틴은 20 초씩마다 갱신되니 20 초마다 이동력이 회복
   되겠네요. 이 수치를 변경하는 방법은.. update_game 함수에서
   update_users 호출 윗부분에 >= 20 비교 하는 부분을 고쳐주시면
   됩니다.
그럼 이동력에 관한 루틴은 대충 끝났네요. move_point 변수는 short 타입
이니.. 약 12000 까지 사용이 가능합니다.
만약 사용자마다 최대 이동력을 다르게 하고 싶다면 다음과 같은 과정을..
6) 1. 1 번 과정에서
      char name[78];
      short move_point;
      이렇게 수정한것을
      char name[76];
      short move_point;
      short move_max;
      이렇게 밑줄에 move_point 와 move_max 를 함께 추가 합니다.
   2. 5 번 과정에서
      if(Ply[i].ply->move_point > 100) Ply[i].ply->move_point = 100;
      이라고 수정한것을
      if(Ply[i].ply->move_point > Ply[i].ply->move_max) <-
         Ply[i].ply->move_point = Ply[i].ply->move_max; <-
      이렇게 수정하세요.
   3. 4 번 과정에서 case 추가 한 곳에서
      ply_ptr->move_point += 100;
      break;
      이라고 수정한 곳을
      ply_ptr->move_point += 100;
      if(ply_ptr->move_point > ply_ptr->move_max) <-
         ply_ptr->move_point = ply_ptr->move_max; <-
      break;
      이렇게 추가 하세요.
   4. 이동력 수치가 레벨에 따라 변하게 할 시에는 2가지 방법로
      나뉘는데. 무한에서처럼 레벨 4마다 상승하게 하려면 A방법,
      레벨 1당 무조건 바뀌게 하려면 B방법으로 하십시오.
      A) player.c (up_level 함수)
         if (ply_ptr->level == 1) {
             ply_ptr->hpmax = class_stats[ply_ptr->class].hpstart;
                 ply_ptr->mpmax = class_stats[ply_ptr->class].mpstart;
                 ply_ptr->hpcur = ply_ptr->hpmax;
                 ply_ptr->mpcur = ply_ptr->mpmax;
                 ply_ptr->ndice = class_stats[ply_ptr->class].ndice;
                 ply_ptr->sdice = class_stats[ply_ptr->class].sdice;
                 ply_ptr->pdice = class_stats[ply_ptr->class].pdice;
         }
         중간쯤에 이 부분이 있습니다. 다음과 같이 추가해 주세요.
         if (ply_ptr->level == 1) {
             ply_ptr->hpmax = class_stats[ply_ptr->class].hpstart;
                 ply_ptr->mpmax = class_stats[ply_ptr->class].mpstart;
                 ply_ptr->hpcur = ply_ptr->hpmax;
                 ply_ptr->mpcur = ply_ptr->mpmax;
                 ply_ptr->ndice = class_stats[ply_ptr->class].ndice;
                 ply_ptr->sdice = class_stats[ply_ptr->class].sdice;
                 ply_ptr->pdice = class_stats[ply_ptr->class].pdice;
             ply_ptr->move_max = ply_ptr->level * 10; <-
             ply_ptr->move_point = ply_ptr->move_max; <-
         }
         또, 맨 밑줄에 다음과 같은 부분이 있습니다.
         ply_ptr->hpcur = ply_ptr->hpmax;
         ply_ptr->mpcur = ply_ptr->mpmax;
         이 부분 뒤에 다음을 추가 하세요.
         ply_ptr->move_max = ply_ptr->level * 10; <-
         ply_ptr->move_point = ply_ptr->move_max; <-
         2번째 줄은 이동력을 모두 회복해주는 루틴 입니다.
         빼시고 싶으면 빼셔두 되구요.
      B) player.c (up_level 함수)
         맨 윗줄에 다음과 같은 부분이 있습니다.
         ply_ptr->level++;
         이 부분 뒤에 다음을 추가하세요
         ply_ptr->move_max = ply_ptr->level * 10; <-
         레벨 1 씩마다 바로바로니 이동력 차는 루틴은 넣지 않았습니다.
         넣으시고 싶으면 A의 2번째줄 넣으시면 되고요.
      여기에서는 임의로 레벨 1당 이동력 10으로 잡았습니다.
      역시 벨런싱은 동구님의 몫 ^^:

대충 이렇게 해봤는데. 온라인 상에서 바로 생각나는대로 끄적인거라
틀린곳도 있을것 같네요. 쓸떼없는 내용도 많구..
주의 할점은 mtype.h를 바꿨으니 *.o 를 모두 지우고 다시 컴파일
하시는 것.


홈지기 "그륨"


XE Login