本帖最後由 盧卡斯 於 2014-5-26 09:02 PM 編輯
發現問題在於script.c,的max_arraysize不能超出一定的值, 我之前設定了256就出現了以下的情況, 然後我改了做168問題就解決了.- - shop test -1,501:-1.
- prontera,50,50,5 script test 847,{
- callshop "test",0;
- npcshopattach "test";
- end;
- OnBuyItem:
- if(@bought_nameid[@i] == 502){ mes "test";close;}
- mes "error";
- end;
- OnInit:
- npcshopitem "test", 502,10;
- end;
- }
複製代碼就以上如此簡單的動態商店腳本,我的地圖服務器在我買了物品502後停著了。
地圖服務器沒有任何錯誤信息,但它只是停頓了。 客戶端似乎從服務器斷開連接,但它沒有彈出斷開的提示。 當我關閉遊戲並重新登錄到我的帳戶,我無法進入地圖服務器(可以選角色)。 由於我無法在地圖服務器中查找錯誤,我也沒有辦法追查出了什麼問題。 此外,我改過一些源碼。 首先,我改變最大物品項目到65536。 第二,我添加了onpcuseskill標籤。 第三,我添加了三個自定義的技能與自定義狀態。 第四,只是一些簡單的配置修改。 除了OnBuyItem外,其他都正常運作。
我已經找到npc.c.下面的源碼 它與RA最新的git沒有什麼不同。 - //npc_buylist for script-controlled shops.
- static int npc_buylist_sub(struct map_session_data* sd, int n, unsigned short* item_list, struct npc_data* nd)
- {
- char npc_ev[EVENT_NAME_LENGTH];
- int i;
- int key_nameid = 0;
- int key_amount = 0;
- // discard old contents
- script_cleararray_pc(sd, "@bought_nameid", (void*)0);
- script_cleararray_pc(sd, "@bought_quantity", (void*)0);
- // save list of bought items
- for( i = 0; i < n; i++ )
- {
- script_setarray_pc(sd, "@bought_nameid", i, (void*)(intptr_t)item_list[i*2+1], &key_nameid);
- script_setarray_pc(sd, "@bought_quantity", i, (void*)(intptr_t)item_list[i*2], &key_amount);
- }
- // invoke event
- snprintf(npc_ev, ARRAYLENGTH(npc_ev), "%s::OnBuyItem", nd->exname);
- npc_event(sd, npc_ev, 0);
- return 0;
- }
複製代碼 不知道有沒有人可以跟我說一下找出問題的方法。
或者,有沒有人也遇到過以上的情況且又能解決?
|