zp_AppearHero.amxx debug

Home Home
引用 | 編輯 lichen
2011-03-12 15:12
樓主
推文 x0
L 03/12/2011 - 15:28:15: [AMXX] Displaying debug trace (plugin "zombie_plague40.amxx")
L 03/12/2011 - 15:28:15: [AMXX] Run time error 4: index out of bounds
L 03/12/2011 - 15:28:15: [AMXX]    [0] zombie_plague40.sma::allowed_survivor (line 8730)
L 03/12/2011 - 15:28:15: [AMXX]    [1] zombie_plague40.sma::native_make_user_survivor (line 9252)
L 03/12/2011 - 15:28:15: Unhandled dynamic native error
L 03/12/2011 - 15:28:15: [AMXX] Displaying debug trace (plugin "zp_AppearHero.amxx")
L 03/12/2011 - 15:28:15: [AMXX] Run time error 10: native error (native "zp_make_user_survivor")
L 03/12/2011 - 15:28:15: [AMXX]    [0] zp_AppearHero.sma::task_make_vip (line 33)

獻花 x0
引用 | 編輯 a7811311622
2011-03-12 15:19
1樓
  
下面是引用 lichen 於 2011-03-12 15:12 發表的 幫忙看一下 感謝..,|zombie_plague40.amxx debug: 到引言文
L 03/12/2011 - 14:41:51: [AMXX]    [0] zombie_plague_csol.sma::allowed_survivor (line 8744)
L 03/12/2011 - 14:41:51: [AMXX]    [1] zombie_plague_csol.sma::native_make_user_survivor (line 9271)


8744
if (g_endround || !g_isalive[id] || task_exists(TASK_WELCOMEMSG) || (!g_newround && g_zombie[id] && fnGetZombies() == 1))

9271
if (!allowed_survivor(id))

是索引超出所以報錯?意思就是格式不正確?
我其實不好意思再問這麽簡單的插件問題了,但是沒人教! 还是不會修改啊..
希望大大們在幫我的情況下,在發個教學帖子....
我有這個 scripting
用amxx_studio.exe打開插件後 怎麽修改?

呃…你只有貼錯誤行數…卻沒貼錯誤內容…這要人怎麼了解錯誤何在…?表情

獻花 x0
引用 | 編輯 lichen
2011-03-12 15:24
2樓
  
下面是引用 a7811311622 於 2011-03-12 15:19 發表的 : 到引言文

呃…你只有貼錯誤行數…卻沒貼錯誤內容…這要人怎麼了解錯誤何在…?表情

我剛把報錯文件刪除,這個插件報錯不頻繁,等它在報錯,我在從新上傳錯誤..

獻花 x0
引用 | 編輯 lichen
2011-03-12 15:34
3樓
  
zp_AppearHero.amxx错误就是
强制感染模式每局出幸存者 如果 只有一位玩家 则玩家变为僵尸 服务器名称会被选定为英雄...

獻花 x0
引用 | 編輯 i-c0112
2011-03-12 16:40
4樓
  
可能要加個條件吧
複製程式
......
randoms = fnGetRandomAliveHuman(random_num(1, fnGetAliveHuman())) 
if (randoms <= 0)
    return;
......


獻花 x0
引用 | 編輯 a7811311622
2011-03-12 16:46
5樓
  
我無言了…

randoms = fnGetRandomAliveHuman(random_num(1, fnGetAliveHuman()))

fnGetAliveHuman()
{
 static iHumans, id
 iHumans = 0
 
 for (id = 1; id <= g_maxplayers; id++)
  if (is_user_alive(id) && !zp_get_user_zombie(id))
   iHumans++
 
 return iHumans
}

fnGetRandomAliveHuman(n)
{
 static iAlive, id
 iAlive = 0
 
 for (id = 1; id <= g_maxplayers; id++)
 {
  if (is_user_alive(id) && !zp_get_user_zombie(id)) iAlive++
  if (iAlive == n) return id
 }
 
 return -1
}

