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

157 lines
3.7 KiB
Plaintext

autoImport("ShopData")
ShopProxy = class('ShopProxy', pm.Proxy)
ShopProxy.Instance = nil;
ShopProxy.NAME = "ShopProxy"
function ShopProxy:ctor(proxyName, data)
self.proxyName = proxyName or ShopProxy.NAME
if ShopProxy.Instance == nil then
ShopProxy.Instance = self
end
if data ~= nil then
self:setData(data)
end
self:Init()
end
function ShopProxy:Init()
self.info = {}
self.callTime = {}
end
function ShopProxy:CallQueryShopConfig(type, shopID)
local currentTime = Time.unscaledTime
local nextValidTime
local infoMap = self.info[type]
if infoMap and infoMap[shopID] then
nextValidTime = infoMap[shopID]:GetNextValidTime()
end
if nextValidTime == nil or nextValidTime <= currentTime then
if infoMap == nil then
infoMap = {}
self.info[type] = infoMap
end
if infoMap[shopID] == nil then
infoMap[shopID] = ShopData.new()
self.info[type][shopID] = infoMap[shopID]
end
infoMap[shopID]:SetNextValidTime(5)
helplog("CallQueryShopConfigCmd", type, shopID)
ServiceSessionShopProxy.Instance:CallQueryShopConfigCmd(type, shopID)
end
end
function ShopProxy:RecvQueryShopConfig(servicedata)
local type = servicedata.type
local shopID = servicedata.shopid
local goods = servicedata.goods
local infoMap = self.info[type]
if infoMap == nil then
infoMap = {}
self.info[type] = infoMap
end
if infoMap[shopID] == nil then
infoMap[shopID] = ShopData.new(servicedata)
self.info[type][shopID] = infoMap[shopID]
else
infoMap[shopID]:SetData(servicedata)
end
infoMap[shopID]:SetNextValidTime(60)
end
function ShopProxy:RecvServerLimitSellCountCmd(servicedata)
local config = self:GetConfigByTypeId(servicedata.type, servicedata.shopID)
if config then
for i=1,#servicedata.sell_infos do
local data = servicedata.sell_infos[i]
local shopItemData = config[data.id]
if shopItemData ~= nil then
shopItemData:SetCurProduceNum(data.sell_count)
end
end
end
end
function ShopProxy:RecvShopDataUpdateCmd(servicedata)
local infoMap = self.info[servicedata.type]
if infoMap ~= nil then
local shop = infoMap[servicedata.shopid]
if shop ~= nil then
shop:SetNextValidTime(0)
end
end
end
function ShopProxy:RecvUpdateShopConfigCmd(servicedata)
local infoMap = self.info[servicedata.type]
if infoMap ~= nil then
local shop = infoMap[servicedata.shopid]
if shop ~= nil then
for i=1,#servicedata.add_goods do
shop:AddShopItemData(servicedata.add_goods[i])
end
for i=1,#servicedata.del_goods_id do
shop:RemoveShopItemData(servicedata.del_goods_id[i])
end
end
end
end
--獲得對應shop type的列表
function ShopProxy:GetConfigByType(type)
return self.info[type] or {}
end
--獲得對應type和shopid的列表
function ShopProxy:GetConfigByTypeId(type, shopID)
local infoMap = self.info[type]
if infoMap and infoMap[shopID] then
return infoMap[shopID]:GetGoods()
end
return {}
end
--獲得對應type和shopid的shop data
function ShopProxy:GetShopDataByTypeId(type, shopID)
local infoMap = self.info[type]
if infoMap then
return infoMap[shopID]
end
return nil
end
--獲得對應type、shopid和id的shop item data
function ShopProxy:GetShopItemDataByTypeId(type, shopID, id)
local config = self:GetConfigByTypeId(type, shopID)
if config then
return config[id]
end
return nil
end
-- 設定商品出售數量
function ShopProxy:Server_SetShopSoldCountCmdInfo(server_items)
if(server_items == nil or #server_items == 0)then
return;
end
for i=1,#server_items do
local item = server_items[i];
local shopData = self:GetShopDataByTypeId(item.type, item.shopid);
helplog(item.type, item.shopid);
if(shopData)then
local shopItemData = shopData.goods[item.id];
if(shopItemData)then
helplog(item.count);
shopItemData:SetSoldCount(item.count);
end
end
end
end