469 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Lua
		
	
			
		
		
	
	
			469 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Lua
		
	
IncarnationManager = {}
 | 
						|
local this = IncarnationManager
 | 
						|
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
 | 
						|
local ChangingCard = ConfigManager.GetConfig(ConfigName.ChangingCard)
 | 
						|
local PassiveSkillConfig = ConfigManager.GetConfig(ConfigName.PlayerSkill)
 | 
						|
local PropertyConfig = ConfigManager.GetConfig(ConfigName.PropertyConfig)
 | 
						|
this.itemDataList = {}          --state   -1  未拥有            0 已有未激活             1激活未上阵                2上阵
 | 
						|
this.SingleIncarnationPro = {}
 | 
						|
this.SingleIncarnationProDes = ""
 | 
						|
this.incarnationForceLv=1 --化身之力等级id
 | 
						|
function this.Initialize()
 | 
						|
    this.InitItemDataList()
 | 
						|
end
 | 
						|
 | 
						|
function this.InitItemDataList()
 | 
						|
    for k,v in ConfigPairs(ChangingCard) do
 | 
						|
        this.CreatEmptyItemData(v.Id)
 | 
						|
    end
 | 
						|
    local config = ConfigManager.GetConfigData(ConfigName.SpecialConfig,138)
 | 
						|
    local strs = string.split(config.Value,"|")
 | 
						|
    for i = 1,#strs do
 | 
						|
        local str = string.split(strs[i],"#")
 | 
						|
        local proId = tonumber(str[1])
 | 
						|
        local proNum = tonumber(str[2])
 | 
						|
        if not this.SingleIncarnationPro[proId] then
 | 
						|
            this.SingleIncarnationPro[proId] = 0
 | 
						|
        end
 | 
						|
        this.SingleIncarnationPro[proId] = this.SingleIncarnationPro[proId] + proNum
 | 
						|
    end
 | 
						|
    this.SingleIncarnationProDes = ""
 | 
						|
    this.SingleIncarnationProDes = this.GetproDesStr(this.SingleIncarnationProDes,this.SingleIncarnationPro)
 | 
						|
    Game.GlobalEvent:AddEvent(GameEvent.Bag.GetNewItemIncarnation, this.GetbagIncarnationData)
 | 
						|
end
 | 
						|
 | 
						|
function this.CreatEmptyItemData(id)
 | 
						|
    if id==nil then
 | 
						|
        return
 | 
						|
    end
 | 
						|
    if ChangingCard[id].IsOpen == 0 then
 | 
						|
        return
 | 
						|
    end
 | 
						|
    --以state字段来判断状态     pos 字段只是位置,不做判断
 | 
						|
    if not this.itemDataList[id] then
 | 
						|
        this.itemDataList[id] = {}
 | 
						|
        this.itemDataList[id].id = id
 | 
						|
        this.itemDataList[id].level=1
 | 
						|
        this.itemDataList[id].star=0
 | 
						|
        this.itemDataList[id].itemId = ChangingCard[id].CardId
 | 
						|
        this.itemDataList[id].name = itemConfig[ChangingCard[id].CardId].Name
 | 
						|
        this.itemDataList[id].state = -1    
 | 
						|
        this.itemDataList[id].pos = 0
 | 
						|
        this.itemDataList[id].property = itemConfig[ChangingCard[id].CardId].PropertyName
 | 
						|
        this.itemDataList[id].quality = itemConfig[ChangingCard[id].CardId].Quantity
 | 
						|
        this.itemDataList[id].icon = itemConfig[ChangingCard[id].CardId].ResourceID
 | 
						|
        this.itemDataList[id].heroId = ChangingCard[id].desc2
 | 
						|
        this.itemDataList[id].proDatas =this.GetChangeCardProperty(id)       
 | 
						|
        this.itemDataList[id].skillDatas = ChangingCard[id].Skill[1]
 | 
						|
       
 | 
						|
    end            
 | 
						|
end
 | 
						|
 | 
						|
