Re: [問題] 關於副本錯誤。

作者: laechan (揮淚斬馬雲)   2015-02-22 23:57:18
※ 引述《hlead (希多)》之銘言:
: 副本載入中......ok!
: 執行時段錯誤: *result of array addition is greater than maximum array size.
就字面上來說就某個 array 在做像是 += 的動作時它判斷到 size
超過上限值設定.
它有時並不是單指像是以 mixed 來宣告的變數。(但大部份是)
: 程式: /std/new_ob/instance/instance_rooms.c:203
: 物件: /std/new_ob/instance/instance_rooms
: /std/user#6659561 "cmd_hook" /std/user.c:140
: /cmds/std/_instance "cmd_instance" /cmds/std/_instance.c:175
: /adm/obj/simul_efun "questing"
: /adm/simul_efun/pri_cmds.c(/adm/obj/simul_efun.c):358
: /open/cmds/quest/quest_data/quest_data "quested"
: /open/cmds/quest/quest_data/quest_data.c:718
: /std/new_ob/instance/ppl_area/ina_tiger "create_instance"
: /std/new_ob/instance/instance_ob.c:556
: /std/new_ob/instance/instance_rooms "ppl_instance"
: /std/new_ob/instance/instance_rooms.c:203
: 副本好像最近一直會跳這錯誤...導致都進不去。...
/std/new_ob/instance/instance_rooms.c:203
varargs mapping ppl_instance()
{
.
.
case "set":
ppl_instance[ppl_name]=setting_data;
tmps=keys(ppl_instance[ppl_name]);
foreach(tmp in tmps)
if(tmp[0..0]!="#" && ob=ppl_instance[ppl_name][tmp])
heart_beat_obs+=({ob}); <= 這行
break;
用 running 去跑
obs="/std/new_ob/instance/instance_rooms"->heart_beat_obs_func("query");
write("sizeof(obs)="+sizeof(obs)+"\n");
========== 程式執行區 ==========
sizeof(obs)=34235
========== 程式執行區 ==========
可以發現 size 的確很大,而且是執行完心跳函數的房間判斷後
還是那麼大,代表它有些房間並沒有清掉:
j=sizeof(heart_beat_obs);
for(i=0;i<j;i++)
{
if(!ob=heart_beat_obs[i]) continue;
else if(!ob->query("already_init")) continue;
else if(ob->query("already_ended"))
{
heart_beat_obs[i]=0;
嘛......應該是上面那行。
[/std/new_ob/instance_room#7994907 ]
[副本]天蠍洞
這裡是天蠍洞, 聖殿蘭卡大陸上著名的危險地域之一, 每天都有
貪圖洞裡財寶的冒險者與盜賊進入, 但是出來的人卻永遠比進去
的人少, 裡頭除了財寶多之外, 屍體也多.
明顯出口有: east.
100% 110% 100% > da here
Object : 房間(/std/new_ob/instance_room)
already_init :1
instance_diff :"hard1"
instance_file :"/u/l/laechan/area/scorpion/room/001"
因為所有的副本房間都有 init 函數,所以只要在這個函數裡面
加上適當的判斷即可。
系統已重開,明天大概中午左右我再看情況有無改善。
Laechan

Links booklink

Contact Us: admin [ a t ] ucptt.com