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

📄 control.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
📖 第 1 页 / 共 4 页
字号:
						  break;
	 case "west" :   east = 0; west = 2;
						  //if(objectp(me))message_vision("$N判西队胜!\n", me);
						  msg += board->query("westname") + "胜" + board->query("eastname");
						  break;
	 case "tie"  :   east = 1; west = 1;
						  //if(objectp(me))message_vision("$N判本局平!\n", me);
						  msg += board->query("eastname") + "平" + board->query("westname");
						  break;
	 default : return 1;//notify_fail("指令错误!\n");
	 }
	 msg += "\n";

	 rum_ob = load_object("/d/huashan/npc/referee");
	 if(objectp(rum_ob))
	 {
		 CHANNEL_D->do_channel(rum_ob, "chat", msg );
		 destruct(rum_ob);
	 }

	 n = to_int(board->query("east"));
	 call_out("update",1,n, east);
	 n = to_int(board->query("west"));
	 call_out("update",1,n, west);

	 board->delete("east");
	 board->delete("west");
	 board->delete("eastname");
	 board->delete("westname");

	 call_out("sort_rank", 18);
	 call_out( "do_duet", 20, "clean" );

	 return 1;
}

int update(int n, int result) {
	 object board, player;
	 mapping entry;
	 int i, score;
	 string id;

	 board =  find_object(BOARD);
	 if (!objectp(board)) {
		  board = load_object(BOARD);
		  if (!objectp(board))
				return 1;
	 }

	 entry = board->query("team/" + sprintf("%d", n));
	 if( !entry )return 1;

	 score = (int)(entry["score"]);
	 score = score + result;
	 entry["score"] = score;

	 switch(result) {
	 case 2 :
				 entry["win"] = entry["win"] + 1;
				 break;
	 case 1 :
				 entry["tie"] = entry["tie"] + 1;

	 case 0 :
				 entry["lose"] = entry["lose"] + 1;
	 default : break;
	 }

	 board->set("team/" + sprintf("%d", n),entry);


	for ( i = 0; i < sizeof(board->query( "team/" + sprintf("%d", n) + "/ids")); i++) {
								id = board->query( "team/" + sprintf("%d", n) + "/ids/" + sprintf("%d", i+1) );
								if( !id ) continue;
								player = find_player(id);
								if ( !player || !objectp(player) || !userp(player) )
								{
									//write("找不到玩家 " + board->query( "team/" + sprintf("%d", n) + "/names/" + sprintf("%d", i+1) ) + "\n");
									continue;
								}

								score = player->query("sjsz/this_score")/5;
								if( score > 1500 ) score = 1500;
								player->add("combat_exp",score);

								if( result == 2)
								{
									player->add("sjsz/win",1);

									if(player->query("sjsz/this_score") > 0)
									{
										player->add("combat_exp",1800);
										player->set("potential",player->query("max_potential")*2/3 + random( player->query("max_potential")/3 ) );
									}
								}
								else if( result == 1)
								{
									player->add("sjsz/tie",1);
									if(player->query("sjsz/this_score") > 0)
									{
										player->add("combat_exp",1000);
										player->set("potential",player->query("max_potential")/2 + random( player->query("max_potential")/2 ) );
									}
								}
								else
								{
									player->add("sjsz/lose",1);
									if(player->query("sjsz/this_score") > 0)
									{
										player->add("combat_exp",800);
										player->set("potential",player->query("max_potential")/3 + random( player->query("max_potential")/2 ) );
									}
								}

								player->delete("sjsz/entrance");
								player->delete("sjsz/this_score");
								player->delete("sjsz/this_flag");
								player->delete("sjsz/this_exp");
								player->delete("sjsz/white");
								player->delete("sjsz/red");
								if( player->query("sjsz/white") )
								 call_out("move_me",1+random(16),player,"/d/bwdh/sjsz/kantai_e1.c");
								else call_out("move_me",1+random(16),player,"/d/bwdh/sjsz/kantai_w1.c");

								if( !living(player) )player->revive(1);
								full_all(player);
								nude(player);
message_vision(HIW"主持人突然出现,说道:时候已到,还不快退出山庄!说完,一掌一推,$N就觉得腾云驾雾一般飞起。\n",player);
	}


	 return 1;
}

