2025-06-04 05:02:57 +08:00

422 lines
10 KiB
Plaintext

autoImport("QuickBuyItemData")
QuickBuyProxy = class('QuickBuyProxy', pm.Proxy)
QuickBuyProxy.Instance = nil
QuickBuyProxy.NAME = "QuickBuyProxy"
QuickBuyReason = {
NotExist = 1,
Publicity = 2,
NotEnough = 3,
PriceHigher = 4,
PriceLower = 5,
}
QuickBuyOrigin = {
Exchange = 1,
Shop = 2,
}
QuickBuyMoney = {
Zeny = 100,
Happy = 110,
Lottery = 151,
}
local CreateArray = ReusableTable.CreateArray
local CreateTable = ReusableTable.CreateTable
local DestroyAndClearArray = ReusableTable.DestroyAndClearArray
local DestroyAndClearTable = ReusableTable.DestroyAndClearTable
local itemInfo = {}
local costlist = {}
function QuickBuyProxy:ctor(proxyName, data)
self.proxyName = proxyName or QuickBuyProxy.NAME
if QuickBuyProxy.Instance == nil then
QuickBuyProxy.Instance = self
end
if data ~= nil then
self:setData(data)
end
self:Init()
end
function QuickBuyProxy:Init()
self.itemList = {}
self.compareEquipList = {}
self.buyItemList = {}
end
function QuickBuyProxy:TryOpenView(list)
self:SetItemList(list)
if #self.itemList > 0 then
self:sendNotification(UIEvent.JumpPanel, {view = PanelConfig.QuickBuyView})
return true
end
return false
end
--id, count
function QuickBuyProxy:SetItemList(list)
TableUtility.ArrayClear(self.itemList)
for i=1,#list do
local data = list[i]
if ItemData.CheckIsEquip(data.id) then
for j=1,data.count do
local buyItemData = QuickBuyItemData.new(data)
buyItemData:SetNeedCount(1)
TableUtility.ArrayPushBack(self.itemList, buyItemData)
end
else
local buyItemData = QuickBuyItemData.new(data)
TableUtility.ArrayPushBack(self.itemList, buyItemData)
end
end
end
--请求交易所
function QuickBuyProxy:CallItemInfo()
local _CheckItemCanTrade = ItemData.CheckItemCanTrade
local list = CreateArray()
for i=1,#self.itemList do
local item = self.itemList[i]
if _CheckItemCanTrade(item.id) then
local itemCount = self:TryGetItemCount(list, item.id)
if itemCount == nil then
local data = RecordTrade_pb.ItemCount()
data.itemid = item.id
data.count = item.needCount
TableUtility.ArrayPushBack(list, data)
else
itemCount.count = itemCount.count + item.needCount
end
end
end
ServiceRecordTradeProxy.Instance:CallQueryItemCountTradeCmd(Game.Myself.data.id, list)
DestroyAndClearArray(list)
end
--请求商店
function QuickBuyProxy:CallShopInfo()
local list = CreateArray()
for i=1,#self.itemList do
local data = self.itemList[i]
if data.origin == nil then
TableUtility.ArrayPushBack(list, data.id)
end
end
if #list > 0 then
ServiceSessionShopProxy.Instance:CallQueryQuickBuyConfigCmd(list)
else
self:TryCompareEquipPrice()
end
DestroyAndClearArray(list)
end
function QuickBuyProxy:TryCompareEquipPrice()
TableUtility.ArrayClear(self.compareEquipList)
for i=1,#self.itemList do
local data = self.itemList[i]
local equip = data:GetCompareEquipPrice()
if equip ~= nil and not self:CheckExist(self.compareEquipList, data.id) then
TableUtility.ArrayPushBack(self.compareEquipList, equip)
end
end
self.callCompareEquipPriceIndex = 1
self:CallCompareEquipPrice()
end
--对比身上的装备价格
function QuickBuyProxy:CallCompareEquipPrice()
if self.callCompareEquipPriceIndex ~= nil then
if #self.compareEquipList >= self.callCompareEquipPriceIndex then
FunctionItemTrade.Me():GetTradePrice(self.compareEquipList[self.callCompareEquipPriceIndex], true)
else
self.callCompareEquipPriceIndex = nil
self:sendNotification(QuickBuyEvent.Refresh)
end
end
end
function QuickBuyProxy:CallBuyItem()
if self.callBuyItemIndex ~= nil then
if #self.buyItemList >= self.callBuyItemIndex then
local data = self.buyItemList[self.callBuyItemIndex]
if data.origin == QuickBuyOrigin.Exchange then
TableUtility.TableClear(itemInfo)
itemInfo.itemid = data.id
itemInfo.price = data.price
itemInfo.count = data.needCount
itemInfo.publicity_id = data.publicityId
itemInfo.order_id = data.orderId
ShopMallProxy.Instance:CallBuyItemRecordTradeCmd(itemInfo)
elseif data.origin == QuickBuyOrigin.Shop then
HappyShopProxy.Instance:BuyItemByShopItemData(data.shopItemData, data:GetShopBuyCount())
end
else
self.callBuyItemIndex = nil
--飘字
for i=1,3 do
costlist[i] = 0
end
local failCount = 0
for i=1,#self.buyItemList do
local data = self.buyItemList[i]
if data:IsBuySuccess() then
if data.moneyType == QuickBuyMoney.Zeny then
costlist[1] = costlist[1] + data:GetTotalCost()
elseif data.moneyType == QuickBuyMoney.Happy then
costlist[2] = costlist[2] + data:GetTotalCost()
elseif data.moneyType == QuickBuyMoney.Lottery then
costlist[3] = costlist[3] + data:GetTotalCost()
end
else
failCount = failCount + 1
end
end
MsgManager.ShowMsgByIDTable(2967, costlist)
if failCount > 0 then
MsgManager.ShowMsgByID(2968, failCount)
end
--剔除掉商店购买的商品
for i = #self.buyItemList, 1, -1 do
if self.buyItemList[i].origin == QuickBuyOrigin.Shop then
table.remove(self.buyItemList, i)
end
end
--请求日志
if #self.buyItemList > 0 then
self.callRecordIndex = 0
self:CallRecord()
else
self:EndRecord()
end
end
end
end
function QuickBuyProxy:CallRecord()
if self.callRecordIndex ~= nil then
ServiceRecordTradeProxy.Instance:CallMyTradeLogRecordTradeCmd(Game.Myself.data.id, self.callRecordIndex)
end
end
function QuickBuyProxy:RecvQueryItemCountTradeCmd(serviceData)
if #serviceData.res_items > 0 then
local map = CreateTable()
for i=1,#self.itemList do
local data = self.itemList[i]
if map[data.id] == nil then
map[data.id] = CreateArray()
end
TableUtility.ArrayPushBack(map[data.id], data)
end
for i=1,#serviceData.res_items do
local data = serviceData.res_items[i]
if map[data.itemid] ~= nil then
local length = #map[data.itemid]
if length > data.count then
length = data.count
end
for j=length, 1, -1 do
local item = map[data.itemid][j]
if item ~= nil then
item:SetExchangeInfo(data)
item:SetReason()
table.remove(map[data.itemid], j)
end
end
end
end
for k,v in pairs(map) do
DestroyAndClearArray(v)
end
DestroyAndClearTable(map)
end
self:CallShopInfo()
end
function QuickBuyProxy:RecvQueryQuickBuyConfigCmd(serviceData)
local goodsMap = CreateTable()
for i=1,#serviceData.goods do
local goods = serviceData.goods[i]
goodsMap[goods.itemid] = goods
end
for i=1,#self.itemList do
local data = self.itemList[i]
if data.origin == nil then
local goods = goodsMap[data.id]
if goods ~= nil and goods.limittype == 0 and goods.moneyid2 == 0 then
data:SetShopInfo(goods)
end
data:SetReason()
end
end
DestroyAndClearTable(goodsMap)
--对比身上已装备的装备价格
self:TryCompareEquipPrice()
end
function QuickBuyProxy:RecvCompareEquipPrice(serviceData)
if self.callCompareEquipPriceIndex ~= nil and #self.compareEquipList >= self.callCompareEquipPriceIndex then
local id = self.compareEquipList[self.callCompareEquipPriceIndex].staticData.id
if serviceData.itemData.base.id == id then
for i=1,#self.itemList do
local data = self.itemList[i]
if data.id == id then
data:SetCompareEquipPrice(serviceData.price)
end
end
end
self.callCompareEquipPriceIndex = self.callCompareEquipPriceIndex + 1
self:CallCompareEquipPrice()
end
end
--交易所购买
function QuickBuyProxy:RecvBuyItem(serviceData)
if self.callBuyItemIndex ~= nil and #self.buyItemList >= self.callBuyItemIndex then
local buyItemData = self.buyItemList[self.callBuyItemIndex]
if serviceData.item_info.itemid == buyItemData.id then
buyItemData:SetBuyResult(serviceData.ret == ProtoCommon_pb.ETRADE_RET_CODE_SUCCESS)
end
--下一个item
self.callBuyItemIndex = self.callBuyItemIndex + 1
self:CallBuyItem()
end
end
--商店购买
function QuickBuyProxy:RecvBuyShopItem(serviceData)
if self.callBuyItemIndex ~= nil and #self.buyItemList >= self.callBuyItemIndex then
local buyItemData = self.buyItemList[self.callBuyItemIndex]
if buyItemData.shopItemData ~= nil and serviceData.id == buyItemData.shopItemData.id then
buyItemData:SetShopBuyCount(serviceData.count)
local leftCount = buyItemData:GetShopBuyCount()
if leftCount == 0 then
buyItemData:SetBuyResult(serviceData.success)
--下一个item
self.callBuyItemIndex = self.callBuyItemIndex + 1
end
end
self:CallBuyItem()
end
end
function QuickBuyProxy:RecvRecord(serviceData)
if self.callRecordIndex ~= nil then
for i=1,#serviceData.log_list do
if #self.buyItemList == 0 then
break
end
local data = serviceData.log_list[i]
if data.status == ShopMallLogReceiveEnum.ReceiveGive and data.logtype == ShopMallLogTypeEnum.NormalBuy then
for j=1,#self.buyItemList do
local buyItemData = self.buyItemList[j]
if data.itemid == buyItemData.id then
ServiceRecordTradeProxy.Instance:CallTakeLogCmd(data)
table.remove(self.buyItemList, j)
break
end
end
end
end
if #self.buyItemList > 0 then
self.callRecordIndex = self.callRecordIndex + 1
self:CallRecord()
else
self:EndRecord()
end
end
end
function QuickBuyProxy:StartBuyItem()
TableUtility.ArrayClear(self.buyItemList)
for i=1,#self.itemList do
local data = self.itemList[i]
if data.isChoose then
TableUtility.ArrayPushBack(self.buyItemList, data)
end
end
self.callBuyItemIndex = 1
self:CallBuyItem()
end
function QuickBuyProxy:EndRecord()
self.callRecordIndex = nil
self:sendNotification(QuickBuyEvent.Close)
end
function QuickBuyProxy:Clear()
self.callItemInfoIndex = nil
self.callBuyItemIndex = nil
self.callRecordIndex = nil
end
function QuickBuyProxy:TryGetItemCount(list, itemid)
for i=1,#list do
if list[i].itemid == itemid then
return list[i]
end
end
end
function QuickBuyProxy:CheckExist(list, itemid)
for i=1,#list do
if list[i].staticData.id == itemid then
return true
end
end
return false
end
function QuickBuyProxy:GetItemList()
return self.itemList
end
function QuickBuyProxy:GetTotalCost()
local zenyCost = 0
local happyCost = 0
local lotteryCost = 0
for i=1,#self.itemList do
local data = self.itemList[i]
if data.isChoose then
if data.moneyType == QuickBuyMoney.Zeny then
zenyCost = zenyCost + data:GetTotalCost()
elseif data.moneyType == QuickBuyMoney.Happy then
happyCost = happyCost + data:GetTotalCost()
elseif data.moneyType == QuickBuyMoney.Lottery then
lotteryCost = lotteryCost + data:GetTotalCost()
end
end
end
return zenyCost, happyCost, lotteryCost
end