|
这是我写的第一个涉及到MySQL数据库的插件,请各位高手不吝赐教。
插件功能:当玩家连接到服务器的时候,检查他是不是第一次登录服务器,如果是,就显示信息“欢迎新朋友XXX”,如果不是,就检查他是第几次登陆,并显示“欢迎老朋友XXX第x次登录”。
对应的数据库名为database,其中只有一个表player-data,表中只有2个列,一个是“STEAM-ID”,记录玩家的STEAM-ID,另一个是“LoginTimes”,记录玩家登录次数。
插件代码如下:/* UTF-8 func by www.DT-Club.net */
#include <amxmodx>
#include <amxmisc>
#include <dbi>
#define PLUGIN_NAME "HC_StatusChecker"
#define PLUGIN_VERSION "1.0"
#define PLUGIN_AUTHOR "Apocalyptic"
new SteamId[21]
new Name[33]
public plugin_init()
{
register_plugin(PLUGIN_NAME, PLUGIN_VERSION, PLUGIN_AUTHOR);
}
public client_connect(id)
{
//获取玩家的STEAM-ID信息,并存放在字符串变量SteamId中
get_user_authid (id, SteamId, 20)
//获取玩家的名字,并存放在字符串变量Name中
get_user_name (id,Name,32)
//连接到MySQL数据库
new sql:mysql=dbi_connect("127.0.0.1","root","password","database")
//检查玩家的STEAM-ID是否已经被记录,即在第1列(STEAM-ID)中搜索是否存在对应的记录
new result:SteamIdExist=dbi_query(mysql,"SELECT STEAM-ID FROM player-data WHERE STEAM-ID='%s",SteamId)
//如果尚未被记录
if (SteamIdExist<=RESULT_NONE)
{
//在player-data表中的STEAM-ID列插入一条新的记录,即玩家的STEAM-ID字符串
//同时把第2列(LoginTimes)的对应记录设置为2
new result:AddSteamId=dbi_query(mysql,"INSERT INTO player-data VALUES ('%s',2)",SteamId)
//如果插入成功
if (AddSteamId>=RESULT_NONE)
{
//在服务器控制台显示初始化成功
server_print("Initialize OK!")
//在玩家屏幕显示欢迎信息
client_print(0,print_center,"欢迎新朋友%s!",Name)
}
}
//如果已经有记录
else
{
//读取第2列(LoginTimes)中对应的数字,并存放在变量PlayerLoginTimes中
new PlayerLoginTimes = dbi_field(SteamIdExist,2)
client_print(id,print_center,"欢迎老朋友%s第%d次登录!",Name,PlayerLoginTimes)
//登录次数+1
PlayerLoginTimes=PlayerLoginTimes+1
//把+1后的登录次数写入到对应STEAM-ID的LoginTimes列中
//下次登录的时候就会显示正确的登录次数
new result:SteamIdExist=dbi_query(mysql,"UPDATE player-data SET LoginTimes=%d WHERE STEAM-ID=%s",PlayerLoginTimes,SteamId)
}
//断开数据库连接
dbi_close(mysql)
return PLUGIN_CONTINUE
}
在完成了以上插件代码的编写之后,我进行编译,却发现很多Tag mismatch(标识符失匹配)错误,错误位置是以上代码中的粗体部分,请问是什么问题?
我认为,数据库的四中最基本操作——检索、插入、读取、更新,都已经在上面的简单插件中实现了,如果能把这个插件弄出来的话,对于那些对SQL感兴趣的AMXX编写者来说会有很大的参考价值。
请各位高手不吝赐教! |
|