590 lines
15 KiB
Plaintext
590 lines
15 KiB
Plaintext
autoImport("AuctionData")
|
|
autoImport("AuctionSignUpData")
|
|
autoImport("AuctionEventPageData")
|
|
autoImport("AuctionPriceData")
|
|
autoImport("AuctionRecordData")
|
|
|
|
AuctionProxy = class('AuctionProxy', pm.Proxy)
|
|
AuctionProxy.Instance = nil;
|
|
AuctionProxy.NAME = "AuctionProxy"
|
|
|
|
local HOURSEC = 60 * 60
|
|
local MINSEC = 60
|
|
local finishCountdown = {}
|
|
|
|
AuctionState = {
|
|
Close = AuctionCCmd_pb.EAuctionState_Close, --關閉
|
|
SignUp = AuctionCCmd_pb.EAuctionState_SignUp, --報名
|
|
SignUpVerify = AuctionCCmd_pb.EAuctionState_SignUpVerify, --報名審覈
|
|
Auction = AuctionCCmd_pb.EAuctionState_Auction, --競拍
|
|
AuctionEnd = AuctionCCmd_pb.EAuctionState_AuctionEnd, --競拍結束
|
|
AuctionPublicity = AuctionCCmd_pb.EAuctionState_AuctionPublicity --競拍公示期
|
|
}
|
|
|
|
AuctionSignUpState = {
|
|
Close = 1, --關閉
|
|
SignUp = 2, --報名
|
|
Signed = 3, --已報名
|
|
}
|
|
|
|
AuctionItemState = {
|
|
None = AuctionCCmd_pb.EAuctionResult_None, --未拍賣
|
|
Fail = AuctionCCmd_pb.EAuctionResult_Fail, --流拍
|
|
Sucess = AuctionCCmd_pb.EAuctionResult_Sucess, --拍賣成功
|
|
AtAuction = AuctionCCmd_pb.EAuctionResult_AtAuction, --正在拍賣
|
|
}
|
|
|
|
AuctionEventState = {
|
|
None = AuctionCCmd_pb.AuctionEvent_None,
|
|
Start = AuctionCCmd_pb.AuctionEvent_Start, --開始
|
|
OfferPrice = AuctionCCmd_pb.AuctionEvent_OfferPrice, --出價
|
|
Result1 = AuctionCCmd_pb.AuctionEvent_Result1, --30秒
|
|
Result2 = AuctionCCmd_pb.AuctionEvent_Result2, --20秒
|
|
Result3 = AuctionCCmd_pb.AuctionEvent_Result3, --10秒
|
|
ResultSuccess = AuctionCCmd_pb.AuctionEvent_ResultSuccess, --成交
|
|
ResultFail = AuctionCCmd_pb.AuctionEvent_ResultFail, --流拍
|
|
}
|
|
|
|
AuctionRecordState = {
|
|
SignUp = AuctionCCmd_pb.ERecordType_SignUp, --拍品報名
|
|
SignUpSuccess = AuctionCCmd_pb.ERecordType_SignUpSuccess, --拍品報名成功
|
|
SignUpFail = AuctionCCmd_pb.ERecordType_SignUpFail, --報名失敗的拍品
|
|
SellSucess = AuctionCCmd_pb.ERecordType_SellSucess, --競拍出售成功審覈中
|
|
SellFail = AuctionCCmd_pb.ERecordType_SellFail, --流拍
|
|
SellSucessPass = AuctionCCmd_pb.ERecordType_SellSucessPass, --競拍出售成功審覈通過
|
|
SellSucessNoPass = AuctionCCmd_pb.ERecordType_SellSucessNoPass, --競拍出售成功審覈不通過
|
|
|
|
MaxOfferPrice = AuctionCCmd_pb.ERecordType_MaxOfferPrice, --最高出價
|
|
OverTakePrice = AuctionCCmd_pb.ERecordType_OverTakePrice, --出價被超過
|
|
BuySuccess = AuctionCCmd_pb.ERecordType_BuySuccess, --競拍獲得道具審覈中
|
|
BuySuccessPass = AuctionCCmd_pb.ERecordType_BuySuccessPass, --競拍獲得道具審覈通過
|
|
BuySuccessNoPass = AuctionCCmd_pb.ERecordType_BuySuccessNoPass, --競拍獲得道具審覈不通過
|
|
}
|
|
|
|
AuctionRecordTakeState = {
|
|
None = AuctionCCmd_pb.EAuctionTakeStatus_None, --不可領取
|
|
CanTake = AuctionCCmd_pb.EAuctionTakeStatus_CanTake, --可領取
|
|
Took = AuctionCCmd_pb.EAuctionTakeStatus_Took, --已領取
|
|
}
|
|
|
|
function AuctionProxy:ctor(proxyName, data)
|
|
self.proxyName = proxyName or AuctionProxy.NAME
|
|
if AuctionProxy.Instance == nil then
|
|
AuctionProxy.Instance = self
|
|
end
|
|
if data ~= nil then
|
|
self:setData(data)
|
|
end
|
|
|
|
self:Init()
|
|
end
|
|
|
|
function AuctionProxy:Init()
|
|
self.infoMap = {}
|
|
self.signUpList = {}
|
|
self.priceList = {}
|
|
self.recordList = {}
|
|
|
|
for i=1,3 do
|
|
local data = AuctionPriceData.new(i)
|
|
TableUtility.ArrayPushBack(self.priceList, data)
|
|
end
|
|
end
|
|
|
|
--拍賣基本資訊
|
|
function AuctionProxy:RecvNtfAuctionStateCCmd(serverData)
|
|
self.currentState = serverData.state
|
|
self.currentBatchId = serverData.batchid
|
|
self.auctionTime = serverData.auctiontime
|
|
self.delay = serverData.delay
|
|
|
|
self:SetSignUpClose()
|
|
|
|
--拍賣開始,清除上次拍賣流水數據
|
|
if serverData.state == AuctionState.SignUp then
|
|
for k,v in pairs(self.infoMap) do
|
|
v:DestoryEventPool()
|
|
end
|
|
end
|
|
--拍賣結束,主界面提示
|
|
if serverData.state == AuctionState.AuctionEnd then
|
|
self:sendNotification(MyselfEvent.AddWeakDialog, DialogUtil.GetDialogData(94))
|
|
end
|
|
end
|
|
|
|
--報名資訊
|
|
function AuctionProxy:RecvNtfSignUpInfoCCmd(serverData)
|
|
TableUtility.ArrayClear(self.signUpList)
|
|
|
|
for i=1,#serverData.iteminfos do
|
|
local data = AuctionSignUpData.new(serverData.iteminfos[i])
|
|
TableUtility.ArrayPushBack(self.signUpList, data)
|
|
end
|
|
end
|
|
|
|
--已報名資訊
|
|
function AuctionProxy:RecvNtfMySignUpInfoCCmd(serverData)
|
|
for i=1,#serverData.signuped do
|
|
for j=1,#self.signUpList do
|
|
local data = self.signUpList[j]
|
|
if serverData.signuped[i] == data.itemid then
|
|
data:SetState(AuctionSignUpState.Signed)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
self:SetSignUpClose()
|
|
end
|
|
|
|
--報名成功
|
|
function AuctionProxy:RecvSignUpItemCCmd(serverData)
|
|
if serverData.ret then
|
|
for i=1,#self.signUpList do
|
|
local data = self.signUpList[i]
|
|
if serverData.iteminfo.itemid == data.itemid then
|
|
data:SetState(AuctionSignUpState.Signed)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--拍賣物品資訊
|
|
function AuctionProxy:RecvNtfAuctionInfoCCmd(serverData)
|
|
local batchid = serverData.batchid
|
|
local data = self.infoMap[batchid]
|
|
|
|
if data == nil then
|
|
data = AuctionData.new()
|
|
self.infoMap[batchid] = data
|
|
end
|
|
data:SetData(serverData)
|
|
|
|
local keyLimit, containerLimit = self:GetEventPoolLimit(data)
|
|
data:CreateEventPool(keyLimit, containerLimit)
|
|
|
|
self.jumpPanelBatchid = batchid
|
|
end
|
|
|
|
--更新拍賣物品資訊
|
|
function AuctionProxy:RecvUpdateAuctionInfoCCmd(serverData)
|
|
local batchid = serverData.batchid
|
|
local data = self.infoMap[batchid]
|
|
if data then
|
|
data:UpdateItemInfo(serverData.iteminfo)
|
|
end
|
|
end
|
|
|
|
--拍賣物品流水事件
|
|
function AuctionProxy:RecvReqAuctionFlowingWaterCCmd(serverData)
|
|
local batchid = serverData.batchid
|
|
local orderid = serverData.signup_id
|
|
local itemid = serverData.itemid
|
|
local pageIndex = serverData.page_index
|
|
local page, element = self:GetPureEventPageData(batchid, orderid, pageIndex)
|
|
if page == nil then
|
|
if element then
|
|
page = AuctionEventPageData.new(batchid, itemid, pageIndex, orderid)
|
|
local remove = element:Add(page)
|
|
if remove then
|
|
remove:Clear()
|
|
end
|
|
end
|
|
end
|
|
|
|
if page then
|
|
page:Clear()
|
|
local count = #serverData.flowingwater
|
|
for i = count, 1, -1 do
|
|
local event = serverData.flowingwater[i]
|
|
page:AddEvent(event)
|
|
|
|
if i == count then
|
|
self:SetFinishCountdown(batchid, orderid, pageIndex, event)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--更新拍賣物品流水事件
|
|
function AuctionProxy:RecvUpdateAuctionFlowingWaterCCmd(serverData)
|
|
local batchid = serverData.batchid
|
|
local orderid = serverData.signup_id
|
|
local page = self:GetPureEventPageData(batchid, orderid, 0)
|
|
if page then
|
|
local event = serverData.flowingwater
|
|
page:AddEvent(event)
|
|
self:SetFinishCountdown(batchid, orderid, 0, event)
|
|
end
|
|
end
|
|
|
|
--我的出價
|
|
function AuctionProxy:RecvNtfMyOfferPriceCCmd(serverData)
|
|
local info = self.infoMap[serverData.batchid]
|
|
if info then
|
|
local itemList = info:GetItemList()
|
|
for i=1,#itemList do
|
|
local data = itemList[i]
|
|
if data.orderid == serverData.signup_id then
|
|
data:SetMyPrice(serverData.my_price)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--下個物品倒計時
|
|
function AuctionProxy:RecvNtfNextAuctionInfoCCmd(serverData)
|
|
local info = self.infoMap[serverData.batchid]
|
|
if info then
|
|
info:SetNextInfo(serverData)
|
|
end
|
|
end
|
|
|
|
--日誌列表
|
|
function AuctionProxy:RecvReqAuctionRecordCCmd(serverData)
|
|
TableUtility.ArrayClear(self.recordList)
|
|
|
|
for i=1,#serverData.records do
|
|
local record = serverData.records[i]
|
|
if record.type ~= AuctionRecordState.MaxOfferPrice then
|
|
local data = AuctionRecordData.new(record)
|
|
TableUtility.ArrayPushBack(self.recordList, data)
|
|
end
|
|
end
|
|
|
|
table.sort(self.recordList ,function(l,r)
|
|
return l.time > r.time
|
|
end)
|
|
end
|
|
|
|
function AuctionProxy:RecvTakeAuctionRecordCCmd(serverData)
|
|
if serverData.ret then
|
|
local id = serverData.id
|
|
local type = serverData.type
|
|
for i=1,#self.recordList do
|
|
local record = self.recordList[i]
|
|
if record.id == id and record.type == type then
|
|
record:SetStatus(AuctionRecordTakeState.Took)
|
|
self:SetRecordReceiveCount(self.recordReceiveCount - 1)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function AuctionProxy:RecvNtfCanTakeCntCCmd(serverData)
|
|
self:SetRecordReceiveCount(serverData.count)
|
|
end
|
|
|
|
--我的歷史出價
|
|
function AuctionProxy:RecvReqMyTradedPriceCCmd(serverData)
|
|
local info = self.infoMap[serverData.batchid]
|
|
if info then
|
|
local itemList = info:GetItemList()
|
|
for i=1,#itemList do
|
|
local data = itemList[i]
|
|
if data.orderid == serverData.signup_id then
|
|
data:SetMyPrice(serverData.my_price)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--出價檔位被禁止
|
|
function AuctionProxy:RecvNtfMaskPriceCCmd(serverData)
|
|
local info = self.infoMap[serverData.batchid]
|
|
if info then
|
|
local itemList = info:GetItemList()
|
|
for i=1,#itemList do
|
|
local data = itemList[i]
|
|
if data.orderid == serverData.signup_id then
|
|
data:SetMaskPrice(serverData.mask_price)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--報名結束
|
|
function AuctionProxy:SetSignUpClose()
|
|
if self.currentState == AuctionState.SignUpVerify then
|
|
for i=1,#self.signUpList do
|
|
self.signUpList[i]:SetCloseState()
|
|
end
|
|
end
|
|
end
|
|
|
|
function AuctionProxy:SetDontShowAgain(isShowAgain)
|
|
self.dontShowAgain = isShowAgain
|
|
end
|
|
|
|
function AuctionProxy:SetFinishCountdown(batchid, orderid, pageIndex, event)
|
|
--倒計時10秒
|
|
if self.currentBatchId == batchid and pageIndex == 0 and event.event == AuctionEventState.Result3 then
|
|
local info = self.infoMap[batchid]
|
|
if info then
|
|
local iteminfo = info:GetAuctionItemData(orderid)
|
|
if iteminfo and iteminfo:CheckAtAuction() then
|
|
info:SetFinishTime(event.time + 10)
|
|
|
|
TableUtility.TableClear(finishCountdown)
|
|
finishCountdown.batchid = batchid
|
|
finishCountdown.orderid = orderid
|
|
self:sendNotification(AuctionEvent.FinishCountdown, finishCountdown)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function AuctionProxy:SetRecordReceiveCount(count)
|
|
self.recordReceiveCount = count
|
|
|
|
self:CheckRedTip()
|
|
end
|
|
|
|
function AuctionProxy:CheckAuctionSignUp()
|
|
return self.currentState == AuctionState.SignUp or self.currentState == AuctionState.SignUpVerify
|
|
end
|
|
|
|
function AuctionProxy:CheckAuctionRunning(batchid)
|
|
return batchid == self.currentBatchId and self.currentState == AuctionState.Auction
|
|
end
|
|
|
|
function AuctionProxy:CheckAuctionPublicity(batchid)
|
|
return batchid == self.currentBatchId and self.currentState == AuctionState.AuctionPublicity
|
|
end
|
|
|
|
function AuctionProxy:CheckRedTip()
|
|
if self:GetRecordReceiveCount() <= 0 then
|
|
RedTipProxy.Instance:SeenNew(SceneTip_pb.EREDSYS_AUCTION_RECORD)
|
|
end
|
|
end
|
|
|
|
function AuctionProxy:CheckEndItem(batchid, orderid)
|
|
local info = self.infoMap[batchid]
|
|
if info then
|
|
local itemList = info:GetItemList()
|
|
return itemList[#itemList].orderid == orderid
|
|
end
|
|
|
|
return false
|
|
end
|
|
|
|
function AuctionProxy:_CheckItemSignUp(itemData)
|
|
if itemData == nil then
|
|
return false
|
|
end
|
|
|
|
local enchantInfo = itemData.enchantInfo
|
|
if enchantInfo ~= nil then
|
|
local attrs = enchantInfo:GetEnchantAttrs()
|
|
local attrsCount = #attrs
|
|
local valuableCount = 0
|
|
for i=1,attrsCount do
|
|
if attrs[i].Quality == EnchantAttriQuality.Good then
|
|
valuableCount = valuableCount + 1
|
|
end
|
|
end
|
|
local _ConfigAuction = GameConfig.Auction
|
|
return attrsCount >= _ConfigAuction.EnchantAttrCount and
|
|
(valuableCount >= _ConfigAuction.EnchantAttrValuableCount or #enchantInfo:GetCombineEffects() >= _ConfigAuction.EnchantBuffExtraCount)
|
|
end
|
|
return false
|
|
end
|
|
|
|
function AuctionProxy:ClearEventPool(batchid)
|
|
local info = self.infoMap[batchid]
|
|
if info then
|
|
info:ClearEventPool()
|
|
end
|
|
end
|
|
|
|
function AuctionProxy:GetAuctionFormatTime()
|
|
if self.auctionTime == nil or self.auctionTime == 0 then
|
|
return nil
|
|
end
|
|
|
|
local totalSec = self.auctionTime - ServerTime.CurServerTime()/1000
|
|
if totalSec > 0 then
|
|
local hour = math.floor( totalSec / HOURSEC )
|
|
local min = math.floor( (totalSec - hour * HOURSEC) / MINSEC )
|
|
local sec = math.floor( totalSec - hour * HOURSEC - min * MINSEC )
|
|
|
|
return totalSec, hour, min, sec
|
|
end
|
|
|
|
return totalSec
|
|
end
|
|
|
|
function AuctionProxy:GetCurrentState()
|
|
return self.currentState
|
|
end
|
|
|
|
function AuctionProxy:GetAuctionTime()
|
|
return self.auctionTime
|
|
end
|
|
|
|
function AuctionProxy:GetDelay()
|
|
return self.delay
|
|
end
|
|
|
|
function AuctionProxy:GetSignUpList()
|
|
return self.signUpList
|
|
end
|
|
|
|
function AuctionProxy:GetInfoByBatchId(batchid)
|
|
return self.infoMap[batchid]
|
|
end
|
|
|
|
function AuctionProxy:GetEventPoolLimit(auctionData)
|
|
local keyLimit, containerLimit = 5, 5
|
|
if auctionData.batchId == self.currentBatchId then
|
|
keyLimit, containerLimit = #auctionData:GetItemList(), 1
|
|
end
|
|
|
|
return keyLimit, containerLimit
|
|
end
|
|
|
|
function AuctionProxy:GetEventPageData(batchid, itemid, pageIndex, orderid)
|
|
local info = self.infoMap[batchid]
|
|
if info then
|
|
return info:TryGetPage(itemid, pageIndex, orderid)
|
|
end
|
|
|
|
return nil
|
|
end
|
|
|
|
function AuctionProxy:GetPureEventPageData(batchid, orderid, pageIndex)
|
|
local info = self.infoMap[batchid]
|
|
if info then
|
|
return info:PureGetPage(orderid, pageIndex, true)
|
|
end
|
|
|
|
return nil
|
|
end
|
|
|
|
function AuctionProxy:GetEventList(batchid, itemid, pageIndex, orderid)
|
|
local page = self:GetEventPageData(batchid, itemid, pageIndex, orderid)
|
|
if page then
|
|
return page:GetEventList()
|
|
end
|
|
|
|
return nil
|
|
end
|
|
|
|
function AuctionProxy:GetPriceList(auctionItemData)
|
|
for i=1,#self.priceList do
|
|
local data = self.priceList[i]
|
|
local price = CommonFun.calcAuctionPrice(auctionItemData.currentPrice, data.level)
|
|
data:SetPrice(price)
|
|
data:SetDisable(auctionItemData.sellerid == Game.Myself.data.id)
|
|
|
|
local mask
|
|
if auctionItemData:CheckMask(i) then
|
|
mask = GameConfig.Auction.MaskPrice[i]
|
|
end
|
|
data:SetMask(mask)
|
|
end
|
|
|
|
return self.priceList
|
|
end
|
|
|
|
function AuctionProxy:GetClosestReceiveIndex()
|
|
for i=1,#self.recordList do
|
|
local data = self.recordList[i]
|
|
if data and data:CanReceive() then
|
|
return i
|
|
end
|
|
end
|
|
end
|
|
|
|
function AuctionProxy:GetRecordList()
|
|
return self.recordList
|
|
end
|
|
|
|
function AuctionProxy:GetRecordReceiveCount()
|
|
return self.recordReceiveCount or 0
|
|
end
|
|
|
|
function AuctionProxy:GetDontShowAgain()
|
|
return self.dontShowAgain
|
|
end
|
|
|
|
function AuctionProxy:GetItemIndex(batchid, orderid)
|
|
local info = self.infoMap[batchid]
|
|
if info then
|
|
for i=1,#info:GetItemList() do
|
|
local data = info:GetItemList()[i]
|
|
if data.orderid == orderid then
|
|
return i
|
|
end
|
|
end
|
|
end
|
|
|
|
return 0
|
|
end
|
|
|
|
function AuctionProxy:GetMyItemIndex(batchid, orderid)
|
|
local info = self.infoMap[batchid]
|
|
if info then
|
|
for i=1,#info:GetItemList() do
|
|
local data = info:GetItemList()[i]
|
|
if data.orderid == orderid and data.sellerid == Game.Myself.data.id then
|
|
return i
|
|
end
|
|
end
|
|
end
|
|
|
|
return 0
|
|
end
|
|
|
|
function AuctionProxy:GetAtAuctionIndex(batchid)
|
|
local info = self.infoMap[batchid]
|
|
if info then
|
|
for i=1,#info:GetItemList() do
|
|
if info:GetItemList()[i]:CheckAtAuction() then
|
|
return i
|
|
end
|
|
end
|
|
end
|
|
|
|
return nil
|
|
end
|
|
|
|
function AuctionProxy:GetAtAuctionData(batchid)
|
|
local info = self.infoMap[batchid]
|
|
if info then
|
|
for i=1,#info:GetItemList() do
|
|
local data = info:GetItemList()[i]
|
|
if data:CheckAtAuction() then
|
|
return data
|
|
end
|
|
end
|
|
end
|
|
|
|
return nil
|
|
end
|
|
|
|
function AuctionProxy:GetJumpPanelBatchid()
|
|
return self.jumpPanelBatchid
|
|
end
|
|
function AuctionProxy:GetSignUpItemList(itemid)
|
|
if self.signUpItemList == nil then
|
|
self.signUpItemList = {}
|
|
else
|
|
TableUtility.ArrayClear(self.signUpItemList)
|
|
end
|
|
|
|
local items = BagProxy.Instance:GetMainBag():GetItems()
|
|
for i=1,#items do
|
|
local item = items[i]
|
|
if item.staticData.id == itemid and self:_CheckItemSignUp(item) then
|
|
TableUtility.ArrayPushBack(self.signUpItemList, item)
|
|
end
|
|
end
|
|
|
|
return self.signUpItemList
|
|
end |