666 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			Lua
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			666 lines
		
	
	
		
			25 KiB
		
	
	
	
		
			Lua
		
	
	
		
			Executable File
		
	
	
	
	
module("ActivityDispatcher", package.seeall)
 | 
						||
--[[
 | 
						||
    个人数据:ActorData[AtvId]
 | 
						||
    {
 | 
						||
        openTimes,  该全局活动的参与标记
 | 
						||
    }
 | 
						||
 | 
						||
    全局数据:GlobalData[AtvId]
 | 
						||
    {
 | 
						||
        openTimes,  该全局活动的开启次数
 | 
						||
    }
 | 
						||
 | 
						||
    缓存数据:CacheData[atvId]
 | 
						||
    {
 | 
						||
        fbHandle,   当前活动的副本句柄
 | 
						||
    }
 | 
						||
]]--
 | 
						||
local dispatcher = { }
 | 
						||
 | 
						||
_G.ActivityEvent =
 | 
						||
{
 | 
						||
    OnLoad          = 1,        --活动加载        [活动id]              注意:若为个人活动,传入 '玩家指针'
 | 
						||
    OnInit          = 2,        --活动初始化      [活动id,玩家指针]    注意:用于处理再次开启的全局活动(同一活动id),重置初始化旧数据
 | 
						||
    OnStart         = 3,        --活动开始        [活动id]              注意:若为个人活动,传入 '玩家指针'
 | 
						||
    OnEnd           = 4,        --活动结束        [活动id]              注意:若为个人活动,传入 '玩家指针'
 | 
						||
    OnUpdate        = 5,        --活动帧更新      [活动id,当前时间]    注意:若为个人活动,传入 '玩家指针'
 | 
						||
    OnReqData       = 6,        --请求活动数据    [活动id, 玩家指针, outPack]
 | 
						||
    OnOperator      = 7,        --通用操作        [活动id,玩家指针,inPack]
 | 
						||
    OnEnterArea     = 8,        --进入活动区域    [活动id, 玩家指针]
 | 
						||
    OnExitArea      = 9,        --离开活动区域    [活动id, 玩家指针]
 | 
						||
    OnEnterFuben    = 10,       --玩家进入活动副本[活动id,玩家指针,副本指针, pOwner]
 | 
						||
    OnExitFuben     = 11,       --玩家离开活动副本[活动id,玩家指针,副本指针, pOwner]
 | 
						||
    OnEntityDeath   = 12,       --副本实体死亡    [活动id, 被杀者指针,击杀者指针,副本指针, pOwner]
 | 
						||
    OnEntityAttacked= 13,       --活动副本实体受击[活动id, 副本指针,受击者,攻击者, pOwner]
 | 
						||
    OnFubenFinish   = 14,       --活动副本结束    [活动id, 副本指针,结果, pOwner] 1为完成,0为失败,nil则结果未知(需要对应副本设置结果)
 | 
						||
    OnReqFubenAward = 15,       --请求副本结算    [活动id, 副本指针,pActor, pOwner]
 | 
						||
    OnGetRedPoint   = 16,       --请求红点数据    [活动id, 玩家指针] 返回值为红点值
 | 
						||
    OnLoginGame     = 17,       --登录游戏        [活动id,玩家指针] 活动登录事件   //登陆时活动如果开启会触发
 | 
						||
    OnUpdateActivity= 18,       --更新数据        [活动id,玩家指针] 注意:若为个人活动,传入 '玩家指针'
 | 
						||
    OnAtvAreaDeath  = 19,       --普通场景活动区域死亡   [活动id,玩家指针]
 | 
						||
    OnCombineSrv    = 20,       --合服后首次登陆    [活动id,合服后的开服天数差值,玩家指针]  个人活动
 | 
						||
    OnGPStart       = 21,       --全局个人活动的玩家Start  [活动id,玩家指针]  Global_Person_Activity
 | 
						||
    OnGPEnd         = 22,       --全局个人活动的玩家End    [活动id,玩家指针] Global_Person_Activity
 | 
						||
    OnAtvGG         = 23,       --活动复活结束    [活动id,玩家指针]
 | 
						||
    OnAtvAreaAtk    = 24,       --普通场景活动区域实体受击     [活动id,受击者,攻击者]
 | 
						||
    OnOnAtvRank     = 25,       --活动排行榜      [活动id,当前时间]
 | 
						||
    Count           = 26,
 | 
						||
}
 | 
						||
 | 
						||
