237 lines
6.9 KiB
Plaintext
237 lines
6.9 KiB
Plaintext
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 |