------------------------------------------------ --作者: HJ --日期: 2021-03-03 --文件: NewItemContianerSystem.lua --模块: NewItemContianerSystem --描述: 背包管理 ------------------------------------------------ local L_ContianerModel = require("Logic.Item.ItemContianerModel") local L_ItemBase = CS.Thousandto.Code.Logic.ItemBase local NewItemContianerSystem = { CacheList = List:New(), ItemContianerDic = Dictionary:New(), } --根据容器类型获取容器信息 function NewItemContianerSystem:GetBackpackModelByType(type) return self.ItemContianerDic[type]; end --设置容器 function NewItemContianerSystem:SetBackpackModelByType(type, model) if model and LuaContainerType.ITEM_LOCATION_COUNT > type then self.ItemContianerDic:Add(type, model); end end --根据UID以及容器类型 获取物品信息 function NewItemContianerSystem:GetItemByUID(type, uid) local retItem = nil; local bpModel = self:GetBackpackModelByType(type) if bpModel then retItem = bpModel:GetItemByUID(uid) end return retItem; end function NewItemContianerSystem:GetItemListNOGC(type) self.CacheList:Clear() local bpModel = self:GetBackpackModelByType(type) if bpModel then bpModel.ItemsOfIndex:Foreach(function(k, v) if v then self.CacheList:Add(v) end end) end return self.CacheList end --更新物品 function NewItemContianerSystem:UpdateItemFromContainer(type, item, isNew, resonCode, pushEvent) if not resonCode then resonCode = 0 end if pushEvent == nil then pushEvent = true end if item.cdTime and item.cdTime > 0 then item.cdTime = item.cdTime / 1000 end local retIndex = -1; local bpModel = self:GetBackpackModelByType(type); if bpModel and item then local itemBase = nil; itemBase = LuaItemBase.CreateItemBaseByMsg(item) if itemBase and itemBase.Type == ItemType.ImmortalEquip and type == LuaContainerType.ITEM_LOCATION_BACKEQUIP then itemBase.Index = itemBase.Part; end itemBase.IsNew = isNew; if (isNew and type == LuaContainerType.ITEM_LOCATION_BAG) then --引导检测 GameCenter.GuideSystem:Check(GuideTriggerType.GetItem, item.itemModelId); end if itemBase then itemBase.ContainerType = type; if (type == LuaContainerType.ITEM_LOCATION_PETEQUIP or type == LuaContainerType.ITEM_LOCATION_MOUNTEQUIP or type == LuaContainerType.ITEM_LOCATION_DEVILEQUIP or type == LuaContainerType.ITEM_LOCATION_PEREAL or type == LuaContainerType.ITEM_LOCATION_IMMORTAL) then itemBase.Index = bpModel:GetNewImmortalEquipIndex(); end local _oldCount = 0 local _oldItem = bpModel:GetItemByUID(itemBase.DBID); if _oldItem ~= nil then _oldCount = _oldItem.Count end local _newCount = itemBase.Count retIndex = bpModel:UpdateItem(itemBase); if(type == LuaContainerType.ITEM_LOCATION_BAG or type == LuaContainerType.ITEM_LOCATION_IMMORTAL) then GameCenter.GetNewItemSystem:AddShowTips(itemBase, resonCode, _newCount - _oldCount) end end if pushEvent then self:UpdateContianerItems(type, itemBase); end end return retIndex; end --更新物品时,向对应容器发送更新信息 function NewItemContianerSystem:UpdateContianerItems(type, obj) if type == LuaContainerType.ITEM_LOCATION_BAG or type == LuaContainerType.ITEM_LOCATION_IMMORTAL then GameCenter.PushFixEvent(LogicEventDefine.EVENT_BACKFORM_ITEM_UPDATE, obj); elseif type == LuaContainerType.ITEM_LOCATION_STORAGE then GameCenter.PushFixEvent(LogicEventDefine.EVENT_STORAGE_ITEM_UPDATE, obj); elseif type == LuaContainerType.ITEM_LOCATION_EQUIP or type == LuaContainerType.ITEM_LOCATION_BACKEQUIP then GameCenter.PushFixEvent(LogicEventDefine.EVENT_EQUIPMENTFORM_ITEM_UPDATE, obj); elseif type == LuaContainerType.ITEM_LOCATION_CLEAR then GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_CLEARBAG_UPDATE, obj); end end --删除道具 function NewItemContianerSystem:DeleteItemFromContainer(type, uid) local bpModel = self:GetBackpackModelByType(type); if bpModel then local item = bpModel:GetItemByUID(uid) bpModel:DeleteItem(uid); --删除一个物品成功后,需要关闭tips GameCenter.ItemTipsMgr:Close() self:UpdateContianerItems(type, item); GameCenter.PushFixEvent(LogicEventDefine.EID_EVENT_BACKFORM_ITEM_UNSELCT); end end --整理背包,客户端自行整理\ function NewItemContianerSystem:SortBag(type) local bpModel = self:GetBackpackModelByType(type); if bpModel then bpModel:SortBag() end end ------------------------宠物装备网络消息begin-------------------------- --宠物装备背包新增 function NewItemContianerSystem:ResPetEquipAdd(result) if result.itemInfo then self:UpdateItemFromContainer(LuaContainerType.ITEM_LOCATION_PETEQUIP, result.itemInfo, true, result.reason, true); --发送新物品消息 local itemBase = self:GetItemByUID(LuaContainerType.ITEM_LOCATION_PETEQUIP, result.itemInfo.itemId); if itemBase == nil then return; end --展示物品获取效果 GameCenter.GetNewItemSystem:AddShowItem(result.reason, itemBase:GetCSObj(), itemBase.CfgID, itemBase.Count) end GameCenter.PushFixEvent(LogicLuaEventDefine.EVENT_PETEQUIP_BAGCHANGE); end --宠物装备背包删除 function NewItemContianerSystem:ResPetEquipDelete(result) self:DeleteItemFromContainer(LuaContainerType.ITEM_LOCATION_PETEQUIP, result.itemId); GameCenter.PushFixEvent(LogicLuaEventDefine.EVENT_PETEQUIP_BAGCHANGE); end --宠物装备背包物品信息,上线时推送给玩家 function NewItemContianerSystem:ResPetEquipBagInfos(result) local imModel = self:GetBackpackModelByType(LuaContainerType.ITEM_LOCATION_PETEQUIP); if imModel == nil then imModel = L_ContianerModel:New() imModel.ContainerType = LuaContainerType.ITEM_LOCATION_PETEQUIP; self:SetBackpackModelByType(LuaContainerType.ITEM_LOCATION_PETEQUIP, imModel); end imModel:Clear(); imModel.AllCount = 200; imModel.OpenedCount = 200; if result.itemInfoList then for i = 1, #result.itemInfoList do self:UpdateItemFromContainer(LuaContainerType.ITEM_LOCATION_PETEQUIP, result.itemInfoList[i], true, 0, true); end end GameCenter.PushFixEvent(LogicLuaEventDefine.EVENT_PETEQUIP_BAGCHANGE); end ------------------------宠物装备网络消息end-------------------------- ------------------------坐骑装备网络消息begin-------------------------- --坐骑装备背包新增 function NewItemContianerSystem:ResHorseEquipAdd(result) if result.itemInfo then self:UpdateItemFromContainer(LuaContainerType.ITEM_LOCATION_MOUNTEQUIP, result.itemInfo, true, result.reason, true); --发送新物品消息 local itemBase = self:GetItemByUID(LuaContainerType.ITEM_LOCATION_MOUNTEQUIP, result.itemInfo.itemId); if itemBase == nil then return; end --展示物品获取效果 GameCenter.GetNewItemSystem:AddShowItem(result.reason, itemBase:GetCSObj(), itemBase.CfgID, itemBase.Count) end GameCenter.PushFixEvent(LogicLuaEventDefine.EVENT_MOUNTEQUIP_BAGCHANGE); end --坐骑装备背包删除 function NewItemContianerSystem:ResHorseEquipDelete(result) self:DeleteItemFromContainer(LuaContainerType.ITEM_LOCATION_MOUNTEQUIP, result.itemId); GameCenter.PushFixEvent(LogicLuaEventDefine.EVENT_MOUNTEQUIP_BAGCHANGE); end --坐骑装备背包物品信息,上线时推送给玩家 function NewItemContianerSystem:ResHorseEquipBagInfos(result) local imModel = self:GetBackpackModelByType(LuaContainerType.ITEM_LOCATION_MOUNTEQUIP); if imModel == nil then imModel = L_ContianerModel:New() imModel.ContainerType = LuaContainerType.ITEM_LOCATION_MOUNTEQUIP; self:SetBackpackModelByType(LuaContainerType.ITEM_LOCATION_MOUNTEQUIP, imModel); end imModel:Clear(); imModel.AllCount = 200; imModel.OpenedCount = 200; if result.itemInfoList then for i = 1, #result.itemInfoList do self:UpdateItemFromContainer(LuaContainerType.ITEM_LOCATION_MOUNTEQUIP, result.itemInfoList[i], true, 0, true); end end GameCenter.PushFixEvent(LogicLuaEventDefine.EVENT_MOUNTEQUIP_BAGCHANGE); end ------------------------坐骑装备网络消息end-------------------------- ------------------------魔魂装备网络消息begin-------------------------- --魔魂装备背包新增 function NewItemContianerSystem:ResDevilEquipAdd(result) if result.itemInfo then self:UpdateItemFromContainer(LuaContainerType.ITEM_LOCATION_DEVILEQUIP, result.itemInfo, true, result.reason, true); --发送新物品消息 local itemBase = self:GetItemByUID(LuaContainerType.ITEM_LOCATION_DEVILEQUIP, result.itemInfo.itemId); if itemBase == nil then return; end --展示物品获取效果 GameCenter.GetNewItemSystem:AddShowItem(result.reason, itemBase:GetCSObj(), itemBase.CfgID, itemBase.Count) end GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_DEVILEQUIP_BAGCHANGE); end --魔魂装备背包删除 function NewItemContianerSystem:ResDevilEquipDelete(result) self:DeleteItemFromContainer(LuaContainerType.ITEM_LOCATION_DEVILEQUIP, result.itemId); GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_DEVILEQUIP_BAGCHANGE); end --魔魂装备背包物品信息,上线时推送给玩家 function NewItemContianerSystem:ResDevilEquipBagInfos(result) local imModel = self:GetBackpackModelByType(LuaContainerType.ITEM_LOCATION_DEVILEQUIP); if imModel == nil then imModel = L_ContianerModel:New() imModel.ContainerType = LuaContainerType.ITEM_LOCATION_DEVILEQUIP; self:SetBackpackModelByType(LuaContainerType.ITEM_LOCATION_DEVILEQUIP, imModel); end imModel:Clear(); imModel.AllCount = 200; imModel.OpenedCount = 200; if result.itemInfoList then for i = 1, #result.itemInfoList do self:UpdateItemFromContainer(LuaContainerType.ITEM_LOCATION_DEVILEQUIP, result.itemInfoList[i], true, 0, true); end end GameCenter.PushFixEvent(LogicLuaEventDefine.EID_EVENT_DEVILEQUIP_BAGCHANGE); end ------------------------魔魂装备网络消息end-------------------------- ------------------------魂印背包网络消息begin------------------------ --背包新增 function NewItemContianerSystem:ResAddSoulArmorBall(result) if result.balls then for i = 1, #result.balls do self:UpdateItemFromContainer(LuaContainerType.ITEM_LOCATION_PEREAL, result.balls[i], true, result.reason, true); --发送新物品消息 local itemBase = self:GetItemByUID(LuaContainerType.ITEM_LOCATION_PEREAL, result.balls[i].itemId); if itemBase == nil then return; end --展示物品获取效果 GameCenter.GetNewItemSystem:AddShowItem(result.reason, itemBase:GetCSObj(), itemBase.CfgID, itemBase.Count) end end GameCenter.PushFixEvent(LogicLuaEventDefine.EVENT_SOULEQUIPPERAL_BAGCHANGE); end --背包删除 function NewItemContianerSystem:ResDelSoulArmorBall(result) if result.ids then for i = 1, #result.ids do self:DeleteItemFromContainer(LuaContainerType.ITEM_LOCATION_PEREAL, result.ids[i]); end end GameCenter.PushFixEvent(LogicLuaEventDefine.EVENT_SOULEQUIPPERAL_BAGCHANGE); end --背包物品信息,上线时推送给玩家 function NewItemContianerSystem:ResSoulArmorBag(result) local imModel = self:GetBackpackModelByType(LuaContainerType.ITEM_LOCATION_PEREAL); if imModel == nil then imModel = L_ContianerModel:New(); imModel.ContainerType = LuaContainerType.ITEM_LOCATION_PEREAL self:SetBackpackModelByType(LuaContainerType.ITEM_LOCATION_PEREAL, imModel); end imModel:Clear(); local gCfg = DataConfig.DataGlobal[GlobalName.Born_Bag_Num] if gCfg then local ar = Utils.SplitStr(gCfg.Params, '_') if #ar >= 2 then local AllNum = tonumber(ar[2]); imModel.AllCount = AllNum; imModel.OpenedCount = AllNum; end end if result.balls then for i = 1, #result.balls do self:UpdateItemFromContainer(LuaContainerType.ITEM_LOCATION_PEREAL, result.balls[i], true, 0, true); end end GameCenter.PushFixEvent(LogicLuaEventDefine.EVENT_SOULEQUIPPERAL_BAGCHANGE); end ------------------------魂印背包网络消息end-------------------------- return NewItemContianerSystem