머드클럽
머드게임이란?
게임은 어떤 환경에서?
본격적으로 게임해 볼까?
배너교환
머드강좌
일반 머드강좌
성천사님의 머드강좌
혼님의 머드강좌
방울꽃님의 머드강좌
리트님의 머드강좌
2Soo님의 머드강좌
내머드소개하기
접속가능머드
내머드소개하기
자료실
접속 프로그램
머드소스
머드 유틸리티
기타
커뮤니티
공지사항
등업신청
머드클럽에바란다
자유 게시판
질문 AND 답변
머드클럽 갤러리
구인구직
머드게임소개
사신전(死神戰)
사신전 소개
사신전 맵
사신전 명령어 모음집
천명(天命)
천명 소개
천명 맵
천명 명령어 모음집
마이페이지
로그인
회원가입
계정찾기
로그인
회원가입
계정찾기
텍스트머드클럽
검색
[circle]신세계 귀환소스
성천사
0
8,097
0
0
2009-09-15 18:21:31
#define SIZE_RECALL 21 <br /> <br /> <br /> <br />struct recalls { <br /> int listnum; <br /> char recallname[9]; <br /> int recallroom; <br /> int min_recall; <br /> int max_recall; <br /> int etc; <br />}; <br /> <br /> <br />일단 귀환 소스를 사용 하기 위해서는 조금의 설정이 필요한데 structs.h 안에 위에 적힌 소스의 내용을 적어 주어야 하고, db.c에서 struct recalls numrecalls[SIZE_RECALL-1]; 를 선언해 주어야 한다. 그리고 extern function 을 검색후 void read_recalls(void); 을 적당한 부분에 넣어 준다. 그리고 아래의 소스는 db.c 안에 /* body of the booting system */ 또는 void boot_db(void) 을 검색 후 알맞은 곳에 넣어주면 된다. <br /> <br /> <br /> <br /> log("귀환장 부팅."); <br /> read_recalls(); <br /> <br /> <br />위의 내용의 소스에 삽입했다면, interpreter.h 안에 #define 을 검색 후 편한곳에 <br /> <br /> <br /> <br />#define SCMD_EDTRECALL 0 <br />#define SCMD_DELRECALL 1 <br />#define SCMD_MOVRECALL 2 <br /> <br /> <br />위의 내용을 삽입한다. 그리고 handler.c 파일을 열고 역시 마찬가지로 알맞은 곳에 <br /> <br /> <br /> <br />void read_recalls(void) <br />{ <br /> extern struct recalls numrecalls[SIZE_RECALL-1]; <br /> int i; <br /> FILE *fp; <br /> <br /> fp = fopen("recalls.dat", "rb"); <br /> <br /> if (fp == NULL) { <br /> sprintf(buf, "귀환장 파일을 읽을수 없습니다. 귀환장 파일을 새로 생성합니다. "); <br /> log(buf); <br /> fp = fopen("recalls.dat", "wb"); <br /> for (i = 0; i < SIZE_RECALL-1; i++) { <br /> fprintf(fp, "%d %s %d %d %d %d ", i + 1, "없음", 0, 0, 0, 0); <br /> } <br /> fclose(fp); <br /> sprintf(buf, "파일 생성했습니다. "); <br /> log(buf); <br /> return; <br /> } <br /> <br /> for(i = 0;i < SIZE_RECALL-1;i++) { <br /> fscanf(fp, "%d %s %d %d %d %d", <br /> &numrecalls[i].listnum, <br /> numrecalls[i].recallname, <br /> &numrecalls[i].recallroom, <br /> &numrecalls[i].min_recall, <br /> &numrecalls[i].max_recall, <br /> &numrecalls[i].etc); <br /> } <br /> fclose(fp); <br />} <br /> <br /> <br />위의 내용을 삽입한다. 여기까지 끝났다면 이제 아래의 소스들을 act.other.c 나 act.wizard.c 또는 원하는 소스파일에 넣어 주면 된다. 단, 원하는 소스파일의 윗부분에 <br /> <br />extern struct recalls numrecalls[SIZE_RECALL-1]; 내용을 삽입해야 한다. <br /> <br /> <br /> <br />ACMD(do_listofrecalls) <br />{ <br /> int i; <br /> <br /> send_to_char(" &c14귀환장소 목록:&c07 " <br /> " 번호 귀환장이름 귀환장소 최소레벨 최대레벨 렙제적용 " <br /> "&c14" <br /> "━━┿━━━━━┿━━━━┿━━━━┿━━━━┿━━━━ " <br /> "&c07", ch); <br /> for (i = 0; i < SIZE_RECALL-1; i++) { <br /> sprintf(buf, " %-2d %-10s %-5d %-4d %-4d %-6s ", <br /> numrecalls[i].listnum, <br /> numrecalls[i].recallname, <br /> numrecalls[i].recallroom, <br /> numrecalls[i].min_recall, <br /> numrecalls[i].max_recall, <br /> (numrecalls[i].etc == 0 ? "아니오" : "예")); <br /> send_to_char(buf, ch); <br /> } <br /> return; <br />} <br /> <br />ACMD(do_editrecalls) <br />{ <br /> char arg1[MAX_INPUT_LENGTH], arg2[MAX_INPUT_LENGTH], arg3[MAX_INPUT_LENGTH], arg4[MAX_INPUT_LENGTH], arg5[MAX_INPUT_LENGTH]; <br /> int i; <br /> FILE *fp; <br /> ACMD(do_listofrecalls); <br /> <br /> if (subcmd == SCMD_EDTRECALL) { // 귀환장편집 <br /> argument=two_arguments(argument, arg, arg1); <br /> argument=two_arguments(argument, arg2, arg3); <br /> argument=two_arguments(argument, arg4, arg5); <br /> <br /> if(IS_NPC(ch)) <br /> return; <br /> <br /> if(!*arg || !*arg1 || !*arg2) { <br /> do_listofrecalls(ch, "", 0, 0); <br /> send_to_char("&c14" <br /> "━━━━━━━━━━━━━━━━━━━━━━━━━━━━" <br /> "&c07" <br /> " " <br /> " <번호> <귀환장이름> <방번호> <최소레벨> <최대레벨> <레벨제한> 귀환장편집 " <br /> " " <br /> " 예제) 1 신세계 1204 702 705 (켜짐 또는 꺼짐) 귀환장편집 " <br /> " " <br /> " &c14귀환장이름을 '없음' 으로 설정 할 경우에는 귀환이 불가능하고 귀환장소 목록에도 " <br /> "출력되지 않는다. 또한 '<번호> 귀환장삭제' 명령으로도 삭제가 가능하다.&c07 ", ch); <br /> return; <br /> } <br /> <br /> if (!*arg3) { <br /> strcpy(arg3, "1"); <br /> } <br /> <br /> if (!*arg4) { <br /> strcpy(arg4, "2050"); <br /> } <br /> <br /> if (!*arg5) { <br /> strcpy(arg5, "아니오"); <br /> } <br /> <br /> if (atoi(arg) < 1 || atoi(arg) > 20) { <br /> send_to_char("그런 번호는 존재 하지 않습니다. ", ch); <br /> return; <br /> } <br /> <br /> if (strlen(arg1) > 8) { <br /> send_to_char("귀환장 이름은 한글 4자까지 가능합니다. ", ch); <br /> return; <br /> } <br /> <br /> if (atoi(arg2) <= 0) { <br /> send_to_char("그런 방 번호는 없습니다. ", ch); <br /> return; <br /> } <br /> <br /> if (atoi(arg3) < 1 || atoi(arg4) > LVL_HANGEL) { <br /> sprintf(buf, "레벨은 1에서 %d까지 지정이 가능합니다. ", LVL_HANGEL); <br /> send_to_char(buf, ch); <br /> return; <br /> } <br /> strcpy(numrecalls[atoi(arg)-1].recallname, arg1); <br /> numrecalls[atoi(arg)-1].recallroom = atoi(arg2); <br /> numrecalls[atoi(arg)-1].min_recall = atoi(arg3); <br /> numrecalls[atoi(arg)-1].max_recall = atoi(arg4); <br /> if (is_abbrev(arg5, "켜짐")) { <br /> numrecalls[atoi(arg)-1].etc = 1; <br /> } else if (is_abbrev(arg5, "꺼짐")) { <br /> numrecalls[atoi(arg)-1].etc = 0; <br /> } else if (is_abbrev(arg5, "예")) { <br /> numrecalls[atoi(arg)-1].etc = 1; <br /> } else if (is_abbrev(arg5, "아니오")) { <br /> numrecalls[atoi(arg)-1].etc = 0; <br /> } else if (is_abbrev(arg5, "네")) { <br /> numrecalls[atoi(arg)-1].etc = 1; <br /> } else if (is_abbrev(arg5, "아니요")) { <br /> numrecalls[atoi(arg)-1].etc = 0; <br /> } else { <br /> send_to_char("레벨제한은 '꺼짐' 과 '켜짐' 으로 설정 할 수 있습니다. ", ch); <br /> return; <br /> } <br /> } else if (subcmd == SCMD_DELRECALL) { // 귀환장삭제 <br /> if(IS_NPC(ch)) <br /> return; <br /> <br /> one_argument(argument, arg); <br /> <br /> if (!*arg) { <br /> do_listofrecalls(ch, "", 0, 0); <br /> send_to_char("&c14" <br /> "━━━━━━━━━━━━━━━━━━━━━━━━━━━━" <br /> "&c07" <br /> " " <br /> "사용법: <번호> 귀환장삭제 " <br /> " &c14해당 번호의 귀환장 정보를 초기화 한다.&c07 ", ch); <br /> return; <br /> } <br /> <br /> if (atoi(arg) < 1 || atoi(arg) > 20) { <br /> send_to_char("귀환장은 1번에서 20번까지만 존재합니다. ", ch); <br /> return; <br /> } <br /> <br /> strcpy(numrecalls[atoi(arg)-1].recallname, "없음"); <br /> numrecalls[atoi(arg)-1].recallroom = 0; <br /> numrecalls[atoi(arg)-1].min_recall = 0; <br /> numrecalls[atoi(arg)-1].max_recall = 0; <br /> numrecalls[atoi(arg)-1].etc = 0; <br /> } else if (subcmd == SCMD_MOVRECALL) { // 귀환장이동 <br /> if (IS_NPC(ch)) <br /> return; <br /> <br /> two_arguments(argument, arg, arg1); <br /> <br /> if (!*arg || !*arg1) { <br /> do_listofrecalls(ch, "", 0, 0); <br /> send_to_char("&c14" <br /> "━━━━━━━━━━━━━━━━━━━━━━━━━━━━" <br /> "&c07" <br /> " " <br /> "사용법: <번호1> <번호2> 귀환장이동 " <br /> "&c14 번호1의 귀환장 정보를 번호2 귀환장에 이동후 저장하게된다. " <br /> " 번호2의 정보는 별도로 저장되지 않고 삭제가 된다.&c07 ", ch); <br /> return; <br /> } <br /> <br /> if (atoi(arg) < 1 || atoi(arg) > 20 || atoi(arg1) < 1 || atoi(arg1) > 20) { <br /> send_to_char("귀환장은 1번에서 20번까지만 존재합니다. ", ch); <br /> return; <br /> } <br /> <br /> strcpy(numrecalls[atoi(arg1)-1].recallname, numrecalls[atoi(arg)-1].recallname); <br /> numrecalls[atoi(arg1)-1].recallroom = numrecalls[atoi(arg)-1].recallroom; <br /> numrecalls[atoi(arg1)-1].min_recall = numrecalls[atoi(arg)-1].min_recall; <br /> numrecalls[atoi(arg1)-1].max_recall = numrecalls[atoi(arg)-1].max_recall; <br /> numrecalls[atoi(arg1)-1].etc = numrecalls[atoi(arg)-1].etc; <br /> strcpy(numrecalls[atoi(arg)-1].recallname, "없음"); <br /> numrecalls[atoi(arg)-1].recallroom = 0; <br /> numrecalls[atoi(arg)-1].min_recall = 0; <br /> numrecalls[atoi(arg)-1].max_recall = 0; <br /> numrecalls[atoi(arg)-1].etc = 0; <br /> } <br /> <br /> fp = fopen("recalls.dat", "wb"); <br /> for (i = 0; i < SIZE_RECALL-1; i++) { <br /> fprintf(fp, "%d %s %d %d %d %d ", i + 1, numrecalls[i].recallname, <br /> numrecalls[i].recallroom, numrecalls[i].min_recall, <br /> numrecalls[i].max_recall, numrecalls[i].etc); <br /> } <br /> fclose(fp); <br /> //read_recalls(ch); <br /> if (subcmd == SCMD_EDTRECALL) <br /> send_to_char("귀환장소를 저장했습니다. ", ch); <br /> else if (subcmd == SCMD_DELRECALL) <br /> send_to_char("귀환장소를 삭제했습니다. ", ch); <br /> else if (subcmd == SCMD_MOVRECALL) <br /> send_to_char("귀환장소를 이동했습니다. ", ch); <br /> return; <br />} <br /> <br /> <br />위의 내용들로 귀환장의 파일로 저장 이동 생성등이 끝났다. 게임안에서 귀환을 사용 하려면 아래의 소스를 act.other.c 안에 넣어 준다. <br /> <br /> <br /> <br />ACMD(do_gohome) <br />{ <br /> sh_int find_target_room(struct char_data * ch, char *rawroomstr); <br /> sh_int location; <br /> int i; <br /> ACMD(do_summpets); <br /> <br /> if(IS_NPC(ch)) <br /> return; <br /> <br /> one_argument(argument, arg); <br /> <br /> if(world[ch->in_room].number == 99 && GET_LEVEL(ch) < LVL_GOD) { <br /> send_to_char("당신은 수감중입니다. ", ch); <br /> return; <br /> } <br /> <br /> if(IS_SET(ROOM_FLAGS(ch->in_room), ROOM_NORECALL) && GET_LEVEL(ch) < LVL_GOD) { <br /> send_to_char("이곳에서는 귀환이 불가능합니다. ",ch); <br /> return; <br /> } <br /> <br /> if(FIGHTING(ch) && GET_LEVEL(ch) < LVL_GOD) { <br /> send_to_char(" &c12싸움중에는 귀환할 수 없습니다.&c07 ",ch); <br /> return; <br /> } <br /> <br /> for (i = 0; i < SIZE_RECALL-1; i++) <br /> if (is_abbrev(arg, numrecalls[i].recallname)) <br /> break; <br /> <br /> if (numrecalls[i].etc > 0 ) { <br /> if (GET_LEVEL(ch) < numrecalls[i].min_recall) { <br /> send_to_char("그곳으로 이동하기에는 당신의 레벨이 너무 낮습니다. ", ch); <br /> return; <br /> } <br /> <br /> if (GET_LEVEL(ch) > numrecalls[i].max_recall) { <br /> send_to_char("그곳으로 이동하기에는 당신의 레벨이 너무 높습니다. ", ch); <br /> return; <br /> } <br /> <br /> if (!strcmp(numrecalls[i].recallname, "없음") || numrecalls[i].recallroom < 1) { <br /> send_to_char("그런곳은 존재 하지 않습니다. ", ch); <br /> return; <br /> } <br /> } <br /> <br /> GET_TMOVECHK(ch) = 1; <br /> <br /> if (numrecalls[i].recallroom > 1) <br /> sprintf(buf, "%d", numrecalls[i].recallroom); <br /> else sprintf(buf, "%d", GET_SAVEROOM(ch)); <br /> <br /> if ((location = find_target_room(ch, buf)) < 0) <br /> return; <br /> <br /> act("$n$j 어디론가 사라집니다.", TRUE, ch, 0, 0, TO_ROOM); <br /> char_from_room(ch); <br /> char_to_room(ch, location); <br /> <br /> act("따듯한 바람과 함께 $n$j 나타납니다.", TRUE, ch, 0, 0, TO_ROOM); <br /> look_at_room(ch, 0); <br /> <br />/* <br /> GET_HMCOUNT(ch) += 1; <br /> GET_TMOVECHK(ch) = 0; <br /> do_summpets(ch, "", 0, 0); <br /> GET_TIMETIMER(ch) = world[ch->in_room].spare2; <br /> GET_TIMEROOM(ch) = world[ch->in_room].etc; <br /> <br />*/ <br />if (GET_LEVEL(ch) < LVL_GOD) <br /> WAIT_STATE(ch, PULSE_VIOLENCE + 2); <br />} <br /> <br /> <br />ACMD(do_listrecall) <br />{ <br /> int i; <br /> <br /> if(IS_NPC(ch)) <br /> return; <br /> <br /> send_to_char(" &c14귀환장소 목록:&c07 " <br /> " 귀환장이름 최소레벨 최대레벨 " <br /> "&c14" <br /> " ━━━━━┿━━━━┿━━━━ " <br /> "&c07", ch); <br /> for (i = 0; i < SIZE_RECALL-1; i++) { <br /> if (numrecalls[i].min_recall > GET_LEVEL(ch) && numrecalls[i].etc > 0) <br /> continue; <br /> else if (numrecalls[i].recallroom < 1) <br /> continue; <br /> else if (!strcmp(numrecalls[i].recallname, "없음")) <br /> continue; <br /> else sprintf(buf, " %-10s %-4d %-4d ", <br /> numrecalls[i].recallname, numrecalls[i].min_recall, numrecalls[i].max_recall); <br /> send_to_char(buf, ch); <br /> } <br /> return; <br />} <br />/* GET_TMOVECHK(ch) = 1; 는 structs.h 안에 struct char_player_data { 를 검색 한 후 <br /> <br /> int tmovechk; 를 적당한 부분에 삽입하고, util.h 안에 <br /> <br />#define GET_TMOVECHK(ch) ((ch)->player.tmovechk) 를 ((ch)->player 분을 검색, <br /> <br />제일 하단에 삽입해 주면 된다. <br /> <br /> <br /> <br />참고로 너무 오래전 만든 소스라 어딘가에 또 다른 부가적인 소스가 있을지도 모르겠다. <br /> <br />GET_TMOVECHK(ch) 조차도 어디에 쓰이는 지도 가물가물하다. 아무튼 귀환에 필요한 부분이라 사용했던것이 기억나 적었다. <br /> <br /> <br /> <br />그리고 위에 주석처리한 <br /> <br /> <br /> <br /> GET_HMCOUNT(ch) += 1; <br /> GET_TMOVECHK(ch) = 0; <br /> do_summpets(ch, "", 0, 0); <br /> GET_TIMETIMER(ch) = world[ch->in_room].spare2; <br /> GET_TIMEROOM(ch) = world[ch->in_room].etc; <br /> <br /> <br /> <br />부분은 GET_TMOVECHK(ch) = 0; 이 부분을 제외하고 귀환 소스를 사용하기 위해서는 <br /> <br />필수 주석 처리 부분이다. <br /> <br /> <br /> <br />*/ <br />
0
0
새글
답변
수정
삭제
최신목록
전체목록
신세계 포탈과 이동 명령어
신세계 do_display
정회원 이상만 코멘트 사용이 가능합니다.
총 게시물 27개 / 검색된 게시물: 27개
접속금지, 접속허용 편의성 수정
0
57
0
0
성천사
2024-10-27
신세계 텍스트 출력
0
88
0
0
성천사
2024-08-06
신세계 시체생성
0
110
0
0
성천사
2024-06-12
삭제된 게시물입니다.
0
84
0
0
성천사
2024-06-12
신세계 C to VC6.0
0
274
0
0
성천사
2024-03-07
신세계 장비위치 구하기
0
157
0
0
성천사
2024-03-04
신세계 파일 존재여부 확인
0
226
0
0
성천사
2024-02-18
신세계 맙타입 전투
0
252
0
0
성천사
2023-12-02
신세계 addlog()
0
202
0
0
성천사
2023-10-25
신세계 캐릭터, 맙 이동 코드
0
204
0
0
성천사
2023-10-25
신세계 지정번호의 물건 찾기및 제거하기
0
320
0
0
성천사
2023-05-07
신세계 이동물건
1
551
0
0
성천사
2022-12-30
신세계 날씨변경 명령어
0
366
0
0
성천사
2022-12-25
[circle]
신세계 운영자 명령어 방청소
0
406
0
0
성천사
2022-10-08
[circle]
신세계 물건이름
0
464
0
0
성천사
2022-08-26
[circle]
신세계 공격대상
0
472
0
0
성천사
2022-08-19
[circle]
미확인장소 물건 수거
0
964
0
0
성천사
2019-09-23
[circle]
신세계 포탈과 이동 명령어
1
1395
0
0
성천사
2018-09-05
[circle]
신세계 귀환소스
0
8098
0
0
성천사
2009-09-15
[circle]
신세계 do_display
0
6779
0
0
성천사
2009-09-15
1
2
다음
검색
글쓰기
최신목록
전체목록
시작일
종료일
검색어
이름
제목
내용
검색
닫기
로그인
회원가입
계정찾기
개인정보처리방침
이용약관
PC화면
Copyright (c) 텍스트머드클럽. All rights reserved.
쪽지를 전송하고 있습니다. 잠시 기다려주세요.
쪽지보내기
받는이(ID/닉네임)
닉네임으로 입력
내용
쪽지가 도착하였습니다.
쪽지함
쪽지 내용을 읽어오고 있습니다. 잠시 기다려주세요.
--