[wizs] /std/trap_room.c (完工)
#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)
→
04/16 21:44, , 1F
04/16 21:44, 1F
→
04/16 21:44, , 2F
04/16 21:44, 2F
→
04/16 21:56, , 3F
04/16 21:56, 3F
mud_sanc 近期熱門文章
PTT遊戲區 即時熱門文章
5
12
10
18