852 lines
30 KiB
Lua
852 lines
30 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",PropertyConfig[id].Info),string.format("+%s",value)
|
||
elseif PropertyConfig[id].Style == 2 then
|
||
return string.format("%s",PropertyConfig[id].Info),string.format("+%s",value).."%"
|
||
end
|
||
else
|
||
if PropertyConfig[id].Style == 1 then
|
||
return string.format("全体英雄%s",PropertyConfig[id].Info),string.format("+%s",value)
|
||
elseif PropertyConfig[id].Style == 2 then
|
||
return string.format("全体英雄%s",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 = ""
|
||
|
||
|
||
clr = XiuXianConfig[level].NameFontColor
|
||
-- LogYellow("name:"..tostring(name).." clr:"..tostring(clr))
|
||
-- return "<color=#"..clr..">"..name.."</color>"
|
||
return name
|
||
|
||
end
|
||
|
||
--获取大境界对应的段位名称
|
||
function this.GetRankNameByLv(lv)
|
||
for i, v in ConfigPairs(XiuXianConfig) do
|
||
if v.RealmId==lv then
|
||
return "<color=#"..v.NameFontColor..">"..v.RealmName.."期".."</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",v.RealmName,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("全体%s+%s",data.Info,_data[2]/100).."%"
|
||
elseif data.Style == 1 then
|
||
return string.format("全体%s+%s",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
|
||
obj:GetComponent("Image").sprite = spLoader:LoadSprite(name)
|
||
end
|
||
|
||
--每次升级小境界弹出tips
|
||
function this.ShowTipsOnUpgrade()
|
||
local prosData = XiuXianConfig[this.PracticeLevel].TotalPros
|
||
if prosData then
|
||
PopupTipPanel.ShowTip("突破成功!")
|
||
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 |