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

📄 control.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
📖 第 1 页 / 共 4 页
字号:
		  LOGIN_D->enter_world(link_ob, obj, 1);

		  obj->move(env);

		  return 1;
}

int do_refresh(string arg)
{
	object ob;
	if(!arg)return notify_fail("你想要更新谁?\n");
	ob = find_player(arg);
	if( ob && objectp(ob) && userp(ob) && ob->query("sjsz") )
		update_player(ob);
	else return notify_fail("没有这个人在试剑山庄中。\n");
}



int update_room (string file)

{

		  int i;
		  object obj, *inv;
		  string err;

		  if ( (obj = find_object(file)) && 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]);
											}
										  }
								}
					 my_destruct(obj);
		  }

}

/*
This will refresh a room however it won't destruct the room
*/
int refresh_room (string file)
{
		  int i;
		  object obj, *inv, me = this_player();
		  string err;


		  if (obj = find_object(file)) {
					inv = all_inventory(obj);
					i = sizeof(inv);
					while(i--)
					{
										  if( inv[i] && objectp(inv[i]) && userp(inv[i]) )
										  {
											 if( !living(inv[i]) || inv[i]->query("qi") <= 0 )
											 {
												 if( inv[i]->query("sjsz/red") )
												 {
													call_out("move_me",1+random(4),inv[i],"/d/bwdh/sjsz/west_xiangfang.c");
												 }
												 else if( inv[i]->query("sjsz/white") )
												 {
													call_out("move_me",1+random(4),inv[i],"/d/bwdh/sjsz/east_xiangfang.c");
												 }
												 if( !living(inv[i]) )inv[i]->revive(1);
												 full_all(inv[i]);
												 nude(inv[i]);
											 }
										  }
										  else
										  {
											if( inv[i] && objectp(inv[i]) && inv[i]->query("race") != "人类" && inv[i]->query("id") != "pao" 
											  && inv[i]->query("id") != "dan tou" && inv[i]->query("id") != "huo yao" && inv[i]->query("id") != "box" )
												my_destruct(inv[i]);
										  }
					}
		  }

}

void make_weapon(object npc)
{
	int j, n;
	object weapon, owner;

	if(!npc || !objectp(npc) ) return;
	n = 0;
	do{
		j = random(sizeof(special_weapon));
		weapon = find_object( special_weapon[j] );
		if( weapon && objectp(weapon) )
		{
			owner = environment(weapon);
			if(owner && objectp(owner) && !userp(owner) )
				break;
		}
		weapon = new(special_weapon[j]);
		n++;
	}while(!weapon && n < 20);
	if( weapon && objectp(weapon) )
		weapon->move(npc);
}

void make_npc(object room)
{
	 object *inv,npc,ob;
	 int i,j,n,r;

	 if( !room || !objectp(room) )return;

	 n = random( 8 );

	 if( n < 1)
	 {
		do{
			j = random(sizeof(high_npc));
			npc = new(high_npc[j]);
		}
		while( !npc || !objectp(npc) );
	 }
	 else if( n < 5)
	 {
		do{
			j = random(sizeof(middle_npc));
			npc = new(middle_npc[j]);
		}
		while( !npc || !objectp(npc) );
	 }
	 else if( n < 7)
	 {
		do{
			j = random(sizeof(low_npc));
			npc = new(low_npc[j]);
		}
		while( !npc || !objectp(npc) );
	 }
	 else
	 {
		do{
			j = random(sizeof(misc_npc));
			npc = new(misc_npc[j]);
		}
		while( !npc || !objectp(npc) );
	 }

	 if (random(2) == 1) {
		 ob = new("/d/bwdh/sjsz/obj/renshen-guo");
	 }
	 else if (random(20) == 1) {
		 ob = new("/d/bwdh/sjsz/obj/bomb");
	 }
	 else
	 {
		 ob = new("/clone/drug/jinchuang");
		 ob->set_amount(random(20)+1);
	 }
	 if( ob && objectp(ob) )ob->move(npc);
	 make_weapon(npc);
	 npc->move(room);
}


