This commit is contained in:
aixianling
2024-12-13 13:41:02 +08:00
commit 06658f112f
3887 changed files with 2687822 additions and 0 deletions

View File

@@ -0,0 +1,321 @@
module("MonDispatcher", package.seeall)
--[[
个人数据ActorData
{
}
全局数据GlobalData[fdId]
{
}
缓存数据CacheData[fdId]
{
}
]]--
local IniScenes = {}
--注册场景
function InitScene(sceneId)
if IniScenes== nil then
IniScenes = {}
end
if IniScenes[sceneId] then
return
end
IniScenes[sceneId] = sceneId;
end
-- 场景是否注册
function IsInitScene(sceneId)
if IniScenes == nil then
return false;
end
return IniScenes[sceneId] ~= nil;
end
local dispatcher = { }
_G.MonEvent =
{
OnInitialize = 1, --初始化
OnEnterFuben = 2, --玩家进入Boss副本[玩家指针,副本指针, pOwner]
OnExitFuben = 3, --玩家离开Boss副本[玩家指针,副本指针, pOwner]
OnEntityDeath = 4, --副本实体死亡 [被杀者指针,击杀者指针,副本指针, pOwner]
OnEntityAttacked = 5, --副本实体收到伤害[副本指针,受击者,攻击者, pOwner]
OnReqData = 6, --boss数据
OnCancelBL = 7,--取消归属
OnSetBossBL = 8,--设置归属
OnCheckEnterFuben = 9, --boss进入检查
OnFubenFinish = 10, --活动副本结束 [, 副本指针,结果, pOwner] 1为完成0为失败nil则结果未知需要对应副本设置结果
OnReqEnterFuben = 11, --请求进入副本 [玩家指针, bossid]
Count = 12,
}
--------------------------------------------------------------------
-- Lua接口
--------------------------------------------------------------------
-- @brief 注册事件分发器
-- @param evId 事件id
-- @param atvType 活动类型
-- @param func 回调
function Reg(evId, nMonType, func, file)
--参数检查
if evId == nil or func == nil or file == nil or nMonType == nil then
print( debug.traceback() )
assert(false)
end
--事件范围检查
if evId <= 0 or evId >= MonEvent.Count then
assert(false)
end
--回调表初始化
if dispatcher[evId] == nil then
dispatcher[evId] = {}
end
if dispatcher[evId][nMonType] ~= nil then
assert(false) -- 重复注册了
end
--注册
dispatcher[evId][nMonType] = func
print("[TIP][MonDispatcher Add nMonType(Type:"..nMonType..")] Event("..evId..") In File("..file..")")
end
-- @brief 获取副本怪物的全局数据(这个数据,是存文件的)
-- @param fdId 副本id
function GetGlobalData(fdId)
if fdId == nil then
assert(false)
end
local var = System.getStaticVar();
if var.Mon == nil then
var.Mon = {}
end
if var.Mon[fdId] == nil then
var.Mon[fdId] = {}
end
return var.Mon[fdId]
end
-- @brief 清空某个bossId的全局数据这个数据是存文件的
-- @param bossId bossId
function ClearGlobalData(fdId)
if fdId == nil then
assert(false)
end
local var = System.getStaticVar();
if var.Mon == nil then
var.Mon = {}
end
if var.Mon[fdId] then
var.Mon[fdId] = nil
end
end
-- @brief 获取某个活动的缓存数据(这个数据,不存储仅缓存)
-- @param fbId 活动id
function GetCacheData(fdId)
if fdId == nil then
assert(false)
end
local var = System.getDyanmicVar();
if var.Mon == nil then
var.Mon = {}
end
if var.Mon[fdId] == nil then
var.Mon[fdId] = {}
end
return var.Mon[fdId]
end
-- @brief 清空boss副本的缓存数据这个数据不存储仅缓存
-- @param fbId 活动id
function ClearCacheData(fdId)
if fdId == nil then
assert(false)
end
local var = System.getDyanmicVar();
if var.Mon == nil then
var.Mon = {}
end
if var.Mon[fdId] then
var.Mon[fdId] = nil
end
end
-- @brief 获取boss副本的个人数据这个数据是存数据库的
-- @param atvId 活动id
function GetActorData(pActor, fdId)
if fdId == nil or Actor.getEntityType(pActor) ~= enActor then
assert(false)
end
local var = Actor.getStaticVar(pActor);
if var.Mon == nil then
var.Mon = {}
end
if var.Mon[fdId] == nil then
var.Mon[fdId] = {}
end
return var.Mon[fdId]
end
-- @brief 清空某个boss副本的个人数据这个数据是存数据库的
-- @param atvId 活动id
function ClearActorData(pActor, fdId)
if fdId == nil or Actor.getEntityType(pActor) ~= enActor then
assert(false)
end
local var = Actor.getStaticVar(pActor);
if var.Mon == nil then
var.Mon = {}
end
if var.Mon[fdId] then
var.Mon[fdId] = nil
end
end
-- @brief 进入活动副本
function EnterFuben(atvId,pActor,fbId)
-- local result = Actor.reqEnterFuben(pActor, fbId)
-- if result then
-- -- 回复活动id与副本句柄的关联
-- local npack = AllocOperReturn(pActor, atvId, ActivityOperate.sEnterFubenResult)
-- if npack then
-- DataPack.flush(npack)
-- end
-- -- 建立副本类型跟活动类型的对应关系
-- local fbHandle = Actor.getFubenHandle(pActor)
-- local pFuben = Fuben.getFubenPtrByHandle(fbHandle)
-- local atvType = 0
-- if (ActivitiesConf[atvId] and ActivitiesConf[atvId].ActivityType) then
-- atvType = ActivitiesConf[atvId].ActivityType
-- elseif (PActivitiesConf[atvId] and PActivitiesConf[atvId].ActivityType) then
-- atvType = PActivitiesConf[atvId].ActivityType
-- end
-- FubenDispatcher.MapToActivity(pFuben, atvType, atvId)
-- return fbHandle
-- end
-- return nil
end
--------------------------------------------------------------------
-- 活动副本回调
--------------------------------------------------------------------
function CheckEnterFuben(nMonType, nFubenId, nSceneId, pEntity)
-- 玩家指针(个人活动判断需要一个玩家指针)
if Actor.getEntityType(pEntity) ~= enActor then
return
end
-- 触发玩家进入boss副本
-- if IsInitScene(nSceneId) then
OnEvent(nMonType, MonEvent.OnEnterFuben,nFubenId,nSceneId, pEntity)
-- end
end
function CheckExitFuben(nMonType, nFubenId,nSceneId, pFuben, pEntity)
-- 玩家指针
if Actor.getEntityType(pEntity) ~= enActor then
return
end
-- 触发玩家退出Boss副本事件
OnEvent(nMonType, MonEvent.OnExitFuben, nFubenId, pFuben, nSceneId, pEntity)
end
function CheckFubenEntityDeath(nMonType,nFubenId, nSceneId, pFuben, pEntity, pKiller)
-- 暂时只处理boss死亡
if Actor.getEntityType(pEntity) == enPet then
return
end
if Actor.getEntityType(pKiller) == enPet then
pKiller = Actor.getMaster(pKiller)
end
-- 触发Boss副本实体死亡事件
OnEvent(nMonType, MonEvent.OnEntityDeath,pFuben, nFubenId, nSceneId, pEntity, pKiller)
end
function CheckFubenEntityAttacked(nMonType, nFubenId, nSceneId, pFuben, pEntity, pAttacker)
-- 玩家指针(个人活动判断需要一个玩家指针)
local pActor = nil
if Actor.getEntityType(pEntity) == enPet then
return
end
if Actor.getEntityType(pAttacker) == enPet then
pAttacker = Actor.getMaster(pAttacker)
end
-- 触发Boss副本实体受击事件
OnEvent(nMonType, MonEvent.OnEntityAttacked, pFuben, nFubenId, nSceneId, pEntity, pAttacker)
-- end
end
function CheckFubenFinish(nMonType,pFuben, result, pOwner)
-- 玩家指针(个人活动判断需要一个玩家指针)
local pActor = nil
if Actor.getEntityType(pOwner) == enActor then
pActor = pOwner
end
-- print("..nMonType.."..nMonType.."..result.."..result)
-- 触发活动副本结束事件
OnEvent(nMonType, MonEvent.OnFubenFinish, pFuben, result, pOwner)
end
-- @brief 进入Boss副本
function EnterMonFuben(nMonType,pActor,fbId, nSerial)
local result = Actor.reqEnterFuben(pActor, fbId)
if result then
-- 建立副本类型跟活动类型的对应关系
local fbHandle = Actor.getFubenHandle(pActor)
local pFuben = Fuben.getFubenPtrByHandle(fbHandle)
FubenDispatcher.MapToMonster(pFuben, nMonType, nSerial)
return fbHandle
end
return nil
end
--公共副本
function EnterGlobalMonFuben(fbHandle,nMonType, fbId)
-- 建立副本类型跟活动类型的对应关系
local pFuben = Fuben.getFubenPtrByHandle(fbHandle)
FubenDispatcher.MapToMonster(pFuben, nMonType, fbId)
end
function OnEvent(nMonType,evId, ...)
--获取回调
local callbacks = dispatcher[evId]
--回调调用
if callbacks and (callbacks[nMonType] ~= nil) then
local func = callbacks[nMonType];
return func(...)
end
return true;
end