--通用操作协议枚举
 | 
						||
_G.ActivityOperate = {
 | 
						||
    cEnterFuben = 1,     --请求进入副本
 | 
						||
    cGetPhaseAward = 2,  --请求领取阶段奖励
 | 
						||
    cWorship = 3,        --请求膜拜操作
 | 
						||
    cAppraisal = 4,      --请求鉴定操作
 | 
						||
    cGetPersonBox = 5,    --请求个人奖励      --npc活动
 | 
						||
    cGetTreasure = 6,    --送宝、排名奖励     --npc活动  
 | 
						||
    cGetBonusNum = 7,     --npc请求剩余奖励数量  --独闯天涯
 | 
						||
    cInspire = 8,        --鼓舞             --boss
 | 
						||
    cGetMonsterNum = 9,   --npc请求当前杀怪数 --独闯天涯
 | 
						||
    cReqAtvQianDao  = 10,  --打卡活动,请求打卡
 | 
						||
    cReqLeijichongzhiGift = 11, --请求领取累计充值奖励 --累计充值活动
 | 
						||
    cReqPurchaseGiftbag   = 12, --请求购买特惠礼包/领取首冲奖励/七天登录领奖/打卡活动领奖
 | 
						||
    cReqPurchaseJiJin     = 13, --请求购买基金
 | 
						||
    cReqGetJiJinAward     = 14, --请求领取基金奖励
 | 
						||
    cReqGetAchieveAward   = 15, --请求达标类对应奖励
 | 
						||
    cReqSaoDang           = 16, --扫荡
 | 
						||
    cReqXunBao            = 17, --寻宝  抽奖活动(开服特定寻宝)
 | 
						||
    cActiveOrderWar       = 18, --激活战令
 | 
						||
    cBuyOrderWarLv        = 19, --购买战令等级
 | 
						||
    cDeleteItem           = 20, --删除道具
 | 
						||
    cGetAllAward          = 21, --战令一键领取
 | 
						||
    cGetZLAward           = 22, --战令领取
 | 
						||
    cGetQuestAward        = 23, --任务领取
 | 
						||
    cDonateRank           = 24, --捐献
 | 
						||
    cReqExchange          = 25, --兑换
 | 
						||
    cZLShopInfo           = 26, --战令商店
 | 
						||
    cBuyZLShop            = 27, --购买战令数据
 | 
						||
    cCheckCSActivity      = 28, --跨服入口支持
 | 
						||
  
 | 
						||
 | 
						||
    sSendRankData = 1,    --广播排行数据    -- 竞技大乱斗
 | 
						||
    sSendMyRankData = 2,  --发送自己的排行数据 -- 竞技大乱斗
 | 
						||
    sSendPhaseAward = 3,  --发送奖励内容
 | 
						||
    sEnterFubenResult = 4,--进入活动副本的结果回复
 | 
						||
    sWorship = 5,        --回复膜拜操作
 | 
						||
    sAppraisal = 6,      --回复鉴定操作
 | 
						||
    sNextAwardIndex = 7, --下一个奖励的索引
 | 
						||
    sSendPersonBox = 8,  --回复个人奖励请求     --npc活动
 | 
						||
    sSendBigTreasure = 9, --回复送宝、排名奖励  --NPC活动
 | 
						||
    sSendTime = 10,       --发送时间
 | 
						||
    sSendBonusNum = 11,     --回复剩余奖励数量      --独闯天涯
 | 
						||
    sInspire  = 12,       --返回鼓舞id          --boss
 | 
						||
    sSendMonsterNum = 13,   --回复npc请求当前杀怪数  --独闯天涯
 | 
						||
    sSendAssignCampTime =14, --发送阵营调整时间     --沃玛三
 | 
						||
    sSendActorDataTimes = 15,  --回复玩家数据      --累计充值活动灰按钮/特惠礼包活动回复玩家参与次数
 | 
						||
    sSendChouJiangResult = 16, --回复寻宝/抽奖结果       --寻宝活动
 | 
						||
    sSendzhushoustatus   = 17, --回复驻守开始
 | 
						||
    sSendWorldBossTime   = 18, --世界boss 剩余时间
 | 
						||
    sDuoBaoPickLeftTime   = 19, --夺宝 剩余时间
 | 
						||
    sZLShopInfo   = 20, --战令商店
 | 
						||
    sZLBuyShop   = 21, --购买战令商品
 | 
						||
    sZLShopChange   = 22, --战令商品发生变化
 | 
						||
    sCSSBKGuildRank   = 23, --前四名跨服沙巴克排行
 | 
						||
    sCSSBKMyGuildRank   = 24, --个人工会排名
 | 
						||
    sCSSBKMyRank   = 25, --个人排名
 | 
						||
    sCheckCSActivity      = 28, --跨服入口支持
 | 
						||
}
 | 
						||
 | 
						||
