local GuildBoss_Model = {} local private = { roomDic = {}, --房间列表 } local guildDamageRecord = nil -- 工会伤害列表{ {index,id,name,damage}, } local playerDamageRecord = nil -- 工会伤害列表{ {index,id,name,damage}, } local EventSystem = require('Event/EventSystem') local guild_boss_pb = require('Proto/guild_boss_pb') local encourageInfo = nil local curStateTimeInfo = {} local myDmg = nil local myGuildDmg = nil local rankInfo = nil GuildBoss_Model.ConstBossId = 101 GuildBoss_Model.RewardTag = { PuTong = 1, --普通 ZhenPin = 2, -- 珍品 JiPin = 3, -- 极品 } GuildBoss_Model.Stage = { Ready = 1, Fight1 = 2, Fight2 = 3, Fight3 = 4, RollBefore = 5, Roll = 6, RollAfter = 7, } function GuildBoss_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessageGuildBossAddBuff, private.OnGuildBossAddBuffResp) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushGuildBossResult, private.GuildBossResultPushResponse) NetManager.RegisterMsgCB(MessageEnums.MessageGetGuildBossRoomList, private.GetGuildBossRoomListResp) NetManager.RegisterMsgCB(MessageEnums.MessageTryChangeGuildBossBattleRoom, private.OnTryChangeRoomIDResp) NetManager.RegisterMsgCB(MessageEnums.MessageLeaveAndChangeGuildBossBattleRoom, private.OnLeaveAndChangeGuildBossBattleRoomResp) NetManager.RegisterMsgCB(MessageEnums.MessageGetGuildBossRank, private.OnGuildBossRankResp) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushGuildBossRank, private.OnG2CPushGuildBossRank) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushGuildEncourageTimes, private.OnGuildEncourageTimes) NetManager.RegisterMsgCB(MessageEnums.MessageGuildBossRewardsStatus, private.OnGuildBossRewardsStatus) NetManager.RegisterMsgCB(MessageEnums.MessageGuildBossRewardRoll, private.OnGuildBossRewardRoll) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushGuildBossRewardRollUpdate, private.OnPushGuildBossRewardRollUpdate) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushGuildBossStageChange, private.OnPushGuildBossStageChange) NetManager.RegisterMsgCB(MessageEnums.MessageEnterGuildBoss, private.OnEnterGuildBoss) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushGuildRewardPool, private.OnPushGuildRewardPool) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushEnterGuildBoss, private.OnPushEnterGuildBoss) EventSystem.Regist(EventID.GuildBoss_SendResult,private.SendGuildBossResult) EventSystem.Regist(EventID.GuildBoss_SendDamage,private.SendGuildBossDamage) EventSystem.Regist(EventID.GuildBoss_QuitRoom, private.GuildBossQuitRoom) end function private.SendGuildBossResult(checkStr) local msg = guild_boss_pb.C2GUploadGuildBossResult() msg.checkInfo = checkStr if LogicUpdateManager.IsReplayOrServerCheck then -- 客户端重播或服务器校验的话,不要发送TCP logging.log(LTAG.LOG,"[GWS]SyncGuildBoss BattleCheckStr = ",checkStr) else NetManager.SendMessage(MessageEnums.MessageC2GUploadGuildBossResult,msg) end local myEntity = BattleDataGetter.GetMainEntityLogicPos() if myEntity then -- 注意 :结束的时候进入游戏是找不到自己的entity ,此时发空 ,服务器会默认给个初始位置 private.myPos = BattleDataGetter.GetMainEntityLogicPos():cloneV2() private.myDir = BattleDataGetter.GetMainPlayerLogicMoveDir():cloneV2() end if BattleDataGetter.IsInReconnectFastPlay() then -- 断线重连中结算了,则直接发送退出;并提示战斗结束( 注意 :结束的时候进入游戏是找不到自己的) CTL.Tips.AddTipsMsg(Const_IDS["IDS_ERRORCODE_1352_InfoCode_GuildBoss_BattleEnded"]) GuildBoss_Model.ReturnWaitSceneReq() end end function private.SendGuildBossDamage(damage) local msg = guild_boss_pb.C2GUploadGuildBossDamage() msg.damage = damage NetManager.SendMessage(MessageEnums.MessageC2GUploadGuildBossDamage,msg) end function private.GuildBossResultPushResponse(msgResp) end function GuildBoss_Model.GetGuildBossRoomListReq() local msg = guild_boss_pb.GetGuildBossRoomListReq() NetManager.SendMessage(MessageEnums.MessageGetGuildBossRoomList, msg) end function private.GetGuildBossRoomListResp(msg) local roomList = msg.roomList EventSystem.Dispatch(EventID.GuildBoss_ShowRoomList, roomList) local roomLogstr = "" for i,room in ipairs(roomList) do private.roomDic[room.roomIdx] = room.GRoomID roomLogstr = roomLogstr .. "index = " .. room.roomIdx .. " ,roomID = " .. room.GRoomID .. "; " end --TODO:以下为临时代码 ,正式代码需要在UI中写去 end --向服务器请求,是否能进入某个房间 function GuildBoss_Model.TryChangeBattleRoomID(index) private.wantGoToRoomID = private.roomDic[index] local msg = guild_boss_pb.TryChangeGuildBossBattleRoomReq() msg.GRoomID = private.wantGoToRoomID NetManager.SendMessage(MessageEnums.MessageTryChangeGuildBossBattleRoom, msg) end function private.OnTryChangeRoomIDResp(msg) if msg.success == true then -- 服务器允许当前房间,进入下个房间;则自己告知所有人离开 LuaInputManager.SetSpecialCommand(LuaConst.SpecialCommandType.QuitRoom) else private.wantGoToRoomID = nil end end function GuildBoss_Model.IndividualCheerReq() print( "----------IndividualCheerReq---------") local msg = guild_boss_pb.GuildBossAddBuffReq() msg.isShareBuff = false NetManager.SendMessage(MessageEnums.MessageGuildBossAddBuff, msg) end function GuildBoss_Model.GuildCheerReq() print( "----------GuildCheerReq---------") local msg = guild_boss_pb.GuildBossAddBuffReq() msg.isShareBuff = true NetManager.SendMessage(MessageEnums.MessageGuildBossAddBuff, msg) end function private.OnGuildBossAddBuffResp(msgResp) print( "----------OnGuildBossAddBuffResp---------", msgResp) if msgResp.Resp.Code == 0 then encourageInfo = msgResp.buffInfo EventSystem.Dispatch(EventID.UI_GuildBoss_EncourageRefresh) CTL.Tips.AddTipsMsg(Const_IDS.IDS_GuildBoss_EncourageSucceed) end end function private.GuildBossQuitRoom() if private.wantGoToRoomID then -- 有房间id ,表示切房间 local msg = guild_boss_pb.LeaveAndChangeGuildBossBattleRoomReq() msg.GRoomID = private.wantGoToRoomID NetManager.SendMessage(MessageEnums.MessageLeaveAndChangeGuildBossBattleRoom, msg) private.wantGoToRoomID = nil else -- 无房间,表示真的是离开房间 EventSystem.Dispatch(EventID.Level_SendRoleLeaveFuben, true) end end function private.OnLeaveAndChangeGuildBossBattleRoomResp() -- do nothing end --主动请求获取伤害排行数据 function GuildBoss_Model.GetGuildBossRankReq() local msg = guild_boss_pb.GetGuildBossRankReq() NetManager.SendMessage(MessageEnums.MessageGetGuildBossRank, msg) end --获取军团排行榜 function private.OnGuildBossRankResp(msg) guildDamageRecord = msg.guildRank playerDamageRecord = msg.playerRank myDmg = msg.myDmg myGuildDmg = msg.myGuildDmg EventSystem.Dispatch(EventID.UI_GuildBoss_MainRankRefresh,msg) end function private.OnG2CPushGuildBossRank(msg) guildDamageRecord = msg.guildRank playerDamageRecord = msg.playerRank myDmg = msg.myDmg myGuildDmg = msg.myGuildDmg EventSystem.Dispatch(EventID.UI_GuildBoss_RankRefresh,msg) end function GuildBoss_Model.ReturnWaitSceneReq() local msg = guild_boss_pb.C2GReturnGuildBossWaiteScene() local msgPos = msg.pos local msgDir = msg.dir local pos = private.myPos if pos then local dir = private.myDir msgPos.X, msgPos.Y, msgPos.Z = pos.x[1], 0, pos.z[1] msgDir.X, msgDir.Z = dir.x[1], dir.z[1] end NetManager.SendMessage(MessageEnums.MessageC2GReturnGuildBossWaiteScene, msg) private.myPos = nil private.myDir = nil end function GuildBoss_Model.EnterGuildBossReq() if not CTL.TeamMatch.IsCanGoOtherScene(LuaConst.LevelType.SyncGuildBoss) then return end local msg = guild_boss_pb.EnterGuildBossReq() NetManager.SendMessage(MessageEnums.MessageEnterGuildBoss, msg) end function GuildBoss_Model.GetEncourageInfo() return encourageInfo end function GuildBoss_Model.GuildBossRewardsStatusReq() local msg = guild_boss_pb.GuildBossRewardsStatusReq() NetManager.SendMessage(MessageEnums.MessageGuildBossRewardsStatus, msg) end function private.OnEnterGuildBoss(msg) if msg.Resp.Code == 0 then curStateTimeInfo.stageOrder = msg.stageOrder curStateTimeInfo.stageEndTimeStamp = msg.stageEndTimeStamp encourageInfo = msg.buffInfo EventSystem.Dispatch(EventID.UI_GuildBoss_Stagefresh) end end function private.OnPushEnterGuildBoss(msg) curStateTimeInfo.stageOrder = msg.stageOrder curStateTimeInfo.stageEndTimeStamp = msg.stageEndTimeStamp encourageInfo = msg.buffInfo EventSystem.Dispatch(EventID.UI_GuildBoss_Stagefresh) end function GuildBoss_Model.GetCurStateTimeInfo() return curStateTimeInfo end function private.OnGuildEncourageTimes(msg) encourageInfo.guildBuffTimes = msg.guildBuffTimes EventSystem.Dispatch(EventID.UI_GuildBoss_EncourageRefresh) end function private.OnGuildBossRewardsStatus(msg) if msg.rewardStatus and #msg.rewardStatus > 0 then UIManager.OpenView(Const_UI_Lua.UIEnum.UIGuildBossLoot,msg) end end function GuildBoss_Model.GuildBossRewardRollReq(index) local msg = guild_boss_pb.GuildBossRewardRollReq() msg.index = index NetManager.SendMessage(MessageEnums.MessageGuildBossRewardRoll, msg) end function private.OnGuildBossRewardRoll(msg) if msg.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_GuildBoss_RollRefresh, msg, true) end end function private.OnPushGuildBossRewardRollUpdate(msg) EventSystem.Dispatch(EventID.UI_GuildBoss_RollRefresh, msg) end function private.OnPushGuildBossStageChange(msg) logging.crit(LTAG.CRIT, "[G2CPushGuildBossStageChange]", msg.stageOrder, msg.stageEndTimeStamp) curStateTimeInfo.stageOrder = msg.stageOrder curStateTimeInfo.stageEndTimeStamp = msg.stageEndTimeStamp EventSystem.Dispatch(EventID.UI_GuildBoss_Stagefresh) if curStateTimeInfo.stageOrder == MDL.GuildBoss.Stage.RollAfter and BattleDataGetter.GetCurLevelType() == LuaConst.LevelType.GuildBossTown then CTL.Tips.AddTipsMsg(string.FormatByIdsId(Const_IDS.IDS_GuildBoss_SceneClose,msg.stageEndTimeStamp - UTL.Time.GetServerTimestamp())) end end function private.OnPushGuildRewardPool(msg) if not BattleDataGetter.IsInReconnectFastPlay() then -- 断线重连就不打开界面了 ,直接发送回等待场景。 rankInfo = msg UIManager.CloseAllBase() UIManager.OpenView(Const_UI_Lua.UIEnum.UIBattleSummaryLogo, { msg = msg, summaryType = MDL.GuildWar.SummaryType.GuildBoss }) end end function GuildBoss_Model.GetRankList( ) return guildDamageRecord end function GuildBoss_Model.GetPlayerList( ) return playerDamageRecord end function GuildBoss_Model.GetMyDmg() return myDmg end function GuildBoss_Model.GetMyGuildDmg() return myGuildDmg end function GuildBoss_Model.ClearData() guildDamageRecord = nil playerDamageRecord = nil myDmg = nil myGuildDmg = nil end function GuildBoss_Model.OpenRankView() if rankInfo then UIManager.OpenView(Const_UI_Lua.UIEnum.UIGuildBossReport , rankInfo) rankInfo = nil end end return GuildBoss_Model