如何给你的魔兽服务器上添加一个智能聊天助理?

近期因为服务器上新手玩家来了几个。

他们都会在线问一些帮助指引。

例如:“这服务器渐进吗?”,“有没有免费传家宝和包包?”,“战袍兑换码去哪里搞?”

作为一个负责的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

璀璨星城·云之境 欢迎你