Item_Config

require "config.CONST_CONFIG"
local Item_Config = require "config.Item_Config"
local DataComponentBase = require "gameplay.data.DataComponentBase"
local Data_Item = Inherit(DataComponentBase)

local m_ItemList = {}		--普通物品列表RewardType.Prop
local m_TimeItemList = {}	--限时物品列表RewardType.PropTime
local m_NewItemList = {}

function Data_Item:InitData()
	
end

function Data_Item:OnLogin()	--进入系统
	self.m_NewItemList = {}
end

function Data_Item:OnLogout()	--退出系统
	self.m_NewItemList = nil
	self.m_ItemList = nil
	self.m_TimeItemList = nil
end

function Data_Item:InitItems(_Items, _TimeItems)	--初始化道具
	self.m_ItemList = _Items
	self.m_TimeItemList = _TimeItems
end

function Data_Item:UpdateItems(_ItemInfo)	--更新道具
	if _ItemInfo then
		if _ItemInfo.type == EnumConfig.RewardType.PropTime then
			self:UpdateTimeItem(_ItemInfo)
		else
			self:UpdateItem(_ItemInfo)
		end
		--判断物品是否是新增
		self:CheckAddNewItem(_ItemInfo)
	end
end

function Data_Item:UpdateItem(_ItemInfo)
	if _ItemInfo.finalValue > 0 then
		self.m_ItemList[_ItemInfo.id] = _ItemInfo.finalValue
	else
		self.m_ItemList[_ItemInfo.id] = nil
	--	table.remove(self.m_ItemList, _ItemInfo.id)
	end
end

function Data_Item:UpdateTimeItem(_ItemInfo)
	if _ItemInfo.finalValue == 0 or _ItemInfo.value == 0 then
		return
	end
	if _ItemInfo.finalValue == _ItemInfo.value and _ItemInfo.value > 0 then
		--新增物品
		local _NewItem = self:GetNewItem(_ItemInfo.type, _ItemInfo.id, _ItemInfo.finalValue, _ItemInfo.opt)
		table.insert(self.m_TimeItemList, _NewItem)
	else
		--原来有的物品,数量改变,或者从列表移除
		for k,v in pairs(self.m_TimeItemList or {}) do
			if v and v.id == _ItemInfo.id then
				if _ItemInfo.finalValue <= 0 then
					--移除
					table.remove(self.m_TimeItemList, k)
					break
				else
					--改变数量
					self.m_TimeItemList[k].value = _ItemInfo.finalValue
					break
				end
			end
		end
	end
end

function Data_Item:CheckAddNewItem(_ItemInfo)
	if _ItemInfo.value > 0 then
		if _ItemInfo.finalValue == _ItemInfo.value then
			--全新的物品
			self.m_NewItemList[_ItemInfo.id] = _ItemInfo.type
		else
			--数量增加
		end
	else
		--数量减少
	end
end

function Data_Item:IsNewItem(_ItemType, _ItemID)
	--检测是否是新的物品
	for k,v in pairs(self.m_NewItemList or {}) do
		if k == _ItemID and v == _ItemType then
			self.m_NewItemList[k] = nil
			return true
		end
	end
	return false
end

function Data_Item:IsNewType(_ItemType)
	--TODO 检测标签页是否显示红点
	return false
end

function Data_Item:GetItemList()
	local _OutItems = {}
	for k,v in pairs(self.m_ItemList or {}) do
		local _CurItem = self:GetNewItem(EnumConfig.RewardType.Prop, k, v, 0)
		table.insert(_OutItems, _CurItem)
	end
	for k,v in pairs(self.m_TimeItemList or {}) do
		local _CurItem = self:GetNewItem(EnumConfig.RewardType.PropTime, v.id, v.value, v.opt)
		table.insert(_OutItems, _CurItem)
	end
	return _OutItems
end

function Data_Item:GetNewItem(_Type, _ID, _Value, _Opt)
	local _NewItem = {}
	_NewItem.type = _Type
	_NewItem.id = _ID
	_NewItem.value = _Value
	_NewItem.opt = _Opt
	return _NewItem