--------------------------------------------------------------------
 | 
						||
-- Lua接口
 | 
						||
--------------------------------------------------------------------
 | 
						||
 | 
						||
-- @brief 注册事件分发器
 | 
						||
-- @param evId 事件id
 | 
						||
-- @param atvType 活动类型
 | 
						||
-- @param func 回调
 | 
						||
function Reg(evId, atvType, func, file)
 | 
						||
 | 
						||
    --参数检查
 | 
						||
	if atvType == nil or evId == nil or func == nil or file == nil then 
 | 
						||
		print( debug.traceback() )
 | 
						||
		assert(false)
 | 
						||
    end
 | 
						||
    
 | 
						||
    --事件范围检查
 | 
						||
    if evId <= 0 or evId >= ActivityEvent.Count then
 | 
						||
        assert(false)
 | 
						||
    end
 | 
						||
 | 
						||
    --回调表初始化
 | 
						||
    if dispatcher[evId] == nil then
 | 
						||
        dispatcher[evId] = {}
 | 
						||
    end
 | 
						||
    if dispatcher[evId][atvType] ~= nil then
 | 
						||
        assert(false) -- 重复注册了
 | 
						||
    end
 | 
						||
 | 
						||
    --注册
 | 
						||
    dispatcher[evId][atvType] = func
 | 
						||
    print("[TIP][ActivityDispatcher] Add Activity(Type:"..atvType..") Event("..evId..") In File("..file.."), And Index="..table.maxn(dispatcher[evId]))
 | 
						||
end
 | 
						||
 | 
						||
-- @brief 获取某个活动的全局数据(这个数据,是存文件的)
 | 
						||
-- @param atvId 活动id
 | 
						||
function GetGlobalData(atvId)
 | 
						||
    if atvId == nil then
 | 
						||
        assert(false)
 | 
						||
    end
 | 
						||
    local var = System.getStaticVar();
 | 
						||
    if var.Activity == nil then
 | 
						||
        var.Activity = {}
 | 
						||
    end
 | 
						||
 | 
						||
    if var.Activity[atvId] == nil then
 | 
						||
        var.Activity[atvId] = {}
 | 
						||
    end
 | 
						||
 | 
						||
    return var.Activity[atvId]
 | 
						||
end
 | 
						||
 | 
						||
-- @brief 清空某个活动的全局数据(这个数据,是存文件的)
 | 
						||
-- @param atvId 活动id
 | 
						||
function ClearGlobalData(atvId)
 | 
						||
    if atvId == nil then
 | 
						||
        assert(false)
 | 
						||
    end
 | 
						||
    local var = System.getStaticVar();
 | 
						||
    if var.Activity == nil then
 | 
						||
        var.Activity = {}
 | 
						||
    end
 | 
						||
    if var.Activity[atvId] then
 | 
						||
        var.Activity[atvId] = nil
 | 
						||
    end
 | 
						||
end
 | 
						||
 | 
						||
-- @brief 获取某个活动的缓存数据(这个数据,不存储仅缓存)
 | 
						||
