--1v1异步竞技场,是单机关卡 local EventSystem = require('Event/EventSystem') local Base = require("Battle/Logic/Level/LevelFunction/LevelFunction") local HeroAwakePlayerLevelFunction = class("HeroAwakePlayerLevelFunction",Base) local private = {} function HeroAwakePlayerLevelFunction:InitLevel() Base.InitLevel(self) end --用服务器发过来的数据构造一组hero单位,army是LevelPlayerManager的private.CreatArmy的返回值 --其实只有一个武将,且无副将 function HeroAwakePlayerLevelFunction:CreateEnemyPlayersByServerArmy(army,pos,dir,bornItemID,playerID) local heroEntityTable = {} local playerInfo = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(LuaConst.STANDALONE_ENEMYPLAYER1_PLAYID) for i,v in ipairs(army) do EntityFactory.SetParams("BornItemID", bornItemID, "InitHP", v.HP, "Name", playerInfo.name) EntityFactory.SetParams("CampID", LuaConst.STANDALONE_ENEMY_CAMP) EntityFactory.SetParams("StratagemSkill", playerInfo.stratagemSkill) EntityFactory.SetType_ID(LuaConst.CharacterType.Hero, v.HeroID) EntityFactory.SetAttrTable_ID(v.Attr) EntityFactory.SetPos_Dir(pos, dir) EntityFactory.SetSelf_Sync(false, false) EntityFactory.SetEffectBreak_Weapon(v.mainHeroBreakNums,v.isMagicWeaponActive,v.mainHeroWeaponLevels) EntityFactory.SetHorse_ID(v.horseID, v.horseAppearanceId) EntityFactory.SetPet_Info(v.petInfo.petId, v.petInfo.stage, v.petInfo.petName, v.petInfo.petSkill) EntityFactory.SetHeroAppearance_ID(v.heroAppearanceId) EntityFactory.SetWeaponAppearance_ID(v.weaponAppearanceId) EntityFactory.SetLightEffect_ID(v.lightEffectIds) EntityFactory.SetParams("PlayerID", playerID) EntityFactory.SetParams("ExpModelScaleRate", 2)--策划要求设置大小系数为2 EntityFactory.SetParams("AdaptiveType", LuaConst.EValueAdaptiveType.BY_FORMULA_SERVER_GS) EntityFactory.SetParams("AdaptiveParam", DataSheetManager.ConstData:GetDataByID("HeroAwakenHeroBOSSMonsterValue").IntValue) local entity = EntityFactory.DoCreatePlayerEntity() SystemManager.AddBuff(entity, DataSheetManager.ConstData:GetDataByID("AwakenActivityUltimateLevelBOSSBuff").IntValue) table.insert(heroEntityTable,entity) end LevelPlayerManager.SetPlayerEntityTable(heroEntityTable ,playerID) end function HeroAwakePlayerLevelFunction:GetLevelAutoFightInitRule() --不调用base return LuaConst.ELevelAutoFightInitRule.OPEN end function HeroAwakePlayerLevelFunction:CreatePlayers(pos,dir) Base.CreatePlayers(self,dir) self:CreateEnemyHeroes() end --创建敌方玩家的英雄 function HeroAwakePlayerLevelFunction:CreateEnemyHeroes(pos,dir) local enemyArmy = LevelPlayerManager.GetPlayerArmyByPlayerIDInRoom(LuaConst.STANDALONE_ENEMYPLAYER1_PLAYID) if not enemyArmy then logging.error(LTAG.ERROR, "GWS : enemyArmy nil Error @HeroAwakePlayerLevelFunction:CreateEnemyHeroes!!") return end local bornItem = self:GetBornItemByIndex(2) if not bornItem then logging.error(LTAG.ERROR, "GWS : bornItem nil Error @HeroAwakePlayerLevelFunction:CreateEnemyHeroes!!") return end self:CreateEnemyPlayersByServerArmy(enemyArmy, bornItem.ItemData.ItemPos, bornItem.ItemData.ItemDir, bornItem.LevelItemID, LuaConst.STANDALONE_ENEMYPLAYER1_PLAYID) local firstEntity = BattleDataGetter.GetHeroInHeroEntityTableByIndex(LuaConst.STANDALONE_ENEMYPLAYER1_PLAYID,1) SystemManager.Active(firstEntity) EventSystem.Dispatch(EventID.UIBattle_Level_SetUpBoss, true, nil, firstEntity.EntityID) --这个玩法,会把敌方hero作为boss显示boss血条,因此此处把敌方hero单位dispatch出去 end function HeroAwakePlayerLevelFunction:BeginLevel() Base.BeginLevel(self) --设置AI local entityTable = LevelPlayerManager.GetPlayerEntitysByPlayerIDInRoom(LuaConst.STANDALONE_ENEMYPLAYER1_PLAYID) if entityTable then for i,entity in ipairs(entityTable) do entity.components.autoFight:StartPveAutoFight() SystemManager.SetAIByID(entity,LevelManager.GetRobotAI(entity)) end else logging.error(LTAG.ERROR, "GWS : 致命错误!敌人entityTable为空! @HeroAwakePlayerLevelFunction:BeginLevel") end end --只要是有血量改变意图,即便最终血量没有任何改变,也会调用该方法 function HeroAwakePlayerLevelFunction:OnHpChange(entity, caster, delta, op, realDelta) Base.OnHpChange(self, entity, caster, delta, op, realDelta) if entity.isHero and entity.CampID == LuaConst.STANDALONE_ENEMY_CAMP then EventSystem.Dispatch(EventID.UIBattle_BossHPChanged, FP.tonumberV1(entity:GetHp()), FP.tonumberV1(entity:GetMaxHp()), entity.EntityID, FP.tonumberV1(realDelta)) end end return HeroAwakePlayerLevelFunction