建議有空可以先把編譯器常出現的錯誤和警告訊息記一下:
如果你是用scripting內的
compile.exe直接編譯會看到程式有1個警告,1個錯誤:
..\amxmodx\scripting\zk1a.sma<
85 >:
warning 217 :
Loose indentation ..\amxmodx\scripting\zk1a.sma<
149>:
error 017 :
undefined symbol "cs_get_user_buyzone2"紅色表示就是有問題的行數
橘色表示問題的型態
綠色就是錯誤和警告代碼。
藍色分號後面,指的就是問題敘述
對照編譯器訊息你可以會看到這些在哪裡出現。
錯誤訊息(
error) 必須解決,否則程式無法編譯
警告訊息(
warning)程式雖可編譯通過,也可忽略修改,但不建議。因為可能會有潛在問題
關於錯誤警告訊息的說明及看法,可以參考
這篇warning 217 :
Loose indentation - 程式編排上格式問題。解決請參考
這篇error 017 :
undefined symbol "cs_get_user_buyzone2" - 未定義的變數 "
cs_get_user_buyzone2"。
很明顯的問題是你的函式名稱打錯了。函式實做方法打的是
cs_get_user_buyzone2
2,但呼叫函式時你卻少了一個
2。
修正的方法就把其一行改成同名稱就可以了。
修正方式如下(僅列出部分程式碼):
warning 217 :
Loose indentation 原始程式:
複製程式
public plugin_init()
{
register_event("StatusIcon","e_buyzone_enter","b","1=1;2=buyzone");
register_event("StatusIcon","e_buyzone_leave","b","1=0;2=buyzone");
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("buy_Z-K1A", "weapon_buy")
...
}
將83行、84行的register_event呼叫往後與下對齊修正後如下:
複製程式
public plugin_init()
{
register_event("StatusIcon","e_buyzone_enter","b","1=1;2=buyzone");
register_event("StatusIcon","e_buyzone_leave","b","1=0;2=buyzone");
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("buy_Z-K1A", "weapon_buy")
...
}
rror 017 :
undefined symbol "cs_get_user_buyzone2" 原始程式:
複製程式
public weapon_buy(id)
{
if (has_item[id])
{
client_print(id, print_center, "你已經擁有此武器")
return 1;
}
if (get_money(id) < cv_num(cvar_cost))
{
client_print(id, print_center, "你沒有足夠的金錢")
return 1;
}
if (cv_num(cvar_buyzone) && !cs_get_user_buyzone2(id)) //149行:cs_get_user_buyzone2名稱與方法不一致
...
}
將149行cs_get_user_buyzone2 名稱改成與 541 行函式名稱相同修正後如下:
複製程式
public weapon_buy(id)
{
if (has_item[id])
{
client_print(id, print_center, "你已經擁有此武器")
return 1;
}
if (get_money(id) < cv_num(cvar_cost))
{
client_print(id, print_center, "你沒有足夠的金錢")
return 1;
}
if (cv_num(cvar_buyzone) && !cs_get_user_buyzone22(id)) //cs_get_user_buyzone2 後要多加2與方法同名
...
}