------------------------------------------------ --作者: HJ --日期: 2021-02-24 --文件: MonsterSoulSystem.lua --模块: MonsterSoulSystem --描述: 神兽系统,包括神兽背包,神兽装备处理,助战数据 ------------------------------------------------ local L_ItemBase = CS.Thousandto.Code.Logic.ItemBase local L_RoleBaseAttribute = CS.Thousandto.Code.Global.RoleBaseAttribute local L_MonsterData = require("Logic.MonsterSoul.MonsterSoulMonsterData") local MonsterSoulSystem = { --背包中的装备 EquipInBagList = List:New(), --强化材料 MaterialList = List:New(), --神兽列表 MonsterDataList = List:New(), --神兽对应穿戴的装备 MonsterRelativeEquipDict = Dictionary:New(), --神兽列表中的红点 HeadPanelRedPointDict = Dictionary:New(), --是否检测红点 IsCheckRedPoint = false, --背包按钮上的红点 HasBagRedPoint = false, --最大助战位置数 MaxSlotCount = 0, --默认助战位个数 DefaultSlotCount = 0, --助战位置开启条件 SlotConditionList = nil, } --初始化 function MonsterSoulSystem:Initialize() GameCenter.RegFixEventHandle(LogicEventDefine.EVENT_ITEM_CHANGE_UPDATE, self.OnItemChange, self) GameCenter.RegFixEventHandle(LogicEventDefine.EID_EVENT_PLAYER_LEVEL_CHANGED, self.OnPlayerLvChange, self) end --卸载 function MonsterSoulSystem:UnInitialize() GameCenter.UnRegFixEventHandle(LogicEventDefine.EVENT_ITEM_CHANGE_UPDATE, self.OnItemChange, self) GameCenter.UnRegFixEventHandle(LogicEventDefine.EID_EVENT_PLAYER_LEVEL_CHANGED, self.OnPlayerLvChange, self) end --物品变更 function MonsterSoulSystem:OnItemChange(object, sender) if self.CurAddSlotNeedItem and object == self.CurAddSlotNeedItem then self.IsCheckRedPoint = true end end function MonsterSoulSystem:OnPlayerLvChange(obj, sendr) self.IsCheckRedPoint = true end function MonsterSoulSystem:GetMaxSlotCount() if self.MaxSlotCount == 0 then self.MaxSlotCount = self:GetDefaultSlotCount() end return self.MaxSlotCount end function MonsterSoulSystem:GetDefaultSlotCount() if self.DefaultSlotCount == 0 then local cfg = DataConfig.DataGlobal[GlobalName.BossOld2_PossessionNum] if cfg then self.DefaultSlotCount = tonumber(cfg.Params) end end return self.DefaultSlotCount end function MonsterSoulSystem:GetSlotConditionList() if self.SlotConditionList == nil then self.SlotConditionList = List:New() local cfg = DataConfig.DataGlobal[GlobalName.BossOld2_PossessionOtherItem] if cfg then local strArray = Utils.SplitStr(cfg.Params, ';') for i = 1, #strArray do local conditionArray = Utils.SplitNumber(strArray[i], '_') local condition = {}; condition.Level = conditionArray[1] condition.ItemID = conditionArray[2] condition.ItemCount = conditionArray[3] self.SlotConditionList:Add(condition) end end end return self.SlotConditionList end function MonsterSoulSystem:Update(dt) if self.IsCheckRedPoint then self:CheckRedPoint(); self.IsCheckRedPoint = false; end end --助战中兽魂个数 function MonsterSoulSystem:GetFightingSoulCount() local fightingCount = 0; for i = 1, #self.MonsterDataList do if self.MonsterDataList[i].Fighting then fightingCount = fightingCount + 1; end end return fightingCount; end function MonsterSoulSystem:CheckRedPoint() local hasRedPoint = self:CheckRedPointCanEquip(); if not hasRedPoint then hasRedPoint = self:HasSoulCanAssistFight(); end if not hasRedPoint then hasRedPoint = self:HasAddSlotRed(); end GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.MonsterEquipSynth, self:HasSynthRedPoint()); GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.MonsterAF, hasRedPoint); GameCenter.MainFunctionSystem:SetAlertFlag(FunctionStartIdCode.MonsterEquipStrength, self:HasStrengthRedPoint()); --通知各界面红点处理 GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_MONSTERSOUL_CHECK_REDPOINT); end --是否有增加助战糟位红点 function MonsterSoulSystem:HasAddSlotRed() local _hasAddSlotCount = self:GetMaxSlotCount() - self:GetDefaultSlotCount() local _list = self:GetSlotConditionList() local _count = #_list local _nextCondition = nil if _hasAddSlotCount < _count then _nextCondition = _list[_hasAddSlotCount + 1] else return false end local _red = false local _level = GameCenter.GameSceneSystem:GetLocalPlayerLevel() local _existItemCount = GameCenter.ItemContianerSystem:GetItemCountFromCfgId(_nextCondition.ItemID) if _existItemCount >= _nextCondition.ItemCount and _level >= _nextCondition.Level then _red = true end self.CurAddSlotNeedItem = _nextCondition.ItemID return _red end --对应兽魂的红点(有装备可穿、替换) function MonsterSoulSystem:CheckRedPointCanEquip() self.HeadPanelRedPointDict:Clear(); self.HasBagRedPoint = false; local fightingNum = self:GetFightingSoulCount(); local counter = 0; --可替换装备,必须是穿齐装的兽魂才能比较 for i = #self.MonsterDataList, 1, -1 do if counter < self:GetMaxSlotCount() and self:HasFullEquip(self.MonsterDataList[i]) then local hasBetterEquip = self:HasBetterEquip(self.MonsterDataList[i]); if not self.HeadPanelRedPointDict:ContainsKey(self.MonsterDataList[i].CfgId) then if hasBetterEquip then self.HeadPanelRedPointDict:Add(self.MonsterDataList[i].CfgId, hasBetterEquip); counter = counter + 1 self.HasBagRedPoint = true; end end end end if fightingNum < self:GetMaxSlotCount() then --可出战 for i = #self.MonsterDataList, 1, -1 do if counter < self:GetMaxSlotCount() then local canAssist = self:CanAssistFight(self.MonsterDataList[i]) if not self.HeadPanelRedPointDict:ContainsKey(self.MonsterDataList[i].CfgId) then if canAssist then self.HeadPanelRedPointDict:Add(self.MonsterDataList[i].CfgId, canAssist); counter = counter + 1; end end end end --可穿齐装备 for i = #self.MonsterDataList, 1, -1 do if counter < self:GetMaxSlotCount() and not self:HasFullEquip(self.MonsterDataList[i]) then if self:CanFullEquip(self.MonsterDataList[i]) then if not self.HeadPanelRedPointDict:ContainsKey(self.MonsterDataList[i].CfgId) then self.HeadPanelRedPointDict:Add(self.MonsterDataList[i].CfgId, true); counter = counter + 1; end end end end end return counter > 0; end --是否有神兽可助战 function MonsterSoulSystem:HasSoulCanAssistFight() for i = 1, #self.MonsterDataList do if self:CanAssistFight(self.MonsterDataList[i]) then return true; end end return false; end function MonsterSoulSystem:CanFullEquip(data) if self:HasFullEquip(data) then return false; end local canEquipArray = data:GetEquipedLoation() for i = 1, #self.EquipInBagList do local location = self.EquipInBagList[i].Part; local hasLocated = data:IsLocated(self.EquipInBagList[i].Part) if (hasLocated) then canEquipArray[location] = true; else local equipLimit = data.PartQualityLimit[location]; local starLimit = data.PartStarLimit[location]; if self.EquipInBagList[i].Quality >= equipLimit and self.EquipInBagList[i].StarNum >= starLimit then canEquipArray[location] = true; end end end if #canEquipArray < MonsterSoulEquipType.Count then return false end for i = 1, #canEquipArray do if not canEquipArray[i] then return false end end return true; end --该神兽能否助战 function MonsterSoulSystem:CanAssistFight(data) local fightingCount = self:GetFightingSoulCount(); if (fightingCount >= self:GetMaxSlotCount()) then return false; end return data.Fighting == false and self:HasFullEquip(data) end --改神兽装备穿戴齐全 function MonsterSoulSystem:HasFullEquip(data) local list = data:GetEquipList() return list and #list == MonsterSoulEquipType.Count; end --背包中有更好的装备 function MonsterSoulSystem:HasBetterEquip(data) --首先要穿戴齐全才判断有更好装备并出战 if not self:HasFullEquip(data) and not data.Fighting then return false; end for i = 1, #self.EquipInBagList do local compare = self:CompareFightPower(self.EquipInBagList[i], data); if (compare > 0) then return true; end end return false; end --是否有强化的红点 function MonsterSoulSystem:HasStrengthRedPoint() if self:GetFightingSoulCount() < self:GetMaxSlotCount() then return false; end local _red = false for i = 1, #self.EquipInBagList do if self.EquipInBagList[i].Quality <= 6 then _red = true break end end return _red or #self.MaterialList > 0 end --是否有合成红点 function MonsterSoulSystem:HasSynthRedPoint() local dic = Dictionary:New() for i = 1, #self.EquipInBagList do local equip = self.EquipInBagList[i]; if equip.Config.IfBan == 0 then local key = equip.Quality * 10 + equip.StarNum; if (dic:ContainsKey(key)) then dic[key]:Add(equip); else local list = List:New() list:Add(equip); dic:Add(key, list); end if (#dic[key] >= 3) then return true; end end end return false; end --背包界面的物品筛选 function MonsterSoulSystem:GetItemsBySort(quality, starNum) local sorted = List:New() for i = 1, #self.EquipInBagList do if ((quality == -1 or self.EquipInBagList[i].Quality == quality) and (starNum == -1 or self.EquipInBagList[i].StarNum == starNum)) then sorted:Add(self.EquipInBagList[i]); end end for i = 1, #self.MaterialList do if quality == -1 or self.MaterialList[i].Quality == quality then sorted:Add(self.MaterialList[i]); end end return sorted; end --获取装备上的某个部位的装备 function MonsterSoulSystem:FindEquipByPart(soul, part) if soul then local equiplist = soul:GetEquipList() if equiplist then for i = 1, #equiplist do if (equiplist[i].Part == part) then return equiplist[i]; end end end end return nil; end --强化界面的物品筛选 function MonsterSoulSystem:GetStrenthItemBySort(quality) local sortedList = List:New() for i = 1, #self.MaterialList do if self.MaterialList[i].Quality <= quality or quality == -1 then sortedList:Add(self.MaterialList[i]); end end sortedList:Sort(function(a, b) return a.Quality< b.Quality end); local sortedEquipList = List:New() for i = 1, #self.EquipInBagList do if self.EquipInBagList[i].Config.Quality <= quality or quality == -1 then sortedEquipList:Add(self.EquipInBagList[i]); end end sortedEquipList:Sort(function(a, b) if a.Quality == b.Quality then if a.StarNum == b.StarNum then if a.Part == b.Part then return a.Score > b.Score else return a.Part < b.Part end else return a.StarNum > b.StarNum end else return a.Quality > b.Quality end end); sortedList:AddRange(sortedEquipList); return sortedList; end --获取所有助战兽魂的所有装备 function MonsterSoulSystem:GetEquipListFromFightingMonster() local retList = List:New() for i = 1, #self.MonsterDataList do if self.MonsterDataList[i].Fighting then if self.MonsterDataList[i]:GetEquipList() then retList:AddRange(self.MonsterDataList[i]:GetEquipList()); end end end retList:Sort(function(a, b) if a.MonsterId == b.MonsterId then return a.Part < b.Part else return a.MonsterId > b.MonsterId end end); return retList; end --穿装备 function MonsterSoulSystem:WearEquip(soulId, data) if self.MonsterRelativeEquipDict:ContainsKey(soulId) then self.MonsterRelativeEquipDict[soulId]:Add(data); else local list = List:New() list:Add(data); self.MonsterRelativeEquipDict:Add(soulId, list); end return self:GetMonsterSoul(soulId); end --脱装备 function MonsterSoulSystem:UndressEquip(soulId, data) if self.MonsterRelativeEquipDict:ContainsKey(soulId) then local list = self.MonsterRelativeEquipDict[soulId]; for i = 1, #list do if (list[i].DBID == data.DBID) then list.RemoveAt(i); break; end end end return self:GetMonsterSoul(soulId); end function MonsterSoulSystem:GetMonsterSoul(soulId) for i = 1, #self.MonsterDataList do if (self.MonsterDataList[i].CfgId == soulId) then return self.MonsterDataList[i]; end end return nil; end function MonsterSoulSystem:GetSoulEquipData(configId) for i = 1, #self.EquipInBagList do if self.EquipInBagList[i].DBID == configId then return self.EquipInBagList[i]; end end for i = 1, #self.MaterialList do if self.MaterialList[i].DBID == configId then return self.MaterialList[i]; end end return nil; end function MonsterSoulSystem:CompareFightPower(equip, soul) --设置战力提升、下降的标示 local showPowerTag = 0; if soul then --满足装备条件才比较,首先就是品质限制及星级限制 if (soul.PartQualityLimit[equip.Part] <= equip.Quality and soul.PartStarLimit[equip.Part] <= equip.StarNum) then --默认是提升战力 showPowerTag = 1; local equiplist = soul:GetEquipList() if equiplist then for i = 1, #equiplist do if (equiplist[i].Part == equip.Part) then if equiplist[i].Quality > equip.Quality then showPowerTag = -1 elseif equiplist[i].Quality == equip.Quality then if equiplist[i].StarNum > equip.StarNum then showPowerTag = -1 elseif equiplist[i].StarNum == equip.StarNum then local equipedFightScore = equiplist[i].Score; local inbagFightScore = equip.Score; --背包里面的装备更差 if (equipedFightScore > inbagFightScore) then showPowerTag = -1; elseif (equipedFightScore == inbagFightScore) then showPowerTag = 0; end end end break; end end end end end return showPowerTag; end --新增物品需要排序插入 function MonsterSoulSystem:AddNewEquip(data) self.EquipInBagList:Add(data); self.EquipInBagList:Sort(function(a, b) if a.Quality == b.Quality then if a.StarNum == b.StarNum then if a.Part == b.Part then return a.Score > b.Score else return a.Part < b.Part end else return a.StarNum > b.StarNum end else return a.Quality > b.Quality end end) end function MonsterSoulSystem:CreateEquipDataWithSoulid(msg, soulID) if not soulID then soulID = 0 end local data = LuaItemBase.CreateItemBase(msg.itemModelId); data.CfgID = msg.itemModelId; data.DBID = msg.itemId; data.Level = msg.level; data.Exp = msg.curExp; data.MonsterId = soulID; return data; end function MonsterSoulSystem:CreateEquipData(msg) local data = LuaItemBase.CreateItemBase(msg.itemModelId); data.CfgID = msg.itemModelId; data.DBID = msg.itemId; data.Level = 0; data.Exp = 0; data.MonsterId = 0; data.IsMaterial = true; data.Count = msg.num; if (data.ItemInfo) then local arr = Utils.SplitNumber(data.ItemInfo.EffectNum, '_') if (#arr >= 2) then data.Exp = arr[2] end end return data; end function MonsterSoulSystem:CreateEquipDataWithCfgid(cfgID) local data = LuaItemBase.CreateItemBase(cfgID); data.CfgID = cfgID; data.DBID = 0; data.Level = 0; data.Exp = 0; data.MonsterId = 0; data.IsMaterial = true; if (data.ItemInfo) then local arr = Utils.SplitNumber(data.ItemInfo.EffectNum, '_') if (#arr >= 2) then data.Exp = arr[2] end end return data; end function MonsterSoulSystem:CreateMonsterSoulData(msg) local data = L_MonsterData:New(msg.soulId) data.Fighting = msg.fight; data.DBID = msg.soulId; if (msg.equips) then for i = 1, #msg.equips do local equip = self:CreateEquipDataWithSoulid(msg.equips[i], msg.soulId); --其他的关联到对应的兽魂 if self.MonsterRelativeEquipDict:ContainsKey(equip.MonsterId) then self.MonsterRelativeEquipDict[equip.MonsterId]:Add(equip); else local dataList = List:New() dataList:Add(equip); self.MonsterRelativeEquipDict:Add(equip.MonsterId, dataList); end end end return data; end function MonsterSoulSystem:GetMonsterDataFromId(monsterSoulId) for i = 1, #self.MonsterDataList do if self.MonsterDataList[i].CfgId == monsterSoulId then return self.MonsterDataList[i] end end return nil; end --查找可用于合成的装备,从背包中查找 function MonsterSoulSystem:GetListCanSyn(quality, starNum, oldList) local sorted = List:New() for i = 1, #self.EquipInBagList do if ((self.EquipInBagList[i].Quality == quality) and (self.EquipInBagList[i].StarNum == starNum) and not oldList:Contains(self.EquipInBagList[i].DBID)) then sorted:Add(self.EquipInBagList[i]); end end return sorted; end function MonsterSoulSystem:GetQuaStr(quality) if quality == 1 then return DataConfig.DataMessageString.Get("C_QUALITY_1") elseif quality == 2 then return DataConfig.DataMessageString.Get("C_QUALITY_2") elseif quality == 3 then return DataConfig.DataMessageString.Get("C_QUALITY_3") elseif quality == 4 then return DataConfig.DataMessageString.Get("C_QUALITY_4") elseif quality == 5 then return DataConfig.DataMessageString.Get("C_QUALITY_5") elseif quality == 6 then return DataConfig.DataMessageString.Get("C_QUALITY_6") elseif quality == 7 then return DataConfig.DataMessageString.Get("C_QUALITY_7") elseif quality == 8 then return DataConfig.DataMessageString.Get("C_QUALITY_8") elseif quality == 9 then return DataConfig.DataMessageString.Get("C_COLOR_DARKGOLD") elseif quality == 10 then return DataConfig.DataMessageString.Get("C_COLOR_HUANCAI") end end --穿戴装备 function MonsterSoulSystem:ReqWearEquip(data, monster) if not monster then return end if (monster.PartStarLimit[data.Part] > data.StarNum) then Utils.ShowPromptByEnum("C_MONSTEREQUIP_EQUIPPART", monster.PartStarLimit[data.Part]) return end if (monster.PartQualityLimit[data.Part] > data.Quality) then Utils.ShowPromptByEnum("Need_More_High_Soul_Beast_Equip", self.GetQuaStr(monster.PartQualityLimit[data.Part])) return end local lsit = List:New() lsit:Add(data.DBID) local req = ReqMsg.MSG_SoulBeast.ReqSoulBeastEquipWear:New(); req.equipIds = lsit req.soulBeastId = monster.CfgId; req:Send(); end --一键穿戴 function MonsterSoulSystem:AutoWearEquip(data) local req = ReqMsg.MSG_SoulBeast.ReqSoulBeastEquipWear:New(); req.soulBeastId = data.CfgId; local _betterEquip = List:New() for i = 1, #self.EquipInBagList do local compare = self:CompareFightPower(self.EquipInBagList[i], data); if (compare > 0) then _betterEquip:Add(self.EquipInBagList[i]); end end for i = MonsterSoulEquipType.Head, MonsterSoulEquipType.Count do local power = 0; local index = -1; for j = 1, #_betterEquip do if (_betterEquip[j].Score > power and _betterEquip[j].Part == i) then power = _betterEquip[j].Score; index = j; end end if (index >= 0) then req.equipIds:Add(_betterEquip[index].DBID); end end if (#req.equipIds > 0) then req:Send(); end return #_betterEquip > 0; end --卸下装备 function MonsterSoulSystem:ReqUndressEquip(data, monster) local req = ReqMsg.MSG_SoulBeast.ReqSoulBeastEquipDown:New(); if data then req.soulBeastId = data.MonsterId; req.equipIds:Add(data.DBID); end if monster then req.soulBeastId = monster.CfgId; for i = 1, #monster:GetEquipList() do req.equipIds:Add(monster:GetEquipList()[i].DBID); end end req:Send(); end --强化 function MonsterSoulSystem:ReqMonsterEquipLevelUp(targetDBID, costEquips, isDouble) local req = ReqMsg.MSG_SoulBeast.ReqSoulBeastEquipUp:New(); req.fixEquipId = targetDBID; req.needDouble = isDouble; req:Send(); end --请求出战、召回 function MonsterSoulSystem:ReqFight(soulId) local req = ReqMsg.MSG_SoulBeast.ReqSoulBeastFight:New(); req.soulId = soulId; req:Send(); end --请求扩充助战位 function MonsterSoulSystem:ReqNewSlot() local req = ReqMsg.MSG_SoulBeast.ReqAddGrid:New(); req.Send(); end --返回背包魂兽装备列表, 上线发送 function MonsterSoulSystem:GS2U_ResSoulBeastEquipList(result) self.EquipInBagList:Clear(); self.MaterialList:Clear(); self.MaxSlotCount = self:GetDefaultSlotCount(); if result.equips then for i = 1, #result.equips do local data = self:CreateEquipDataWithSoulid(result.equips[i], 0) if data then self.EquipInBagList:Add(data); end end end self.EquipInBagList:Sort(function(a, b) if a.Quality == b.Quality then if a.StarNum == b.StarNum then if a.Part == b.Part then return a.Score > b.Score else return a.Part < b.Part end else return a.StarNum > b.StarNum end else return a.Quality > b.Quality end end); if result.items then for i = 1, #result.items do local data = self:CreateEquipData(result.items[i]); self.MaterialList:Add(data); end end self.MaterialList:Sort(function(a, b) return a.Quality > b.Quality end); self.IsCheckRedPoint = true; end --返回魂兽基本信息,上线发送 function MonsterSoulSystem:GS2U_ResSoulBeastBaseInfo(result) self.MonsterRelativeEquipDict:Clear(); self.MonsterDataList:Clear(); if result.beasts then for i = 1, #result.beasts do local data = self:CreateMonsterSoulData(result.beasts[i]); self.MonsterDataList:Add(data); end end self.IsCheckRedPoint = true; end --魂兽信息变化通知 function MonsterSoulSystem:GS2U_ResSoulBeastChange( result) for i = 1, #self.MonsterDataList do if (self.MonsterDataList[i].CfgId == result.beast.soulId) then self.MonsterDataList[i].Fighting = result.beast.fight; if (self.MonsterRelativeEquipDict:ContainsKey(result.beast.soulId)) then self.MonsterRelativeEquipDict[result.beast.soulId]:Clear(); end if result.beast.equips then for j = 1, #result.beast.equips do local equip = self:CreateEquipDataWithSoulid(result.beast.equips[j], result.beast.soulId); --其他的关联到对应的兽魂 if (self.MonsterRelativeEquipDict:ContainsKey(equip.MonsterId)) then self.MonsterRelativeEquipDict[equip.MonsterId]:Add(equip); else local dataList = List:New() dataList:Add(equip); self.MonsterRelativeEquipDict:Add(equip.MonsterId, dataList); end end end GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_MONSTERSOUL_SELECT_SOUL, self.MonsterDataList[i]); end end GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_MONSTERSOUL_FIGHTING_STATUS_CHANGE); self.IsCheckRedPoint = true; end --请求魂兽装备升级的响应 function MonsterSoulSystem:GS2U_ResSoulBeastEquipUp(result) if (self.MonsterRelativeEquipDict:ContainsKey(result.soulId)) then local equipList = self.MonsterRelativeEquipDict[result.soulId]; if (equipList) then for i = 1, #equipList do if (equipList[i].DBID == result.equip.itemId) then equipList[i].Level = result.equip.level; equipList[i].Exp = result.equip.curExp; end end end --通知升级完成 GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_MONSTERSOUL_STRENGTHEN_FINISH); self.IsCheckRedPoint = true; end end --兽魂装备增加 function MonsterSoulSystem:GS2U_ResSoulBeastEquipAdd(result) if result.equips then for i = 1, #result.equips do local data = self:CreateEquipDataWithSoulid(result.equips[i], 0) --没有对应的兽魂,则是放背包 if (data.MonsterId == 0) then self:AddNewEquip(data); GameCenter.GetNewItemSystem:AddShowItem(result.reason, data, data.CfgID, 1) else --其他的关联到对应的兽魂 if (self.MonsterRelativeEquipDict:ContainsKey(data.MonsterId)) then self.MonsterRelativeEquipDict[data.MonsterId]:Add(data); else local dataList = List:New() dataList:Add(data); self.MonsterRelativeEquipDict:Add(data.MonsterId, dataList); end --展示在右下角物品获得滚动栏 GameCenter.PushFixEvent(UIEventDefine.UIMSGTIPS_SHOWINFO, L_ItemBase.CreateItemBase(data.CfgID)); end end end --通知装备增加 GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_MONSTERSOUL_EQUIP_ADD); self.IsCheckRedPoint = true; end --增加强化材料 function MonsterSoulSystem:GS2U_ResSoulBeastItemAdd(result) if result.items then for i = 1, #result.items do local data = self:CreateEquipData(result.items[i]); GameCenter.GetNewItemSystem:AddShowItem(result.reason, data, data.CfgID, data.Count) self.MaterialList:Add(data); end end --通知装备增加 GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_MONSTERSOUL_MATERIAL_ADD); self.IsCheckRedPoint = true; end function MonsterSoulSystem:GS2U_ResSoulBeastGridNum(result) self.MaxSlotCount = result.num; GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_MONSTERSOUL_ADD_SLOT); self.IsCheckRedPoint = true; end function MonsterSoulSystem:GS2U_ResDeleteSoulBeast(result) --装备升级后,需要删除一些背包中的东西 if result.deleteEquipIds then for i = 1, #result.deleteEquipIds do --从背包删除 for j = 1, #self.EquipInBagList do if (self.EquipInBagList[j].DBID == result.deleteEquipIds[i]) then self.EquipInBagList:RemoveAt(j) break; end end --从材料列表中删除 for j = 1, #self.MaterialList do if (self.MaterialList[j].DBID == result.deleteEquipIds[i]) then self.MaterialList:RemoveAt(j); break; end end end end --通知装备增加 GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_MONSTERSOUL_EQUIP_ADD); self.IsCheckRedPoint = true; end function MonsterSoulSystem:ResSoulBeastItemUpdate(result) if result.items then for i = 1, #result.items do --从材料列表中查找 for j = 1, #self.MaterialList do if (self.MaterialList[j].DBID == result.items[i].itemId) then local addCount = result.items[i].num - self.MaterialList[j].Count; self.MaterialList[j].Count = result.items[i].num; GameCenter.GetNewItemSystem:AddShowItem(result.reason, self.MaterialList[j], self.MaterialList[j].CfgID, addCount) break; end end end end end --部位装备名称 function MonsterSoulSystem:EquipTypeToStr(type) if type == MonsterSoulEquipType.Head then return DataConfig.DataMessageString.Get("C_EQUIP_NAME_HELMET") elseif type == MonsterSoulEquipType.Necklet then return DataConfig.DataMessageString.Get("C_MONSTERSOUL_XIANGQUAN") elseif type == MonsterSoulEquipType.Cloth then return DataConfig.DataMessageString.Get("C_MONSTERSOUL_KAIJIA") elseif type == MonsterSoulEquipType.Weapon then return DataConfig.DataMessageString.Get("C_MONSTERSOUL_LIZHUA") elseif type == MonsterSoulEquipType.Wing then return DataConfig.DataMessageString.Get("C_MONSTERSOUL_YUYI") end return ""; end function MonsterSoulSystem:CheckBetterThanDress(equip, monster) local ret = false; if(equip and monster and monster.PartStarLimit[equip.Part] <= equip.StarNum and monster.PartQualityLimit[equip.Part] <= equip.Quality) then local dressEquip = monster:GetEquipByPart(equip.Part); if dressEquip then if equip.Quality > dressEquip.Quality then ret = true else if equip.StarNum > dressEquip.StarNum then ret = true else ret = dressEquip.Score < equip.Score; end end else ret = true; end end return ret; end return MonsterSoulSystem