📄 control.c
字号:
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 + -