function this.GetproDesStr(_str,dataList)
 | 
						|
    local str = _str
 | 
						|
    for k,v in pairs(dataList) do
 | 
						|
        str = str..PropertyConfig[k].Info.."+"..GetPropertyFormatStrOne(PropertyConfig[k].Style,v).."  "
 | 
						|
    end
 | 
						|
    return str
 | 
						|
end
 | 
						|
--获取化身卡指定星级的技能描述
 | 
						|
function this.GetSkillDesStr(id,Star)
 | 
						|
    local skillId= ChangingCard[id].Skill[Star+1]
 | 
						|
    local skillDes= PassiveSkillConfig[skillId].Desc
 | 
						|
    return skillDes
 | 
						|
end
 | 
						|
---获取属性信息和技能信息
 | 
						|
function this.GetCardPropDesStr(id)
 | 
						|
    local proDesList = {}
 | 
						|
    local str = "激活属性:"
 | 
						|
    str = this.GetproDesStr(str,this.itemDataList[id].proDatas)
 | 
						|
    table.insert(proDesList,str)
 | 
						|
    local skillDes = PassiveSkillConfig[this.itemDataList[id].skillDatas].Desc
 | 
						|
    table.insert(proDesList,skillDes)
 | 
						|
    return proDesList
 | 
						|
end
 | 
						|
 | 
						|
function this.GetproDesLst(dataList,_color)
 | 
						|
    local lis1 = {}
 | 
						|
    for k,v in pairs(dataList) do
 | 
						|
        table.insert(lis1,{str = string.format("<color=#%s>%s+%s</color>",_color,PropertyConfig[k].Info,GetPropertyFormatStrOne(PropertyConfig[k].Style,v)) ,sort = PropertyConfig[k].SortId})
 | 
						|
    end
 | 
						|
    table.sort(lis1,function(a,b)
 | 
						|
        return a.sort < b.sort
 | 
						|
    end)
 | 
						|
    local list = {}
 | 
						|
    for i = 1,#lis1 do
 | 
						|
        table.insert(list,lis1[i].str)
 | 
						|
    end
 | 
						|
    return list
 | 
						|
end
 | 
						|
 | 
						|
-- 初始化赋值操作 _incarnationForceLv化身之力等级id
 | 
						|
function this.SetItemDataList(dataList,_incarnationForceLv)
 | 
						|
    for i = 1,#dataList do
 | 
						|
        local state = dataList[i].status
 | 
						|
        if dataList[i].status == 0 then
 | 
						|
            state = 1
 | 
						|
        elseif dataList[i].status == 1 then
 | 
						|
            state = 2
 | 
						|
        end
 | 
						|
        this.SetItemDataByid(dataList[i].id,state,dataList[i].index)
 | 
						|
        this.SetLevel(dataList[i].id,dataList[i].level)
 | 
						|
        this.SetStar(dataList[i].id,dataList[i].star)
 | 
						|
        this.SetSkillData(dataList[i].id)
 | 
						|
        this.SetPropDatas(dataList[i].id)
 | 
						|
    end
 | 
						|
    this.incarnationForceLv=_incarnationForceLv
 | 
						|
    HeroPropManager.SetFuncPropDirty(Func_Prop_Type.Incarnation)
 | 
						|
end
 | 
						|
 | 
						|
function this.GetbagIncarnationData()
 | 
						|
    local data = BagManager.GetDataByItemType(ItemType.Incarnation)
 | 
						|
    for i = 1,#data do
 | 
						|
        this.SetItemDataByCardId(data[i].id)
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
function this.SetItemDataByCardId(id)
 | 
						|
    local config = ConfigManager.TryGetConfigDataByKey(ConfigName.ChangingCard,"CardId",id)
 | 
						|
    if config then
 | 
						|
        if this.itemDataList[config.Id] and this.itemDataList[config.Id].state < 1 then
 | 
						|
            if BagManager.GetItemCountById(id) > 0 then
 | 
						|
                this.SetItemDataByid(config.Id,0,0)
 | 
						|
            else
 | 
						|
                this.SetItemDataByid(config.Id,-1,0)
 | 
						|
            end
 | 
						|
        end
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
function this.SetItemDataByid(id,state,pos)
 | 
						|
    if not this.itemDataList[id] then
 | 
						|
        this.CreatEmptyItemData(id)
 | 
						|
    end
 | 
						|
    this.itemDataList[id].state = state
 | 
						|
    this.itemDataList[id].pos = pos
 | 
						|
    CheckRedPointStatus(this.itemDataList[id].property + 43801)
 | 
						|
