作者laechan (挥泪斩马云)
看板mud_sanc
标题[闲聊] 关於普赛顿与海神珠
时间Tue Jan 17 14:26:50 2023
先执行 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
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.126.145.135 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/mud_sanc/M.1673936813.A.105.html
※ 编辑: laechan (59.126.145.135 台湾), 01/17/2023 14:27:12