作者laechan (小太保)
看板mud_sanc
标题[wizs] /std/trap_room.c
时间Fri Apr 16 10:13:53 2010
#define TRAPS ([\
"poison" :(["name":"毒气","prevent":"anti_poison pearl"]),\
"fire" :(["name":"火焰","prevent":"fire_spirit pearl"]),\
"landmine" :(["name":"地雷","prevent":"OOXX"]),\
"lightning":(["name":"闪电","prevent":"thunder_spirit pearl"]),\
])
inherit ROOM;
void init_traps(string tmp);
void create()
{
::create();
}
void init()
{
mixed obs=all_inventory(this_object());
object ob;
foreach(ob in obs)
if(ob && userp(ob))
set_heart_beat(1);
}
int heart_beat(int i)
{
mapping traps=(mapping)data["traps"];
mixed keys_traps;
string tmp;
keys_traps=keys(traps);
foreach(tmp in keys_traps)
{
if(undefindp(traps[tmp]["time"]))
traps[tmp]["time"]=0;
i=traps[tmp]["period"];
traps[tmp]["time"]--;
if((int)traps[tmp]["time"]<1)
{
i=(int)traps[tmp]["period"];
traps[tmp]["time"]=i;
init_traps(tmp);
}
}
return 1;
}
void init_traps(string tmp)
{
mixed obs,usr=({});
object ob,eq;
int nobody=1;
string str;
if(!data["traps"])
{
set_heart_beat(0);
return ;
}
if(!data["traps"][tmp]) return ;
if(!obs=all_inventory(this_object()))
{
set_heart_beat(0);
return ;
}
foreach(ob in obs)
{
if(ob && userp(ob))
{
nobody=0;
usr+=({ob});
}
}
if(nobody==1)
{
set_heart_beat(0);
return ;
}
// 执行到这里,代表房间有玩家, 玩家集合 = usr
switch(tmp)
{
// 第一种类型:杀伤型
case "poison": // 毒气攻击
case "landmine": // 地雷攻击
case "fire": // 火焰攻击
str=NOR+MAG"[陷井] 你遭受了来自这里的"+TRAPS[tmp]["name"]+"攻击!"
foreach(ob in usr)
{
if(!ob) continue;
if(environment(ob)!=this_object()) continue;
if(eq=present(TRAPS[tmp]["prevent"],ob))
{
str+="\n你身上的"+eq->query("short")+NOR+MAG"保护了你不受伤害!"NOR"\n";
tell_object(ob,str);
continue;
}
nobody=(int)data["traps"][tmp]["effect"];
nobody=((int)ob->query("hp_src")/1000)*nobody;
ob->add("hp",-nobody);
str+="("+nobody+")!"NOR"\n";
tell_object(ob,str);
if(ob->query("hp")<1)
ob->die();
}
break;
// 第二种类型:麻痹型
case "lightning": // 闪电攻击
str=NOR+MAG"[陷井] 你遭受了来自这里的"+TRAPS[tmp]["name"]+"攻击!"
foreach(ob in usr)
{
if(!ob) continue;
if(environment(ob)!=this_object()) continue;
if(eq=present(TRAPS[tmp]["prevent"],ob))
{
tmp+="\n你身上的"+eq->query("short")+NOR+MAG"保护了你不受伤害!"NOR"\n";
tell_object(ob,tmp);
continue;
}
if(ob->query_temp("holy body"))
{
tmp+="\n可是圣体护身保护了你不受伤害!"NOR"\n";
tell_object(ob,tmp);
continue;
}
nobody=(int)data["traps"][tmp]["effect"];
tmp+="(麻痹 "+nobody+" 秒)!"NOR"\n";
tell_object(ob,tmp);
ob->add("block_command",nobody);
ob->set("block_command_msg","(你的身体处於麻痹的状态,动弹不得...)\n");
}
break;
// 其它类型以後再补
}
return ;
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.225.162.95
※ 编辑: laechan 来自: 119.15.246.228 (04/16 20:38)
1F:→ amosdeus :建议 比如 该防御装备获道具可以抵挡一百次然後就没 04/16 21:44
2F:→ amosdeus :作用了 必须重新拿一个新的或是quit再进 04/16 21:44
3F:→ laechan :为方便大家提供意见, trap_room 所有的情报都是公开 04/16 21:56