/// <summary> /// /// </summary> public virtual void JoinFight(AbstractFight fight, FightTeam team) { BuffManager = new BuffEffectManager(this); StateManager = new FighterStateManager(this); SpellManager = new SpellCastManager(); DeclaredDead = false; Orientation = 1; Skin = SkinBase; SkinSize = SkinSizeBase; UsedAP = 0; UsedMP = 0; Fight = fight; Team = team; TurnReady = false; TurnPass = false; Team.AddFighter(this); Team.AddUpdatable(this); Team.AddHandler(Dispatch); if (Life < 1) { Life = 1; } if (Fight.State == FightStateEnum.STATE_PLACEMENT) { SetCell(Team.FreePlace); } SetChatChannel(ChatChannelEnum.CHANNEL_TEAM, () => Team.Dispatch); StartAction(GameActionTypeEnum.FIGHT); }
/// <summary> /// /// </summary> /// <param name="fight"></param> /// <param name="team"></param> public override void JoinFight(AbstractFight fight, FightTeam team) { LifeBeforeFight = Life; Dispatch(WorldMessage.INTERACTIVE_DATA_FRAME_FIGHT(Map.InteractiveObjects)); base.JoinFight(fight, team); }
public override void JoinFight(AbstractFight fight, FightTeam team) { Life = MaxLife; base.JoinFight(fight, team); }
/// <summary> /// /// </summary> public virtual void JoinFight(AbstractFight fight, FightTeam team) { BuffManager = new BuffEffectManager(this); StateManager = new FighterStateManager(this); SpellManager = new SpellCastManager(); DeclaredDead = false; Orientation = 1; Skin = SkinBase; SkinSize = SkinSizeBase; UsedAP = 0; UsedMP = 0; Fight = fight; Team = team; TurnReady = false; TurnPass = false; Team.AddFighter(this); Team.AddUpdatable(this); Team.AddHandler(Dispatch); if (Life < 1) Life = 1; if(Fight.State == FightStateEnum.STATE_PLACEMENT) SetCell(Team.FreePlace); SetChatChannel(ChatChannelEnum.CHANNEL_TEAM, () => Team.Dispatch); StartAction(GameActionTypeEnum.FIGHT); }
/// <summary> /// /// </summary> /// <param name="character"></param> /// <param name="team"></param> public override void OnCharacterJoin(CharacterEntity character, FightTeam team) { if (!IsNeutralAgression) character.EnableAlignment(); else if (team.AlignmentId != (int)AlignmentTypeEnum.ALIGNMENT_NEUTRAL) character.EnableAlignment(); }
/// <summary> /// /// </summary> /// <param name="character"></param> /// <param name="team"></param> public override void OnCharacterJoin(CharacterEntity character, FightTeam team) { TaxCollector.Guild.TaxCollectorAttackerJoin(TaxCollector.Id, character); }
/// <summary> /// /// </summary> /// <param name="fighter"></param> /// <param name="team"></param> public void JoinFight(AbstractFighter fighter, FightTeam team) { if (team.FreePlace == null) return; if (!fighter.IsDisconnected) { if(fighter.Type == EntityTypeEnum.TYPE_CHARACTER) OnCharacterJoin(fighter as CharacterEntity, team); fighter.JoinFight(this, team); Dispatch(WorldMessage.GAME_MAP_INFORMATIONS(OperatorEnum.OPERATOR_ADD, fighter)); } if (fighter.MapId == Map.Id) SendFightJoinInfos(fighter); }
protected AbstractFight(FightTypeEnum type, MapInstance mapInstance, long id, long team0LeaderId, int team0Alignment, int team0FlagCell, long team1LeaderId, int team1Alignment, int team1FlagCell, long startTimeout, long turnTime, bool cancelButton = false, bool canWinHonor = false, params AbstractEndingBehavior[] endingBehaviors) { m_endingBehaviors = new Queue<AbstractEndingBehavior>(endingBehaviors); m_activableObjects = new Dictionary<AbstractFighter, List<AbstractActivableObject>>(); m_processingTargets = new LinkedList<CastInfos>(); m_currentApCost = -1; Type = type; Id = id; Map = mapInstance; State = FightStateEnum.STATE_PLACEMENT; LoopState = FightLoopStateEnum.STATE_INIT; CancelButton = cancelButton; TurnTime = turnTime; StartTime = startTimeout; NextLoopTimeout = startTimeout; Result = new FightEndResult(Id, canWinHonor); Cells = new Dictionary<int, FightCell>(); TurnProcessor = new FightTurnProcessor(); foreach (var cell in mapInstance.Cells) Cells.Add(cell.Id, new FightCell(cell.Id, cell.Walkable , cell.LineOfSight)); SpectatorTeam = new SpectatorTeam(this); Team0 = new FightTeam(0, team0LeaderId, team0Alignment, team0FlagCell, this, new List<FightCell>(Cells.Values.Where(cell => mapInstance.FightTeam0Cells.Contains(cell.Id)))); Team1 = new FightTeam(1, team1LeaderId, team1Alignment, team1FlagCell, this, new List<FightCell>(Cells.Values.Where(cell => mapInstance.FightTeam1Cells.Contains(cell.Id)))); Team0.OpponentTeam = Team1; Team1.OpponentTeam = Team0; AddUpdatable(SpectatorTeam); AddUpdatable(Team0); AddUpdatable(Team1); AddHandler(SpectatorTeam.Dispatch); AddHandler(Team0.Dispatch); AddHandler(Team1.Dispatch); }
/// <summary> /// /// </summary> /// <param name="fighter"></param> /// <param name="team"></param> /// <param name="cellId"></param> public FightActionResultEnum SummonFighter(AbstractFighter fighter, FightTeam team, int cellId) { fighter.JoinFight(this, team); fighter.TurnReady = true; var result = fighter.SetCell(GetCell(cellId)); if (result != FightActionResultEnum.RESULT_NOTHING) return result; var message = new StringBuilder("+"); fighter.SerializeAs_GameMapInformations(OperatorEnum.OPERATOR_ADD, message); if (fighter.Invocator != null) Dispatch(WorldMessage.GAME_ACTION(fighter.StaticInvocation ? EffectEnum.InvocationStatic : EffectEnum.Invocation, fighter.Invocator.Id, message.ToString())); else Dispatch("GM|" + message.ToString()); switch(State) { case FightStateEnum.STATE_PLACEMENT: // implicit turnready after start fighting break; case FightStateEnum.STATE_FIGHTING: fighter.TurnReady = true; TurnProcessor.SummonFighter(fighter); Dispatch(WorldMessage.FIGHT_TURN_LIST(TurnProcessor.FighterOrder)); break; } return result; }
/// <summary> /// /// </summary> /// <param name="character"></param> public virtual void OnCharacterJoin(CharacterEntity character, FightTeam team) { }