void sort_rank()
{
	 object board;
	 mapping entry, entryB;
	 int i, score, scoreB, win, winB, tie, tieB, lose, loseB, exchange, j;


	 board =  find_object(BOARD);
	 if (!objectp(board)) {
			  board = load_object(BOARD);
			  if (!objectp(board))
					return ;
	 }


	 for(i = 1; i < sizeof(board->query("team")); i++) {
		  entry = board->query("team/" + sprintf("%d", i));
		  score = to_int(entry["score"]);
		  win = to_int(entry["win"]);
		  tie = to_int(entry["tie"]);
		  lose = to_int(entry["lose"]);
		  for ( j = i + 1; j <= sizeof(board->query("team")); j++) {
				entryB = board->query("team/" + sprintf("%d", j));
				scoreB = to_int(entryB["score"]);
				winB = to_int(entryB["win"]);
				tieB = to_int(entryB["tie"]);
				loseB = to_int(entryB["lose"]);
				exchange = 0;
				if (score < scoreB) exchange = 1;
				if( (score == scoreB) && (win < winB) ) exchange = 1;
				if( (score == scoreB) && (win = winB) && (tie < tieB) ) exchange = 1;
				if( (score == scoreB) && (win = winB) && (tie = tieB) && (lose > loseB) ) exchange = 1;
				if (exchange) {
					 board->set("team/" + sprintf("%d", i),entryB);
					 board->set("team/" + sprintf("%d", j),entry);
				}
		  }
	 }
	 return;
}

int do_assign(string arg) {
	 object me = this_player(), player, board, ob = this_object();
	 mapping entry;
	 string side,id,s;
	 int n, total, i;

	 if( sscanf(arg, "%d %s", n, side) != 2)
		  return notify_fail("指令错误!\n");

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

	 n = to_int(arg);

	 total = sizeof(board->query("team"));
	 if ( (n < 1) || (n > total) )
		  return notify_fail("找不到这个队。\n");
	 s = "team/" + sprintf("%d", n);
	 entry = board->query(s);

	for ( i = 0; i < sizeof(board->query( s + "/ids")); i++) {
		id = board->query( s + "/ids/" + sprintf("%d", i+1) );
		if( !id ) return notify_fail("找不到玩家 " + id + "\n");
		player = find_player(id);
		if (!player || !objectp(player) || !userp(player))
			return notify_fail("找不到玩家 " + id + "\n");
	}

	 if( !me->query("sjsz/leader") && !wizardp(me) )
		  return notify_fail("只有队长才能下命令!\n");


	 switch(side) {
	 case "east" :

						for ( i = 0; i < sizeof(board->query( s + "/ids")); i++) {
								id = board->query( s + "/ids/" + sprintf("%d", i+1) );
								if( !id ) continue;
								player = find_player(id);
								if (!player || !objectp(player) || !userp(player))
								{
										  //write("找不到玩家 " + id + "\n");
										  continue;
								}

								player->set("sjsz/entrance", "east");
								player->delete("sjsz/this_score");
								player->delete("sjsz/this_flag");
								player->delete("sjsz/this_exp");
								call_out("move_me",3+random(10),player,"/d/bwdh/sjsz/east_xiangfang.c");
								if( !living(player) ) player->revive(1);
								full_all(player);
								//message_vision("主持人运气一掌把$N送进试剑山庄。\n",player);
						  }

						  //message_vision("$N分配第" + chinese_number(n) + "队从东看台如场。\n", me);
						  board->set( "eastname", entry["title"] );
						  board->set("east",n);
						  entry["this_score"] = 0;
						  board->set(s,entry);
						  return 1;
						  break;
	 case "west" :

						for ( i = 0; i < sizeof(board->query( s + "/ids")); i++) {
								id = board->query( s + "/ids/" + sprintf("%d", i+1) );
								if( !id ) continue;
								player = find_player(id);
								if (!player || !objectp(player) || !userp(player))
								{
										  //write("找不到玩家 " + id + "\n");
										  continue;
								}

								player->set("sjsz/entrance", "west");
								player->delete("sjsz/this_score");
								player->delete("sjsz/this_flag");
								player->delete("sjsz/this_exp");
								call_out("move_me",3+random(10),player,"/d/bwdh/sjsz/west_xiangfang.c");
								if( !living(player) ) player->revive(1);
								full_all(player);
								//message_vision("主持人运气一掌把$N送进试剑山庄。\n",player);
						  }

						  //message_vision("$N分配第" + chinese_number(n) + "队从西看台如场。\n", me);
						  board->set( "westname", entry["title"] );
						  board->set("west",n);
						  entry["this_score"] = 0;
						  board->set(s,entry);
						  return 1;
						  break;
	 default:        return notify_fail("指令错误!\n");
						  break;
	 }

	 board->save();

	 return 1;
}

