local HeroAwaken_Model = {} local private = {} local EventSystem = require('Event/EventSystem') local HeroAwakenInfo = require('Modules/HeroAwaken/HeroAwakenInfo') local Const_Final_LevelId = 631002 local hero_awaken_info = require 'Proto/hero_awaken_info_pb' HeroAwaken_Model.AwakenStage = { None = -1, FirstNotOpen = 0, --活动未开启 SecondFighting = 1, --活动战斗期 ThirdNotAcceptTask = 2, --活动展示期或者活动已结束,玩家尚未开启觉醒任务 FourthDoingTask = 3, --觉醒任务中 FifthBeforeFinal = 4, --完成觉醒任务,尚未进行最终试炼 SixthHasAwaken = 5, --最终试炼完成,已觉醒 } HeroAwaken_Model.AwakenTaskState = { NotEnough = 0, EnoughNotFinish = 1, --任务完成但未交付 HasFinish = 2, } local AwakenSkillOptType_LevelUp = 1 local AwakenSkillOptType_Reset = 2 function HeroAwaken_Model.OnStartup() private.heroAwakenInfo = HeroAwakenInfo:new() private.cachePlayerInfo = {} NetManager.RegisterMsgCB(MessageEnums.MessageOpenAwakenChallenge, private.OnOpenAwakenChallengeResp) NetManager.RegisterMsgCB(MessageEnums.MessageOpenAwakenView, private.OnOpenAwakenViewResp) NetManager.RegisterMsgCB(MessageEnums.MessageStartAwakenTask, private.OnStartAwakenTaskResp) NetManager.RegisterMsgCB(MessageEnums.MessageFinishAwakenTask, private.OnFinishAwakenTaskResp) NetManager.RegisterMsgCB(MessageEnums.MessageAwakenHeroBreak, private.OnAwakenHeroBreakResp) NetManager.RegisterMsgCB(MessageEnums.MessageWeaponAwaken, private.OnWeaponAwakenResp) NetManager.RegisterMsgCB(MessageEnums.MessageAwakenWeaponBreak, private.OnAwakenWeaponBreakResp) NetManager.RegisterMsgCB(MessageEnums.MessageAwakenHeroLearnSkill, private.OnAwakenHeroLearnSkillResp) NetManager.RegisterMsgCB(MessageEnums.MessageG2CNotifyHeroForceAwaken, private.OnG2CNotifyHeroForceAwaken) NetManager.RegisterMsgCB(MessageEnums.MessageAwakenWeaponLearnSkill, private.AwakenWeaponLearnSkillResp) NetManager.RegisterMsgCB(MessageEnums.MessageFairAwakenSkillPlan, private.FairAwakenSkillPlanResp) end function HeroAwaken_Model.GetNextStarData(heroId) local bigBreak = HeroAwaken_Model.GetCurStar(heroId) local success, data = DataSheetManager.HeroAwakenStar:TryGetDataByHeroID_Star(heroId, bigBreak + 1) if success then return data end return nil end function HeroAwaken_Model.GetNextWeaponStarData(heroId) local bigBreak = HeroAwaken_Model.GetCurWeaponStar(heroId) local success, data = DataSheetManager.MagicWeaponAwakenStar:TryGetDataByMagicWeaponID_Star(heroId, bigBreak + 1) if success then return data end return nil end --觉醒武将当前突破数 function HeroAwaken_Model.GetCurStar(heroId) local info = HeroAwaken_Model.GetHeroAwakenInfo(heroId) if info then return info.heroBigBreak or 0, info.heroSmallBreak or 0 end return 0, 0 end --觉醒神兵当前突破数 function HeroAwaken_Model.GetCurWeaponStar(heroId) local info = HeroAwaken_Model.GetHeroAwakenInfo(heroId) if info then return info.weaponBigBreak or 0, info.weaponSmallBreak or 0 end return 0, 0 end --获取技能等级 --type:0是武将,1是神兵 function HeroAwaken_Model.GetSkillLevel(heroId, type, pointId) return private.heroAwakenInfo:GetSkillLevel(heroId, type, pointId) end --武将天资点数 function HeroAwaken_Model.GetHeroSkillPointNums(heroId) local info = HeroAwaken_Model.GetHeroAwakenInfo(heroId) if info then return info.curHeroSkillPointNums end return 0 end --使用的灵识点数 function HeroAwaken_Model.GetWeaponSkillUsedPointNum(heroId) return private.heroAwakenInfo:GetWeaponSkillUsedPointNum(heroId) end function HeroAwaken_Model.GetAwakenStage(heroId) local info = HeroAwaken_Model.GetHeroAwakenInfo(heroId) if info then return info.awakenState end return HeroAwaken_Model.AwakenStage.None end function HeroAwaken_Model.SetAwakenInfo(info, isInit) private.heroAwakenInfo:SetAwakenInfos(info) if not isInit then EventSystem.Dispatch(EventID.UI_HeroAwaken_UpdateStage) EventSystem.Dispatch(EventID.UI_HeroAwaken_UpdateBreakInfo) end end function private.UpdateAwakenStage(heroId, stage) private.heroAwakenInfo:UpdateAwakenInfoParam(heroId, "awakenState", stage) EventSystem.Dispatch(EventID.UI_HeroAwaken_UpdateStage, heroId) end function HeroAwaken_Model.GetHeroAwakenInfo(heroId) return private.heroAwakenInfo:GetAwakenInfo(heroId) end function HeroAwaken_Model.GetAwakenInfoParam(heroId, paramName) return private.heroAwakenInfo:GetAwakenInfoParam(heroId, paramName) end function HeroAwaken_Model.GetAwakenHeroInfoList() return private.heroAwakenInfo:GetAwakenHeroInfoList() end --判断武将是否觉醒 function HeroAwaken_Model.GetIsHeroAwaken(heroId) if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.AwakenActivity) == false then return false end local info = HeroAwaken_Model.GetHeroAwakenInfo(heroId) if info then return info.isHeroAwaken end return false end --判断是否有至少一个武将觉醒 function HeroAwaken_Model.GetIsAnyHeroAwaken() if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.AwakenActivity) == false then return false end return private.heroAwakenInfo:GetIsAnyHeroAwaken() end --判断武将神兵是否觉醒 function HeroAwaken_Model.GetIsWeaponAwaken(heroId) if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.AwakenActivity) == false then return false end local info = HeroAwaken_Model.GetHeroAwakenInfo(heroId) if info then return info.isWeaponAwaken end return false end function HeroAwaken_Model.GetTop1ChallengePlayer(heroId) local awakenInfo = HeroAwaken_Model.GetHeroAwakenInfo(heroId) if awakenInfo then return awakenInfo.challengeMaxScoreAcid end return nil end --处理任务数组 function HeroAwaken_Model.SetTaskInfo(taskInfos, isInit) for _, v in ipairs(taskInfos) do private.heroAwakenInfo:SetHeroTaskInfo(v.heroId, v) end if not isInit then EventSystem.Dispatch(EventID.UI_HeroAwaken_UpdateTaskInfo) end end --处理单个任务 function private.SetSingleTaskInfo(taskInfo) private.heroAwakenInfo:SetHeroTaskInfo(taskInfo.heroId, taskInfo) EventSystem.Dispatch(EventID.UI_HeroAwaken_UpdateTaskInfo) end function HeroAwaken_Model.GetTaskState(heroId, taskId) return private.heroAwakenInfo:GetTaskState(heroId, taskId) end function HeroAwaken_Model.CheckIfTaskNotSubmit(heroId) if DataSheetManager.AwakenTask:TryGetDataByHeroID_TaskID(heroId) == false then return false end for i, v in DataSheetManager.AwakenTask:GetDataByHeroID_TaskID(heroId) do if HeroAwaken_Model.GetTaskState(heroId, v.TaskID) == HeroAwaken_Model.AwakenTaskState.EnoughNotFinish then return true end end return false end function HeroAwaken_Model.GetTaskTriggerParam(heroId, triggerId) return private.heroAwakenInfo:GetTriggerParam(heroId, triggerId) end function HeroAwaken_Model.TryGetPlayerInfo(acid) local info = private.cachePlayerInfo[acid] if info then return info end private.OpenAwakenViewReq(acid) return nil end --玩家可能修改信息,关界面时清理缓存 function HeroAwaken_Model.RemovePlayerInfoCache() table.clear(private.cachePlayerInfo) end --获取方案 function HeroAwaken_Model.GetFairAwakenSkillPlan(heroId, planId) return private.heroAwakenInfo:GetFairAwakenSkillPlan(heroId, planId) end function HeroAwaken_Model.GetFairAwakenSkillPlanByIndex(heroId, index) return private.heroAwakenInfo:GetFairAwakenSkillPlanByIndex(heroId, index) end function HeroAwaken_Model.GetUsedPlanIndex(heroId) local heroAwakenInfo = HeroAwaken_Model.GetHeroAwakenInfo(heroId) local planList = HeroAwaken_Model.GetFairAwakenSkillPlanList(heroId) for i, plan in ipairs(planList) do if plan.planId == heroAwakenInfo.curUsePlanId then return i end end return 1 end function HeroAwaken_Model.GetFairAwakenSkillPlanList(heroId) return private.heroAwakenInfo:GetFairAwakenSkillPlanList(heroId) end function HeroAwaken_Model.GetPlanSkillLevel(heroId, planId, pointId) local plan = private.heroAwakenInfo:GetFairAwakenSkillPlan(heroId, planId) for _, v in ipairs(plan.weaponSkillInfo) do if v.pointId == pointId then return v.level end end return 0 end function HeroAwaken_Model.GetPlanCurrPointNum(heroId, planId) local plan = private.heroAwakenInfo:GetFairAwakenSkillPlan(heroId, planId) return plan.curSkillPointNums end function HeroAwaken_Model.GetPlanUsedPointNum(heroId, planId) local num = 0 local plan = private.heroAwakenInfo:GetFairAwakenSkillPlan(heroId, planId) for _, v in ipairs(plan.weaponSkillInfo) do for _, cfg in DataSheetManager.MagicWeaponAwakenTalent:GetDataByMagicWeaponID_PointID_PointLevel(heroId, v.pointId) do if cfg.PointLevel <= v.level then num = num + cfg.Cost end end end return num end function HeroAwaken_Model.OpenAwakenChallengeReq(heroId) private.optHeroId = heroId local msg = NetManager.GetPB("hero_awaken_opt_pb").OpenAwakenChallengeReq() msg.heroId = heroId NetManager.SendMessage(MessageEnums.MessageOpenAwakenChallenge, msg) end function private.OnOpenAwakenChallengeResp(msgResp) if msgResp.Resp.Code == 0 then CTL.HeroAwaken.SetIsOpenActivityFlag(true) end end function private.OpenAwakenViewReq(acid) local msg = NetManager.GetPB("hero_awaken_opt_pb").OpenAwakenViewReq() msg.acid = acid NetManager.SendMessage(MessageEnums.MessageOpenAwakenView, msg) end function private.OnOpenAwakenViewResp(msgResp) if msgResp.Resp.Code == 0 then private.cachePlayerInfo[msgResp.playerShowInfo.acid] = msgResp.playerShowInfo EventSystem.Dispatch(EventID.UI_HeroAwaken_GetPlayerInfo) end end function HeroAwaken_Model.StartAwakenTaskReq(heroId) private.optHeroId = heroId local msg = NetManager.GetPB("hero_awaken_opt_pb").StartAwakenTaskReq() msg.heroId = heroId NetManager.SendMessage(MessageEnums.MessageStartAwakenTask, msg) end function private.OnStartAwakenTaskResp(msgResp) if msgResp.Resp.Code == 0 then private.SetSingleTaskInfo(msgResp.taskInfo) private.UpdateAwakenStage(private.optHeroId, msgResp.awakenStage) end end function HeroAwaken_Model.FinishAwakenTaskReq(heroId, taskId) local msg = NetManager.GetPB("hero_awaken_opt_pb").FinishAwakenTaskReq() msg.heroId = heroId msg.taskId = taskId NetManager.SendMessage(MessageEnums.MessageFinishAwakenTask, msg) end function private.OnFinishAwakenTaskResp(msgResp) if msgResp.Resp.Code == 0 then local taskData = DataSheetManager.AwakenTask:GetDataByHeroID_TaskID(msgResp.heroId, msgResp.taskId) CTL.Tips.AddTipsMsg(string.FormatByIdsId(Const_IDS.IDS_HeroAwaken_TaskOk, UIUtils.GetLocalizedTxt(Const_IDS[taskData.TaskName]))) private.SetSingleTaskInfo(msgResp.taskInfo) EventSystem.Dispatch(EventID.UI_HeroAwaken_UpdateTaskInfo) private.UpdateAwakenStage(msgResp.heroId, msgResp.awakenStage) end end function HeroAwaken_Model.AwakenHeroBreakReq(heroId) local msg = NetManager.GetPB("hero_awaken_opt_pb").AwakenHeroBreakReq() msg.heroId = heroId NetManager.SendMessage(MessageEnums.MessageAwakenHeroBreak, msg) end function private.OnAwakenHeroBreakResp(msgResp) if msgResp.Resp.Code == 0 then private.heroAwakenInfo:UpdateAwakenInfoParam(msgResp.heroId, "heroBigBreak", msgResp.heroBigBreak) private.heroAwakenInfo:UpdateAwakenInfoParam(msgResp.heroId, "heroSmallBreak", msgResp.heroSmallBreak) private.heroAwakenInfo:UpdateAwakenInfoParam(msgResp.heroId, "curHeroSkillPointNums", msgResp.curHeroSkillPointNums) if msgResp.heroSmallBreak == 0 then CTL.Sound.PlayGameSound("UI_breakthrough_02") EventSystem.Dispatch(EventID.UI_HeroAwaken_OnBigBreakExp) TimerUtil.Interval(function() UIManager.OpenView(Const_UI_Lua.UIEnum.UIHeroAwakenBreakSuccess, { type = 0, bigBreak = msgResp.heroBigBreak, heroId = msgResp.heroId }, Const_UI_Lua.UIEnum.UIPetRuneBreakSuccess) end , 1, 1) else CTL.Sound.PlayGameSound("UI_breakthrough_01") end EventSystem.Dispatch(EventID.UI_HeroAwaken_UpdateBreakInfo) end end function HeroAwaken_Model.WeaponAwakenReq(weaponId) local msg = NetManager.GetPB("hero_awaken_opt_pb").WeaponAwakenReq() msg.weaponId = weaponId NetManager.SendMessage(MessageEnums.MessageWeaponAwaken, msg) end function private.OnWeaponAwakenResp(msgResp) if msgResp.Resp.Code == 0 then private.heroAwakenInfo:UpdateAwakenInfoParam(msgResp.weaponId, "isWeaponAwaken", msgResp.isWeaponAwaken) private.heroAwakenInfo:UpdateAwakenInfoParam(msgResp.weaponId, "curWeaponSkillPointNums", msgResp.curWeaponSkillPointNums) EventSystem.Dispatch(EventID.UI_HeroAwaken_WeaponAwaken) end end function HeroAwaken_Model.AwakenWeaponBreakReq(weaponId) local msg = NetManager.GetPB("hero_awaken_opt_pb").AwakenWeaponBreakReq() msg.weaponId = weaponId NetManager.SendMessage(MessageEnums.MessageAwakenWeaponBreak, msg) end function private.OnAwakenWeaponBreakResp(msgResp) if msgResp.Resp.Code == 0 then private.heroAwakenInfo:UpdateAwakenInfoParam(msgResp.weaponId, "weaponBigBreak", msgResp.weaponBigBreak) private.heroAwakenInfo:UpdateAwakenInfoParam(msgResp.weaponId, "weaponSmallBreak", msgResp.weaponSmallBreak) private.heroAwakenInfo:UpdateAwakenInfoParam(msgResp.weaponId, "curWeaponSkillPointNums", msgResp.curWeaponSkillPointNums) if msgResp.weaponSmallBreak == 0 then CTL.Sound.PlayGameSound("UI_breakthrough_02") EventSystem.Dispatch(EventID.UI_HeroAwaken_OnBigBreakExp) TimerUtil.Interval(function() UIManager.OpenView(Const_UI_Lua.UIEnum.UIHeroAwakenBreakSuccess, { type = 1, bigBreak = msgResp.weaponBigBreak, heroId = msgResp.weaponId }, Const_UI_Lua.UIEnum.UIPetRuneBreakSuccess) end , 1, 1) else CTL.Sound.PlayGameSound("UI_breakthrough_01") end EventSystem.Dispatch(EventID.UI_HeroAwaken_UpdateWeaponBreakInfo) end end function HeroAwaken_Model.EnterFinalStage(heroId) local msg = NetManager.GetPB("fuben_pb").EnterFubenReq() msg.id = Const_Final_LevelId msg.mapType = LuaConst.LevelType.HeroAwakePlayer msg.awakenHeroId = heroId NetManager.SendMessage(MessageEnums.MessageEnterFuben, msg) end function HeroAwaken_Model.AwakenHeroLearnSkillReq(heroId, isReset, pointId) local msg = NetManager.GetPB("hero_awaken_opt_pb").AwakenHeroLearnSkillReq() msg.heroId = heroId if isReset then msg.optTyp = AwakenSkillOptType_Reset else msg.optTyp = AwakenSkillOptType_LevelUp end msg.pointId = pointId NetManager.SendMessage(MessageEnums.MessageAwakenHeroLearnSkill, msg) end function private.OnAwakenHeroLearnSkillResp(msgResp) if msgResp.Resp.Code == 0 then private.heroAwakenInfo:UpdateAwakenInfoParam(msgResp.heroId, "curHeroSkillPointNums", msgResp.curHeroSkillPointNums) EventSystem.Dispatch(EventID.UI_HeroAwaken_UpdateHeroSkillPoint) if msgResp.optTyp == AwakenSkillOptType_LevelUp then CTL.Tips.AddTipsMsg(Const_IDS["IDS_HeroAwaken_TianZiLevelUp"]) private.heroAwakenInfo:UpdateSkillLevel(msgResp.heroId, 0, msgResp.pointId, msgResp.level) EventSystem.Dispatch(EventID.UI_HeroAwaken_UpdateHeroSkillInfo, false, msgResp.pointId) else private.heroAwakenInfo:RemoveSkillLevel(msgResp.heroId, 0) EventSystem.Dispatch(EventID.UI_HeroAwaken_UpdateHeroSkillInfo, true) end end end --觉醒神兵灵识加点req function HeroAwaken_Model.AwakenWeaponLearnSkillReq(weaponId, isReset, pointId) local msg = NetManager.GetPB("hero_awaken_opt_pb").AwakenWeaponLearnSkillReq() msg.weaponId = weaponId if isReset then msg.optTyp = AwakenSkillOptType_Reset else msg.optTyp = AwakenSkillOptType_LevelUp end msg.pointId = pointId NetManager.SendMessage(MessageEnums.MessageAwakenWeaponLearnSkill, msg) end function private.AwakenWeaponLearnSkillResp(msgResp) if msgResp.Resp.Code == 0 then private.heroAwakenInfo:UpdateAwakenInfoParam(msgResp.weaponId, "curWeaponSkillPointNums", msgResp.curWeaponSkillPointNums) EventSystem.Dispatch(EventID.UI_HeroAwaken_UpdateWeaponAwakenSkillPoint) if msgResp.optTyp == AwakenSkillOptType_LevelUp then CTL.Tips.AddTipsMsg(Const_IDS["IDS_HeroAwaken_LingShiLevelUp"]) private.heroAwakenInfo:UpdateSkillLevel(msgResp.weaponId, 1, msgResp.pointId, msgResp.level) EventSystem.Dispatch(EventID.UI_HeroAwaken_UpdateWeaponAwakenSkillInfo) else CTL.Tips.AddTipsMsg(Const_IDS["IDS_Stratagem_ResetSucceed"]) private.heroAwakenInfo:ResetWeaponAwakenSkillLevel(msgResp.weaponId) EventSystem.Dispatch(EventID.UI_HeroAwaken_UpdateWeaponAwakenSkillInfo) end end end --[[ 天资、灵识方案操作方式 enum AwakenPlanType { ChangeName = 0; //改方案名字 LevelUpSkill = 1; //技能点升级 Reset = 2; //方案加点重置 SetUse = 3; //设置生效 } ]] --公平竞技操作灵识加点方案req function HeroAwaken_Model.FairAwakenSkillPlanReq(weaponId, optType, planId, pointId, name) local msg = NetManager.GetPB("hero_awaken_opt_pb").FairAwakenSkillPlanReq() msg.weaponId = weaponId msg.pointId = pointId or 0 msg.planId = planId msg.optTyp = optType msg.name = name or "" NetManager.SendMessage(MessageEnums.MessageFairAwakenSkillPlan, msg) end function private.FairAwakenSkillPlanResp(msgResp) if msgResp.Resp.Code == 0 then if msgResp.optTyp == hero_awaken_info.ChangeName then private.heroAwakenInfo:ChangeFairAwakenSkillPlanName(msgResp.weaponId, msgResp.planId, msgResp.name) CTL.Tips.AddTipsMsg(Const_IDS["IDS_PlayName_ReNameSuccess"]) EventSystem.Dispatch(EventID.UI_HeroAwaken_FairAwakenSkillPlan_ChangeName) elseif msgResp.optTyp == hero_awaken_info.SetUse then private.heroAwakenInfo:UpdateAwakenInfoParam(msgResp.weaponId, "curUsePlanId", msgResp.curUsePlanId) CTL.Tips.AddTipsMsg(Const_IDS["IDS_HeroAwaken_EnableOK"]) EventSystem.Dispatch(EventID.UI_HeroAwaken_FairAwakenSkillPlan_SetUse) elseif msgResp.optTyp == hero_awaken_info.LevelUpSkill then private.heroAwakenInfo:UpdateFairAwakenSkillPlan(msgResp.weaponId, msgResp.planId, msgResp.curWeaponSkillPointNums, msgResp.pointId, msgResp.level) EventSystem.Dispatch(EventID.UI_HeroAwaken_FairAwakenSkillPlan_LevelUpSkill, false, msgResp.pointId) elseif msgResp.optTyp == hero_awaken_info.Reset then private.heroAwakenInfo:ResetFairAwakenSkillPlan(msgResp.weaponId, msgResp.planId, msgResp.curWeaponSkillPointNums) EventSystem.Dispatch(EventID.UI_HeroAwaken_FairAwakenSkillPlan_Reset, true) end end end function private.OnG2CNotifyHeroForceAwaken(msg) logging.log(LTAG.LOG, "G2CNotifyHeroForceAwaken", msg.heroId) end return HeroAwaken_Model