422 lines
10 KiB
Plaintext
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 |