近期因为服务器上新手玩家来了几个。
他们都会在线问一些帮助指引。
例如:“这服务器渐进吗?”,“有没有免费传家宝和包包?”,“战袍兑换码去哪里搞?”
作为一个负责的GM 每次都不厌其烦的进行回复实在是有够心累的。
突发奇想:我能否检测聊天记录,发现包含某些关键字的时候自动通过系统发送相关的解答指引呢?
让机器来做新手指导员,这真是个不错的想法。
经过几分钟的代码测试,终于搞定。
我补充了一个数据表来存放关键字和回复内容,结构如下:
其中key代表关键字,replay存放回复的内容。
注册一个全局事件,当玩家发送消息文本时候,对消息进行检测,如果匹配到包含预设好的key,那就发送系统提示给到该玩家。
考虑到快速上线,我使用eluna脚本来完成。源码如下:
local function OnChat_Command(event, player, message, type, language)
swm = string.lower(message)
local plrname = player:GetName()
local query = WorldDBQuery("SELECT `key`,replay,rtype,replay_name FROM wiosn_kefus LIMIT 10;")
local a = query:GetRowCount()
while(a>0)
do
row = query:GetRow()
if string.find(swm, row['key']) then
player:SendBroadcastMessage("|cffffff9f☆☆☆|r")
player:SendBroadcastMessage("|cffffff9f璀璨小助理温馨提示:|r")
player:SendBroadcastMessage("|cffffff9f |r")
player:SendBroadcastMessage("|cffffff9f"..row['replay'].."|r。")
player:SendBroadcastMessage("|cffffff9f |r")
end
query:NextRow()
a = a-1
end
end
RegisterPlayerEvent(18, OnChat_Command)
RegisterPlayerEvent(19, OnChat_Command)
RegisterPlayerEvent(20, OnChat_Command)
RegisterPlayerEvent(21, OnChat_Command)
RegisterPlayerEvent(22, OnChat_Command)
print("OnChat_Command loading...")
最后一行,在控制台输出加载成功的提示。
分别注册了18、19、20、21、22事件函数。这几个事件代表了玩家发送消息。
他们统统调用OnChat_Command函数。
然后我们执行数据库查询。(注意,这里考虑到性能问题,我添加了limit 10)。
代表一次最多检测10个关键字。
在遍历过程中,我们检查玩家的消息中是否包含预设关键字key。
如果有,则执行player:SendBroadcastMessage,将预设好的信息,回复给该玩家。
使用player:SendBroadcastMessage的是为了不打扰服务器上其他的玩家。该条系统公告,仅当前玩家本人可见。
至此,打完收工!
感谢阅读。
wow.53in.cn
璀璨星城·云之境 欢迎你