using System.Collections.Generic; namespace ET { [FriendClass(typeof(Battle))] [FriendClass(typeof(Unit))] [FriendClass(typeof(Fighter))] public static class BattleOperate { #if SERVER public static async ETTask EnterBattle(Unit unit, long enemyId) { Battle battle = unit.AddChild(); UnitComponent uc = battle.GetOrAddComponent(); Unit enemyUnit = unit.GetParent().GetChild(enemyId); if (enemyUnit == null) { enemyUnit = await DBManagerComponent.Instance.GetZoneDB(unit.DomainZone()).Query(enemyId); if (enemyUnit == null) { return null; } uc.AddChild(enemyUnit); enemyUnit.InitPeopleNumberic(); } foreach (var v in unit.FighterDic) { var people = unit.GetComponent().GetChild(v.Value); Fighter fighter = battle.AddChildWithId(v.Value); fighter.FromPeople(people); fighter.Pos = v.Key; battle.FighterDic[v.Value] = fighter; battle.FighterPosDic[v.Key] = fighter; fighter.Camp = 1; fighter.InitHp(); battle.AliveFightDic[fighter.Id] = fighter; } foreach (var v in enemyUnit.FighterDic) { var people = enemyUnit.GetComponent().GetChild(v.Value); Fighter fighter = battle.AddChildWithId(v.Value); fighter.FromPeople(people); fighter.Pos = v.Key; battle.EnemyDic[v.Value] = fighter; battle.EnemyPosDic[v.Key] = fighter; fighter.Camp = 2; fighter.InitHp(); battle.AliveFightDic[fighter.Id] = fighter; } unit.BattleId = battle.Id; battle.BattleState = ConstBattleState.BATTLE_STATE_FIGHT; battle.BattleType = ConstBattleType.BATTLE_PVP; battle.EnemyId = enemyId; return battle; } public static Battle EnterPveBattle(Unit unit,long enemyId) { Battle battle = unit.AddChild(); UnitComponent uc = battle.GetOrAddComponent(); Unit enemyUnit = unit; foreach (var v in unit.FighterDic) { var people = unit.GetComponent().GetChild(v.Value); Fighter fighter = battle.AddChildWithId(v.Value); fighter.FromPeople(people); fighter.Pos = v.Key; battle.FighterDic[v.Value] = fighter; battle.FighterPosDic[v.Key] = fighter; fighter.Camp = 1; fighter.FightType = ConstFightType.FIGHT_TYPE_PLAYER; fighter.InitHp(); battle.AliveFightDic[fighter.Id] = fighter; } var monsterGroup = unit.GetComponent().GetMonsterGroupById(enemyId); if (monsterGroup == null) { battle.Dispose(); return null; } int pos = 0; foreach (var v in monsterGroup.Config.MonsterID) { pos++; var config = MonsterConfigCategory.Instance.Get(v); Fighter fighter = battle.AddChild(); fighter.FromMonster(config); fighter.Pos = pos; battle.EnemyDic[pos] = fighter; battle.EnemyPosDic[pos] = fighter; fighter.Camp = 2; battle.AliveFightDic[fighter.Id] = fighter; } unit.BattleId = battle.Id; battle.BattleState = ConstBattleState.BATTLE_STATE_FIGHT; battle.BattleType = ConstBattleType.BATTLE_PVE; battle.EnemyId = enemyId; return battle; } #endif } }