一.注册点击NPC事件
1.定义事件ID
D:\MirServer-lua-study\Mir200\Envir\QuestDiary\config\EventCfg.lua

EventCfg = {}
EventCfg.onClicknpc                 = "onClicknpc"                    --点击某NPC
return EventCfg

2.定义处理点击NPC的方法
登陆脚本中加载
D:\MirServer-lua-study\Mir200\Envir\MapQuest_Def\QManage.lua

--登录
require("Envir/QuestDiary/util/util")
UIncludes()

function login(actor)
    local result, errinfo = pcall(ULogin, actor, isnewhuman)
 end

D:\MirServer-lua-study\Mir200\Envir\QuestDiary\util\util.lua

--通用模块
    require("Envir/QuestDiary/util/GameEvent")  --事件添加,移除,清空
    require("Envir/QuestDiary/game/Global")  --全局触发方法

D:\MirServer-lua-study\Mir200\Envir\QuestDiary\game\Global.lua

--点击某NPC
function Global.ClickNpcResponse(actor, npcid)
    Message.sendmsg(actor, ssrNetMsgCfg.Global_ClickNpcResponse, npcid)
end

    二.事件添加add和push执行
    2.1.注册事件
    D:\MirServer-lua-study\Mir200\Envir\QuestDiary\game\Global.lua

    -------------------------------监听事件---------------------------------------
    GameEvent.add(EventCfg.onRecharge, Global.Recharge, Global, 1)
    -------------------------------监听网络---------------------------------------
    Message.RegisterNetMsg(ssrNetMsgCfg.Global, Global)

    2.2.事件类中注册和push
    D:\MirServer-lua-study\Mir200\Envir\QuestDiary\util\GameEvent.lua

    GameEvent = {}
    
    local _listeners = {}
    
    --GameEvent.add(EventCfg.onClicknpc, Global.ClickNpcResponse, Global, 1)
    function GameEvent.add(eventName, func, tag, priority)
    	assert(tag, "Tag must not be nil")
    	
    	if not _listeners[eventName] then
    		_listeners[eventName] = {}
    	end
    	
    	local eventListeners = _listeners[eventName]
    	local eventListenerSize = #eventListeners
    	for i = 1, eventListenerSize do
    		if tag == eventListeners[i][2] then
    			return
    		end
    	end
    
    	if priority and eventListenerSize >= priority then
    		table.insert(eventListeners, priority, {func, tag})
    	else
    		table.insert(eventListeners, {func, tag})
    	end
    end
    
    --派发--GameEvent.push("onClicknpc", actor, npcid, npcobj)
    --table.insert(eventListeners, {func, tag})
    function GameEvent.push(eventName, ...)
    	--local eventListeners = _listeners["onClicknpc"]
    	local eventListeners = _listeners[eventName]
    	if not eventListeners then
    		return
    	end
    
    	for index, listeners in ipairs(eventListeners) do
    		pcall(Global.ClickNpcResponse())
    		local result, stop = pcall(listeners[1], ...)
    		release_print('-->result=',listeners[1])
    		if result then
    			if stop then break end
    		else
    			local tag = listeners[2]
    			local tarid = tag.ID or 0
    			local err = "派发事件发生错误:事件名="..eventName.."  模块ID="..tarid.."   "
    			release_print(err, stop)
    		end
    	end
    end
    
    return GameEvent

      三.网络消息ID定义

      D:\MirServer-lua-study\Mir200\Envir\QuestDiary\net\NetMsgCfg.lua

      local ssrNetMsgCfg = {}
      
      ssrNetMsgCfg.sync                           = 100       --同步数据
      
      ssrNetMsgCfg.Global                         = "Global"
      ssrNetMsgCfg.Global_ClickNpcResponse        = 1000      --点击某Npc
      ssrNetMsgCfg.Global_OpenModuleRun           = 1001      --开启某模块
      ssrNetMsgCfg.Global_SyncOpenDay             = 1002      --同步开服天数
      ssrNetMsgCfg.Global_SyncCreateActor         = 1003      --同步创建角色信息
      ssrNetMsgCfg.Global_SyncTotalRealRecharge   = 1004      --同步总实冲分
      ssrNetMsgCfg.Global_SyncTodayRealRecharge   = 1005      --同步今日实冲分
      ssrNetMsgCfg.Global_Recharge                = 1006      --充值触发
      ssrNetMsgCfg.Global_SyncAdmini              = 1007      --同步GM权限
      ssrNetMsgCfg.Global_RequestOpenTTSQ         = 1008      --请求打开天天省钱
      
      local t = {}
      for msgName,msgID in pairs(ssrNetMsgCfg) do
          t[msgName] = msgID
          t[msgID] = msgName
      end
      ssrNetMsgCfg = t
      
      return ssrNetMsgCfg
        撰写回复...