作者horry7 (wenwen)
看板mud_sanc
标题Re: [wizs] debug.log
时间Sat Jan 2 10:09:28 2010
※ 引述《laechan (小太保)》之铭言:
: 今天早上看的时候 debug.log 大小是 119,下午看的时候
: 变 145,有增肥情况,所以挑出来 debug 一下。
: 新的一年..最好临时站主机不要出什麽意外。
: ===================================================
: 执行时段错误: *Bad argument 1 to lower_case()
: Expected: string Got: 0.
: 程式: d/ppl/quest/dark/room/c.c:113
: 物件: /d/ppl/quest/dark/room/c
: /d/ppl/quest/dark/room/c "gamble14" d/ppl/quest/dark/room/c.c:113
: 通常是 lower_case 里面接的东西没有被指定, 或者是做
: 物件 query 时根本没这物件存在造成的.
: quest 你可以检查看看 c.c 的第 113 行。
: Expected: string or array or object Got: 0.
: ",
: "file" : "d/ppl/quest/dark/room/die.c",
: "trace" : ({ /* sizeof() == 1 */
: ([ /* sizeof() == 7 */
: "arguments" : ({ }),
: "line" : 22,
: "object" : /d/ppl/quest/dark/room/die,
: "function" : "die",
: "locals" : ({ /* sizeof() == 1 */
: 0
: }),
: "file" : "d/ppl/quest/dark/room/die.c",
: "program" : "d/ppl/quest/dark/room/die.c",
: ])
: }),
: "program" : "d/ppl/quest/dark/room/die.c",
: ]),0)
: 会出现这种叙述是新版 mudos 支援的,即以前的 mudos
: 遇到这种障碍时不会吐讯息、or讯息吐的不清不楚。
: 上面的意思是 die.c 的第 22 行有问题。
: 我刚看了一下程式,因为 quest 在 init 里头呼叫 call_out
: ,然後被 call 的函数有定一个 object ppl=this_player()
: 问题:若触发的物件消失,die 函数会不会出现 bug?
: 答案是肯定的,因为有一行 ppl->die();
: 若 ppl(即触发 init 的物件)消失,这行就会出问题。
: 物件消失的通常例子..
: 一、玩家 quit
: 二、怪物被杀
: 执行时段错误: *Bad argument 1 to call_other()
: Expected: string or array or object Got: 0.
: 程式: adm/simul_efun/member_group.c(adm/obj/simul_efun.c):24
: 物件: /adm/obj/simul_efun
: /u/q/quest/objs/wizobj#548744 "cmd_moveall" u/q/quest/objs/wizobj.c:1271
: /std/user#440774 "move_player" std/user.c:373
: /std/user#440774 "move" std/ob/user.c:166
: /std/ob/user_d "move" std/ob/user_d.c:49
: /std/user#440774 "move_to" std/ob/user.c:172
: /d/ppl/quest/dark/room/a "init" d/ppl/quest/dark/room/a.c:16
: /adm/obj/simul_efun "wizardp" adm/simul_efun/member_group.c(adm/obj/simul_
: efun.c):24
: 一般若出现 member_group 的错误,通常是 wiz 相关的判断
: 出问题造成的。
: 而 wizardp 函数里面接的则是物件,因此跟上面类似,通常
: 是该物件已消失,不然就是该物件被杀→destruct。
: 再从 debug 讯息来看,应该是某人使用了 wizobj 欲移动到
: 某处(a.c),触发了该地点的 init 函数..
: void init(object ppl)
: {
: ppl=this_player();
: input_to("choice",2,ppl);
: }
: 呃,我是不确定你这样写有没有问题,一般程式不会这样子写
: ,目前已知有在 init 里面加 input_to 的只有各公会,就是
: 在选择是否设定主公会的判断部份。
: 很少这样子写的原因,是因为 init 函数的过大适用性─只要
: 有「物件」进入该房间,就触发 init 函数。
: 所以一般都会在 init 函数中设定过滤条件,例如..
: void init()
: {
: object ppl=this_player();
: if(!ppl || (ppl && !userp(ppl))) return ; // 只有玩家适用底下
: ...
: }
依照目前的写法说明一下,其主要 gamble 的方式:
1. 新区域必须经过城镇,然後请三魔塔的封印者,为你开启一道寻宝之门
2. 然後经过各职业的努力打败三小魔塔主
骑士、剑士、拳士 一塔
战士、刀客、盗贼 一塔
牧师、魔法师、警察 一塔
冒险者为皆可
3. 塔顶可以取得一解谜物件,二个趣味 obj
大地导引->解谜物件,回到木桥上见发呆的 小嘟嘟 (2次)
回归之翼->可以让玩家回到上一格 (10次)
烟雾魔仗->自由传送世界各房间 (50次)
4. 塔顶的尾端,守护者 banks (它是镇上赌场的老板),但因为答应复仇之神的手下
所以自愿守护在"封印者之间"
5. 在与 banks 战斗过程中,有可能因为赌场老板过於沉闷的守护,会把你拉入
赌博间,进行赌博游戏。
(1)赌博过程中,无需任何代价
(2)赢的话,需要帮 banks 取回它失去的物品,就可以得到一件赌场装备(要先打好)
赌完後自动回到战场上,继续跟 banks 战斗,有可能会再度进入赌局
(3)输的话,也不见得会死,可以选择机会、命运,两张纸牌,选对就可以回到战场
上,继续跟 banks 战斗,有可能会再度进入赌局
(4)在赌局一开始时可以选择愿意或不愿意参与赌博,若此时放弃,不会有代价直接
回战场上,继续跟 banks 战斗,有可能会再度进入赌局
(5)在赌局已开始後换你丢骰子时,如果你放弃丢骰子的话,会有一定的代价抵消
然後再回去战场上,继续跟 banks 战斗,有可能会再度进入赌局
6. 一切的写法都是经由 banks 机率邀请赌局,後然进入 gamble 房间
所以当一开始进入该 gamble 房间就是以 init 进入该 room 的任何物件(已判断
必须为 ppl),init 执行後,就会以 input_to 询问是否参与赌局,接下在,banks
会先跟你对话完,并先丢出骰子,然後会再度以 input_to 询问是否要放弃或丢骰
子。
结果如果是赢的话,玩家就会有一个 add_action("give_xx",give);
玩家如果给 banks 物品就可得到一件赌博装备。
结果如果是输的话,赌场老板会再度给玩家一次机会选择机会、命运两张纸牌,
此时会再度以 input_to 询问玩家,选对就可以回到战场上,但选错的话,会进
入等死的 room,此 room 无法 recall and return 以及 quit,所以最好不要施
有 pray 的效果,不然会在里面等人救你。
所以总过程中会先以 init 触发,再执行 2 ~ 3 次的 input_to 指令。
/d/ppl/quest/dark/room/gamble.c
/d/ppl/quest/dark/room/die.c
input_to 没人用过,想在此封魔地带用看看,加上为释出赌场装备而准备,
目前并增加了"肉粽形状的礼物箱"为赌场装备之一。
Quest
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.69.110.219
※ 编辑: horry7 来自: 219.69.110.219 (01/02 10:13)
1F:推 justinj :三小塔..冒险者到王那一格会被强制送回recall... 01/02 10:28
2F:→ horry7 :设定是不会,你会不会看错了.... 01/02 10:35
3F:→ laechan :与 add_action 相对的是 remove_action,可看有无需要 01/02 12:33
4F:→ horry7 :Thanks, 我还不知道有这相对应的 remove_auction. 01/02 13:10