[기타]HanLP 지도명령 mudos 버젼으로 바꾸기.
천유
3,102
0
0
2004-11-21 23:21:22
얼마전에 지도명령의 필요성을 느껴서
HanLP의 지도명령어를 mudos버젼으로 바꿔봣습니다.
음, 그래서 어쩌다보니 공개를 -- 머 공개를껏도 없겟네요;;
#include <구조.h>
string *res = ({ });
int *room_num = ({ });
void ch_exit(int roomnum, string room);
string map()
{
int j=0;
string arg, maptext=" ";
foreach( arg in res ) {
j += 1;
maptext += arg;
if( j == 11 ) {
maptext += "\n ";
j = 0;
}
}
return maptext;
}
void exit_mark(object ob, mapping exits, int roomnum, string short_name)
{
int i;
string *dir, short, tmp;
if( res[roomnum] == " " ) {
if( !short_name || short_name == "") short = " ???? ";
else {
if( strlen(short_name) >= 5 ) {
if( short_name[4] == 32 )
short = " "+short_name[0..3]+" ";
else
short = short_name[0..5];
}
else
short = sprintf("%|6s",short_name);
}
if( roomnum == 60 ) res[roomnum] = "[1;32;40m"+short+"[37;0;40m";
else res[roomnum] = "[37;0;40m"+short+"[1;37;40m";
}
else return;
dir = ob->getPureExits();
for (i = 0; i < sizeof(exits); i++) {
tmp = ob->getExit(dir[i]);
switch (dir[i]) {
case "동":
if( res[roomnum+1] == " " ) res[roomnum+1] = "[0;33;40m ─〉 [37;0;40m";
else res[roomnum+1] = "[0;33;40m ── [37;0;40m";
ch_exit(roomnum+2,tmp);
break;
case "서":
if( res[roomnum-1] == " " ) res[roomnum-1] = "[0;33;40m 〈─ [37;0;40m";
else res[roomnum-1] = "[0;33;40m ── [37;0;40m";
ch_exit(roomnum-2,tmp);
break;
case "남":
if( res[roomnum+11] == " " ) res[roomnum+11] = "[0;33;40m ↓ [37;0;40m";
else res[roomnum+11] = "[0;33;40m │ [37;0;40m";
ch_exit(roomnum+22,tmp);
break;
case "북":
if( res[roomnum-11] == " " ) res[roomnum-11] = "[0;33;40m ↑ [37;0;40m";
else res[roomnum-11] = "[0;33;40m │ [37;0;40m";
ch_exit(roomnum-22,tmp);
break;
case "북동":
if( res[roomnum-10] == " " ) res[roomnum-10] = "[0;33;40m ↗ [37;0;40m";
else res[roomnum-10] = "[0;33;40m / [37;0;40m";
ch_exit(roomnum-20,tmp);
break;
case "북서":
if( res[roomnum-12] == " " ) res[roomnum-12] = "[0;33;40m ↖ [37;0;40m";
else res[roomnum-12] = "[0;33;40m \ [37;0;40m";
ch_exit(roomnum-24,tmp);
break;
case "남동":
if( res[roomnum+12] == " " ) res[roomnum+12] = "[0;33;40m ↘ [37;0;40m";
else res[roomnum+12] = "[0;33;40m \ [37;0;40m";
ch_exit(roomnum+24,tmp);
break;
case "남서":
if( res[roomnum+10] == " " ) res[roomnum+10] = "[0;33;40m ↙ [37;0;40m";
else res[roomnum+10] = "[0;33;40m / [37;0;40m";
ch_exit(roomnum+20,tmp);
break;
case "위":
if( res[roomnum] == "[0;33;40m ∨ [37;0;40m" )
res[roomnum] = "[0;33;40m ↕ [37;0;40m";
else
res[roomnum] = "[0;33;40m ∧ [37;0;40m";
break;
case "아래":
case "밑":
if(res[roomnum] == "[0;33;40m ∧ ")
res[roomnum] = "[0;33;40m ↕ ";
else
res[roomnum] = "[0;33;40m ∨ ";
break;
}
}
return;
}
void ch_exit(int roomnum, string room) {
object ob;
string short_name;
mapping exit;
if( !roomnum || roomnum < 0 || !room || room == "") return ;
if( member_array(roomnum,room_num) != -1 ) {
ob = find_object(room);
if( !ob ) {
catch( call_other( room, "???" ) );
ob = find_object(room);
if( !ob ) return;
}
exit = ob->getExits();
if( exit && sizeof(exit) > 0 ) {
short_name = ob->getShort();
if( !short_name ) short_name = "....";
exit_mark(ob, exit, roomnum, short_name);
}
return;
}
return;
}
mixed CMD(string arg) {
object room;
mapping exits;
string short_name, str;
room = environment(this_player());
if (!room) return notify_fail("* 아무것도 보이지 않습니다.\n");
exits = room->getExits();
if( !exits || sizeof(exits) < 1 ) {
return notify_fail("* 이곳은 출구가 없는 곳입니다.\n");
}
room_num = ({
12,14,16,18,20,
34,36,38,40,42,
56,58,60,62,64,
78,80,82,84,86,
100,102,104,106,108,
});
res = ({
" "," "," "," "," "," "," "," "," "," "," ",
" "," "," "," "," "," "," "," "," "," "," ",
" "," "," "," "," "," "," "," "," "," "," ",
" "," "," "," "," "," "," "," "," "," "," ",
" "," "," "," "," "," "," "," "," "," "," ",
" "," "," "," "," "," "," "," "," "," "," ",
" "," "," "," "," "," "," "," "," "," "," ",
" "," "," "," "," "," "," "," "," "," "," ",
" "," "," "," "," "," "," "," "," "," "," ",
" "," "," "," "," "," "," "," "," "," "," ",
" "," "," "," "," "," "," "," "," "," "," ",
" "," "," "," "," "," "," "," "," "," "," "
});
exits = room->getExits();
short_name = room->getShort();
if(exits) exit_mark(room, exits, 60, short_name);
str = "\n"+map()+"[37;0;40m\n";
write(str);
return 1;
}
음 별건아니지만 많은 도움 됬으면좋겟습니다. ㅎㅎ
한엘피 지도명령이랑 쪼금만 비교해보면
모두 아실것이기에 따로 설명은 안할게요
흠흠;; 제가글쓰면서 바로 수정한소스라-_-;;;;
한가지 실수해서 수정했습니다;;
int cmd(string arg) -> mixed CMD(string arg)
이렇게 고쳐줘야죠;;;;