end
 | 
						|
 | 
						|
function this.SetLevel(id,level)
 | 
						|
    if level<=0 then
 | 
						|
        this.itemDataList[id].level=1
 | 
						|
    else 
 | 
						|
        this.itemDataList[id].level=level
 | 
						|
    end
 | 
						|
end
 | 
						|
 | 
						|
function this.SetStar(id,star)
 | 
						|
    this.itemDataList[id].star=star
 | 
						|
end
 | 
						|
--设置激活技能数据
 | 
						|
function this.SetSkillData(id)
 | 
						|
    local changeCardData=this.itemDataList[id]
 | 
						|
    changeCardData.skillDatas = ChangingCard[id].Skill[changeCardData.star+1]
 | 
						|
end
 | 
						|
--设置变身卡所有属性加成
 | 
						|
function this.SetPropDatas(id)
 | 
						|
    this.itemDataList[id].proDatas =this.GetChangeCardProperty(id)       
 | 
						|
end
 | 
						|
 | 
						|
function this.GetStatusByItemId(id)
 | 
						|
    local config = ConfigManager.TryGetConfigDataByKey(ConfigName.ChangingCard,"CardId",id)
 | 
						|
    if config then
 | 
						|
        return this.itemDataList[config.Id].state
 | 
						|
    end
 | 
						|
    return -1
 | 
						|
end
 | 
						|
 | 
						|
 | 
						|
 | 
						|
local sortData = {
 | 
						|
    [-1] = 0,
 | 
						|
    [0] = 2,
 | 
						|
    [1] = 1,
 | 
						|
    [2] = 1,
 | 
						|
}
 | 
						|
 | 
						|
--根据属性获取化身数据
 | 
						|
function this.GetItemDataListByPro(property)
 | 
						|
    local datas = {}
 | 
						|
    for k,v in pairs(this.itemDataList) do
 | 
						|
        if v.property == property then
 | 
						|
            table.insert(datas,v)
 | 
						|
        end
 | 
						|
    end
 | 
						|
    table.sort(datas,function(a,b)
 | 
						|
        if sortData[a.state] == sortData[b.state] then
 | 
						|
            if a.quality == b.quality then
 | 
						|
                return a.id < b.id
 | 
						|
            else
 | 
						|
                return a.quality > b.quality
 | 
						|
            end
 | 
						|
        else
 | 
						|
            return sortData[a.state] > sortData[b.state]
 | 
						|
        end
 | 
						|
    end)
 | 
						|
    return datas
 | 
						|
end
 | 
						|
 | 
						|
--获取化身之力属性加成
 | 
						|
function this.GetIncarnationPower()
 | 
						|
    local id =this.incarnationForceLv
 | 
						|
    if id==0 then
 | 
						|
        id=1
 | 
						|
    end
 | 
						|
    local lvConfig=ConfigManager.GetConfigData(ConfigName.ChangingForce,id)
 | 
						|
    local proList=lvConfig.PropList
 | 
						|
    return proList
 | 
						|
end
 | 
						|
---获取身外化身所有属性加成
 | 
						|
