作者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
→ laechan :消影術有幾個問題 1.要不要開放給全部的法師進階 07/10 11:12
→ laechan :2.可記憶地點的數量 3.可記憶的房間範圍(100是太小) 07/10 11:13
→ laechan :4.要不要針對syt(鎖妖塔)型的區域(沒有room/)個案開 07/10 11:14
→ laechan :5.消影術消耗的 sp 量及消影術實際存在的副作用 07/10 11:15
→ laechan :(我剛已經鎖消影術不能帶新手一起消影) 07/10 11:15
→ Layase1 :原作中消影術不是只有在特定的地點才能使用嗎? 07/10 16:38
→ Layase1 :好像記錯..阿哈哈 07/10 16:41