wudao.c

来自「C实现的MUD,对大家基本入门网络游戏很有帮助!」· C语言 代码 · 共 307 行

C
307
字号
// Room: /city/wudao.c
// Date: Feb.28 1998 by Java
#include <ansi.h>
inherit ROOM;
string look_gaoshi();
string look_pai();
string clear_title(string arg);
void add_title(object me,string arg);
void create()
{
	set("short", "武道场");
	set("long", @LONG
这里是比武大会巫师席,高据擂台之上,雕梁琉瓦,花木游栏。四望青山
迎爽,向下看擂台周围人头攒动。桌上放着一块小木牌 (pai),后壁上贴着一
张红纸告示(gaoshi)。
LONG );
        set("outdoors", "city");
	set("item_desc", ([
		"gaoshi" : (: look_gaoshi :),
		"pai"    : (: look_pai :),
	]));
	set("exits", ([
		"down"      : __DIR__"leitai",
	]));
	set("no_clean_up", 0);
	set("no_fight", "1");
	set("no_steal", "1");
	set("no_beg", "1");
	setup();
//	replace_program(ROOM);
}
string look_pai()
{
	return 
"\n
"HIR"start                  "HIY"----  擂台上之玩家开始比武。
"HIR"allow    <player id>   "HIY"----  设定允许上擂台之玩家。
"HIR"deny     <player id>   "HIY"----  取消玩家上台资格。
"HIR"load     <player id>   "HIY"----  拉玩家上擂台。
"HIR"kick     <player id>   "HIY"----  踢玩家下擂台。
"HIR"heal     <player id>   "HIY"----  给擂台上玩家九花玉露丸。
"HIR"life     <player id>   "HIY"----  送被杀玩家上天堂恢复。

"HIG"titles  <player id> 01 "HIY"----  赠玩家幼年天下第一 (15以下)。
"HIG"titles  <player id> 02 "HIY"----  赠玩家幼年天下第二 (15以下)。
"HIG"titles  <player id> 11 "HIY"----  赠玩家少年天下第一 (20以下)。
"HIG"titles  <player id> 12 "HIY"----  赠玩家少年天下第二 (20以下)。
"HIG"titles  <player id> 21 "HIY"----  赠玩家天下第一侠少 (30以下)。
"HIG"titles  <player id> 22 "HIY"----  赠玩家天下第二侠少 (30以下)。
"HIG"titles  <player id> 31 "HIY"----  赠玩家天下第一侠客 (40以下)。
"HIG"titles  <player id> 32 "HIY"----  赠玩家天下第二侠客 (40以下)。
"HIG"titles  <player id> 41 "HIY"----  赠玩家天下第一大侠 (40以上)。
"HIG"titles  <player id> 42 "HIY"----  赠玩家天下第二大侠 (40以上)。

\n"NOR;
}
string look_gaoshi()
{
	return 
HIR"\n\n                           
                 海洋II的比武大会
\n"HIY"
第一、每月的十五日晚上十九时三十分举行比武大会。地点在扬州西门
      外武道场。
第二、比赛按年龄分组,每组设天下第一,第二称号。分组如下:
      幼儿组 十四到十五岁 少年组 十六到二十岁 青年组 廿一到三十岁
      壮年组 卅一到四十岁 盛年组 四十以上
      如果在一组内只有两人,他就直接获得该组第一、二名。
第三、比武实行淘汰制。预先分组淘汰。每轮实行三局两胜制,分别比
      赛第一兵器,拳脚和第二兵器,先胜两局者进入下一轮。幼儿组
      和少年组除了决赛外每轮只赛一场。
第四、为使天下第一名实相符,允许使用现行所有武功,允许perform,
      powerup,enforce,poison等。但roar由于严重影响比武秩序,
      因此谢绝使用。违者停赛。
第五、比赛时所用兵器和防具请在擂台上的兵器架上自行拿取,经研究,
      禁止使用自造兵器。禁止使用金丝甲、软猥甲、真丝宝甲外,禁
      止使用伤害力超过50的兵器如敖拜匕首,倚天剑,伏魔刀等。
第六、比赛时请注意言行,犯众怒者、违反现场巫师安排者,取消一年
      比赛资格。

"HIG"                                      海洋II  敬启
\n"NOR;
}
void init()
{
	add_action("do_start", "start");
	add_action("do_allow", "allow");
	add_action("do_deny", "deny");
	add_action("do_load", "load");
	add_action("do_kick", "kick");
	add_action("do_heal", "heal");
	add_action("do_life", "life");
	add_action("do_titles", "titles");
}