function this.GetIncarnationTotalPro()
 | 
						|
    local proList = {}
 | 
						|
    for k,v in pairs(this.itemDataList) do
 | 
						|
        if v.state > 0 then
 | 
						|
            for k,v in pairs(v.proDatas)  do
 | 
						|
                if not proList[k] then
 | 
						|
                    proList[k] = 0
 | 
						|
                end
 | 
						|
                proList[k] = proList[k] + v
 | 
						|
            end
 | 
						|
        end
 | 
						|
    end
 | 
						|
    local proList1 = this.GetIncarnationPower()
 | 
						|
    for k,v in pairs(proList1) do
 | 
						|
        if not proList[v[1]] then
 | 
						|
            proList[v[1]] = 0
 | 
						|
        end
 | 
						|
        proList[v[1]] = proList[v[1]] + v[2]
 | 
						|
    end
 | 
						|
    return proList
 | 
						|
end
 | 
						|
 | 
						|
--获取已上阵的变身卡  --界面获取
 | 
						|
function this.GetIncarnationData1()
 | 
						|
    local datas = {}
 | 
						|
    for k,v in pairs(this.itemDataList) do
 | 
						|
        if v.state == 2 then
 | 
						|
            datas[v.pos] = v
 | 
						|
        end
 | 
						|
    end
 | 
						|
    return datas
 | 
						|
end
 | 
						|
 | 
						|
--获取已上阵的变身卡  --战斗获取
 | 
						|
function this.GetIncarnationData()
 | 
						|
    local datas = {}
 | 
						|
    for k,v in pairs(this.itemDataList) do
 | 
						|
        if v.state == 2 then
 | 
						|
            table.insert(datas,v.id)
 | 
						|
        end
 | 
						|
    end
 | 
						|
    return datas
 | 
						|
end
 | 
						|
 | 
						|
--获取已上阵的变身卡  --战斗获取
 | 
						|
function this.GetIncarnationDataById(id)
 | 
						|
    for k,v in pairs(this.itemDataList) do
 | 
						|
        if v.itemId == id then
 | 
						|
            return v
 | 
						|
        end
 | 
						|
    end
 | 
						|
    return nil
 | 
						|
end
 | 
						|
 | 
						|
function this.CheckRedData(red)
 | 
						|
    local list = {}
 | 
						|
    --return false
 | 
						|
    if red == RedPointType.incarnation_people then
 | 
						|
        list = this.GetItemDataListByPro(1)
 | 
						|
    elseif red == RedPointType.incarnation_buddish then
 | 
						|
        list = this.GetItemDataListByPro(2)
 | 
						|
    elseif red == RedPointType.incarnation_demon then
 | 
						|
        list = this.GetItemDataListByPro(3)
 | 
						|
    else
 | 
						|
        list = this.GetItemDataListByPro(4)
 | 
						|
    end
 | 
						|
    for k,v in pairs(list) do
 | 
						|
        if v.state == 0  then
 | 
						|
            return true
 | 
						|
        end
 | 
						|
        if  v.state>0 and (this.CheckCardUpLvRedData(v.id) or this.CheckCardUpStarRedData(v.id)) then
 | 
						|
            return true
 | 
						|
        end
 | 
						|
    end
 | 
						|
    return false
 | 
						|
end
 | 
						|
 | 
						|
--检测化身卡是否可以升级
 | 
						|
function this.CheckCardUpLvRedData(id)
 | 
						|
    local poolId= ChangingCard[id].LevelUpPool
 | 
						|
    local level= this.itemDataList[id].level
 | 
						|
    local upExp= ConfigManager.GetConfigDataByDoubleKey(ConfigName.ChangingCardLevel,"PoolId",poolId,"Level",level).Exp
 | 
						|
    if upExp then
 | 
						|
        if BagManager.GetItemCountById(upExp[1])>=upExp[2] then
 | 
						|
            return true
 | 
						|
        end
 | 
						|
    end
 | 
						|
    return false
 | 
						|
end
 | 
						|
 | 
						|
--检测化身卡是否可以升星
 | 
						|
