예제 #1
0
        public override void OverridableLeaveFight(Fighter Fighter)
        {
            switch (this.FightState)
            {
            // TODO deco du joueur
            case Fights.FightState.STATE_PLACE:
                if (Fighter == Fighter.Team.Leader)
                {
                    foreach (var TeamFighter in Fighter.Team.GetFighters())
                    {
                        TeamFighter.Life = 0;
                    }

                    Fighter.Left = true;

                    this.OverridableEndFight(this.GetEnnemyTeam(Fighter.Team), Fighter.Team);
                }
                break;

            case FightState.STATE_ACTIVE:
                if (Fighter.TryDie(Fighter.ActorId, true) != -3)
                {
                    Fighter.LeaveFight();

                    Fighter.Send(new GameLeaveMessage());
                }
                break;
            }
        }
예제 #2
0
        public override void OverridableLeaveFight(Fighter Fighter)
        {
            // Un persos quitte le combat
            switch (this.FightState)
            {
            case Fights.FightState.STATE_PLACE:     // TODO : Uniquement si kické
                this.Map.SendToMap(new GameFightTeamFlagFightersMessage(new List <Fighter> {
                    Fighter
                }, Fighter.Team.LeaderId, false));

                this.SendToFight(new GameActorDestroyMessage(Fighter.ActorId));

                Fighter.LeaveFight();

                Fighter.Send(new GameLeaveMessage());

                if (Team1.GetAliveFighters().Count == 0 || Team2.GetAliveFighters().Count == 0)
                {
                    FightTeam ft = null;
                    if (Team1.GetAliveFighters().Count == 0)
                    {
                        ft = Team1;
                    }
                    else
                    {
                        ft = Team2;
                    }

                    foreach (var TeamFighter in ft.GetFighters())
                    {
                        TeamFighter.Life = 0;
                    }

                    Fighter.Left = true;

                    this.OverridableEndFight(this.GetEnnemyTeam(ft), ft);
                }
                break;

            case FightState.STATE_ACTIVE:
                if (Fighter.TryDie(Fighter.ActorId, true) != -3)
                {
                    Fighter.LeaveFight();

                    Fighter.Send(new GameLeaveMessage());
                }
                ;
                break;
            }
        }
예제 #3
0
        public override void OverridableLeaveFight(Fighter Fighter)
        {
            // Un persos quitte le combat
            switch (this.FightState)
            {
            case Fights.FightState.STATE_PLACE:
                if (Fighter == Fighter.Team.Leader)
                {
                    foreach (var TeamFighter in Fighter.Team.GetFighters())
                    {
                        TeamFighter.Life = 0;
                    }

                    Fighter.Left = true;

                    this.OverridableEndFight(this.GetEnnemyTeam(Fighter.Team), Fighter.Team);
                }
                else
                {
                    this.Map.SendToMap(new GameFightTeamFlagFightersMessage(new List <Fighter> {
                        Fighter
                    }, Fighter.Team.LeaderId, false));

                    this.SendToFight(new GameActorDestroyMessage(Fighter.ActorId));

                    Fighter.LeaveFight();

                    Fighter.Send(new GameLeaveMessage());
                }
                break;

            case FightState.STATE_ACTIVE:
                if (Fighter.TryDie(Fighter.ActorId, true) != -3)
                {
                    Fighter.LeaveFight();

                    Fighter.Send(new GameLeaveMessage());
                }
                break;
            }
        }
예제 #4
0
        public int TryDie(long CasterId, bool force = false)
        {
            if (force)
            {
                this.Life = 0;
            }

            if (this.Life <= 0)
            {
                if (!haveSendKillingMessage)//TODO mat affichich quand le double meurt alors que l'invoqueur a abondonné
                {
                    this.Fight.SendToFight(new GameActionMessage((int)GameActionTypeEnum.FIGHT_KILLFIGHTER, CasterId, this.ActorId.ToString()));
                    haveSendKillingMessage = true;
                }

                if (this.InvokTotal > 0)
                {
                    this.Team.GetAliveFighters().Where(x => x.Invocator != null && x.Invocator.ActorId == this.ActorId).ToList().ForEach(Fighter => Fighter.TryDie(this.ActorId, true));
                }

                System.Threading.Thread.Sleep(500);

                this.Fight.onFighterDie(this, this.Fight.GetFighter(CasterId));

                if (this.Fight.TryEndFight())
                {
                    return(-3);
                }

                if (this.Fight.CurrentFighter == this)
                {
                    this.Fight.FightLoopState = FightLoopState.STATE_END_TURN;
                }

                /*foreach (var item in this.Fight.getGlyphe().Where(x => x.Caster.ActorId == this.ActorId))
                 * {
                 *  this.Fight.SendToFight(new FightGlypheMessage("-", item.CellId, item.Size, 4));
                 *  this.Fight.SendToFight(new FightGlypheCanceledMessage(item.CellId));
                 *  this.Fight.removeGlyphe(item);
                 * }
                 *
                 * foreach (var item in this.Fight.getTraps().Where(x => x.Caster.ActorId == this.ActorId))
                 * {
                 *  item.desappear();
                 *  this.Fight.removeTrap(item);
                 * }*/
                return(-2);
            }

            return(-1);
        }