看板 mud_sanc 關於我們 聯絡資訊
底下是實測。 > 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