[hanlp]다시.... 소스 부탁
member photo Xerxes 6 1,859 0 2004-01-17 20:48:32
0
6Comments
member photo
MaGuN 2004.01.17(토) 오후 09:10:30

기본적인 플로어차트가 이것이 맞는가요?

----------------------------
플레이어가 노인에게 가서 '노인 약 대화'라는 명령을 치면

>>플레이어가 이미 '노인 약 대화'를 쳤는지 검색

만약 플레이어 데이타의 임무값이 1이면 -> 빨리 구해오라고 말을 하고 종료
아니면 -> {
플레이어에게 허브를 구해오라고 말을 하고
플레이어의 데이타에 임무값을 1로 셋팅한다.
}
----------------------------
허브를 가지고 노인에게 가서 '노인 허브 대화' 라고 명령을 치면

>> 임무를 받은 상태인지 검색

만약 플레이어의 임무값이 1보다 작으면 -> 허브는 몸에 좋다고 엉뚱한 말을 해준다.
아니면 만약 플레이어의 임무값이 1이면 -> 소지품에 허브가 있는지 검색
만약 허브가 있으면 {
어떤 아이템을 줄건지 검색해서 준다.
플레이어의 임무값을 지운다.
}
아니면 만약 허브가 없으면 {
허브를 가지고 오라고 말을 해 주고 종료.
}
member photo
Xerxes 2004.01.17(토) 오후 09:50:12
네...
자세한 설명과 소스 부탁드립니다.
이런 부탁을 드려서 죄송합니다.
member photo
MaGuN 2004.01.17(토) 오후 10:51:18
#include <daemons.h>
#include <mudlib.h>

inherit DAEMON;

int cmd(string str) {

string who, msg, *ignores, name;
object th, ob;

if( !str || sscanf( str, "%s %s", who, msg ) != 2 ) {
notify_fail("\n* 사용법 : <대상> <할말> 대화\n\n");
return 0;
}

th = this_player();
name = th->query("이름");

ob = find_player( who );
if( !ob ) {
string func;
/* 그런 사용자가 없다면 현재 룸에 NPC가 있는지 본다. */
ob = present(who, environment(th));
if( !ob ) {
/* 그런 이름을 가진 NPC가 없다면 */
return notify_fail("그런 대상을 찾을 수 없습니다.\n" );
}
if( !living(ob) ) {
/* 오브젝트는 있지만 살아 있는 NPC가 아니라면 */
write("당신은 "+han_obj(who)+" 보고 중얼 거립니다.\n" );
say(han_iga(name)+" "+han_obj(who)+" 보고 중얼 거립니다.\n" );
return 1;
}
/* 룸에 NPC가 있고 NPC에 event_func이라는 값이 있으면 함수를 실행한다. */
if ((func = ob->query("event_func"))) {
call_other(ob,func,th,msg);
say(han_iga(name)+" "+han_tool(who)+" 대화를 나눕니다.\n" );
return 1;
}
}

ignores = ob->query("대화거부");
if (ignores) if( member_array(name,ignores) != -1) {
write(who+"님은 당신과의 대화를 거부하고 있습니다.\n");
return 1;
}

ob->set_temp("대화상대",name);
tell_object(ob,"* "+name+"님이 보낸 메세지 : "+msg+"\n");
write("당신은 "+who+"님께 대화를 보냈습니다.\n");

return 1;
}
member photo
MaGuN 2004.01.17(토) 오후 10:51:51
위 루틴은 대화.c 입니다.
member photo
MaGuN 2004.01.17(토) 오후 10:52:09
#include <mudlib.h>
inherit MONSTER ;

void create ()
{
set ("레벨",1);
::create() ;
seteuid(getuid()) ;
set ("짧은설명", "나이를 짐작하기 어려울 정도로 노쇠한 할아버지가 앉아 있다.") ;
set ("긴설명","금방이라도 저세상으로 갈것 같은 노인이다.\n");
enable_commands() ;
set ("아이디", ({ "노인","할아버지" }) ) ;
set_name ("노인") ;
set_living_name("노인");
set ("무기이름","지팡이");
set_verbs( ({ "때렸다.","휘둘렀다." }) );
set("event_func","event_msg");
}

