Re: [情報] 罪惡城及其周邊區域開放。

作者: laechan (揮淚斬馬雲)   2015-11-14 15:17:41
※ 引述《hlead (希多)》之銘言:
: → hlead : 掉落物與新型態防具還要在特別看一下怎麼弄。 11/14 11:13
: → hlead : 預計都會弄成虛擬物品及未鑑定裝備之類。 11/14 11:14
: → hlead : 話說 recall -record 用途是啥?.. 11/14 11:15
: → hlead : 設了後看不懂實際用途。...xd 11/14 11:15
> vobjs -mob_drop
怪物掉落物設定選單:
================================
1.創建新目錄
2.刪除某目錄(laechan 限定)
3.列出所有目錄
4.列出某一目錄下的所有設定
5.列出所有目錄下的所有設定
6.進入某一目錄做細部設定
7.離開
================================
請選擇: 5
cd .
cd /d/aty/bird/mob
vobjs -mob_drop zombie1 set m068 = 500
vobjs -mob_drop corpse3 set m068 = 500
vobjs -mob_drop corpse2 set m068 = 500
vobjs -mob_drop wraithzombie1 set m068 = 500
cd /d/blood/mob
vobjs -mob_drop mob2 set m824 = 50
vobjs -mob_drop mob2 set m829 = 10
vobjs -mob_drop mob6 set m802 = 100
.
.
上面列出來的的東西,意思是說將它們原封不動地「複製」,再
「貼上」,就會去執行每一行「指令」。
(每一行都代表一個指令,也就是 vobjs -mob_drop 支援 quick 模式)
一、先 cd 到要設定的目錄
二、vobjs -mob_drop zombie1 set m068 = 500
↑     ↑   ↑
│     │   └─掉落機率 50.0%
           │     │
           │     └──── m068這項虛擬物品(也可接實體物品檔)
           │
           └──────────該目錄下的 zombie1.c 這個怪物檔