function this.CheckCardUpStarRedData(id)
 | 
						|
    local star= this.itemDataList[id].star
 | 
						|
    LogError("id======================"..id.."                star=="..star)
 | 
						|
    local starConfig=ConfigManager.GetConfigDataByDoubleKey(ConfigName.ChangingCardStar,"PoolId",ChangingCard[id].Star,"Level",star)
 | 
						|
    local isShow=true
 | 
						|
    if starConfig and star<ChangingCard[id].StarMax then
 | 
						|
        local cost=starConfig.PropList
 | 
						|
        for i = 1, #cost do
 | 
						|
            if cost[i][1]==0 then
 | 
						|
               local num=BagManager.GetItemCountById(ChangingCard[id].CardId)
 | 
						|
               LogError("num==========="..num.."  cost[i][2]=="..cost[i][2])
 | 
						|
               if num<cost[i][2] then
 | 
						|
                  isShow=false
 | 
						|
               end
 | 
						|
            else
 | 
						|
               local num2=BagManager.GetItemCountById(cost[i][1])
 | 
						|
               LogError("num==========="..num2.."  cost[i][2]=="..cost[i][2])
 | 
						|
               if num2<cost[i][2] then
 | 
						|
                  isShow=false
 | 
						|
               end
 | 
						|
            end
 | 
						|
        end
 | 
						|
    else
 | 
						|
        isShow=false
 | 
						|
    end
 | 
						|
    return isShow
 | 
						|
    -- if star<#starCost then
 | 
						|
    --     local costData=starCost[star+1]
 | 
						|
    --     local allItemList= BagManager.GetBagAllDataByItemType(29)
 | 
						|
    --     local curHaveItemNum=0
 | 
						|
    --     for i, v in pairs(allItemList) do
 | 
						|
    --         if v.quality==costData[1] and v.num>0 then
 | 
						|
    --             curHaveItemNum=curHaveItemNum+v.num
 | 
						|
    --         end
 | 
						|
    --     end
 | 
						|
    --     if curHaveItemNum>=costData[2] then
 | 
						|
    --         return true
 | 
						|
    --     end
 | 
						|
    -- end
 | 
						|
    --return false
 | 
						|
end
 | 
						|
 | 
						|
---检测化身之力红点
 | 
						|
function this.CheckPowerBtnRedData(red)
 | 
						|
    this.configData = ConfigManager.GetConfigData(ConfigName.ChangingForce,this.incarnationForceLv)
 | 
						|
    if not this.configData.ExpCost then
 | 
						|
        return false
 | 
						|
    end
 | 
						|
    local curHaveItemNum=BagManager.GetItemCountById(this.configData.ExpCost[1])
 | 
						|
    local curCostItemNum=this.configData.ExpCost[2]
 | 
						|
    if curHaveItemNum >=curCostItemNum then
 | 
						|
        return true
 | 
						|
    end
 | 
						|
    return false
 | 
						|
end
 | 
						|
 | 
						|