int event_msg(object th, string str) {

/* 플레이어가 노인에게 와서 '노인 약 대화' 라고 했을때. */
if( str == "약" ) {
/* 임무를 시작한적이 없다면 허브를 구해 오라고 한다. */
if( !th->query("이벤트/허브") ) {
write("노인 : 약이 필요한가? 그렇다면 허브를 구해오게\n");
th->set("이벤트/허브",1);
return 1;
}
/* 이미 '노인 약 대화'를 했다면 빨리 구해 오라고 한다. */
write("노인 : 허브를 구해 오라니까.. 여기서 뭐하고 있나?\n");
return 1;
}

/* 플레이어가 노인에게 와서 '노인 허브 대화' 라고 했을때. */
if( str == "허브" ) {
string *obs, *path, msg;
object item, ob;
int ran;

/* '노인 약 대화'를 먼저 안하고 '노인 허브 대화' 라고 했다면. */
if( !th->query("이벤트/허브") ) {
write("노인 : 허브? 몸에 아주 좋은거라네..\n");
return 1;
}
/* 소지품에 허브가 없으면 허브를 가지고 오라고 한다. */
if( !(item = present("허브",th)) ) {
write("노인 : 그래.. 허브 말이야.. 허브를 구해 오라구!\n");
return 1;
}

/* 플레이어에게 줄 아이템의 이름 */
obs = ({ "러브캔디", "매직캔디" });

/* 플레이어에게 줄 아이템의 경로 */
path = ({ "/obj/아이템/러브캔디", "/obj/아이템/매직캔디" });

/* 어떤 아이템을 줄건지 렌덤값을 만든다. */
ran = random(sizeof(obs));

/* 플레이어에게 줄 아이템이 없거나 아이템에 에러가 있다면 */
if( !(ob = clone_object(path[ran])) ) {
write(
"노인 : "+path[ran]+" 화일이 없거나 화일에 에러가 있네"
" 게임의 운영자에게 버그라고 알려 주게나.\n"
);
return 1;
}
/* 일단 사용자 소지품에 있는 허브를 잠시 옮겨 놓는다. */
item->move(this_object());

/* 미리 출력할 메세지를 정의해 놓는다. */
msg = "노인 : 허브를 구해 왔구먼.. 좋아 자네에게 상품을 주겠네.\n";

/* 사용자가 가진게 많아서 아이템을 못받는다면 처리한다. */
if( ob->move(th) ) {
msg += " 하지만 자넨 가진게 너무 많아서 줄수가 없군.\n";
/* 만들어 놨던 아이템을 없앤다. */
ob->remove();
/* 플레이어에게 허브를 돌려 준다. */
item->move(th);
/* 메세지를 출력하고 종료한다. */
write(msg);
return 1;
}
/* 사용자가 아이템을 잘 받았다면 허브를 없앤다. */
item->remove();

/* 임무에 관한 기록을 지운다. */
th->delete("이벤트/허브");

/* 사용자에게 아이템을 준다는 메세지를 뿌려 준다. */
msg += "\n노인이 당신에게 "+han_obj(obs[ran])+" 주었습니다.\n";
write(msg);

/*
* 같은 룸에 있는 플레이어를 제외한 모든 사람들에게
* 노인이 누구에게 아이템을 준다는 메세지를 뿌려 준다.
*/
message("이벤트",
"노인이 "+th->query("이름")+"에게 "+han_obj(obs[ran])+" 줍니다.\n",
environment(th),th);
return 1;
}
write("노인이 고개를 들어 하늘을 봅니다.\n");
return 1;
}
member photo
MaGuN 2004.01.17(토) 오후 10:53:15
위 루틴은 노인.c 입니다.
여기 게시판이 탭키나 스페이스를 먹어 버리는 군요..
원본은 자료실에 따로 올려 놓았습니다.
코멘트를 삭제할 비밀번호를 입력하세요.
비밀번호:
정회원 이상만 코멘트 쓰기가 가능합니다.
총 게시물 954개 / 검색된 게시물: 954개
쪽지를 전송하고 있습니다. 잠시 기다려주세요.
쪽지보내기
받는이(ID/닉네임)
내용
쪽지가 도착하였습니다.
쪽지 내용을 읽어오고 있습니다. 잠시 기다려주세요.
--