int do_discard(string arg) {
	 object me = this_player(), board, player;
	 mapping entry;
	 int n, i, total;
	 string id;

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

	 if( !me->query("sjsz/leader") && !wizardp(me) )
		  return notify_fail("只有队长才能下命令!\n");

	 n = to_int(arg);
	 total = sizeof(board->query("team"));
	 if ( (n < 1) || (n > total) )
		  return notify_fail("找不到这个队。\n");

	 entry = board->query("team/" + sprintf("%d", n));

	 if( entry["title"] != me->query("sjsz/leader") && !wizardp(me) )
		return notify_fail("只有本队队长才能下命令!\n");



	 for ( i = 0; i < sizeof(board->query("team/" + sprintf("%d", n) + "/ids")); i++) {
				id = board->query( "team/" + sprintf("%d", n) + "/ids/" + sprintf("%d", i+1) );
				if(!id)continue;
				player = find_player(id);
				if (!player || !objectp(player) || !userp(player))
					  write("找不到玩家 " + id + "\n");
				else
					player->delete("sjsz");
	 }


	 message_vision("$N宣布解散第" + chinese_number(n) + "队:"+entry["title"]+"。\n", me);
	 board->delete("team/" + sprintf("%d", n));
	 for (i = n; i < total; i++) {
		  entry = board->query("team/" + sprintf("%d", i+1));
		  board->set("team/" + sprintf("%d", i), entry);
	 }

	 board->delete("team/" + sprintf("%d", total));
	 board->save();
	 return 1;
}