無言中…ZP 4.3 主插件都不會在這種地方判斷ID值是不是僵屍…這寫的人在自作主張什麼…?
一開始的「fnGetAliveHuman」就是問題…
後面的「fnGetRandomAliveHuman」則是讓判斷出來的ID值偏差更大…
估計ZP主插件會錯誤的原因就是「fnGetRandomAliveHuman」回傳了ID值「-1」…
偏激的舉例:
剛好只剩下ID值=31和32的是人類…而「random_num(1, fnGetAliveHuman())」跑出來的是32…
然後「fnGetRandomAliveHuman」在ID值=31之前「iAlive」一直是0…而
ID值=31→iAlive = 1
ID值=32→iAlive = 2
兩個結果沒一個滿足「if (iAlive == n)」…既然沒法「return id」…當然只能回傳「return -1」了…

我的寫法:
複製程式
 
do{ 
 randoms = random_num(1, get_playersnum()) 
}while(!is_user_alive(randoms) || zp_get_user_zombie(randoms)) 

丟給電腦煩惱的懶惰寫法…

獻花 x0
引用 | 編輯 lichen
2011-03-12 19:57
6樓
  
下面是引用 a7811311622 於 2011-03-12 16:46 發表的 : 到引言文
我無言了…

無言中…ZP 4.3 主插件都不會在這種地方判斷ID值是不是僵屍…這寫的人在自作主張什麼…?
一開始的「fnGetAliveHuman」就是問題…
後面的「fnGetRandomAliveHuman」則是讓判斷出來的ID值偏差更大…
.......

so
zp_make_user_survivor(randoms)  
改为
  do{   randoms = random_num(1, get_playersnum())  }while(!is_user_alive(randoms) || zp_get_user_zombie(randoms)) [/pre][/pre]即可?[/pre]

獻花 x0
引用 | 編輯 lichen
2011-03-12 20:01
7樓
  
randoms = fnGetRandomAliveHuman(random_num(1, fnGetAliveHuman()))
get_user_name(randoms, temp, 64)
改为

do{
randoms = random_num(1, get_playersnum())
}while(!is_user_alive(randoms) || zp_get_user_zombie(randoms))

??是吗?

獻花 x0
引用 | 編輯 lichen
2011-03-12 20:03
8樓
  
下面是引用 i-c0112 於 2011-03-12 16:40 發表的 : 到引言文
可能要加個條件吧
複製程式
 
...... 
randoms = fnGetRandomAliveHuman(random_num(1, fnGetAliveHuman())) 
if (randoms <= 0) 
  return; 
...... 

randoms = fnGetRandomAliveHuman(random_num(1, fnGetAliveHuman()))
get_user_name(randoms, temp, 64)
client_print(0 , print_center, "[%s] 已被选定为【救世主】", temp);
改为
randoms = fnGetRandomAliveHuman(random_num(1, fnGetAliveHuman()))  
if (randoms <= 0) 
    return; 
client_print(0 , print_center, "[%s] 已被选定为【救世主】", temp);
????

獻花 x0
引用 | 編輯 a7811311622
2011-03-12 22:03
9樓
  
是將5F原碼中的第一行換成我給的原碼…

獻花 x0
引用 | 編輯 lichen
2011-03-13 00:20
10樓
  
下面是引用 a7811311622 於 2011-03-12 22:03 發表的 : 到引言文
是將5F原碼中的第一行換成我給的原碼…

A大你的方法会死服啊,不过我已经i-c0112大的回复做出修改,已经完美解决!!
谢谢了!!表情  

獻花 x0
引用 | 編輯 i-c0112
2011-03-13 14:20
11樓
  
下面是引用 lichen 於 2011-03-13 00:20 發表的 : 到引言文
 
A大你的方法会死服啊,不过我已经i-c0112大的回复做出修改,已经完美解决!!
谢谢了!!表情   
A78大的方法應該沒問題啊= =
可能是你改錯吧...不然就是沒有活著的人類迴圈不會停...不過應該不會死sv吧表情

獻花 x0
引用 | 編輯 lichen
2011-03-13 14:54
12樓
  
下面是引用 i-c0112 於 2011-03-13 14:20 發表的 : 到引言文

A78大的方法應該沒問題啊= =
可能是你改錯吧...不然就是沒有活著的人類迴圈不會停...不過應該不會死sv吧表情

恩 !我的问题,因该是我改错了!! 表情
感谢你们..

獻花 x0