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

360 lines
10 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("ServantRecommendItemData")
ServantRecommendProxy = class('ServantRecommendProxy', pm.Proxy)
ServantRecommendProxy.Instance = nil;
ServantRecommendProxy.NAME = "ServantRecommendProxy"
ServantRecommendProxy.STATUS=
{
GO = SceneUser2_pb.ERECOMMEND_STATUS_GO, -- 可出發
RECEIVE = SceneUser2_pb.ERECOMMEND_STATUS_RECEIVE, -- 可領獎
FINISHED = SceneUser2_pb.ERECOMMEND_STATUS_FINISH, -- 已完成
}
function ServantRecommendProxy:ctor(proxyName, data)
self.proxyName = proxyName or ServantRecommendProxy.NAME
if(ServantRecommendProxy.Instance == nil) then
ServantRecommendProxy.Instance = self
end
if data ~= nil then
self:setData(data)
end
self:Init()
end
function ServantRecommendProxy:Init()
self.rewardStatusMap = {}
self.classifiedData = {}
self.servantImproveDataMap = {}
-- self.servantImproveDataList = {}
self.servantImproveUnlockFunctionList = {}
self.servantImproveUnlockMap = {}
end
function ServantRecommendProxy:HandleRecommendData(data)
if(nil==self.recommendMap)then
self.recommendMap={}
end
TableUtility.TableClear(self.classifiedData)
local finished = SceneUser2_pb.ERECOMMEND_STATUS_FINISH
for i=1,#data do
local cell_data = ServantRecommendItemData.new(data[i])
if(nil~=cell_data.staticData)then
local needDel = cell_data.staticData.NeedDel
if(cell_data.status == finished and needDel and needDel==1)then
self.recommendMap[cell_data.id] = nil
else
self.recommendMap[cell_data.id] = cell_data
end
else
redlog("女僕---> 伺服器發的ID未在recommend表中找到錯誤id ",cell_data.id)
end
end
self.classifiedData[0]={}
for _,data in pairs(self.recommendMap) do
TableUtility.ArrayPushBack(self.classifiedData[0],data)
end
for id,data in pairs(self.recommendMap) do
local pageType = data.staticData and data.staticData.PageType
if(pageType)then
for i=1,#pageType do
local singleType = pageType[i]
if(nil==self.classifiedData[singleType])then
self.classifiedData[singleType]={}
end
TableUtility.ArrayPushBack(self.classifiedData[singleType],data)
end
end
end
end
function ServantRecommendProxy:HandleRewardStatus(data)
for i=1,#data do
local serviceItem = data[i]
-- helplog("ServantRecommendProxy HandleRewardStatus serviceItem.favorability: ",serviceItem.favorability,"status: ",serviceItem.status)
self.rewardStatusMap[serviceItem.favorability]=serviceItem.status
end
end
function ServantRecommendProxy:GetRecommendMap()
return self.recommendMap
end
function ServantRecommendProxy:GetRecommendById(id)
return self.recommendMap[id]
end
function ServantRecommendProxy:GetRewardStatusMap()
return self.rewardStatusMap
end
-- 0 不可領取 1 可領取 2 已領取
local rewardCfg = GameConfig.Servant.reward
function ServantRecommendProxy:GetFavorRewardID()
for i=1,#rewardCfg do
local cell = rewardCfg[i]
if(cell and cell.value)then
if(self.rewardStatusMap[cell.value]==1)then
return cell.rewardid
end
end
end
return nil
end
function ServantRecommendProxy:GetRecommendDataByType(t,sort)
local typeData = self.classifiedData[t]
if(typeData)then
if(sort)then
table.sort(typeData,function (l,r)
return self:_sortData(l,r)
end)
end
end
return typeData
end
function ServantRecommendProxy:_sortData(left,right)
if left == nil or right == nil then
return false
end
local lReceive = left.status == ServantRecommendProxy.STATUS.RECEIVE
local rReceive = right.status == ServantRecommendProxy.STATUS.RECEIVE
local lFinished = left.status == ServantRecommendProxy.STATUS.FINISHED
local rFinished = right.status == ServantRecommendProxy.STATUS.FINISHED
local lGo = left.status == ServantRecommendProxy.STATUS.GO
local rGo = right.status == ServantRecommendProxy.STATUS.GO
local lData = left.staticData
local rData = right.staticData
local sameRecycle = lData.Recycle == rData.Recycle
local lOpen = left:isActiveOpen()
local rOpen = right:isActiveOpen()
if(lOpen and rOpen)then
return lData.id<rData.id
end
if(lOpen or rOpen)then
return lOpen==true
end
if(lReceive and rReceive)then
if(sameRecycle)then
return lData.id<rData.id
else
return lData.Recycle<rData.Recycle
end
end
if(lReceive or rReceive)then
return lReceive ==true
end
if(lGo and rGo)then
if(sameRecycle)then
return lData.id<rData.id
else
return lData.Recycle<rData.Recycle
end
end
if(lGo or rGo)then
return lGo==true
end
return lData.id<rData.id
end
--女僕提升
function ServantRecommendProxy:GetImproveGroupList()
local groupList = {}
for k,v in pairs(self.servantImproveDataMap) do
groupList[#groupList + 1] = v
end
return groupList
end
function ServantRecommendProxy:GetImproveGroup( groupId )
return self.servantImproveDataMap[groupId]
end
function ServantRecommendProxy:GetImproveFunctionList()
return self.servantImproveUnlockFunctionList
end
function ServantRecommendProxy:HandleServantImproveData(severdata)
-- helplog("==HandleServantImproveData==>>>")
-- TableUtil.Print222(severdata)
local isGroupChanged = false
local isProgressChanged = false
if severdata.datas and #severdata.datas > 0 then
-- helplog("==HandleServantImproveData.datas==>>>", #severdata.datas)
for i=1, #severdata.datas do
local groupdata = severdata.datas[i]
local newGroupId
local groupItems = groupdata.items
if groupItems and #groupItems > 0 then
-- helplog("==SetGroupData:Items==>>>", groupItems[1].dwid)
newGroupId = math.floor(groupItems[1].dwid/1000)
isGroupChanged = true
end
local valueitems = groupdata.valueitems
if valueitems then
-- helplog("==SetGroupData:groupid==>>>", valueitems.groupid, valueitems.growth)
if valueitems.groupid and valueitems.groupid ~= 0 then
newGroupId = valueitems.groupid
end
if valueitems.growth and valueitems.growth ~= 0 then
isProgressChanged = true
end
end
-- helplog("==HandleServantImproveData.newGroupId==>>>", newGroupId)
if newGroupId then
local newGroupType = Table_ServantImproveGroup[newGroupId].type
local sameTypeGroup
for k,v in pairs(self.servantImproveDataMap) do
local oldGroupType = Table_ServantImproveGroup[k].type
if oldGroupType == newGroupType then
sameTypeGroup = v
break;
end
end
if sameTypeGroup then
local oldGroupId = sameTypeGroup.groupid
-- helplog("==sameTypeGroup==>>>", oldGroupId, newGroupId)
if newGroupId == oldGroupId then
-- helplog("==sameGroup==>>>")
self.servantImproveDataMap[newGroupId]:updata( newGroupId, groupItems, valueitems )
else
TableUtility.TableClear(sameTypeGroup)
self.servantImproveDataMap[oldGroupId] = nil
local newGroup = ServantImproveData.new( newGroupId, groupItems, valueitems )
self.servantImproveDataMap[newGroupId] = newGroup
end
else
-- helplog("==newGroup==>>>")
local newGroup = ServantImproveData.new( newGroupId, groupItems, valueitems )
self.servantImproveDataMap[newGroupId] = newGroup
end
end
end
end
if isGroupChanged then
GameFacade.Instance:sendNotification(ServantImproveEvent.ItemListUpdate, groupdata)
end
if isProgressChanged then
-- helplog("==GiftProgressUpdate==>>>")
GameFacade.Instance:sendNotification(ServantImproveEvent.GiftProgressUpdate, groupdata)
end
local unlockitems = severdata.unlockitems
-- helplog("==HandleServantImproveData.unlockitems==>>>", #unlockitems)
if unlockitems and #unlockitems > 0 then
for i=1,#unlockitems do
local oldItem = self.servantImproveUnlockMap[unlockitems[i]]
if oldItem == nil then
self.servantImproveUnlockMap[unlockitems[i]] = unlockitems[i]
self.servantImproveUnlockFunctionList[#self.servantImproveUnlockFunctionList + 1] = unlockitems[i]
end
end
GameFacade.Instance:sendNotification(ServantImproveEvent.FunctionListUpdate, severdata)
end
end
ServantImproveData = class("ServantImproveData")
function ServantImproveData:ctor( newGroupId, itemsData, valueData )
self:updata( newGroupId, itemsData, valueData )
end
function ServantImproveData:updata( newGroupId, itemsData, valueData )
-- helplog("==ServantImproveData:updata==>>>", newGroupId)
self.groupid = newGroupId
if itemsData then
-- helplog("==itemsData==>>>", #itemsData)
if not self.itemList then
self.itemList = {}
self.finishList = {}
self.itemMap = {}
self.finishMap = {}
end
for i=1,#itemsData do
local newItemInfo = itemsData[i]
local oldItem = self.itemMap[newItemInfo.dwid]
if oldItem then
local isDelete = Table_Growth[oldItem.dwid].NeedDel or 0
if isDelete == 1 and newItemInfo.status == SceneUser2_pb.EGROWTH_STATUS_FINISH then
local removeIndex
local itemListRef = self.itemList
for j=1, #itemListRef do
if itemListRef[j] == oldItem then
removeIndex = j
end
end
if removeIndex then
local removeItem = self.itemList[removeIndex]
if self.finishMap[removeItem.dwid] == nil then
self.finishMap[removeItem.dwid] = removeItem
self.finishList[#self.finishList + 1] = removeItem
end
-- self.finishList[#self.finishList + 1] = self.itemList[removeIndex]
table.remove(self.itemList, removeIndex)
self.itemMap[oldItem.dwid] = nil
end
else
oldItem:updata(newItemInfo)
end
else
local isDelete = Table_Growth[newItemInfo.dwid].NeedDel or 0
if isDelete == 1 and newItemInfo.status == SceneUser2_pb.EGROWTH_STATUS_FINISH then
local newItem = GrowthItemData.new(newItemInfo)
if self.finishMap[newItem.dwid] == nil then
self.finishMap[newItem.dwid] = newItem
self.finishList[#self.finishList + 1] = newItem
end
else
local newItem = GrowthItemData.new(newItemInfo)
self.itemList[#self.itemList + 1] = newItem
self.itemMap[newItemInfo.dwid] = newItem
end
end
end
end
if valueData then
-- helplog("==valueData==>>>", valueData.groupid, valueData.growth, #valueData.everreward)
if valueData.growth and valueData.growth ~= 0 then
self.growth = valueData.growth
end
local everRewardList = valueData.everreward
if everRewardList and #everRewardList > 0 then
if not self.everReward then
self.everReward = {}
end
for i=1,#everRewardList do
self.everReward[#self.everReward + 1] = everRewardList[i]
end
end
end
end
GrowthItemData = class("GrowthItemData")
function GrowthItemData:ctor(data)
self:updata(data)
end
function GrowthItemData:updata(data)
self.dwid = data.dwid
self.finishtimes = data.finishtimes
self.status = data.status
end