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

237 lines
6.9 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("SkillSimulateData")
SimulateSkillProxy = class('SimulateSkillProxy', pm.Proxy)
SimulateSkillProxy.Instance = nil;
SimulateSkillProxy.NAME = "SimulateSkillProxy"
--場景管理,場景的載入佇列管理等
function SimulateSkillProxy:ctor(proxyName, data)
self.proxyName = proxyName or SimulateSkillProxy.NAME
if(SimulateSkillProxy.Instance == nil) then
SimulateSkillProxy.Instance = self
end
self:Reset()
end
function SimulateSkillProxy:Reset()
self.simulateSkillID = {}
self.simulateProfessSkillTab = {}
end
function SimulateSkillProxy:RollBack()
for k,sskill in pairs(self.simulateSkillID) do
sskill:Reset()
end
for k,p in pairs(self.simulateProfessSkillTab) do
p.points = p.sourcePoint
end
end
function SimulateSkillProxy:ReInit()
local myProfess = MyselfProxy.Instance:GetMyProfession()
local needReset = false
if(self.professionID ~= myProfess) then
self:Reset()
self.professionID = myProfess
needReset = true
local professTree = ProfessionProxy.Instance:GetProfessionTreeByClassId(myProfess)
if(professTree~=nil) then
--如果不是初心者的話(找到職業技能樹),才需要顯示職業技能
local p = professTree.transferRoot
local typeBranch = Table_Class[myProfess].TypeBranch
while p~=nil do
SkillProxy.Instance:FindProfessSkill(p.id,true)
p = p:GetNextByBranch(typeBranch)
end
end
end
self.totalUsedPoint = 0
self.totalUsedBasePoint = 0
local professes = SkillProxy.Instance.professionSkills
local rootProfessID = ProfessionProxy.Instance.rootProfession.id
local p
local skill
local data
local cacheSkill
local previousProfess
local basePoints
for i=1,#professes do
p = professes[i]
self.totalUsedPoint = self.totalUsedPoint + p.points
basePoints = p.basePoints or p.points
self.totalUsedBasePoint = self.totalUsedBasePoint + basePoints
data = {
id=p.profession,
points = p.points,
sourcePoint = p.points,
nextProfession = professes[i+1] ,
active = (p.points>=SkillProxy.UNLOCKPROSKILLPOINTS)
}
local skills = {}
self.simulateProfessSkillTab[p.profession] =data
if(p.profession~= rootProfessID) then
--職業技能快取模擬
for j=1,#p.skills do
skill = p.skills[j]
cacheSkill = self.simulateSkillID[skill.sortID]
if(cacheSkill==nil) then
cacheSkill = SkillSimulateData.new(skill)
self.simulateSkillID[skill.sortID] = cacheSkill
else
cacheSkill:ResetSource(skill)
end
skills[#skills + 1] = cacheSkill
end
data.skills = skills
else
data.active = true
end
end
local professRoot = self:GetSimulateProfessNext(rootProfessID)
if(professRoot) then
local index = 1
professRoot.active = true
professRoot.index = index
while professRoot.nextProfession ~= nil do
self:RefreshProfessPoints(professRoot.id,0)
local nextP = self:GetSimulateProfessNext(professRoot.id)
nextP.previousProfessID = professRoot.id
professRoot = nextP
index = index + 1
professRoot.index = index
end
end
if(needReset) then
self:ResetSkillLinks()
end
end
function SimulateSkillProxy:ResetSkillLinks()
local sortID
local requiredSkill
for k,skill in pairs(self.simulateSkillID) do
if(skill.sourceSkill.requiredSkillID) then
sortID = math.floor(skill.sourceSkill.requiredSkillID/1000)
-- local find = false
requiredSkill = self.simulateSkillID[sortID]
if(requiredSkill) then
requiredSkill:SetUnlockSimulate(skill,skill.sourceSkill.requiredSkillID)
skill:SetRequiredSimulate(requiredSkill)
-- find = true
end
-- print(skill.id,"need",sortID,skill.sourceSkill.requiredSkillID,tostring(find))
end
end
end
function SimulateSkillProxy:GetSimulateProfess(pro)
return self.simulateProfessSkillTab[pro]
end
function SimulateSkillProxy:GetSimulateProfessPrevious(pro)
local p = self.simulateProfessSkillTab[pro]
local previous
if(p and p.previousProfessID) then
previous = self.simulateProfessSkillTab[p.previousProfessID]
end
return previous
end
function SimulateSkillProxy:GetSimulateProfessNext(pro)
local p = self.simulateProfessSkillTab[pro]
local nextP
if(p and p.nextProfession) then
nextP = self.simulateProfessSkillTab[p.nextProfession.profession]
end
return nextP
end
function SimulateSkillProxy:RefreshProfessPoints(pro,delta,recursive,baseDelta)
local p = self.simulateProfessSkillTab[pro]
if(p) then
baseDelta = baseDelta or 0
p.points = p.points + delta
self.totalUsedPoint = self.totalUsedPoint + delta
self.totalUsedBasePoint = self.totalUsedBasePoint + baseDelta
-- helplog("totalUsedBasePoint",self.totalUsedBasePoint,baseDelta)
if(p.nextProfession) then
local nextP = self.simulateProfessSkillTab[p.nextProfession.profession]
if(nextP) then
-- 舊版職業技能是否啟用是按照前一職業技能是否點滿40點
-- nextP.active = (p.points>=SkillProxy.UNLOCKPROSKILLPOINTS)
-- 新版:職業技能是否啟用,按照之前是否加滿 40*深度
local extraPoints = GameConfig.Peak.UnlockExtraSkillPoints[p.index] or 0
nextP.active = (self.totalUsedPoint >= (p.index * SkillProxy.UNLOCKPROSKILLPOINTS + extraPoints))
if(recursive) then
self:RefreshProfessPoints(nextP.id,0,recursive)
end
end
end
end
end
function SimulateSkillProxy:UpgradeSkillBySortID(sortID)
local simulateData = self.simulateSkillID[sortID]
local changed,delta,baseDelta = simulateData:Upgrade()
if(changed) then
self:RefreshProfessPoints(simulateData.profession,delta,true,baseDelta)
end
return changed,delta
end
function SimulateSkillProxy:DowngradeSkillBySortID(sortID,level)
local simulateData = self.simulateSkillID[sortID]
local changed,delta,baseDelta = simulateData:Downgrade(level)
if(changed) then
self:RefreshProfessPoints(simulateData.profession,delta,true,baseDelta)
end
return changed,delta
end
function SimulateSkillProxy:HasNextSimulateSkillData(sortID)
local skill = self.simulateSkillID[sortID]
if(skill) then
return skill:HasNextLevel()
end
return false
end
function SimulateSkillProxy:HasPreviousSimulateSkillData(sortID)
local skill = self.simulateSkillID[sortID]
if(skill) then
return skill:HasPreviousLevel()
end
return false
end
function SimulateSkillProxy:GetSimulateSkill(sortID)
return self.simulateSkillID[sortID]
end
function SimulateSkillProxy:GetSimulateSkillItemData(sortID,autoCreate)
if(autoCreate==nil) then autoCreate = true end
local simulateData = self.simulateSkillID[sortID]
if(simulateData) then
local data = simulateData.data
if(data ==nil and autoCreate) then
simulateData.data = SkillItemData.new(simulateData.id,0,0,0,0)
data = simulateData.data
data.learned = simulateData.sourceSkill.learned
elseif(data.id ~= simulateData.id) then
data:Reset(simulateData.id,0,0,0,0)
end
return data
end
return nil
end
function SimulateSkillProxy:GetSkillCanBreak()
if(MyselfProxy.Instance:HasJobBreak()) then
if(FunctionSkillSimulate.Me().isIsSimulating and self.totalUsedBasePoint >=GameConfig.Peak.SkillPointToBreak) then
return true
end
end
return false
end