⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 control.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
📖 第 1 页 / 共 4 页
字号:
//Cracked by Kafei
// Control panel for Group BWDH
// Apache 10/98
// changed by sdong 10/03/98 for fixing some bugs

#include <ansi.h>
inherit NPC;

int reset();
int auto_check();

#define BOARD __DIR__"npc/bwboard"
#define CANGKU "/d/bwdh/sjsz/cangku"


// I put all possible npcs at here!
string *high_npc = ({
	 "/kungfu/class/baituo/feng",
	 "/kungfu/class/emei/miejue",
	 "/kungfu/class/emei/zhou",
	 "/kungfu/class/gaibang/hong",
	 "/kungfu/class/huashan/ailao",
	 "/kungfu/class/huashan/gaolao",
	 "/kungfu/class/shaolin/du-jie",
	 "/kungfu/class/shaolin/du-nan",
	 "/kungfu/class/shaolin/du-e",
	 "/kungfu/class/wudang/zhang",
	 "/kungfu/class/xingxiu/ding",
	 "/kungfu/class/xuedao/laozu",
	 "/kungfu/class/xueshan/jiumo",
	 "/kungfu/class/xueshan/jinlun",
	 "/kungfu/class/shenlong/hong",
});

string *middle_npc = ({
	 "/kungfu/class/baituo/ke",
	 "/kungfu/class/emei/jingxuan",
	 "/kungfu/class/gaibang/jian",
	 "/kungfu/class/shaolin/xuan-ci",
	 "/kungfu/class/shaolin/xuan-bei",
	 "/kungfu/class/shaolin/xuan-nan",
	 "/kungfu/class/shaolin/xuan-ku",
	 "/kungfu/class/wudang/mo",
	 "/kungfu/class/wudang/yu",
	 "/kungfu/class/wudang/yin",
	 "/kungfu/class/wudang/song",
	 "/kungfu/class/wudang/zhang",
	 "/kungfu/class/xingxiu/zhaixing",
	 "/kungfu/class/xuedao/shendi",
	 "/kungfu/class/xueshan/ling-zhi",
	 "/kungfu/class/quanzhen/hao",
	 "/kungfu/class/quanzhen/ma",
	 "/kungfu/class/quanzhen/tan",
	 "/kungfu/class/quanzhen/liu",
});

string *low_npc = ({
	 "/kungfu/class/baituo/ma",
	 "/kungfu/class/emei/fang",
	 "/kungfu/class/gaibang/kongkong",
	 "/kungfu/class/shaolin/hui-kong",
	 "/kungfu/class/xingxiu/azi",
	 "/kungfu/class/wudang/daotong",
	 "/kungfu/class/emei/li",
	 "/kungfu/class/emei/bei",
	 "/kungfu/class/emei/fang",
	 "/kungfu/class/xueshan/gongcang",
	 "/kungfu/class/xuedao/baoxiang",
	 "/d/shenlong/npc/hei.c",
	 "/d/shenlong/npc/bai.c",
	 "/d/shenlong/npc/huang.c",
	 "/d/shenlong/npc/fang.c",
	 "/d/xingxiu/npc/gushou.c",
	 "/d/xingxiu/npc/boshou.c",
	 "/d/xingxiu/npc/haoshou.c",
	 "/d/xingxiu/npc/xxdizi",
});

string *misc_npc = ({
	 "/clone/beast/laohu",
	 "/clone/beast/xbaozi.c",
	 "/clone/beast/zsnake.c",
	 "/d/zhongnan/bigbear.c",
	 "/d/changbai/npc/yu",
	 "/kungfu/class/shenlong/xu",
	 "/d/xixia/npc/eshen",
	 "/d/xixia/npc/shiwei",
	 "/d/taishan/npc/jiang",
	 "/d/taishan/npc/meng-mian",
	 "/d/quanzhou/npc/langren",
	 "/d/huanghe/npc/liang-ziweng",
	 "/d/wudang/npc/baibian",
});