-- @param fbId 活动id
 | 
						||
function GetCacheData(atvId)
 | 
						||
    if atvId == nil then
 | 
						||
        assert(false)
 | 
						||
    end
 | 
						||
    local var = System.getDyanmicVar();
 | 
						||
    if var.Activity == nil then
 | 
						||
        var.Activity = {}
 | 
						||
    end
 | 
						||
 | 
						||
    if var.Activity[atvId] == nil then
 | 
						||
        var.Activity[atvId] = {}
 | 
						||
    end
 | 
						||
 | 
						||
    return var.Activity[atvId]
 | 
						||
end
 | 
						||
 | 
						||
-- @brief 清空某个活动的缓存数据(这个数据,不存储仅缓存)
 | 
						||
-- @param fbId 活动id
 | 
						||
function ClearCacheData(atvId)
 | 
						||
    if atvId == nil then
 | 
						||
        assert(false)
 | 
						||
    end
 | 
						||
    local var = System.getDyanmicVar();
 | 
						||
    if var.Activity == nil then
 | 
						||
        var.Activity = {}
 | 
						||
    end
 | 
						||
    if var.Activity[atvId] then
 | 
						||
        var.Activity[atvId] = nil
 | 
						||
    end
 | 
						||
end
 | 
						||
 | 
						||
-- @brief 获取某个活动的个人数据(这个数据,是存数据库的)
 | 
						||
-- @param atvId 活动id
 | 
						||
function GetActorData(pActor, atvId)
 | 
						||
    if atvId == nil or Actor.getEntityType(pActor) ~= enActor then
 | 
						||
        assert(false)
 | 
						||
    end
 | 
						||
    local var = Actor.getStaticVar(pActor);
 | 
						||
    if var.Activity == nil then
 | 
						||
        var.Activity = {}
 | 
						||
    end
 | 
						||
    if var.Activity[atvId] == nil then
 | 
						||
        var.Activity[atvId] = {}
 | 
						||
    end
 | 
						||
 | 
						||
    return var.Activity[atvId]
 | 
						||
end
 | 
						||
 | 
						||
-- @brief 清空某个活动的个人数据(这个数据,是存数据库的)
 | 
						||
-- @param atvId 活动id
 | 
						||
function ClearActorData(pActor, atvId)
 | 
						||
    if atvId == nil or Actor.getEntityType(pActor) ~= enActor then
 | 
						||
        assert(false)
 | 
						||
    end
 | 
						||
    local var = Actor.getStaticVar(pActor);
 | 
						||
    if var.Activity == nil then
 | 
						||
        var.Activity = {}
 | 
						||
    end
 | 
						||
    if var.Activity[atvId] then
 | 
						||
        local openTimes = var.Activity[atvId].openTimes
 | 
						||
        var.Activity[atvId] = {}
 | 
						||
        var.Activity[atvId].openTimes = openTimes
 | 
						||
    end
 | 
						||
end
 | 
						||
 | 
						||
-- @brief 分配一个通用旗帜结果包,需要外部自己调用flush方法
 | 
						||
-- @note result 0失败 1成功
 | 
						||
function AllocResultPack(pActor, atvId, result)
 | 
						||
    local npack = DataPack.allocPacket(pActor, enActivityID, SActivityResult)
 | 
						||
    if npack then
 | 
						||
        DataPack.writeUInt(npack, atvId)
 | 
						||
        DataPack.writeByte(npack, (result or 0))
 | 
						||
    end
 | 
						||
    return npack
 | 
						||
end
 | 
						||
 | 
						||
-- @brief 分配一个通用旗帜结果包(注意:这是广播包),需要外部自己调用FreePacketEx释放包
 | 
						||
function AllocResultPackEx(atvId, result)
 | 
						||
    local npack = DataPack.allocPacketEx()
 | 
						||
    if npack then
 | 
						||
        DataPack.writeUInt(npack, atvId)
 | 
						||
        DataPack.writeByte(npack, (result or 0))
 | 
						||
    end
 | 
						||
    return npack
 | 
						||
end
 | 
						||
 | 
						||