int do_start()
{
        int i,j;
	object *allob, ob, me;

        allob = users();
        me = this_object();
        ob = this_player();
        if (!me) return 1;
        if (!ob) return 1;
if (!wizardp(ob))
		return notify_fail("只有 (wizard) 以上的巫师才能使用此命令" + MUD_NAME + "\n");

        j = 0;
        for ( i=sizeof(allob); i>0; i-- ) {
//             if (environment(allob[i-1])->query("short") =="擂台") {
                if (j == 0) {
                    me = allob[i-1];
                    j = 1;
                }
                else ob = allob[i-1]; 
             }
//        }
        if (ob != this_player()) me->fight_ob(ob);
        return 1;
}
int do_allow(string arg)
{
	object ob, me;

	me = this_player();
if (!wizardp(me))
		return notify_fail("只有 (wizard) 以上的巫师才能使用此命令" + MUD_NAME + "\n");

	if (!arg) return notify_fail("<Syntax>: allow <player id>\n");
	ob = LOGIN_D->find_body(arg);
	if (!ob) return notify_fail("没这个人耶。\n");
	message_vision(HIG"$N设定让"+ob->name()+"上擂台。\n"NOR, me);
	ob -> set_temp("leitai_allow",1);
	ob -> delete("env/combatd");
	tell_object(ob,HIR"\n该你上擂台了。\n"NOR);
	return 1;
}
int do_deny(string arg)
{
	object ob, me;

	me = this_player();
	if (!arg) return notify_fail("<Syntax>: deny <player id>\n");
	ob = LOGIN_D->find_body(arg);
	if (!ob) return notify_fail("没这个人耶。\n");
	message_vision(HIG"$N设定让"+ob->name()+"先暂时别上擂台。\n"NOR, me);
	ob -> delete_temp("leitai_allow");
	tell_object(ob,HIR"\n先不急上擂台了吧。\n"NOR);
	return 1;
}
int do_load(string arg)
{
	object ob, me;

	me = this_player();
	if (!arg) return notify_fail("<Syntax>: loadup <player id>\n");
if (!wizardp(me))
		return notify_fail("只有 (wizard) 以上的巫师才能使用此命令" + MUD_NAME + "\n");

	ob = LOGIN_D->find_body(arg);
	if (!ob) return notify_fail("没这个人耶。\n");
	message_vision(HIG"$N拉"+ob->name()+"上擂台。\n"NOR, me);
	message_vision(HIG"$N双腿一蹬,腾空而起,轻轻落在擂台边上,衣袂襟风,十分潇洒。\n"NOR, ob);
	ob -> delete_temp("leitai_allow");
	tell_object(ob,HIR"\n发什么呆呀你,先上来吧给我。\n"NOR);
	ob -> move("/d/city/leitai");
	ob -> delete_temp("view_leitai");
	ob -> delete("env/combatd");
	message_vision(HIG"$N腾空落在擂台边上,衣袂襟风,十分潇洒。\n"NOR, ob);
	return 1;
}
int do_kick(string arg)
{
	object ob, me;

	string wiz_status;
	me = this_player();
	wiz_status = SECURITY_D->get_status(me);
if (!wizardp(me))
		return notify_fail("只有 (wizard) 以上的巫师才能使用此命令" + MUD_NAME + "\n");

	if( wiz_status != "(admin)" && wiz_status != "(arch)"&& wiz_status != "(wizard)" )
		return notify_fail("只有 (wizard) 以上的巫师才能使用此命令" + MUD_NAME + "\n");

	if (!arg) return notify_fail("<Syntax>: kickdown <player id>\n");
	ob = LOGIN_D->find_body(arg);
	if (!ob) return notify_fail("没这个人耶。\n");
	message_vision(HIG"$N把"+ob->name()+"踢下擂台。\n"NOR, me);
	ob -> delete_temp("leitai_allow");
	message_vision(HIG"只听得$N嗷的一声,飞身跳下擂台去了。\n"NOR, ob);
	tell_object(ob,HIR"\n没玩够啊,先下去吧你给我。\n"NOR);
	ob -> move("/d/city/wudao1");
	ob -> set_temp("view_leitai",1);
	message_vision(HIG"只见$N长呼声中,一个大屁股墩坐在地上唉唉不绝。\n"NOR, ob);
	return 1;
}
int do_heal(string arg)
{
	object ob, me, obj;
	string wiz_status;
	me = this_player();
	wiz_status = SECURITY_D->get_status(me);
if (!wizardp(me))
		return notify_fail("只有 (wizard) 以上的巫师才能使用此命令" + MUD_NAME + "\n");

	if( wiz_status != "(admin)" && wiz_status != "(arch)"&& wiz_status != "(wizard)" )
		return notify_fail("只有 (wizard) 以上的巫师才能使用此命令" + MUD_NAME + "\n");

	if (!arg) return notify_fail("<Syntax>: heal <player id>\n");
	ob = LOGIN_D->find_body(arg);
	if (!ob) return notify_fail("没这个人耶。\n");
	message_vision(HIG"$N给"+ob->name()+"一粒九花玉露丸。\n"NOR, me);
	obj = new("/clone/misc/jiuhua");
	obj -> move(ob); 
	tell_object(ob,HIR"\n给你一粒九花玉露丸恢复体力。\n"NOR);
	return 1;
}
int do_life(string arg)
{
	object ob, me;

	string wiz_status;
	me = this_player();
	wiz_status = SECURITY_D->get_status(me);
if (!wizardp(me))
		return notify_fail("只有 (wizard) 以上的巫师才能使用此命令" + MUD_NAME + "\n");

	if( wiz_status != "(admin)" && wiz_status != "(arch)"&& wiz_status != "(wizard)" )
		return notify_fail("只有 (wizard) 以上的巫师才能使用此命令" + MUD_NAME + "\n");

	if (!arg) return notify_fail("<Syntax>: reback <player id>\n");
	ob = LOGIN_D->find_body(arg);
	if (!ob) return notify_fail("没这个人耶。\n");
	message_vision(HIG"$N送"+ob->name()+"上天堂恢复损失。\n"NOR, me);
	ob -> delete_temp("leitai_allow");
	tell_object(ob,HIR"\n送你上天堂,下来后就会恢复的。\n"NOR);
	ob -> move("/d/death/god2");
	ob -> delete_temp("view_leitai");
	return 1;
}
int do_titles(string arg)
{
	object obj, me=this_player();
	string dest, topic;
	string wiz_status;
	wiz_status = SECURITY_D->get_status(me);
if (!wizardp(me))
		return notify_fail("只有 (wizard) 以上的巫师才能使用此命令" + MUD_NAME + "\n");

	if( wiz_status != "(admin)" && wiz_status != "(arch)"&& wiz_status != "(wizard)" )
		return notify_fail("只有 (wizard) 以上的巫师才能使用此命令" + MUD_NAME + "\n");

	if( !arg || sscanf(arg, "%s %s", dest, topic)!=2 )
		return notify_fail("你要封谁什么称号?\n");
	obj = find_player(dest);
	if(!obj || !me->visible(obj)) return notify_fail("没有这个人....。\n");
	switch (topic)
	{
		case "01": add_title(obj, "幼年天下第一"); break;
		case "02": add_title(obj, "幼年天下第二"); break;
		case "11": add_title(obj, "少年天下第一"); break;
		case "12": add_title(obj, "少年天下第二"); break;
		case "21": add_title(obj, "天下第一侠少"); break;
		case "22": add_title(obj, "天下第二侠少"); break;
		case "31": add_title(obj, "天下第一侠客"); break;
		case "32": add_title(obj, "天下第二侠客"); break;
		case "41": add_title(obj, "天下第一大侠"); break;
		case "42": add_title(obj, "天下第二大侠"); break;
		default: break;
	}
	message_vision(HIG"$N授"+obj->name()+"封号。\n"NOR, me);
	return 1;
}
void add_title(object me,string arg)
{
        string title;
        title=arg+clear_title(me->query("title"));
        me->set("title",title);
}
string clear_title(string arg)
{
        if( (strsrch(arg, "幼年天下第一") >= 0) ||
            (strsrch(arg, "幼年天下第二") >= 0) ||
            (strsrch(arg, "少年天下第一") >= 0) ||
            (strsrch(arg, "少年天下第二") >= 0) ||
            (strsrch(arg, "天下第一侠少") >= 0) ||
            (strsrch(arg, "天下第二侠少") >= 0) ||
            (strsrch(arg, "天下第一侠客") >= 0) ||
            (strsrch(arg, "天下第二侠客") >= 0) ||
            (strsrch(arg, "天下第一大侠") >= 0) ||
            (strsrch(arg, "天下第二大侠") >= 0))
                {
                arg = replace_string(arg, "幼年天下第一","");
                arg = replace_string(arg, "幼年天下第二","");
                arg = replace_string(arg, "少年天下第一","");
                arg = replace_string(arg, "少年天下第二","");
                arg = replace_string(arg, "天下第一侠少","");
                arg = replace_string(arg, "天下第二侠少","");
                arg = replace_string(arg, "天下第一侠客","");
                arg = replace_string(arg, "天下第二侠客","");
                arg = replace_string(arg, "天下第一大侠","");
                arg = replace_string(arg, "天下第二大侠","");
        }
        return arg;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?