8Comments
MaGuN
2004.01.20(화) 오후 03:33:28
사실 공개적인 게임에서 1번 방식을 선택한다면 한 사람이 수백개의 명령을 실행하는 동안
다른 사람은 렉이 걸리거나 명령자체가 실행이 되지 않을수가 있습니다.
수십명또는 수백명의 사용자들이 접속해서 게임을 하는데.. 한 사람드로 인해서 많은 사람들이
불편해 질 수가 있습니다.
원래 LP머드의 특성중의 하나는 머드 엔진 자체에 일정한 evaluaction cost를 두고.. 있습니다.
이것은 한 하트비트에 실행할수 있는 cost를 제한 하는것으로..
게임의 운영진 레벨을 가진 사람이 <명령> 명령체크 라고 치면 명령이 얼마나 많은 evalu cost를
쓰는이 알수 있으며, 이런 evalu cost를 제한함으로 인해서 수 많은 명령의 입력과 처리를 위해서
머드 엔진에서 걸리는 과부하와 렉을 줄일수 있도록 한 것입니다.
되도록이면 두번째 방법을 선택하는것이 좋을듯 합니다.
다른 사람은 렉이 걸리거나 명령자체가 실행이 되지 않을수가 있습니다.
수십명또는 수백명의 사용자들이 접속해서 게임을 하는데.. 한 사람드로 인해서 많은 사람들이
불편해 질 수가 있습니다.
원래 LP머드의 특성중의 하나는 머드 엔진 자체에 일정한 evaluaction cost를 두고.. 있습니다.
이것은 한 하트비트에 실행할수 있는 cost를 제한 하는것으로..
게임의 운영진 레벨을 가진 사람이 <명령> 명령체크 라고 치면 명령이 얼마나 많은 evalu cost를
쓰는이 알수 있으며, 이런 evalu cost를 제한함으로 인해서 수 많은 명령의 입력과 처리를 위해서
머드 엔진에서 걸리는 과부하와 렉을 줄일수 있도록 한 것입니다.
되도록이면 두번째 방법을 선택하는것이 좋을듯 합니다.
MaGuN
2004.01.20(화) 오후 03:44:56
두번째 방법 처럼 어느정도의 명령만 수행하고 이후의 것은 무시 되도록 하려면
1. user.c의 heart_beat() 함수에 set_temp("입력제한",20); 을 넣습니다.
2. user.c의 cmd_hook() 함수의 루틴중 앞에 부분에서 this_object()의
query_temp("입력제한") 을 검색해서 만약 수치가 1보다 작다면 return 0;
을 시킵니다.
그리고 cmd_hook()함수에서 return foo; 의 바로 윗줄 들에서
set_temp("입력제한",query_temp("입력제한")-1);
과 같은 형식으로 넣어 주면 됩니다.
이외에도 여러가지 방법이 있겠습니다만...
어떤 방법이 코딩하기에 편리한지, 또는 머드를 관리하기에 편리한지를 따져보고
코딩을 하시면 될것 같습니다. ^^
1. user.c의 heart_beat() 함수에 set_temp("입력제한",20); 을 넣습니다.
2. user.c의 cmd_hook() 함수의 루틴중 앞에 부분에서 this_object()의
query_temp("입력제한") 을 검색해서 만약 수치가 1보다 작다면 return 0;
을 시킵니다.
그리고 cmd_hook()함수에서 return foo; 의 바로 윗줄 들에서
set_temp("입력제한",query_temp("입력제한")-1);
과 같은 형식으로 넣어 주면 됩니다.
이외에도 여러가지 방법이 있겠습니다만...
어떤 방법이 코딩하기에 편리한지, 또는 머드를 관리하기에 편리한지를 따져보고
코딩을 하시면 될것 같습니다. ^^
탈퇴
2004.01.20(화) 오후 09:44:29(220.88.xxx.xx)
여기도 먼저 답변에 대해 감사드리며, 꾸버벅~~ 아울러 ^^;; 에러에 대한 고찰을 ㅠㅠ;;
요거는 에러는 안 나는데 먹히지가 않네요..
nomask static int cmd_hook(string cmd) {
string file, verb;
object env;
int foo, tmp;
verb = query_verb();
env = environment();
if ( this_object()->query_temp("입력제한") < 1 ) return 0;
if (env && env->valid_exit(verb)) {
if( tmp < 0 ) return 0;
return go_exit(verb, env);
}
file = (string)CMD_D->find_cmd(verb, explode(query("경로"), ":"));
set_temp("입력제한",query_temp("입력제한")-1);
if (file && file != "") {
if( tmp < 0 ) return 0;
foo = (int)call_other(file, "cmd", cmd);
if( !foo ) foo = (int)call_other(file, "cmd_" + verb, cmd);
return foo;
}
foo = (int)EMOTE_D->parse(verb, cmd);
if (foo) {
return foo;
}
return 0;
}
void heart_beat() {
int age;
delete_temp("지난잡담");
continue_attack();
unblock_attack();
heal_up();
age = query("나이");
if (!query_temp("last_age_set")) set_temp("last_age_set", time());
age += (time() - query_temp("last_age_set"));
set_temp("last_age_set", time());
ob_data["나이"] = age;
set_temp("입력제한",20);
}
어디가 잘못된 걸까요;; 어쩌다 한 번씩 명령이 안 먹히고 '^^;' <--이게 뜰 때도 있긴 한데.. 100개 정도 명령을 입력하면 뚝뚝 끊기면서 원래처럼 됩니당;;
요거는 에러는 안 나는데 먹히지가 않네요..
nomask static int cmd_hook(string cmd) {
string file, verb;
object env;
int foo, tmp;
verb = query_verb();
env = environment();
if ( this_object()->query_temp("입력제한") < 1 ) return 0;
if (env && env->valid_exit(verb)) {
if( tmp < 0 ) return 0;
return go_exit(verb, env);
}
file = (string)CMD_D->find_cmd(verb, explode(query("경로"), ":"));
set_temp("입력제한",query_temp("입력제한")-1);
if (file && file != "") {
if( tmp < 0 ) return 0;
foo = (int)call_other(file, "cmd", cmd);
if( !foo ) foo = (int)call_other(file, "cmd_" + verb, cmd);
return foo;
}
foo = (int)EMOTE_D->parse(verb, cmd);
if (foo) {
return foo;
}
return 0;
}
void heart_beat() {
int age;
delete_temp("지난잡담");
continue_attack();
unblock_attack();
heal_up();
age = query("나이");
if (!query_temp("last_age_set")) set_temp("last_age_set", time());
age += (time() - query_temp("last_age_set"));
set_temp("last_age_set", time());
ob_data["나이"] = age;
set_temp("입력제한",20);
}
어디가 잘못된 걸까요;; 어쩌다 한 번씩 명령이 안 먹히고 '^^;' <--이게 뜰 때도 있긴 한데.. 100개 정도 명령을 입력하면 뚝뚝 끊기면서 원래처럼 됩니당;;
탈퇴
2004.01.20(화) 오후 09:47:19(220.88.xxx.xx)
cmd_hook 함수부분을 아래와 같이 바꾸니(입력제한을 return foo; 바로 윗줄로!) 제한 이후의 명령을 무시하기는 하는데 또 다시 뚝뚝 끊기면서 실행이 됩니다. (제한이 20갠데, 50개의 명령을 입력했다면 20개의 명령이 실행되고 몇 개 무시하고 또 나머지는 명령이 실행이 됩니다.)
nomask static int cmd_hook(string cmd) {
string file, verb;
object env;
int foo, tmp;
verb = query_verb();
env = environment();
if ( this_object()->query_temp("입력제한") < 1 ) return 0;
if (env && env->valid_exit(verb)) {
if( tmp < 0 ) return 0;
return go_exit(verb, env);
}
file = (string)CMD_D->find_cmd(verb, explode(query("경로"), ":"));
if (file && file != "") {
if( tmp < 0 ) return 0;
foo = (int)call_other(file, "cmd", cmd);
if( !foo ) foo = (int)call_other(file, "cmd_" + verb, cmd);
set_temp("입력제한",query_temp("입력제한")-1);
return foo;
}
foo = (int)EMOTE_D->parse(verb, cmd);
if (foo) {
set_temp("입력제한",query_temp("입력제한")-1);
return foo;
}
return 0;
}
nomask static int cmd_hook(string cmd) {
string file, verb;
object env;
int foo, tmp;
verb = query_verb();
env = environment();
if ( this_object()->query_temp("입력제한") < 1 ) return 0;
if (env && env->valid_exit(verb)) {
if( tmp < 0 ) return 0;
return go_exit(verb, env);
}
file = (string)CMD_D->find_cmd(verb, explode(query("경로"), ":"));
if (file && file != "") {
if( tmp < 0 ) return 0;
foo = (int)call_other(file, "cmd", cmd);
if( !foo ) foo = (int)call_other(file, "cmd_" + verb, cmd);
set_temp("입력제한",query_temp("입력제한")-1);
return foo;
}
foo = (int)EMOTE_D->parse(verb, cmd);
if (foo) {
set_temp("입력제한",query_temp("입력제한")-1);
return foo;
}
return 0;
}
MaGuN
2004.01.20(화) 오후 10:05:53
nomask static int cmd_hook(string cmd) {
string file, verb;
object env;
int foo, tmp;
verb = query_verb();
env = environment();
tmp = queyr_temp("입력제한");
// 입력제한이 1보다 작다면 더 이상의 명령을 수행하지 않는다.
if ( tmp < 1 ) {
return 0;
}
if (env && env->valid_exit(verb)) {
set_temp("입력제한",tmp-1);
return go_exit(verb, env);
}
file = (string)CMD_D->find_cmd(verb, explode(query("경로"), ":"));
if (file && file != "") {
foo = (int)call_other(file, "cmd", cmd);
if( !foo ) foo = (int)call_other(file, "cmd_" + verb, cmd);
if( foo ) {
set_temp("입력제한",tmp-1);
return foo;
}
}
foo = (int)EMOTE_D->parse(verb, cmd);
if (foo) {
set_temp("입력제한",tmp-1);
return foo;
}
return 0;
}
string file, verb;
object env;
int foo, tmp;
verb = query_verb();
env = environment();
tmp = queyr_temp("입력제한");
// 입력제한이 1보다 작다면 더 이상의 명령을 수행하지 않는다.
if ( tmp < 1 ) {
return 0;
}
if (env && env->valid_exit(verb)) {
set_temp("입력제한",tmp-1);
return go_exit(verb, env);
}
file = (string)CMD_D->find_cmd(verb, explode(query("경로"), ":"));
if (file && file != "") {
foo = (int)call_other(file, "cmd", cmd);
if( !foo ) foo = (int)call_other(file, "cmd_" + verb, cmd);
if( foo ) {
set_temp("입력제한",tmp-1);
return foo;
}
}
foo = (int)EMOTE_D->parse(verb, cmd);
if (foo) {
set_temp("입력제한",tmp-1);
return foo;
}
return 0;
}
MaGuN
2004.01.20(화) 오후 10:07:40
void heart_beat() {
int age;
delete_temp("지난잡담");
set_temp("입력제한",20);
continue_attack();
unblock_attack();
heal_up();
age = query("나이");
if (!query_temp("last_age_set")) set_temp("last_age_set", time());
age += (time() - query_temp("last_age_set"));
set_temp("last_age_set", time());
ob_data["나이"] = age;
}
int age;
delete_temp("지난잡담");
set_temp("입력제한",20);
continue_attack();
unblock_attack();
heal_up();
age = query("나이");
if (!query_temp("last_age_set")) set_temp("last_age_set", time());
age += (time() - query_temp("last_age_set"));
set_temp("last_age_set", time());
ob_data["나이"] = age;
}
MaGuN
2004.01.20(화) 오후 10:08:34
위 두가지 함수를 넣고 나서.. 머드를 리부팅 시키거나..
-R /std/user 갱신 이라고 입력하고..
재 접속하면 적용이 됩니다.
-R /std/user 갱신 이라고 입력하고..
재 접속하면 적용이 됩니다.
탈퇴
2004.01.21(수) 오전 04:02:49(220.88.xxx.xx)
음.. 이 소스를 적용시켜보았습니다만.. 왜 자꾸 뚝뚝 끊기면서 실행이 될까요.. Hanlp가 뚝뚝 끊기면서까지 실행을 모두 하려고만 하는데.. ㅠㅠ;;아.. 소스까지 주셨는데 잘 못 써먹는 거 같네요..;
코멘트를 삭제할 비밀번호를 입력하세요.
정회원 이상만 코멘트 쓰기가 가능합니다.
총 게시물 954개 / 검색된 게시물: 954개
글번호 | 제목 | 작성자 | 조회수 | 좋아요 | 싫어요 | 작성일 | |
---|---|---|---|---|---|---|---|
[기타]질문 답변 외 글은 자유 게시판에 올려 주세요... | 머드클럽 | 4341 | 0 | 0 | 2004-01-01 | ||
74 | [hanlp] 질문과 마군님께 요청...^^; [3] | Tabris | 2003 | 0 | 0 | 2004-01-21 | |
73 | [hanlp] 그렇다면... | Xerxes | 1738 | 0 | 0 | 2004-01-21 | |
72 | [hanlp] 이거는 질문~ [2] | 혼 | 1744 | 0 | 0 | 2004-01-21 | |
71 | [hanlp] 마군님~~ 요청좀 [3] | 혼 | 1998 | 0 | 0 | 2004-01-21 | |
70 | [hanlp] 잡종 질문;; [2] | 탈퇴 | 1844 | 0 | 0 | 2004-01-21 | |
69 | [hanlp] 업글 무기와 임무 [3] | Xerxes | 1788 | 0 | 0 | 2004-01-21 | |
68 | [hanlp] HanLP와 십웅기... [7] | Xerxes | 2343 | 0 | 0 | 2004-01-20 | |
67 | [hanlp] 게시판 같은 것에 읽었는지 안 읽었는지 여부를 체크하려면? [6] | 탈퇴 | 2147 | 0 | 0 | 2004-01-20 | |
66 | [hanlp] 이동이나 특정 행동을 많이 요청할 때 버벅거림을 없애려면? [8] | 탈퇴 | 2155 | 0 | 0 | 2004-01-20 | |
65 | [hanlp] 자료실 최신버전 받아서 해 보니 다음 에러가.. [5] | 탈퇴 | 2383 | 0 | 0 | 2004-01-20 | |
64 | [hanlp] 약간 염치 없는 질문 같은데... [1] | Xerxes | 1938 | 0 | 0 | 2004-01-19 | |
63 | [circle] 신세계에서 [4] | 굿! | 1944 | 0 | 0 | 2004-01-19 | |
62 | [circle] 질문! ^^ [5] | 최루탄 | 1980 | 0 | 0 | 2004-01-19 | |
61 | [hanlp] 에러좀 고쳐주세염~~ | 혼 | 1870 | 0 | 0 | 2004-01-19 | |
60 | [mordor] 무한대전에 관해;;[요청&질문] [3] | 남기모 | 2106 | 0 | 0 | 2004-01-19 | |
59 | [circle] 신세계 질문요. [12] | 최루탄 | 2007 | 0 | 0 | 2004-01-19 | |
58 | [hanlp] 자료실 쥬데직공원 소스에서.. 게시판(board)부분의 쓰기기능 [10] | 탈퇴 | 8627 | 0 | 0 | 2004-01-19 | |
57 | [hanlp] 리셋(다운 명령)을 한 다음 자동으로 서버 실행하려면.. [7] | 탈퇴 | 2008 | 0 | 0 | 2004-01-19 | |
56 | [circle] 신세계 2.5(써클)에 대한 질문. [8] | 최루탄 | 2096 | 0 | 0 | 2004-01-18 | |
55 | [기타] 파운데이션(mudos) 에러 조언좀 [2] | 혼 | 1867 | 0 | 0 | 2004-01-18 |