상속: Codebreak.Service.World.Network.MessageDispatcher
예제 #1
0
        /// <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);
        }
예제 #3
0
 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);
        }
예제 #5
0
 /// <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();
 }
예제 #6
0
 /// <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="character"></param>
 /// <param name="team"></param>
 public override void OnCharacterJoin(CharacterEntity character, FightTeam team)
 {
     TaxCollector.Guild.TaxCollectorAttackerJoin(TaxCollector.Id, character);
 }
예제 #8
0
        /// <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);
        }
예제 #9
0
        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);
        }
예제 #10
0
        /// <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;
        }
예제 #11
0
 /// <summary>
 /// 
 /// </summary>
 /// <param name="character"></param>
 public virtual void OnCharacterJoin(CharacterEntity character, FightTeam team)
 {
 }