-- @brief 分配一个通用回复包,需要外部自己调用flush方法
 | 
						||
function AllocOperReturn(pActor, atvId, operaCode)
 | 
						||
    local npack = DataPack.allocPacket(pActor, enActivityID, sActivityOperator)
 | 
						||
    if npack then
 | 
						||
        DataPack.writeUInt(npack, atvId)
 | 
						||
        DataPack.writeByte(npack, operaCode)
 | 
						||
    end
 | 
						||
    return npack
 | 
						||
end
 | 
						||
 | 
						||
-- @brief 分配一个通用回复包(注意:这是广播包),需要外部自己调用FreePacketEx释放包
 | 
						||
function AllocOperReturnEx(atvId, operaCode)
 | 
						||
    local npack = DataPack.allocPacketEx()
 | 
						||
    if npack then
 | 
						||
        DataPack.writeByte(npack,enActivityID)
 | 
						||
        DataPack.writeByte(npack,sActivityOperator)
 | 
						||
        DataPack.writeUInt(npack,atvId)
 | 
						||
        DataPack.writeByte(npack,operaCode)
 | 
						||
    end
 | 
						||
    return npack
 | 
						||
end
 | 
						||
 | 
						||
-- @brief 释放一个通用回复(注意:这是广播包)
 | 
						||
function FreePacketEx(npack)
 | 
						||
    if npack then
 | 
						||
        DataPack.freePacketEx(npack)
 | 
						||
    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
 | 
						||
 | 
						||
-- @brief 通过活动id获取对应副本
 | 
						||
-- @param atvId 活动id
 | 
						||
-- @return 副本指针
 | 
						||
function GetFuben(atvId)
 | 
						||
    local atvCacheData = GetCacheData(atvId)
 | 
						||
    local fbHandle = atvCacheData.fbHandle
 | 
						||
    if fbHandle then
 | 
						||
        local pFuben = Fuben.getFubenPtrByHandle(fbHandle)
 | 
						||
        if pFuben then
 | 
						||
            local nAtvId = FubenDispatcher.GetActivityId(pFuben)
 | 
						||
            if nAtvId == atvId then
 | 
						||
                return pFuben
 | 
						||
            end
 | 
						||
        end
 | 
						||
    end
 | 
						||
end
 | 
						||
 | 
						||
-- @brief 发送活动弹框
 | 
						||
-- @param pActor 玩家指针
 | 
						||
-- @param atvId 活动id
 | 
						||
function SendPopup(pActor, atvId)
 | 
						||
    local npack = DataPack.allocPacket(pActor, enActivityID, SActivityPopup)
 | 
						||
    if npack then
 | 
						||
        DataPack.writeUInt(npack, atvId)
 | 
						||
        DataPack.flush(npack)
 | 
						||
    end
 | 
						||
end
 | 
						||
 | 
						||
-- @brief 广播活动弹框
 | 
						||
-- @param atvId 活动id
 | 
						||
-- @param fbHandle 副本句柄
 | 
						||
-- @param sceneId 场景id
 | 
						||
function BroadPopup(atvId)
 | 
						||
    --等级 转生限制
 | 
						||
    local lv = 0;
 | 
						||
    local zsLv = 0;
 | 
						||
    local Cfg = ActivitiesConf[atvId];
 | 
						||
    if Cfg then
 | 
						||
        if Cfg.TipsLevelLimit then
 | 
						||
            lv = Cfg.TipsLevelLimit.level
 | 
						||
            zsLv = Cfg.TipsLevelLimit.zsLevel
 | 
						||
        end
 | 
						||
    end
 | 
						||
    local npack = DataPack.allocPacketEx()
 | 
						||
    if npack then
 | 
						||
        DataPack.writeByte(npack,enActivityID)
 | 
						||
        DataPack.writeByte(npack,SActivityPopup)
 | 
						||
        DataPack.writeUInt(npack,atvId)
 | 
						||
 | 
						||
        DataPack.broadcasetWorld(npack, lv, zsLv)
 | 
						||
        DataPack.freePacketEx(npack)
 | 
						||
    end
 | 
						||
end
 | 
						||
 | 
						||
