/// <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); }
/// <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); }
/// <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); }
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)); }
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); }
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); }
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)); } } } }
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); }
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); }
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); }
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)); }
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); }
/// <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); }
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; } }
// 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) { 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)); } }
/// <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); } } }
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); }
/// <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); } } }
/// <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); } }
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); } }
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); }
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); }
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)); } }
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); }
/// <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); } }
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; } } } }
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); } }
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)); } } } }
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); }
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; } }
/// <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); } }
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; }
/// <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); } } } }
/// <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); } } } }
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); }
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); }