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

240 lines
5.8 KiB
Plaintext

autoImport("SkillProfessData")
autoImport("SkillBeingData")
autoImport("BeingInfoData")
autoImport("ShortCutData")
SkillSaveData = class("SkillSaveData")
function SkillSaveData:ctor(serverSkillData)
self.professionSkillList = {}
self.beingSkillList = {}
self.equipedSkills = {}
self.equipedAutoSkills = {}
self.beinginfo = {}
self.left_point = serverSkillData.left_point
self.skillShortCut = ShortCutData.new()
local length = 0
if serverSkillData.beings then
length = #serverSkillData.beings
local data,skillBeingData,skill
for i=1,length do
data = serverSkillData.beings[i]
skillBeingData = SkillBeingData.new(data.id,Table_Being[data.id],0,0)
self.beingSkillList[data.id] = skillBeingData
skillBeingData:UpdatePoints(data.usedpoint)
skillBeingData:SetLeftPoint(data.leftpoint)
skillBeingData:Server_UpdateDynamicSkillInfos(data)
for j=1,#data.items do
skill = data.items[j]
skillBeingData:UpdateSkill(skill)
end
skillBeingData:ResetSimulateDatas()
end
self:GetBeingsArray()
end
if serverSkillData.datas then
length = #serverSkillData.datas
for i=1,length do
self:AddProfessSkill(self:CreateProfessSkill(serverSkillData.datas[i]))
end
end
if serverSkillData.curbeingid then
self.curBeingID = serverSkillData.curbeingid
end
if serverSkillData.beinginfos then
length = #serverSkillData.beinginfos
local temp,beingInfo
for i=1,length do
temp = serverSkillData.beinginfos[i]
beingInfo = BeingInfoData.new();
self.beinginfo[temp.beingid] = beingInfo
beingInfo:Server_SetData(temp)
end
end
if serverSkillData.shortcut then
self.skillShortCut:ResetSkillShortCuts()
local shortcuts = serverSkillData.shortcut.shortcuts
for i=1,#shortcuts do
local shortcut = shortcuts[i]
self.skillShortCut:UnLockSkillShortCuts(shortcut)
end
end
end
function SkillSaveData:GetProfessionSkill()
return self.professionSkillList
end
function SkillSaveData:GetBeingSkill()
return self.beingSkillList
end
function SkillSaveData:GetBeingInfo(beingid)
return self.beinginfo[beingid]
end
function SkillSaveData:GetUnusedSkillPoint()
return self.left_point
end
function SkillSaveData:GetCurrentBeing()
return self.curBeingID
end
function SkillSaveData:GetEquipedSkills()
return self.equipedSkills
end
function SkillSaveData:GetEquipedAutoSkills()
return self.equipedAutoSkills
end
function SkillSaveData:CreateProfessSkill(serverSkillData)
local data
local skill
local professSkill = SkillProfessData.new(serverSkillData.profession,serverSkillData.usedpoint)
local shortCutAuto = ShortCutProxy.SkillShortCut.Auto
for j=1,#serverSkillData.items do
data = serverSkillData.items[j]
skill = professSkill:UpdateSkill(data)
if self:_CheckPosInShortCut(skill) then
table.insert(self.equipedSkills,skill)
end
if skill:GetPosInShortCutGroup(shortCutAuto) > 0 then
table.insert(self.equipedAutoSkills,skill)
end
if skill.learned then
self:LearnedSkill(skill)
end
end
professSkill:SortSkills()
return professSkill
end
function SkillSaveData:_CheckPosInShortCut(skill)
if skill ~= nil then
local _ShortCutEnum = ShortCutProxy.ShortCutEnum
for k,v in pairs(_ShortCutEnum) do
if skill:GetPosInShortCutGroup(v) > 0 then
return true
end
end
end
return false
end
function SkillSaveData:AddProfessSkill(professSkill)
self.professionSkillList[#self.professionSkillList + 1] = professSkill
table.sort(self.professionSkillList,function (l,r)
return l.profession < r.profession
end)
end
function SkillSaveData:GetBeingsArray()
local arrays = {}
local hasSelect = false
for k,v in pairs(self.beingSkillList) do
arrays[#arrays+1] = v
if(v.isSelect) then
hasSelect = true
end
end
table.sort(arrays ,function ( l,r )
return l.profession < r.profession
end)
if(hasSelect==false and #arrays>0) then
arrays[1]:SetSelect(true)
end
return arrays
end
function SkillSaveData:LearnedSkill(skillItemData)
local beings = self:GetSummonBeings(skillItemData.staticData)
if(beings and #beings>0) then
self:SetEnableBeings(beings,true)
end
end
function SkillSaveData:GetSummonBeings(staticData)
local Logic_Param = staticData.Logic_Param
if(Logic_Param) then
return Logic_Param.being_ids
end
end
function SkillSaveData:SetEnableBeings(beingIDs,val)
if(beingIDs) then
for i=1,#beingIDs do
local being = self:GetSkillBeingData(beingIDs[i])
if(being) then
being.isEnabled = val
end
end
end
end
function SkillSaveData:GetSkillBeingData(creatureID)
return self.beingSkillList[creatureID]
end
function SkillSaveData:GetUsedPoints()
self.totalUsedPoint = 0
for i=1,#self.professionSkillList do
if(self.professionSkillList[i].points) then
self.totalUsedPoint = self.totalUsedPoint + self.professionSkillList[i].points
end
end
return self.totalUsedPoint
end
--手動技能快捷欄數據,autoFill是否補全空欄上的數據,id技能快捷欄id
function SkillSaveData:GetCurrentEquipedSkillData( autoFill ,shortCutID)
if(shortCutID==nil) then
shortCutID = ShortCutProxy.ShortCutEnum.ID1
end
if(autoFill) then
local equipedSkillData = {}
for i=1,ShortCutData.CONFIGSKILLNUM do
local item = SkillItemData.new(0,i,nil,nil,nil,i)
equipedSkillData[i] = item
end
local pos
for k,v in pairs(self.equipedSkills) do
if(autoFill)then
pos = v:GetPosInShortCutGroup(shortCutID)
if(pos~=nil and pos ~=0) then
equipedSkillData[pos] = v
end
elseif(not v.shadow) then
table.insert(equipedSkillData,v)
end
end
return equipedSkillData
end
end
function SkillSaveData:ShortCutListIsEnable(id)
return self.skillShortCut:ShortCutListIsEnable(id)
end
function SkillSaveData:SkillIsLocked(index,id)
return self.skillShortCut:SkillIsLocked(index,id)
end
function SkillSaveData:AutoSkillIsLocked(index)
return self.skillShortCut:AutoSkillIsLocked(index)
end