建议有空可以先把编译器常出现的错误和警告讯息记一下:
如果你是用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与方法同名
...
}