kantai.old.h
来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C头文件 代码 · 共 488 行
H
488 行
//Cracked by Kafei// /d/bwdh/kantai.h
// 看台
// by sdong 09/25/98
#include <ansi.h>
inherit ROOM;
#define CANGKU "/d/bwdh/cangku"
int do_practice(string arg);
int do_study(string arg);
string long_desc();
int do_start(string arg);
int do_stop(string arg);
int do_baoming();
int start(string host,string challenger);
void sort_rank(object ob,int i);
int auto_check();
int let(string arg);
void full_all(object me);
int do_abandon();
int update_player(object me);
void create()
{
set("short", "看台");
set("long", (: long_desc :));
set("valid_startroom", 1);
set("no_fight", 1);
set("no_practice", 1);
set("exits", ([
"up" : LEITAI,
"north" : KANTAI2,
"out": "/d/bwdh/square",
]));
setup();
}
void back_stuff(string id)
{
object *inv, cangku, *basket;
int i;
object player;
player = find_player(id);
if(!player)
{
message_vision(NOR"主持人说:咦,"+id+"不见了?好,东西统统归我了!主持人忍不住奸笑了几声。\n");
return;
}
cangku = find_object(CANGKU);
if (! objectp(cangku)) {
cangku = load_object(CANGKU);
if (!objectp(cangku)) {
message_vision("$N请告诉 wiz: cangku not found\n", player);
return 0;
}
}
basket = cangku->query("basket/"+player->query("id"));
if (basket) {
for (i=0; i<sizeof(basket); i++) {
if (objectp(basket[i])) {
basket[i]->move(player);
message_vision("$N从主持人手里拿回一"+
basket[i]->query("unit")+
basket[i]->query("name")+"。\n", player);
}
}
cangku->delete("basket/"+player->query("id"));
}
else message_vision("主持人说:$N什么也没存在我这里,可别赖我贪污喔!\n", player);
}
void restore_stuff(object player)
{
object *inv, cangku, *basket;
string id;
int i;
id = player->query("id");
inv = all_inventory(player);
for (i=0; i<sizeof(inv); i++) {
if (! inv[i]->query_autoload())
{
message_vision(NOR"主持人收回$N从擂台取的"+inv[i]->query("name")+"。\n", player);
destruct(inv[i]);
}
}
player->delete("bwdh/admitted");
player->delete("bwdh/fighting");
call_out("back_stuff",1,id);
update_player(player);
}
void init()
{
object player = this_player();
if ( objectp(player) && player->query("bwdh/fighting") ) {
full_all(player);
call_out("restore_stuff",1,player);
}
add_action("do_practice", "practice");
add_action("do_practice", "lian");
add_action("do_study", "study");
add_action("do_study", "du");
add_action("do_baoming", "报名");
add_action("do_baoming", "baoming");
add_action("do_abandon", "放弃");
add_action("do_abandon", "abandon");
add_action("do_start", "start");
add_action("do_stop", "stop");
add_action("do_abandon", "abandon");
}
int do_practice(string arg)
{
object me = this_player();
tell_object(me, "这里不准练功!\n");
return 1;
}
int do_study(string arg)
{
object me = this_player();
tell_object(me, "这里不准读书!\n");
return 1;
}
int do_abandon()
{
object me = this_player();
tell_object(me, "你决定放弃成绩不干了!\n");
me->delete("bwdh");
sort_rank(me, 0);
return 1;
}
string long_desc()
{
string desc,temp;
int nRank,i,j;
desc = HIY"
/I______________I\\ "+HIC"|"+HIR"=====|"+HIY"
//||||||||||||||||||\\\\ "+HIC"|"+HIR" 武 |"+HIY"
T\\//IIIIIIIIIIIIIIIIIIIIII\\\\/T "+HIC"|"+HIR"=====|"+HIY"
^^^^"+HIG"||"NOR+HIY"^^^"+HIR"【比武擂台】"NOR+HIY"^^^"+HIG"||"+HIY"^^^^ "+HIC"|"+HIY"
"+HIG"||"NOR+HIY"__________________"+HIG"||"NOR+HIY" "+HIC"|"+HIY"
/||||||||||||||||||||||\\ "+HIC"|"+HIY"
T\\//IIIIIIIIIIIIIIIIIIIIIIII\\\\/T "+HIC"|"+HIY"
^^^^"+HIG"||"+HIY"^^^^^^^^^^^^^^^^^^^^"+HIG"||"+HIY"^^^^ "+HIC"|"+HIG"
|| || "+HIC"|"+HIW"
[]___[]___[]__|[]___[]___||___[]___[]|__[]___[]___[]
|__________________|_|________|_|__________________|"+HIG"
|| ||
|| ________ 龙 虎 板 ________ ||
|| | | ||\n";
if(query("age"))
{
desc += " || | "+query("age")+"岁以下组比武大赛 | ||\n";
desc += " || | | ||\n";
}
nRank = this_object()->query("nRank");
for ( i=1;i<=nRank && i <= 10;i++)
{
desc += " || | ";
desc += i + ". ";
temp = this_object()->query("rank/"+i+"/name") + "(";
temp += this_object()->query("rank/"+i+"/id") + ") ";
temp += "胜:"+this_object()->query("rank/"+i+"/win") + " ";
temp += "负:"+this_object()->query("rank/"+i+"/loss");
desc += temp;
for(j=strlen(temp);j<=31;j++)
{
if(i==10 &&j==31)break;
desc += " ";
}
desc += "| ||\n";
}
for(i=i;i<=12;i++)
{
desc += " || | | ||\n";
}
desc+=" || |____________________________________| ||\n";
return desc;
}
int valid_leave(object me, string dir)
{
if( dir=="up" ) {
if( wizardp(me) ) return 1;
else return notify_fail("你不能自己上去。\n");
}
if( dir=="out" ) {
if( wizardp(me) || me->query("bwdh/defeated") >= 5 || !me->query("bwdh") || !query("start") ) return 1;
else
{
return notify_fail("你是选手,现在不能离开。除非你认输(abandon)不干了。\n");
}
}
return ::valid_leave(me, dir);
}
void sort_rank(object ob, int n)
{
int nRank = query("nRank");
int i;
string id = ob->query("id");
if(n>0)
{
for(i=nRank;i>=1;i--)
{
if(query("rank/"+i+"/id")==id)break;
}
if( i<1 )
{
nRank ++;
set( "nRank",nRank );
set( "rank/"+nRank+"/name",ob->query("name") );
set( "rank/"+nRank+"/id",ob->query("id") );
set( "rank/"+nRank+"/win",ob->query("bwdh/win") );
set( "rank/"+nRank+"/loss",ob->query("bwdh/defeated") );
i=nRank;
}
for(i=i;i>=1;i--)
{
if( i>1 && query("rank/"+(i-1)+"/win") < ob->query("bwdh/win") )
{
set( "rank/"+i+"/name",query("rank/"+(i-1)+"/name") );
set( "rank/"+i+"/id",query("rank/"+(i-1)+"/id") );
set( "rank/"+i+"/win",query("rank/"+(i-1)+"/win") );
set( "rank/"+i+"/loss",query("rank/"+(i-1)+"/loss") );
set( "rank/"+(i-1)+"/name",ob->query("name") );
set( "rank/"+(i-1)+"/id",ob->query("id") );
set( "rank/"+(i-1)+"/win",ob->query("bwdh/win") );
set( "rank/"+(i-1)+"/loss",ob->query("bwdh/defeated") );
}
else
{
set( "rank/"+i+"/name",ob->query("name") );
set( "rank/"+i+"/id",ob->query("id") );
set( "rank/"+i+"/win",ob->query("bwdh/win") );
set( "rank/"+i+"/loss",ob->query("bwdh/defeated") );
break;
}
}
}
else if ( n<0 )
{
for(i=nRank;i>=1;i--)
{
if(query("rank/"+i+"/id")==id)break;
}
if( i<1 )
{
nRank ++;
set( "nRank",nRank );
set( "rank/"+nRank+"/name",ob->query("name") );
set( "rank/"+nRank+"/id",ob->query("id") );
set( "rank/"+nRank+"/win",ob->query("bwdh/win") );
set( "rank/"+nRank+"/loss",ob->query("bwdh/defeated") );
return;
}
set( "rank/"+i+"/name",ob->query("name") );
set( "rank/"+i+"/id",ob->query("id") );
set( "rank/"+i+"/win",ob->query("bwdh/win") );
set( "rank/"+i+"/loss",ob->query("bwdh/defeated") );
}
else // just move this guy to the end
{
for(i=1;i<=nRank;i++)
{
if(query("rank/"+i+"/id")==id)break;
}
if( i>nRank )
{
nRank ++;
set( "nRank",nRank );
set( "rank/"+nRank+"/name",ob->query("name") );
set( "rank/"+nRank+"/id",ob->query("id") );
set( "rank/"+nRank+"/win",ob->query("bwdh/win") );
set( "rank/"+nRank+"/loss",ob->query("bwdh/defeated") );
return;
}
for(i=i;i<nRank;i++)
{
set( "rank/"+i+"/name",query("rank/"+(i+1)+"/name") );
set( "rank/"+i+"/id",query("rank/"+(i+1)+"/id") );
set( "rank/"+i+"/win",query("rank/"+(i+1)+"/win") );
set( "rank/"+i+"/loss",query("rank/"+(i+1)+"/loss") );
}
set( "rank/"+i+"/name",ob->query("name") );
set( "rank/"+i+"/id",ob->query("id") );
set( "rank/"+i+"/win",ob->query("bwdh/win") );
set( "rank/"+i+"/loss",ob->query("bwdh/defeated") );
}
}
int do_start(string arg)
{
object me = this_player();
int age;
if (!wizardp(me)) {
tell_object(me,"你不是巫师,不能发动比武大会!\n");
return 1;
}
if (!arg || sscanf(arg, "%d", age)!=1)
{
tell_object(me,"usage: start age\n");
return 1;
}
if(query("start"))
{
tell_object(me,"比武已经开始了,如要终止,请用STOP命令。\n");
return 1;
}
this_object()->set("age",age);
this_object()->set("start",1);
this_object()->set("nRank",0);
this_object()->delete("rank",0);
message_vision("$N高声宣布:这个擂台现在开始"+age+"岁以下组比武大赛!\n",me);
remove_call_out("auto_check");
call_out("auto_check",30);
return 1;
}
int do_stop(string arg)
{
object ob1,ob2,me = this_player();
int age;
string host,challenger;
if (!wizardp(me)) {
tell_object(me,"你不是巫师,不能终止比武大会!\n");
return 1;
}
if(!query("start"))
{
tell_object(me,"比武还没开始呢。如要开始,请用start age命令。\n");
return 1;
}
age = query("age");
this_object()->delete("age");
if( (host = query("host")) )
ob1=find_player( query("host") );
if(ob1 && ob1->query("bwdh/fighting") )
{
ob1->move(KANTAI);
}
if( ( challenger=query("challenger")) )
{
ob2=find_player(challenger);
if( ob2 && ob2->query("bwdh/fighting") )
{
ob2->move(KANTAI);
}
}
delete("start");
delete("host");
delete("challenger");
delete("fighting");
message_vision("$N高声宣布:"+age+"岁以下组比武大赛现在结束!\n",me);
return 1;
}
int do_baoming()
{
string msg, name;
object me;
string host,challenger,girl;
int i, age;
remove_call_out("auto_check");
call_out("auto_check",0);
me = this_player();
age = me->query("age");
if(this_object()->query("start")!=1)
{
tell_object(me,"对不起,现在没有比武大赛!\n");
return 1;
}
if( me->query("age") > this_object()->query("age") )
{
tell_object(me,"主持人对你说: 对不起,这个擂台专门进行"+query("age")+"岁以下组比武大赛,你已经超龄!\n");
return 1;
}
if( (age < 25 && me->query("combat_exp") < ( query("age")-15 ) * 4000 ) ||
(age > 24 && me->query("combat_exp") < ( query("age")-15 ) * 8000 )
)
{
tell_object(me,"主持人对你说: 武功这么差,你当武林大会是街头把戏呀?回去好好练吧!\n");
return 1;
}
if( me->query("bwdh/defeated") >= 5 )
{
tell_object(me,"主持人对你说: 你这个连输五场的败将,回家好好练去吧!\n");
return 1;
}
if( query("fighting"))
{
tell_object(me,"主持人对你说: 现在有人正在比武,等会儿再报名!\n");
return 1;
}
if( !(host=query("host")) )
{
name = me->query("name")+"("+me->query("id")+")";
set("host",me->query("id") );
host = me->query("id");
message_vision("主持人说: 好,现在$N是擂主!\n", me);
delete_temp("no_challenger");
me->set("bwdh/fighting");
let(me->query("id") + " play " + me->query("id"));
remove_call_out("auto_check");
call_out("auto_check",30);
return 1;
}
name = me->query("name")+"("+me->query("id")+")";
set("challenger",me->query("id") );
challenger = me->query("id");
delete_temp("no_challenger");
set("fighting",1);
remove_call_out("start");
call_out("start",30,host,challenger);
message_vision("主持人说: 好,$N
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?