local FormationData = class("FormationData", BaseData) function FormationData:ctor() self.data.dirty = false self.formations = {} end -- 初始化阵容 function FormationData:init(data) data = data or {} self.formations = self.formations or {} for i = 1, 5 do if data[i] and data[i].heroes then local clientFormation = {} for matchType, heroId in pairs(data[i].heroes) do clientFormation[tonumber(matchType)] = heroId end self.formations[tostring(i)] = clientFormation else self.formations[tostring(i)] = {0,0,0,0,0} end end self:setDirty() end -- 初始化主线阵容 function FormationData:initStage(data) self.formations = self.formations or {} self.formations[GConst.BattleConst.FORMATION_TYPE.STAGE] = data or {0,0,0,0,0} self:setDirty() end -- 初始化竞技场阵容 function FormationData:initArena(attack, defend) self.formations = self.formations or {} -- 位置顺序特殊处理 self.formations[GConst.BattleConst.FORMATION_TYPE.ARENA_ATTACK] = {0,0,0,0,0} self.formations[GConst.BattleConst.FORMATION_TYPE.ARENA_DEFEND] = {0,0,0,0,0} for idx, id in pairs(attack) do if id and id ~= 0 then local type = DataManager.HeroData:getHeroById(id):getMatchType() self.formations[GConst.BattleConst.FORMATION_TYPE.ARENA_ATTACK][type] = id end end for idx, id in pairs(defend) do if id and id ~= 0 then local type = DataManager.HeroData:getHeroById(id):getMatchType() self.formations[GConst.BattleConst.FORMATION_TYPE.ARENA_DEFEND][type] = id end end self:setDirty() end -- function FormationData:initDungeonWeapon(heroes) -- if self.formations == nil then -- self.formations = {} -- end -- self.formations[GConst.BattleConst.FORMATION_TYPE.DUNGEON_WEAPON] = {} -- for idx, id in pairs(heroes) do -- if id and id ~= 0 then -- local matchType = DataManager.HeroData:getHeroById(id):getMatchType() -- self.formations[GConst.BattleConst.FORMATION_TYPE.DUNGEON_WEAPON][matchType] = id -- end -- end -- end -- function FormationData:initDungeonArmor(heroes) -- if self.formations == nil then -- self.formations = {} -- end -- self.formations[GConst.BattleConst.FORMATION_TYPE.DUNGEON_ARMOR] = {} -- for idx, id in pairs(heroes) do -- if id and id ~= 0 then -- local matchType = DataManager.HeroData:getHeroById(id):getMatchType() -- self.formations[GConst.BattleConst.FORMATION_TYPE.DUNGEON_ARMOR][matchType] = id -- end -- end -- end function FormationData:initFormationByType(formationType, heroes) if self.formations == nil then self.formations = {} end self.formations[formationType] = {} for idx, id in pairs(heroes) do if id and id ~= 0 then local matchType = DataManager.HeroData:getHeroById(id):getMatchType() self.formations[formationType][matchType] = id end end end function FormationData:getStageFormation() return self:getFormation(GConst.BattleConst.FORMATION_TYPE.STAGE) end function FormationData:getArenaAttackFormation() return self:getFormation(GConst.BattleConst.FORMATION_TYPE.ARENA_ATTACK) end function FormationData:getArenaDefendFormation() return self:getFormation(GConst.BattleConst.FORMATION_TYPE.ARENA_DEFEND) end -- function FormationData:getDungeonWeaponFormation() -- local formation = self:getFormation(GConst.BattleConst.FORMATION_TYPE.DUNGEON_WEAPON) -- if table.nums(formation) <= 0 then -- self:setFormation(GConst.BattleConst.FORMATION_TYPE.DUNGEON_WEAPON, self:getFormation(GConst.BattleConst.FORMATION_TYPE.STAGE)) -- 如果没有,则用默认关卡 -- formation = self:getFormation(GConst.BattleConst.FORMATION_TYPE.DUNGEON_WEAPON) -- end -- return formation -- end -- function FormationData:getDungeonArmorFormation() -- local formation = self:getFormation(GConst.BattleConst.FORMATION_TYPE.DUNGEON_ARMOR) -- if table.nums(formation) <= 0 then -- self:setFormation(GConst.BattleConst.FORMATION_TYPE.DUNGEON_ARMOR, self:getFormation(GConst.BattleConst.FORMATION_TYPE.STAGE)) -- 如果没有,则用默认关卡 -- formation = self:getFormation(GConst.BattleConst.FORMATION_TYPE.DUNGEON_ARMOR) -- end -- return formation -- end -- function FormationData:getBossRushFormation() -- local formation = self:getFormation(GConst.BattleConst.FORMATION_TYPE.BOSS_RUSH) -- if table.nums(formation) <= 0 then -- self:setFormation(GConst.BattleConst.FORMATION_TYPE.BOSS_RUSH, self:getFormation(GConst.BattleConst.FORMATION_TYPE.STAGE)) -- 如果没有,则用默认关卡 -- formation = self:getFormation(GConst.BattleConst.FORMATION_TYPE.BOSS_RUSH) -- end -- return formation -- end -- function FormationData:getDungeonRuneFormation() -- local formation = self:getFormation(GConst.BattleConst.FORMATION_TYPE.DUNGEON_RUNE) -- if table.nums(formation) <= 0 then -- self:setFormation(GConst.BattleConst.FORMATION_TYPE.DUNGEON_RUNE, self:getFormation(GConst.BattleConst.FORMATION_TYPE.STAGE)) -- 如果没有,则用默认关卡 -- formation = self:getFormation(GConst.BattleConst.FORMATION_TYPE.DUNGEON_RUNE) -- end -- return formation -- end function FormationData:getFormation(formationType) local formation = self.formations[formationType] if formation == nil then formation = {} self.formations[formationType] = formation end return formation end function FormationData:setFormation(formationType, formation) self.formations[formationType] = GFunc.getTable(formation) self:setDirty() end function FormationData:upHeroToFormation(formationType, matchType, heroId) local formation = self:getFormation(formationType) if formation[matchType] == heroId then return end formation[matchType] = heroId self:setDirty() end function FormationData:heroInFormation(formationType, heroId) local formation = self:getFormation(formationType) if not formation then return false end for matchType, id in pairs(formation) do if id == heroId then return true end end return false end function FormationData:formationIsFull(formationType) local actvieMap = DataManager.HeroData:getMatchActiveHeroMap() local formation = self:getFormation(formationType) local count = 0 for matchtype = 1, GConst.BattleConst.ELEMENT_TYPE_COUNT do if not formation[matchtype] or formation[matchtype] <= 0 then if actvieMap[matchtype] and table.nums(actvieMap[matchtype]) > 0 then return false end else count = count + 1 end end if count <= 0 then return false end return true end function FormationData:setDirty() self.data.dirty = not self.data.dirty end function FormationData:getStageFormationBIStr() local str local totalLevel = 0 local allAtk = 0 local allHp = 0 for matchType, heroId in pairs(self:getStageFormation()) do local entity = DataManager.HeroData:getHeroById(heroId) if entity then if str then str = str .. "|" else str = GConst.EMPTY_STRING end str = str .. heroId .. ":" .. entity:getLv() totalLevel = totalLevel + entity:getLv() allAtk = allAtk + entity:getAtk() allHp = allHp + entity:getHp() end end allAtk = allAtk // GConst.BattleConst.DEFAULT_FACTOR allHp = allHp // GConst.BattleConst.DEFAULT_FACTOR return str, totalLevel, allAtk, allHp end return FormationData