Beispiel #1
0
        /// <summary>
        /// Attacks the victim
        /// </summary>
        internal void TryAttack()
        {
            Vector2D VictimPOS = new Vector2D(_Victim.X, _Victim.Y);
            Vector2D MyPOS     = new Vector2D(GetRoomUser().X, GetRoomUser().Y);

            #region Conditions
            if (_Victim == null)
            {
                _Victim = null;
                FollowPlayer(GetRoomUser().FollowingOwner);
                return;
            }

            if (_Victim.IsAsleep)
            {
                _Victim = null;
                Shout("Dammnit, hes asleep..");
                FollowPlayer(GetRoomUser().FollowingOwner);
                return;
            }

            if (_Victim.GetClient() != null)
            {
                if (_Victim.GetClient().GetRoleplay().Dead)
                {
                    _Victim = null;
                    FollowPlayer(GetRoomUser().FollowingOwner);
                    return;
                }
            }

            if (!InSameRoom(_Victim))
            {
                _Victim = null;
                FollowPlayer(GetRoomUser().FollowingOwner);
                return;
            }
            #endregion

            #region Following Cooldown
            if (CurCoolDown > 0)
            {
                if (CurWalkInterval > 0)
                {
                    RunRandomly();
                    CurWalkInterval--;
                }
                else
                {
                    CurWalkInterval = WalkInterval;
                }

                CurCoolDown--;
                return;
            }
            else
            {
                if (CurFollowInterval > FollowInterval)
                {
                    CurFollowInterval--;
                    return;
                }
                else
                {
                    CurFollowInterval++;
                    FollowPlayer(_Victim);
                }
            }
            #endregion

            #region Lands Attack
            if (RoleplayManager.BotWithinAttackDistance(GetRoomUser(), _Victim))
            {
                uint victimroom = 0;
                uint petroom    = 0;
                if (_Victim.GetClient() != null)
                {
                    if (_Victim.GetClient().GetHabbo() != null)
                    {
                        victimroom = _Victim.GetClient().GetHabbo().CurrentRoomId;
                        petroom    = GetRoom().RoomId;

                        if (petroom != 0)
                        {
                            if (victimroom != petroom)
                            {
                                _Victim = null;
                                FollowPlayer(GetRoomUser().FollowingOwner);
                                return;
                            }
                        }
                    }
                }

                CurCoolDown = CoolDown;
                ExecuteAttack(_Victim);
                RunRandomly();
                return;
            }
            #endregion

            #region Misses Attack
            if (RoleplayManager.Distance(MyPOS, VictimPOS) >= 1 && RoleplayManager.Distance(MyPOS, VictimPOS) <= 2 && _Victim.IsWalking)
            {
                // Miss
                FollowInterval -= Difficulty_IncrementNum;
                AttackMisc(_Victim, 0, false, true);
            }
            #endregion

            #region Pursues Attack
            if (RoleplayManager.Distance(MyPOS, VictimPOS) >= 5)
            {
                if (CurFollowInterval > FollowInterval)
                {
                    CurFollowInterval--;
                    return;
                }
                else
                {
                    CurFollowInterval++;
                    FollowPlayer(_Victim);
                }

                return; // Don't even bother
            }
            #endregion
        }
Beispiel #2
0
        /// <summary>
        /// Attacks the victim
        /// </summary>
        internal void TryAttack(object StateInfo)
        {
            try
            {
                if (GetRoomUser() == null || GetRoom() == null ||
                    _AttackTimer == null || _Victim == null ||
                    _Victim.RoomId != GetRoom().RoomId)
                {
                    _Victim = null; return;
                }

                if (GetBotData().CoolDown != null)
                {
                    return;
                }

                GameClient Session = _Victim.GetClient();
                if (Session == null || Session.GetHabbo() == null || Session.GetRoleplay() == null || Session.GetHabbo().CurrentRoom == null)
                {
                    _AttackTimer.Change(2000, 2000); _Victim = null; return;
                }

                Vector2D VictimPOS = new Vector2D(_Victim.X, _Victim.Y);
                Vector2D MyPOS     = new Vector2D(GetRoomUser().X, GetRoomUser().Y);

                if (RoleplayManager.BotWithinAttackDistance(GetRoomUser(), _Victim))
                {
                    int ExtraDamage = (new Random()).Next(5, 15);
                    int Damage      = GetBotData().strength + ExtraDamage;

                    // Kill this punk
                    if (Session.GetRoleplay().CurHealth - Damage <= 0)
                    {
                        GetRoomUser().Chat(null, "*Da um soco em " + _Victim.GetUserName() + ", nocauteando-o*", true, 1);
                        Session.GetRoleplay().CurHealth = 120;
                        Session.GetRoleplay().Energy    = 120;
                        Session.GetRoleplay().Hunger    = 0;
                        Session.GetRoleplay().UpdateStats++;

                        // Tell this n***a he got f****d up by our bot
                        Session.SendNotif("Você foi nocauteado pelo BOT-" + GetBotData().Name);
                        _Victim = null;
                        // SEND THIS N***A BACK TO HIS SHIT HOLE
                        Session.GetMessageHandler().PrepareRoomForUser(Plus.GetGame().MafiaWars.GraveYardID, "");

                        // Get next victim init
                        LookForVictim();
                        _AttackTimer.Change(1000, 1000);
                        return;
                    }

                    GetRoomUser().Chat(null, "*Bate em " + _Victim.GetUserName() + ", causando " + Damage + " dano*", true, 1);
                    RoleplayManager.Shout(Session, "*[" + Session.GetRoleplay().CurHealth + "/" + Session.GetRoleplay().MaxHealth + "]*");

                    Session.GetRoleplay().CurHealth -= Damage;
                    Session.GetRoleplay().UpdateStats++;

                    GetBotData().ApplyCooldown();
                    _AttackTimer.Change(1000, 1000);
                    return;
                }

                if (RoleplayManager.Distance(MyPOS, VictimPOS) >= 1 && RoleplayManager.Distance(MyPOS, VictimPOS) <= 2)
                {
                    // Miss
                    GetRoomUser().Chat(null, "*Tenta bater em " + _Victim.GetUserName() + " mas erra*", true, 1);

                    GetBotData().ApplyCooldown(2000);
                    _AttackTimer.Change(1000, 1000);
                    return;
                }

                if (RoleplayManager.Distance(MyPOS, VictimPOS) >= 5)
                {
                    _AttackTimer.Change(1000, 1000);
                    return; // Don't even bother
                }
            }
            catch { }
        }