miduo_client/Assets/ManagedResources/~Lua/Modules/MonsterCamp/MonsterCampManager.lua

1113 lines
42 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

MonsterCampManager = {};
local this = MonsterCampManager
local monsterCampConfig = ConfigManager.GetConfig(ConfigName.FloodConfig)
local monsterGroupConfig = ConfigManager.GetConfig(ConfigName.MonsterGroup)
local monsterConfig = ConfigManager.GetConfig(ConfigName.MonsterConfig)
local monterViewConfig = ConfigManager.GetConfig(ConfigName.MonsterViewConfig)
local heroViewConfig = ConfigManager.GetConfig(ConfigName.HeroConfig)
local resConfig = ConfigManager.GetConfig(ConfigName.ArtResourcesConfig)
local CampTowerConfig = ConfigManager.GetConfig(ConfigName.CampTowerConfig)
local campTowerSetting = ConfigManager.GetConfig(ConfigName.CampTowerSetting)
local gameSetting = ConfigManager.GetConfig(ConfigName.GameSetting)
local itemConfig = ConfigManager.GetConfig(ConfigName.ItemConfig)
this.oldpower = 0
--四灵试炼数据
this.fourMonsterData = {}
this.CurOffsetIndex = -1
function this.Initialize()
this.allTreasures = {}
this.allFaXiangs = {}
this.friendHelpHeros = {}
this.isMaxMonsterWave = false
this.monsterWave = 0 -- 当前妖兽波次
this.m_Jump = false -- 跳过战斗设置
----------------------------------------------------------------------四灵试炼------------------------------------------------------------------
local config = {}
for i = 1 ,4 do
this.fourMonsterData[i] = {}
this.fourMonsterData[i].freeTimeId = campTowerSetting[1].FlashTimesPrice[i][1]
this.fourMonsterData[i].buyTimeId = campTowerSetting[1].FlashTimesPrice[i][2]
this.fourMonsterData[i].teamId = campTowerSetting[1].Formation[i]
this.fourMonsterData[i].monsterWave = 0
--0 未开 1已开
this.fourMonsterData[i].openState = 1
this.fourMonsterData[i].freeTime = 0
this.fourMonsterData[i].buyTime = 0
this.fourMonsterData[i].canFightTime = 10
this.fourMonsterData[i].fourElementType = i
end
Game.GlobalEvent:AddEvent(GameEvent.FunctionCtrl.OnFunctionOpen, function(fightId)
if fightId == FUNCTION_OPEN_TYPE.FourElementTrail then
CheckRedPointStatus(RedPointType.PersonTrail)
CheckRedPointStatus(RedPointType.BuddishTrail)
CheckRedPointStatus(RedPointType.DemonTrail)
CheckRedPointStatus(RedPointType.TaoistTrail)
CheckRedPointStatus(RedPointType.PersonTrailHelp)
CheckRedPointStatus(RedPointType.BuddishTrailHelp)
CheckRedPointStatus(RedPointType.DemonTrailHelp)
CheckRedPointStatus(RedPointType.TaoistTrailHelp)
end
end)
Game.GlobalEvent:AddEvent(GameEvent.FunctionCtrl.OnFunctionClose, function(fightId)
if fightId == FUNCTION_OPEN_TYPE.FourElementTrail then
CheckRedPointStatus(RedPointType.PersonTrail)
CheckRedPointStatus(RedPointType.BuddishTrail)
CheckRedPointStatus(RedPointType.DemonTrail)
CheckRedPointStatus(RedPointType.TaoistTrail)
CheckRedPointStatus(RedPointType.PersonTrailHelp)
CheckRedPointStatus(RedPointType.BuddishTrailHelp)
CheckRedPointStatus(RedPointType.DemonTrailHelp)
CheckRedPointStatus(RedPointType.TaoistTrailHelp)
end
end)
end
function this.InitFourMonsterData(msg)
for i = 1 , #msg.info do
local index = msg.info[i].type
this.fourMonsterData[index].monsterWave = msg.info[i].currentFloor
this.fourMonsterData[index].canFightTime = msg.info[i].remainTimes
this.fourMonsterData[index].openState = msg.info[i].overTime
this.GetTimeTip(index)
end
Game.GlobalEvent:DispatchEvent(GameEvent.FourEle.RefreshView)
-- 四灵试炼层数变化会导致神将宝物属性变化
HeroPropManager.SetAllHeroDirtyByType(Hero_Prop_Type.EquipTreasure)
-- 重新计算宝物评分
EquipTreasureManager.SetAllTreasureDirty()
end
--设置扫荡剩余次数
function this.GetTimeTip(campId)
this.fourMonsterData[campId].buyTime = PrivilegeManager.GetPrivilegeRemainValue(this.fourMonsterData[campId].buyTimeId)
this.fourMonsterData[campId].freeTime= PrivilegeManager.GetPrivilegeRemainValue(this.fourMonsterData[campId].freeTimeId) --免费次数
if campId == 1 then
CheckRedPointStatus(RedPointType.PersonTrail)
elseif campId == 2 then
CheckRedPointStatus(RedPointType.BuddishTrail)
elseif campId == 3 then
CheckRedPointStatus(RedPointType.DemonTrail)
elseif campId == 4 then
CheckRedPointStatus(RedPointType.TaoistTrail)
end
return this.fourMonsterData[campId].freeTime,this.fourMonsterData[campId].buyTime
end
function this.GetCost(campId)
local buyTimeId = this.fourMonsterData[campId].buyTimeId
local storeData = ConfigManager.GetConfigDataByDoubleKey(ConfigName.StoreConfig, "StoreId", 7, "Limit", buyTimeId)
--商店表数据
local buyTimes = (PrivilegeManager.GetPrivilegeUsedTimes(buyTimeId) + 1) > PrivilegeManager.GetPrivilegeNumber(buyTimeId)
and PrivilegeManager.GetPrivilegeNumber(buyTimeId) or (PrivilegeManager.GetPrivilegeUsedTimes(buyTimeId) + 1)
return storeData.Id, storeData.Cost[1][1],storeData.Cost[2][buyTimes]
end
--获取当前通过的总层数
function this.GetFourElementTotalWave()
local waves = 0
for k,v in pairs(this.fourMonsterData) do
waves = waves + v.monsterWave
end
return waves
end
-- 当前兽潮层数
function this.GetMonsterCampCurWave()
return this.monsterWave
end
function this.SetMonsterCampCurWave(wave)
this.monsterWave = wave
end
function this.GetCurFourElementMonsterInfo(index)
return this.fourMonsterData[index]
end
--得到从第1层到当前层的数据
function this.GetFourElementMonstersInfo(curType,curWave)
local monsterInfo = {}
local data = ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.CampTowerConfig,"CampId",curType,"FloorId",curWave)
if not data then
data = ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.CampTowerConfig,"CampId",curType,"FloorId",curWave - 1)
end
for i = 1, curWave + data.UpLimitWave do
local tempData = this.GetFourElementMonsterInfoByWave(curType,i)
if tempData then
table.insert(monsterInfo,tempData)
end
end
return monsterInfo
end
function this.GetFourElementMonsterInfoByWave(curType,wave)
local tempConfig = ConfigManager.TryGetConfigDataByDoubleKey(ConfigName.CampTowerConfig,"CampId",curType,"FloorId",wave)
if not tempConfig then
return nil
end
local data = {}
data.id = tempConfig.Id
data.wave = tempConfig.FloorId
--战力
data.power = tempConfig.Force
data.firstReward = {}
--首通奖励
if tempConfig.FirstReward and #tempConfig.FirstReward > 0 then
for i = 1, #tempConfig.FirstReward do
table.insert(data.firstReward,{id = tempConfig.FirstReward[i][1],num = tempConfig.FirstReward[i][2]})
end
end
data.commonReward = {}
--首通奖励
if tempConfig.CommonReward and #tempConfig.CommonReward > 0 then
for i = 1, #tempConfig.CommonReward do
table.insert(data.commonReward,{id = tempConfig.CommonReward[i][1],num = tempConfig.CommonReward[i][2]})
end
end
local monsterGroupId = tempConfig.Monster
-- 默认显示第一只怪
local id = monsterGroupConfig[monsterGroupId].Contents[1][1]
data.monster = monsterGroupConfig[monsterGroupId].Contents[1]
data.monsterConfig = monsterConfig[id]
data.herodata = this.SetSingleMonster(data.monsterConfig.MonsterId)
return data
end
function this.SetSingleMonster(id)
local herodata = {}
local _configData = ConfigManager.GetConfigData(ConfigName.HeroConfig,id)
herodata.heroConfig = _configData
herodata.heroViewConfig = _configData
herodata.live = GetResourcePath(_configData.Live)
herodata.painting = GetResourcePath(_configData.Painting)
herodata.icon = GetResourcePath(_configData.Icon)
herodata.scale = _configData.Scale
herodata.position = _configData.Position
herodata.profession = _configData.Profession
herodata.ProfessionResourceId = _configData.ProfessionResourceId
if GetJobSpriteStrByJobNum(_configData.Profession) then
herodata.professionIcon = GetJobSpriteStrByJobNum(_configData.Profession)
else
herodata.professionIcon = GetJobSpriteStrByJobNum(1)
end
herodata.name = _configData.ReadingName
herodata.property = _configData.PropertyName
return herodata
end
function this.GetMonsterTeamInfo(monsterGroupId)
local bossTeamsInfo = {}
local bossIds = monsterGroupConfig[monsterGroupId].Contents[1]
for i = 1, #bossIds do
local monsterData = {}
if bossIds[i] > 0 then
monsterData.monsterConfig = monsterConfig[bossIds[i]]
monsterData.herodata = this.SetSingleMonster(monsterData.monsterConfig.MonsterId)
end
table.insert(bossTeamsInfo,monsterData)
end
end
function this.StraightBattle(id,type,func,curType,isQuick)
this.oldpower = FormationManager.GetFormationPower(FormationManager.curFormationIndex)
LogGreen("oldpower:"..this.oldpower)
this.curType = curType
local fightId = ConfigManager.GetConfigDataByDoubleKey(ConfigName.CampTowerConfig,"FloorId",id,"CampId",curType).Id
NetManager.FourChallengeDoRequest(fightId,type,function(msg)
if isQuick then
local result = {}
result.drop = msg.drop
-- 设置战斗数据用于统计战斗
local _fightData = BattleManager.GetBattleServerData(msg,0)
this.drop = msg.drop
BattleRecordManager.SetBattleRecord(_fightData)
--用一个变量接收最近的战斗结果
this.lastBattleResult = {
result = msg.result,
hpList = {},
drop = msg.drop,
}
BattleManager.SetLastBattleResult(this.lastBattleResult,BATTLE_TYPE.FOURELEMENT)
if not msg.drop or ((not msg.drop.itemlist or #msg.drop.itemlist < 1)
and (not msg.drop.equipId or #msg.drop.equipId < 1)
and (not msg.drop.Hero or #msg.drop.Hero < 1)
and (not msg.drop.soulEquip or #msg.drop.soulEquip < 1)
and (not msg.drop.pokemon or #msg.drop.pokemon < 1)) then
UIManager.OpenPanel(UIName.BattleFailPopup, nil, true, nil,BATTLE_TYPE.FOURELEMENT)
Game.GlobalEvent:DispatchEvent(GameEvent.FourEle.RefreshView)
else
this.fourMonsterData[curType].monsterWave = id
UIManager.OpenPanel(UIName.BattleWinPopup, nil, false, BATTLE_TYPE.FOURELEMENT, result, true, true,function()
Game.GlobalEvent:DispatchEvent(GameEvent.FourEle.RefreshView)
end)
-- 四灵试炼层数变化会导致神将宝物属性变化
HeroPropManager.SetAllHeroDirtyByType(Hero_Prop_Type.EquipTreasure)
-- 重新计算宝物评分
EquipTreasureManager.SetAllTreasureDirty()
end
else
if type == 0 then
local fightData = BattleManager.GetBattleServerData(msg,0)
this.drop = msg.drop
UIManager.OpenPanel(UIName.BattlePanel, fightData, BATTLE_TYPE.FOURELEMENT,function(result)
if func then
func()
end
if result.result == 0 then
elseif result.result == 1 then
this.fourMonsterData[curType].monsterWave = id
-- 四灵试炼层数变化会导致神将宝物属性变化
HeroPropManager.SetAllHeroDirtyByType(Hero_Prop_Type.EquipTreasure)
-- 重新计算宝物评分
EquipTreasureManager.SetAllTreasureDirty()
end
end)
else
UIManager.OpenPanel(UIName.RewardItemPopup,msg.drop,1,function()
if func then
func()
end
end)
end
end
end)
end
--开始战斗
function this.ExecuteFightBattle(id,type,func,curType,isQuick)
this.StraightBattle(id,type,func,curType,isQuick)
-- -- 请求战斗结果
-- NetManager.GetMonsterFightResult(MonsterCampManager.monsterWave, FormationTypeDef.FORMATION_NORMAL, function (msg)
-- if msg.result == 0 then
-- UIManager.OpenPanel(UIName.BattleFailPopup, nil, false, UIName.MonsterCampPanel)
-- else
-- local result = {}
-- result.drop = msg.enventDrop
-- UIManager.OpenPanel(UIName.BattleWinPopup, nil, false, BATTLE_TYPE.FOURELEMENT, result, true, true)
-- MonsterCampManager.SetMonsterCampCurWave(MonsterCampManager.monsterWave + 1)
-- end
-- end)
end
function this.SaveFormation(curType)
local curFormation = FormationManager.GetFormationByID(3000 + curType)
local data = this.GetFriendHelpHero(curType)
--上阵列表赋值
local choosedList ={}
if data then
for j = 1, #curFormation.teamHeroInfos do
local teamInfo = curFormation.teamHeroInfos[j]
-- 加空判断避免不知名错误
if teamInfo and teamInfo.heroId == data.hero.dynamicId then
data.player.state = 1
else
table.insert(choosedList, {heroId = teamInfo.heroId,position=teamInfo.position})
end
end
FormationManager.SaveFormation(
(3000 + curType),
choosedList,
FormationManager.formationList[(3000 + curType)].teamPokemonInfos
)
end
end
------------------------------四灵试炼 助战---------------------------------------
--创建一个英雄信息
function this.UpdateHeroDatas(_msgHeroData,_msgPlayerData)
local heroData = {}
heroData.soulPrintList={}
heroData.heroBackData=_msgHeroData
heroData.dynamicId = _msgHeroData.id
local _id = _msgHeroData.heroId
heroData.id = _id
heroData.star = _msgHeroData.star
heroData.lv = _msgHeroData.level--30
heroData.breakId=_msgHeroData.breakId
heroData.upStarId=_msgHeroData.starBreakId
heroData.createTime=_msgHeroData.createTimelocal
heroData.lockState = _msgHeroData.lockState
heroData.createtype = _msgHeroData.createtype
heroData.godPrintList={}
local _configData = heroViewConfig[_id]
heroData.changeProId = _msgHeroData.propertyId
heroData.skinId = _msgHeroData.skinId or 0
if heroData.skinId == 0 then
heroData.skinConfig = _configData
heroData.live = GetResourcePath(_configData.Live)
heroData.painting = GetResourcePath(_configData.Painting)
heroData.icon = GetResourcePath(_configData.Icon)
heroData.scale = _configData.Scale
heroData.position = _configData.Position
else
heroData.skinConfig = ConfigManager.GetConfigDataByKey(ConfigName.HeroSkin,"Type",heroData.skinId)
heroData.live = GetResourcePath(heroData.skinConfig.Live)
heroData.painting = GetResourcePath(heroData.skinConfig.Painting)
heroData.icon = GetResourcePath(heroData.skinConfig.Icon)
heroData.scale = heroData.skinConfig.Scale
heroData.position = heroData.skinConfig.Position
end
heroData.heroViewConfig=heroViewConfig[_id]
heroData.maxStar=_configData.MaxRank
local actionPowerRormula= gameSetting[1].ActionPowerRormula
heroData.actionPower=heroData.heroViewConfig.ActionPower+math.floor(((actionPowerRormula[1] * math.pow(heroData.lv, 3) + actionPowerRormula[2] * math.pow(heroData.lv, 2) + actionPowerRormula[3] * heroData.lv + actionPowerRormula[4])))--_msgHeroData.actionPower
heroData.equipIdList=_msgHeroData.equipIdList
for i = 1 , #heroData.equipIdList do
EquipManager.SetEquipUpHeroDid(heroData.equipIdList[i],heroData.dynamicId)
end
-- heroData.homeEquipLv=_msgHeroData.homeEquipLv
heroData.jewels=_msgHeroData.jewels
heroData.faxiang=_msgHeroData.faxiang
if heroData.faxiang then
--LogError("助战身上的法相 heroData.faxiang len==="..#heroData.faxiang.." "..heroData.faxiang[1].." "..heroData.faxiang[2])
end
this.InitBaoDatas(_msgPlayerData.jewels,_msgPlayerData.fourTotal,_msgPlayerData.treeLevel)
this.InitFaXiangDatas(_msgPlayerData.faxiang)
for i = 1 , #heroData.jewels do
this.SetEquipTreasureUpHeroDid(heroData.jewels[i],heroData.dynamicId)
end
heroData.talismanList = _msgHeroData.especialEquipLevel --法宝等级
if(#_msgHeroData.soulPos>=1) then
local soulPrintList = {}
for i,v in ipairs(_msgHeroData.soulPos) do
local soulPrint = { equipId = v.equipId, position = v.position}
-- SoulPrintManager.AddSoulPrintUpHeroDynamicId(v.equipId,heroData.dynamicId)
table.insert(soulPrintList, soulPrint)
end
heroData.soulPrintList= soulPrintList
end
if(#_msgHeroData.godSeals>=1) then
local godPrintList = {}
for i,v in ipairs(_msgHeroData.godSeals) do
local godPrint = { equipId = v.equipId, position = v.position}
-- SoulPrintManager.AddSoulPrintUpHeroDynamicId(v.equipId,heroData.dynamicId)
table.insert(godPrintList, godPrint)
end
heroData.godPrintList= godPrintList
end
heroData.heroConfig = heroViewConfig[_id]
heroData.skillIdList={}--主动技
HeroManager.UpdateSkillIdList(heroData)
heroData.passiveSkillList = {}--被动技
HeroManager.UpdatePassiveHeroSkill(heroData)
heroData.hp = _configData.Hp
heroData.attack = _configData.Attack
heroData.pDef = _configData.PhysicalDefence
heroData.mDef = _configData.MagicDefence
heroData.speed = _configData.Speed
heroData.live = GetResourcePath(_configData.Live)
heroData.profession = _configData.Profession
heroData.ProfessionResourceId= _configData.ProfessionResourceId
if GetJobSpriteStrByJobNum(_configData.Profession) then
heroData.professionIcon = GetJobSpriteStrByJobNum(_configData.Profession)
else
heroData.professionIcon = GetJobSpriteStrByJobNum(1)
end
heroData.name = _configData.ReadingName
heroData.property = _msgHeroData.propertyId
heroData.createtype = 1
heroData.warPower = 0
heroData.godSoulLv = _msgHeroData.godSoulLv or 0
heroData.GetStar = function(index)
if heroData.godSoulLv and heroData.godSoulLv > 0 then
return heroData.godSoulLv,3
elseif heroData.star > 9 then
return heroData.star,2
end
return heroData.star,index
end
return heroData
end
--宝器
local jewelConfig = ConfigManager.GetConfig(ConfigName.JewelConfig)
function this.InitBaoDatas(_soulEquips,_fourTotal,_treeLevel)
if not this.allTreasures then
this.allTreasures = {}
end
if not _soulEquips then return end
for i = 1, #_soulEquips do
this.InitSingleTreasureData(_soulEquips[i],_fourTotal,_treeLevel)
end
end
function this.InitFaXiangDatas(_soulEquips)
if not this.allFaXiangs then
this.allFaXiangs = {}
end
if not _soulEquips then return end
for i = 1, #_soulEquips do
this.InitSingleFaXiangData(_soulEquips[i])
end
end
local faXiangConfig=ConfigManager.GetConfig(ConfigName.FaxiangConfig)
--初始化单个宝物的数据
function this.InitSingleFaXiangData(_singleData,herodata)
if _singleData == nil then
return
end
local single = {}
local staticId = _singleData.equipId
local currJewel = faXiangConfig[staticId]
single.faXiangConfig=currJewel
single.equipType = currJewel.Location
single.id = staticId
single.idDyn = _singleData.id
single.lv = _singleData.exp
single.refineLv = _singleData.rebuildLevel --星级
single.fourSpirit=_singleData.fourSpirit
single.maxLv = currJewel.LevelMax
single.maxRefineLv = currJewel.StarMax
--single.upHeroDid = herodata.dynamicId
-- single.race = currJewel.Race
single.itemConfig = itemConfig[staticId]
single.quantity = single.itemConfig.Quantity
single.name = GetLanguageStrById(itemConfig[staticId].Name)
single.frame = GetQuantityImageByquality(itemConfig[staticId].Quantity)
single.levelPool = currJewel.LevelUpPool
single.refinePool = currJewel.Star
single.equipType = currJewel.Type
local quantity = currJewel.Level
single.icon = GetResourcePath(itemConfig[staticId].ResourceID)
single.strongConfig = this.GetCurrTreasureLvConfig(currJewel.LevelUpPool, _singleData.exp)
single.refineConfig = this.GetCurrTreasureLvConfig(2, currJewel.Star, _singleData.rebuildLevel)
this.allFaXiangs[single.idDyn] = single
-- end
end
--初始化单个宝物的数据
function this.InitSingleTreasureData(_singleData,_fourTotal,_treeLevel)
if not _singleData or not _singleData.equipId then
return
end
local single={}
local staticId=_singleData.equipId
local currJewel=jewelConfig[staticId]
single.id=staticId
single.idDyn=_singleData.id
single.lv=_singleData.exp
single.refineLv=_singleData.rebuildLevel
single.maxLv=currJewel.Max[1]
single.maxRefineLv=currJewel.Max[2]
single.upHeroDid=""
single.maxTreeLv = currJewel.GodHoodMaxlv
single.treeLv = _treeLevel
single.treePool = currJewel.GodHoodPool
single.fourTotal = _fourTotal
local quantity=currJewel.Level
single.quantity=quantity
single.frame=GetQuantityImageByquality(quantity)
single.name=itemConfig[staticId].Name
single.itemConfig=itemConfig[staticId]
single.levelPool=currJewel.LevelupPool
single.proIcon=GetProStrImageByProNum(currJewel.Race)
single.refinePool=currJewel.RankupPool
single.equipType=currJewel.Location
if currJewel.Location==1 then
single.type=Language[10505]
else
single.type=Language[10506]
end
single.icon=GetResourcePath(itemConfig[staticId].ResourceID)
single.strongConfig=this.GetCurrTreasureLvConfig(1,currJewel.LevelupPool,_singleData.exp)
single.refineConfig=this.GetCurrTreasureLvConfig(2,currJewel.RankupPool,_singleData.rebuildLevel)
this.allTreasures[_singleData.id]=single
end
local jewerLevelUpConfig = ConfigManager.GetConfig(ConfigName.JewelRankupConfig)
--获取当前宝物升级数据
function this.GetCurrTreasureLvConfig(_type,_id,_lv)
for _, configInfo in ConfigPairs(jewerLevelUpConfig) do
if configInfo.Type==_type and configInfo.PoolID==_id and configInfo.Level==_lv then
return configInfo
end
end
end
--根据动态id获取宝物
function this.GetSingleTreasureByIdDyn(_idDyn)
if not this.allTreasures[_idDyn] == nil then
return nil
end
return this.allTreasures[_idDyn]
end
--根据动态id获取法相
function this.GetSingleFaXiangByIdDyn(_idDyn)
if not this.allFaXiangs[_idDyn] == nil then
return nil
end
return this.allFaXiangs[_idDyn]
end
--设置装备穿戴的英雄
function this.SetEquipTreasureUpHeroDid(_equipTreasureDid,_heroDid)
if this.allTreasures[_equipTreasureDid] then
this.allTreasures[_equipTreasureDid].upHeroDid=_heroDid
end
end
-----
---好友助战 界面数据
function this.GetFriendHelpHeros(trailType,func)
this.friendHelpHeros = {}
local x = function(msg)
for k,v in ipairs(msg.helpHeros) do
if not this.friendHelpHeros[v.trailType] then
this.friendHelpHeros[v.trailType] = {}
end
local tempdata = {}
tempdata.player = v
tempdata.hero = this.UpdateHeroDatas(v.hero,v)
table.insert(this.friendHelpHeros[v.trailType],tempdata)
local power = HeroPowerManager.GetHeroPower(tempdata.hero.dynamicId)
-- local allAddProVal = HeroManager.CalculateHeroAllProValList(1, tempdata.hero, false)
tempdata.hero.warPower = power--allAddProVal[HeroProType.WarPower]
end
if func then
func(this.friendHelpHeros[trailType])
end
end
--发消息获取信息 然后调用回调函数x
if trailType and trailType > 0 then
NetManager.HelpFightListRequest(trailType,x)
end
end
--设置好友帮助我的英雄 以试炼类型为键
function this.SetFriendHelpHero(helpFightList,trailType)
if not trailType then
for i = 1,4 do
local team = FormationManager.GetFormationByID(i + 3000)
if this.friendHelpHero and this.friendHelpHero[i] and this.friendHelpHero[i].hero then
local newteam = {}
for k,v in ipairs(team.teamHeroInfos) do
if v.heroId == this.friendHelpHero[i].hero.dynamicId then
else
table.insert(newteam,v)
end
end
if LengthOfTable(newteam) ~= LengthOfTable(team.teamHeroInfos) then
FormationManager.SaveFormation(
i + 3000,
newteam,
FormationManager.formationList[i + 3000].teamPokemonInfos)
end
end
end
this.friendHelpHero = {}
if helpFightList then
for k,v in ipairs(helpFightList) do
if not this.friendHelpHero[v.trailType] then
this.friendHelpHero[v.trailType] = {}
end
this.friendHelpHero[v.trailType].player = v
this.friendHelpHero[v.trailType].hero = this.UpdateHeroDatas(v.hero,v)
local allAddProVal = HeroManager.CalculateHeroAllProValList(1, this.friendHelpHero[v.trailType].hero, false)
this.friendHelpHero[v.trailType].hero.warPower = allAddProVal[HeroProType.WarPower]
end
end
Game.GlobalEvent:DispatchEvent(GameEvent.Formation.OnFormationChange1)
else
if not this.friendHelpHero then
this.friendHelpHero = {}
end
if not this.friendHelpHero[trailType] then
this.friendHelpHero[trailType] = {}
end
local team = FormationManager.GetFormationByID(trailType + 3000)
if this.friendHelpHero[trailType].hero then
local newteam = {}
for k,v in ipairs(team.teamHeroInfos) do
if v.heroId == this.friendHelpHero[trailType].hero.dynamicId then
else
table.insert(newteam,v)
end
end
if LengthOfTable(newteam) ~= LengthOfTable(team.teamHeroInfos) then
FormationManager.SaveFormation(
trailType + 3000,
newteam,
FormationManager.formationList[trailType + 3000].teamPokemonInfos)
end
end
if helpFightList then
if this.friendHelpHero[trailType].hero then
local newteam = {}
for k,v in ipairs(team.teamHeroInfos) do
if v.heroId == this.friendHelpHero[trailType].hero.dynamicId then
else
table.insert(newteam,v)
end
end
if LengthOfTable(newteam) ~= LengthOfTable(team.teamHeroInfos) then
FormationManager.SaveFormation(
this.root.curFormationIndex,
this.root.choosedList,
FormationManager.formationList[this.root.curFormationIndex].teamPokemonInfos)
end
end
this.friendHelpHero[trailType].player = helpFightList
this.friendHelpHero[trailType].hero = this.UpdateHeroDatas(helpFightList.hero,helpFightList)
-- local allAddProVal = HeroManager.CalculateHeroAllProValList(1, this.friendHelpHero[trailType].hero, false)
local power = HeroPowerManager.GetHeroPower(helpFightList.hero.id)
this.friendHelpHero[trailType].hero.warPower = power -- allAddProVal[HeroProType.WarPower]
else
this.friendHelpHero[trailType] = nil
end
end
end
--获取当前试炼我选取的好友的助战
function this.GetFriendHelpHero(trailType,heros)
if heros then
local lvLimit = 0
if trailType then lvLimit = trailType end
for i, v in pairs(this.friendHelpHero) do
if v and v.hero and v.hero.lv > lvLimit then
table.insert(heros,v.hero)
end
end
return heros
else
if this.friendHelpHero[trailType] then
return this.friendHelpHero[trailType]
end
end
return nil
end
--设置助战
function this.SetMyHelpHeroData(trail,_data,func)
if not trail then
this.myHelpHeroData = {}
local x = function(msg)
for k,v in ipairs(msg.helpHeros) do
if not this.myHelpHeroData[v.trailType] then
this.myHelpHeroData[v.trailType] = {}
end
this.myHelpHeroData[v.trailType] = HeroManager.GetSingleHeroData(v.hero.id)
end
CheckRedPointStatus(RedPointType.PersonTrail)
CheckRedPointStatus(RedPointType.BuddishTrail)
CheckRedPointStatus(RedPointType.DemonTrail)
CheckRedPointStatus(RedPointType.TaoistTrail)
CheckRedPointStatus(RedPointType.PersonTrailHelp)
CheckRedPointStatus(RedPointType.BuddishTrailHelp)
CheckRedPointStatus(RedPointType.DemonTrailHelp)
CheckRedPointStatus(RedPointType.TaoistTrailHelp)
end
--发协议获取 调用x
NetManager.HelpFightListRequest(0,x)
else
if not this.myHelpHeroData then
this.myHelpHeroData = {}
end
if not this.myHelpHeroData[trail] then
this.myHelpHeroData[trail] = {}
end
this.myHelpHeroData[trail] = _data
if trail == 1 then
CheckRedPointStatus(RedPointType.PersonTrail)
elseif trail == 2 then
CheckRedPointStatus(RedPointType.BuddishTrail)
elseif trail == 3 then
CheckRedPointStatus(RedPointType.DemonTrail)
elseif trail == 4 then
CheckRedPointStatus(RedPointType.TaoistTrail)
end
end
if func then
func()
end
end
--获取我的助战
function this.GetMyHelpHero(trailType)
if this.myHelpHeroData[trailType] then
return this.myHelpHeroData[trailType]
end
return nil
end
--获取一个英雄信息
function this.GetSingleHeroData(did)
if not this.friendHelpHeros then
this.friendHelpHeros = {}
end
for _,v in pairs(this.friendHelpHeros) do
for i = 1 ,#v do
if v[i] and v[i].hero and v[i].hero.dynamicId == did then
return v[i].hero
end
end
end
for _,v in pairs(this.friendHelpHero) do
if v and v.hero and v.hero.dynamicId == did then
return v.hero
end
end
return nil
end
------------------------------四灵试炼 红点---------------------------------------
-- 红点检测方法
function this.FourElementRedCheck(redType)
if not ActTimeCtrlManager.IsQualifiled(FUNCTION_OPEN_TYPE.FourElementTrail) then
return false
end
if redType == RedPointType.PersonTrail then
if this.fourMonsterData[1] and this.fourMonsterData[1].openState > 0 then
if this.fourMonsterData[1].freeTime > 0 then
return true
end
end
return this.CheckHelpFightRedPoint(RedPointType.PersonTrailHelp)
elseif redType == RedPointType.BuddishTrail then
if this.fourMonsterData[2] and this.fourMonsterData[2].openState > 0 then
if this.fourMonsterData[2].freeTime > 0 then
return true
end
end
return this.CheckHelpFightRedPoint(RedPointType.BuddishTrailHelp)
elseif redType == RedPointType.DemonTrail then
if this.fourMonsterData[3] and this.fourMonsterData[3].openState > 0 then
if this.fourMonsterData[3].freeTime > 0 then
return true
end
end
return this.CheckHelpFightRedPoint(RedPointType.DemonTrailHelp)
elseif redType == RedPointType.TaoistTrail then
if this.fourMonsterData[4] and this.fourMonsterData[4].openState > 0 then
if this.fourMonsterData[4].freeTime > 0 then
return true
end
end
return this.CheckHelpFightRedPoint(RedPointType.TaoistTrailHelp)
end
return false
end
function this.CheckHelpFightRedPoint(redType)
if not ActTimeCtrlManager.IsQualifiled(FUNCTION_OPEN_TYPE.FourElementTrail) then
return false
end
if redType == RedPointType.PersonTrailHelp then
local heros = HeroManager.GetHeroDataByProperty(1,0)
if not heros or #heros < 1 then
return false
end
if this.fourMonsterData[1] and this.fourMonsterData[1].openState > 0 then
if not this.GetMyHelpHero(1) then
return true
end
end
return false
elseif redType == RedPointType.BuddishTrailHelp then
local heros = HeroManager.GetHeroDataByProperty(2,0)
if not heros or #heros < 1 then
return false
end
if this.fourMonsterData[2] and this.fourMonsterData[2].openState > 0 then
if not this.GetMyHelpHero(2) then
return true
end
end
return false
elseif redType == RedPointType.DemonTrailHelp then
local heros = HeroManager.GetHeroDataByProperty(3,0)
if not heros or #heros < 1 then
return false
end
if this.fourMonsterData[3] and this.fourMonsterData[3].openState > 0 then
if not this.GetMyHelpHero(3) then
return true
end
end
return false
elseif redType == RedPointType.TaoistTrailHelp then
local heros = HeroManager.GetHeroDataByProperty(4,0)
if not heros or #heros < 1 then
return false
end
if this.fourMonsterData[4] and this.fourMonsterData[4].openState > 0 then
if not this.GetMyHelpHero(4) then
return true
end
end
return false
end
end
function this.SetRewardWave(waves)
if not this.getRewardWave then
this.getRewardWave = {}
end
for i = 1 ,#waves do
if not this.getRewardWave[waves[i]] then
this.getRewardWave[waves[i]] = waves[i]
end
end
end
----------------------------------------------------------------------四灵试炼------------------------------------------------------------------
-- 返回5个大虾的信息, 显示怪物的第一个,
function this.GetNextWaveMonsterInfo()
local curWave = this.monsterWave
local monsterInfo = {}
--遇到表格的结尾处,则停止
for i = curWave + 1, curWave + 5 do
if not monsterCampConfig[i] then break end
local data = {}
data.rewardShow = monsterCampConfig[i].RewardShow
local monsterGroupId = monsterCampConfig[i].Monster
-- 默认显示第一只怪
local id = monsterGroupConfig[monsterGroupId].Contents[1][1]
local monsterId = monsterConfig[id].MonsterId
local resId = 0
if monsterId > 10000 then -- 这是人类
resId = heroViewConfig[monsterId].Icon
else -- 这是妖精
resId = monterViewConfig[monsterId].MonsterIcon
end
local resPath = GetResourcePath(resId)
local icon = resPath
data.icon = icon
data.name = GetLanguageStrById(resConfig[resId].Desc)
monsterInfo[i] = data
end
return monsterInfo
end
-- 返回当前怪物阵容信息
function this.GetCurMonsterInfo()
local curWave = this.monsterWave
local monsterInfo = {}
local mainMonsterInfo = {}
local data = {}
data.icon = {}
data.level={}
data.rewardShow = monsterCampConfig[curWave].RewardShow
local monsterGroupId = monsterCampConfig[curWave].Monster
local ids = monsterGroupConfig[monsterGroupId].Contents
for i = 1, #ids do
for j = 1, #ids[i] do
-- 所有怪信息
local monsterId = monsterConfig[ids[i][j]].MonsterId
local resId = 0
if monsterId > 10000 then -- 这是人类
resId = heroViewConfig[monsterId].Icon
else -- 这是妖精
resId = monterViewConfig[monsterId].MonsterIcon
end
local resPath = GetResourcePath(resId)
local icon = resPath
data.icon[#data.icon + 1] = icon
data.level[j]= monsterConfig[ids[i][j]].Level
-- 主怪信息
if i == 1 and j == 1 then
mainMonsterInfo.name = GetLanguageStrById(resConfig[resId].Desc)
mainMonsterInfo.live2dPath = resConfig[resId].Name
mainMonsterInfo.monsterId = monsterId
end
end
end
monsterInfo = data
return monsterInfo, mainMonsterInfo
end
-- 消耗道具上限值
function this.GetMaxCostItem()
return PrivilegeManager.GetPrivilegeNumber(23)
end
-- 是否需要回复
function this.IsNeedSupply()
return BagManager.GetItemCountById(53) < this.GetMaxCostItem()
end
--返回当前的怪物组Id
function this.GetCurWaveMonsterGroupId()
if not monsterCampConfig[this.monsterWave] and this.monsterWave > MonsterCampManager.GetMaxNum() then
this.monsterWave = MonsterCampManager.GetMaxNum()
this.isMaxMonsterWave = true
end
return monsterCampConfig[this.monsterWave].Monster
end
-- 通过怪物ID返回头像
function this.GetIconByMonsterId(monsterId)
local resId = 0
local level = 0
local icon
local liveId = monsterConfig[monsterId].MonsterId
if liveId > 10000 then -- 这是人类
resId = heroViewConfig[liveId].Icon
else -- 这是妖精
resId = monterViewConfig[liveId].MonsterIcon
end
level = monsterConfig[monsterId].Level
icon = GetResourcePath(resId)
return icon, level
end
-- 获取表的上限值
function this.GetMaxNum()
local max = 0
for k, v in ConfigPairs(monsterCampConfig) do
max = max > k and max or k
end
return max
end
-- 跳过战斗设置
function this.GetBattleJump()
return false
-- if not this.CheckBattleJump() then
-- return false
-- end
-- return this.m_Jump
end
function this.SetBattleJump(state)
this.m_Jump = state
end
function this.CheckBattleJump()
local isOpen = PrivilegeManager.GetPrivilegeOpenStatus(PRIVILEGE_TYPE.MonsterCampJump)
return isOpen
end
-- 0 已经领取1 可领取2不能领取·
function this.GetTrialRewardState(id)
if id < this.monsterWave then
if this.getRewardWave[id] and this.getRewardWave[id] > 0 then
return 0
else
return 1
end
else
return 2
end
end
function this.SetRewardData()
local dataList = {}
for k,v in ConfigPairs(ConfigManager.GetConfig(ConfigName.FloodConfig)) do
if v.SpecialReward and #v.SpecialReward > 0 then
local data = {}
data.Id = v.Id
data.info = string.format("通过心魔试炼第%s层",v.Id)
data.BoxReward = v.SpecialReward
data.state = this.GetTrialRewardState(v.Id)
table.insert(dataList,data)
end
end
return dataList
end
--新心魔试炼
-- 获取剩余挑战次数 特权
function this.GetCanBattleCount()
return PrivilegeManager.GetPrivilegeRemainValue(PRIVILEGE_TYPE.MONSTERCAMP_BATTLENUM)
end
-- 获取剩余挑战购买次数 特权
function this.GetCanBuyBattleCount()
return PrivilegeManager.GetPrivilegeRemainValue(PRIVILEGE_TYPE.MONSTERCAMP_BUY_BATTLENUM)
end
--心魔试炼特权购买信息
function this.MonsterCampGetCost()
local buyTimeId = PRIVILEGE_TYPE.MONSTERCAMP_BUY_BATTLENUM
local storeData = ConfigManager.GetConfigDataByDoubleKey(ConfigName.StoreConfig, "StoreId", 7, "Limit", buyTimeId)
--商店表数据
local buyTimes = (PrivilegeManager.GetPrivilegeUsedTimes(buyTimeId) + 1) > PrivilegeManager.GetPrivilegeNumber(buyTimeId)
and PrivilegeManager.GetPrivilegeNumber(buyTimeId) or (PrivilegeManager.GetPrivilegeUsedTimes(buyTimeId) + 1)
return storeData.Id, storeData.Cost[1][1],storeData.Cost[2][buyTimes]
end
--心魔试炼特权一键扫荡购买信息
function this.MonsterCampGetYJGMCost()
local buyTimeId = PRIVILEGE_TYPE.MONSTERCAMP_BUY_BATTLENUM
local storeData = ConfigManager.GetConfigDataByDoubleKey(ConfigName.StoreConfig, "StoreId", 7, "Limit", buyTimeId)
--商店表数据
local allNum = PrivilegeManager.GetPrivilegeNumber(buyTimeId)
local useNum = PrivilegeManager.GetPrivilegeUsedTimes(buyTimeId)
local shengNum = allNum - useNum
local maNum = 0
for i = 1, shengNum do
local buyTimes = (PrivilegeManager.GetPrivilegeUsedTimes(buyTimeId) + i) > PrivilegeManager.GetPrivilegeNumber(buyTimeId)
and PrivilegeManager.GetPrivilegeNumber(buyTimeId) or (PrivilegeManager.GetPrivilegeUsedTimes(buyTimeId) + i)
maNum = maNum + storeData.Cost[2][buyTimes]
end
return storeData.Id, storeData.Cost[1][1],maNum,shengNum
end
--获取心魔试炼表数据
function this.GetMonstersInfo()
local datas = {}
local i = 10
for _, configInfo in ConfigPairs(monsterCampConfig) do
if i <= 0 then
break
end
if configInfo.Id > this.monsterWave then
i = i - 1
end
table.insert(datas,configInfo)
end
return datas
end
--扫荡
function this.MonsterCampBattle(id,type,func)
NetManager.FourChallengeDoRequest(id,type,function(msg)
if type == 0 then
local fightData = BattleManager.GetBattleServerData(msg,0)
this.drop = msg.drop
UIManager.OpenPanel(UIName.BattlePanel, fightData, BATTLE_TYPE.FOURELEMENT,function(result)
if func then
func()
end
-- if result.result == 0 then
-- elseif result.result == 1 then
-- this.fourMonsterData[curType].monsterWave = id
-- end
end)
else
UIManager.OpenPanel(UIName.RewardItemPopup,msg.drop,1,function()
if func then
func()
end
end)
end
end)
end
function this.CarbonRedCheck()
if ActTimeCtrlManager.SingleFuncState(FUNCTION_OPEN_TYPE.MONSTER_COMING) then
return this.GetCanBattleCount() > 0
else
return false
end
end
return this