這樣玩家打死這隻怪物,呼叫了 /adm/daemons/mob_d.c 的 die 函數時就
會去執行掉落物的判斷。
===========================================================================
未鑑定裝備的設定主要在 /std/new_ob/
> ls
4 area_mob.h 1 cape_set.c 1 mask_set.c
1 arm.c 1 cloth.c 1 medicine.c
1 arm_set.c 1 cloth_set.c 1 misc.c
1 armor.c felid/ 1 misc_set.c
1 armor.h 1 foot.c 1 necklace.c
5 boat.20130910 1 foot_set.c 1 necklace_set.c
6*boat.c 1*gmonster.c 1*npc.c
1 boss.c instance/ 1 set_d.c
1 bracelet.c 4*instance_room.c 1 smonster.c
1 bracelet_set.c map/ syt/
1 cape.c 1 mask.c vobjs/
例如最近泰帕依區域會掉 necklace 類的防具,more necklace_set.c
> more necklace_set.c
inherit __DIR__+"set_d.c";
mixed return_ob_effect(string ftype)
{
switch(ftype)
{
case "克迷倫":
return ({"kemi" ,"精美小墬鍊", 10, 10, 10, 10, 10, 10, 0});
case "黔闇城":
return ({"dark" ,"黑夜項鍊", 20, 20, 20, 20, 20, 20, 0});
case "泰帕依":
switch(random(3))
{
case 0: return ({"tapay" ,"黑魔項鍊", 60, 0, 0,-20, 30, 50, 0});
case 1: return ({"tapay" ,"黑晶墜鍊", 40, 0, 0,-20, 35, 60, 0});
case 2: return ({"tapay" ,"闇芒之鍊", 55, 0, 0,-20, 40, 55, 0});
}
default: return ({"sanc" ,"聖殿項鍊", 50,-50, 50, 0, 0, 0, 0});
}
}
然後再去 /u/p/ppl/hiei/tapay/tapay1/mob 去 da mob5
(我在 /u/p/ppl/hiei/tapay/tapay1/area.h 設定只有 mob5 會掉 necklace)
> da mob5
Object : 怪物(blackwitch /u/p/ppl/hiei/tapay/tapay1/mob/mob5)
drop_types :({ "necklace" })
ftype : "泰帕依"
從上面就可判斷,只要 area.h 有設定資料,area_room.c 就會將該資料
設定到怪物的 drop_types 欄位;而 ftype 欄位則是 gmonster.c的統一
設定:
> more gmonster.c
:::::::::::::: /u/p/ppl/hiei/tapay/tapay1/gmonster.c ::::::::::::::
inherit "/std/new_ob/gmonster.c";
void create()
{
::create();
seteuid(getuid(this_object()));
set("drop_rate",1);
set("ftype","泰帕依");
}
上面可看到該檔繼承 /std/new_ob/gmonster.c,這個檔就自訂了 die 函
數(而且視情況它依舊會做 ::die(ppl))
其 die 函數的部份內容就如下:
r=random(sizeof(drop_types));
// 叫出相對映的 /std/new_ob/防具型態.c
if(catch(ob=clone_object(__DIR__+drop_types[r])))
{
::die(ppl);
return 1;
}
換言之,剛呼叫出來時就只是該型態的防具,要等鑑定了,才會去做
switch(random(n)) 的動作,來決定鑑定出來的是底下的哪一件:
case "泰帕依":
switch(random(3))
{
case 0: return ({"tapay" ,"黑魔項鍊", 60, 0, 0,-20, 30, 50, 0});
case 1: return ({"tapay" ,"黑晶墜鍊", 40, 0, 0,-20, 35, 60, 0});
case 2: return ({"tapay" ,"闇芒之鍊", 55, 0, 0,-20, 40, 55, 0});
}
比方玩家可能得到 黑魔項鍊 或是 黑晶墜鍊 或是 闇芒之鍊:
一、負值代表玩家鑑定完該防具時,可能有哪些屬性會是負屬性
二、0 值代表玩家鑑定完該防具時,哪些屬性不可能出現
三、數字以 fel str dex air con mag int 順序排列
四、一定要有「負值」及「0 值」,以及 int 值通常為 0
新增或修改了 /std/new_ob/ 下的檔案時要說一下,以及遵循新型態
防具的屬性設定原則:
===================================================================
// Laechan@Sanc add in 2013/08/13
if(str && str=="-record")
{
write("你紀錄了 recall 點。\n");
me->set_temp("crystal_broken_env",base_name(env));
}
> grep -n s001 user_d.c
[/adm/daemons/user_d.c]
433:object s001;
443: if(!s001)
444: s001=find_object_or_load("/adm/daemons/eq/s001");
536: if(me->query_vobjs("s001")>0)
555: call_other(s001,"pre_die",me,killer);
所以 more /adm/daemons/eq/s001.c
tell_object(me,HIC"\n你的生命水晶在你即將陣亡時爆了開來!\n\n"NOR);
// Laechan@Sanc add in 2013/08/13
// 增加登錄陣亡地點
me->set_temp("crystal_broken_env",base_name(environment(me)));
好像有一個機制是,可以讓玩家爆水晶→重新領水晶→依 crystal_broken_env
的設定回到陣亡點再戰→如果又爆水晶→重覆上面
然後如果不想使用該機制了就用 recall -record 蓋掉原本的陣亡點即可。
那這個機制倒是衍生了其它想法例如「儲存重生點」,也就是說比方玩家擔
心進某區域可能會掛掉爆水晶,那先用 recall -record 紀錄一下重生點這
類的,等爆水晶→領完水晶→再利用某種方式回到紀錄的重生點,就可以省
下再走區域的時間這樣。
(然後應該是因故沒有實裝其它的東西啦我猜,有可能是 SAO 計劃的一環)
LAechan

Links booklink

Contact Us: admin [ a t ] ucptt.com