public override bool OnEventCalled(object arg1, object arg2, object arg3)
        {
            TakenDamages damages = (TakenDamages)arg2;

            Fighter.Heal(damages.Delta, Fighter.ContextualId);
            return(true);
        }
예제 #2
0
        public void LoseLife(TakenDamages damages, int sourceid)
        {
            damages.EvaluateWithResistances(Fight.GetFighter(sourceid), this, Fight.PvP);

            if (damages.Delta <= 0)
            {
                return;
            }

            Fight.TryStartSequence(sourceid, 1);
            if (FighterStats.ShieldPoints > 0)
            {
                if (FighterStats.ShieldPoints - damages.Delta <= 0)
                {
                    ushort rest = (ushort)(damages.Delta - FighterStats.ShieldPoints);
                    Fight.Send(new GameActionFightLifeAndShieldPointsLostMessage((ushort)ActionsEnum.ACTION_CHARACTER_BOOST_SHIELD, sourceid, ContextualId, rest, 0, (ushort)FighterStats.ShieldPoints));
                    FighterStats.ShieldPoints = 0;
                    if (FighterStats.Stats.LifePoints - rest <= 0)
                    {
                        FighterStats.Stats.LifePoints = 0;
                        RefreshStats();
                        Die();
                    }
                    else
                    {
                        ShowFighter();
                        FighterStats.Stats.LifePoints -= (short)rest;
                    }
                    return;
                }
                else
                {
                    Fight.Send(new GameActionFightLifeAndShieldPointsLostMessage(0, sourceid, ContextualId, 0, 0, (ushort)damages.Delta));
                    FighterStats.ShieldPoints -= (int)damages.Delta;
                    ShowFighter();
                    return;
                }
            }
            if (FighterStats.Stats.LifePoints - damages.Delta <= 0)
            {
                Fight.Send(new GameActionFightLifePointsLostMessage(0, sourceid, ContextualId, (ushort)FighterStats.Stats.LifePoints, 0));
                FighterStats.Stats.LifePoints = 0;
                Die();
                return;
            }
            else
            {
                ushort erosionDelta = (ushort)CalculateErosionDamage(damages.Delta);
                FighterStats.RealStats.LifePoints -= (short)erosionDelta;
                FighterStats.ErodedLife           += erosionDelta;
                FighterStats.Stats.LifePoints     -= damages.Delta;

                Fight.Send(new GameActionFightLifePointsLostMessage(0, sourceid, ContextualId, (ushort)damages.Delta, erosionDelta));

                RefreshStats();
                ApplyFighterEvent(FighterEventType.AFTER_ATTACKED, sourceid, damages);
            }
            Fight.TryEndSequence(1, 103);
        }
예제 #3
0
 /// <summary>
 /// Dégâts subis =dégâts totaux - résistance fixe - (dégâts totaux / 100/pourcentage de résistance)
 /// </summary>
 /// <param name="delta"></param>
 /// <param name="sourceid"></param>
 public virtual void TakeDamages(TakenDamages damages, int sourceid)
 {
     if (ApplyFighterEvent(FighterEventType.BEFORE_ATTACKED, sourceid, damages))
     {
         return;
     }
     LoseLife(damages, sourceid);
 }
예제 #4
0
        public override bool OnEventCalled(object arg1, object arg2, object arg3)
        {
            TakenDamages damages = (TakenDamages)arg2;

            damages.Delta *= (short)(Delta / 100);
            Fighter.LoseLife(damages, (int)arg1);
            return(true);
        }
예제 #5
0
        public override bool OnEventCalled(object arg1, object arg2, object arg3)
        {
            int          casterId = (int)arg1;
            TakenDamages damages  = (TakenDamages)arg2;
            var          martyr   = Fighter.Fight.GetFighter(SourceId);

            martyr.TakeDamages(damages, casterId);
            return(true);
        }
예제 #6
0
 /// <summary>
 /// Dégâts subis =dégâts totaux - résistance fixe - (dégâts totaux / 100/pourcentage de résistance)
 /// </summary>
 /// <param name="delta"></param>
 /// <param name="sourceid"></param>
 public virtual void TakeDamages(TakenDamages damages, int sourceid)
 {
     if (CharacterRecord.GetCharacterRecordById(this.ContextualId).GodMod)
     {
         return;
     }
     if (ApplyFighterEvent(FighterEventType.BEFORE_ATTACKED, sourceid, damages))
     {
         return;
     }
     LoseLife(damages, sourceid);
 }
        public override bool OnEventCalled(object arg1, object arg2, object arg3)
        {
            int          sourceId = (int)arg1;
            TakenDamages damages  = (TakenDamages)arg2;

            damages.Delta = damages.GetDeltaPercentage(REWIND_PERCENTAGE);
            List <short> cellIds = ShapesProvider.GetCrossCells(Fighter.CellId, Fighter.CellId, 1);

            foreach (var cellId in cellIds)
            {
                Fighter target = Fighter.Fight.GetFighter(cellId);
                if (target != null)
                {
                    //target.Fight.Send(new DebugHighlightCellsMessage(0, new ushort[] { (ushort)cellId }));
                }
            }
            return(false);
        }
        static void Steal(Fighter fighter, Fighter target, short jet, ElementType element, SpellLevelRecord level)
        {
            var takenDamages = new TakenDamages(jet, element);

            takenDamages.EvaluateWithResistances(fighter, target, fighter.Fight.PvP);
            short healJet    = (short)(takenDamages.Delta / 2);
            short targetLife = target.FighterStats.Stats.LifePoints;

            target.TakeDamages(new TakenDamages(jet, element), fighter.ContextualId);
            if (targetLife - jet < 0)
            {
                fighter.Heal((short)(targetLife / 2), fighter.ContextualId);
            }
            else
            {
                fighter.Heal(healJet, fighter.ContextualId);
            }
        }
        /// <summary>
        /// Called when the player takes damages
        /// </summary>
        /// <param name="obj">damages taken</param>
        public override bool OnEventCalled(object arg1, object arg2, object arg3)
        {
            TakenDamages damages = (TakenDamages)arg2;

            if (Fighter.ContextualId == (int)arg1 || damages.Delta <= 0)
            {
                return(false);
            }
            short statBuffDelta = (short)damages.Delta;
            int   num           = Fighter.GetAllBuffs <StatBuff>(x => x.SourceSpellId == SourceSpellId).FindAll(x => x.Duration == PunishementDelay).Sum(x => x.Delta);

            if (num < Delta)
            {
                if (statBuffDelta + num > (int)Delta)
                {
                    statBuffDelta = (short)(Delta - num);
                }

                StatBuff buff = new StatBuff((uint)Fighter.BuffIdProvider.Pop(), StatDefinition, (uint)GetBuffEffectType(StatDefinition.FieldName), statBuffDelta, PunishementDelay, Fighter.ContextualId, SourceSpellId, statBuffDelta, 0);
                Fighter.AddBuff(buff);
            }
            return(false);
        }