--------------------------------------------------------------------
 | 
						||
-- CPP回调
 | 
						||
--------------------------------------------------------------------
 | 
						||
 | 
						||
function CheckInitActivity(atvType, atvId, pActor)
 | 
						||
    local globalData = GetGlobalData(atvId)
 | 
						||
    local actorData = GetActorData(pActor, atvId)
 | 
						||
    if globalData.openTimes ~= actorData.openTimes then
 | 
						||
        local callbacks = dispatcher[ActivityEvent.OnInit]
 | 
						||
        if callbacks[atvType] then
 | 
						||
            local func = callbacks[atvType]
 | 
						||
            func(atvId, pActor)
 | 
						||
        end
 | 
						||
        actorData.openTimes = globalData.openTimes
 | 
						||
        print("[全局活动id"..atvId.."初始化] 重置开启次数:"..(globalData.openTimes or 0).." 玩家:"..Actor.getName(pActor))
 | 
						||
    end
 | 
						||
end
 | 
						||
 | 
						||
function CheckReqData(func, atvType, atvId, pActor, outPack)
 | 
						||
    --print("[Activity"..atvType.."."..atvId.."] "..Actor.getName(pActor).." 请求活动数据!")
 | 
						||
 | 
						||
    -- 红点值
 | 
						||
    local val = 0
 | 
						||
    local callbacks = dispatcher[ActivityEvent.OnGetRedPoint]
 | 
						||
    if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
        local result = callbacks[atvType](atvId, pActor)
 | 
						||
        val = result or 0
 | 
						||
    end
 | 
						||
    DataPack.writeByte(outPack, val)
 | 
						||
 | 
						||
    -- 活动详细数据
 | 
						||
    if func then
 | 
						||
        func(atvId, pActor, outPack)
 | 
						||
    end
 | 
						||
end
 | 
						||
 | 
						||
function OnEvent(evId, atvType, atvId, ...)
 | 
						||
    
 | 
						||
    --获取回调
 | 
						||
    local callbacks = dispatcher[evId]
 | 
						||
 | 
						||
    --回调调用
 | 
						||
    if evId == ActivityEvent.OnLoad then --活动加载(数据库来的)
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnStart then --活动开启
 | 
						||
        -- 周循环活动,需要记录开启次数
 | 
						||
        if ActivitiesConf[atvId] then
 | 
						||
            local globalData = GetGlobalData(atvId)
 | 
						||
            if globalData.openTimes == nil then
 | 
						||
                local currentId = System.getCurrMiniTime();
 | 
						||
                globalData.openTimes = currentId
 | 
						||
            else
 | 
						||
                globalData.openTimes = globalData.openTimes + 1
 | 
						||
            end
 | 
						||
            print("[全局活动id"..atvId.."开始] 记录开启次数:"..globalData.openTimes)
 | 
						||
        end
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnEnd then --活动结束
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnUpdate then --活动帧更新
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnReqData then --请求活动数据
 | 
						||
        if ActivitiesConf[atvId] then
 | 
						||
            CheckInitActivity(atvType, atvId, ...)
 | 
						||
        end
 | 
						||
        local func = nil
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            func = callbacks[atvType];
 | 
						||
        end
 | 
						||
        CheckReqData(func, atvType, atvId, ...)
 | 
						||
    elseif evId == ActivityEvent.OnOperator then --通用操作
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnEnterFuben then --玩家进入活动副本
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnExitFuben then --玩家退出活动副本
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnEntityDeath then --副本实体死亡
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnEnterArea then --进入活动区域
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnExitArea then --离开活动区域
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnEntityAttacked then --活动副本实体受击
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnFubenFinish then --活动副本结束
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId ==  ActivityEvent.OnAtvAreaDeath then --普通场景活动区域死亡
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId ==  ActivityEvent.OnAtvAreaAtk then --普通场景活动区域死亡
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnLoginGame then --登录相关
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnUpdateActivity then --更新
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnCombineSrv then --合服
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnGPStart then --全局个人的开始
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnGPEnd then --全局个人的结束
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnOnAtvRank then --全局个人的结束
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    elseif evId == ActivityEvent.OnAtvGG then --全局个人的结束
 | 
						||
        if callbacks and (callbacks[atvType] ~= nil) then
 | 
						||
            local func = callbacks[atvType];
 | 
						||
            func(atvId, ...)
 | 
						||
        end
 | 
						||
    end
 | 
						||
 | 
						||
    return true
 | 
						||