string *special_weapon = ({
		  "/d/bwdh/sjsz/obj/hunterbow.c",
		  "/d/bwdh/sjsz/obj/arrow.c",
		  "/d/bwdh/sjsz/obj/dantou.c",
		  "/d/bwdh/sjsz/obj/huoyao.c",
		  "/clone/weapon/xiangmo-chu.c",
		  "/clone/weapon/yitian-jian.c",  // 倚天剑
		  "/clone/unique/yuxiao.c",//       : 1,  // 玉箫
		  "/clone/unique/fumo-dao.c",//     : 1,  // 伏魔刀
		  "/clone/unique/jinshe-jian.c",//  : 1,  // 金蛇剑
		  "/clone/unique/eyujian.c",//      : 1,  // 鳄嘴剪
		  "/clone/unique/eweibian.c",//     : 1,  // 鳄尾鞭
		  "/clone/unique/xuantie-jian.c",// : 1,  // 玄铁重剑
		  "/d/huashan/obj/jinshe-zhui.c", //  : 1,  // 金蛇锥
		  "/clone/unique/yuzhu-zhang.c",//  : 1,  // 玉竹杖
		  "/clone/weapon/qijue.c",//        : 1,  // 七绝针
		  "/clone/unique/yuchang-jian.c",// : 1,  // 鱼肠剑
		  "/clone/unique/zhenwu.c",//       : 1,  // 真武剑
		  "/clone/unique/dulong-bian.c", //
		  "/clone/unique/tulong-dao.c", //
		  "/clone/unique/fan.c", //

		  "/clone/weapon/jingun.c",//
		  "/clone/weapon/falun5.c",//
		  "/clone/weapon/qixing-jian.c", //
		  "/clone/weapon/zijin-dao.c", //
		  "/clone/weapon/heilong-bian.c ", //
		  "/clone/weapon/songwen-jian.c ", //
		  "/clone/weapon/youlong.c ", //

		  "/d/shaolin/obj/jingang-zhao.c",//: 1,  // 金刚罩
		  "/d/xueshan/obj/wucan-yi.c",//    : 1,  // 乌蚕衣
		  "/d/taohua/obj/ruanwei-jia.c",//  : 1,  // 软猬甲
		  "/clone/unique/xuedao.c",//       : 1,  // 血刀
		  "/clone/unique/yuandao.c",//       : 1,
		  "/clone/unique/yangdao.c",//       : 1,
});

void move_npc(object npc);
int update(int n, int result);
void sort_rank();
void clean_sjsz();
int do_judge(string arg);
int do_fire(string arg);
int do_clean(string arg);
int do_challenge(string arg);
void auto_check(int nCounts);
int do_duet(string arg);
void do_challenge(string arg);
void do_accept(string arg);
int do_goon();
int do_auto_teamup(string arg);
void move_me(object me, string place);
void nude(object obj);
void my_destruct(object obj);

void full_all(object me);
void move_me(object me, string place);

int update_room (string file);

int refresh_room (string file);
void make_weapon(object npc);
void make_npc(object room);
void refresh_sjsz();
void auto_check();
void clean_sjsz();
int do_back_stuff(string id);


void create() {
	 set_name("群英会大主持", ({ "da zhuchi","zhuchi","host" }));
	 set("unit", "座");
	 set("long", "他就是天下英雄报名参加群英会团体比武大赛的总主持人。
他手持一个牌子,上书:

报名指令:

  teamup 队名 玩家1 玩家2 ... ... 玩家19 (报名组队,每队最少三人,最多允许20人一队。队名可以带颜色)
  例如: teamup $HIW$飞虎队$NOR$ sdong sdon sdo

  or baoming 队名 玩家1 玩家2 ... ... 玩家19 (报名组队,每队最少三人,最多允许20人一队。队名可以带颜色)
  例如: baoming $HIW$飞虎队$NOR$ sdong sdon sdo

  dismiss n (解散第N队)
  kickout id (开除某玩家出队)
  challenge n (挑战第N队)
  accept n(接受第N队挑战)
  clean id(清除玩家比武记录)
  help sjsz
  \n");


/*
	 set("no_get", 1);
	 set("chat_chance", 240);
	 set("chat_msg", ({
			 (: auto_check :),
	 }) );
*/
/*
	 set("chat_chance_combat", 240);
	 set("chat_msg_combat", ({
			 (: auto_check :),
	 }) );
*/
	set("inquiry", ([
		"试剑山庄": "试剑山庄是闻名遐迩的武林圣地。各路英雄都争相来这里比武。",
		"sjsz": "试剑山庄是闻名遐迩的武林圣地。各路英雄都争相来这里比武。",
		"baoming": "baoming 队名 玩家1 玩家2 ... ... 玩家19 (报名组队,每队最少三人,最多允许20人一队。队名可以带颜色)",
		"join": "baoming 队名 玩家1 玩家2 ... ... 玩家19 (报名组队,每队最少三人,最多允许20人一队。队名可以带颜色)",
		//"askback": "askback",
	]));

	 setup();
}

void init() {

	object me = this_player();

	//add_action("do_back_stuff", "askback");

	if( !query("bwdh") || me->query("judge") || wizardp(me) )
	{
	 add_action("do_add", "add");
	 add_action("do_add", "teamup");
	 add_action("do_discard", "dismiss");
	 add_action("do_discard", "discard");
	 add_action("do_challenge", "challenge");
	 add_action("do_accept", "accept");
	 add_action("do_fire", "kickout");
	 add_action("do_clean", "clean");
	 add_action("do_auto_teamup", "auto");

	 if( me->query("judge") || wizardp(me) )
	 {
		 add_action("do_assign", "assign");
		 add_action("do_judge", "judge");
		 add_action("do_duet", "duet");
		 add_action("do_goon", "goon");
		 add_action("do_start","start");
		 add_action("do_stop","stop");
       add_action("do_refresh","refresh");
	 }
  }
}

int do_start(string arg)
{
	object me = this_player();
	if( query("bwdh") ) return notify_fail("比武已经开始了。\n");
	message_vision(HIR"$N宣布群英会现在开始!\n"NOR,me);
	CHANNEL_D->do_channel(me, "chat", HIR"宣布群英会现在开始!\n"NOR);
	set("bwdh",1);
	return 1;
}

int do_stop(string arg)
{
	object me = this_player();
	if( !query("bwdh") ) return notify_fail("比武还没开始呢。\n");
	delete("bwdh");
	message_vision(HIR"宣布群英会结束!\n"NOR,me);
	CHANNEL_D->do_channel(me, "chat", HIR"宣布群英会结束!\n"NOR);
	return 1;
}

void full_all(object me)
{
	 if( !living(me) ) me->revive(0);
	 me->set("eff_jing", (int)me->query("max_jing"));
	 me->set("jing", (int)me->query("max_jing"));
	 me->set("eff_qi", (int)me->query("max_qi"));
	 me->set("qi", (int)me->query("max_qi"));
	 me->set("jingli", (int)me->query("max_jingli"));
	 me->set("neili", (int)me->query("max_neili"));
	 me->set("food", (int)me->max_food_capacity());
	 me->set("water", (int)me->max_water_capacity());
	 me->remove_all_killer();
	 me->clear_condition();
}

int do_back_stuff(string id)
{
	object *inv, cangku, *basket;
	int i;
	object player=this_player();

  cangku = find_object(CANGKU);
  if (! objectp(cangku)) {
	 cangku = load_object(CANGKU);
	 if (!objectp(cangku)) {
		message_vision("$N请告诉 wiz: cangku not found\n", player);
		return 1;
	 }
  }

  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);

  return 1;
}




