Esempio n. 1
0
        /// <summary>
        /// Begins the callback between this gameliving source and target (commences a bolt flying between them)
        /// </summary>
        /// <param name="source"></param>
        /// <param name="target"></param>
        public void DealLightning()
        {
            int ticksToTarget = currentSource.GetDistanceTo(currentTarget) * 100 / 85; // 85 units per 1/10s
            int delay         = 1 + ticksToTarget / 100;

            foreach (GamePlayer player in currentTarget.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
            {
                player.Out.SendSpellEffectAnimation(currentSource, currentTarget, m_spell.ClientEffect, (ushort)(delay), false, 1);
            }
            BoltAction bolt = new BoltAction(this);

            bolt.Start(1 + ticksToTarget);
        }
Esempio n. 2
0
        /// <summary>
        /// Action
        /// </summary>
        /// <param name="living"></param>
        public override void Execute(GameLiving living)
        {
            if (CheckPreconditions(living, DEAD | SITTING | MEZZED | STUNNED)) return;

            SendCasterSpellEffectAndCastMessage(living, 1145, true);

            bool deactivate = false;
            foreach (GamePlayer player in living.GetPlayersInRadius(false, 350))
            {
                if (GameServer.ServerRules.IsAllowedToAttack(living, player, true))
                {
                    DamageTarget(player, living);
                    deactivate = true;
                }
            }

            foreach (GameNPC npc in living.GetNPCsInRadius(false, 350))
            {
                if (GameServer.ServerRules.IsAllowedToAttack(living, npc, true))
                {
                    DamageTarget(npc, living);
                    deactivate = true;
                }
            }
            if (deactivate)
                DisableSkill(living);
        }
        /// <summary>
        /// Action
        /// </summary>
        /// <param name="living"></param>
        public override void Execute(GameLiving living)
        {
            if (CheckPreconditions(living, DEAD | SITTING | MEZZED | STUNNED))
            {
                return;
            }

            SendCasterSpellEffectAndCastMessage(living, 7072, true);

            bool deactivate = false;

            foreach (GamePlayer player in living.GetPlayersInRadius(false, 350))
            {
                if (GameServer.ServerRules.IsAllowedToAttack(living, player, true))
                {
                    DamageTarget(player, living);
                    deactivate = true;
                }
            }

            foreach (GameNPC npc in living.GetNPCsInRadius(false, 350))
            {
                if (GameServer.ServerRules.IsAllowedToAttack(living, npc, true))
                {
                    DamageTarget(npc, living);
                    deactivate = true;
                }
            }
            if (deactivate)
            {
                DisableSkill(living);
            }
        }
        public override IList <GameLiving> SelectTargets(GameObject castTarget)
        {
            var        list   = new List <GameLiving>(8);
            GameLiving target = castTarget as GameLiving;

            if (target == null || Spell.Range == 0)
            {
                target = Caster;
            }

            foreach (GamePlayer player in target.GetPlayersInRadius(false, (ushort)Spell.Radius))
            {
                if (GameServer.ServerRules.IsAllowedToAttack(Caster, player, true))
                {
                    list.Add(player);
                }
            }
            foreach (GameNPC npc in target.GetNPCsInRadius(false, (ushort)Spell.Radius))
            {
                if (GameServer.ServerRules.IsAllowedToAttack(Caster, npc, true))
                {
                    list.Add(npc);
                }
            }

            return(list);
        }
Esempio n. 5
0
        /// <summary>
        /// called when spell effect has to be started and applied to targets
        /// </summary>
        public override bool StartSpell(GameLiving target)
        {
            if (target == null)
            {
                return(false);
            }

            if (m_maxTick >= 0)
            {
                m_maxTick       = (Spell.Pulse > 1)?Spell.Pulse:1;
                m_currentTick   = 1;
                m_currentSource = target;
            }

            int ticksToTarget = m_currentSource.GetDistanceTo(target) * 100 / 85; // 85 units per 1/10s
            int delay         = 1 + ticksToTarget / 100;

            foreach (GamePlayer player in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
            {
                player.Out.SendSpellEffectAnimation(m_currentSource, target, m_spell.ClientEffect, (ushort)(delay), false, 1);
            }
            BoltOnTargetAction bolt = new BoltOnTargetAction(Caster, target, this);

            bolt.Start(1 + ticksToTarget);
            m_currentSource = target;
            m_currentTick++;

            return(true);
        }
        /// <summary>
        /// Start the effect.
        /// </summary>
        /// <param name="target"></param>
        public override void Start(GameLiving target)
        {
            base.Start(target);

            GamePlayer petOwner = null;

            if (target is GameNPC && (target as GameNPC).Brain is IControlledBrain)
            {
                petOwner = ((target as GameNPC).Brain as IControlledBrain).Owner as GamePlayer;
            }

            foreach (GamePlayer player in target.GetPlayersInRadius(WorldMgr.INFO_DISTANCE))
            {
                if (player == null)
                {
                    continue;
                }

                player.Out.SendSpellEffectAnimation(target, target, 1073, 0, false, 1);

                eChatType chatType = (player != null && player == petOwner)
                                        ? eChatType.CT_Spell
                                        : eChatType.CT_System;

                player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Effects.Necro.TauntEffect.SeemsChange", target.GetName(0, true)), chatType, eChatLoc.CL_SystemWindow);
            }
        }
        public override void Execute(GameLiving living)
        {
            #region preCheck
            if (CheckPreconditions(living, DEAD | SITTING | MEZZED | STUNNED))
            {
                return;
            }

            if (living.EffectList.CountOfType <BadgeOfValorEffect>() > 0)
            {
                if (living is GamePlayer)
                {
                    (living as GamePlayer).Out.SendMessage("You already an effect of that type!", eChatType.CT_SpellResisted, eChatLoc.CL_SystemWindow);
                }
                return;
            }

            #endregion


            //send spelleffect
            foreach (GamePlayer visPlayer in living.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
            {
                visPlayer.Out.SendSpellEffectAnimation(living, living, 7057, 0, false, 0x01);
            }

            new BadgeOfValorEffect().Start(living);
            living.DisableSkill(this, m_reuseTimer * 1000);
        }
Esempio n. 8
0
 public override void Start(GameLiving target)
 {
     base.Start(target);
     foreach (GamePlayer p in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
     {
         p.Out.SendSpellEffectAnimation(target, target, 7036, 0, false, 1);
     }
     EffectOwner = target as GamePlayer;
 }
 public override void Start(GameLiving target)
 {
     base.Start(target);
     foreach (GamePlayer p in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
     {
         p.Out.SendSpellEffectAnimation(target, target, 7036, 0, false, 1);
     }
     EffectOwner = target as GamePlayer;
 }
        public const Int32 m_duration = 45000;         //45 seconds

        public override void Execute(GameLiving living)
        {
            if (CheckPreconditions(living, DEAD | SITTING | MEZZED | STUNNED))
            {
                return;
            }

            foreach (GamePlayer t_player in living.GetPlayersInRadius(WorldMgr.INFO_DISTANCE))
            {
                if (t_player == living && living is GamePlayer)
                {
                    (living as GamePlayer).Out.SendMessage("You clear your mind and become more resistant to magic damage!", eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
                }
                else
                {
                    t_player.Out.SendMessage(living.Name + " casts a spell!", eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
                }
            }

            int effectiveness = 10;

            if (ServerProperties.Properties.USE_NEW_ACTIVES_RAS_SCALING)
            {
                switch (Level)
                {
                case 1: effectiveness = 10; break;

                case 2: effectiveness = 15; break;

                case 3: effectiveness = 20; break;

                case 4: effectiveness = 25; break;

                case 5: effectiveness = 30; break;

                default: effectiveness = 0; break;
                }
            }
            else
            {
                switch (Level)
                {
                case 1: effectiveness = 10; break;

                case 2: effectiveness = 20; break;

                case 3: effectiveness = 30; break;

                default: effectiveness = 0; break;
                }
            }


            new TheEmptyMindEffect(effectiveness).Start(living);
            DisableSkill(living);
        }
 public override void Start(GameLiving target)
 {
     base.Start(target);
     EffectOwner = target;
     foreach (GamePlayer p in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
     {
         p.Out.SendSpellEffectAnimation(EffectOwner, EffectOwner, 7059, 0, false, 1);
     }
     GameEventMgr.AddHandler(EffectSource, GameLivingEvent.AttackFinished, new DOLEventHandler(EventHandler));
     GameEventMgr.AddHandler(EffectSource, GameLivingEvent.CastFinished, new DOLEventHandler(EventHandler));
 }
Esempio n. 12
0
 public override void Start(GameLiving target)
 {
     base.Start(target);
     EffectOwner = target;
     foreach (GamePlayer p in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
     {
         p.Out.SendSpellEffectAnimation(EffectOwner, EffectOwner, 7059, 0, false, 1);
     }
     GameEventMgr.AddHandler(EffectSource, GameLivingEvent.AttackFinished, new DOLEventHandler(EventHandler));
     GameEventMgr.AddHandler(EffectSource, GameLivingEvent.CastFinished, new DOLEventHandler(EventHandler));
 }
Esempio n. 13
0
 private void DealDamage(GameLiving target)
 {
     int ticksToTarget = m_caster.GetDistanceTo(target) * 100 / 85; // 85 units per 1/10s
     int delay = 1 + ticksToTarget / 100;
     foreach (GamePlayer player in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
     {
         player.Out.SendSpellEffectAnimation(m_caster, target, m_spell.ClientEffect, (ushort)(delay), false, 1);
     }
     BoltOnTargetAction bolt = new BoltOnTargetAction(Caster, target, this);
     bolt.Start(1 + ticksToTarget);
 }
Esempio n. 14
0
        private void DamageTarget(GameLiving target, GameLiving caster)
        {
            double modifier   = 0.5 + (caster.GetModifiedSpecLevel("Soulrending") * 0.01);
            int    basedamage = (int)(250 * modifier);
            int    resist     = basedamage * target.GetResist(eDamageType.Spirit) / -100;
            int    damage     = basedamage + resist;
            int    heal       = (int)(damage * 0.75);
            int    modheal    = caster.MaxHealth - caster.Health;

            if (modheal > heal)
            {
                modheal = heal;
            }

            caster.Health += modheal;

            if (caster is GamePlayer player)
            {
                player.Out.SendMessage($"You hit {target.Name} for {damage}({resist}) points of damage!", eChatType.CT_YouHit, eChatLoc.CL_SystemWindow);
            }

            if (caster is GamePlayer gamePlayer && modheal > 0)
            {
                gamePlayer.Out.SendMessage($"Your Soul Quench returns {modheal} lifepoints to you", eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
            }

            if (target is GamePlayer targetPlayer)
            {
                if (targetPlayer.IsStealthed)
                {
                    targetPlayer.Stealth(false);
                }
            }

            foreach (GamePlayer p in target.GetPlayersInRadius(false, WorldMgr.VISIBILITY_DISTANCE))
            {
                p.Out.SendSpellEffectAnimation(caster, target, 1145, 0, false, 1);
                p.Out.SendCombatAnimation(caster, target, 0, 0, 0, 0, 0x14, target.HealthPercent);
            }

            // target.TakeDamage(caster, eDamageType.Spirit, damage, 0);
            AttackData ad = new AttackData
            {
                AttackResult = GameLiving.eAttackResult.HitUnstyled,
                Attacker     = caster,
                Target       = target,
                DamageType   = eDamageType.Spirit,
                Damage       = damage
            };

            target.OnAttackedByEnemy(ad);
            caster.DealDamage(ad);
        }
Esempio n. 15
0
        public override void Start(GameLiving target)
        {
            base.Start(target);

            foreach (GamePlayer p in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
            {
                p.Out.SendSpellEffectAnimation(target, target, 7055, 0, false, 1);
            }

            GameEventMgr.AddHandler(target, GameLivingEvent.AttackFinished, new DOLEventHandler(attackEventHandler));
            GameEventMgr.AddHandler(target, GameLivingEvent.AttackedByEnemy, new DOLEventHandler(TakeDamage));
        }
        /// <summary>
        /// Start the effect on a living target
        /// </summary>
        /// <param name="living"></param>
        public override void Start(GameLiving living)
        {
            _playerOwner = living as GamePlayer;

            if (_playerOwner == null)
            {
                return;
            }

            _group = _playerOwner.Group;

            if (_group == null)
            {
                return;
            }

            base.Start(living);

            _playerOwner.Out.SendMessage("You group is protected by a pool of healing!", eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
            GameEventMgr.AddHandler(_group, GroupEvent.MemberJoined, new DOLEventHandler(PlayerJoinedGroup));
            GameEventMgr.AddHandler(_group, GroupEvent.MemberDisbanded, new DOLEventHandler(PlayerDisbandedGroup));

            foreach (GamePlayer gp in _group.GetPlayersInTheGroup())
            {
                foreach (GamePlayer p in living.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
                {
                    if (!p.IsAlive)
                    {
                        continue;
                    }

                    p.Out.SendSpellEffectAnimation(living, gp, 7036, 0, false, 1);
                }

                if (gp == _playerOwner)
                {
                    continue;
                }

                gp.Out.SendMessage("You are protected by a pool of healing!", eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
                _affected.Add(gp);
                GameEventMgr.AddHandler(gp, GameObjectEvent.TakeDamage, new DOLEventHandler(TakeDamage));
                if (gp.CharacterClass.ID == (int)eCharacterClass.Necromancer)
                {
                    if (gp.ControlledBrain != null)
                    {
                        _affected.Add(gp.ControlledBrain.Body);
                        GameEventMgr.AddHandler(gp.ControlledBrain.Body, GameLivingEvent.TakeDamage, new DOLEventHandler(TakeDamageNPC));
                    }
                }
            }
        }
Esempio n. 17
0
        public override void ApplyEffectOnTarget(GameLiving target, double effectiveness)
        {
            GamePlayer player=target as GamePlayer;
            base.ApplyEffectOnTarget(Caster,effectiveness);
            Caster.StopAttack();
            Caster.DisarmedTime = Caster.CurrentRegion.Time + Spell.Duration;
            foreach (GamePlayer visPlayer in Caster.GetPlayersInRadius((ushort)WorldMgr.VISIBILITY_DISTANCE))
                visPlayer.Out.SendCombatAnimation(Caster, target, 0x0000, 0x0000, (ushort)408, 0, 0x00, target.HealthPercent);
            if(Spell.ResurrectMana>0) foreach (GamePlayer visPlayer in target.GetPlayersInRadius((ushort)WorldMgr.VISIBILITY_DISTANCE))
                visPlayer.Out.SendSpellEffectAnimation(Caster, target, (ushort)Spell.ResurrectMana, 0, false, 0x01);

            if((Spell.Duration>0&&Spell.Target!="Area")||Spell.Concentration>0) OnDirectEffect(target,effectiveness);
        }
Esempio n. 18
0
        private void DealDamage(GameLiving target)
        {
            int ticksToTarget = (int)(m_caster.GetDistanceTo(target) * 100 / 85);             // 85 units per 1/10s
            int delay         = 1 + ticksToTarget / 100;

            foreach (GamePlayer player in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
            {
                player.Out.SendSpellEffectAnimation(m_caster, target, m_spell.ClientEffect, (ushort)(delay), false, 1);
            }
            ArrowOnTargetAction arrow = new ArrowOnTargetAction(Caster, target, this);

            arrow.Start(1 + ticksToTarget);
        }
Esempio n. 19
0
 protected virtual int MakeAnimEmoteSequence(RegionTimer callingTimer)
 {
     if (m_animEmoteTeleportTimerQueue.Count > 0)
     {
         m_animEmoteTeleportTimerQueue.Dequeue();
         GameLiving animObject = (GameLiving)m_animEmoteObjectQueue.Dequeue();
         foreach (GamePlayer player in animObject.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
         {
             player.Out.SendEmoteAnimation(animObject, eEmote.Bind);
         }
     }
     return(0);
 }
Esempio n. 20
0
 public override void Start(GameLiving target)
 {
     base.Start(target);
     if (target is GamePlayer)
     {
         EffectOwner = target as GamePlayer;
         foreach (GamePlayer p in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
         {
             p.Out.SendSpellEffectAnimation(EffectOwner, p, 7069, 0, false, 1);
         }
         GameEventMgr.AddHandler(EffectOwner, GamePlayerEvent.Quit, new DOLEventHandler(PlayerLeftWorld));
     }
 }
Esempio n. 21
0
 public override void Start(GameLiving target)
 {
     base.Start(target);
     if (target is GamePlayer)
     {
         EffectOwner = target as GamePlayer;
         foreach (GamePlayer p in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
         {
             p.Out.SendSpellEffectAnimation(EffectOwner, p, 7069, 0, false, 1);
         }
         GameEventMgr.AddHandler(EffectOwner, GamePlayerEvent.Quit, new DOLEventHandler(PlayerLeftWorld));
     }
 }
        public override void Start(GameLiving target)
        {
            base.Start(target);

            foreach (GamePlayer p in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
            {
                p.Out.SendSpellEffectAnimation(target, target, 7055, 0, false, 1);
            }
            //Commented out for removal: Parry Chance for BladeBarrier is hardcoded in GameLiving.cs in the CalculateEnemyAttackResult method
            //m_owner.BuffBonusCategory4[(int)eProperty.ParryChance] += 90;
            GameEventMgr.AddHandler(target, GameLivingEvent.AttackFinished, new DOLEventHandler(attackEventHandler));
            GameEventMgr.AddHandler(target, GameLivingEvent.AttackedByEnemy, new DOLEventHandler(TakeDamage));
        }
Esempio n. 23
0
        public override void Start(GameLiving target)
        {
            base.Start(target);

            foreach (GamePlayer p in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
            {
                p.Out.SendSpellEffectAnimation(target, target, 7055, 0, false, 1);
            }
            //Commented out for removal: Parry Chance for BladeBarrier is hardcoded in GameLiving.cs in the CalculateEnemyAttackResult method
            //m_owner.BuffBonusCategory4[(int)eProperty.ParryChance] += 90;
            GameEventMgr.AddHandler(target, GameLivingEvent.AttackFinished, new DOLEventHandler(attackEventHandler));
            GameEventMgr.AddHandler(target, GameLivingEvent.AttackedByEnemy, new DOLEventHandler(TakeDamage));
        }
Esempio n. 24
0
		public override void Start(GameLiving living)
		{
			m_living = living;
			//Send messages
			if (m_living is GamePlayer)
			{
				((GamePlayer)m_living).Out.SendMessage("You begin to charge wildly!", eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
			}
			else if (m_living is GameNPC)
			{
				IControlledBrain icb = ((GameNPC)m_living).Brain as IControlledBrain;
				if (icb != null && icb.Body != null)
				{
					GamePlayer playerowner = icb.GetPlayerOwner();

					if (playerowner != null)
					{
						playerowner.Out.SendMessage("The " + icb.Body.Name + " charges its prey!", eChatType.CT_Say, eChatLoc.CL_SystemWindow);
					}
				}
			}
			else
				return;
			
			m_startTick = living.CurrentRegion.Time;
			foreach (GamePlayer t_player in living.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
			{
				t_player.Out.SendSpellEffectAnimation(living, living, 7035, 0, false, 1);
			}

			//sets player into combat mode
			living.LastAttackTickPvP = m_startTick;
			ArrayList speedSpells = new ArrayList();
			lock(living.EffectList)
			{
				foreach (IGameEffect effect in living.EffectList)
				{
					if (effect is GameSpellEffect == false) continue;
					if ((effect as GameSpellEffect).Spell.SpellType == "SpeedEnhancement")
						speedSpells.Add(effect);
				}
			}
			foreach (GameSpellEffect spell in speedSpells)
				spell.Cancel(false);
			m_living.BuffBonusMultCategory1.Set((int)eProperty.MaxSpeed, this, PropertyCalc.MaxSpeedCalculator.SPEED3);
			m_living.TempProperties.setProperty("Charging", true);
			if (m_living is GamePlayer)
				((GamePlayer)m_living).Out.SendUpdateMaxSpeed();
			StartTimers();
			m_living.EffectList.Add(this);
		}
Esempio n. 25
0
		/// <summary>
		/// Action
		/// </summary>
		/// <param name="living"></param>
		public override void Execute(GameLiving living)
		{
			if (CheckPreconditions(living, DEAD | SITTING | MEZZED | STUNNED)) return;

			ushort Icon = 7026;
			effectiveness = 0;
			owner = living;

			if(ServerProperties.Properties.USE_NEW_ACTIVES_RAS_SCALING)
			{
				switch (Level)
				{
					case 1: effectiveness = 300; break;
					case 2: effectiveness = 450; break;
					case 3: effectiveness = 600; break;
					case 4: effectiveness = 750; break;
					case 5: effectiveness = 900; break;
				}
			}
			else
			{
				switch (Level)
				{
					case 1: effectiveness = 300; break;
					case 2: effectiveness = 600; break;
					case 3: effectiveness = 900; break;
				}
			}

			if (living.GroundTarget == null)
				return;
			if (!living.IsWithinRadius( living.GroundTarget, 1500 ))
				return;
			GamePlayer player = living as GamePlayer;
			if (player == null)
				return;

			if (player.RealmAbilityCastTimer != null)
			{
				player.RealmAbilityCastTimer.Stop();
				player.RealmAbilityCastTimer = null;
				player.Out.SendMessage("You cancel your Spell!", eChatType.CT_SpellResisted, eChatLoc.CL_SystemWindow);
			}

			foreach (GamePlayer p in living.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
				p.Out.SendSpellCastAnimation(living, Icon, 20);

			player.RealmAbilityCastTimer = new RegionTimer(player);
			player.RealmAbilityCastTimer.Callback = new RegionTimerCallback(startSpell);
			player.RealmAbilityCastTimer.Start(2000);
		}
Esempio n. 26
0
  public override void Start(GameLiving target)
 {
 	base.Start(target);
     if (target is GamePlayer)
     {
         EffectOwner = target as GamePlayer;
         foreach (GamePlayer p in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
         {
             p.Out.SendSpellEffectAnimation(EffectOwner, p, 7088, 0, false, 1);
         }
         GameEventMgr.AddHandler(EffectOwner, GamePlayerEvent.Quit, new DOLEventHandler(PlayerLeftWorld));
     	EffectOwner.BaseBuffBonusCategory[(int)eProperty.MagicAbsorption] += RealmAbilities.FanatacismAbility.VALUE;
     }
 }
Esempio n. 27
0
        // timer callbacks
        protected virtual int MakeAnimSpellSequence(RegionTimer callingTimer)
        {
            if (AnimSpellTeleportTimerQueue.Count > 0)
            {
                AnimSpellTeleportTimerQueue.Dequeue();
                GameLiving animObject = (GameLiving)AnimSpellObjectQueue.Dequeue();
                foreach (GamePlayer player in animObject.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
                {
                    player.Out.SendSpellCastAnimation(animObject, 1, 20);
                }
            }

            return(0);
        }
 public override void Start(GameLiving target)
 {
     base.Start(target);
     if (target is GamePlayer)
     {
         EffectOwner = target as GamePlayer;
         foreach (GamePlayer p in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
         {
             p.Out.SendSpellEffectAnimation(EffectOwner, p, 7088, 0, false, 1);
         }
         GameEventMgr.AddHandler(EffectOwner, GamePlayerEvent.Quit, new DOLEventHandler(PlayerLeftWorld));
         EffectOwner.BaseBuffBonusCategory[(int)eProperty.MagicAbsorption] += RealmAbilities.FanatacismAbility.VALUE;
     }
 }
Esempio n. 29
0
        public override void Start(GameLiving target)
        {
            if (target != null)
            {
                base.Start(target);

                foreach (GamePlayer p in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
                {
                    p.Out.SendSpellEffectAnimation(m_owner, target, Icon, 0, false, 1);
                }

                GameEventMgr.AddHandler(m_owner, GameLivingEvent.AttackFinished, new DOLEventHandler(OnAttack));
            }
        }
Esempio n. 30
0
        /// <summary>
        /// Sends cast message to environment
        /// </summary>
        protected virtual void SendCastMessage(GameLiving caster)
        {
            foreach (GamePlayer player in caster.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
            {
                if (caster.IsWithinRadius(player, WorldMgr.INFO_DISTANCE))
                {
                    var message = player == caster
                        ? LanguageMgr.GetTranslation(player.Client.Account.Language, "RealmAbility.SendCastMessage.YouCast", m_name)
                        : LanguageMgr.GetTranslation(player.Client.Account.Language, "RealmAbility.SendCastMessage.PlayerCasts", player.Name);

                    player.Out.SendMessage(message, eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
                }
            }
        }
Esempio n. 31
0
        private void DealDamage(GameLiving target)
        {
            int ticksToTarget = Caster.GetDistanceTo(target) * 100 / 85; // 85 units per 1/10s
            int delay         = 1 + ticksToTarget / 100;

            foreach (GamePlayer player in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
            {
                player.Out.SendSpellEffectAnimation(Caster, target, Spell.ClientEffect, (ushort)delay, false, 1);
            }

            BoltOnTargetAction bolt = new BoltOnTargetAction(Caster, target, this);

            bolt.Start(1 + ticksToTarget);
        }
Esempio n. 32
0
        /// <summary>
        /// Send spell effect animation on caster and send messages
        /// </summary>
        /// <param name="caster"></param>
        /// <param name="spellEffect"></param>
        /// <param name="success"></param>
        public virtual void SendCasterSpellEffectAndCastMessage(GameLiving caster, ushort spellEffect, bool success)
        {
            foreach (GamePlayer player in caster.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
            {
                player.Out.SendSpellEffectAnimation(caster, caster, spellEffect, 0, false, success ? (byte)1 : (byte)0);

                if (caster.IsWithinRadius(player, WorldMgr.INFO_DISTANCE))
                {
                    var message = player == caster
                        ? LanguageMgr.GetTranslation(player.Client.Account.Language, "RealmAbility.SendCasterSpellEffectAndCastMessage.You", m_name)
                        : LanguageMgr.GetTranslation(player.Client.Account.Language, "RealmAbility.SendCasterSpellEffectAndCastMessage.Caster", caster.Name);

                    player.Out.SendMessage(message, eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
                }
            }
        }
Esempio n. 33
0
        /// <summary>
        /// Starts the effect on the living
        /// </summary>
        /// <param name="living"></param>
        public override void Start(GameLiving living)
        {
            base.Start(living);
            m_owner.AbilityBonus[(int)eProperty.Resist_Body]   += _value;
            m_owner.AbilityBonus[(int)eProperty.Resist_Cold]   += _value;
            m_owner.AbilityBonus[(int)eProperty.Resist_Energy] += _value;
            m_owner.AbilityBonus[(int)eProperty.Resist_Heat]   += _value;
            m_owner.AbilityBonus[(int)eProperty.Resist_Matter] += _value;
            m_owner.AbilityBonus[(int)eProperty.Resist_Spirit] += _value;
            (m_owner as GamePlayer)?.Out.SendCharResistsUpdate();

            foreach (GamePlayer visiblePlayer in living.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
            {
                visiblePlayer.Out.SendSpellEffectAnimation(living, living, 1197, 0, false, 1);
            }
        }
Esempio n. 34
0
        private void DamageTarget(GameLiving target, GameLiving caster)
        {
            if (!target.IsAlive)
                return;

            foreach (GamePlayer p in target.GetPlayersInRadius(false, WorldMgr.VISIBILITY_DISTANCE))
            {
                p.Out.SendSpellEffectAnimation(caster, target, 7072, 0, false, 1);
            }

            if (target.EffectList.GetOfType<EntwiningSnakesEffect>() == null)
            {
                EntwiningSnakesEffect effect = new EntwiningSnakesEffect();
                effect.Start(target);
            }
        }
Esempio n. 35
0
        private void DamageTarget(GameLiving target, GameLiving caster, double counter)
        {
            int level = caster.GetModifiedSpecLevel("Stormcalling");

            if (level > 50)
            {
                level = 50;
            }
            modifier   = 0.5 + (level * 0.01) * Math.Pow(0.75, counter);
            basedamage = (int)(450 * modifier);
            resist     = basedamage * target.GetResist(eDamageType.Energy) / -100;
            damage     = basedamage + resist;

            GamePlayer player = caster as GamePlayer;

            if (player != null)
            {
                player.Out.SendMessage("You hit " + target.Name + " for " + damage + "(" + resist + ") points of damage!", eChatType.CT_YouHit, eChatLoc.CL_SystemWindow);
            }

            GamePlayer targetPlayer = target as GamePlayer;

            if (targetPlayer != null)
            {
                if (targetPlayer.IsStealthed)
                {
                    targetPlayer.Stealth(false);
                }
            }

            foreach (GamePlayer p in target.GetPlayersInRadius(false, WorldMgr.VISIBILITY_DISTANCE))
            {
                p.Out.SendSpellEffectAnimation(caster, target, 3505, 0, false, 1);
                p.Out.SendCombatAnimation(caster, target, 0, 0, 0, 0, 0x14, target.HealthPercent);
            }

            //target.TakeDamage(caster, eDamageType.Spirit, damage, 0);
            AttackData ad = new AttackData();

            ad.AttackResult = GameLiving.eAttackResult.HitUnstyled;
            ad.Attacker     = caster;
            ad.Target       = target;
            ad.DamageType   = eDamageType.Energy;
            ad.Damage       = damage;
            target.OnAttackedByEnemy(ad);
            caster.DealDamage(ad);
        }
Esempio n. 36
0
        private void DamageTarget(GameLiving target, GameLiving caster, double counter)
        {
            int level = caster.GetModifiedSpecLevel("Stormcalling");

            if (level > 50)
            {
                level = 50;
            }

            _modifier   = 0.5 + (level * 0.01) * Math.Pow(0.75, counter);
            _basedamage = (int)(450 * _modifier);
            _resist     = _basedamage * target.GetResist(eDamageType.Energy) / -100;
            _damage     = _basedamage + _resist;

            if (caster is GamePlayer player)
            {
                player.Out.SendMessage($"You hit {target.Name} for {_damage}({_resist}) points of damage!", eChatType.CT_YouHit, eChatLoc.CL_SystemWindow);
            }

            if (target is GamePlayer targetPlayer)
            {
                if (targetPlayer.IsStealthed)
                {
                    targetPlayer.Stealth(false);
                }
            }

            foreach (GamePlayer p in target.GetPlayersInRadius(false, WorldMgr.VISIBILITY_DISTANCE))
            {
                p.Out.SendSpellEffectAnimation(caster, target, 3505, 0, false, 1);
                p.Out.SendCombatAnimation(caster, target, 0, 0, 0, 0, 0x14, target.HealthPercent);
            }

            // target.TakeDamage(caster, eDamageType.Spirit, damage, 0);
            AttackData ad = new AttackData
            {
                AttackResult = GameLiving.eAttackResult.HitUnstyled,
                Attacker     = caster,
                Target       = target,
                DamageType   = eDamageType.Energy,
                Damage       = _damage
            };

            target.OnAttackedByEnemy(ad);
            caster.DealDamage(ad);
        }
Esempio n. 37
0
		public override void Start(GameLiving target)
		{
			if (target != null)
			{
				base.Start(target);

				if (target != null)
				{
					foreach (GamePlayer p in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
					{
						p.Out.SendSpellEffectAnimation(m_owner, target, Icon, 0, false, 1);
					}
				}

				GameEventMgr.AddHandler(m_owner, GameLivingEvent.AttackFinished, new DOLEventHandler(OnAttack));
			}
		}
Esempio n. 38
0
        private void DamageTarget(GameLiving target, GameLiving caster)
        {
            int resist = 251 * target.GetResist(eDamageType.Crush) / -100;
            int damage = 251 + resist;

            GamePlayer player = caster as GamePlayer;

            if (player != null)
            {
                player.Out.SendMessage("You hit " + target.Name + " for " + damage + "(" + resist + ") points of damage!", eChatType.CT_YouHit, eChatLoc.CL_SystemWindow);
            }

            GamePlayer targetPlayer = target as GamePlayer;

            if (targetPlayer != null)
            {
                if (targetPlayer.IsStealthed)
                {
                    targetPlayer.Stealth(false);
                }
            }

            foreach (GamePlayer p in target.GetPlayersInRadius(false, WorldMgr.VISIBILITY_DISTANCE))
            {
                p.Out.SendSpellEffectAnimation(caster, target, 7043, 0, false, 1);
                p.Out.SendCombatAnimation(caster, target, 0, 0, 0, 0, 0x14, target.HealthPercent);
            }

            //target.TakeDamage(caster, eDamageType.Spirit, damage, 0);
            AttackData ad = new AttackData();

            ad.AttackResult = GameLiving.eAttackResult.HitUnstyled;
            ad.Attacker     = caster;
            ad.Target       = target;
            ad.DamageType   = eDamageType.Crush;
            ad.Damage       = damage;
            target.OnAttackedByEnemy(ad);
            caster.DealDamage(ad);

            if (target.EffectList.GetOfType <WhirlingStaffEffect>() == null)
            {
                WhirlingStaffEffect effect = new WhirlingStaffEffect();
                effect.Start(target);
            }
        }
        public const Int32 m_duration = 45000; //45 seconds

        public override void Execute(GameLiving living)
        {
            if (CheckPreconditions(living, DEAD | SITTING | MEZZED | STUNNED)) return;

            foreach (GamePlayer t_player in living.GetPlayersInRadius(WorldMgr.INFO_DISTANCE))
            {
                if (t_player == living && living is GamePlayer)
                {
                    (living as GamePlayer).Out.SendMessage("You clear your mind and become more resistant to magic damage!", eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
                }
                else
                {
                    t_player.Out.SendMessage(living.Name + " casts a spell!", eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
                }
            }
            new TheEmptyMindEffect(this.Level).Start(living);
            DisableSkill(living);
        }
Esempio n. 40
0
		/// <summary>
		/// Starts the effect on the living
		/// </summary>
		/// <param name="living"></param>
		public override void Start(GameLiving living)
		{
			base.Start(living);
			m_value = Value;
			m_owner.AbilityBonus[(int)eProperty.Resist_Body] += m_value;
			m_owner.AbilityBonus[(int)eProperty.Resist_Cold] += m_value;
			m_owner.AbilityBonus[(int)eProperty.Resist_Energy] += m_value;
			m_owner.AbilityBonus[(int)eProperty.Resist_Heat] += m_value;
			m_owner.AbilityBonus[(int)eProperty.Resist_Matter] += m_value;
			m_owner.AbilityBonus[(int)eProperty.Resist_Spirit] += m_value;
			if (m_owner is GamePlayer)
				(m_owner as GamePlayer).Out.SendCharResistsUpdate(); 

			foreach (GamePlayer visiblePlayer in living.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
			{
				visiblePlayer.Out.SendSpellEffectAnimation(living, living, 1197, 0, false, 1);
			}
		}
Esempio n. 41
0
 public override void DamageTarget(AttackData ad, bool showEffectAnimation)
 {
     ad.Damage = (int)(ad.Damage * m_effetiveness);
     base.DamageTarget(ad, showEffectAnimation);
     if (m_currentTick < m_maxTick)
     {
         m_effetiveness -= 0.1;
         //fetch next target
         foreach (GamePlayer pl in m_currentSource.GetPlayersInRadius(500))
         {
             if (GameServer.ServerRules.IsAllowedToAttack(Caster, pl, true))
             {
                 StartSpell(pl);
                 break;
             }
         }
     }
 }
Esempio n. 42
0
        private void DamageTarget(GameLiving target, GameLiving caster)
        {
            if (!target.IsAlive)
            {
                return;
            }

            foreach (GamePlayer p in target.GetPlayersInRadius(false, WorldMgr.VISIBILITY_DISTANCE))
            {
                p.Out.SendSpellEffectAnimation(caster, target, 7072, 0, false, 1);
            }

            if (target.EffectList.GetOfType <EntwiningSnakesEffect>() == null)
            {
                EntwiningSnakesEffect effect = new EntwiningSnakesEffect();
                effect.Start(target);
            }
        }
Esempio n. 43
0
		public const Int32 m_duration = 45000; //45 seconds

		public override void Execute(GameLiving living)
		{
			if (CheckPreconditions(living, DEAD | SITTING | MEZZED | STUNNED)) return;

			foreach (GamePlayer t_player in living.GetPlayersInRadius(WorldMgr.INFO_DISTANCE))
			{
				if (t_player == living && living is GamePlayer)
				{
					(living as GamePlayer).Out.SendMessage("You clear your mind and become more resistant to magic damage!", eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
				}
				else
				{
					t_player.Out.SendMessage(living.Name + " casts a spell!", eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
				}
			}
			
			int effectiveness = 10;
			if(ServerProperties.Properties.USE_NEW_ACTIVES_RAS_SCALING)
			{
				switch (Level)
				{
					case 1: effectiveness = 10; break;
					case 2: effectiveness = 15; break;
					case 3: effectiveness = 20; break;
					case 4: effectiveness = 25; break;
					case 5: effectiveness = 30; break;
					default: effectiveness = 0; break;
				}				
			}
			else
			{
				switch (Level)
				{
					case 1: effectiveness = 10; break;
					case 2: effectiveness = 20; break;
					case 3: effectiveness = 30; break;
					default: effectiveness = 0; break;
				}
			}
			
			
			new TheEmptyMindEffect(effectiveness).Start(living);
			DisableSkill(living);
		}
        /// <summary>
        /// Start the effect on a living target
        /// </summary>
        /// <param name="living"></param>
        public override void Start(GameLiving living)
        {
            m_playerOwner = living as GamePlayer;

            if (m_playerOwner == null)
                return;

            m_group = m_playerOwner.Group;

            if (m_group == null)
                return;

            base.Start(living);

            m_playerOwner.Out.SendMessage("You group is protected by a pool of healing!", eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
            GameEventMgr.AddHandler(m_group, GroupEvent.MemberJoined, new DOLEventHandler(PlayerJoinedGroup));
            GameEventMgr.AddHandler(m_group, GroupEvent.MemberDisbanded, new DOLEventHandler(PlayerDisbandedGroup));

            foreach (GamePlayer gp in m_group.GetPlayersInTheGroup())
            {
                foreach (GamePlayer p in living.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
                {
                    if (!p.IsAlive) continue;
                    p.Out.SendSpellEffectAnimation(living, gp, 7036, 0, false, 1);
                }

                if (gp == m_playerOwner)
                    continue;

                gp.Out.SendMessage("You are protected by a pool of healing!", eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
                m_affected.Add(gp);
                GameEventMgr.AddHandler(gp, GamePlayerEvent.TakeDamage, new DOLEventHandler(TakeDamage));
                if (gp.CharacterClass.ID == (int)eCharacterClass.Necromancer)
                {
                    if (gp.ControlledBrain != null)
                    {
                        m_affected.Add(gp.ControlledBrain.Body);
                        GameEventMgr.AddHandler(gp.ControlledBrain.Body, GameLivingEvent.TakeDamage, new DOLEventHandler(TakeDamageNPC));
                    }
                }
            }
        }
Esempio n. 45
0
        private void DamageTarget(GameLiving target, GameLiving caster)
        {
            double modifier = 0.5 + (caster.GetModifiedSpecLevel("Soulrending") * 0.01);
            int basedamage = (int)(250 * modifier);
            int resist = basedamage * target.GetResist(eDamageType.Spirit) / -100;
            int damage = basedamage + resist;
            int heal = (int)(damage * 0.75);
            int modheal = caster.MaxHealth - caster.Health;
            if (modheal > heal)
                modheal = heal;
            caster.Health += modheal;

            GamePlayer player = caster as GamePlayer;
            if (player != null)
                player.Out.SendMessage("You hit " + target.Name + " for " + damage + "(" + resist + ") points of damage!", eChatType.CT_YouHit, eChatLoc.CL_SystemWindow);
            if (caster is GamePlayer && modheal > 0)
                ((GamePlayer)caster).Out.SendMessage("Your Soul Quench returns " + modheal + " lifepoints to you", eChatType.CT_Spell, eChatLoc.CL_SystemWindow);

            GamePlayer targetPlayer = target as GamePlayer;
            if (targetPlayer != null)
            {
                if (targetPlayer.IsStealthed)
                    targetPlayer.Stealth(false);
            }

            foreach (GamePlayer p in target.GetPlayersInRadius(false, WorldMgr.VISIBILITY_DISTANCE))
            {
                p.Out.SendSpellEffectAnimation(caster, target, 1145, 0, false, 1);
                p.Out.SendCombatAnimation(caster, target, 0, 0, 0, 0, 0x14, target.HealthPercent);
            }

            //target.TakeDamage(caster, eDamageType.Spirit, damage, 0);
            AttackData ad = new AttackData();
            ad.AttackResult = GameLiving.eAttackResult.HitUnstyled;
            ad.Attacker = caster;
            ad.Target = target;
            ad.DamageType = eDamageType.Spirit;
            ad.Damage = damage;
            target.OnAttackedByEnemy(ad);
            caster.DealDamage(ad);
        }
Esempio n. 46
0
        public override void Execute(GameLiving living)
        {
            #region preCheck
            if (CheckPreconditions(living, DEAD | SITTING | MEZZED | STUNNED)) return;

            if (living.EffectList.CountOfType<BadgeOfValorEffect>() > 0)
            {
                if (living is GamePlayer)
                    (living as GamePlayer).Out.SendMessage("You already an effect of that type!", eChatType.CT_SpellResisted, eChatLoc.CL_SystemWindow);
                return;
            }

            #endregion

            //send spelleffect
            foreach (GamePlayer visPlayer in living.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
                visPlayer.Out.SendSpellEffectAnimation(living, living, 7057, 0, false, 0x01);

            new BadgeOfValorEffect().Start(living);
            living.DisableSkill(this, m_reuseTimer * 1000);
        }
        public override void Start(GameLiving target)
        {
            base.Start(target);
            _owner = target;
            foreach (GamePlayer p in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
            {
                p.Out.SendSpellEffectAnimation(target, target, 7042, 0, false, 1);
            }

            _owner.IsStunned = true;
            _owner.StopAttack();
            _owner.StopCurrentSpellcast();
            _owner.DisableTurning(true);
            if (_owner is GamePlayer player)
            {
                player.Out.SendUpdateMaxSpeed();
            }
            else if (_owner.CurrentSpeed > _owner.MaxSpeed)
            {
                _owner.CurrentSpeed = _owner.MaxSpeed;
            }
        }
Esempio n. 48
0
		/// <summary>
		/// Start the effect.
		/// </summary>
		/// <param name="target"></param>
		public override void Start(GameLiving target)
		{
			base.Start(target);

			GamePlayer petOwner = null;
			if (target is GameNPC && (target as GameNPC).Brain is IControlledBrain)
				petOwner = ((target as GameNPC).Brain as IControlledBrain).Owner as GamePlayer;

			foreach (GamePlayer player in target.GetPlayersInRadius(WorldMgr.INFO_DISTANCE))
			{
				if (player == null)
					continue;

				player.Out.SendSpellEffectAnimation(target, target, 1073, 0, false, 1);

				eChatType chatType = (player != null && player == petOwner)
					? eChatType.CT_Spell
					: eChatType.CT_System;

				player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Effects.Necro.TauntEffect.SeemsChange", target.GetName(0, true)), chatType, eChatLoc.CL_SystemWindow);
			}
		}
        public override void Start(GameLiving target)
		{
            base.Start(target);
            owner = target;
            foreach (GamePlayer p in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
            {
                p.Out.SendSpellEffectAnimation(target, target, 7042, 0, false, 1);
            }
            owner.IsStunned = true;
            owner.StopAttack();
            owner.StopCurrentSpellcast();
            owner.DisableTurning(true);
            GamePlayer player = owner as GamePlayer;
            if (player != null)
            {
                player.Out.SendUpdateMaxSpeed();
            }
            else if(owner.CurrentSpeed > owner.MaxSpeed) 
            {
                owner.CurrentSpeed = owner.MaxSpeed;
            }
        }
        private void DamageTarget(GameLiving target, GameLiving caster)
        {
            int resist = 251 * target.GetResist(eDamageType.Crush) / -100;
            int damage = 251 + resist;

            GamePlayer player = caster as GamePlayer;
            if (player != null)
                player.Out.SendMessage("You hit " + target.Name + " for " + damage + "(" + resist + ") points of damage!", eChatType.CT_YouHit, eChatLoc.CL_SystemWindow);

            GamePlayer targetPlayer = target as GamePlayer;
            if (targetPlayer != null)
            {
                if (targetPlayer.IsStealthed)
                    targetPlayer.Stealth(false);
            }

            foreach (GamePlayer p in target.GetPlayersInRadius(false, WorldMgr.VISIBILITY_DISTANCE))
            {
                p.Out.SendSpellEffectAnimation(caster, target, 7043, 0, false, 1);
                p.Out.SendCombatAnimation(caster, target, 0, 0, 0, 0, 0x14, target.HealthPercent);
            }

            //target.TakeDamage(caster, eDamageType.Spirit, damage, 0);
            AttackData ad = new AttackData();
            ad.AttackResult = GameLiving.eAttackResult.HitUnstyled;
            ad.Attacker = caster;
            ad.Target = target;
            ad.DamageType = eDamageType.Crush;
            ad.Damage = damage;
            target.OnAttackedByEnemy(ad);
            caster.DealDamage(ad);

            if (target.EffectList.GetOfType<WhirlingStaffEffect>() == null)
            {
                WhirlingStaffEffect effect = new WhirlingStaffEffect();
                effect.Start(target);
            }
        }
Esempio n. 51
0
        public override void ApplyEffectOnTarget(GameLiving target, double effectiveness)
        {
            base.ApplyEffectOnTarget(Caster, effectiveness);
            Caster.StopAttack();
            Caster.DisarmedTime = Caster.CurrentRegion.Time + Spell.Duration;
            foreach (GamePlayer visPlayer in Caster.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
            {
                visPlayer.Out.SendCombatAnimation(Caster, target, 0x0000, 0x0000, 408, 0, 0x00, target.HealthPercent);
            }

            if (Spell.ResurrectMana > 0)
            {
                foreach (GamePlayer visPlayer in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
                {
                    visPlayer.Out.SendSpellEffectAnimation(Caster, target, (ushort)Spell.ResurrectMana, 0, false, 0x01);
                }
            }

            if (Spell.Duration > 0 && Spell.Target != "Area" || Spell.Concentration > 0)
            {
                OnDirectEffect(target, effectiveness);
            }
        }
        /// <summary>
        /// called when spell effect has to be started and applied to targets
        /// </summary>
        public override bool StartSpell(GameLiving target)
        {
            if (target == null) return false;

            if (m_maxTick >= 0)
            {
                m_maxTick = (Spell.Pulse > 1) ? Spell.Pulse : 1;
                m_currentTick = 1;
                m_currentSource = target;
            }

            int ticksToTarget = m_currentSource.GetDistanceTo(target) * 100 / 85; // 85 units per 1/10s
            int delay = 1 + ticksToTarget / 100;
            foreach (GamePlayer player in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
            {
                player.Out.SendSpellEffectAnimation(m_currentSource, target, m_spell.ClientEffect, (ushort)(delay), false, 1);
            }
            BoltOnTargetAction bolt = new BoltOnTargetAction(Caster, target, this);
            bolt.Start(1 + ticksToTarget);
            m_currentSource = target;
            m_currentTick++;

            return true;
        }
Esempio n. 53
0
		/// <summary>
		/// Send spell effect animation on caster and send messages
		/// </summary>
		/// <param name="caster"></param>
		/// <param name="spellEffect"></param>
		/// <param name="success"></param>
		public virtual void SendCasterSpellEffectAndCastMessage(GameLiving caster, ushort spellEffect, bool success)
		{
			foreach (GamePlayer player in caster.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
			{
				player.Out.SendSpellEffectAnimation(caster, caster, spellEffect, 0, false, success ? (byte)1 : (byte)0);

				if ( caster.IsWithinRadius( player, WorldMgr.INFO_DISTANCE ) )
				{
					if (player == caster)
					{
						player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client, "RealmAbility.SendCasterSpellEffectAndCastMessage.You", m_name), eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
					}
					else
					{
						player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client, "RealmAbility.SendCasterSpellEffectAndCastMessage.Caster", caster.Name), eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
					}
				}
			}
		}
Esempio n. 54
0
		/// <summary>
		/// Sends cast message to environment
		/// </summary>
		protected virtual void SendCastMessage(GameLiving caster)
		{
			foreach (GamePlayer player in caster.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
			{
				if ( caster.IsWithinRadius( player, WorldMgr.INFO_DISTANCE ) )
				{
					if (player == caster)
					{
						player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client, "RealmAbility.SendCastMessage.YouCast", m_name), eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
					}
					else
					{
						player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client, "RealmAbility.SendCastMessage.PlayerCasts", player.Name), eChatType.CT_Spell, eChatLoc.CL_SystemWindow);
					}
				}
			}
		}
Esempio n. 55
0
		private void DamageTarget(GameLiving target)
		{
			if (!GameServer.ServerRules.IsAllowedToAttack(owner, target, true))
				return;
			if (!target.IsAlive)
				return;
			if (ticktimer.IsAlive)
			{
				ticktimer.Stop();
				removeHandlers();
			}
			int dist = target.GetDistanceTo( new Point3D( traparea.X, traparea.Y, traparea.Z ) );
			double mod = 1;
			if (dist > 0)
				mod = 1 - ((double)dist / 350);

			int basedamage = (int)(effectiveness * mod);
			int resist = (int)(basedamage * target.GetModified(eProperty.Resist_Energy) * -0.01);
			int damage = basedamage + resist;


			GamePlayer player = owner as GamePlayer;
			if (player != null)
			{
				player.Out.SendMessage("You hit " + target.Name + " for " + damage + "(" + resist + ") points of damage!", eChatType.CT_YouHit, eChatLoc.CL_SystemWindow);
			}

			GamePlayer targetPlayer = target as GamePlayer;
			if (targetPlayer != null)
			{
				if (targetPlayer.IsStealthed)
					targetPlayer.Stealth(false);
			}

			foreach (GamePlayer p in target.GetPlayersInRadius(false, WorldMgr.VISIBILITY_DISTANCE))
			{
				p.Out.SendSpellEffectAnimation(owner, target, 7026, 0, false, 1);
				p.Out.SendCombatAnimation(owner, target, 0, 0, 0, 0, 0x14, target.HealthPercent);
			}

			//target.TakeDamage(owner, eDamageType.Energy, damage, 0);
			AttackData ad = new AttackData();
			ad.AttackResult = GameLiving.eAttackResult.HitUnstyled;
			ad.Attacker = owner;
			ad.Target = target;
			ad.DamageType = eDamageType.Energy;
			ad.Damage = damage;
			target.OnAttackedByEnemy(ad);
			owner.DealDamage(ad);
		}
Esempio n. 56
0
        protected static bool RemoveNegativeEffects(GameLiving living, PurgeAbility purge)
        {
            bool removed = false;
            ArrayList effects = new ArrayList();


            GamePlayer player = (GamePlayer)living;

            if (player.CharacterClass.ID == (int)eCharacterClass.Necromancer)
            {
                NecromancerPet necroPet = (NecromancerPet)player.ControlledBrain.Body;
                lock (necroPet.EffectList)
                {
                    foreach (IGameEffect effect in necroPet.EffectList)
                    {
                        GameSpellEffect gsp = (GameSpellEffect)effect;

                        if (gsp == null)
                            continue;
                        if (gsp is GameSpellAndImmunityEffect && ((GameSpellAndImmunityEffect)gsp).ImmunityState)
                            continue;
                        if (gsp.SpellHandler.HasPositiveEffect)
                            continue;

                        effects.Add(gsp);
                        removed = true;
                    }
                }
            }

            lock (living.EffectList)
            {
                foreach (IGameEffect effect in living.EffectList)
                {
                    GameSpellEffect gsp = effect as GameSpellEffect;
                    if (gsp == null)
                        continue;
                    if (gsp is GameSpellAndImmunityEffect && ((GameSpellAndImmunityEffect)gsp).ImmunityState)
                        continue; // ignore immunity effects
                    if (gsp.SpellHandler.HasPositiveEffect)//only enemy spells are affected
                        continue;
                    /*
                    if (gsp.SpellHandler is RvRResurrectionIllness)
                       continue;
                     */
                    //if (gsp.Spell.SpellType == "DesperateBowman")//Can't be purged
                    //continue;
                    effects.Add(gsp);
                    removed = true;
                }

                foreach (IGameEffect effect in effects)
                {
                    effect.Cancel(false);
                }
            }

            if (player != null)
            {
                foreach (GamePlayer rangePlayer in living.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE))
                {
                    if (player.CharacterClass.ID == (int)eCharacterClass.Necromancer)
                    {
                        rangePlayer.Out.SendSpellEffectAnimation(player.ControlledBrain.Body,
                            player.ControlledBrain.Body, 7011, 0,
                            false, (byte)(removed ? 1 : 0));
                    }

                    rangePlayer.Out.SendSpellEffectAnimation(player, player, 7011, 0, false, (byte)(removed ? 1 : 0));
                }
                if (removed)
                {
                    player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "PurgeAbility.RemoveNegativeEffects.FallFromYou"), eChatType.CT_Advise, eChatLoc.CL_SystemWindow);
                }
                else
                {
                    player.DisableSkill(purge, 5);
                }
            }
            if (removed)
                player.Stealth(false);
            return removed;
        }
        private void DamageTarget(GameLiving target, GameLiving caster, double counter)
        {
            int level = caster.GetModifiedSpecLevel("Stormcalling");
            if (level > 50)
                level = 50;
            modifier = 0.5 + (level * 0.01) * Math.Pow(0.75, counter);
            basedamage = (int)(450 * modifier);
            resist = basedamage * target.GetResist(eDamageType.Energy) / -100;
            damage = basedamage + resist;

            GamePlayer player = caster as GamePlayer;
            if (player != null)
                player.Out.SendMessage("You hit " + target.Name + " for " + damage + "(" + resist + ") points of damage!", eChatType.CT_YouHit, eChatLoc.CL_SystemWindow);

            GamePlayer targetPlayer = target as GamePlayer;
            if (targetPlayer != null)
            {
                if (targetPlayer.IsStealthed)
                    targetPlayer.Stealth(false);
            }

            foreach (GamePlayer p in target.GetPlayersInRadius(false, WorldMgr.VISIBILITY_DISTANCE))
            {
                p.Out.SendSpellEffectAnimation(caster, target, 3505, 0, false, 1);
                p.Out.SendCombatAnimation(caster, target, 0, 0, 0, 0, 0x14, target.HealthPercent);
            }

            //target.TakeDamage(caster, eDamageType.Spirit, damage, 0);
            AttackData ad = new AttackData();
            ad.AttackResult = GameLiving.eAttackResult.HitUnstyled;
            ad.Attacker = caster;
            ad.Target = target;
            ad.DamageType = eDamageType.Energy;
            ad.Damage = damage;
            target.OnAttackedByEnemy(ad);
            caster.DealDamage(ad);
        }