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

📄 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 + -