public void OnCommand(GameClient client, string[] args) { if (args.Length == 1) { DisplaySyntax(client); return; } int amount; try { amount = Convert.ToInt16(args[1]); GameLiving living = client.Player.TargetObject as GameLiving; if (living != null) { living.TakeDamage(client.Player, eDamageType.GM, amount, 0); } else { DisplayMessage(client, LanguageMgr.GetTranslation(client.Account.Language, "GMCommands.Harm.InvalidTarget")); } } catch (Exception ex) { List <string> list = new List <string>(); list.Add(ex.ToString()); client.Out.SendCustomTextWindow("Exception", list); } }
public override void DoDamage() { GameLiving target = (TargetObject as GameLiving); if (target == null) { Owner.Out.SendMessage("Select a target first.", eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } //todo good distance check if (!this.IsWithinRadius(target, AttackRange)) { Owner.Out.SendMessage("You are too far away to attack " + target.Name, eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } int damageAmount = RamDamage; //TODO: dps change by number target.TakeDamage(this, eDamageType.Crush, damageAmount, 0); Owner.Out.SendMessage("The Ram hits " + target.Name + " for " + damageAmount + " dmg!", eChatType.CT_YouHit, eChatLoc.CL_SystemWindow); Message.SystemToArea(this, GetName(0, false) + " hits " + target.GetName(0, true), eChatType.CT_OthersCombat, Owner); base.DoDamage(); }
public override void Start(GameLiving target) { base.Start(target); owner = target; GamePlayer player = target as GamePlayer; if (player != null) { foreach (GamePlayer p in player.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE)) { p.Out.SendSpellEffectAnimation(player, player, Icon, 0, false, 1); } } healthdrain = (int)(target.MaxHealth * 0.1); if (target.Health <= healthdrain) return; target.TakeDamage(target, eDamageType.Body, healthdrain, 0); }
public override void Start(GameLiving target) { base.Start(target); owner = target; GamePlayer player = target as GamePlayer; if (player != null) { foreach (GamePlayer p in player.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE)) { p.Out.SendSpellEffectAnimation(player, player, Icon, 0, false, 1); } } healthdrain = (int)(target.MaxHealth * 0.1); if (target.Health <= healthdrain) { return; } target.TakeDamage(target, eDamageType.Body, healthdrain, 0); }
protected const int REUSE_TIMER = 60 * 2000; // 2 minutes /// <summary> /// Execute the ability /// </summary> /// <param name="ab">The ability executed</param> /// <param name="player">The player that used the ability</param> public void Execute(Ability ab, GamePlayer player) { if (player == null) { if (log.IsWarnEnabled) { log.Warn("Could not retrieve player in FlurryAbilityHandler."); } return; } #region precheck if (!player.IsAlive) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Skill.Ability.CannotUseDead"), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (player.IsMezzed) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Skill.Ability.CannotUseMezzed"), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (player.IsStunned) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Skill.Ability.CannotUseStunned"), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (player.IsSitting) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Skill.Ability.CannotUseStanding"), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (player.TargetObject == null) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Skill.Ability.CannotUseNoTarget"), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (!(player.TargetObject is GamePlayer || player.TargetObject is GameKeepGuard)) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Skill.Ability.Flurry.TargetNotPlayerOrGuards"), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (!GameServer.ServerRules.IsAllowedToAttack(player, (GameLiving)player.TargetObject, true)) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Skill.Ability.CannotAttackTarget", player.TargetObject.Name), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (!player.IsObjectInFront(player.TargetObject, 180) || !player.TargetInView) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Skill.Ability.CannotSeeTarget", player.TargetObject.Name), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (!player.IsWithinRadius(player.TargetObject, 135)) //Didn't use AttackRange cause of the fact that player could use a Bow { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Skill.Ability.TargetIsWithinRadius"), eChatType.CT_System, eChatLoc.CL_SystemWindow); return; } if (player.TargetObject is GamePlayer && SpellHandler.FindEffectOnTarget((GamePlayer)player.TargetObject, "Phaseshift") != null) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Skill.Ability.TargetIsPhaseshifted", player.TargetObject.Name), eChatType.CT_Missed, eChatLoc.CL_SystemWindow); return; } if (player.TargetObject is GamePlayer) { SputinsLegacyEffect SputinLegacy = (player.TargetObject as GamePlayer).EffectList.GetOfType <SputinsLegacyEffect>(); if (SputinLegacy != null) { player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Skill.Ability.TargetIsUnderSputinLegacy", player.TargetObject.Name), eChatType.CT_Missed, eChatLoc.CL_SystemWindow); return; } } #endregion GameLiving target = (GameLiving)player.TargetObject; int damage = 0; int specc = (player.CharacterClass is PlayerClass.ClassBlademaster) ? player.GetModifiedSpecLevel(Specs.Celtic_Dual) : player.GetModifiedSpecLevel(Specs.Dual_Wield); //damage = base HP / 100 * DWspec / 2.7 that would be the original calculation if (target is GamePlayer) { damage = (int)(target.MaxHealth / 100 * specc / 4.5); // prev 3.5 } else { damage = (int)(target.MaxHealth / 100 * specc / 4.6); } // prev 3.6 #region Resists int primaryResistModifier = target.GetResist(eDamageType.Slash); //Using the resist BuffBonusCategory2 - its unused in ResistCalculator int secondaryResistModifier = target.SpecBuffBonusCategory[(int)eProperty.Resist_Slash]; int resistModifier = 0; //primary resists resistModifier += (int)(damage * (double)primaryResistModifier * -0.01); //secondary resists resistModifier += (int)((damage + (double)resistModifier) * (double)secondaryResistModifier * -0.01); //apply resists damage += resistModifier; #endregion //flurry is slash damage target.TakeDamage(player, eDamageType.Slash, damage, 0); GameSpellEffect mez = SpellHandler.FindEffectOnTarget(target, "Mesmerize"); if (mez != null) { mez.Cancel(false); } //sending spell effect foreach (GamePlayer effPlayer in target.GetPlayersInRadius(WorldMgr.VISIBILITY_DISTANCE)) { effPlayer.Out.SendSpellEffectAnimation(player, target, 7103, 0, false, 0x01); } player.Out.SendMessage(LanguageMgr.GetTranslation(player.Client.Account.Language, "Skill.Ability.Flurry.YouHit", target.GetName(0, false), damage), eChatType.CT_YouHit, eChatLoc.CL_SystemWindow); if (target is GamePlayer) { (target as GamePlayer).Out.SendMessage(LanguageMgr.GetTranslation((target as GamePlayer).Client, "Skill.Ability.Flurry.HitYou", player.Name, damage), eChatType.CT_Damaged, eChatLoc.CL_SystemWindow); } player.LastAttackTickPvP = player.CurrentRegion.Time; target.LastAttackedByEnemyTickPvP = target.CurrentRegion.Time; player.DisableSkill(ab, REUSE_TIMER); }