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
 |