作者laechan (小太保)
看板mud_sanc
标题Re: [抠顶] 消影术
时间Tue Jul 10 11:10:23 2012
底下是实测。
> disap -recall
你施展了消影术,瞬间消失於此地。
[/d/wiz/room/disc ]
巨型高塔
明显出口有: up, bet, down, east, south, north, 和 west.
你藉着消影术的力量来到了此地。
> disap -home
你施展了消影术,瞬间消失於此地。
[/u/l/laechan/skycastle/room/l/laechan-main ]
[ Laechan 的家 ]
明显出口有: 无
你藉着消影术的力量来到了此地。
> look
[/d/map/lodoos/room/square ]
罗德斯广场
明显出口有: east, north, south, 和 west.
> disap -memo 1
disapparate: 这个地方不能记忆喔。
> disap -memo 1
执行时段错误: *Bad argument 2 to >
Expected: string Got: 0.
程式: cmds/std/_disapparate.c:55
物件: /cmds/std/_disapparate
/std/user#108268 "cmd_hook" std/user.c:134
/cmds/std/_disapparate "cmd_disapparate" cmds/std/_disapparate.c:55
第 55 行是
if(sscanf(tmp,"/%s/room/%d#%d",i,t)==2 && i>0 && i<101)
第 53~55 行改成
tmp=base_name(env);
if(sscanf(tmp,"/%s/room/%s",tmp,str)==2 && atoi(str)>0 && atoi(str)<101)
> disap -memo 1
执行时段错误: *Left hand side of += is a number (or zero); right side is not a n
umber.
程式: cmds/std/_disapparate.c:62
物件: /cmds/std/_disapparate
/std/user#108268 "cmd_hook" std/user.c:134
/cmds/std/_disapparate "cmd_disapparate" cmds/std/_disapparate.c:62
原因在於 disaps 没有初始化,程式段改成底下
disaps=(mixed)me->query("record_data/disapparate");
if(sizeof(disaps)<1) disaps=({});
> l
[/u/l/laechan/area/whitetile/room/006 ]
白瓦镇路口
明显出口有: east, north, south, 和 west.
> disap -memo 1
disapparate: 记忆完毕。
> disap -list
你所记忆的地点有:
===================================
===================================
上面不显示的原因出在底下程式段..
whos=(mixed)me->query("record_data/disapparate");
j=sizeof(whos);
for(i=0;i<j;i++)
{
if(catch(env=find_object_or_load(
whos)))
将 whos 改成 whos[i] 即可。
> disap -list
你所记忆的地点有:
===================================
1.白瓦镇路口.
===================================
另外,因为忘记写 disapparate [数字] 了,补进了 -home
的那一区判断内(因为都是单人移动),主判断式为..
if(atoi(str)>0)
{
num=atoi(str);
if(num>DISAP_NUM1)
return notify_fail("disapparate: 数字范围是 1~"+DISAP_NUM1+" 喔.\n");
disaps=(mixed)me->query("record_data/disapparate");
j=sizeof(disaps);
if(j<1)
return notify_fail("disapparate: 你还没有 memo 任何的地点喔.\n");
else if(num>j)
return notify_fail("disapparate: 数字范围是 1~"+j+" 喔.\n");
}
> disap 1
你施展了消影术,瞬间消失於此地。
[/u/l/laechan/area/whitetile/room/006 ]
白瓦镇路口
明显出口有: east, north, south, 和 west.
你藉着消影术的力量来到了此地。
> look
[/u/l/laechan/area/felid/room/038 v ]
东十字路口
明显出口有: east, south, north, 和 west.
> disap -memo 2
disapparate: 记忆完毕。
> disap -list
你所记忆的地点有:
===================================
1.白瓦镇路口.
2.东十字路口.
===================================
> disap 2
你施展了消影术,瞬间消失於此地。
[/u/l/laechan/area/felid/room/038 v ]
东十字路口
明显出口有: east, south, north, 和 west.
你藉着消影术的力量来到了此地。
存三个了之後要再存
> l
[/u/l/laechan/area/hole/room/099 ]
试链窟地下二层
明显出口有: east 和 west.
> disap -memo 3
disapparate: 记忆完毕。
> disap -list
你所记忆的地点有:
===================================
1.白瓦镇路口.
2.东十字路口.
3.试链窟地下二层.
===================================
> l
[/u/l/laechan/area/snake/room/011 ]
毒蛇地穴 -
明显出口有: east 和 north.
> disap -memo 4
disapparate: 数字范围是 1~3 喔。
> disap -memo 1
disapparate: 记忆完毕。
> disap -list
你所记忆的地点有:
===================================
1.毒蛇地穴 -.
2.东十字路口.
3.试链窟地下二层.
===================================
盖掉是可以的,也可以指定要盖掉的号码。
> disap 1 with excel
disapparate: 没有 1 with excel 这个语法喔。
直觉起见,改成 with 而不用 -with。
> disap 1 with excel
disapparate: 数字范围在 1~0 之间喔.
这个同样是 whos 错误,要改成 whos[i]。
> disap 1 with excel
你准备带着 一起消影。
只见你微笑着道:巫师总还是有些特权的 ^_^
你施展了消影术,与 excel 瞬间消失於此地。
你发觉一群啪啦啪啦蛇对你展开攻击!
☆☆☆ 战 斗 开 始 ☆☆☆
你发觉一群啪啦啪啦蛇对你展开攻击!
[/u/l/laechan/area/snake/room/011 ]
从上面可以发现,要带着谁消影的部份错误,以及没有等到
excel -agree 就执行了消影,这部份也有判断错误。
debug:
第一步是先在 foreach(tmp in whos) 的前面加上 write,
在 foreach 内也加一个,然後确定程式执行到 write 处都
没问题。
> disap 1 with excel
程式有执行到这里, whos=({ "excel" })
tmp=excel 有通过上述判断.
那就来看 foreach 里面的写法..
foreach(tmp in whos)
{
.
.
// 在这里加上一个 debug msg
write("tmp="+tmp+" 有通过上述判断.\n");
if((int)ppl->query_temp("disapparate_"+names)<t)
{
tell_object(ppl,HIC"* "+names+" 对你送出了想带着你一起消影的邀请。\n"+
" 你若同意的话就下 disapparate -agree "+names+"。"NOR"\n"+
" (请在 30 秒内完成这个动作)\n");
ppl->set_temp("disapparate_"+names,30+t);
no_agree=1;
}
}
不用看 code 也可以猜问题在 t 没有初始化(八九不离十),
在 foreach 前面加一行 t=time() 即可。
> disap 1 with excel
>
在 excel 那边则有看到讯息。
* laechan 对你送出了想带着你一起消影的邀请。
你若同意的话就下 disapparate -agree laechan。
(请在 30 秒内完成这个动作)
这是因为少了一个 write 的动作,补上即可。
> disap 1 with excel
你向 excel 送出了一起消影的邀请。
excel 那边则是这样..
> disap -agree laechan
disapparate: 你已经同意了 laechan 的消影邀请了喔.
这样就可以一起了。
> !disap
disap 1 with excel
你向 excel 送出了一起消影的邀请。
> !
disap 1 with excel
你准备带着 一起消影。
只见你微笑着道:巫师总还是有些特权的 ^_^
你施展了消影术,与 excel 瞬间消失於此地。
[/u/l/laechan/area/snake/room/011 ]
毒蛇地穴 -
明显出口有: east 和 north.
你藉着消影术的力量,来到了这里。
> l
[/u/l/laechan/area/snake/room/011 ]
毒蛇地穴 -
明显出口有: east 和 north.
>
可见消影的判断还有问题,excel temp 区的参数为..
disapparate_laechan :1341889180
这个同样是因为 t 的判断(t 没有全域化),修改後问题
就可以解决。
excel 那边下的指令如下
> disap -agree laechan
你伸出手,握住了 扣顶机器(Laechan:进阶法师)的手。
我看到的讯息如下..
> * excel 同意了你的消影邀请。
> disap 1 with excel
你准备带着 一起消影。
只见你微笑着道:巫师总还是有些特权的 ^_^
你施展了消影术,与 excel 瞬间消失於此地。
[/u/l/laechan/area/snake/room/011 ]
毒蛇地穴 -
明显出口有: east 和 north.
你藉着消影术的力量,来到了这里。
这是因为 ppls+=({ppl}) 忘记加在 foreach 里面,加
上去後问题就可以解决,另外该摆 whos 的地方也要摆
剩下讯息的部份
我看见的讯息:
> disap 1 with excel
你准备带着 excel 一起消影。
这里漏掉了一段讯息。
只见你微笑着道:巫师总还是有些特权的 ^_^
你施展了消影术,与 excel 瞬间消失於此地。
[/u/l/laechan/area/snake/room/011 ]
毒蛇地穴 -
明显出口有: east 和 north.
优秀(Excel:拳士)正站在这里。
你藉着消影术的力量,来到了这里。
excel 看见的讯息:
> 扣顶机器(Laechan:进阶法师)带着你施展了消影术,你与他瞬间消失於此地。
这里同样漏掉了一段讯息。
毒蛇地穴 -
嘶嘶声开始渐渐多了起来, 彷佛在警告外来的生物(包括天兵)不
要随意靠进他们的地盘, 一但你没有任何的准备就进去的话, 保
证下一秒钟, 你就会站在天国的入口, 地狱的门前.
明显出口有: east 和 north.
眼前突然魔光一闪, 扣顶机器(Laechan:进阶法师)以消影术的力量来到了这里。
你藉着消影术的力量,来到了这里。
会这样其实不是因为「漏掉讯息」,而是「讯息多出来」,也就
是那一句「只见你微笑着道:巫师总还是有些特权的 ^_^」,这
是因为我 show 摆错位置的关系,摆进 no_disap>0 里头就解决
了。
以上为全部实测内容。
LAechan
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 210.61.157.53
1F:→ laechan :消影术有几个问题 1.要不要开放给全部的法师进阶 07/10 11:12
2F:→ laechan :2.可记忆地点的数量 3.可记忆的房间范围(100是太小) 07/10 11:13
3F:→ laechan :4.要不要针对syt(锁妖塔)型的区域(没有room/)个案开 07/10 11:14
4F:→ laechan :5.消影术消耗的 sp 量及消影术实际存在的副作用 07/10 11:15
5F:→ laechan :(我刚已经锁消影术不能带新手一起消影) 07/10 11:15
6F:→ Layase1 :原作中消影术不是只有在特定的地点才能使用吗? 07/10 16:38
7F:→ Layase1 :好像记错..阿哈哈 07/10 16:41