local Pet_Model = {} local EventSystem = require('Event/EventSystem') local private = {} local InfoCode_Pet_Born22 = 4049 Pet_Model.PetQuality = { Normal = 1, God = 2, } Pet_Model.PetState = { Basic = 0, -- 未变异/成长体 Mutation = 1, -- 变异/觉醒体 Ultimate = 2, -- 终极体 } Pet_Model.LevelUpOptType = { UseExpMat = 1, --吃经验丹 Once = 2, --升一级 OneKey = 3, --一键升级 } Pet_Model.CatchOptType = { Lock = 0, --开始捕捉 Release = 1, --取消捕捉 } Pet_Model.AssistanceSlotState = { Locked = 0, Unlock = 1, LineUp = 2, } Pet_Model.FormationOptType = { Main = 1, Sub = 2, } Pet_Model.BreedState = { UnBreed = 0, Breeding = 1, --繁殖中 Finish = 2, --繁殖结束 } Pet_Model.BreedConfirmType = { RequireConfirm = 1, AcceptConfirm = 2, RejectConfirm = 3, } function Pet_Model.OnStartup() NetManager.RegisterMsgCB(MessageEnums.MessagePetChangeName, private.OnPetNameChangedResp) NetManager.RegisterMsgCB(MessageEnums.MessageStartCapturePet, private.StartCapturePetResp) NetManager.RegisterMsgCB(MessageEnums.MessageCapturePet, private.CapturePetResp) NetManager.RegisterMsgCB(MessageEnums.MessagePetAddExp, private.OnPetAddExp) NetManager.RegisterMsgCB(MessageEnums.MessagePetListExpand, nil) NetManager.RegisterMsgCB(MessageEnums.MessageGodPetActivate, private.GodPetActivateResp) NetManager.RegisterMsgCB(MessageEnums.MessageReleasePet, private.ReleasePetResp) NetManager.RegisterMsgCB(MessageEnums.MessagePetRecast, nil) NetManager.RegisterMsgCB(MessageEnums.MessageConfirmObtainPet, nil) NetManager.RegisterMsgCB(MessageEnums.MessagePurifyPet, private.OnPurifyPetResp) NetManager.RegisterMsgCB(MessageEnums.MessagePurifyPetSave, nil) NetManager.RegisterMsgCB(MessageEnums.MessageStartBreedPet, private.OnStartBreedPetResp) NetManager.RegisterMsgCB(MessageEnums.MessageS2CPushCancelCapturePet, private.S2CPushCancelCapturePet) NetManager.RegisterMsgCB(MessageEnums.MessageBreedPetReward, private.OnBreedPetRewardResp) NetManager.RegisterMsgCB(MessageEnums.MessagePetSlotLineUp, private.OnPetSlotLineUp) NetManager.RegisterMsgCB(MessageEnums.MessagePetFormationChange, private.OnPetFormationChangeResp) NetManager.RegisterMsgCB(MessageEnums.MessagePetAssistanceUnlock, private.OnPetAssistanceUnlock) NetManager.RegisterMsgCB(MessageEnums.MessageGodPetBreak, private.GodPetBreakResp) NetManager.RegisterMsgCB(MessageEnums.MessageChangeFollowPet, private.OnChangeFollowPetResp) NetManager.RegisterMsgCB(MessageEnums.MessageChooseBreedPet, private.OnChooseBreedPetResp) NetManager.RegisterMsgCB(MessageEnums.MessageBreedPetLock, private.OnBreedPetLockResp) NetManager.RegisterMsgCB(MessageEnums.MessageBreedPetInvite, private.BreedPetInviteResp) NetManager.RegisterMsgCB(MessageEnums.MessageBreedPetInviteHandle, private.OnBreedPetInviteHandle) NetManager.RegisterMsgCB(MessageEnums.MessageBreedPetKickOut, private.OnBreedPetKickOutResp) NetManager.RegisterMsgCB(MessageEnums.MessagePetTalismanBreak, private.OnPetTalismanBreakResp) NetManager.RegisterMsgCB(MessageEnums.MessagePetTalismanLearn, private.OnPetTalismanLearnResp) NetManager.RegisterMsgCB(MessageEnums.MessagePetTalismanMerge, private.OnPetTalismanMergeResp) NetManager.RegisterMsgCB(MessageEnums.MessageOpenPetBreedView, private.OnOpenPetBreedView) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushPetBreedInfo, private.OnG2CPushPetBreedInfo) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushPetBreedInvited, private.OnG2CPushPetBreedInvited) NetManager.RegisterMsgCB(MessageEnums.MessageG2CPushConfirmBreed, private.OnG2CPushConfirmBreed) NetManager.RegisterMsgCB(MessageEnums.MessageAcceptBreedConfirm, nil) NetManager.RegisterMsgCB(MessageEnums.MessageG2CDeleteParentPet, private.OnG2CDeleteParentPet) NetManager.RegisterMsgCB(MessageEnums.MessageUsePetEgg, private.OnUsePetEggResp) NetManager.RegisterMsgCB(MessageEnums.MessageRewardPetWeekBreed, nil) NetManager.RegisterMsgCB(MessageEnums.MessageActivateRelationRuneSkill, private.OnActivateRelationRuneSkill) NetManager.RegisterMsgCB(MessageEnums.MessageRewardGuidedPet, private.OnRewardGuidedPetResp) NetManager.RegisterMsgCB(MessageEnums.MessageCourtshipRespond, private.OnCourtshipRespondResp) NetManager.RegisterMsgCB(MessageEnums.MessagePetShare, nil) NetManager.RegisterMsgCB(MessageEnums.MessageViewPetShare, private.OnViewPetShareResp) EventSystem.Regist(EventID.AcquireSystemRedAfterUnlock, private.OnEnterWorldPostprocess) EventSystem.Regist(EventID.OnReConnectOk, private.ProcessLogoutCase) private.petInfoDic = {} -- k:petUniqId v:PetInfo = {Info = {}, Config = {}} private.slotInfoArray = {} private.globalInfo = nil private.mainFormationOrder = {} private.assistFormationOrder = {} private.capturingInfo = nil private.activePetList = {} -- 已激活的宠物列表(有序) private.invitedBreedInfoList = {} --被邀请繁殖列表 private.invitedPlayerInfoDict = {} --被邀请玩家信息 private.curFollowPetUniqId = nil --场景跟随的宠物 private.isSingleBreed = false --是否是单人繁殖 private.roomBreedInfo = nil --繁殖房间中的信息 private.runeBagDict = {} private.sortedRuneBagList = {} private.mainOrderList = {} --上阵主将(宠物) private.subTempList = {} --上阵副将(宠物) end function private.SortActivePetOrder(a, b) -- 上阵>助阵>未上阵 -- 成长评分高>成长评分低 local isLineUpA = Pet_Model.IsPetLineUp(a.Info.petUniqId) local isLineUpB = Pet_Model.IsPetLineUp(b.Info.petUniqId) if not isLineUpA and not isLineUpB then return private.SortByGrowUpRateScore(a, b) else if isLineUpA and isLineUpB then return Pet_Model.IsPetAssistanceFight(a.Info.petUniqId) else return isLineUpA end end end --上阵前中后三军>二代>战力 function private.SortBaseRule(a, b) local slotId_a = Pet_Model.GetSlotIdByPetUniqueID(a.Info.petUniqId) local slotId_b = Pet_Model.GetSlotIdByPetUniqueID(b.Info.petUniqId) if slotId_a > 0 and slotId_b > 0 then return slotId_a < slotId_b elseif slotId_a > 0 and slotId_b <= 0 then return true elseif slotId_a <= 0 and slotId_b > 0 then return false else local isAssist_a = Pet_Model.IsPetAssistanceFight(a.Info.petUniqId) local isAssist_b = Pet_Model.IsPetAssistanceFight(b.Info.petUniqId) if isAssist_a == isAssist_b then local isGod_a = a.Info.petQuality == MDL.Pet.PetQuality.God local isGod_b = b.Info.petQuality == MDL.Pet.PetQuality.God if isGod_a == isGod_b then local petGeneration_a = a.Info.petGeneration local petGeneration_b = b.Info.petGeneration if petGeneration_a == petGeneration_b then return a.Info.baseGS > b.Info.baseGS end return petGeneration_a > petGeneration_b end return isGod_a end return isAssist_a end end function private.SortByAssistance(a, b) local isAssistanceA = Pet_Model.IsPetAssistanceFight(a.Info.petUniqId) local isAssistanceB = Pet_Model.IsPetAssistanceFight(b.Info.petUniqId) if not isAssistanceA and not isAssistanceB then return private.SortByGrowUpRateScore(a, b) else return isAssistanceA end end function private.SortByGrowUpRateScore(a, b) local growUpScoreA = CTL.Pet.GetGrowUpScore(a.Info.petAptitude, a.Info.petPedigree) local growUpScoreB = CTL.Pet.GetGrowUpScore(b.Info.petAptitude, b.Info.petPedigree) return growUpScoreA > growUpScoreB end --背包符文排序 function Pet_Model.SortRuneBagRule(a, b) local cfg_a = DataSheetManager.PetRuneSkill:GetDataByPetRuneID(a.cfgId) local cfg_b = DataSheetManager.PetRuneSkill:GetDataByPetRuneID(b.cfgId) if cfg_a.RuneLevel == cfg_b.RuneLevel then if cfg_a.PetRuneID == cfg_b.PetRuneID then return a.id < b.id end return cfg_a.PetRuneID < cfg_b.PetRuneID end return cfg_a.RuneLevel > cfg_b.RuneLevel end --形象设置排序 function private.SortByFollowSetting(a, b) local isSet_a = a.Info.petUniqId == private.curFollowPetUniqId local isSet_b = b.Info.petUniqId == private.curFollowPetUniqId if isSet_a ~= isSet_b then return isSet_a end return private.SortActivePetOrder(a, b) end --region ------------------- 基础方法 ----------------------- function Pet_Model.SetCapturingInfo(val) if val then --将技能列表合并 Pet_Model.CombineSkill(val.congenitalSkill, val.childSkill) end private.capturingInfo = val end function Pet_Model.GetCapturingInfo() return private.capturingInfo end function Pet_Model.GetActiveInfo(uniqueID) return private.petInfoDic[uniqueID] end function Pet_Model.GetActiveInfoDic() return private.petInfoDic end function Pet_Model.GetActiveCount() return table.getDictCount(private.petInfoDic) end -- 获取拥有的神兽list function Pet_Model.GetOrderedList(forceSort) if forceSort then table.sort(private.activePetList, private.SortBaseRule) end return private.activePetList end function Pet_Model.GetBagMaxCount() if private.globalInfo then return private.globalInfo.petMaxCount end return 0 end function Pet_Model.GetDailyBreedTimes() if private.globalInfo then return private.globalInfo.dailyBreedTimes end return 0 end function Pet_Model.GetWeekBreedTimes() if private.globalInfo then return private.globalInfo.weekBreedTimes end return 0 end --宠物是否变异 function Pet_Model.CheckPetIsVariation(petUniqueID) local petInfo = private.petInfoDic[petUniqueID] if petInfo then return petInfo.Info.petVariation == 1 end return false end function private.StartBreedTimer() if private.breedTimer then TimerUtil.Remove(private.breedTimer) private.breedTimer = nil end local _, seconds = Pet_Model.GetPetBreedState() if seconds > 0 then private.breedTimer = TimerUtil.Interval(private.TimeToUpdateBreedState, seconds + 1, 1) end end function private.TimeToUpdateBreedState() if private.breedTimer then TimerUtil.Remove(private.breedTimer) private.breedTimer = nil end CTL.Pet.ProcessBreedNotice() EventSystem.Dispatch(EventID.UI_Pet_PushBreedInfo) end --获取繁殖状态 function Pet_Model.GetPetBreedState() if private.globalInfo then local breedEndTime = private.globalInfo.breedEndTime if breedEndTime > 0 then local offset = breedEndTime - UTL.Time.GetServerTimestamp() if offset <= 0 then return Pet_Model.BreedState.Finish, 0 end return Pet_Model.BreedState.Breeding, offset end end return Pet_Model.BreedState.UnBreed, 0 end function Pet_Model.GetWeekBreedTimeInfo() if private.globalInfo then return private.globalInfo.weekBreedTimes, private.globalInfo.hasRewardWeekBreed end return 0, false end function Pet_Model.GetDailyCatchInfo() if private.globalInfo then return private.globalInfo.dailyCaptureTimes, private.globalInfo.hasRewardDailyCapture end return 0, false end --判断专属技能是否生效 function Pet_Model.GetHeroRelationId(heroId) if private.globalInfo then for i, v in ipairs(private.globalInfo.curRelationRuneSkill) do if v.heroId == heroId then return v.runeSkillId end end end return nil end --获取正在繁殖的数据,跟房间的breedInfo区分开 function Pet_Model.GetBreedingInfo() if Pet_Model.GetPetBreedState() == Pet_Model.BreedState.Breeding then return private.globalInfo.breedParentInfo end return nil end --判断自己是否是繁殖房间房主 function Pet_Model.IsBreedRoomOwner() local info = Pet_Model.GetBreedingInfo() if info == nil then --未开始繁殖,判断是否有房间信息 if private.roomBreedInfo == nil then --无房间信息,自己是第一个进房间的人 return true end --进来的时候已经有房间信息了,肯定不是房主 return false else --房主是1P return info[1].playerAcid == BattleDataGetter.GetAcID() end end function Pet_Model.ClearRoomBreedInfo() CTL.Pet.IsUseExtraBreedMat = false private.roomBreedInfo = nil end -- 获取未激活神兽列表 function Pet_Model.GetUnActiveGodPetList() local tb = {} for i, v in DataSheetManager.PetData:GetEnumerator() do if v.Quality == Pet_Model.PetQuality.God and v.Stage == Pet_Model.PetState.Basic then if Pet_Model.IsGodPetActive(v.ID) == false then table.insert(tb, v) end end end return tb end --获取放生奖励列表 function Pet_Model.GetSumReleaseMat(petInfo, isDetail) local result = {} local releaseTab local cfg = DataSheetManager.PetRelease:GetDataByID(petInfo.petPedigree) if petInfo.petVariation == MDL.Pet.PetState.Basic then if petInfo.petGeneration == 1 then releaseTab = cfg.ParentCommonItem_Table else releaseTab = cfg.ChildCommonItem_Table end else releaseTab = cfg.ChildVariationItem_Table end for i, v in ipairs(releaseTab) do table.insert(result, { itemId = v.ItemID, itemNum = v.ItemNum }) end local normalItem = DataSheetManager.ConstData:GetDataByID("PetTalentItemCommon").IntValue local normalReturn = FP.tonumberV1(DataSheetManager.ConstData:GetDataByID("PetRebornReturnPercent").FloatValue) local variationItem = DataSheetManager.ConstData:GetDataByID("PetTalentItemVariation").IntValue local variationReturn = FP.tonumberV1(DataSheetManager.ConstData:GetDataByID("PetRebornReturnVariation").FloatValue) for i, v in ipairs(petInfo.petUsedPurifyItem) do if v.itemId == normalItem then local returnNum = math.floor(v.itemNum * normalReturn) if returnNum > 0 then table.insert(result, { itemId = v.itemId, itemNum = returnNum }) end elseif v.itemId == variationItem then local returnNum = math.floor(v.itemNum * variationReturn) if returnNum > 0 then table.insert(result, { itemId = v.itemId, itemNum = returnNum }) end else table.insert(result, v) end end if isDetail then for i, v in ipairs(petInfo.petUsedExpItem) do table.insert(result, v) end end return result end -- 神宠是否可激活 function Pet_Model.CanActiveGodPet(petTypeID) local petConfig = DataSheetManager.PetData:GetDataByID_Stage(petTypeID, Pet_Model.PetState.Basic) if not Pet_Model.IsGodPetActive(petTypeID) then return (MDL.Bag.GetItemCount(petConfig.PieceItem) or 0) >= petConfig.PieceItemNum end return false end -- 神宠是否已激活 function Pet_Model.IsGodPetActive(petTypeID) local orderedList = Pet_Model.GetOrderedList() for i, v in ipairs(orderedList) do if v.Info.petQuality == Pet_Model.PetQuality.God and v.Info.petType == petTypeID then return true end end return false end --宠物的槽位Info,不在槽位上返回nil function Pet_Model.GetSlotInfoByPetUniqueID(petUniqueID) for slotId, slotInfo in pairs(private.slotInfoArray) do if petUniqueID == slotInfo.petUniqId then return slotInfo end end return nil end --宠物是否上阵或者助阵 function Pet_Model.IsPetLineUpOrAssistance(uniqueID) if Pet_Model.IsPetLineUp(uniqueID) then return true end return Pet_Model.IsPetAssistanceFight(uniqueID) end function Pet_Model.GetSlotIdByPetUniqueID(petUniqueID) local slotInfo = Pet_Model.GetSlotInfoByPetUniqueID(petUniqueID) if slotInfo then return slotInfo.slotId end return 0 end function Pet_Model.GetSlotInfoBySlotId(slotId) return private.slotInfoArray[slotId] end -- 宠物是否上阵 function Pet_Model.IsPetLineUp(uniqueID) return Pet_Model.GetSlotInfoByPetUniqueID(uniqueID) ~= nil end -- 是否有同类宠物上阵 function Pet_Model.IsPetTypeLineUp(petCfgId) for slotId, slotInfo in pairs(private.slotInfoArray) do local data = Pet_Model.GetActiveInfo(slotInfo.petUniqId) if data and data.Config.ID == petCfgId then return true end end return false end -- 宠物是否助阵 function Pet_Model.IsPetAssistanceFight(uniqueID) for i = 1, CTL.Pet.MAX_SLOT do local state, petUniqueID = Pet_Model.GetAssistanceState(i) if state == Pet_Model.AssistanceSlotState.LineUp and petUniqueID == uniqueID then return true end end return false end -- 宠物是否助阵 function Pet_Model.IsPetTypeAssistanceFight(petCfgId) for i = 1, CTL.Pet.MAX_SLOT do local state, petUniqueID = Pet_Model.GetAssistanceState(i) if state == Pet_Model.AssistanceSlotState.LineUp then local data = Pet_Model.GetActiveInfo(petUniqueID) if data and data.Config.ID == petCfgId then return true end end end return false end function Pet_Model.GetAssistanceState(slotIndex) for i, v in ipairs(private.assistFormationOrder) do if i == slotIndex then local state if v == "-1" then state = Pet_Model.AssistanceSlotState.Locked elseif v == "0" then state = Pet_Model.AssistanceSlotState.Unlock else state = Pet_Model.AssistanceSlotState.LineUp end return state, v end end end --上阵信息 function Pet_Model.GetMainFormationInfo(index) local slotId = Pet_Model.GetMainFormationSlotId(index) return Pet_Model.GetSlotInfoBySlotId(slotId) end function Pet_Model.GetMainFormationSlotId(index) return private.mainFormationOrder[index] or 0 end --找到槽位ID对应的出战顺序(前中后军) function Pet_Model.GetMainFormationIndexBySlotId(slotId) for i, v in ipairs(private.mainFormationOrder) do if v == slotId then return i end end --该槽位无宠物 return 0 end -- 宠物血脉 function Pet_Model.GetPetPedigree(uniqueID) local petInfo = private.petInfoDic[uniqueID].Info return petInfo.petPedigree end function Pet_Model.GetPurifyBonusCount(talentRefineID) for i, v in ipairs(private.globalInfo.purifyInfo) do if v.petTalentRefineId == talentRefineID then return v.purifyNums end end return 0 end function Pet_Model.CanPetLevelUp(uniqueID) local tempInfo = Pet_Model.GetActiveInfo(uniqueID) local petInfo, petConfig = tempInfo.Info, tempInfo.Config local levelUpConfig = DataSheetManager.PetLevelUp:GetDataByLevelUpID_PetLevel(petConfig.LevelUpID, petInfo.petLevel) if levelUpConfig.NeedExp == 0 then -- 最大等级 return false end if MDL.HeroSelect.GetTeamLevel() < levelUpConfig.HeroStarLimit then return false end return true end ---设置宠物信息辅助信息 function private.SetActiveInfo(petServerInfo) local petID = petServerInfo.petType local stageID if petServerInfo.petQuality == Pet_Model.PetQuality.Normal then stageID = petServerInfo.petVariation else local cfg = DataSheetManager.GodPetStar:GetDataByPetID_PetStar(petID, petServerInfo.bigBreak) stageID = cfg.Stage end -- 已激活宠物字典信息 local petConfig = DataSheetManager.PetData:GetDataByID_Stage(petID, stageID) UTL.Attr.ProcessProtoAttrTable(petServerInfo.attr.attrs) --将技能列表合并 Pet_Model.CombineSkill(petServerInfo.congenitalSkill, petServerInfo.childSkill) if private.petInfoDic[petServerInfo.petUniqId] == nil then private.petInfoDic[petServerInfo.petUniqId] = { Info = petServerInfo, Config = petConfig } else private.petInfoDic[petServerInfo.petUniqId].Info = petServerInfo private.petInfoDic[petServerInfo.petUniqId].Config = petConfig end end function Pet_Model.CombineSkill(skill, extraSkill) for i, v in ipairs(extraSkill) do table.insert(skill, v) end table.sort(skill, Pet_Model.SortSkill) end --普攻>主动>被动 function Pet_Model.SortSkill(a, b) local skillType_a = CTL.Pet.GetSkillType(a) local skillType_b = CTL.Pet.GetSkillType(b) return skillType_a < skillType_b end -- 更新激活列表 function private.UpdateActivePetList() table.clearArray(private.activePetList) for uniqueID, info in pairs(private.petInfoDic) do table.insert(private.activePetList, info) end end function Pet_Model.GetFollowSettingList() local result = {} for _, info in pairs(private.petInfoDic) do table.insert(result, info) end table.sort(result, private.SortByFollowSetting) return result end --0表示全部 function Pet_Model.GetSortedBagRuneList(level) table.clearArray(private.sortedRuneBagList) for id, v in pairs(private.runeBagDict) do local cfg = DataSheetManager.PetRuneSkill:GetDataByPetRuneID(v.cfgId) if level == 0 or cfg.RuneLevel == level then table.insert(private.sortedRuneBagList, v) end end table.sort(private.sortedRuneBagList, Pet_Model.SortRuneBagRule) return private.sortedRuneBagList end --获取所有 function Pet_Model.GetAllRelationRuneSkill() table.clearArray(private.sortedRuneBagList) if private.globalInfo then for i, v in ipairs(private.globalInfo.allRelationRuneSkill) do for i = 1, v.runeSkillNum do local skill = DataSheetManager.PetRelation:GetDataByItemID(v.runeSkillId) local cfg = DataSheetManager.PetRelationSkill:GetDataByRelationSkillID(skill.Relation_Table[1].RelationSkill) table.insert(private.sortedRuneBagList, cfg) end end end return private.sortedRuneBagList end function Pet_Model.GetRuneCfgByID(serverId) local info = private.runeBagDict[serverId] if info then return DataSheetManager.PetRuneSkill:GetDataByPetRuneID(info.cfgId) end return nil end function Pet_Model.GetRuneBagDict() return private.runeBagDict end function Pet_Model.GetRuneByLevel_Type(level, runeType) for _, v in pairs(private.runeBagDict) do local cfg = DataSheetManager.PetRuneSkill:GetDataByPetRuneID(v.cfgId) if cfg.RuneType == runeType and cfg.RuneLevel >= level then return cfg end end return nil end --endregion ------------------------------------------------ --region ---------------------------- 数据同步 -------------------------------- function Pet_Model.DelBagPetRune(runeList) for i, v in ipairs(runeList) do private.runeBagDict[v] = nil end EventSystem.Dispatch(EventID.UI_Pet_UpdateRuneBagItem) end function Pet_Model.SetBagRune(runeList, isInit) for i, v in ipairs(runeList) do private.runeBagDict[v.id] = v end if isInit == false then private.OnBagPetRuneUpdate(runeList) end end function private.OnBagPetRuneUpdate(runeList) if runeList and private.isMergingRune then EventSystem.Dispatch(EventID.UI_Pet_MergeRuneSuccess, runeList[1].cfgId) private.isMergingRune = false end EventSystem.Dispatch(EventID.UI_Pet_UpdateRuneBagItem) end function Pet_Model.SetGlobalInfo(petGlobalInfo, isInit) private.globalInfo = petGlobalInfo Pet_Model.SetCurFollowPet(petGlobalInfo.followPetId) if isInit == false then private.OnGlobalInfoUpdate(true) end end function private.OnGlobalInfoUpdate(isCheckRed) if isCheckRed then CTL.Pet.CheckBreedReward() CTL.Pet.CheckCatchReward() end CTL.Pet.ProcessBreedNotice() private.StartBreedTimer() EventSystem.Dispatch(EventID.UI_Pet_UpdateGlobalInfo) end function Pet_Model.SetPetInfoList(petList, isInit) for _, v in ipairs(petList) do private.SetActiveInfo(v) end private.UpdateActivePetList() if isInit == false then private.OnPetInfoUpdate(true) end end function private.OnPetInfoUpdate(isCheckRed) if isCheckRed then CTL.Pet.CheckPetIfLineUp() end EventSystem.Dispatch(EventID.UI_Pet_UpdatePetInfo) end --宠物槽位 function Pet_Model.SetSlotInfo(petSlotList, isInit) for _, v in ipairs(petSlotList) do UTL.Attr.ProcessProtoAttrTable(v.attr.attrs) private.slotInfoArray[v.slotId] = v end if isInit == false then private.OnSlotInfoUpdate(true) end end function private.OnSlotInfoUpdate(isCheckRed) if isCheckRed then CTL.Pet.CheckPetIfLineUp() CTL.Pet.CheckIfLevelUp() end EventSystem.Dispatch(EventID.UI_Pet_UpdateSlotInfo) end --宠物上阵前中后军 function Pet_Model.SetFormationInfo(petFormationInfo, isInit) for i = 1, CTL.Pet.MAX_SLOT do private.mainFormationOrder[i] = petFormationInfo.firstId[i] end private.assistFormationOrder = petFormationInfo.secondId if isInit == false then private.OnFormationInfoUpdate(true) end end function private.OnFormationInfoUpdate(isCheckRed) if isCheckRed then CTL.Pet.CheckPetIfLineUp() CTL.Pet.CheckIfLevelUp() end EventSystem.Dispatch(EventID.UI_Pet_UpdateFormationInfo) end function Pet_Model.InitPetInfo(petList, petGlobalInfo, petSlotList, petFormationInfo) Pet_Model.SetPetInfoList(petList, true) Pet_Model.SetGlobalInfo(petGlobalInfo, true) Pet_Model.SetSlotInfo(petSlotList, true) Pet_Model.SetFormationInfo(petFormationInfo, true) end function private.OnEnterWorldPostprocess() private.OnBagPetRuneUpdate() private.OnGlobalInfoUpdate(false) private.OnPetInfoUpdate(false) private.OnSlotInfoUpdate(false) private.OnFormationInfoUpdate(false) CTL.Pet.CheckRedAfterEnterWorld() end --endregion ------------------------------------------------------------------------- function private.ProcessLogoutCase() Pet_Model.SetCapturingInfo(nil) EventSystem.Dispatch(EventID.UI_Pet_ClosePetPanel, Const_UI_Lua.UIEnum.UIPetActiveSuccess) if UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UIPetReproduction) then private.isSingleBreed = false private.roomBreedInfo = nil EventSystem.Dispatch(EventID.UI_Pet_ClosePetPanel, Const_UI_Lua.UIEnum.UIPetReproduction) end if UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UIPetCatchPopUp) then UIManager.CloseView(Const_UI_Lua.UIEnum.UIPetCatchPopUp) end end -- 场景服关闭补宠界面 function private.S2CPushCancelCapturePet(msg) EventSystem.Dispatch(EventID.Pet_CloseCatchUpView) end -- 推送宠物繁殖界面信息 function private.OnG2CPushPetBreedInfo(msg) private.roomBreedInfo = nil if msg.needCloseView then private.cachePushClose = true --增加标识,如果该push优先于resp到达,resp不处理 local msgData = DataSheetManager.ErrorCode:GetDataByID(msg.infoCode) CTL.Tips.AddTipsMsg(Const_IDS[msgData.IDS]) EventSystem.Dispatch(EventID.UI_Pet_ClosePetPanel, Const_UI_Lua.UIEnum.UIPetReproduction) else if UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UIPetReproduction) then if IsServerDataNotNil(msg.breedInfo) then private.roomBreedInfo = msg.breedInfo private.isSingleBreed = false end EventSystem.Dispatch(EventID.UI_Pet_PushBreedInfo) end end end function private.OnG2CPushPetBreedInvited(msg) if not UIManager.IsViewOpened(Const_UI_Lua.UIEnum.UIPetInviteView) and CTL.HomeMain.GetFocusTarget() == Const_UI_Lua.UIEnum.UITownHome then UIManager.OpenView(Const_UI_Lua.UIEnum.UIPetInviteView, {msg = msg}) else MDL.Pet.AddPetBreedInvitedNotice(msg) end end --被邀请未进入房间,添加一条信息球 function Pet_Model.AddPetBreedInvitedNotice(msg) for i, v in ipairs(private.invitedBreedInfoList) do if v.playerAcid == msg.breedInfo.playerAcid then table.remove(private.invitedBreedInfoList, i) break end end private.invitedPlayerInfoDict[msg.breedInfo.playerAcid] = msg.guildName table.insert(private.invitedBreedInfoList, 1, msg.breedInfo) EventSystem.Dispatch(EventID.UI_Pet_UpdateInviteInfoList) CTL.HomeMain.AddMainNotice(CTL.HomeMain.NoticeType.PetBreedApply) end function private.OnG2CPushConfirmBreed(msg) if msg.confirmType == Pet_Model.BreedConfirmType.RequireConfirm then local petName1 = UIUtils.GetLocalizedTxt(Const_IDS[DataSheetManager.PetData:GetDataByID_Stage(private.roomBreedInfo.petId, private.roomBreedInfo.petVariation).PetName]) local petName2 = UIUtils.GetLocalizedTxt(Const_IDS[Pet_Model.GetActiveInfo(private.choosingBreedPet).Config.PetName]) local petStar1 = private.roomBreedInfo.petPedigree local petStar2 = Pet_Model.GetActiveInfo(private.choosingBreedPet).Info.petPedigree local content = string.FormatByIdsId(Const_IDS.IDS_PetReproduce18, petStar1, petName1, petStar2, petName2) UTL.MessageBox.ShowOKCancelNoCloseBox(nil, content, private.AcceptBreedConfirm, private.RejectBreedConfirm) elseif msg.confirmType == Pet_Model.BreedConfirmType.AcceptConfirm then EventSystem.Dispatch(EventID.UI_Pet_ProcessBreedConfirmState, Pet_Model.BreedConfirmType.AcceptConfirm) elseif msg.confirmType == Pet_Model.BreedConfirmType.RejectConfirm then CTL.Tips.AddTipsMsg(Const_IDS["IDS_PetReproduce20"]) EventSystem.Dispatch(EventID.UI_Pet_ProcessBreedConfirmState, Pet_Model.BreedConfirmType.RejectConfirm) end end function private.OnG2CDeleteParentPet(msg) private.RemovePetInBag(msg.uniqId) end function private.AcceptBreedConfirm() if private.roomBreedInfo == nil then CTL.Tips.AddTipsMsg(Const_IDS["IDS_ERRORCODE_4036_InfoCode_Pet_Born10"]) return end Pet_Model.AcceptBreedConfirmReq(true, CTL.Pet.IsUseExtraBreedMat) end function private.RejectBreedConfirm() if private.roomBreedInfo == nil then CTL.Tips.AddTipsMsg(Const_IDS["IDS_ERRORCODE_4036_InfoCode_Pet_Born10"]) return end Pet_Model.AcceptBreedConfirmReq(false, CTL.Pet.IsUseExtraBreedMat) end function Pet_Model.AcceptBreedConfirmReq(isAccept, useExtraItem) local msg = NetManager.GetPB("pet_opt_pb").AcceptBreedConfirmReq() msg.isAccept = isAccept msg.useExtraItem = useExtraItem NetManager.SendMessage(MessageEnums.MessageAcceptBreedConfirm, msg) end function private.RemoveInviteBreedInfoByAcid(acid) for i, v in ipairs(private.invitedBreedInfoList) do if v.playerAcid == acid then table.remove(private.invitedBreedInfoList, i) break end end private.invitedPlayerInfoDict[acid] = nil EventSystem.Dispatch(EventID.UI_Pet_UpdateInviteInfoList) if #private.invitedBreedInfoList <= 0 then CTL.HomeMain.RemoveMainNotice(CTL.HomeMain.NoticeType.PetBreedApply) end end function Pet_Model.RemoveInviteBreedInfo(info) private.RemoveInviteBreedInfoByAcid(info.playerAcid) end function Pet_Model.RemoveAllInviteBreedInfo() table.clearArray(private.invitedBreedInfoList) table.clear(private.invitedPlayerInfoDict) EventSystem.Dispatch(EventID.UI_Pet_UpdateInviteInfoList) CTL.HomeMain.RemoveMainNotice(CTL.HomeMain.NoticeType.PetBreedApply) end function Pet_Model.GetInviteBreedInfoList() return private.invitedBreedInfoList end function Pet_Model.GetInvitePlayerGuildName(acid) return private.invitedPlayerInfoDict[acid] end function Pet_Model.GetRoomBreedInfo() return private.roomBreedInfo end function Pet_Model.SetSingleBreed(value) private.isSingleBreed = value end function Pet_Model.GetIsSingleBreed() return private.isSingleBreed end -- 神宠激活 function Pet_Model.GodPetActivateReq(petType) local msg = NetManager.GetPB("pet_opt_pb").GodPetActivateReq() msg.petType = petType NetManager.SendMessage(MessageEnums.MessageGodPetActivate, msg) end function private.GodPetActivateResp(msg) if msg.Resp.Code == 0 then CTL.Pet.PopSuccessPanel(CTL.Pet.PetPopPanelType.Active, msg.petUniqId) end end -- 神宠进阶 function Pet_Model.GodPetBreakReq(petUniqueID) local msg = NetManager.GetPB("pet_opt_pb").GodPetBreakReq() msg.petUniqId = petUniqueID NetManager.SendMessage(MessageEnums.MessageGodPetBreak, msg) end function private.GodPetBreakResp(msg) if msg.Resp.Code == 0 then CTL.Tips.AddTipsMsg(Const_IDS["IDS_HeroAdvance_Advanced"]) EventSystem.Dispatch(EventID.UI_Pet_GodPetBreak, msg.talentType) local petData = MDL.Pet.GetActiveInfo(msg.petUniqId) local petInfo, petCfg = petData.Info, petData.Config if petInfo.bigBreak > 0 and petInfo.smallBreak == 0 then local lastCfg = DataSheetManager.GodPetStar:GetDataByPetID_PetStar(petCfg.ID, petInfo.bigBreak - 1) local nowCfg = DataSheetManager.GodPetStar:GetDataByPetID_PetStar(petCfg.ID, petInfo.bigBreak) if nowCfg.Stage > lastCfg.Stage then CTL.Pet.PopSuccessPanel(CTL.Pet.PetPopPanelType.Advanced, msg.petUniqId) end end end end -- 宠物改名 function Pet_Model.PetChangeNameReq(petUniqID, newName) local msg = NetManager.GetPB("pet_opt_pb").PetChangeNameReq() msg.petUniqId = petUniqID msg.newName = newName NetManager.SendMessage(MessageEnums.MessagePetChangeName, msg) end function private.OnPetNameChangedResp(msgResp) if msgResp.Resp.Code == 0 then CTL.Tips.AddTipsMsg(Const_IDS["IDS_PlayName_ReNameSuccess"]) end end -- 宠物吃经验丹/升一级/升十级 function Pet_Model.PetAddExpReq(levelUpOptType, uniqueID, itemID) local msg = NetManager.GetPB("pet_opt_pb").PetAddExpReq() msg.addExpType = levelUpOptType msg.uniqId = uniqueID if itemID then msg.itemId = itemID end NetManager.SendMessage(MessageEnums.MessagePetAddExp, msg) end function private.OnPetAddExp(msgResp) if msgResp.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_Pet_PetLevelUp) end end -- 背包扩容 function Pet_Model.PetListExpandReq() local msg = NetManager.GetPB("pet_opt_pb").PetListExpandReq() NetManager.SendMessage(MessageEnums.MessagePetListExpand, msg) end -- 更换主城跟随宠物 function Pet_Model.ChangeFollowPetReq(petUniqId) private.tempFollowPetUniqId = petUniqId local msg = NetManager.GetPB("pet_opt_pb").ChangeFollowPetReq() msg.petUniqId = petUniqId NetManager.SendMessage(MessageEnums.MessageChangeFollowPet, msg) end function private.OnChangeFollowPetResp(msgResp) if msgResp.Resp.Code == 0 then CTL.Tips.AddTipsMsg(Const_IDS["IDS_Team_ChangeHint_7"]) Pet_Model.SetCurFollowPet(private.tempFollowPetUniqId) private.tempFollowPetUniqId = nil EventSystem.Dispatch(EventID.UI_Pet_ChangeFollowPet) end end function Pet_Model.SetCurFollowPet(petUniqId) private.curFollowPetUniqId = petUniqId end function Pet_Model.GetCurFollowPet() return private.curFollowPetUniqId end -- 宠物捕捉占位 function Pet_Model.StartCapturePetReq(catchOptType, npcUniqueID, petId, petVariation) if Pet_Model.GetCapturingInfo() ~= nil then return end local msg = NetManager.GetPB("pet_opt_pb").StartCapturePetReq() msg.captureType = catchOptType if catchOptType == Pet_Model.CatchOptType.Lock then msg.npcUniqId = npcUniqueID msg.petId = petId msg.petVariation = petVariation end NetManager.SendMessage(MessageEnums.MessageStartCapturePet, msg) end function private.StartCapturePetResp(msg) if msg.Resp.Code == 0 and msg.captureType == Pet_Model.CatchOptType.Lock then EventSystem.Dispatch(EventID.UI_Pet_PopCatchPanel) end end -- 宠物单次捕捉 function Pet_Model.CapturePetReq(isSuccess, petId, petVariation) if Pet_Model.GetCapturingInfo() ~= nil then return false end local msg = NetManager.GetPB("pet_opt_pb").CapturePetReq() msg.isSuccess = isSuccess msg.petId = petId msg.petVariation = petVariation NetManager.SendMessage(MessageEnums.MessageCapturePet, msg) return true end function private.CapturePetResp(msg) if msg.Resp.Code == 0 then if msg.captureRet then Pet_Model.SetCapturingInfo(msg.unSavePetInfo) EventSystem.Dispatch(EventID.Pet_CloseCatchUpView) CTL.Pet.PopSuccessPanel(CTL.Pet.PetPopPanelType.Catch, nil, msg.unSavePetInfo) else CTL.Tips.AddTipsMsg(Const_IDS.IDS_PetCatch2) EventSystem.Dispatch(EventID.UI_Pet_CatchReStart) end end end function private.OnCloseCatchPop(msg) if msg.Resp.Code == 0 then EventSystem.Dispatch(EventID.Pet_CloseCatchUpView) end end --- 宠物确认获取 function Pet_Model.ConfirmObtainPetReq() local msg = NetManager.GetPB("pet_opt_pb").ConfirmObtainPetReq() NetManager.SendMessage(MessageEnums.MessageConfirmObtainPet, msg) end -- 宠物放生 ---@param releaseType 1不在背包内放生 2背包内放生 function Pet_Model.ReleasePetReq(petUniqueID, releaseType, isRecast) local msg = NetManager.GetPB("pet_opt_pb").ReleasePetReq() msg.petUniqId = petUniqueID msg.petRecast = isRecast msg.ReleaseType = releaseType NetManager.SendMessage(MessageEnums.MessageReleasePet, msg) end function private.ReleasePetResp(msg) if msg.Resp.Code == 0 then private.RemovePetInBag(msg.petUniqId) CTL.Pet.CheckPetIfLineUp() EventSystem.Dispatch(EventID.UI_Pet_ClosePetPanel, Const_UI_Lua.UIEnum.UIPetActiveSuccess) end end function private.RemovePetInBag(petUniqId) if private.petInfoDic[petUniqId] then private.petInfoDic[petUniqId] = nil private.UpdateActivePetList() EventSystem.Dispatch(EventID.UI_Pet_UpdatePetInfo) end end -- 宠物槽位上阵 function Pet_Model.PetSlotLineUpReq(slotId, petUniqId) private.isLiningUpSlot = slotId local msg = NetManager.GetPB("pet_opt_pb").PetSlotLineUpReq() msg.slotId = slotId msg.petUniqId = petUniqId NetManager.SendMessage(MessageEnums.MessagePetSlotLineUp, msg) end function private.OnPetSlotLineUp(msgResp) if msgResp.Resp.Code == 0 then UIManager.CloseView(Const_UI_Lua.UIEnum.UIPetChangeView) end end -- 宠物三军布阵 function Pet_Model.PetFormationChangeReq(formationType, val1, val2) local msg = NetManager.GetPB("pet_opt_pb").PetFormationChangeReq() msg.formationType = formationType if formationType == Pet_Model.FormationOptType.Main then msg.firstSlot1 = val1 msg.firstSlot2 = val2 else msg.secondSlotId = val1 msg.secondUniqId = val2 end NetManager.SendMessage(MessageEnums.MessagePetFormationChange, msg) end function private.OnPetFormationChangeResp(msgResp) if msgResp.Resp.Code == 0 then UIManager.CloseView(Const_UI_Lua.UIEnum.UIPetChangeView) end end -- 宠物助阵位解锁 1、2、3 function Pet_Model.PetAssistanceUnlockReq(assistanceSlotID) private.isUnlockingSlotId = assistanceSlotID local msg = NetManager.GetPB("pet_opt_pb").PetAssistanceUnlockReq() msg.assistanceId = assistanceSlotID NetManager.SendMessage(MessageEnums.MessagePetAssistanceUnlock, msg) end function private.OnPetAssistanceUnlock(msgResp) if msgResp.Resp.Code == 0 then UIManager.CloseView(Const_UI_Lua.UIEnum.UIPetUnlockAssistancePanel) EventSystem.Dispatch(EventID.UI_Pet_UnlockAssistSlot, private.isUnlockingSlotId) private.isUnlockingSlotId = nil end end -- 宠物重生 function Pet_Model.PetRecastReq(petUniqueID) local msg = NetManager.GetPB("pet_opt_pb").PetRecastReq() msg.recastId = petUniqueID NetManager.SendMessage(MessageEnums.MessagePetRecast, msg) end -- 宠物洗练 function Pet_Model.PurifyPetReq(petUniqueID) private.isWashNormal = Pet_Model.CheckPetIsVariation(petUniqueID) local msg = NetManager.GetPB("pet_opt_pb").PurifyPetReq() msg.petUniqId = petUniqueID NetManager.SendMessage(MessageEnums.MessagePurifyPet, msg) end function private.OnPurifyPetResp(msgResp) if msgResp.Resp.Code == 0 then CTL.Tips.AddTipsMsg(Const_IDS["IDS_PetBorn_Congratulations"]) if private.isWashNormal == false and Pet_Model.CheckPetIsVariation(msgResp.petUniqId) then CTL.Pet.PopSuccessPanel(CTL.Pet.PetPopPanelType.Mutation, msgResp.petUniqId) end end end -- 宠物洗练保存 function Pet_Model.PurifyPetSaveReq(petUniqueID, isReplace) local msg = NetManager.GetPB("pet_opt_pb").PurifyPetSaveReq() msg.petUniqId = petUniqueID if isReplace == false then msg.saveType = 1 else msg.saveType = 2 end NetManager.SendMessage(MessageEnums.MessagePurifyPetSave, msg) end -- 宠物繁殖 function Pet_Model.StartBreedPetReq() local msg = NetManager.GetPB("pet_opt_pb").StartBreedPetReq() msg.useExtraItem = CTL.Pet.IsUseExtraBreedMat NetManager.SendMessage(MessageEnums.MessageStartBreedPet, msg) end function private.OnStartBreedPetResp(msgResp) if msgResp.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_Pet_ProcessBreedConfirmState, Pet_Model.BreedConfirmType.RequireConfirm) end end -- 宠物繁殖领取 function Pet_Model.BreedPetRewardReq() if Pet_Model.GetCapturingInfo() ~= nil then return end local msg = NetManager.GetPB("pet_opt_pb").BreedPetRewardReq() NetManager.SendMessage(MessageEnums.MessageBreedPetReward, msg) end function private.OnBreedPetRewardResp(msgResp) if msgResp.Resp.Code == 0 then CTL.HomeMain.RemoveMainNotice(CTL.HomeMain.NoticeType.PetBreedFinish) Pet_Model.SetCapturingInfo(msgResp.unSavePetInfo) CTL.Pet.PopSuccessPanel(CTL.Pet.PetPopPanelType.Reproduction, nil, msgResp.unSavePetInfo) end end -- 宠物繁殖放入宠物 function Pet_Model.ChooseBreedPetReq(petUniqueID) private.preChooseBreedPet = petUniqueID local msg = NetManager.GetPB("pet_opt_pb").ChooseBreedPetReq() msg.petUniqId = petUniqueID NetManager.SendMessage(MessageEnums.MessageChooseBreedPet, msg) end function private.OnChooseBreedPetResp(msgResp) if msgResp.Resp.Code == 0 then private.choosingBreedPet = private.preChooseBreedPet EventSystem.Dispatch(EventID.UI_Pet_ChooseBreedPet, private.preChooseBreedPet) else private.preChooseBreedPet = nil end end -- 宠物繁殖锁定 function Pet_Model.BreedPetLockReq(lockState) local msg = NetManager.GetPB("pet_opt_pb").BreedPetLockReq() private.lockState = lockState NetManager.SendMessage(MessageEnums.MessageBreedPetLock, msg) end function private.OnBreedPetLockResp(msgResp) if msgResp.Resp.Code == 0 then EventSystem.Dispatch(EventID.UI_Pet_LockBreedPet, private.lockState) end end -- 宠物繁殖 --1、邀请别人 2、单人繁殖 function Pet_Model.BreedPetInviteReq(targetACID, inviteType) local msg = NetManager.GetPB("pet_opt_pb").BreedPetInviteReq() msg.inviteType = inviteType msg.targetACID = targetACID or "" NetManager.SendMessage(MessageEnums.MessageBreedPetInvite, msg) end function private.BreedPetInviteResp(msg) if msg.Resp.Code == 0 then if msg.inviteType == 2 then private.isSingleBreed = true private.roomBreedInfo = nil UIManager.CloseView(Const_UI_Lua.UIEnum.UIPetInvitePopUp) EventSystem.Dispatch(EventID.UI_Pet_PushBreedInfo) else CTL.Tips.AddTipsMsg(Const_IDS["IDS_CountryRecruite_Invited"]) end end end -- 接受宠物繁殖邀请 function Pet_Model.BreedPetInviteHandleReq(sourceACID, sourcePetId, callbackContext) private.cachePushClose = false --战斗内不处理 if not BattleDataGetter.IsNoBattleLevel() then CTL.Tips.AddTipsMsg(Const_IDS["IDS_CountryNightBoss_UnableToGo"]) return end local msg = NetManager.GetPB("pet_opt_pb").BreedPetInviteHandleReq() msg.sourceACID = sourceACID msg.sourcePetId = sourcePetId private.cacheInviteHandleReqContext = callbackContext NetManager.SendMessage(MessageEnums.MessageBreedPetInviteHandle, msg) end function private.OnBreedPetInviteHandle(msgResp) if msgResp.Resp.Code == 0 then if private.cachePushClose == false then UIManager.CloseView(Const_UI_Lua.UIEnum.UIPetInvitedMultiPanel) private.roomBreedInfo = msgResp.breedInfo private.RemoveInviteBreedInfoByAcid(private.roomBreedInfo.playerAcid) CTL.Pet.EnterPetBreedRoom() end else if msgResp.Resp.Code == InfoCode_Pet_Born22 then if private.cacheInviteHandleReqContext then UIManager.OpenView(Const_UI_Lua.UIEnum.UIPetInvite, private.cacheInviteHandleReqContext) end end end private.cacheInviteHandleReqContext = nil end -- 宠物繁殖踢被邀请人 function Pet_Model.BreedPetKickOutReq() local msg = NetManager.GetPB("pet_opt_pb").BreedPetKickOutReq() NetManager.SendMessage(MessageEnums.MessageBreedPetKickOut, msg) end function private.OnBreedPetKickOutResp(msgResp) if msgResp.Resp.Code == 0 then private.isSingleBreed = false private.roomBreedInfo = nil EventSystem.Dispatch(EventID.UI_Pet_PushBreedInfo) end end -- 宠物护符突破 function Pet_Model.PetTalismanBreakReq(petSlotId) private.isBreakingSlotId = petSlotId local msg = NetManager.GetPB("pet_opt_pb").PetTalismanBreakReq() msg.petSlotId = petSlotId NetManager.SendMessage(MessageEnums.MessagePetTalismanBreak, msg) end function private.OnPetTalismanBreakResp(msgResp) if msgResp.Resp.Code == 0 then CTL.Tips.AddTipsMsg(Const_IDS["IDS_MagicWeapon_SmallStar"]) --进阶成功表现 local slotInfo = MDL.Pet.GetSlotInfoBySlotId(private.isBreakingSlotId) local runeCfg = DataSheetManager.PetRuneStar:GetDataByID_PointId(slotInfo.talismanBigBreak, slotInfo.talismanSmallBreak) if runeCfg.PointType == 2 then EventSystem.Dispatch(EventID.UI_Pet_RuneBreakSuccess) --延迟个1s打开,需要看到特效 TimerUtil.Interval(function() UIManager.OpenView(Const_UI_Lua.UIEnum.UIPetRuneBreakSuccess, { lastLevel = slotInfo.talismanBigBreak - 1, newLevel = slotInfo.talismanBigBreak, cfg = runeCfg }) end, 1, 1) end end end -- 宠物护符学习 function Pet_Model.PetTalismanLearnReq(talismanUniqID, slotId, lockList) local msg = NetManager.GetPB("pet_opt_pb").PetTalismanLearnReq() msg.talismanUniqId = talismanUniqID msg.slotId = slotId if lockList then for i, v in ipairs(lockList) do if v > 0 then msg.lockList:append(i) end end end NetManager.SendMessage(MessageEnums.MessagePetTalismanLearn, msg) end function private.OnPetTalismanLearnResp(msgResp) if msgResp.Resp.Code == 0 then local newCfg = DataSheetManager.PetRuneSkill:GetDataByPetRuneID(msgResp.newSkillId) local oldCfg = DataSheetManager.PetRuneSkill:GetDataByPetRuneID(msgResp.oldSkillId) local newLevel = UIUtils.GetLocalizedTxt(CTL.Pet.RuneSkillLevelIDS[newCfg.RuneLevel]) local oldLevel = UIUtils.GetLocalizedTxt(CTL.Pet.RuneSkillLevelIDS[oldCfg.RuneLevel]) CTL.Tips.AddTipsMsg(string.FormatByIdsId(Const_IDS.IDS_Pet_SkillOverOn, newLevel, UIUtils.GetLocalizedTxt(Const_IDS[newCfg.RuneName]), oldLevel, UIUtils.GetLocalizedTxt(Const_IDS[oldCfg.RuneName]))) EventSystem.Dispatch(EventID.UI_Pet_RuneStudySuccess, msgResp.newSkillId) end end -- 宠物护符融合 function Pet_Model.PetTalismanMergeReq(dict) private.isMergingRune = true local msg = NetManager.GetPB("pet_opt_pb").PetTalismanMergeReq() for id, _ in pairs(dict) do msg.talismanUniqId:append(id) end NetManager.SendMessage(MessageEnums.MessagePetTalismanMerge, msg) end function private.OnPetTalismanMergeResp(msgResp) private.isMergingRune = false EventSystem.Dispatch(EventID.UI_Pet_DiscardSelect) end --打开/关闭宠物繁殖界面通知服务器 function Pet_Model.OpenPetBreedViewReq(isOpen, uniqId, isCallbackInvitation, playerAcid, playerName) local msg = NetManager.GetPB("pet_opt_pb").OpenPetBreedViewReq() msg.isOpen = isOpen msg.uniqId = uniqId or "" msg.isCallBack = isCallbackInvitation or false msg.callBackACID = playerAcid or "" private.cacheOpenPetBreedViewReqContext = {} private.cacheOpenPetBreedViewReqContext.isCallbackInvitation = isCallbackInvitation private.cacheOpenPetBreedViewReqContext.petUniqId = uniqId private.cacheOpenPetBreedViewReqContext.playerName = playerName NetManager.SendMessage(MessageEnums.MessageOpenPetBreedView, msg) end function private.OnOpenPetBreedView(msgResp) if msgResp.Resp.Code == 0 then if private.cacheOpenPetBreedViewReqContext and private.cacheOpenPetBreedViewReqContext.isCallbackInvitation then CTL.Pet.SetIsBreedRoomInValid(false) UIManager.OpenView(Const_UI_Lua.UIEnum.UIPetReproduction, private.cacheOpenPetBreedViewReqContext) end else EventSystem.Dispatch(EventID.UI_Pet_ClosePetPanel, Const_UI_Lua.UIEnum.UIPetReproduction) end private.cacheOpenPetBreedViewReqContext = nil end function Pet_Model.UsePetEggReq(cfgId) if MDL.Unlock.IsUnlock(MDL.Unlock.FunctionType.Pet) == false then CTL.Tips.AddTipsMsg(Const_IDS.IDS_ERRORCODE_3013_InfoCode_FunctionLock) return end local msg = NetManager.GetPB("pet_opt_pb").UsePetEggReq() msg.cfgId = cfgId NetManager.SendMessage(MessageEnums.MessageUsePetEgg, msg) end function private.OnUsePetEggResp(msgResp) if msgResp.Resp.Code == 0 then Pet_Model.SetCapturingInfo(msgResp.unSavePetInfo) CTL.Pet.PopSuccessPanel(CTL.Pet.PetPopPanelType.EggActive, nil, msgResp.unSavePetInfo) end end --1繁殖奖励 2捕捉奖励 function Pet_Model.RewardPetWeekBreedReq(taskType) local msg = NetManager.GetPB("pet_opt_pb").RewardPetWeekBreedReq() msg.taskType = taskType NetManager.SendMessage(MessageEnums.MessageRewardPetWeekBreed, msg) end function Pet_Model.ActivateRelationRuneSkillReq(itemId) local msg = NetManager.GetPB("pet_opt_pb").ActivateRelationRuneSkillReq() msg.runeSkillId = itemId NetManager.SendMessage(MessageEnums.MessageActivateRelationRuneSkill, msg) end function private.OnActivateRelationRuneSkill(msgResp) if msgResp.Resp.Code == 0 then --暂时不处理 end end function Pet_Model.RewardGuidedPetReq(petId) local msg = NetManager.GetPB("pet_opt_pb").RewardGuidedPetReq() msg.petId = petId NetManager.SendMessage(MessageEnums.MessageRewardGuidedPet, msg) end function private.OnRewardGuidedPetResp(msgResp) if msgResp.Resp.Code == 0 then CTL.Pet.PopSuccessPanel(CTL.Pet.PetPopPanelType.Active, msgResp.uniqId) end end function Pet_Model.CourtshipRespondReq(acid, petId, pedigree) local msg = NetManager.GetPB("pet_opt_pb").CourtshipRespondReq() msg.acid = acid msg.petId = petId msg.petLineage = pedigree NetManager.SendMessage(MessageEnums.MessageCourtshipRespond, msg) end function private.OnCourtshipRespondResp(msgResp) if msgResp.Resp.Code == 0 then --点击求偶成功,打开私聊界面,并发送文本 CTL.Friend.PrivateTalkToAcid(msgResp.acid) local petConfig = DataSheetManager.PetData:GetDataByID_Stage(msgResp.petId, Pet_Model.PetState.Basic) local msg = string.FormatByIdsId(Const_IDS.IDS_Pet_LookForMateChat, msgResp.petLineage, UIUtils.GetLocalizedTxt(Const_IDS[petConfig.PetName])) CTL.ChannelChat.SendTextMsg(msg, msgResp.acid, false, 0) end end function Pet_Model.PetShareReq(uniqId) local msg = NetManager.GetPB("pet_opt_pb").PetShareReq() msg.uniqId = uniqId NetManager.SendMessage(MessageEnums.MessagePetShare, msg) end function Pet_Model.ViewPetShareReq(acid, uniqId) local msg = NetManager.GetPB("pet_opt_pb").ViewPetShareReq() msg.acid = acid msg.uniqId = uniqId NetManager.SendMessage(MessageEnums.MessageViewPetShare, msg) end function private.OnViewPetShareResp(msgResp) if msgResp.Resp.Code == 0 then UTL.Attr.ProcessProtoAttrTable(msgResp.sharePetInfo.attr.attrs) UIManager.OpenAndPushAll(Const_UI_Lua.UIEnum.UIPetShare, { sharePetInfo = msgResp.sharePetInfo }, Const_UI_Lua.UIEnum.UIPetFormation) end end --获取槽位总战力 function Pet_Model.GetSlotGs(index) local slotInfo = Pet_Model.GetSlotInfoBySlotId(index) if slotInfo then local petData = Pet_Model.GetActiveInfo(slotInfo.petUniqId) if petData then local relationSkillId = CTL.Pet.GetRelationSkill(slotInfo.petUniqId) if relationSkillId > 0 then local cfg = DataSheetManager.PetRelationSkill:GetDataByRelationSkillID(relationSkillId) local runeAttrGs = 0 for i = 1, #cfg.Attr, 2 do runeAttrGs = runeAttrGs + UTL.Attr.CalculateSingleFight(cfg.Attr[i], cfg.Attr[i + 1]) end return petData.Info.baseGS + slotInfo.slotGS + cfg.RuneGS + math.floor(runeAttrGs + 0.5) else return petData.Info.baseGS + slotInfo.slotGS end end end return 0 end function Pet_Model.CheckPetGeneration(petGeneration, isGod) for i, v in pairs(private.petInfoDic) do if v.Info.petGeneration == petGeneration and isGod == (v.Info.petQuality == MDL.Pet.PetQuality.God) then return true end end return false end return Pet_Model