177 lines
5.5 KiB
Lua
177 lines
5.5 KiB
Lua
------------------------------------------------
|
||
--作者: 杨全福
|
||
--日期: 2021-02-23
|
||
--文件: AuctionItem.lua
|
||
--模块: AuctionItem
|
||
--描述: 拍卖行道具
|
||
------------------------------------------------
|
||
|
||
local L_ItemCache = List:New()
|
||
|
||
local AuctionItem = {
|
||
--是否锁定,锁定的不能被free
|
||
IsLocked = false,
|
||
|
||
--上架人ID
|
||
OwnerID = 0,
|
||
--物品唯一ID
|
||
ID = 0,
|
||
--物品配置ID
|
||
CfgID = 0,
|
||
--物品实例
|
||
ItemInst = nil,
|
||
--所属公会
|
||
OwnerGuild = 0,
|
||
--当前价格
|
||
CurPrice = 0,
|
||
--当前出价人ID
|
||
CurPriceOwner = 0,
|
||
--自身是否是出价最高的
|
||
IsSelfPriceOwner = false,
|
||
--参与过竞价的玩家列表
|
||
JionPlayerList = nil,
|
||
--自身是否参与了竞价
|
||
IsSefJion = false,
|
||
--最低竞价
|
||
MinPrice = 0,
|
||
--竞拍增加值类型:0价格,1万分比
|
||
SinglePriceType = 0,
|
||
--每次竞价增加值
|
||
SinglePrice = 0,
|
||
--一口价
|
||
MaxPrice = 0,
|
||
--是否有开始CD
|
||
HaveStartCD = false,
|
||
--物品配置
|
||
ItemCfg = nil,
|
||
--装备配置
|
||
EquipCfg = nil,
|
||
--拍卖总时间
|
||
AuctionAllTime = 0,
|
||
--剩余时间
|
||
ServerRemainTime = 0,
|
||
--同步的时间
|
||
SyncTime = 0,
|
||
--是否有密码
|
||
HasMiMa = false,
|
||
--使用的货币配置
|
||
UseCoinCfg = nil,
|
||
--使用的拍卖类型,0固定价格,1自定义价格
|
||
UsePriceType = 0,
|
||
}
|
||
|
||
function AuctionItem.Get()
|
||
local _m = nil
|
||
local _haveCount = #L_ItemCache
|
||
if _haveCount > 0 then
|
||
_m = L_ItemCache[_haveCount]
|
||
L_ItemCache:RemoveAt(_haveCount)
|
||
else
|
||
_m = Utils.DeepCopy(AuctionItem)
|
||
end
|
||
return _m
|
||
end
|
||
function AuctionItem.Free(item, force)
|
||
if item.IsLocked and not force then
|
||
return
|
||
end
|
||
item.ItemInst = nil
|
||
item.ID = 0
|
||
item.CfgID = 0
|
||
item.OwnerID = 0
|
||
item.ServerRemainTime = 0
|
||
item.SyncTime = 0
|
||
item.CurPrice = 0
|
||
item.CurPriceOwner = 0
|
||
item.ItemCfg = nil
|
||
item.EquipCfg = nil
|
||
item.HasMiMa = false
|
||
L_ItemCache:Add(item)
|
||
end
|
||
|
||
--刷新数据
|
||
function AuctionItem:RefreshData(msgInfo)
|
||
local _lpId = GameCenter.GameSceneSystem:GetLocalPlayerID()
|
||
self.ItemInst = LuaItemBase.CreateItemBaseByMsg(msgInfo.item)
|
||
self.CfgID = self.ItemInst.CfgID
|
||
self.OwnerGuild = msgInfo.guildId
|
||
self.ID = msgInfo.id
|
||
self.OwnerID = msgInfo.ownId
|
||
self.ServerRemainTime = msgInfo.time
|
||
self.SyncTime = Time.GetRealtimeSinceStartup()
|
||
self.CurPrice = msgInfo.price
|
||
self.CurPriceOwner = msgInfo.roleId
|
||
self.IsSelfPriceOwner = (self.CurPriceOwner == _lpId)
|
||
self.HasMiMa = msgInfo.isPassword
|
||
self.JionPlayerList = {}
|
||
if self.CurPriceOwner > 0 then
|
||
self.JionPlayerList[self.CurPriceOwner] = true
|
||
end
|
||
if msgInfo.roleIds ~= nil then
|
||
for i = 1, #msgInfo.roleIds do
|
||
self.JionPlayerList[msgInfo.roleIds[i]] = true
|
||
end
|
||
end
|
||
|
||
local _itemCount = self.ItemInst.Count
|
||
self.IsSefJion = self.JionPlayerList[_lpId] or false
|
||
if self.ItemInst.Type == ItemType.Equip or self.ItemInst.Type == ItemType.HolyEquip or self.ItemInst.Type == ItemType.UnrealEquip then
|
||
self.EquipCfg = DataConfig.DataEquip[self.CfgID]
|
||
if self.EquipCfg ~= nil then
|
||
self.MinPrice = self.EquipCfg.AuctionMinPrice * _itemCount
|
||
self.SinglePrice = self.EquipCfg.AuctionSinglePrice * _itemCount
|
||
self.SinglePriceType = self.EquipCfg.AuctionSingleType
|
||
self.MaxPrice = self.EquipCfg.AuctionMaxPrice * _itemCount
|
||
--有交易密码时不会有开始cd
|
||
self.HaveStartCD = self.EquipCfg.AuctionCountdown ~= 0 and not self.HasMiMa
|
||
if self.OwnerGuild > 0 then
|
||
--仙盟拍卖
|
||
self.AuctionAllTime = self.EquipCfg.AuctionGuildAllTime
|
||
else
|
||
--世界拍卖
|
||
self.AuctionAllTime = self.EquipCfg.AuctionAllTime
|
||
end
|
||
self.UseCoinCfg = DataConfig.DataItem[self.EquipCfg.AuctionUseCoin]
|
||
self.UsePriceType = self.EquipCfg.AuctionPriceType
|
||
end
|
||
else
|
||
self.ItemCfg = DataConfig.DataItem[self.CfgID]
|
||
if self.ItemCfg ~= nil then
|
||
self.MinPrice = self.ItemCfg.AuctionMinPrice * _itemCount
|
||
self.SinglePrice = self.ItemCfg.AuctionSinglePrice * _itemCount
|
||
self.SinglePriceType = self.ItemCfg.AuctionSingleType
|
||
self.MaxPrice = self.ItemCfg.AuctionMaxPrice * _itemCount
|
||
--有交易密码时不会有开始cd
|
||
self.HaveStartCD = self.ItemCfg.AuctionCountdown ~= 0 and not self.HasMiMa
|
||
if self.OwnerGuild > 0 then
|
||
--仙盟拍卖
|
||
self.AuctionAllTime = self.ItemCfg.AuctionGuildAllTime
|
||
else
|
||
--世界拍卖
|
||
self.AuctionAllTime = self.ItemCfg.AuctionAllTime
|
||
end
|
||
self.UseCoinCfg = DataConfig.DataItem[self.ItemCfg.AuctionUseCoin]
|
||
self.UsePriceType = self.ItemCfg.AuctionPriceType
|
||
end
|
||
end
|
||
if self.CurPrice <= 0 then
|
||
self.CurPrice = self.MinPrice
|
||
end
|
||
end
|
||
|
||
--刷新假数据
|
||
function AuctionItem:RefreshTempData(msgInfo)
|
||
--时间设置为最大
|
||
self.ServerRemainTime = self.AuctionAllTime
|
||
self.SyncTime = Time.GetRealtimeSinceStartup()
|
||
--价格设置为最后一次竞价的价格
|
||
self.CurPrice = self.MaxPrice - self.SinglePrice
|
||
CurPriceOwner = 1
|
||
end
|
||
|
||
--剩余时间
|
||
function AuctionItem:GetRemainTime()
|
||
return self.ServerRemainTime - (Time.GetRealtimeSinceStartup() - self.SyncTime)
|
||
end
|
||
|
||
return AuctionItem |