📄 control.c
字号:
LOGIN_D->enter_world(link_ob, obj, 1);
obj->move(env);
return 1;
}
int do_refresh(string arg)
{
object ob;
if(!arg)return notify_fail("你想要更新谁?\n");
ob = find_player(arg);
if( ob && objectp(ob) && userp(ob) && ob->query("sjsz") )
update_player(ob);
else return notify_fail("没有这个人在试剑山庄中。\n");
}
int update_room (string file)
{
int i;
object obj, *inv;
string err;
if ( (obj = find_object(file)) && objectp(obj) ) {
inv = all_inventory(obj);
i = sizeof(inv);
while(i--)
{
if( inv[i] && objectp(inv[i]) && userp(inv[i]) )
{
call_out("move_me",1+random(4),inv[i],"/d/bwdh/sjsz/kantai_w1.c");
if( !living(inv[i]) )inv[i]->revive(1);
full_all(inv[i]);
nude(inv[i]);
}
else
{
if(inv[i] && objectp(inv[i]))
{
my_destruct(inv[i]);
}
}
}
my_destruct(obj);
}
}
/*
This will refresh a room however it won't destruct the room
*/
int refresh_room (string file)
{
int i;
object obj, *inv, me = this_player();
string err;
if (obj = find_object(file)) {
inv = all_inventory(obj);
i = sizeof(inv);
while(i--)
{
if( inv[i] && objectp(inv[i]) && userp(inv[i]) )
{
if( !living(inv[i]) || inv[i]->query("qi") <= 0 )
{
if( inv[i]->query("sjsz/red") )
{
call_out("move_me",1+random(4),inv[i],"/d/bwdh/sjsz/west_xiangfang.c");
}
else if( inv[i]->query("sjsz/white") )
{
call_out("move_me",1+random(4),inv[i],"/d/bwdh/sjsz/east_xiangfang.c");
}
if( !living(inv[i]) )inv[i]->revive(1);
full_all(inv[i]);
nude(inv[i]);
}
}
else
{
if( inv[i] && objectp(inv[i]) && inv[i]->query("race") != "人类" && inv[i]->query("id") != "pao"
&& inv[i]->query("id") != "dan tou" && inv[i]->query("id") != "huo yao" && inv[i]->query("id") != "box" )
my_destruct(inv[i]);
}
}
}
}
void make_weapon(object npc)
{
int j, n;
object weapon, owner;
if(!npc || !objectp(npc) ) return;
n = 0;
do{
j = random(sizeof(special_weapon));
weapon = find_object( special_weapon[j] );
if( weapon && objectp(weapon) )
{
owner = environment(weapon);
if(owner && objectp(owner) && !userp(owner) )
break;
}
weapon = new(special_weapon[j]);
n++;
}while(!weapon && n < 20);
if( weapon && objectp(weapon) )
weapon->move(npc);
}
void make_npc(object room)
{
object *inv,npc,ob;
int i,j,n,r;
if( !room || !objectp(room) )return;
n = random( 8 );
if( n < 1)
{
do{
j = random(sizeof(high_npc));
npc = new(high_npc[j]);
}
while( !npc || !objectp(npc) );
}
else if( n < 5)
{
do{
j = random(sizeof(middle_npc));
npc = new(middle_npc[j]);
}
while( !npc || !objectp(npc) );
}
else if( n < 7)
{
do{
j = random(sizeof(low_npc));
npc = new(low_npc[j]);
}
while( !npc || !objectp(npc) );
}
else
{
do{
j = random(sizeof(misc_npc));
npc = new(misc_npc[j]);
}
while( !npc || !objectp(npc) );
}
if (random(2) == 1) {
ob = new("/d/bwdh/sjsz/obj/renshen-guo");
}
else if (random(20) == 1) {
ob = new("/d/bwdh/sjsz/obj/bomb");
}
else
{
ob = new("/clone/drug/jinchuang");
ob->set_amount(random(20)+1);
}
if( ob && objectp(ob) )ob->move(npc);
make_weapon(npc);
npc->move(room);
}
void refresh_sjsz()
{
object room,*inv;
int n, r ;
string rm;
refresh_room("/d/bwdh/sjsz/wgate.c");
refresh_room("/d/bwdh/sjsz/wgarden.c");
refresh_room("/d/bwdh/sjsz/wtang.c");
refresh_room("/d/bwdh/sjsz/wting.c");
refresh_room("/d/bwdh/sjsz/wzoulan.c");
refresh_room("/d/bwdh/sjsz/egate.c");
refresh_room("/d/bwdh/sjsz/egarden.c");
refresh_room("/d/bwdh/sjsz/etang.c");
refresh_room("/d/bwdh/sjsz/eting.c");
refresh_room("/d/bwdh/sjsz/ezoulan.c");
refresh_room("/d/bwdh/sjsz/etower1.c");
refresh_room("/d/bwdh/sjsz/etower2.c");
refresh_room("/d/bwdh/sjsz/etower3.c");
refresh_room("/d/bwdh/sjsz/etower4.c");
refresh_room("/d/bwdh/sjsz/etower5.c");
refresh_room("/d/bwdh/sjsz/etower6.c");
refresh_room("/d/bwdh/sjsz/etower7.c");
refresh_room("/d/bwdh/sjsz/wtower1.c");
refresh_room("/d/bwdh/sjsz/wtower2.c");
refresh_room("/d/bwdh/sjsz/wtower3.c");
refresh_room("/d/bwdh/sjsz/wtower4.c");
refresh_room("/d/bwdh/sjsz/wtower5.c");
refresh_room("/d/bwdh/sjsz/wtower6.c");
refresh_room("/d/bwdh/sjsz/wtower7.c");
for(r=1;r<=30;r++){
if (r < 10)
{
rm = "/d/bwdh/sjsz/room_0" + sprintf("%d", r);
room = find_object(rm);
if(!room) load_object(rm);
}
else
{
rm = "/d/bwdh/sjsz/room_" + sprintf("%d", r);
room = find_object(rm);
if( !room ) load_object(rm);
}
if(!room) continue;
refresh_room(rm);
inv = all_inventory(room);
n = sizeof(inv);
if ( n == 0 ) {
make_npc(room);
}
}
return;
}
int auto_check()
{
int nCounts;
object board;
board = find_object(BOARD);
if (!objectp(board)) {
board = load_object(BOARD);
if (!objectp(board))
return 0;
}
nCounts = board->query("counts");
if(nCounts <=0 )
{
if( board->query("west") && board->query("east") )
{
call_out("auto_check", 10);
call_out("clean_sjsz",20);
do_judge("");
return 0;
}
else return 1;
}
nCounts--;
board->set("counts",nCounts);
remove_call_out("auto_check");
call_out("auto_check",60*3);
refresh_sjsz();
}
int do_goon()
{
object me = this_player();
auto_check();
return 1;
}
void clean_sjsz()
{
int i;
object room;
for ( i = 1; i <= 30; i++) {
if (i < 10)
{
update_room("/d/bwdh/sjsz/room_0" + sprintf("%d", i));
room = find_object("/d/bwdh/sjsz/room_0" + sprintf("%d", i));
}
else
{
update_room("/d/bwdh/sjsz/room_" + sprintf("%d", i));
room = find_object("/d/bwdh/sjsz/room_" + sprintf("%d", i));
}
if( room && objectp(room) )
destruct(room);
}
update_room("/d/bwdh/sjsz/wgate.c");
update_room("/d/bwdh/sjsz/wgarden.c");
update_room("/d/bwdh/sjsz/wtang.c");
update_room("/d/bwdh/sjsz/wting.c");
update_room("/d/bwdh/sjsz/wzoulan.c");
update_room("/d/bwdh/sjsz/egate.c");
update_room("/d/bwdh/sjsz/egarden.c");
update_room("/d/bwdh/sjsz/etang.c");
update_room("/d/bwdh/sjsz/eting.c");
update_room("/d/bwdh/sjsz/ezoulan.c");
update_room("/d/bwdh/sjsz/west_xiangfang.c");
update_room("/d/bwdh/sjsz/east_xiangfang.c");
update_room("/d/bwdh/sjsz/etower1.c");
update_room("/d/bwdh/sjsz/etower2.c");
update_room("/d/bwdh/sjsz/etower3.c");
update_room("/d/bwdh/sjsz/etower4.c");
update_room("/d/bwdh/sjsz/etower5.c");
update_room("/d/bwdh/sjsz/etower6.c");
update_room("/d/bwdh/sjsz/etower7.c");
update_room("/d/bwdh/sjsz/wtower1.c");
update_room("/d/bwdh/sjsz/wtower2.c");
update_room("/d/bwdh/sjsz/wtower3.c");
update_room("/d/bwdh/sjsz/wtower4.c");
update_room("/d/bwdh/sjsz/wtower5.c");
update_room("/d/bwdh/sjsz/wtower6.c");
update_room("/d/bwdh/sjsz/wtower7.c");
}
int do_duet(string arg)
{
object me = this_player(), player;
object room, ob, npc, env, *inv;
string cmd;
int n, total, i, j;
object board;
if( !arg || sscanf(arg, "%s", cmd) != 1)
return notify_fail("指令错误!\n");
board = find_object(BOARD);
if (!objectp(board)) {
board = load_object(BOARD);
if (!objectp(board))
return notify_fail("找不到团体赛成绩版。\n");
}
switch (cmd) {
case "start" :
if( !board->query("east") || !board->query("east") )
return notify_fail("好象现在没有比赛。\n");
call_out("auto_check",60*4);
room = find_object("/d/bwdh/sjsz/wtang");
if(!room)room = load_object("/d/bwdh/sjsz/wtang");
room->set("flag",1);
room->set("team_name",board->query("westname") );
room = find_object("/d/bwdh/sjsz/etang");
if(!room)room = load_object("/d/bwdh/sjsz/etang");
room->set("flag",1);
room->set("team_name", board->query("eastname") );
if( wizardp(me) || me->query("judge") )
{
message_vision("$N宣布比赛开始!\n", me);
CHANNEL_D->do_channel(me, "chat", board->query("westname")+"队现在开始与"+board->query("eastname")+"队决斗!\n" );
}
board->set("counts",5);
break;
case "clean" :
clean_sjsz();
board->delete("east");
board->delete("west");
board->delete("eastname");
board->delete("westname");
break;
default : return notify_fail("指令错误!\n");
break;
}
return 1;
}
int do_judge(string arg) {
object ob = this_object(), rum_ob;
string side,msg;
int east, west, n;
object board;
mapping entryA, entryB;
int i, scoreA, scoreB;
board = find_object(BOARD);
if (!objectp(board)) {
board = load_object(BOARD);
if (!objectp(board))
return 1;//notify_fail("找不到团体赛成绩版。\n");
}
if( !board->query("east") || !board->query("east") )
return 1;//notify_fail("好象现在没有比赛。\n");
if( !arg || arg=="" )
{
entryA = board->query("team/" + board->query("east"));
if ( !entryA )return notify_fail("找不到东队。\n");
entryB = board->query("team/" + board->query("west"));
if ( !entryB )return notify_fail("找不到西队。\n");
scoreA = to_int(entryA["this_score"]);
scoreB = to_int(entryB["this_score"]);
if( scoreA > scoreB ) side = "east";
else if( scoreA == scoreB ) side = "tie";
else side = "west";
}
msg = "现在宣布比赛结束!";
switch(side) {
case "east" : east = 2; west = 0;
//if(objectp(me)) message_vision("$N判东队胜!\n", me);
msg += board->query("eastname") + "胜" + board->query("westname");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -