Files
Main/Assets/GameAssets/Resources/Lua/Logic/Item/NewItemContianerSystem.lua

324 lines
13 KiB
Lua
Raw Normal View History

2025-01-25 04:38:09 +08:00
------------------------------------------------
--作者: 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