Re: [建議] 副本相關

作者: laechan (揮淚斬馬雲)   2014-03-25 09:50:00
※ 引述《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

Links booklink

Contact Us: admin [ a t ] ucptt.com