end
 | 
						||
 | 
						||
--------------------------------------------------------------------
 | 
						||
-- 活动副本回调
 | 
						||
--------------------------------------------------------------------
 | 
						||
 | 
						||
function CheckEnterFuben(atvType, atvId, pFuben, pEntity, pOwner)
 | 
						||
    -- 玩家指针(个人活动判断需要一个玩家指针)
 | 
						||
    local pActor = nil
 | 
						||
    if Actor.getEntityType(pOwner) == enActor then
 | 
						||
        pActor = pOwner
 | 
						||
    elseif Actor.getEntityType(pEntity) == enActor then
 | 
						||
        pActor = pEntity
 | 
						||
    elseif Actor.getEntityType(pEntity) == enPet then
 | 
						||
        pActor = Actor.getMaster(pEntity)
 | 
						||
    else
 | 
						||
        return
 | 
						||
    end
 | 
						||
 | 
						||
    -- 触发玩家进入活动副本事件
 | 
						||
    if Actor.isActivityRunning(pActor,atvId) then
 | 
						||
        if Actor.getEntityType(pEntity) == enActor then
 | 
						||
            print("[Activity"..atvType.."."..atvId.."] [FbId="..Fuben.getFubenIdByPtr(pFuben).."]"..Actor.getName(pEntity).." 进入活动副本!")
 | 
						||
            OnEvent(ActivityEvent.OnEnterFuben, atvType, atvId, pEntity, pFuben, pOwner)
 | 
						||
        end
 | 
						||
    end
 | 
						||
end
 | 
						||
 | 
						||
function CheckExitFuben(atvType, atvId, pFuben, pEntity, pOwner)
 | 
						||
    -- 玩家指针(个人活动判断需要一个玩家指针)
 | 
						||
    local pActor = nil
 | 
						||
    if Actor.getEntityType(pOwner) == enActor then
 | 
						||
        pActor = pOwner
 | 
						||
    elseif Actor.getEntityType(pEntity) == enActor then
 | 
						||
        pActor = pEntity
 | 
						||
    elseif Actor.getEntityType(pEntity) == enPet then
 | 
						||
        pActor = Actor.getMaster(pEntity)
 | 
						||
    else
 | 
						||
        return
 | 
						||
    end
 | 
						||
 | 
						||
    -- 触发玩家退出活动副本事件
 | 
						||
    if Actor.isActivityRunning(pActor,atvId) then
 | 
						||
        if Actor.getEntityType(pEntity) == enActor then
 | 
						||
            print("[Activity"..atvType.."."..atvId.."] [FbId="..Fuben.getFubenIdByPtr(pFuben).."]"..Actor.getName(pEntity).." 退出活动副本!")
 | 
						||
            OnEvent(ActivityEvent.OnExitFuben, atvType, atvId, pEntity, pFuben, pOwner)
 | 
						||
        end
 | 
						||
    end
 | 
						||
end
 | 
						||
 | 
						||
