contact 머드클럽 문의하기 카카오톡
즐겨찾기 추가plus 머드클럽이 새롭게 오픈하였습니다!
sub image
[hanlp]이동이나 특정 행동을 많이 요청할 때 버벅거림을 없애려면?
member photo 탈퇴 8 2,152 0 2004-01-20 05:00:38
0
8Comments
member photo
MaGuN 2004.01.20(화) 오후 03:33:28
사실 공개적인 게임에서 1번 방식을 선택한다면 한 사람이 수백개의 명령을 실행하는 동안
다른 사람은 렉이 걸리거나 명령자체가 실행이 되지 않을수가 있습니다.
수십명또는 수백명의 사용자들이 접속해서 게임을 하는데.. 한 사람드로 인해서 많은 사람들이
불편해 질 수가 있습니다.

원래 LP머드의 특성중의 하나는 머드 엔진 자체에 일정한 evaluaction cost를 두고.. 있습니다.
이것은 한 하트비트에 실행할수 있는 cost를 제한 하는것으로..

게임의 운영진 레벨을 가진 사람이 <명령> 명령체크 라고 치면 명령이 얼마나 많은 evalu cost를
쓰는이 알수 있으며, 이런 evalu cost를 제한함으로 인해서 수 많은 명령의 입력과 처리를 위해서
머드 엔진에서 걸리는 과부하와 렉을 줄일수 있도록 한 것입니다.

되도록이면 두번째 방법을 선택하는것이 좋을듯 합니다.


member photo
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);
과 같은 형식으로 넣어 주면 됩니다.

이외에도 여러가지 방법이 있겠습니다만...
어떤 방법이 코딩하기에 편리한지, 또는 머드를 관리하기에 편리한지를 따져보고
코딩을 하시면 될것 같습니다. ^^
member photo
탈퇴 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개 정도 명령을 입력하면 뚝뚝 끊기면서 원래처럼 됩니당;;
member photo
탈퇴 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;
}
member photo
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;
}
member photo
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;
}
member photo
MaGuN 2004.01.20(화) 오후 10:08:34
위 두가지 함수를 넣고 나서.. 머드를 리부팅 시키거나..

-R /std/user 갱신 이라고 입력하고..
재 접속하면 적용이 됩니다.

member photo
탈퇴 2004.01.21(수) 오전 04:02:49(220.88.xxx.xx)
음.. 이 소스를 적용시켜보았습니다만.. 왜 자꾸 뚝뚝 끊기면서 실행이 될까요.. Hanlp가 뚝뚝 끊기면서까지 실행을 모두 하려고만 하는데.. ㅠㅠ;;아.. 소스까지 주셨는데 잘 못 써먹는 거 같네요..;
코멘트를 삭제할 비밀번호를 입력하세요.
비밀번호:
정회원 이상만 코멘트 쓰기가 가능합니다.
총 게시물 954개 / 검색된 게시물: 954개
글번호   제목 작성자 조회수 싫어요 작성일
  [기타]질문 답변 외 글은 자유 게시판에 올려 주세요... 머드클럽 4341 0 0 2004-01-01
74 [hanlp] 질문과 마군님께 요청...^^; [3] Tabris 2000 0 0 2004-01-21
73 [hanlp] 그렇다면... Xerxes 1737 0 0 2004-01-21
72 [hanlp] 이거는 질문~ [2] 1742 0 0 2004-01-21
71 [hanlp] 마군님~~ 요청좀 [3] 1996 0 0 2004-01-21
70 [hanlp] 잡종 질문;; [2] 탈퇴 1842 0 0 2004-01-21
69 [hanlp] 업글 무기와 임무 [3] Xerxes 1785 0 0 2004-01-21
68 [hanlp] HanLP와 십웅기... [7] Xerxes 2340 0 0 2004-01-20
67 [hanlp] 게시판 같은 것에 읽었는지 안 읽었는지 여부를 체크하려면? [6] 탈퇴 2144 0 0 2004-01-20
66 [hanlp] 이동이나 특정 행동을 많이 요청할 때 버벅거림을 없애려면? [8] 탈퇴 2153 0 0 2004-01-20
65 [hanlp] 자료실 최신버전 받아서 해 보니 다음 에러가.. [5] 탈퇴 2380 0 0 2004-01-20
64 [hanlp] 약간 염치 없는 질문 같은데... [1] Xerxes 1935 0 0 2004-01-19
63 [circle] 신세계에서 [4] 굿! 1942 0 0 2004-01-19
62 [circle] 질문! ^^ [5] 최루탄 1978 0 0 2004-01-19
61 [hanlp] 에러좀 고쳐주세염~~ 1867 0 0 2004-01-19
60 [mordor] 무한대전에 관해;;[요청&질문] [3] 남기모 2103 0 0 2004-01-19
59 [circle] 신세계 질문요. [12] 최루탄 2004 0 0 2004-01-19
58 [hanlp] 자료실 쥬데직공원 소스에서.. 게시판(board)부분의 쓰기기능 [10] 탈퇴 8624 0 0 2004-01-19
57 [hanlp] 리셋(다운 명령)을 한 다음 자동으로 서버 실행하려면.. [7] 탈퇴 2006 0 0 2004-01-19
56 [circle] 신세계 2.5(써클)에 대한 질문. [8] 최루탄 2094 0 0 2004-01-18
55 [기타] 파운데이션(mudos) 에러 조언좀 [2] 1864 0 0 2004-01-18
쪽지를 전송하고 있습니다. 잠시 기다려주세요.
쪽지보내기
받는이(ID/닉네임)
내용
쪽지가 도착하였습니다.
쪽지 내용을 읽어오고 있습니다. 잠시 기다려주세요.
--