849 lines
31 KiB
Lua
849 lines
31 KiB
Lua
PracticeManager = {}
|
||
local this = PracticeManager
|
||
local XiuXianConfig = ConfigManager.GetConfig(ConfigName.XiuXianConfig)
|
||
local PropertyConfig = ConfigManager.GetConfig(ConfigName.PropertyConfig)
|
||
local XiuXianSkillConfig = ConfigManager.GetConfig(ConfigName.XiuXianSkillConfig)
|
||
local SkillBaseConfig = ConfigManager.GetConfig(ConfigName.PlayerSkillBasicTable)
|
||
local skillSystemConfig = ConfigManager.GetConfigData(ConfigName.GlobalSystemConfig, FUNCTION_OPEN_TYPE.PLAYER_SKILL)
|
||
local xiuWeiSystemConfig = ConfigManager.GetConfigData(ConfigName.GlobalSystemConfig, FUNCTION_OPEN_TYPE.XIUWEI)
|
||
function this.Initialize()
|
||
this.PracticeLevel = 1 --小境界id
|
||
this.PracticeBigLevel = 1 --大境界数
|
||
this.StarNum = 0 --星星的数量
|
||
-- this.PracticeConfigData = {}
|
||
this.ImprintServerData = {} --服务器发来的神印信息
|
||
this.BigLevelImprintList = {} --大境界对应的神印
|
||
this.HeroWithImprintList = {} --英雄身上的神印
|
||
this.PointsData = {}
|
||
this.LinesData = {}
|
||
this.FourQuadrantData = {} --四象心法数据
|
||
this.fourQuadrantUpStarPropMap = {} --四象心法进阶属性加成(职业id:<属性id:属性值>)
|
||
this.playerSkillList = {} --主角技能列表
|
||
this.CultivationLevel = 0
|
||
for key, value in ConfigPairs(SkillBaseConfig) do
|
||
this.playerSkillList[value.Id] = 0
|
||
end
|
||
end
|
||
|
||
--=========================主角技能
|
||
function this.GetSkillInfo()
|
||
return this.playerSkillList
|
||
end
|
||
|
||
--更新角色技能
|
||
function this.UpdataPlayerSkill(msg)
|
||
for i = 1, #msg do
|
||
if this.playerSkillList[msg[i].skillId] then
|
||
this.playerSkillList[msg[i].skillId] = msg[i].skillLv
|
||
end
|
||
end
|
||
end
|
||
|
||
--获取修行技能添加的战斗
|
||
function this.GetPracticeAddPower()
|
||
local addPower = 0
|
||
for key, value in pairs(this.playerSkillList) do
|
||
local lvConfig = ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.PlayerSkill, "SkillID", key, "Level", value)
|
||
if lvConfig then
|
||
addPower = addPower + lvConfig.Fight
|
||
end
|
||
end
|
||
return addPower
|
||
end
|
||
|
||
--设置角色技能等级
|
||
function this.SetPlayerSkill(id, lv)
|
||
if this.playerSkillList[id] then
|
||
this.playerSkillList[id] = lv
|
||
end
|
||
end
|
||
|
||
--设置角色技能等级
|
||
function this.AddPlayerSkill(lv)
|
||
if XiuXianConfig[lv].PlayerSkill then
|
||
for i = 1, #XiuXianConfig[lv].PlayerSkill do
|
||
this.playerSkillList[XiuXianConfig[lv].PlayerSkill[i]] = 1
|
||
PlayerPrefs.SetInt(PlayerManager.uid .. "playerSkillRed", XiuXianConfig[lv].PlayerSkill[i])
|
||
end
|
||
end
|
||
end
|
||
|
||
--检测主角技能红点
|
||
function this.CheckPlayerSkillRed(redType)
|
||
if skillSystemConfig.IsOpen == 0 then
|
||
return false
|
||
end
|
||
local id = redType - 5000
|
||
local lv = this.playerSkillList[id]
|
||
if id ~= 100 and lv >= this.playerSkillList[100] then
|
||
return false
|
||
end
|
||
local openId = PlayerPrefs.GetInt(PlayerManager.uid .. "playerSkillRed")
|
||
if openId == id then
|
||
return true
|
||
end
|
||
if lv ~= 0 then
|
||
local currData = ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.PlayerSkill, "SkillID", id, "Level", lv)
|
||
local nextData = ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.PlayerSkill, "SkillID", id, "Level", lv + 1)
|
||
if nextData then
|
||
local config = this.GetCurConfigData()
|
||
if config and nextData.Level > config.PlayerSkillLvMax then
|
||
return false
|
||
end
|
||
local isShow = true
|
||
for i = 1, #currData.LvupCost do
|
||
if BagManager.GetItemCountById(currData.LvupCost[i][1]) < currData.LvupCost[i][2] then
|
||
isShow = false
|
||
end
|
||
end
|
||
return isShow
|
||
else
|
||
return false
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
--从服务器更新当前修行等级
|
||
function this.UpdataFromServer(_level)
|
||
this.PracticeLevel = _level
|
||
this.PracticeLevel = this.PracticeLevel > 0 and this.PracticeLevel or 1
|
||
this.PracticeBigLevel = XiuXianConfig[this.PracticeLevel].RealmId
|
||
this.StarNum = FightLevelManager.GetAllChapterStars()
|
||
HeroPropManager.SetFuncPropDirty(Func_Prop_Type.Practice)
|
||
HeroPropManager.SetFuncPropDirty(Func_Prop_Type.Cultivation)
|
||
end
|
||
|
||
--获取当前等级表数据
|
||
function this.GetCurConfigData()
|
||
return XiuXianConfig[this.PracticeLevel]
|
||
end
|
||
|
||
function this.BuildAddTemplate()
|
||
local TemplateList = {}
|
||
for _, configInfo in ConfigPairs(PropertyConfig) do
|
||
if configInfo.IfShow == 1 or configInfo.IfShow == 2 then
|
||
TemplateList[configInfo.PropertyId] = 0
|
||
end
|
||
end
|
||
return TemplateList
|
||
end
|
||
|
||
--获取每一小点属性加成
|
||
function this.GetSinglePointAdd()
|
||
local singlePointAddList = {}
|
||
local TotalPros = XiuXianConfig[this.PracticeLevel].TotalPros
|
||
for i = 1, #TotalPros do
|
||
if not singlePointAddList[TotalPros[i][1]] then
|
||
singlePointAddList[TotalPros[i][1]] = 0
|
||
end
|
||
singlePointAddList[TotalPros[i][1]] = TotalPros[i][2]
|
||
end
|
||
|
||
local player = XiuXianConfig[this.PracticeLevel].PlayerProperty
|
||
if player and #player > 0 and type(player[1][1]) ~= "userdata" then
|
||
for i = 1, #player do
|
||
if not singlePointAddList[player[i][1]] then
|
||
singlePointAddList[player[i][1]] = 0
|
||
end
|
||
singlePointAddList[player[i][1]] = singlePointAddList[player[i][1]] + player[i][2]
|
||
end
|
||
end
|
||
|
||
--end
|
||
return singlePointAddList
|
||
end
|
||
|
||
--获取当前获得的所有属性相加(用于计算战力)
|
||
function this.GetCurAllGetAdd()
|
||
local PropertyList = this.BuildAddTemplate()
|
||
for i = 1, this.PracticeLevel do
|
||
-- LogPink("i:"..tostring(i))
|
||
if XiuXianConfig[i].TotalPros then
|
||
local Pros = XiuXianConfig[i].TotalPros
|
||
-- LogGreen("#Pros:"..tostring(#Pros))
|
||
for i = 1, #Pros do
|
||
-- LogBlue("ProsId:"..tostring(Pros[i][1]).." ProsNum:"..tostring(Pros[i][2]))
|
||
if PropertyConfig[Pros[i][1]].Style == 1 then
|
||
PropertyList[Pros[i][1]] = PropertyList[Pros[i][1]] + Pros[i][2]
|
||
elseif PropertyConfig[Pros[i][1]].Style == 2 then
|
||
PropertyList[Pros[i][1]] = PropertyList[Pros[i][1]] + Pros[i][2]
|
||
end
|
||
end
|
||
end
|
||
if XiuXianConfig[i].PlayerProperty and #XiuXianConfig[i].PlayerProperty > 0 and type(XiuXianConfig[i].PlayerProperty[1][1]) ~= "userdata" then
|
||
local player = XiuXianConfig[i].PlayerProperty
|
||
for i = 1, #player do
|
||
PropertyList[player[i][1]] = PropertyList[player[i][1]] + player[i][2]
|
||
end
|
||
end
|
||
end
|
||
return PropertyList
|
||
end
|
||
|
||
--获取当前获得的所有属性相加(用于界面展示)
|
||
function this.GetCurAllGetAddForShow()
|
||
local PropertyList = this.BuildAddTemplate()
|
||
for i = 1, this.PracticeLevel do
|
||
-- LogPink("i:"..tostring(i))
|
||
if XiuXianConfig[i].TotalPros then
|
||
local Pros = XiuXianConfig[i].TotalPros
|
||
-- LogGreen("#Pros:"..tostring(#Pros))
|
||
for i = 1, #Pros do
|
||
-- LogBlue("ProsId:"..tostring(Pros[i][1]).." ProsNum:"..tostring(Pros[i][2]))
|
||
if PropertyConfig[Pros[i][1]].Style == 1 then
|
||
PropertyList[Pros[i][1]] = PropertyList[Pros[i][1]] + Pros[i][2]
|
||
elseif PropertyConfig[Pros[i][1]].Style == 2 then
|
||
PropertyList[Pros[i][1]] = PropertyList[Pros[i][1]] + Pros[i][2] / 100
|
||
end
|
||
end
|
||
end
|
||
if XiuXianConfig[i].PlayerProperty and #XiuXianConfig[i].PlayerProperty > 0 and type(XiuXianConfig[i].PlayerProperty[1][1]) ~= "userdata" then
|
||
local player = XiuXianConfig[i].PlayerProperty
|
||
for i = 1, #player do
|
||
if PropertyConfig[player[i][1]].Style == 1 then
|
||
PropertyList[player[i][1]] = PropertyList[player[i][1]] + player[i][2]
|
||
elseif PropertyConfig[player[i][1]].Style == 2 then
|
||
PropertyList[player[i][1]] = PropertyList[player[i][1]] + player[i][2] / 100
|
||
end
|
||
end
|
||
end
|
||
end
|
||
return PropertyList
|
||
end
|
||
|
||
--获取各个大境界中所有小属性加成的总和 不加模板的
|
||
function this.GetAddsListWithOutTemplate()
|
||
local addsList = {}
|
||
for key, v in ConfigPairs(XiuXianConfig) do
|
||
if not addsList[v.RealmId] then
|
||
addsList[v.RealmId] = {}
|
||
end
|
||
if v.TotalPros then
|
||
local Pros = v.TotalPros
|
||
for i = 1, #Pros do
|
||
if not addsList[v.RealmId][Pros[i][1]] then
|
||
addsList[v.RealmId][Pros[i][1]] = 0
|
||
end
|
||
if PropertyConfig[Pros[i][1]].Style == 1 then
|
||
addsList[v.RealmId][Pros[i][1]] = addsList[v.RealmId][Pros[i][1]] + Pros[i][2]
|
||
elseif PropertyConfig[Pros[i][1]].Style == 2 then
|
||
addsList[v.RealmId][Pros[i][1]] = addsList[v.RealmId][Pros[i][1]] + Pros[i][2] / 100
|
||
end
|
||
end
|
||
end
|
||
if v.PlayerProperty and #v.PlayerProperty > 0 and type(v.PlayerProperty[1][1]) ~= "userdata" then
|
||
local player = v.PlayerProperty
|
||
for i = 1, #player do
|
||
if not addsList[v.RealmId][player[i][1]] then
|
||
addsList[v.RealmId][player[i][1]] = 0
|
||
end
|
||
if PropertyConfig[player[i][1]].Style == 1 then
|
||
addsList[v.RealmId][player[i][1]] = addsList[v.RealmId][player[i][1]] + player[i][2]
|
||
elseif PropertyConfig[player[i][1]].Style == 2 then
|
||
addsList[v.RealmId][player[i][1]] = addsList[v.RealmId][player[i][1]] + player[i][2] / 100
|
||
end
|
||
end
|
||
end
|
||
end
|
||
return addsList
|
||
end
|
||
|
||
--获取预览界面数据
|
||
function this.GetPreViewData()
|
||
local AddListData = this.GetAddsListWithOutTemplate()
|
||
local previewList = {}
|
||
for i = 1, #AddListData do
|
||
local data = {}
|
||
local configData = ConfigManager.GetConfigDataByKey(ConfigName.XiuXianConfig, "RealmId", i)
|
||
data.RealmName = configData.RealmName
|
||
data.NeedStarNum = configData.NeedStarNum
|
||
if configData.RealmDesc then
|
||
data.RealmDesc = configData.RealmDesc
|
||
end
|
||
if this.PracticeBigLevel > i then
|
||
data.IsActive = 2 --完全激活
|
||
elseif this.PracticeBigLevel == i then
|
||
data.IsActive = 1
|
||
elseif this.PracticeBigLevel < i then
|
||
data.IsActive = 0
|
||
end
|
||
data.AddList = AddListData[i]
|
||
table.insert(previewList, data)
|
||
end
|
||
return previewList
|
||
end
|
||
|
||
--返回预览界面文字
|
||
function this.GetPreviewSingleText(id, value)
|
||
if id > 112 then
|
||
if PropertyConfig[id].Style == 1 then
|
||
return string.format("%s", GetLanguageStrById(PropertyConfig[id].Info)), string.format("+%s", value)
|
||
elseif PropertyConfig[id].Style == 2 then
|
||
return string.format("%s", GetLanguageStrById(PropertyConfig[id].Info)), string.format("+%s", value) .. "%"
|
||
end
|
||
else
|
||
if PropertyConfig[id].Style == 1 then
|
||
return string.format(Language[12460], GetLanguageStrById(PropertyConfig[id].Info)),
|
||
string.format("+%s", value)
|
||
elseif PropertyConfig[id].Style == 2 then
|
||
return string.format(Language[12460], GetLanguageStrById(PropertyConfig[id].Info)),
|
||
string.format("+%s", value) .. "%"
|
||
end
|
||
end
|
||
end
|
||
|
||
--获取所有神印信息
|
||
function this.GetAllImprintData()
|
||
local AllImprintList = {}
|
||
for i, v in ConfigPairs(XiuXianConfig) do
|
||
if v.TeamSkill then
|
||
table.insert(AllImprintList, v)
|
||
end
|
||
end
|
||
return AllImprintList
|
||
end
|
||
|
||
--服务器发来的神印信息
|
||
function this.UpdataImprintDataFromServer(_imprintList)
|
||
this.BigLevelWithImprint() --初始化大境界/英雄对应的神印
|
||
for key, value in pairs(_imprintList) do
|
||
if value and value.id then
|
||
if not this.ImprintServerData[value.id] then
|
||
this.ImprintServerData[value.id] = {}
|
||
end
|
||
this.ImprintServerData[value.id].id = value.id
|
||
this.ImprintServerData[value.id].type = value.type
|
||
this.ImprintServerData[value.id].subId = value.subId
|
||
this.ImprintServerData[value.id].state = value.state
|
||
-- LogBlue("value.id:"..tostring(value.id).." value.type:"..tostring(value.type).." value.subId:"..tostring(value.subId).." value.state:"..tostring(value.state))
|
||
if value.state == 1 then
|
||
this.BigLevelImprintList[XiuXianSkillConfig[value.id].UnlockId] = value.id
|
||
if value.subId ~= nil and value.subId ~= "" and value.subId ~= "nil" then
|
||
this.HeroWithImprintList[value.subId] = value.id
|
||
end
|
||
end
|
||
end
|
||
end
|
||
end
|
||
|
||
--初始化大境界/英雄对应的神印
|
||
function this.BigLevelWithImprint()
|
||
for i, v in ConfigPairs(XiuXianSkillConfig) do
|
||
if v.UnlockId > 0 then
|
||
this.BigLevelImprintList[v.UnlockId] = 0
|
||
end
|
||
end
|
||
this.HeroWithImprintList = {}
|
||
end
|
||
|
||
--获取单个神印的信息(服务器+表)
|
||
function this.GetSingleImprintData(id)
|
||
if this.ImprintServerData[id] then
|
||
return this.ImprintServerData[id], XiuXianSkillConfig[id]
|
||
else
|
||
return nil, XiuXianSkillConfig[id]
|
||
end
|
||
end
|
||
|
||
function this.SetNameColor(name, level)
|
||
if level == 0 then
|
||
level = 1
|
||
end
|
||
local clr = ""
|
||
if XiuXianConfig[level] then
|
||
clr = XiuXianConfig[level].NameFontColor
|
||
-- LogYellow("name:"..tostring(name).." clr:"..tostring(clr))
|
||
return "<color=#" .. clr .. ">" .. GetLanguageStrById(name) .. "</color>"
|
||
else
|
||
return ""
|
||
end
|
||
end
|
||
|
||
--获取大境界对应的段位名称
|
||
function this.GetRankNameByLv(lv)
|
||
for i, v in ConfigPairs(XiuXianConfig) do
|
||
if v.RealmId == lv then
|
||
return "<color=#" .. v.NameFontColor .. ">" .. v.RealmName .. Language[12461] .. "</color>"
|
||
end
|
||
end
|
||
return nil
|
||
end
|
||
|
||
--查找英雄对应的神印
|
||
function this.CheckHeroWearImprint(heroDid)
|
||
if this.HeroWithImprintList[heroDid] then
|
||
return this.HeroWithImprintList[heroDid]
|
||
end
|
||
return false
|
||
end
|
||
|
||
--获取小境界点信息
|
||
function this.GetPointsData(parentObj)
|
||
this.PointsData = {}
|
||
local width = 880 --parentObj.transform.rect.width
|
||
for i, v in ConfigPairs(XiuXianConfig) do
|
||
if v.RealmId == this.PracticeBigLevel and v.RealmLevel > 0 then
|
||
local data = {}
|
||
data.Id = v.Id --Id
|
||
data.RealmName = string.format("%s·%s", GetLanguageStrById(v.RealmName), GetLanguageStrById(v.RealmLevelName)) --名字
|
||
data.RealmLevel = v.RealmLevel --小境界等级
|
||
data.TotalPros = v.TotalPros --属性
|
||
data.Pos = Vector3.zero --位置
|
||
-- data.Updown = 0--1下0上
|
||
data.State = this.PracticeLevel >= v.Id and 1 or 0 --是否已经激活该点
|
||
data.Img = this.PracticeLevel >= v.Id and "x_xiuxing_dian_01" or "x_xiuxing_dian_02" --图片名字
|
||
table.insert(this.PointsData, data)
|
||
end
|
||
end
|
||
|
||
--设置点的位置
|
||
if (#this.PointsData) % 2 == 0 then --双数点
|
||
local perSpace = width / #this.PointsData
|
||
local mid = #this.PointsData / 2
|
||
for i = 1, #this.PointsData do
|
||
if i <= mid then
|
||
local x = (i - mid) * perSpace - perSpace / 2
|
||
local y = math.pow(-1, i) * 60
|
||
this.PointsData[i].Pos = Vector3.New(x, y, 0)
|
||
elseif i > mid then
|
||
local x = (i - mid - 1) * perSpace + perSpace / 2
|
||
local y = math.pow(-1, i) * 60
|
||
this.PointsData[i].Pos = Vector3.New(x, y, 0)
|
||
end
|
||
end
|
||
elseif (#this.PointsData) % 2 == 1 then --单数点
|
||
local perSpace = width / #this.PointsData
|
||
local mid = math.ceil(#this.PointsData / 2)
|
||
for i = 1, #this.PointsData do
|
||
if i < mid then
|
||
local x = (i - mid) * perSpace
|
||
local y = math.pow(-1, i) * 60
|
||
this.PointsData[i].Pos = Vector3.New(x, y, 0)
|
||
elseif i > mid then
|
||
local x = (i - mid) * perSpace
|
||
local y = math.pow(-1, i) * 60
|
||
this.PointsData[i].Pos = Vector3.New(x, y, 0)
|
||
elseif i == mid then
|
||
local y = math.pow(-1, i) * 60
|
||
this.PointsData[i].Pos = Vector3.New(0, y, 0)
|
||
end
|
||
end
|
||
end
|
||
return this.PointsData
|
||
end
|
||
|
||
--获取境界点间的线的位置和角度
|
||
function this.GetLinesData()
|
||
this.LinesData = {}
|
||
for i = 1, #this.PointsData do
|
||
if this.PointsData[i + 1] then
|
||
local data = {}
|
||
local x = (this.PointsData[i].Pos.x + this.PointsData[i + 1].Pos.x) / 2
|
||
data.Pos = Vector3.New(x, 0, 0)
|
||
local r = math.acos((this.PointsData[i + 1].Pos.x - this.PointsData[i].Pos.x) /
|
||
(this.PointsData[i + 1].Pos.y - this.PointsData[i].Pos.y))
|
||
if (r / math.pi) * 180 > 90 then
|
||
data.Rota = Vector3.New(0, 0, (r / math.pi) * 180 - 10)
|
||
else
|
||
data.Rota = Vector3.New(0, 0, (r / math.pi) * 180 + 10)
|
||
end
|
||
data.State = this.PointsData[i + 1].State
|
||
table.insert(this.LinesData, data)
|
||
end
|
||
end
|
||
return this.LinesData
|
||
end
|
||
|
||
function this.CalculateWorldPos(...)
|
||
local _args = { ... }
|
||
local pos = Vector3.New(0, 0, 0)
|
||
for i = 1, #_args do
|
||
local objPos = _args[i]:GetComponent("RectTransform").localPosition
|
||
pos.x = pos.x + objPos.x
|
||
pos.y = pos.y + objPos.y
|
||
end
|
||
return pos
|
||
end
|
||
|
||
function this.GetSingleAddition(_data)
|
||
local data = PropertyConfig[_data[1]]
|
||
if data.Style == 2 then
|
||
return string.format(Language[11042], GetLanguageStrById(data.Info), _data[2] / 100) .. "%"
|
||
elseif data.Style == 1 then
|
||
return string.format(Language[11042], GetLanguageStrById(data.Info), _data[2])
|
||
end
|
||
end
|
||
|
||
--升级红点检测
|
||
function this.PracticeCheckUpgrade()
|
||
if not XiuXianConfig[this.PracticeLevel] then
|
||
return false
|
||
end
|
||
local configData = XiuXianConfig[this.PracticeLevel]
|
||
if this.StarNum >= configData.NeedStarNum then
|
||
if configData.LevelUpCost then
|
||
for i = 1, #configData.LevelUpCost do
|
||
local data = configData.LevelUpCost[i]
|
||
if BagManager.GetTotalItemNum(data[1]) < data[2] then
|
||
-- LogRed("return false Upgrade 1")
|
||
return false
|
||
end
|
||
end
|
||
end
|
||
-- LogGreen("return true Upgrade")
|
||
return true
|
||
end
|
||
-- LogRed("return false Upgrade 2")
|
||
return false
|
||
end
|
||
|
||
--神印红点检测
|
||
function this.PracticeCheckImprint()
|
||
for i, v in ConfigPairs(XiuXianSkillConfig) do
|
||
if this.ImprintServerData[v.Id] then
|
||
local str = PlayerPrefs.GetInt(PlayerManager.uid .. "Imprint" .. v.Id)
|
||
if str == 0 then
|
||
-- LogGreen("return true Imprint")
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
-- LogRed("return false Imprint")
|
||
return false
|
||
end
|
||
|
||
--检测英雄是否附身中并且神印已激活
|
||
function this.CheckHeroHaveImprintAndActive(heroDid)
|
||
if this.HeroWithImprintList[heroDid] then
|
||
if this.ImprintServerData[this.HeroWithImprintList[heroDid]] then
|
||
if this.ImprintServerData[this.HeroWithImprintList[heroDid]].state == 1 then
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function this.SetPracticeIcon(obj, level)
|
||
local spLoader = SpriteLoader.New()
|
||
if XiuXianConfig[level] == nil then
|
||
return
|
||
end
|
||
local BigLevel = XiuXianConfig[level].RealmId
|
||
if BigLevel % 3 == 0 then
|
||
BigLevel = BigLevel / 3
|
||
else
|
||
BigLevel = math.floor(BigLevel / 3 + 1)
|
||
end
|
||
local name = "x_xiuxing_xiaobiao_00" .. BigLevel.."_zh"
|
||
obj:GetComponent("Image").sprite = spLoader:LoadSprite(name)
|
||
end
|
||
|
||
--每次升级小境界弹出tips
|
||
function this.ShowTipsOnUpgrade()
|
||
local prosData = XiuXianConfig[this.PracticeLevel].TotalPros
|
||
if prosData then
|
||
PopupTipPanel.ShowTip(Language[12462])
|
||
AttriTips.ShowAttriTip(prosData)
|
||
end
|
||
end
|
||
|
||
--=====================四象心法部分的代码===============================
|
||
|
||
--初始化四象心法数据
|
||
function this.InitFourQuadrantData(_dataList)
|
||
for i = 1, #_dataList do
|
||
local professionInfo = {}
|
||
professionInfo.level = _dataList[i].level
|
||
professionInfo.propertyList = _dataList[i].propertyInfoList
|
||
this.FourQuadrantData[_dataList[i].professionId] = professionInfo
|
||
end
|
||
for i = 1, 4 do
|
||
if this.FourQuadrantData[i] == nil then
|
||
local professionInfo = {}
|
||
professionInfo.level = 0
|
||
this.FourQuadrantData[i] = professionInfo
|
||
end
|
||
end
|
||
this.UpdateUpStarProperty()
|
||
-- 设置四象心法脏数据
|
||
HeroPropManager.SetFuncPropDirty(Func_Prop_Type.FourQua)
|
||
end
|
||
|
||
--更新进阶属性数据
|
||
function this.UpdateUpStarProperty()
|
||
for professionId, professionInfo in pairs(this.FourQuadrantData) do
|
||
local upStarProperty = {}
|
||
for i = 0, professionInfo.level - 1 do
|
||
local fourQuadConfig = ConfigManager.GetConfigDataByKey(ConfigName.FourQuadrantConfig, "Star", i)
|
||
for j = 1, #fourQuadConfig.PropStar do
|
||
local propArr = fourQuadConfig.PropStar[j]
|
||
if upStarProperty[propArr[1]] then
|
||
upStarProperty[propArr[1]] = upStarProperty[propArr[1]] + propArr[2]
|
||
else
|
||
upStarProperty[propArr[1]] = propArr[2]
|
||
end
|
||
end
|
||
end
|
||
this.fourQuadrantUpStarPropMap[professionId] = upStarProperty
|
||
end
|
||
end
|
||
|
||
--获取四象心法共鸣等级
|
||
function this.GetFourQuadrantGongmingLv()
|
||
local lv = 0
|
||
if this.FourQuadrantData[1] then
|
||
lv = this.FourQuadrantData[1].level
|
||
end
|
||
for i = 1, 4 do
|
||
if not this.FourQuadrantData[i] then
|
||
return 0
|
||
end
|
||
if lv > this.FourQuadrantData[i].level then
|
||
lv = this.FourQuadrantData[i].level
|
||
end
|
||
end
|
||
return lv
|
||
end
|
||
|
||
---刷新四象心法对应职业相关属性
|
||
function this.UpdateFourQuadrantProperty(_professionId, _propertyList)
|
||
if this.FourQuadrantData[_professionId] then
|
||
this.FourQuadrantData[_professionId].propertyList = _propertyList
|
||
else
|
||
local professionInfo = {}
|
||
professionInfo.level = 0
|
||
professionInfo.propertyList = _propertyList
|
||
this.FourQuadrantData[_professionId] = professionInfo
|
||
end
|
||
-- 设置四象心法脏数据
|
||
HeroPropManager.SetFuncPropDirty(Func_Prop_Type.FourQua)
|
||
end
|
||
|
||
--进阶刷新本地数据
|
||
function this.UpStarUpdateFourQuadrantData(_professionId, _msg)
|
||
this.FourQuadrantData[_professionId].level = _msg.starLv
|
||
this.FourQuadrantData[_professionId].propertyList = _msg.infoList
|
||
this.UpdateUpStarProperty()
|
||
-- 设置四象心法脏数据
|
||
HeroPropManager.SetFuncPropDirty(Func_Prop_Type.FourQua)
|
||
end
|
||
|
||
--四象心法计算指定职业的属性加成
|
||
function this.HeroCalculateFourQuaWarForce(_professionId)
|
||
local addAllProVal = {}
|
||
local professionInfo = this.FourQuadrantData[_professionId]
|
||
if not professionInfo then
|
||
return addAllProVal
|
||
end
|
||
if professionInfo.propertyList then
|
||
---计算强化属性
|
||
for i = 1, #professionInfo.propertyList do
|
||
local propertyInfo = professionInfo.propertyList[i]
|
||
if propertyInfo.propertyNum > 0 then
|
||
if addAllProVal[propertyInfo.propertyId] then
|
||
addAllProVal[propertyInfo.propertyId] = addAllProVal[propertyInfo.propertyId] +
|
||
propertyInfo.propertyNum
|
||
else
|
||
addAllProVal[propertyInfo.propertyId] = propertyInfo.propertyNum
|
||
end
|
||
end
|
||
end
|
||
---计算进阶属性
|
||
if this.fourQuadrantUpStarPropMap[_professionId] then
|
||
local upStarProp = this.fourQuadrantUpStarPropMap[_professionId]
|
||
for propertyId, propertyNum in ipairs(upStarProp) do
|
||
addAllProVal[propertyId] = addAllProVal[propertyId] + propertyNum
|
||
end
|
||
end
|
||
end
|
||
--计算共鸣属性加成
|
||
if this.GetFourQuadrantGongmingLv() > 0 then
|
||
local fourQuadConfig = ConfigManager.GetConfigDataByKey(ConfigName.FourQuadrantConfig, "Star",
|
||
this.GetFourQuadrantGongmingLv())
|
||
for i = 1, #fourQuadConfig.PropResonance do
|
||
local propAdd = fourQuadConfig.PropResonance[i]
|
||
if addAllProVal[propAdd[1]] then
|
||
addAllProVal[propAdd[1]] = addAllProVal[propAdd[1]] + propAdd[2]
|
||
else
|
||
addAllProVal[propAdd[1]] = propAdd[2]
|
||
end
|
||
end
|
||
end
|
||
-- 计算技能属性加成
|
||
for key, value in pairs(this.FourQuadrantData) do
|
||
if value.level > 0 then
|
||
local fourQuadConfig = ConfigManager.GetConfigDataByKey(ConfigName.FourQuadrantConfig, "Star", value.level)
|
||
local professionSkillAdd = fourQuadConfig.Skill[key]
|
||
addAllProVal[professionSkillAdd[1]] = professionSkillAdd[2]
|
||
end
|
||
end
|
||
|
||
return addAllProVal
|
||
end
|
||
|
||
--检测四象心法红点
|
||
function this.CheckFourQuadrantRed()
|
||
for professionId, professionInfo in pairs(this.FourQuadrantData) do
|
||
if this.CheckIsUpStarCondition(professionId) then
|
||
if this.CheckIsUpStarByProfessionId(professionId) then
|
||
return true
|
||
end
|
||
else
|
||
if this.CheckIsUpByProfessionId(professionId) then
|
||
return true
|
||
end
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
---检测四象心法指定职业进阶条件是否满足
|
||
function this.CheckIsUpStarByProfessionId(_professionId)
|
||
local professionInfo = PracticeManager.FourQuadrantData[_professionId]
|
||
if not professionInfo then
|
||
return false
|
||
end
|
||
if professionInfo.level >= 5 then
|
||
return false
|
||
end
|
||
local fourQuadConfig = ConfigManager.GetConfigDataByKey(ConfigName.FourQuadrantConfig, "Star", professionInfo.level)
|
||
for i = 1, #fourQuadConfig.PropLimit do
|
||
local propLimitArr = fourQuadConfig.PropLimit[i]
|
||
local propertyInfo = professionInfo.propertyList[propLimitArr[1]]
|
||
if not propertyInfo then
|
||
return false
|
||
end
|
||
if propertyInfo.propertyNum < propLimitArr[2] then
|
||
return false
|
||
end
|
||
end
|
||
|
||
local nextLv = professionInfo.level + 1
|
||
local nextConfig = ConfigManager.GetConfigDataByKey(ConfigName.FourQuadrantConfig, "Star", nextLv)
|
||
if not nextConfig then
|
||
return false
|
||
end
|
||
local xiuxingConfig = ConfigManager.GetConfigData(ConfigName.XiuXianConfig, nextConfig.XiuxianLimit)
|
||
if this.PracticeBigLevel < xiuxingConfig.RealmId then
|
||
return false
|
||
end
|
||
|
||
local costArr = fourQuadConfig.RankupCost
|
||
for i = 1, #costArr do
|
||
if BagManager.GetTotalItemNum(costArr[i][1]) < costArr[i][2] then
|
||
return false
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
|
||
---检测四象心法指定职业强化材料是否足够
|
||
function this.CheckIsUpByProfessionId(_professionId)
|
||
local professionInfo = PracticeManager.FourQuadrantData[_professionId]
|
||
local fourQuadConfig = ConfigManager.GetConfigDataByKey(ConfigName.FourQuadrantConfig, "Star", professionInfo.level)
|
||
local costArr = fourQuadConfig.LvupCost
|
||
for i = 1, #costArr do
|
||
if BagManager.GetTotalItemNum(costArr[i][1]) < costArr[i][2] then
|
||
return false
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
|
||
--检测四象心法指定职业强化进度是否可以进阶
|
||
function this.CheckIsUpStarCondition(_professionId)
|
||
local professionInfo = PracticeManager.FourQuadrantData[_professionId]
|
||
if not professionInfo then
|
||
return false
|
||
end
|
||
local fourQuadConfig = ConfigManager.GetConfigDataByKey(ConfigName.FourQuadrantConfig, "Star", professionInfo.level)
|
||
if not professionInfo.propertyList then
|
||
return false
|
||
end
|
||
for i = 1, #fourQuadConfig.PropLimit do
|
||
local propLimitInfo = fourQuadConfig.PropLimit[i]
|
||
local propertyInfo = professionInfo.propertyList[i]
|
||
if not propertyInfo then
|
||
return false
|
||
end
|
||
if propertyInfo.propertyNum < propLimitInfo[2] then
|
||
return false
|
||
end
|
||
end
|
||
return true
|
||
end
|
||
|
||
--============================主角修为部分的代码===========================================
|
||
function this.SetCultivationLevel(_level, func)
|
||
this.CultivationLevel = _level
|
||
if func then
|
||
func()
|
||
end
|
||
end
|
||
|
||
function this.getDataOfCur()
|
||
local maxLevel = 0 --最大等级
|
||
local statePower = 0 --当前升一级需要的战力
|
||
local achivePower = 0 --当前等级已达到的战力
|
||
|
||
local levelList = string.split(ConfigManager.GetConfigData(ConfigName.SpecialConfig, 133).Value, "#")
|
||
local statePowerList = string.split(ConfigManager.GetConfigData(ConfigName.SpecialConfig, 134).Value, "#")
|
||
local limitPowerList = string.split(ConfigManager.GetConfigData(ConfigName.SpecialConfig, 139).Value, "#")
|
||
maxLevel = tonumber(levelList[#levelList])
|
||
|
||
for i = #levelList, 1, -1 do
|
||
if this.CultivationLevel <= tonumber(levelList[i]) then
|
||
statePower = tonumber(statePowerList[i])
|
||
end
|
||
end
|
||
for i = 1, #levelList do
|
||
if this.CultivationLevel <= tonumber(levelList[i]) then
|
||
if levelList[i - 1] then
|
||
achivePower = achivePower + (this.CultivationLevel - tonumber(levelList[i - 1])) * statePower
|
||
break
|
||
else
|
||
achivePower = this.CultivationLevel * statePower
|
||
break
|
||
end
|
||
else
|
||
achivePower = tonumber(limitPowerList[i])
|
||
end
|
||
end
|
||
-- LogGreen("修为等级:"..tostring(this.CultivationLevel).." maxLevel:"..tostring(maxLevel).." statePower:"..tostring(statePower).." achivePower:"..tostring(achivePower).." 最高战力:"..tostring(PlayerManager.maxForce))
|
||
return maxLevel, statePower, achivePower
|
||
end
|
||
|
||
function this.CheckPlayerCultivetionRed()
|
||
if xiuWeiSystemConfig.IsOpen == 0 then
|
||
return false
|
||
end
|
||
|
||
local maxLevel, statePower, achivePower = this.getDataOfCur()
|
||
if maxLevel > this.CultivationLevel then
|
||
FormationManager.UserPowerChanged()
|
||
if (PlayerManager.maxForce - achivePower) > statePower then
|
||
return true
|
||
end
|
||
end
|
||
return false
|
||
end
|
||
|
||
function this.GetCultivationPros()
|
||
local allPros = {}
|
||
local data1 = this.GetCurConfigData().ProRank
|
||
local data2 = this.GetCurConfigData().ProLevel
|
||
for i = 1, #data1 do
|
||
if this.CultivationLevel == 0 then
|
||
allPros[data1[i][1]] = 0
|
||
else
|
||
allPros[data1[i][1]] = data1[i][2] + data2[i][2] * this.CultivationLevel
|
||
--LogRed("Id:"..tostring(data1[i][1]).." value:"..tostring(allPros[data1[i][1]]))
|
||
end
|
||
end
|
||
return allPros
|
||
end
|
||
|
||
return PracticeManager
|