222 lines
5.7 KiB
Plaintext
222 lines
5.7 KiB
Plaintext
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
|
||
|