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