ro-table/Asstes/Resources/Script/FrameWork/Proxy/ExchangeShopProxy.txt
2025-06-04 05:02:57 +08:00

222 lines
5.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

autoImport("ExchangeShopItemData")
autoImport("ExchangeItemData")
ExchangeShopProxy = class('ExchangeShopProxy', pm.Proxy)
ExchangeShopProxy.Instance = nil;
ExchangeShopProxy.NAME = "ExchangeShopProxy"
-- 商品型別
ExchangeShopProxy.GoodsTYPE=
{
OK = SessionShop_pb.EEXCHANGESTATUSTYPE_OK, --可兌換
EMPTY = SessionShop_pb.EEXCHANGESTATUSTYPE_EMPTY, -- 售空
}
-- 貨幣型別
ExchangeShopProxy.EnchangeType =
{
COINS = 1, -- 貨幣兌換
FRESS = 2, -- 免費兌換
PROGRESS =3, -- 帶進度條兌換
NO_PROGRESS =4, -- 不帶進度條兌換
Limited_PROGRESS = 5,-- 判定上限
}
-------------------for test ---------------------
function ExchangeShopProxy:Test()
-- test Server Data
local data =
{
items = {
{id=1,status=1,progress=0,exchange_count=0,left_time=5432},
{id=2,status=1,progress=0,exchange_count=0,left_time=31214},
{id=3,status=1,progress=1,exchange_count=20,left_time=4352332},
{id=4,status=1,progress=1,exchange_count=10,left_time=232},
{id=5,status=1,progress=0,exchange_count=0,left_time=32145},
},
del_items = {
},
menu_open=true,
}
self:UpdateExchange(data)
end
-------------------for test end ------------------
local _ArrayPushBack = TableUtility.ArrayPushBack
local _ClearArray = TableUtility.ArrayClear
local tempArray = {}
function ExchangeShopProxy:ctor(proxyName, data)
self.proxyName = proxyName or ExchangeShopProxy.NAME
if(ExchangeShopProxy.Instance == nil) then
ExchangeShopProxy.Instance = self
end
if data ~= nil then
self:setData(data)
end
self:Init()
self:InitStaticData()
end
function ExchangeShopProxy:InitStaticData()
if(not Table_ExchangeWorth)then return end
local checkCfgMap = {}
for k,v in pairs(Table_ExchangeWorth) do
if(v.ItemID and v.Worth and #v.Worth>1)then
self.goodsWorth[v.ItemID]=v.Worth
end
if(not v.GoodsID)then return end
for i=1,#v.GoodsID do
local goodID = v.GoodsID[i]
if(nil==self.goodsMap[goodID])then
self.goodsMap[goodID]={}
end
local itemData = ExchangeItemData.new(v)
_ArrayPushBack(self.goodsMap[goodID],itemData)
-- 容錯檢測: 一個商店裡只能對應一種兌換物品
for i=1,#self.goodsMap[goodID] do
local goods = self.goodsMap[goodID][i]
if(nil==checkCfgMap[goodID])then
checkCfgMap[goodID]=goods.config.Worth[1]
end
if(checkCfgMap[goodID]~=goods.config.Worth[1])then
redlog("Table_ExchangeWorth ID",goodID,"配置了不同的獎勵",goods.config.Worth[1])
return
end
end
end
end
end
function ExchangeShopProxy:Init()
self.shopDataMap={}
self.chooseMap={}
-- ExchangeShop對應的訂單商品集合
self.goodsMap={}
self.goodsWorth ={}
end
function ExchangeShopProxy:UpdateExchange(server_data)
for i=1,#server_data.items do
self.shopDataMap[server_data.items[i].id] = ExchangeShopItemData.new(server_data.items[i])
end
for i=1,#server_data.del_items do
self.shopDataMap[server_data.del_items[i]]=nil
end
--------------------- for test ------------------------
-- if(self.openFlag)then
-- GameFacade.Instance:sendNotification(UIEvent.JumpPanel,{view = PanelConfig.ExchangeShopView});
-- end
--------------------- for test end --------------------
end
function ExchangeShopProxy:CanOpen()
for k,v in pairs(self.shopDataMap) do
if v.staticData and v.staticData.Source==1 and v.status ~= ExchangeShopProxy.GoodsTYPE.EMPTY then
return true
end
end
return false
end
function ExchangeShopProxy:HandleResetData(server_data)
self:ClearData()
for i=1,#server_data.items do
self.shopDataMap[server_data.items[i].id] = ExchangeShopItemData.new(server_data.items[i])
end
end
function ExchangeShopProxy:ClearData()
TableUtility.TableClear(self.shopDataMap)
self:ResetChoose()
end
function ExchangeShopProxy:GetRewardByGoods(id)
local array = self.goodsMap[id]
if(not array or 0==#array or not array[1].config)then
return nil
end
return array[1].config.Worth[1]
end
function ExchangeShopProxy:ResetChoose()
TableUtility.TableClear(self.chooseMap)
end
function ExchangeShopProxy:AddChooseItems(id)
if(self.chooseMap[id])then
if(self.chooseMap[id] < BagProxy.Instance:GetItemNumByStaticID(id))then
self.chooseMap[id]=self.chooseMap[id]+1
end
else
self.chooseMap[id]=1
end
end
function ExchangeShopProxy:MinusChooseItem(id)
if(not self.chooseMap[id])then
return
end
if(1<self.chooseMap[id])then
self.chooseMap[id]=self.chooseMap[id]-1
else
self.chooseMap[id]=nil
end
end
function ExchangeShopProxy:_getChooseItem()
local chooseItem = {}
for k,v in pairs(self.chooseMap) do
local item = SessionShop_pb.ExchangeItemInfo()
item.id=k;item.num=v
_ArrayPushBack(chooseItem,item)
end
return 0<#chooseItem and chooseItem or nil
end
function ExchangeShopProxy:GetExchangeShopData()
_ClearArray(tempArray)
for _,v in pairs(self.shopDataMap) do
if v:IsExchangeShop() then
_ArrayPushBack(tempArray,v)
end
end
return tempArray
end
function ExchangeShopProxy:CalcPreviewWorth()
local previewNum = 0
local chooseItem = self:_getChooseItem()
if chooseItem and #chooseItem>0 then
for i=1,#chooseItem do
local worth_cfg = self.goodsWorth[chooseItem[i].id]
local worthNum = worth_cfg and worth_cfg[2] or 1
previewNum = chooseItem[i].num * worthNum + previewNum
end
end
return previewNum
end
function ExchangeShopProxy:GetChooseNum()
local chooseCount,RewardCount = 0,0
for k,v in pairs(self.chooseMap) do
chooseCount = chooseCount+v
if(self.goodsWorth[k])then
RewardCount = RewardCount + self.goodsWorth[k][2] * v
end
end
return chooseCount,RewardCount
end
function ExchangeShopProxy:CallExchange(id)
ServiceSessionShopProxy.Instance:CallExchangeShopItemCmd(id,self:_getChooseItem())
end
function ExchangeShopProxy:GetShopDataByExchangeId(id)
return self.shopDataMap[id]
end