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

333 lines
7.8 KiB
Plaintext

autoImport("ArtifactMakeData")
autoImport("ArtifactItemData")
ArtifactProxy = class('ArtifactProxy', pm.Proxy)
ArtifactProxy.Instance = nil;
ArtifactProxy.NAME = "ArtifactProxy"
ArtifactProxy.OptionType=
{
Distribute = GuildCmd_pb.EARTIFACTOPTTYPE_DISTRIBUTE,
Retrieve = GuildCmd_pb.EARTIFACTOPTTYPE_RETRIEVE, -- 取回
RetrieveCancle = GuildCmd_pb.EARTIFACTOPTTYPE_RETRIEVE_CANCEL, -- 取消取回
Return = GuildCmd_pb.EARTIFACTOPTTYPE_GIVEBACK,
}
ArtifactProxy.NpcIDByType=
{
2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632
}
ArtifactProxy.Type =
{
WeaponArtifact = 1, -- 主武器神器
HeadBackArtifact = 2, -- 頭飾背飾神器
}
local defaultProduceCount = 1
local typeCfg = GameConfig.ArtifactType
function ArtifactProxy:ctor(proxyName, data)
self.proxyName = proxyName or ArtifactProxy.NAME
if(ArtifactProxy.Instance == nil) then
ArtifactProxy.Instance = self
end
if data ~= nil then
self:setData(data)
end
self:Init()
end
function ArtifactProxy:Init()
self.memberArtData={}
self.artifactData={}
self.produceMap={}
self.makeList = {}
self.makeTable = {}
self:InitReturnData()
end
function ArtifactProxy:InitParam(param)
self.artifactType = param
end
function ArtifactProxy:GetArtifactType()
return self.artifactType
end
function ArtifactProxy:SetArtifactData(data)
for i=1,#data.itemupdates do
local cellData = ArtifactItemData.new(data.itemupdates[i]);
-- helplog("data.itemupdates[i].guid: ",data.itemupdates[i].guid)
self.artifactData[data.itemupdates[i].guid]=cellData
end
for i=1,#data.itemdels do
local itemdel = data.itemdels[i]
for guid,data in pairs(self.artifactData) do
if(guid==itemdel)then
self.artifactData[guid]=nil
end
end
end
for i=1,#data.dataupdates do
local data = ArtifactTypeData.new(data.dataupdates[i])
local t = data.type
self.produceMap[t]=data
end
TableUtility.ArrayClear(self.makeList)
TableUtility.TableClear(self.makeTable);
for k,v in pairs(self.produceMap) do
local unlockIDs= self:_getUnlockID(v.type,v.maxLv)
if(unlockIDs)then
for j=1,#unlockIDs do
self.makeList[#self.makeList+1]=unlockIDs[j]
end
end
end
self:_setMakeTable()
self:ResetGuildMemberArtifact()
end
local unlockID = {}
function ArtifactProxy:_getUnlockID(type,curMaxLv)
TableUtility.ArrayClear(unlockID);
for k,v in pairs(Table_Artifact) do
if(v.Type==type and v.Level<=curMaxLv+1)then
unlockID[#unlockID+1]=v.id
end
end
return unlockID
end
function ArtifactProxy:HandleQuestUnlock(quests)
local result = {}
for i=1,#quests do
for k,v in pairs(Table_Artifact) do
if(v.QuestID==quests[i])then
if(not self.produceMap[v.Type] and not self.makeTable[v.id])then
self.makeList[#self.makeList+1]=v.id
end
end
end
end
self:_setMakeTable()
end
function ArtifactProxy:_setMakeTable()
for i=1,#self.makeList do
local id = self.makeList[i]
if self.makeTable[id] == nil then
self.makeTable[id] = ArtifactMakeData.new(id)
end
end
end
function ArtifactProxy:_getUnlockParam()
local buildType = self.artifactType==1 and GuildBuildingProxy.Type.EGUILDBUILDING_HIGH_REFINE or GuildBuildingProxy.Type.EGUILDBUILDING_ARTIFACT_HEAD
local buildingData = GuildBuildingProxy.Instance:GetBuildingDataByType(buildType)
if(buildingData and buildingData.staticData and buildingData.staticData.UnlockParam)then
local param = buildingData.staticData.UnlockParam
local ownlimit = param.ownlimit or 10
local singlelimit = param.singlelimit or 10
return ownlimit,singlelimit
end
return 0,0
end
function ArtifactProxy:IsOverLimitCount(data)
local totalLimit,singleLimit = self:_getUnlockParam()
local isLvUp = data.Level>1
local singleTypeCount = self:_getOwnCountByType(data.Type)
local totalCount = self:_getTotalArtifactCount()
local single = isLvUp and singleTypeCount-1 or singleTypeCount
local total = isLvUp and totalCount-1 or totalCount
if(single>=singleLimit)then
return 1
elseif(total>=totalLimit)then
return 2
end
return 0
end
function ArtifactProxy:_getOwnCountByType(t)
local singleTypeCount=0
for guid,v in pairs(self.artifactData) do
if(v.type==t)then
singleTypeCount=singleTypeCount+1
end
end
return singleTypeCount
end
function ArtifactProxy:_getTotalArtifactCount()
local num= 0
local buildType = self.artifactType==1 and GuildBuildingProxy.Type.EGUILDBUILDING_HIGH_REFINE or GuildBuildingProxy.Type.EGUILDBUILDING_ARTIFACT_HEAD
for k,v in pairs(self.artifactData) do
if(v.staticData and v.staticData.BuildingType==buildType)then
num=num+1
end
end
return num
end
local typeFilter = {}
function ArtifactProxy:GetAreaFilter(filterData)
TableUtility.ArrayClear(typeFilter)
for k,v in pairs(filterData) do
table.insert(typeFilter,k)
end
table.sort( typeFilter, function (l,r)
return l < r
end )
return typeFilter
end
local data = {}
function ArtifactProxy:GetMakeList()
TableUtility.ArrayClear(data)
for i=1,#self.makeList do
local id = self.makeList[i]
local itemtype = Table_Item[id] and Table_Item[id].Type
if(itemtype)then
local typeConfig = typeCfg[self.artifactType]
if(typeConfig[itemtype])then
data[#data+1]=id
end
end
end
table.sort(data,function (l,r)
return self:SortMakeList(l,r)
end)
return data
end
function ArtifactProxy:SortMakeList(left,right)
if left == nil or right == nil then
return false
end
local lStaticData = Table_Artifact[left]
local rStaticData = Table_Artifact[right]
if(lStaticData.Type==rStaticData.Type)then
return lStaticData.Level<rStaticData.Level
else
return lStaticData.Type<rStaticData.Type
end
end
-- id ->staticID
function ArtifactProxy:GetMakeData(id)
return self.makeTable[id]
end
function ArtifactProxy:GetMySelfArtifact()
local myId = Game.Myself.data.id
local data = {}
for k,v in pairs(self.artifactData) do
if(v.ownerID==myId)then
data[#data+1]=v
end
end
return data
end
function ArtifactProxy:InitReturnData()
if(self.readyReturnData)then
TableUtility.TableClear(self.readyReturnData)
else
self.readyReturnData={}
end
end
function ArtifactProxy:SetReturnArtifact(data)
local guid = data.guid
if(self.readyReturnData[guid])then
self.readyReturnData[guid]=nil
else
self.readyReturnData[guid]=data
end
end
function ArtifactProxy:GetReturnArtifact()
return self.readyReturnData
end
function ArtifactProxy:GetUnUseArtifacts()
local result = {}
for k,v in pairs(self.artifactData) do
if(v.Phase==ArtifactProxy.OptionType.Distribute)then
result[#result+1]=v
end
end
return result
end
function ArtifactProxy:SetDistributeActiveFlag(v)
self.distributeBtnSwitch=v
end
function ArtifactProxy:GetDistributeActiveFlag()
return self.distributeBtnSwitch
end
function ArtifactProxy:ResetGuildMemberArtifact()
self.memberArtData={}
for _,v in pairs(self.artifactData) do
if(not self.memberArtData[v.ownerID])then
self.memberArtData[v.ownerID]={}
end
table.insert(self.memberArtData[v.ownerID],v)
end
end
function ArtifactProxy:GetMemberArti(memberId)
return self.memberArtData[memberId]
end
function ArtifactProxy:GetOptionalArtifacts(memberId)
local result = {}
local memberArtData = self:GetMemberArti(memberId)
if(memberArtData)then
for i=1,#memberArtData do
result[#result+1]=memberArtData[i]
end
end
local unUseArt = self:GetUnUseArtifacts()
if(unUseArt)then
for i=1,#unUseArt do
result[#result+1]=unUseArt[i]
end
end
return result
end
function ArtifactProxy:ShowFloatAward(itemid)
local itemData = ItemData.new("Temp", itemid)
FloatAwardView.addItemDatasToShow({itemData} ,function ()
GameFacade.Instance:sendNotification(UIEvent.JumpPanel, {view = PanelConfig.GuildInfoView})
end,ZhString.ArtifactMake_DisText)
end
function ArtifactProxy:GetProduceCount(t)
if(self.produceMap and self.produceMap[t])then
return self.produceMap[t].produceCount
end
return defaultProduceCount
end
function ArtifactProxy:ClearData()
self.artifactData={}
self.produceMap={}
self.makeList = {}
self.makeTable = {}
self.memberArtData={}
end