int do_add(string arg) {
	 object me = this_player(), board, player,here;
	 string *user = ({ "", "", "", "", "", "", "", "", "","", "", "", "", "", "", "", "", "","", "", "", "", "", "", "", "", "","", "", "", "", "", "", "", "", "","", "", "", "", "", "", "", "", "","", "", "", "", "", "", "", "", "" });
	 string title;
	 string msg = "";
	 int total, i,j,exp;

	 if(!arg)return notify_fail("Usage: teamup group_title user1 user2 user3 user4 user5 user6 ... user20\n3 to 20 players per team\n");

	 if( me->query("combat_exp") < 500000 )return notify_fail("主持人怒道:你武功这么差,岂配当队长?\n");

	 if(
		sscanf(arg, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4], user[5],user[6],user[7],user[8],user[9],user[10],user[11],user[12],user[13],user[14],user[15],user[16],user[17],user[18],user[19] ) != 21 &&
		sscanf(arg, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4], user[5],user[6],user[7],user[8],user[9],user[10],user[11],user[12],user[13],user[14],user[15],user[16],user[17],user[18] ) != 20 &&
		sscanf(arg, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4], user[5],user[6],user[7],user[8],user[9],user[10],user[11],user[12],user[13],user[14],user[15],user[16],user[17] ) != 19 &&
		sscanf(arg, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4], user[5],user[6],user[7],user[8],user[9],user[10],user[11],user[12],user[13],user[14],user[15],user[16] ) != 18 &&
		sscanf(arg, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4], user[5],user[6],user[7],user[8],user[9],user[10],user[11],user[12],user[13],user[14],user[15] ) != 17 &&
		sscanf(arg, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4], user[5],user[6],user[7],user[8],user[9],user[10],user[11],user[12],user[13],user[14]) != 16 &&
		sscanf(arg, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4], user[5],user[6],user[7],user[8],user[9],user[10],user[11],user[12],user[13]) != 15 &&
		sscanf(arg, "%s %s %s %s %s %s %s %s %s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4], user[5],user[6],user[7],user[8],user[9],user[10],user[11],user[12]) != 14 &&
		sscanf(arg, "%s %s %s %s %s %s %s %s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4], user[5],user[6],user[7],user[8],user[9],user[10],user[11]) != 13 &&
		sscanf(arg, "%s %s %s %s %s %s %s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4], user[5],user[6],user[7],user[8],user[9],user[10]) != 12 &&
		sscanf(arg, "%s %s %s %s %s %s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4], user[5],user[6],user[7],user[8],user[9]) != 11 &&
		sscanf(arg, "%s %s %s %s %s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4], user[5],user[6],user[7],user[8]) != 10 &&
		sscanf(arg, "%s %s %s %s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4], user[5],user[6],user[7]) != 9 &&
		sscanf(arg, "%s %s %s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4], user[5],user[6]) != 8 &&
		sscanf(arg, "%s %s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4], user[5]) != 7 &&
		sscanf(arg, "%s %s %s %s %s %s", title, user[0], user[1], user[2], user[3], user[4]) != 6 &&
		sscanf(arg, "%s %s %s %s %s", title, user[0], user[1], user[2], user[3]) != 5 &&
		sscanf(arg, "%s %s %s %s", title, user[0], user[1], user[2] ) != 4 )
		  return notify_fail("Usage: teamup group_title user1 user2 user3 user4 user5 user6 ... user20\n3 to 20 players per team\n");


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

	 here = environment(me);

	  title = replace_string(title, "$BLK$", BLK);
	  title = replace_string(title, "$RED$", RED);
	  title = replace_string(title, "$GRN$", GRN);
	  title = replace_string(title, "$YEL$", YEL);
	  title = replace_string(title, "$BLU$", BLU);
	  title = replace_string(title, "$MAG$", MAG);
	  title = replace_string(title, "$CYN$", CYN);
	  title = replace_string(title, "$WHT$", WHT);
	  title = replace_string(title, "$HIR$", HIR);
	  title = replace_string(title, "$HIG$", HIG);
	  title = replace_string(title, "$HIY$", HIY);
	  title = replace_string(title, "$HIB$", HIB);
	  title = replace_string(title, "$HIM$", HIM);
	  title = replace_string(title, "$HIC$", HIC);
	  title = replace_string(title, "$HIW$", HIW);
	  title = replace_string(title, "$NOR$", NOR);


	 for(i = 0; i < 20; i++) {
		  if( user[i] == "" )break;
		  player = present(user[i], here);
		  if( !player && wizardp(me) )
			  player = find_player(user[i]);
		  if (!player || !objectp(player) || !userp(player))
			  return notify_fail("找不到玩家 " + user[i] + "\n");
		  if( player->query("sjsz/team_name") )
			  return notify_fail(player->query("name") + "已经是" + player->query("sjsz/team_name")+"的了。\n");
		  if( player->query("combat_exp")<80000 ) return notify_fail("主持人怒道:"+player->query("name")+"武功这么差,不配在试剑山庄舞剑。\n");
		  for(j=0;j<i;j++)
		  {
			 if(user[j] == user[i])
				return notify_fail(player->query("name") + "已经是" + player->query("sjsz/team_name")+"的了。\n");
		  }
	 }

	 total = sizeof(board->query("team"));
	 total++;
	 board->set("team/" + sprintf("%d",total)+"/title" , title);
	 board->set("team/" + sprintf("%d",total)+"/score" , 0);
	 board->set("team/" + sprintf("%d",total)+"/win" , 0);
	 board->set("team/" + sprintf("%d",total)+"/tie" , 0);
	 board->set("team/" + sprintf("%d",total)+"/lose" , 0);

	 exp = 0;
	 for(i = 0; i < 20; i++) {
		  if( user[i] == "" )break;

⌨️ 快捷键说明

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