function this.GetChangeCardProperty(cardId,isNextLv,isNextStar)
 | 
						|
    local changeCardInfo=this.itemDataList[cardId]
 | 
						|
    local star=changeCardInfo.star
 | 
						|
    local level=changeCardInfo.level
 | 
						|
    if isNextStar then
 | 
						|
        star=star+1
 | 
						|
    end
 | 
						|
    if isNextLv then
 | 
						|
        level=level+1
 | 
						|
    end
 | 
						|
    
 | 
						|
    if changeCardInfo then
 | 
						|
        local cardConfig=ConfigManager.GetConfigData(ConfigName.ChangingCard,cardId)
 | 
						|
        LogError("cardConfig.Star=="..cardConfig.Star.."     star=="..star)
 | 
						|
        
 | 
						|
        local propList={}
 | 
						|
        for k,v in pairs(cardConfig.PropList) do
 | 
						|
            propList[v[1]]=v[2]
 | 
						|
        end
 | 
						|
        if changeCardInfo then
 | 
						|
            if star>0 then
 | 
						|
                local starConfig=ConfigManager.GetConfigDataByDoubleKey(ConfigName.ChangingCardStar,"PoolId",cardConfig.Star,"Level",star)
 | 
						|
                local startProp
 | 
						|
                -- if star==1 then
 | 
						|
                --     startProp=cardConfig.Star1UpProps
 | 
						|
                -- elseif star==2 then
 | 
						|
                --     startProp=cardConfig.Star2UpProps
 | 
						|
                -- elseif star==3 then
 | 
						|
                --     startProp=cardConfig.Star3UpProps
 | 
						|
                -- elseif star==4 then
 | 
						|
                --     startProp=cardConfig.Star4UpProps
 | 
						|
                -- elseif star==5 then
 | 
						|
                --     startProp=cardConfig.Star5UpProps
 | 
						|
                -- end
 | 
						|
                startProp=starConfig.Exp
 | 
						|
                for k,v in pairs(startProp) do
 | 
						|
                    if propList[v[1]] then
 | 
						|
                        propList[v[1]]=propList[v[1]]+v[2]
 | 
						|
                    else
 | 
						|
                        propList[v[1]]=v[2]
 | 
						|
                    end
 | 
						|
                   
 | 
						|
                end
 | 
						|
            end
 | 
						|
            
 | 
						|
            if level>0 then
 | 
						|
                local cardLvConfig=ConfigManager.GetConfigDataByDoubleKey(ConfigName.ChangingCardLevel,"Level",level,"PoolId",cardConfig.LevelUpPool)
 | 
						|
                for k,v in pairs(cardLvConfig.PropList) do
 | 
						|
                    if propList[v[1]] then
 | 
						|
                        propList[v[1]]=propList[v[1]]+v[2]
 | 
						|
                    else
 | 
						|
                        propList[v[1]]=v[2]
 | 
						|
                    end
 | 
						|
                end
 | 
						|
            end
 | 
						|
        end
 | 
						|
        return propList
 | 
						|
    end
 | 
						|
    return nil
 | 
						|
end
 | 
						|
 | 
						|
function this.GetChangeCardPropertyAdd(cardId,level,star)
 | 
						|
    local cardConfig=ConfigManager.GetConfigData(ConfigName.ChangingCard,cardId)
 | 
						|
    local propList={}
 | 
						|
    for k,v in pairs(cardConfig.PropList) do
 | 
						|
        propList[v[1]]=v[2]
 | 
						|
    end
 | 
						|
    if star>0 then
 | 
						|
        local startProp
 | 
						|
        -- if star==1 then
 | 
						|
        --     startProp=cardConfig.Star1UpProps
 | 
						|
        -- elseif star==2 then
 | 
						|
        --     startProp=cardConfig.Star2UpProps
 | 
						|
        -- elseif star==3 then
 | 
						|
        --     startProp=cardConfig.Star3UpProps
 | 
						|
        -- end
 | 
						|
        local starConfig=ConfigManager.GetConfigDataByDoubleKey(ConfigName.ChangingCardStar,"PoolId",cardConfig.Star,"Level",star)
 | 
						|
        for k,v in pairs(starConfig.Exp) do
 | 
						|
            if propList[v[1]] then
 | 
						|
                propList[v[1]]=propList[v[1]]+v[2]
 | 
						|
            else
 | 
						|
                propList[v[1]]=v[2]
 | 
						|
            end
 | 
						|
           
 | 
						|
        end
 | 
						|
    end
 | 
						|
 | 
						|
    if level>0 then
 | 
						|
        local cardLvConfig=ConfigManager.GetConfigDataByDoubleKey(ConfigName.ChangingCardLevel,"Level",level,"PoolId",cardConfig.LevelUpPool)
 | 
						|
        for k,v in pairs(cardLvConfig.PropList) do
 | 
						|
            if propList[v[1]] then
 | 
						|
                propList[v[1]]=propList[v[1]]+v[2]
 | 
						|
            else
 | 
						|
                propList[v[1]]=v[2]
 | 
						|
            end
 | 
						|
        end
 | 
						|
    end
 | 
						|
    return propList
 | 
						|
end
 | 
						|
 | 
						|
 | 
						|
 | 
						|
return this |