void my_destruct(object obj)
{
		  int i;

		  object *inv;
		  string err;

		  if (obj && objectp(obj) ) {
								inv = all_inventory(obj);
								i = sizeof(inv);
								while(i--)
								{
										  if( inv[i] && objectp(inv[i]) && userp(inv[i]) )
										  {
											 call_out("move_me",1+random(4),inv[i],"/d/bwdh/sjsz/kantai_w1.c");
											 if( !living(inv[i]) ) inv[i]->revive(1);
											 full_all(inv[i]);
											 nude(inv[i]);
										  }
										  else
										  {
											if(inv[i] && objectp(inv[i]))
											{
												my_destruct(inv[i]);
											}
										  }
								}
					 if( userp(obj) )
					 {
						 call_out("move_me",1+random(4),obj,"/d/bwdh/sjsz/kantai_w1.c");
						 if( !living(obj) )obj->revive(1);
						 full_all(obj);
						 nude(obj);
					 }
					 else destruct(obj);
		  }
}

void nude(object obj)
{
		  int i;

		  object *inv;
		  if (obj && objectp(obj) ) {
								inv = all_inventory(obj);
								i = sizeof(inv);
								while(i--)
								{
										  if( inv[i] && objectp(inv[i]) && userp(inv[i]) )
										  {
											 call_out("move_me",1+random(4),inv[i],"/d/bwdh/sjsz/kantai_w1.c");
											 if( !living(inv[i]) ) inv[i]->revive(1);
											 full_all(inv[i]);
											 nude(inv[i]);
										  }
										  else
										  {
											if(inv[i] && objectp(inv[i]))
											{
												return my_destruct(inv[i]);
												//destruct(inv[i]);
											}
										  }
								}
		  }
}

void move_me(object me, string place)
{
	object obj;

	if( !me || !objectp(me) || !userp(me) )return;
	nude(me);
	full_all(me);

	if ( (obj = find_object(place)) && obj && objectp(obj) ) {
		me->set("sjsz/fighting",1);
		me->move(obj);
	}
	else if ( (obj = load_object(place)) && obj && objectp(obj) ) {

   	me->set("sjsz/fighting",1);
	me->move(obj);
	}

}

int update_player(object me)
{
		  object env, link_ob, obj;

		  env = environment(me);

		  // Save the data and exec the player to his/her link object.
		  me->save();

		  // First, create the new body.
		  link_ob = me->query_temp("link_ob");
		  obj = LOGIN_D->make_body(link_ob);
		  if (!obj) return 0;

		  exec(link_ob, me);
		  destruct(me);

		  // Restore new body and exec to it via enter_world in LOGIN_D
		  obj->restore();

⌨️ 快捷键说明

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