Beispiel #1
0
        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);
 }
Beispiel #4
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);
        }
Beispiel #5
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);
        }