[閒聊] 關於普賽頓與海神珠

作者: laechan (揮淚斬馬雲)   2023-01-17 14:26:50
先執行 moball,再執行 moball -filter getpearl1
> moball -filter getpearl1
/d/ppl/bdlen/fish/mob/king.c
經確認只有一隻 mob 即普賽頓有判斷該參數。
這時改以房間做為搜尋標的,經玩家回報,善見是最可能的地點,
但是找不到,所以我決定全域搜尋。
$ cd /d/ppl
$ grep -r getpearl1
bdlen/fish/mob/king.c: if(query("leaveobj")&&ppl->query_temp("getpearl1"))
bdlen/lock/area/fish.c:this_player()->set_temp("getpearl1",1);
它只有一行會對玩家設定 getpearl1 參數,這行與 hold 指令有
關,即 hold 定海珠:
int hold_xx(string str)
{
int stt,i,j;
mapping stat;
object obs,ppl,mob; // obs2;
mixed allppl;
ppl=this_player();
stat=ppl->query("stat");
allppl=all_inventory(environment(ppl));
if(query("over")) return 0;
stt=stat["str"]*2+stat["fel"]*4+stat["dex"]*3+stat["con"]*4+
stat["air"]*3+stat["int"]*4+stat["mag"]*3;
if(stt<20000)
return notify_fail(HIB"定海珠"NOR+HIW"緩緩亮了起來不久後又暗了下?h\n"NOR);
stt=stt-20000;
stt=stt/2000;
tell_room(this_object(),ppl->query("chi_name")+HIW"將力量輸進"+
HIB"定海珠"NOR+","+HIB"定海珠"NOR+HIW"發出強大的光茫\n");
if(stt>=4)
if(mob=present("Poseidon",find_object_or_load(BR"43")))
{
mob->set("leaveobj",1);
this_player()->set_temp("getpearl1",1);
}
obs->remove();
write(HIB"定海珠"NOR+HIW"發出一股力量擊向你, 你覺得一陣暈眩後, "+
"你發現你到了一個?s的地方\n"NOR);
上面的意思是,玩家想要在打普賽頓的時候拿到海神珠,它的前提就是
你要在某個地方 hold 定海珠,hold 的條件是
你的七屬性依照上面 stt 的加權計算公式,總和要達 20000,
不然你 hold 定海珠會失敗,這裡會給失敗訊息,ok
getpearl1 參數設定的條件是
放好後,(該總和-20000)/2000 要至少 4,即總和至少要 28000,
並且普賽頓此時必須在他所在的房間是活著存在的狀態。這裡不ok
/d/ppl/bdlen/lock/area/fish.c 不備份修改
首先,加權計算後的要求 20000 沒問題,但後面又要求要 28000 不合
理,這會造成玩家如果 hold 定海珠成功,就會以為他接下來去打普賽
頓時就應該會掉落海神珠──但實際上玩家有可能無法滿足28000 的數
值要求而怎麼打都打不到,而且還無任何提示訊息。
再來,它還要求你 hold 海神珠「成功後」,普賽頓這時也必須在,若
不在「它也不會給你任何訊息」(等於白白 hold 損失一顆定海珠),這
也不合理,因為這會造成玩家在下 hold 海神珠的指令後,成功了,但
是要去打普賽頓時,他不在!!?? 那怎麼打海神珠!!??
所以做以下修改:
1. hold 定海珠時,若普賽頓不在,hold 不會成功;若普賽頓在,hold
就會成功。
2. 已將 28000 調整成 20000,亦即你滿足 hold 定海珠的條件也 hold
成功後,接著去打普賽頓,就會掉海神珠。
Laechan

Links booklink

Contact Us: admin [ a t ] ucptt.com