void refresh_sjsz()
{
	 object room,*inv;
	 int n, r ;
	 string rm;

	 refresh_room("/d/bwdh/sjsz/wgate.c");
	 refresh_room("/d/bwdh/sjsz/wgarden.c");
	 refresh_room("/d/bwdh/sjsz/wtang.c");
	 refresh_room("/d/bwdh/sjsz/wting.c");
	 refresh_room("/d/bwdh/sjsz/wzoulan.c");
	 refresh_room("/d/bwdh/sjsz/egate.c");
	 refresh_room("/d/bwdh/sjsz/egarden.c");
	 refresh_room("/d/bwdh/sjsz/etang.c");
	 refresh_room("/d/bwdh/sjsz/eting.c");
	 refresh_room("/d/bwdh/sjsz/ezoulan.c");

	 refresh_room("/d/bwdh/sjsz/etower1.c");
	 refresh_room("/d/bwdh/sjsz/etower2.c");
	 refresh_room("/d/bwdh/sjsz/etower3.c");
	 refresh_room("/d/bwdh/sjsz/etower4.c");
	 refresh_room("/d/bwdh/sjsz/etower5.c");
	 refresh_room("/d/bwdh/sjsz/etower6.c");
	 refresh_room("/d/bwdh/sjsz/etower7.c");

	 refresh_room("/d/bwdh/sjsz/wtower1.c");
	 refresh_room("/d/bwdh/sjsz/wtower2.c");
	 refresh_room("/d/bwdh/sjsz/wtower3.c");
	 refresh_room("/d/bwdh/sjsz/wtower4.c");
	 refresh_room("/d/bwdh/sjsz/wtower5.c");
	 refresh_room("/d/bwdh/sjsz/wtower6.c");
	 refresh_room("/d/bwdh/sjsz/wtower7.c");


	 for(r=1;r<=30;r++){
		  if (r < 10)
		  {
				rm = "/d/bwdh/sjsz/room_0" + sprintf("%d", r);
				room = find_object(rm);
				if(!room) load_object(rm);
			}
		  else
		  {
				rm = "/d/bwdh/sjsz/room_" + sprintf("%d", r);
				room = find_object(rm);
				if( !room ) load_object(rm);
		  }
		  if(!room) continue;

		  refresh_room(rm);
		  inv = all_inventory(room);
		  n = sizeof(inv);
		  if ( n == 0 ) {
				make_npc(room);
		  }
	 }
	 return;
}


int auto_check()
{
	int nCounts;
	object board;
	 board =  find_object(BOARD);
	 if (!objectp(board)) {
			  board = load_object(BOARD);
			  if (!objectp(board))
					return 0;
	 }

	nCounts = board->query("counts");

	if(nCounts <=0 )
	{
	 if( board->query("west") && board->query("east") )
		{
			call_out("auto_check", 10);
			call_out("clean_sjsz",20);
			do_judge("");
			return 0;
		}
	 else return 1;
	}

	nCounts--;
	board->set("counts",nCounts);
	remove_call_out("auto_check");
	call_out("auto_check",60*3);

	refresh_sjsz();
}

int do_goon()
{
	object me = this_player();
	auto_check();
	return 1;
}


void clean_sjsz()
{
	int i;
	object room;

	for ( i = 1; i <= 30; i++) {
			if (i < 10)
			{
			 update_room("/d/bwdh/sjsz/room_0" + sprintf("%d", i));
			 room = find_object("/d/bwdh/sjsz/room_0" + sprintf("%d", i));
			}
			else
			{
			 update_room("/d/bwdh/sjsz/room_" + sprintf("%d", i));
			 room = find_object("/d/bwdh/sjsz/room_" + sprintf("%d", i));
			}

			if( room && objectp(room) )
					 destruct(room);
	}
	update_room("/d/bwdh/sjsz/wgate.c");
	update_room("/d/bwdh/sjsz/wgarden.c");
	update_room("/d/bwdh/sjsz/wtang.c");
	update_room("/d/bwdh/sjsz/wting.c");
	update_room("/d/bwdh/sjsz/wzoulan.c");
	update_room("/d/bwdh/sjsz/egate.c");
	update_room("/d/bwdh/sjsz/egarden.c");
	update_room("/d/bwdh/sjsz/etang.c");
	update_room("/d/bwdh/sjsz/eting.c");
	update_room("/d/bwdh/sjsz/ezoulan.c");
	update_room("/d/bwdh/sjsz/west_xiangfang.c");
	update_room("/d/bwdh/sjsz/east_xiangfang.c");
	 update_room("/d/bwdh/sjsz/etower1.c");
	 update_room("/d/bwdh/sjsz/etower2.c");
	 update_room("/d/bwdh/sjsz/etower3.c");
	 update_room("/d/bwdh/sjsz/etower4.c");
	 update_room("/d/bwdh/sjsz/etower5.c");
	 update_room("/d/bwdh/sjsz/etower6.c");
	 update_room("/d/bwdh/sjsz/etower7.c");

	 update_room("/d/bwdh/sjsz/wtower1.c");
	 update_room("/d/bwdh/sjsz/wtower2.c");
	 update_room("/d/bwdh/sjsz/wtower3.c");
	 update_room("/d/bwdh/sjsz/wtower4.c");
	 update_room("/d/bwdh/sjsz/wtower5.c");
	 update_room("/d/bwdh/sjsz/wtower6.c");
	 update_room("/d/bwdh/sjsz/wtower7.c");

}

