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