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

📄 control.c

📁 C实现的MUD,对大家基本入门网络游戏很有帮助!
💻 C
📖 第 1 页 / 共 4 页
字号:
		  player = present(user[i], here);		  if( !player && wizardp(me) )			  player = find_player(user[i]);		  if (!player || !objectp(player) || !userp(player))				continue;		  board->set("team/" + sprintf("%d",total)+"/ids/"+sprintf("%d",i+1), player->query("id"));		  board->set("team/" + sprintf("%d",total)+"/names/"+sprintf("%d",i+1), player->query("name"));		  player->delete("sjsz");		  player->set("sjsz/team_name",title);		  player->set_temp("apply/short", ({HIW""+player->query("sjsz/team_name")+"  "NOR+player->name()+"("+player->query("id")+")"}));		  exp += player->query("combat_exp");		  msg = msg + player->query("name") + " ";	 }	 if( exp < 1000000 )	 {		  board->delete("team/" + sprintf("%d",total));		  for(i = 0; i < 20; i++)		  {			  if( user[i] == "" )break;			  player = find_player(user[i]);			  if (!player || !objectp(player) || !userp(player))				continue;			  player->delete("sjsz");			  player->delete("apply/short");		  }		  return notify_fail("主持人怒道:尔等武功这么差,不配在试剑山庄舞剑。\n");	 }	 board->set("team/" + sprintf("%d",total)+"/exp", exp);	 present(user[0],here)->set("sjsz/leader",title);	 /*board->set("team/" + sprintf("%d",total)+"/leader", me->query("id"));*/	 board->set("team/" + sprintf("%d",total)+"/leader", user[0] );	 board->save();	 message_vision("$N报名" + msg + "为第" + chinese_number(total) + "队:" + title + "\n", me);	 return 1;}int do_fire(string arg) {	 mapping entry;	 int i, j,k,exp;	 string title,id;	 object me = this_player(), board, player;	 if(!arg)		  return notify_fail("Usage: fire player\n");	 if( !me->query("sjsz/leader") && !wizardp(me) )		  return notify_fail("只有队长才能下命令!\n");	 player = find_player(arg);	 if(!player)return notify_fail("找不到这个玩家\n");	 if(player == me ) return notify_fail("你身为队长还开除自己?还是解散(dismiss)队伍算了。\n");	 board =  find_object(BOARD);	 if (!objectp(board)) {		  board = load_object(BOARD);		  if (!objectp(board))				return notify_fail("找不到团体赛成绩版。\n");	 }	 for(i = 1; i <= sizeof(board->query("team")); i++) {		  entry = board->query("team/" + sprintf("%d", i));		  title = entry["title"];		  if( title == me->query("sjsz/team_name") )		  {			for ( j = 0; j < sizeof(entry); j++) {				id= board->query("team/" + sprintf("%d", i) + "/ids/" + sprintf("%d", j+1) );				if( id != arg )continue;				player = find_player(id);				if( !player || !userp(player))					  return notify_fail("找不到玩家 " + board->query("team/" + sprintf("%d", i) + "/names/" + sprintf("%d", j+1) ) + "\n");				player->delete("sjsz");				for ( k = j; k < sizeof(keys(entry))-1; k++) {					board->set(("team/" + sprintf("%d", i) + "/names/" + sprintf("%d", k+1) ),						board->query("team/" + sprintf("%d", i) + "/names/" + sprintf("%d", k+2) ) );					board->set( ("team/" + sprintf("%d", i) + "/ids/" + sprintf("%d", k+1) ),						board->query("team/" + sprintf("%d", i) + "/ids/" + sprintf("%d", k+2) ) );				}				board->delete("team/" + sprintf("%d", i) + "/ids/" + sprintf("%d", k+2) );				exp = board->query("team/"+ sprintf("%d", i) + "/exp");				exp -= player->query("combat_exp");				exp = board->set("team/"+ sprintf("%d", i) + "/exp",exp);				if(player!=me)					message_vision("$N把$n开除出"+title+"!\n",me,player);				else message_vision("$N把自己开除出"+title+"!\n",me);				player->delete("sjsz");				board->save();				return 1;			}		 }	 }	 return notify_fail("这个玩家不在自己队伍\n");}int do_clean(string arg) {	 mapping entry;	 int i, j,k,exp;	 string title,id;	 object me = this_player(), board, player;	 if(!arg)		  return notify_fail("Usage: clean player to clean score\n");	 if( do_fire(arg) == 1 ) return 1;	 player = find_player(arg);	 if(!player)return notify_fail("找不到这个玩家\n");	 if( !me->query("sjsz/leader") && me != player  && !wizardp(me) )		  return notify_fail("只有队长或自己才能下命令!\n");	 board =  find_object(BOARD);	 if (!objectp(board)) {		  board = load_object(BOARD);		  if (!objectp(board))				return notify_fail("找不到团体赛成绩版。\n");	 }	 for(i = 1; i <= sizeof(board->query("team")); i++) {		  entry = board->query("team/" + sprintf("%d", i));		  title = entry["title"];			for ( j = 0; j < sizeof(entry); j++) {				id= board->query("team/" + sprintf("%d", i) + "/ids/" + sprintf("%d", j+1) );				if( id != arg )continue;				player = find_player(id);				if( !player || !userp(player))					  return notify_fail("找不到玩家 " + board->query("team/" + sprintf("%d", i) + "/names/" + sprintf("%d", j+1) ) + "\n");				player->delete("sjsz");				for ( k = j; k < sizeof(keys(entry))-1; k++) {					board->set(("team/" + sprintf("%d", i) + "/names/" + sprintf("%d", k+1) ),						board->query("team/" + sprintf("%d", i) + "/names/" + sprintf("%d", k+2) ) );					board->set( ("team/" + sprintf("%d", i) + "/ids/" + sprintf("%d", k+1) ),						board->query("team/" + sprintf("%d", i) + "/ids/" + sprintf("%d", k+2) ) );				}				board->delete("team/" + sprintf("%d", i) + "/ids/" + sprintf("%d", k+2) );				exp = board->query("team/"+ sprintf("%d", i) + "/exp");				exp -= player->query("combat_exp");				board->set("team/"+ sprintf("%d", i) + "/exp",exp);				if(player!=me)					message_vision("$N把$n开除出"+title+"!\n",me,player);				else message_vision("$N把自己开除出"+title+"!\n",me);				board->save();			}	 }	 player->delete("sjsz");	 return notify_fail(arg+" 比武成绩被清除.\n");}int do_challenge(string arg) {	 object me = this_player(), player, board,target;	 mapping entry;	 string id,s, my_title, target_title;	 int n, total, i, j, my_exp, target_exp,gap_exp;	 if( !arg || sscanf(arg, "%d", n) != 1)		  return notify_fail("指令错误!(challenge n(to challenge team n)\n");	 if( me->query("sjsz/challenging") ==n )return notify_fail("你已经向此队挑战了!\n");	 if( !me->query("sjsz/leader") )		  return notify_fail("只有队长才能下命令!\n");	 board =  find_object(BOARD);	 if (!objectp(board)) {		  board = load_object(BOARD);		  if (!objectp(board))				return notify_fail("找不到团体赛成绩版。\n");	 }	 s = "team/" + sprintf("%d", n);	 entry = board->query(s);	 if ( (n < 1) || !entry )		  return notify_fail("找不到这个队。\n");	target_title = entry["title"];	target_exp = entry["exp"];	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");	}	my_title = me->query("sjsz/team_name");	if( i+1 == n || target_title == my_title) return notify_fail("自己挑战自己?\n");  for ( i = 0; i < sizeof(board->query( "team" ) ); i++) {		if( board->query( "team/" + sprintf("%d", i+1) + "/title") == my_title )		{			if( i+1 == n || target_title == my_title) return notify_fail("自己挑战自己?\n");			my_exp = board->query( "team/" + sprintf("%d", i+1)  + "/exp");			if( my_exp > target_exp ) gap_exp = my_exp - target_exp;			else gap_exp = target_exp - my_exp;			if( gap_exp/10 / ((my_exp + target_exp)/1000) > 20 )				return notify_fail("山庄主人摇头道:“两队武功差距太大,不妥不妥!n");						for ( j = 0; j < sizeof(board->query( "team/" + sprintf("%d", i+1) + "/ids")); j++) {								id = board->query( "team/" + sprintf("%d", i+1) + "/ids/" + sprintf("%d", j+1) );								if( !id ) continue;								player = find_player(id);								if (!player || !objectp(player) || !userp(player))								{										  return notify_fail("找不到玩家 " + id + "\n");								}					  }			break;		}  }  target = find_player( board->query( "team/" + sprintf("%d", n) + "/leader" ) );  if( objectp(target))  {	  message_vision("$N代表"+my_title+"队向$n的"+target_title+"队发出挑战:"+HIR"“素闻尔队本领高强,今日可敢与本座决一死战!”\n"NOR,me,target);	  me->set("sjsz/challenging",n);	  target->set("sjsz/challenger",i+1);  }  return 1;}void do_accept(string arg) {	 object me = this_player(), player, board,target;	 mapping entry;	 string id,s, my_title, target_title;	 int n, total, i, j;	 if( !arg )		  return notify_fail("指令错误!\naccept n(to accept team n challenging)\n");	 n = to_int(arg);	 if( !me->query("sjsz/leader") )		  return notify_fail("只有队长才能下命令挑战!\n");	 if( me->query("sjsz/challenger") !=n )return notify_fail("此队目前并没有向你挑战!\n");	 board =  find_object(BOARD);	 if (!objectp(board)) {		  board = load_object(BOARD);		  if (!objectp(board))				return notify_fail("找不到团体赛成绩版。\n");	 }	 if( board->query("west") && board->query("east") )return notify_fail("山庄主人抱歉道:“现在有人已经占用比武场了。请稍后再来!”\n");	 s = "team/" + sprintf("%d", n);	 entry = board->query(s);	 if ( (n < 1) || !entry )		  return notify_fail("找不到这个队。\n");	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");	}	target_title = entry["title"];	my_title = me->query("sjsz/team_name");  for ( i = 0; i < sizeof(board->query( "team" ) ); i++) {		if( board->query( "team/" + sprintf("%d", i+1)  + "/title") == my_title )		{						for ( j = 0; j < sizeof(board->query( "team/" + sprintf("%d", i+1) + "/ids")); j++) {								id = board->query( "team/" + sprintf("%d", i+1) + "/ids/" + sprintf("%d", j+1) );								if( !id ) return notify_fail("找不到玩家 " + id + "\n");								player = find_player(id);								if (!player || !objectp(player) || !userp(player))								{										  return notify_fail("找不到玩家 " + id + "\n");								}					  }					  break;		}  }  target = find_player( board->query( "team/" + sprintf("%d", n) + "/leader" ) );  if( objectp(target))  {	  message_vision( my_title+"队$N应声对"+target_title+"队$n喝道:"+HIR"“"+RANK_D->query_rude(target)+","+RANK_D->query_self(me)+HIR"岂会怕你?今日本座就与你决一死战!弟兄们,抄家伙上啊!”\n"NOR,me,target);  }	start_busy(20);	call_out( "do_duet", 5, "start" );  clean_sjsz();  refresh_sjsz();  call_out( "do_assign",1, sprintf("%d west",i+1) );  message_vision( HIG"$N率领第"+chinese_number(i+1)+ "队"+my_title+"队由西门入场\n"NOR,me);  call_out( "do_assign",3, sprintf("%d east",n)  ) ;  message_vision( HIG"$N率领第"+chinese_number(n)+ "队"+target_title+"队由东门入场\n"NOR,target);    CHANNEL_D->do_channel(this_object(), "chat", me->query("name")+"率领"+my_title+"队现在开始与"+target->query("name")+"率领的"+target_title+"队决斗!\n" );  target->delete("sjsz/challenging");  me->delete("sjsz/challenger");}int do_auto_teamup(string arg) {	 object me = this_player(), board, player;	 string *user = ({ "", "", "", "", "", "", "", "", "","", "", "", "", "", "", "", "", "","", "", "", "", "", "", "", "", "","", "", "", "", "", "", "", "", "","", "", "", "", "", "", "", "", "","", "", "", "", "", "", "", "", "" });	 string title;	 string msg = "";	 int ppl=0, i,j, exp, exp1,exp2,sum_exp,top_exp,sec_exp;     object *inv, here = environment(me);	 string team1,team2,top_id,sec_id;	 board =  find_object(BOARD);	 if (!objectp(board)) {		  board = load_object(BOARD);		  if (!objectp(board))				return notify_fail("找不到团体赛成绩版。\n");	 }	 if( this_object()->is_busy() )return notify_fail("主持人道:还在忙着呢!\n") ;	 if( board->query("west") && board->query("east") )return notify_fail("山庄主人抱歉道:“现在有人已经占用比武场了。请稍后再来!”\n");	 if( me->query("combat_exp") < 500000 )return notify_fail("主持人怒道:你武功这么差,岂配指挥老子?\n");	 inv = all_inventory(here);	 i = sizeof(inv);	 exp=0;	 top_exp=0;	 sec_exp=0;	 while(i)	{		 i--;	  if( inv[i] && objectp(inv[i]) && living(inv[i]) && userp(inv[i]) && inv[i]->query("combat_exp") > 80000 )	  {		  exp = inv[i]->query("combat_exp"); 		  if( exp > top_exp )		  { 			sec_exp=top_exp; sec_id = top_id; 			top_exp = exp; top_id = inv[i]->query("id");		  }		  if( exp >sec_exp && exp < top_exp ){ sec_exp=exp; sec_id = inv[i]->query("id"); }		  sum_exp += exp;		  inv[i]->delete("sjsz");		  ppl++;	  }	 }	 if(ppl<6)return notify_fail("人数不够。\n");	 i = sizeof(inv);	 exp1=top_exp;	 exp2=sec_exp;	 team1 = HIW + "野虎队" + NOR + " " +top_id;	 team2 = HIR + "猛狮队" + NOR + " " +sec_id;     message_vision( HIG"主持人分配$N率领第一队\n"NOR,present(top_id,here) );	 message_vision( HIG"主持人分配$N率领第二队\n"NOR,present(sec_id,here) );	 while(i)	{		 i--;	  if( inv[i] && objectp(inv[i]) && living(inv[i]) && userp(inv[i]) && inv[i]->query("combat_exp") > 80000 )	  {		  exp = inv[i]->query("combat_exp"); 		  if( exp == top_exp || exp == sec_exp )continue;		  if(exp1 > exp2 && random(4) != 1)		  {			  team2 += " "+inv[i]->query("id");			  exp2 += exp;			  inv[i]->delete("sjsz");			  //message_vision( HIG"主持人分配$N加入第二队\n"NOR,inv[i] );		  }		  else		  {			  team1 += " "+inv[i]->query("id");			  exp1 += exp;			  inv[i]->delete("sjsz");			  //message_vision( HIG"主持人分配$N加入第一队\n"NOR,inv[i] );		  }	  }	 }	 message_vision( HIG"主持人向$N报告道:第一队经验总数:"+exp1+"第二队经验总数:"+exp2+"\n"NOR,me);	 board->delete("team");	 board->delete("counts");	 board->delete("east");	 board->delete("west");	 board->save();	 call_out("do_add",1,team2);	 start_busy(5);	 return do_add(team1);}

⌨️ 快捷键说明

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