Files
Main/Assets/GameAssets/Resources/Lua/Logic/Item/NewItemContianerSystem.lua
2025-01-25 04:38:09 +08:00

324 lines
13 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

------------------------------------------------
--作者: 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