看板 mud_sanc 關於我們 聯絡資訊
※ 引述《justinj (黑旋風)》之銘言: : 1.例如我要設定[千蛛洞副本] : 但有普通副本,困難副本,地獄副本 : 任務1:打死普通副本boss : 任務2:打死困難副本boss : . : . : 當然可以再創一隻boss,不過還是可以將原本的boss血量做變化就好了.. 依目前 init_instance 的做法 if(instance_mobs[files]) { tmps=instance_mobs[files]; foreach(tmp in tmps) { mob=clone_object(instance_mob_datas[tmp]["files"]); "/adm/daemons/mob_d"->Create(mob); tmps2=keys(instance_mob_datas[tmp]); foreach(tmp2 in tmps2) if(tmp2!="files") mob->set(tmp2,instance_mob_datas[tmp][tmp2]); 所以如果有底下設定資料: instanec_mob_datas["xxx"]["hp"]=1000000000; 則該 mob 的血量就是 10 億。 (不過標紅色字的那一行事實上其所在位置是有問題的) 那假設你的副本分為三個難度,個人認為最簡單的做法就是寫 001.c、002.c、003.c「三個副本物件」,幻想就是這樣寫的, 而它這樣寫的原因是因為「三種難度連區域大小、BOSS 配置 也不太一樣」,然後就可以在玩家欲進入的是哪一個副本那裡 做相對應的副本物件呼叫,玩家便可依此進入不同副本。 : 2.隨機出現隱藏boss 這個就類似幻想打副本有時會出現隨機元神,這個我比較建議 你「自寫怪物」,比方你的副本下共有 n 種怪,大家都follow 同一樣本 int die() { int random_boss; object env=environment(this_object()); string names=env->query("instance_names"); if(random(a)==b) // 符合機率時 { mixed usr; object ppl,env; foreach(ppl in usr) if(ppl && environment(ppl)) if(environment(ppl)->query("instance_names")==names) if(ppl->query_temp("xxx")>0) random_boss=1; if(random_boss<1) // 打這個副本的玩家都還打沒過 boss { clone_object(boss檔)->env; foreach(ppl in usr) if(ppl && environment(ppl)) if(environment(ppl)->query("instance_names")==names) ppl->set_temp("xxx",1); } } ::die(); return 1; } 當然實際上這東西本來就可以樣本化,例如寫成 /std/new_ob/instance/instance_boss.c : 3.之前有人推文說過的..首殺,或過關時間排行 : 還有一種 任務:在30分鐘內過完千蛛洞普通副本。 計時副本有提過了。 首殺....做這個沒意義,容易有爭議。 過關時間排行理論上可以做,它的前提就是要能先產生過關時間, 這牽涉到過關時間的判定是「殺死 BOSS」還是「開完寶箱」還是 「確實通過出口離開副本」。 LAechan -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.61.157.53