머드클럽
머드게임이란?
게임은 어떤 환경에서?
본격적으로 게임해 볼까?
배너교환
머드강좌
일반 머드강좌
성천사님의 머드강좌
혼님의 머드강좌
방울꽃님의 머드강좌
리트님의 머드강좌
2Soo님의 머드강좌
내머드소개하기
접속가능머드
내머드소개하기
자료실
접속 프로그램
머드소스
머드 유틸리티
기타
커뮤니티
공지사항
등업신청
머드클럽에바란다
자유 게시판
질문 AND 답변
머드클럽 갤러리
구인구직
머드게임소개
사신전(死神戰)
사신전 소개
사신전 맵
사신전 명령어 모음집
천명(天命)
천명 소개
천명 맵
천명 명령어 모음집
마이페이지
로그인
회원가입
계정찾기
로그인
회원가입
계정찾기
텍스트머드클럽
검색
[mordor]편지를 아이템화
LostMemory
0
3,648
0
0
2007-10-19 22:17:43
/* <br /> * 무한대전에서의 우체국 시스템 개량 <br /> * <br /> * 이것은 무한대전의 소스로 이런 우체국 시스템도 가능하다는 것을 보여주기 <br /> * 위해서 한번 만들어본 것입니다. <br /> * 현재 운영중인 무한대전 또는 "무한대전 소스를 수정한 머드" 들 중에서 <br /> * 상업적으로 사용돼는 곳을 제외하면, 누구나 이 소스를 사용할수 있습니다. <br /> * 만약, 이 소스를 상업적 용도의 (돈을 받는) 머드에서 사용할 경우에는, <br /> * 제가 저작권을 내세울수 있다는 것을 명심하시기 바랍니다. <br /> * <br /> * 문의 사항은 "croaky@ecstasy.co.kr" 로 해주시기 바랍니다. <br /> * <br /> * Croaky. 1998년 1월 16일 <br /> */ <br /> <br />/************/ <br />/* post.c */ <br />/************/ <br /> <br />#include /* 이걸 추가시켜주세요. 안넣어도 관계는 없지만요. */ <br /> <br />int postsend(ply_ptr, cmnd) /* 편지보내기 */ <br />creature *ply_ptr; <br />cmd *cmnd; <br />{ <br /> FILE *fp; <br /> room *rom_ptr; <br /> char file[80]; <br /> int fd, ff, i; <br /> long t; <br /> char *date; <br /> <br /> fd = ply_ptr->fd; <br /> rom_ptr = ply_ptr->parent_rom; <br /> <br /> if(!F_ISSET(rom_ptr, RPOSTO)) { <br /> print(fd, "여기는 우체국이 아닙니다.\n"); <br /> return(0); <br /> } <br /> <br /> if(cmnd->num < 2) { <br /> print(fd, "누구한테 편지를 보내시려구요?\n"); <br /> return(0); <br /> } <br /> <br /> cmnd->str[1][0] = up(cmnd->str[1][0]); <br /> sprintf(file, "%s/%s/%s", PLAYERPATH,first_han(cmnd->str[1]),cmnd->str[1]); <br /> ff = open(file, O_RDONLY, 0); <br /> <br /> if(ff < 0) { <br /> print(fd, "그런 사용자는 없습니다.\n"); <br /> return(0); <br /> } <br /> <br /> close(ff); <br /> <br /> print(fd, "편지 내용을 입력하십시요. 문장처음에 [.]을 치시면 편지쓰기를 종료 <br />합니다.\n각 행은 80자를 넘길 수 없습니다.\n-: "); <br /> <br /> t = time(0); <br /> date = ctime(&t); <br /> <br /> for(i=0;i<24;i++) <br /> if(date[i] == ' ') <br /> date[i] = '_'; <br /> date[24] = 0; <br /> sprintf(file, "%s/%s", POSTPATH, cmnd->str[1]); <br /> fp = fopen(file, "a"); <br /> fprintf(fp, "%s %s\n", ply_ptr->name, date); <br /> fclose(fp); <br /> <br /> sprintf(Ply[fd].extr->tempstr[0], "%s/%s_%s", POSTPATH, cmnd->str[1], date); <br /> <br /> F_SET(Ply[fd].ply, PREADI); <br /> output_buf(); <br /> Ply[fd].io->intrpt &= ~1; <br /> Ply[fd].io->fn = postedit; <br /> Ply[fd].io->fnparam = 1; <br /> return(DOPROMPT); <br /> <br />} <br /> <br />void postedit(fd, param, str) <br />int fd; <br />int param; <br />char *str; <br />{ <br /> char outstr[85], datestr[40]; <br /> long t; <br /> int ff; <br /> <br /> if(str[0]=='.') { <br /> F_CLR(Ply[fd].ply, PREADI); <br /> print(fd, "편지를 보냈습니다.\n"); <br /> RETURN(fd, command, 1); <br /> } <br /> <br /> ff = open(Ply[fd].extr->tempstr[0], O_CREAT | O_APPEND | O_RDWR, ACC); <br /> if(ff < 0) <br /> merror("postedit", FATAL); <br /> <br /> if(param == 1) { <br /> time(&t); <br /> strcpy(datestr, (char *)ctime(&t)); <br /> datestr[strlen(datestr)-1] = 0; <br /> sprintf(outstr, "\n---\n%s (%s)님에게서의 편지:\n\n", <br /> Ply[fd].ply->name, datestr); <br /> write(ff, outstr, strlen(outstr)); <br /> } <br /> <br /> strncpy(outstr, str, 79); <br /> outstr[79] = 0; <br /> strcat(outstr, "\n"); <br /> <br /> write(ff, outstr, strlen(outstr)); <br /> <br /> close(ff); <br /> <br /> print(fd, ": "); <br /> <br /> output_buf(); <br /> Ply[fd].io->intrpt &= ~1; <br /> RETURN(fd, postedit, 2); <br />} <br /> <br />int postread(ply_ptr, cmnd) /* 편지받기 */ <br />creature *ply_ptr; <br />cmd *cmnd; <br />{ <br /> FILE *fp; <br /> room *rom_ptr; <br /> object *obj_ptr; <br /> char file[80], name[15], date[25]; <br /> int fd; <br /> <br /> fd = ply_ptr->fd; <br /> rom_ptr = ply_ptr->parent_rom; <br /> <br /> if(!F_ISSET(rom_ptr, RPOSTO)) { <br /> print(fd, "이곳은 우체국이 아닙니다.\n"); <br /> return(0); <br /> } <br /> strcpy(file, POSTPATH); <br /> <br /> strcat(file, "/"); <br /> strcat(file, ply_ptr->name); <br /> if(!file_exists(file)){ <br /> print(fd,"받은 편지가 없습니다.\n"); <br /> return(0); <br /> } <br /> else { <br /> sprintf(file, "%s/%s", POSTPATH, ply_ptr->name); <br /> fp = fopen(file, "r"); <br /> while(1) { <br /> name[0] = 0; <br /> date[0] = 0; <br /> fscanf(fp, "%s", name); <br /> if(name[0] == 0) break; <br /> fscanf(fp, "%s", date); <br /> if(date[0] == 0) break; <br /> load_obj(20, &obj_ptr); <br /> /* load_obj 에서의 숫자는 대충 빈번호의 아이템으로 해주면 돼요. */ <br /> obj_ptr->type = SCROLL; <br /> obj_ptr->adjustment = -100; <br /> sprintf(obj_ptr->name, "편지"); <br /> sprintf(obj_ptr->description, "%s님에게서 온 편지입니다.", name); <br /> sprintf(obj_ptr->use_output, "%s_%s", ply_ptr->name, date); <br /> add_obj_crt(obj_ptr, ply_ptr); <br /> print(fd, "편지를 받았습니다.\n"); <br /> } <br /> fclose(fp); <br /> unlink(file); <br /> } <br />} <br /> <br />/* postdelete 함수는 필요없으므로 깨끗이 지워버려도 돼요. */ <br />/* 그리고, global.c 에서도 편지삭제 라는 명령부분을 지우시고요. */ <br /> <br /> <br />/****************/ <br />/* magic1.c */ <br />/****************/ <br /> <br />int readscroll(ply_ptr, cmnd) <br />creature *ply_ptr; <br />cmd *cmnd; <br />{ <br /> object *obj_ptr; <br /> int (*fn)(); <br /> long i, t; <br /> int fd, n, match=0, c, splno; <br /> <br /> char str[80]; /* 추가부분 */ <br /> <br /> fd = ply_ptr->fd; <br /> fn = 0; <br /> <br /> if(cmnd->num < 2) { <br /> if(cmnd->val[0]>1) { <br /> obj_ptr = find_obj(ply_ptr,ply_ptr->parent_rom->first_obj, <br /> "게시판",1); <br /> if(!obj_ptr) { <br /> print(fd,"무엇을 읽습니까?"); <br /> return 0; <br /> } <br /> board_obj[fd]=obj_ptr; <br /> return(read_board(ply_ptr,cmnd)); <br /> } <br /> print(fd, "무엇을 읽습니까?\n"); <br /> return(0); <br /> } <br /> if(F_ISSET(ply_ptr, PBLIND)) { <br /> ANSI(fd, RED); <br /> print(fd, "\n당신은 그것을 읽을 수 있는 능력이 없습니다.\n"); <br /> ANSI(fd, WHITE); <br /> return(0); <br /> } <br /> obj_ptr = find_obj(ply_ptr, ply_ptr->first_obj, <br /> cmnd->str[1], cmnd->val[1]); <br /> <br /> if(!obj_ptr || !cmnd->val[1]) { <br /> for(n=0; n if(!ply_ptr->ready[n]) continue; <br /> if(EQUAL(ply_ptr->ready[n], cmnd->str[1])) <br /> match++; <br /> else continue; <br /> if(match == cmnd->val[1] || !cmnd->val[1]) { <br /> obj_ptr = ply_ptr->ready[n]; <br /> break; <br /> } <br /> } <br /> } <br /> <br /> if(!obj_ptr) { <br /> print(fd, "\n 그런것이 존재하지 않습니다.\n"); <br /> return(0); <br /> } <br /> <br /> if(obj_ptr->special) { <br /> n = special_obj(ply_ptr, cmnd, SP_MAPSC); <br /> if(n != -2) return(MAX(0, n)); <br /> } <br /> <br /> if(obj_ptr->type != SCROLL) { <br /> print(fd, "\n이것은 문서구가 아닙니다.\n"); <br /> return(0); <br /> } <br /> <br />/* 여기서부터 추가 */ <br /> <br /> if(obj_ptr->adjustment == -100) { <br /> sprintf(str, "%s/%s", POSTPATH, obj_ptr->use_output); <br /> view_file(fd, 1, str); <br /> return(DOPROMPT); <br /> } <br /> <br />/* 여기까지를 추가해주세요. */ <br /> <br />/* readscroll() 원래대로 계속 */ <br /> <br /> return(0); <br />} <br /> <br />/*******************/ <br />/* command2.c */ <br />/*******************/ <br /> <br />int burn(ply_ptr, cmnd) <br />creature *ply_ptr; <br />cmd *cmnd; <br />{ <br /> room *rom_ptr; <br /> object *obj_ptr, *cnt_ptr; <br /> int fd, n, match=0; <br /> long t; <br /> char file[80]; /* 추가부분 */ <br /> <br /> fd = ply_ptr->fd; <br /> <br /> if(cmnd->num < 2) { <br /> print(fd, "무엇을 태우시려구요?"); <br /> return(0); <br /> } <br /> t=time(0); <br /> if(ply_burn_time[fd]>t) { <br /> please_wait(fd,ply_burn_time[fd]-t); <br /> return 0; <br /> } <br /> <br /> rom_ptr = ply_ptr->parent_rom; <br /> F_CLR(ply_ptr, PHIDDN); <br /> <br /> obj_ptr = find_obj(ply_ptr, ply_ptr->first_obj, <br /> cmnd->str[1], cmnd->val[1]); <br /> <br /> if(!obj_ptr) { <br /> print(fd, "당신은 그런것을 갖고 있지 않습니다."); <br /> return(0); <br /> } <br /> if(F_ISSET(obj_ptr, ONOBUN)) { <br /> print(fd, "소각할수 없는 아이템입니다."); <br /> return(0); <br /> } <br />/* 임무아이템 버리지 못하게 함 */ <br /> if(obj_ptr->questnum && ply_ptr->classshotscur > 0) { <br /> print(fd, "임무 아이템은 태우지 못합니다."); <br /> return(0); <br /> } <br /> if(F_ISSET(obj_ptr, ONEWEV) <br /> && ply_ptr->class < SUB_DM && obj_ptr->shotscur > 0) { <br /> print(fd, "이벤트 아이템은 소각할수 없습니다."); <br /> return(0); <br /> } <br /> <br />/* 추가 부분 */ <br /> if(obj_ptr->type == SCROLL && obj_ptr->adjustment == -100) { <br /> sprintf(file, "%s/%s", POSTPATH, obj_ptr->use_output); <br /> unlink(file); <br /> } <br />/* 여기까지 추가 */ <br /> <br /> del_obj_crt(obj_ptr, ply_ptr); <br /> print(fd, "당신은 %1i%j 태웠습니다.", obj_ptr,"3"); <br /> broadcast_rom(fd, rom_ptr->rom_num, "\n%M%j %1i%j 태웠습니다.", <br /> ply_ptr,"1", obj_ptr,"3"); <br /> free_obj(obj_ptr); <br /> ply_ptr->gold += 4; <br /> ply_ptr->experience += 1; <br /> print(fd, "\n당신은 약간의 상금과 경험을 받았습니다."); <br /> if(((time(0)+mrand(1,100))%250)==9) { <br /> print(fd,"\n신이 당신의 정성이 갸륵해서 경험치와 돈벼락을 내립니다."); <br /> broadcast_rom(fd,rom_ptr->rom_num, <br /> "\n신이 %M에게 경험치와 돈벼락을 내립니다.", ply_ptr); <br /> ply_ptr->gold+=100000; <br /> ply_ptr->experience+=10; <br /> } <br /> ply_burn_time[fd]=t+2; <br /> <br /> return(0); <br />} <br /> <br /> <br />----- <br /> <br />보충설명> <br /> <br /> 다른 사람이 편지를 보내면, 그 내용은 각각의 화일로 저장이 돼며, <br /> 받는 사람이 우체국에서 "편지받기"를 하면, 편지 라는 아이템이 생성돼어 <br /> 자신의 소지품에 추가가 됩니다. <br /> 편지의 내용을 보는 것은, [편지 ### 읽어] 를 통해서. 내용을 볼수 있으며, <br /> 편지 아이템을 소각했을때는, 그 편지의 내용도 지워지게 했습니다. <br /> 따라서, 그 편지라는 아이템을 계속적으로 가지고 있다면, 언제든지 읽을수 <br /> 있으며, 필요없는 편지는 소각을 통해서 없앨수 있습니다. <br /> <br /> 이때 주의사항은, 사용자정보 명령에서 "읽지않은 편지 시간" 나오는 것으로, <br /> 이 부분까지는, 제가 고치지 않습니다. <br /> 참고라면, 받은 편지가 있다 없다라는것은. 위의 편지받기 함수를 참고하시면 <br /> 됩니다. <br /> 이걸로 편지 시스템 바꾸실때는.. 기존의 편지 데이터를 전부 없애고 하세요. <br /> <br /> 위의 소스는 원본 소스 그대로에 추가한것이며, 위에 언급한 화일의 함수부를 <br /> 고치시면 됩니다. 패치로 만들려하니, 이미 많은 분들이 소스를 고쳤을꺼라서 <br /> 그냥 이렇게 올립니다. <br /> 그리고, 이걸 만들면서, 컴파일은 해보았으나, 실제로 실행은 시켜보지 않아서 <br /> 제대로 잘 돌아갈지는 모르겠네요. ^^; <br /> 제대로 돌아가지 않을때는, 저한테 항의를 하지 마시고, 스스로 찾아보세요. <br /> 그다지 어렵게 짠것도 아니니까요. <br /> 그리고, 실제로 제가 만든 머드에서는 이런 형식의 우체국을 만들어서 사용중 <br /> 이니, 큰 문제는 없을꺼라 생각합니다. <br />
0
0
새글
답변
수정
삭제
최신목록
전체목록
이자소스
직업추가
0
Comments
-표시할 내용이 없습니다.-
코멘트를 삭제할 비밀번호를 입력하세요.
비밀번호:
댓글에 답하기
입력
닫기
정회원 이상만 코멘트 쓰기가 가능합니다.
총 게시물 107개 / 검색된 게시물: 107개
누구든지 머드 강의를 올리수 있는 곳입니다...^^
[circle]
EUC-KR 및 UTF8 한글 처리
0
262
0
0
울보천사
2024-01-08
[기타]
유니코드(utf-8) 한글 조사 처리
0
1169
0
0
암로
2020-08-01
[hanlp]
지도소스 수정
1
1361
1
0
오코
2018-06-07
[기타]
머드 계보
1
10413
0
0
암로
2012-04-28
[mordor]
의형제
0
5309
0
0
LostMemory
2007-10-19
[mordor]
폭탄소스
0
5564
0
0
LostMemory
2007-10-19
[mordor]
패거리 등급 변경
0
6288
0
0
LostMemory
2007-10-19
[mordor]
날짜관리
0
4529
0
0
LostMemory
2007-10-19
[mordor]
마법 추가하기
0
5313
0
0
LostMemory
2007-10-19
[hanlp]
레벨 최대화 32767
0
5438
0
0
LostMemory
2007-10-19
[mordor]
분신이란 기술
0
4783
0
0
LostMemory
2007-10-19
[mordor]
연타
0
4444
0
0
LostMemory
2007-10-19
[mordor]
이자소스
0
5276
0
0
LostMemory
2007-10-19
[mordor]
편지를 아이템화
0
3649
0
0
LostMemory
2007-10-19
[mordor]
직업추가
0
3214
0
0
LostMemory
2007-10-19
[mordor]
패거리 상점 만들기
0
3225
0
0
LostMemory
2007-10-19
[기타]
단땅..프로그램은 멀로 하는거죰.. 첨이라..^^
1
3721
0
0
사마천
2006-06-22
[circle]
오래된거지만.. 써클머드 화일들에 대한 간략한 설명..
2
4240
0
0
머큐리
2006-06-10
[기타]
Dead Souls 2 is now available
2
2979
0
0
Cratylus M.
2006-03-14
[mordor]
Ctrl + Enter 패치 소스 입니다.
0
3122
0
0
탈퇴
2005-02-01
1
2
3
4
5
6
다음
검색
글쓰기
최신목록
전체목록
시작일
종료일
분류별 검색
전체보기
기타
circle
hanlp
mordor
소스분석
흑염
천무혼
검색어
이름
제목
내용
검색
닫기
로그인
회원가입
계정찾기
개인정보처리방침
이용약관
PC화면
Copyright (c) 텍스트머드클럽. All rights reserved.
쪽지를 전송하고 있습니다. 잠시 기다려주세요.
쪽지보내기
받는이(ID/닉네임)
닉네임으로 입력
내용
쪽지가 도착하였습니다.
쪽지함
쪽지 내용을 읽어오고 있습니다. 잠시 기다려주세요.
--