function CheckFubenEntityDeath(atvType, atvId, pFuben, pEntity, pKiller, pOwner)
 | 
						||
    -- 玩家指针(个人活动判断需要一个玩家指针)
 | 
						||
    local pActor = nil
 | 
						||
    if Actor.getEntityType(pOwner) == enActor then
 | 
						||
        pActor = pOwner
 | 
						||
    elseif Actor.getEntityType(pEntity) == enActor then
 | 
						||
        pActor = pEntity
 | 
						||
    elseif Actor.getEntityType(pKiller) == enActor then
 | 
						||
        pActor = pKiller
 | 
						||
    elseif Actor.getEntityType(pEntity) == enPet then
 | 
						||
        pActor = Actor.getMaster(pEntity)
 | 
						||
    elseif Actor.getEntityType(pKiller) == enPet then
 | 
						||
        pActor = Actor.getMaster(pKiller)
 | 
						||
    else
 | 
						||
        return
 | 
						||
    end
 | 
						||
 | 
						||
    -- 触发活动副本实体死亡事件
 | 
						||
    if Actor.isActivityRunning(pActor,atvId) then
 | 
						||
        -- if pFuben and pEntity and pKiller then
 | 
						||
        --     print("[Activity"..atvType.."."..atvId.."] [FbId="..Fuben.getFubenIdByPtr(pFuben).."]"..Actor.getName(pEntity).." 被 "..Actor.getName(pKiller).." 杀死!")
 | 
						||
        -- end
 | 
						||
        OnEvent(ActivityEvent.OnEntityDeath, atvType, atvId, pEntity, pKiller, pFuben, pOwner)
 | 
						||
    end
 | 
						||
end
 | 
						||
 | 
						||
function CheckFubenEntityAttacked(atvType, atvId, pFuben, pEntity, pAttacker, pOwner)
 | 
						||
    -- 玩家指针(个人活动判断需要一个玩家指针)
 | 
						||
    local pActor = nil
 | 
						||
    if Actor.getEntityType(pOwner) == enActor then
 | 
						||
        pActor = pOwner
 | 
						||
    elseif Actor.getEntityType(pEntity) == enActor then
 | 
						||
        pActor = pEntity
 | 
						||
    elseif Actor.getEntityType(pAttacker) == enActor then
 | 
						||
        pActor = pAttacker
 | 
						||
    elseif Actor.getEntityType(pEntity) == enPet then
 | 
						||
        pActor = Actor.getMaster(pEntity)
 | 
						||
    elseif Actor.getEntityType(pAttacker) == enPet then
 | 
						||
        pActor = Actor.getMaster(pAttacker)
 | 
						||
    else
 | 
						||
        return
 | 
						||
    end
 | 
						||
 | 
						||
    -- 触发活动副本实体受击事件
 | 
						||
    if Actor.isActivityRunning(pActor,atvId) then
 | 
						||
        --print("[Activity"..atvType.."."..atvId.."] [FbId="..Fuben.getFubenIdByPtr(pFuben).."]"..Actor.getName(pEntity).." 受到 "..Actor.getName(pAttacker).." 攻击!")
 | 
						||
        OnEvent(ActivityEvent.OnEntityAttacked, atvType, atvId, pEntity, pAttacker, pFuben, pOwner)
 | 
						||
    end
 | 
						||
end
 | 
						||
 | 
						||
function CheckFubenFinish(atvType, atvId, pFuben, result, pOwner)
 | 
						||
    -- 玩家指针(个人活动判断需要一个玩家指针)
 | 
						||
    local pActor = nil
 | 
						||
    if Actor.getEntityType(pOwner) == enActor then
 | 
						||
        pActor = pOwner
 | 
						||
    end
 | 
						||
 | 
						||
    -- 触发活动副本结束事件
 | 
						||
    if Actor.isActivityRunning(pActor,atvId) then
 | 
						||
        print("[Activity"..atvType.."."..atvId.."] [FbId="..Fuben.getFubenIdByPtr(pFuben).."]"..(Actor.getName(pOwner) or "").." 活动副本结束,结果为("..(result or 0)..")!")
 | 
						||
        OnEvent(ActivityEvent.OnFubenFinish, atvType, atvId, pFuben, result, pOwner)
 | 
						||
    end
 | 
						||
end
 | 
						||
 | 
						||
function CheckFubenAward(atvType, atvId, pFuben, pActor, pOwner)
 | 
						||
    -- 触发活动副本结算事件
 | 
						||
    if Actor.isActivityRunning(pActor,atvId) then
 | 
						||
        print("[Activity"..atvType.."."..atvId.."] [FbId="..Fuben.getFubenIdByPtr(pFuben).."]"..Actor.getName(pActor).." 请求副本结算!")
 | 
						||
        OnEvent(ActivityEvent.OnReqFubenAward, atvType, atvId, pFuben, result, pOwner)
 | 
						||
    end
 | 
						||
end
 |