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