作者dragondoll (龙娃娃)
看板mud_sanc
标题Re: [wizs] 巫师升等测验题目三
时间Thu Nov 20 20:16:02 2008
程式位置: /u/d/dragondoll/question/q3.c
程式大小: 我也知道是小程式。
执行结果: 一样略
想试奇怪写法结果害我多花一个小时...。
改回正常写法时有啥纰漏我也不管了,反正题目要求到的没少写。
inherit ROOM;
void create()
{
::create();
seteuid(getuid());
set("light",1);
set("short","Test3");
set("long",@PLAIN
PLAIN
);
}
void init()
{
add_action("test41","test3");
add_action("stopxx","stop");
return;
}
int stopxx(string str)
{
if(!query("target"))return notify_fail("你没有在追踪玩家!\n");
remove_call_out("show_msg");
delete("target");
return notify_fail("你停止了对玩家的追踪!\n");
}
int test41(string str)
{
write("区域管理选单
===============================================
1)可输入玩家 ID 查询其所在的房间资讯及区域资讯
2)可输入玩家 ID 追踪其移动路径
3)离开功\能表
===============================================");
input_to("choice",2);
}
void choice(string choice)
{
int cc;
cc = atoi(choice);
if(cc>3||cc<=0){write("无此选项!\n"); return;}
else if(cc==3){write("感谢使用!\n"); return;}
else if(cc==1)
{
write("请输入玩家ID\n");
input_to("choice2",2,this_player());
}
else if(cc==2)
{
write("请输入玩家ID\n");
input_to("choice3",2,this_player());
}
}
string cstatus(object ppl)
{
if(interactive(ppl)==0)return "断线中";
else if(ppl->query_temp("ats"))return "战斗中";
else return "无所事事";
}
int show_msg()
{
object ppl,room;
string msg="<<目前该玩家所在地资讯>>\n";
if(!query("target"))
{
write("对象已不在, 停止追踪\n");
return 1;
}
ppl = query("target");
room = environment(ppl);
msg = msg + "房间档名:" + base_name(room)+"\n";
msg = msg + "房间地名:" + room->query("short")+"\n";
if(!interactive(ppl))
{
write("该玩家断线中, 停止追踪\n");
remove_call_out("show_msg");
return 1;
}
write(msg);
call_out("show_msg",10);
return 1;
}
void choice2(string choice)
{
object ppl,room,ppls;
mixed ex,ex2;
int i,tmp;
string msg="",path,mm,strr;
ppl = find_player(choice);
if(!ppl){write("无此玩家!\n"); return;}
room = environment(ppl);
msg = msg + "房间档名:" + base_name(room)+"\n";
msg = msg + "房间地名:" + room->query("short")+"\n"+"房间出口:";
ex = keys(room->query("exits"));
for(i=0;i<sizeof(ex);i++)
{
msg = msg + ex[i]+" ";
}
msg = msg + "\n";
ex = all_inventory(room);
for(i=0;i<sizeof(ex);i++)
{
if(userp(ex[i])) msg = msg + ex[i]->query("name") +
"["+cstatus(ex[i])+"]\n";
}
ex=explode(base_name(room),"/");
path="/"+implode(ex[0..sizeof(ex)-2],"/")+"/";
msg = msg + "房间所在目录:" + path+"\n";
ex = get_dir(path);
for(i=0;i<sizeof(ex);i++)
{
mm = ex[i];
if(mm[strlen(mm)-2..strlen(mm)-1]==".c")tmp++;
}
msg = msg+"此目录下的房间数有: "+tmp+"\n";
ex = users();
tmp = 0;
foreach(ppls in ex)
{
strr = base_name(environment(ppls));
ex2=explode(strr,"/");
strr="/"+implode(ex2[0..sizeof(ex2)-2],"/")+"/";
if(strr == path)tmp++;
}
msg = msg+"此区域的总人数有: "+tmp+"\n";
write(msg);
return;
}
void choice3(string choice)
{
object ppl,room,ob;
string msg="";
ppl = find_player(choice);
if(!ppl){write("无此玩家!\n"); return;}
if(query("target")) {write("已经在追踪中, 请下stop停止追踪!\n"); return;}
write("开始追踪玩家!\n");
set("target",ppl);
show_msg();
return;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.194.152.155