contact 머드클럽 문의하기 카카오톡
즐겨찾기 추가plus 머드클럽이 새롭게 오픈하였습니다!
sub image
신세계 이동물건
member photo 성천사 1 652 0 2022-12-30 11:14:50

제 머드의 기본 설정은 매 15초마다 이동 할 수 있게 comm.c:if (!(pulse % (15 * PASSES_PER_SEC))) { 안에 넣어져 있습니다.

 

// 아래의 내용을 limits.c 안에 삽입 후 comm.c 안 15 * PASSES_PER_SEC 안에 fifteen_second(); 를 삽입해 매 15초 마다 실행할 수 있도록 한다.

void fifteen_second(void)

{

     extern struct index_data *obj_index;
     extern struct obj_data *object_list;

     struct char_data *i, *next_char;
     struct obj_data *obj, *next_obj;

 

/*

   사용자, 맙 등록된 모든 대상중 사용자 검색

    for (i = character_list; i; i = next_char) {
         next_char = i->next;

         if (i->desc) { // 접속해 있는 사용자 라면
         }
    }

*/

     for (obj = object_list; obj; obj = next_obj) { // 게임 내 존재하는(젠 되어 있는) 모든 물건을 검색
          next_obj = obj->next;

 

          moving_items(obj); // 이동하는 물건 처리

 

          if (!next_obj)
              break;
     }

}

 

// 아래의 내용을 handler.c 안에 삽입

void moving_items(struct obj_data *obj)
{
    extern const char *han_dirs[]; // 방향 한글 출력용 텍스트
    int where = -1, i = 0, j = 0, found = 0, random = 0, r_num = 0, perc = 0;
    char buf[MAX_INPUT_LENGTH]="";
    int dirs[6] = { 0, };
    int b_zone = 0, a_zone = 0;

 

/* 물건에 플래그를 삽입해 이 물건이 이동하는 물건임을 체크해야 하므로 본인 머드에 맞는

   플래그를 삽입하면 됩니다.

    if (!IS_SET(GET_OBJ_SPARE9(obj), ITEM_NEWTWO_MOVING))  (이동물건 체크용, 본인 머드에 맞는 물건 플래그중 하나를 사용합니다.)
        return;
*/

/* 야생(?)의 물건이 아닐 경우 이동 하지 않도록 체크하는 부분입니다.  물건을 가졌을 때 체크

   해서 해당 물건은 더 이상 이동이 불가능 하도록 설정합니다.

    if (GET_OBJ_SPARE6(obj) > 0) // (이동물건 이동불가 체크용, 본인 머드에 맞는 물건 플래그중 하나를 사용합니다.)
        return;

*/
    if (obj->carried_by) // 소지하고 있으면 이동하지 않음
        return;
    if (obj->worn_by) // 장비하고 있으면 이동하지 않음
        return;
    if (obj->in_obj) // 보관함안에 있으면 이동하지 않음
        return;
    perc = number(1, 100); // 확률을 설정합니다.
    if (perc <= 50) { // 이동물건이 이동할 확률(50% 확률로 이동합니다)
        if (obj->in_room > NOWHERE) { // 물건이 방 안에 있으면
            // 본격적인 이동물건 설정 시작 [0] 북, [1] 동, [2] 남, [3] 서, [4] 위, [5] 밑

            // 현재 방에 북쪽으로 연결되어 있고, 북쪽에 이동할 방이 있고 문이 닫혀 있지 않으면 이동가능 하므로 0(북쪽)
            if (world[obj->in_room].dir_option[0] && world[obj->in_room].dir_option[0]->to_room &&
                !IS_SET(world[obj->in_room].dir_option[0]->exit_info, EX_CLOSED)) {
                dirs[0] = 0;
            } else dirs[0] = -1; // 그 외의 경우에는 갈 수 없으므로 -1

            // 현재 방에 동쪽으로 연결되어 있고, 동쪽에 이동할 방이 있고 문이 닫혀 있지 않으면 이동가능 하므로 1(동쪽)
            if (world[obj->in_room].dir_option[1] && world[obj->in_room].dir_option[1]->to_room &&
                !IS_SET(world[obj->in_room].dir_option[1]->exit_info, EX_CLOSED)) {
                dirs[1] = 1;
            } else dirs[1] = -1;

            // 현재 방에 남쪽으로 연결되어 있고, 남쪽에 이동할 방이 있고 문이 닫혀 있지 않으면 이동가능 하므로 2(남쪽)
            if (world[obj->in_room].dir_option[2] && world[obj->in_room].dir_option[2]->to_room &&
                !IS_SET(world[obj->in_room].dir_option[2]->exit_info, EX_CLOSED)) {
                dirs[2] = 2;
            } else dirs[2] = -1;
            // 현재 방에 서쪽으로 연결되어 있고, 서쪽에 이동할 방이 있고 문이 닫혀 있지 않으면 이동가능 하므로 3(서쪽)
            if (world[obj->in_room].dir_option[3] && world[obj->in_room].dir_option[3]->to_room &&
                !IS_SET(world[obj->in_room].dir_option[3]->exit_info, EX_CLOSED)) {
                dirs[3] = 3;
            } else dirs[3] = -1;
            // 현재 방에 위쪽으로 연결되어 있고, 위쪽에 이동할 방이 있고 문이 닫혀 있지 않으면 이동가능 하므로 4(위쪽)
            if (world[obj->in_room].dir_option[4] && world[obj->in_room].dir_option[4]->to_room &&
                !IS_SET(world[obj->in_room].dir_option[4]->exit_info, EX_CLOSED)) {
                dirs[4] = 4;
            } else dirs[4] = -1;
            // 현재 방에 밑쪽으로 연결되어 있고, 밑쪽에 이동할 방이 있고 문이 닫혀 있지 않으면 이동가능 하므로 5(밑쪽)
            if (world[obj->in_room].dir_option[5] && world[obj->in_room].dir_option[5]->to_room &&
                !IS_SET(world[obj->in_room].dir_option[5]->exit_info, EX_CLOSED)) {
                dirs[5] = 5;
            } else dirs[5] = -1;

 

           // 모든 방향을 검색한 후

            for (i = 0; i < NUM_OF_DIRS; i++) {
                if (dirs[i] != -1) {
                    found++;
                } 
            }

            // 출구가 없을 경우 종료
            if (found == 0) {
                return;
            }

_Moving_:
            random = number(0, 5); // 0-5 사이의 (방향과 같은 숫자의) 무작위로 숫자를 지정한다.
            where = dirs[random];   // 지정한 방향의 방향을 특정하고

            if (dirs[random] == -1) {         // 특정한 방향에 출구가 없으면
                goto _Moving_;        // 출구가 있는 방의 번호가 나올 때 까지 반복한다.
            }

            r_num = EXIT(obj, where)->to_room; // 이동하려는 방의 리얼번호를 저장
            a_zone = world[r_num].zone;           // 이동하려는 방의 존 번호를 특정
            b_zone = world[obj->in_room].zone; // 현재 방의 존 번호를 특정

            if (a_zone != b_zone) {                   // 현재 있는 방의 존과 이동하려는 방의 존이 다르다면 이동하지 않고 종료
                return;
            }

            sprintf(buf, "%s%s %s쪽으로 이동합니다.rn",
                          obj->short_description, check_josa(obj->short_description, 0),
                          han_dirs[where]);
            send_to_room(buf, obj->in_room);
            sprintf(buf, "%s%s 도착했습니다.rn",
                          obj->short_description, check_josa(obj->short_description, 0));
            send_to_room(buf, r_num);
            obj_from_room(obj);
            obj_to_room(obj, r_num);
            // 이동물건 설정 종료
        } else { // 물건이 미확인 장소에 있으면
            return; // 종료
        }
    }
}

0
정회원 이상만 코멘트 사용이 가능합니다.
총 게시물 29개 / 검색된 게시물: 29개
글번호   제목 작성자 조회수 싫어요 작성일
29 TBAMUD 한글 아이디 저장 함수 성천사 180 0 0 2025-03-29
28 신세계 64비트 난수 처리 성천사 178 0 0 2025-01-01
27 접속금지, 접속허용 편의성 수정 성천사 205 0 0 2024-10-27
26 신세계 텍스트 출력 [1] 성천사 242 0 0 2024-08-06
25 신세계 시체생성 성천사 209 0 0 2024-06-12
24 삭제된 게시물입니다. 성천사 147 0 0 2024-06-12
23 신세계 C to VC6.0 성천사 368 0 0 2024-03-07
22 신세계 장비위치 구하기 성천사 225 0 0 2024-03-04
21 신세계 파일 존재여부 확인 성천사 282 0 0 2024-02-18
20 신세계 맙타입 전투 성천사 321 0 0 2023-12-02
19 신세계 addlog() 성천사 265 0 0 2023-10-25
18 신세계 캐릭터, 맙 이동 코드 성천사 273 0 0 2023-10-25
17 신세계 지정번호의 물건 찾기및 제거하기 성천사 379 0 0 2023-05-07
16 신세계 이동물건 [1] 성천사 653 0 0 2022-12-30
15 신세계 날씨변경 명령어 성천사 445 0 0 2022-12-25
14 [circle] 신세계 운영자 명령어 방청소 성천사 503 0 0 2022-10-08
13 [circle] 신세계 물건이름 성천사 531 0 0 2022-08-26
12 [circle] 신세계 공격대상 성천사 561 0 0 2022-08-19
11 [circle] 미확인장소 물건 수거 성천사 1036 0 0 2019-09-23
10 [circle] 신세계 포탈과 이동 명령어 [1] 성천사 1472 0 0 2018-09-05
쪽지를 전송하고 있습니다. 잠시 기다려주세요.
쪽지보내기
받는이(ID/닉네임)
내용
쪽지가 도착하였습니다.
쪽지 내용을 읽어오고 있습니다. 잠시 기다려주세요.
--