이동력 추가하기

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 를 모두 지우고 다시 컴파일
하시는 것.


홈지기 "그륨"
번호 제목 글쓴이 날짜 조회 수
57 도배방지 그리움 2007.04.12 222
56 그룹경험치 소스 그리움 2007.04.12 220
55 패거리전쟁중 "휴전" 그리움 2007.04.12 220
54 직업 추가하기 그리움 2007.04.12 218
53 자동으로 돈줍기 소스 그리움 2007.04.12 213
52 경매는 이렇게 그리움 2007.04.12 213
51 어디 그리움 2007.04.12 211
50 무한에서 안시 넣는 방법 그리움 2007.04.12 210
49 방설명 지우기 그리움 2007.04.12 209
48 특수 아이템 만들기 그리움 2007.04.12 209
47 복권 소스 그리움 2007.04.12 207
46 혼자 말하는 몹 그리움 2007.04.12 206
45 자동 이벤트 그리움 2007.04.12 204
44 낮과 밤이 되면 어둡고 환하게 그리움 2007.04.12 203
43 귀환장소 변경 소스 #1 그리움 2007.04.12 202
42 개량형 우체국 그리움 2007.04.12 202
41 주문추가 소스 그리움 2007.04.12 201
40 출구모양 개량 소스 그리움 2007.04.12 201
39 자동수련 소스 그리움 2007.04.12 201
38 잡담 안시 사용하기 그리움 2007.04.12 200


XE Login