end

function Data_Item:GetItemCfgByID(_ItemID)
	return Item_Config[_ItemID]
end

--获取物品数量 start
function Data_Item:GetItemCount(_ItemID)
	return self:GetNormalItemCount(_ItemID) + self:GetTimeItemCount(_ItemID)
end

function Data_Item:GetNormalItemCount(_ItemID)	--获取正常道具计数
	for k,v in pairs(self.m_ItemList or {}) do
		if k and k == _ItemID then
			return v
		end
	end
	return 0
end

function Data_Item:GetTimeItemCount(_ItemID)	--获取限时道具计数
	local _ItemCount = 0
	local _tmNow = GlobalPlayerData:GetServerTime()
	for k,v in pairs(self.m_TimeItemList or {}) do
		if v and v.id == _ItemID and v.opt > _tmNow then --判断时间是否过期
			_ItemCount = _ItemCount + v.value
		end
	end
	return _ItemCount
end
--获取物品数量 end

--获取可自动销售的物品列表
function Data_Item:GetAutoSellItemList()
	local _autoSellItemList = {}
	for k,v in pairs(self:GetItemList() or {}) do
		if v then
			if Item_Config[v.id].AutoSell == 1 and Item_Config[v.id].ItemSell == 1 then
				table.insert(_autoSellItemList, v)
			end
		end
	end
	return _autoSellItemList
end

--获取物品飘字信息(string)
function Data_Item:GetAwardPopMessage(_Type, _ID, _Count)
	local _resultStr = ""
	if _Type == EnumConfig.RewardType.Prop then
		_resultStr = self:GetPropPopMessage(_ID, _Count)
	elseif _Type == EnumConfig.RewardType.PropTime then
		_resultStr = self:GetPropPopMessage(_ID, _Count)
	elseif _Type == EnumConfig.RewardType.Pet then
		_resultStr = self:GetPetPopMessage(_ID, _Count)
	end
	return _resultStr
end

--道具
function Data_Item:GetPropPopMessage(_ID, _Count)
	local _ItemCfg = self:GetItemCfgByID(_ID)
	local _desc = ""
	if _ItemCfg then _desc = _ItemCfg.ItemName end
	if _Count > 0 then _desc = _desc.."x".._Count end
	--编码的table中有三个字段:(type id desc)不可少写或写错
	local _EncodeTable = {type=EnumConfig.RewardType.Prop, id=_ID, desc=_desc}
	return require 'util.json'.encode(_EncodeTable)
end

--宠物
function Data_Item:GetPetPopMessage(_ID, _Count)
	local _PetCfg = GlobalPlayerData.Data_Pet:GetPetCfgByID(_ID)
	local _desc = ""
	if _PetCfg then _desc = _PetCfg.Name end
	if _Count > 0 then _desc = _desc.."x".._Count end
	local _EncodeTable = {type=EnumConfig.RewardType.Pet, id=_ID, desc=_desc}
	return require 'util.json'.encode(_EncodeTable)
end

--find Pet Upgrade Item
function Data_Item:GetPetUpgradeItem()	--获取宠物升级道具
	local result = {}
	for k,v in pairs(Item_Config) do
		if v.ItemUseType == EnumConfig.ItemUseType.ItemPetExp then
			table.insert(result , k)
		end
	end
	return result
end

function Data_Item:GetItemQualityByID( itemID )
	local itemCfg = Item_Config[itemID]
	if not itemCfg then
		return false
	end
	return itemCfg.ItemQuality
end

function Data_Item:GetItemExpByID( itemID )
	local itemCfg = Item_Config[itemID]
	if not self:IsItemUseForPetUpgrade(itemID) then
		return 0
	end
	
	return itemCfg.Attribute1	
end

function Data_Item:IsItemUseForPetUpgrade( itemID )
	local itemCfg = Item_Config[itemID]
	if not itemCfg then
		return false
	end
	if itemCfg.ItemUseType ~= EnumConfig.ItemUseType.ItemPetExp then
		return false
	end

	return true
end

return Data_Item

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值