[wizs] /std/trap_room.c (完工)

看板mud_sanc (Sanctuary - 聖殿)作者 (小太保)時間16年前 (2010/04/16 10:13), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/1
#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
作用了 必須重新拿一個新的或是quit再進
04/16 21:44, 2F

04/16 21:56, , 3F
為方便大家提供意見, trap_room 所有的情報都是公開
04/16 21:56, 3F
文章代碼(AID): #1BnyVbWb (mud_sanc)
文章代碼(AID): #1BnyVbWb (mud_sanc)