int do_duet(string arg)
{
	 object me = this_player(), player;
	 object room, ob, npc, env, *inv;
	 string cmd;
	 int n, total, i, j;
	 object board;

	 if( !arg || sscanf(arg, "%s", cmd) != 1)
		  return notify_fail("指令错误!\n");

	 board =  find_object(BOARD);
	 if (!objectp(board)) {
			  board = load_object(BOARD);
			  if (!objectp(board))
					return notify_fail("找不到团体赛成绩版。\n");
	 }

	 switch (cmd) {
	 case "start" :
						  if( !board->query("east") || !board->query("east") )
							  return notify_fail("好象现在没有比赛。\n");
						  call_out("auto_check",60*4);
						  room = find_object("/d/bwdh/sjsz/wtang");
						  if(!room)room = load_object("/d/bwdh/sjsz/wtang");
						  room->set("flag",1);
						  room->set("team_name",board->query("westname") );
						  room = find_object("/d/bwdh/sjsz/etang");
						  if(!room)room = load_object("/d/bwdh/sjsz/etang");
						  room->set("flag",1);
						  room->set("team_name", board->query("eastname") );

						  if( wizardp(me) || me->query("judge") )
						  {
								message_vision("$N宣布比赛开始!\n", me);
								CHANNEL_D->do_channel(me, "chat", board->query("westname")+"队现在开始与"+board->query("eastname")+"队决斗!\n" );
						  }

						  board->set("counts",5);
						  break;
	 case "clean" :
						 clean_sjsz();
						 board->delete("east");
						 board->delete("west");
						 board->delete("eastname");
						 board->delete("westname");
						 break;
	 default : return notify_fail("指令错误!\n");
				  break;
	 }
	 return 1;
}

int do_judge(string arg) {
	 object ob = this_object(), rum_ob;
	 string side,msg;
	 int east, west, n;
	 object board;
	 mapping entryA, entryB;
	 int i, scoreA, scoreB;

	 board =  find_object(BOARD);
	 if (!objectp(board)) {
			  board = load_object(BOARD);
			  if (!objectp(board))
					return 1;//notify_fail("找不到团体赛成绩版。\n");
	 }

	 if( !board->query("east") || !board->query("east") )
		  return 1;//notify_fail("好象现在没有比赛。\n");

	 if( !arg || arg=="" )
	 {
		 entryA = board->query("team/" + board->query("east"));
		 if ( !entryA )return notify_fail("找不到东队。\n");
		 entryB = board->query("team/" + board->query("west"));
		 if ( !entryB )return notify_fail("找不到西队。\n");
		 scoreA = to_int(entryA["this_score"]);
		 scoreB = to_int(entryB["this_score"]);

		 if( scoreA > scoreB ) side = "east";
		 else if( scoreA == scoreB ) side = "tie";
		 else side = "west";
	 }

	 msg = "现在宣布比赛结束!";

	 switch(side) {
	 case "east" :   east = 2; west = 0;
						  //if(objectp(me)) message_vision("$N判东队胜!\n", me);
						  msg += board->query("eastname") + "胜" + board->query("westname");

⌨️ 快捷键说明

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