Пример #1
0
        public static int HandleRotation(int oldRotation, RotationState state)
        {
            var rotation = oldRotation;

            switch (state)
            {
            case RotationState.CLOCK_WISE:
            {
                HandleClockwiseRotation(ref rotation);
                return(rotation);
            }

            case RotationState.COUNTER_CLOCK_WISE:
            {
                HandleCounterClockwiseRotation(ref rotation);
                return(rotation);
            }

            case RotationState.RANDOM:
            {
                if (RavenEnvironment.GetRandomNumber(0, 3) == 1)
                {
                    HandleClockwiseRotation(ref rotation);
                }
                else
                {
                    HandleCounterClockwiseRotation(ref rotation);
                }
                return(rotation);
            }
            }

            return(rotation);
        }
Пример #2
0
        public static Point HandleMovementDir(Point newCoordinate, MovementDirection state, int newRotation)
        {
            var newPoint = new Point(newCoordinate.X, newCoordinate.Y);

            switch (state)
            {
            case MovementDirection.UP:
            case MovementDirection.DOWN:
            case MovementDirection.LEFT:
            case MovementDirection.RIGHT:
            case MovementDirection.DOWN_RIGHT:
            case MovementDirection.DOWN_LEFT:
            case MovementDirection.UP_RIGHT:
            case MovementDirection.UP_LEFT:
            {
                HandleMovementDir(ref newPoint, state);
                break;
            }

            case MovementDirection.RANDOM:
            {
                switch (RavenEnvironment.GetRandomNumber(1, 5))
                {
                case 1:
                {
                    HandleMovementDir(ref newPoint, MovementDirection.UP);
                    break;
                }

                case 2:
                {
                    HandleMovementDir(ref newPoint, MovementDirection.DOWN);
                    break;
                }

                case 3:
                {
                    HandleMovementDir(ref newPoint, MovementDirection.LEFT);
                    break;
                }

                case 4:
                {
                    HandleMovementDir(ref newPoint, MovementDirection.RIGHT);
                    break;
                }
                }
                break;
            }
            }

            return(newPoint);
        }
Пример #3
0
        public void PetEnergy(bool Add)
        {
            int MaxE;

            if (Add)
            {
                if (Energy == 100) // If Energy is 100, no point.
                {
                    return;
                }

                if (Energy > 85)
                {
                    MaxE = MaxEnergy - Energy;
                }
                else
                {
                    MaxE = 10;
                }
            }
            else
            {
                MaxE = 15; // Remove Max Energy as 15
            }
            if (MaxE <= 4)
            {
                MaxE = 15;
            }

            int r = RavenEnvironment.GetRandomNumber(4, MaxE);

            if (!Add)
            {
                Energy = Energy - r;

                if (Energy < 0)
                {
                    Energy = 1;
                    r      = 1;
                }
            }
            else
            {
                Energy = Energy + r;
            }


            if (DBState != DatabaseUpdateState.NeedsInsert)
            {
                DBState = DatabaseUpdateState.NeedsUpdate;
            }
        }
Пример #4
0
        public static Point HandleMovement(Point newCoordinate, MovementState state, int newRotation)
        {
            var newPoint = new Point(newCoordinate.X, newCoordinate.Y);

            switch (state)
            {
            case MovementState.UP:
            case MovementState.DOWN:
            case MovementState.LEFT:
            case MovementState.RIGHT:
            {
                HandleMovement(ref newPoint, state);
                break;
            }

            case MovementState.LEFT_RIGHT:
            {
                if (RavenEnvironment.GetRandomNumber(0, 2) == 1)
                {
                    HandleMovement(ref newPoint, MovementState.LEFT);
                }
                else
                {
                    HandleMovement(ref newPoint, MovementState.RIGHT);
                }
                break;
            }

            case MovementState.UP_DOWN:
            {
                if (RavenEnvironment.GetRandomNumber(0, 2) == 1)
                {
                    HandleMovement(ref newPoint, MovementState.UP);
                }
                else
                {
                    HandleMovement(ref newPoint, MovementState.DOWN);
                }
                break;
            }

            case MovementState.RANDOM:
            {
                switch (RavenEnvironment.GetRandomNumber(1, 5))
                {
                case 1:
                {
                    HandleMovement(ref newPoint, MovementState.UP);
                    break;
                }

                case 2:
                {
                    HandleMovement(ref newPoint, MovementState.DOWN);
                    break;
                }

                case 3:
                {
                    HandleMovement(ref newPoint, MovementState.LEFT);
                    break;
                }

                case 4:
                {
                    HandleMovement(ref newPoint, MovementState.RIGHT);
                    break;
                }
                }
                break;
            }
            }

            return(newPoint);
        }
Пример #5
0
        public override void OnTimerTick()
        {
            RoomUser Pet = GetRoomUser();

            if (Pet == null)
            {
                return;
            }


            #region Speech

            if (SpeechTimer <= 0)
            {
                if (Pet.PetData.DBState != DatabaseUpdateState.NeedsInsert)
                {
                    Pet.PetData.DBState = DatabaseUpdateState.NeedsUpdate;
                }

                if (Pet != null)
                {
                    var RandomSpeech = new Random();
                    RemovePetStatus();

                    string[] Speech  = RavenEnvironment.GetGame().GetChatManager().GetPetLocale().GetValue("speech.pet" + Pet.PetData.Type);
                    string   rSpeech = Speech[RandomNumber.GenerateRandom(0, Speech.Length - 1)];

                    if (rSpeech.Length != 3)
                    {
                        Pet.Chat(rSpeech, false);
                    }
                    else
                    {
                        Pet.Statusses.Add(rSpeech, TextHandling.GetString(Pet.Z));
                    }
                }
                SpeechTimer = RavenEnvironment.GetRandomNumber(20, 120);
            }
            else
            {
                SpeechTimer--;
            }

            #endregion

            #region Actions

            if (ActionTimer <= 0)
            {
                try
                {
                    RemovePetStatus();
                    ActionTimer = RandomNumber.GenerateRandom(15, 40 + GetRoomUser().PetData.VirtualId);
                    if (!GetRoomUser().RidingHorse)
                    {
                        // Remove Status
                        RemovePetStatus();

                        Point nextCoord = GetRoom().GetGameMap().getRandomWalkableSquare();
                        if (GetRoomUser().CanWalk)
                        {
                            GetRoomUser().MoveTo(nextCoord.X, nextCoord.Y);
                        }
                    }
                }
                catch (Exception e)
                {
                    Logging.HandleException(e, "PetBot.OnTimerTick");
                }
            }
            else
            {
                ActionTimer--;
            }

            #endregion

            #region Energy

            if (EnergyTimer <= 0)
            {
                RemovePetStatus();                                  // Remove Status

                Pet.PetData.PetEnergy(true);                        // Add Energy

                EnergyTimer = RandomNumber.GenerateRandom(30, 120); // 2 Min Max
            }
            else
            {
                EnergyTimer--;
            }

            #endregion
        }
Пример #6
0
 public Item GetRandomExitTile()
 {
     return(ExitTeleports.Values.ToList()[RavenEnvironment.GetRandomNumber(0, ExitTeleports.Count - 1)]);
 }
Пример #7
0
        public bool Execute(params object[] Params)
        {
            if (Params == null || Params.Length == 0)
            {
                return(false);
            }

            Habbo Owner = RavenEnvironment.GetHabboById(Item.UserID);

            if (Owner == null || !Owner.GetPermissions().HasRight("room_item_wired_rewards"))
            {
                return(false);
            }

            Habbo Player = (Habbo)Params[0];

            if (Player == null || Player.GetClient() == null)
            {
                return(false);
            }

            RoomUser User = Player.CurrentRoom.GetRoomUserManager().GetRoomUserByHabbo(Player.Username);

            if (User == null)
            {
                return(false);
            }

            Room Room = Player.CurrentRoom;

            if (String.IsNullOrEmpty(StringData))
            {
                return(false);
            }

            int    SplitNumber  = -1;
            int    oftenforuser = int.Parse(this.StringData.Split('-')[3]);
            int    amountLeft   = int.Parse(this.StringData.Split('-')[2]);
            int    often        = int.Parse(this.StringData.Split('-')[1]);
            string Reward       = this.StringData.Split('-')[0];
            bool   unique       = this.BoolData;
            int    totalrewards = (this.StringData.Split('-')[0]).Split(';').Count();
            bool   premied      = false;

            /*
             * Often numbers
             * 3- 1/min
             * 2- 1/Hour
             * 1- 1/Day
             * 0- Once
             *
             */

            if (amountLeft == 1)
            {
                Player.GetClient().SendMessage(new WiredRewardAlertComposer(0));
                return(true);
            }

            if (!unique)
            {
                int percentage1     = 0;
                int percentage2     = 0;
                int percentage3     = 0;
                int percentage4     = 0;
                int percentage5     = 0;
                int totalpercentage = 0;

                if (totalrewards > 0)
                {
                    percentage1 = int.Parse(((this.StringData.Split('-')[0]).Split(';')[0]).Split(',')[2]);
                }
                else if (totalrewards > 1)
                {
                    percentage2 = int.Parse(((this.StringData.Split('-')[0]).Split(';')[1]).Split(',')[2]) + percentage1;
                }
                else if (totalrewards > 2)
                {
                    percentage3 = int.Parse(((this.StringData.Split('-')[0]).Split(';')[2]).Split(',')[2]) + percentage2;
                }
                else if (totalrewards > 3)
                {
                    percentage4 = int.Parse(((this.StringData.Split('-')[0]).Split(';')[3]).Split(',')[2]) + percentage3;
                }
                else if (totalrewards > 4)
                {
                    percentage5 = int.Parse(((this.StringData.Split('-')[0]).Split(';')[4]).Split(',')[2]) + percentage4;
                }

                totalpercentage = percentage5 + percentage4 + percentage3 + percentage2 + percentage1;

                var random = RavenEnvironment.GetRandomNumber(0, 100);

                if (random > totalpercentage)
                {
                    Player.GetClient().SendMessage(new WiredRewardAlertComposer(4));
                    return(true);
                }


                if (percentage1 >= random)
                {
                    SplitNumber = 0;
                }
                else if (percentage1 <= random && random <= percentage2)
                {
                    SplitNumber = 1;
                }
                else if (percentage2 <= random && random <= percentage3)
                {
                    SplitNumber = 2;
                }
                else if (percentage3 <= random && random <= percentage4)
                {
                    SplitNumber = 3;
                }
                else if (percentage4 <= random && random <= percentage5 || random >= percentage5)
                {
                    SplitNumber = 4;
                }

                Player.GetClient().SendWhisper(random + " | " + SplitNumber + " | " + totalpercentage);

                var dataArray = ((this.StringData.Split('-')[0]).Split(';')[SplitNumber]).Split(',');

                var isbadge    = dataArray[0] == "0";
                var code       = dataArray[1];
                var percentage = int.Parse(dataArray[2]);

                premied = true;

                if (isbadge)
                {
                    if (code.StartsWith("diamonds:"))
                    {
                        foreach (var reward in code.Split('-'))
                        {
                            var dataArray2 = code.Split(':');
                            var diamonds   = int.Parse(dataArray2[1]);
                            if (diamonds > 100)
                            {
                                Player.GetClient().SendMessage(new RoomCustomizedAlertComposer("¡Ha ocurrido un error! Avisa a un miembro del equipo Staff."));
                                RavenEnvironment.GetGame().GetClientManager().StaffAlert(RoomNotificationComposer.SendBubble("advice", "" + Player.GetClient().GetHabbo().Username + " ha usado un wired que no sigue las normas del hotel.\n             Click aquí.", "event:navigator/goto/" + Player.GetClient().GetHabbo().CurrentRoomId));
                            }
                            else
                            {
                                Player.GetClient().GetHabbo().Diamonds += diamonds;
                                Player.GetClient().SendMessage(new HabboActivityPointNotificationComposer(Player.GetClient().GetHabbo().Diamonds, diamonds, 5));
                            }
                        }
                    }
                    else if (Player.GetBadgeComponent().HasBadge(code))
                    {
                        Player.GetClient().SendMessage(new WiredRewardAlertComposer(5));
                    }
                    else
                    {
                        Player.GetBadgeComponent().GiveBadge(code, true, Player.GetClient());
                        Player.GetClient().SendMessage(new WiredRewardAlertComposer(7));
                    }
                }
                else
                {
                    ItemData ItemData = null;

                    if (!RavenEnvironment.GetGame().GetItemManager().GetItem(int.Parse(code), out ItemData))
                    {
                        Player.GetClient().SendMessage(new WhisperComposer(User.VirtualId, "No se pudo obtener Item ID: " + code, 0, User.LastBubble));
                        return(false);
                    }

                    Item Item = ItemFactory.CreateSingleItemNullable(ItemData, Player.GetClient().GetHabbo(), "", "", 0, 0, 0);


                    if (Item != null)
                    {
                        Player.GetClient().GetHabbo().GetInventoryComponent().TryAddItem(Item);
                        Player.GetClient().SendMessage(new FurniListNotificationComposer(Item.Id, 1));
                        Player.GetClient().SendMessage(new PurchaseOKComposer());
                        Player.GetClient().SendMessage(new FurniListAddComposer(Item));
                        Player.GetClient().SendMessage(new FurniListUpdateComposer());
                        Player.GetClient().SendMessage(new WiredRewardAlertComposer(6));
                    }
                }
            }
            else
            {
                foreach (var dataStr in (this.StringData.Split('-')[0]).Split(';'))
                {
                    var dataArray = dataStr.Split(',');

                    var isbadge    = dataArray[0] == "0";
                    var code       = dataArray[1];
                    var percentage = int.Parse(dataArray[2]);

                    var random = RavenEnvironment.GetRandomNumber(0, 100);

                    premied = true;

                    if (isbadge)
                    {
                        if (code.StartsWith("diamonds:"))
                        {
                            foreach (var reward in code.Split('-'))
                            {
                                var dataArray2 = code.Split(':');
                                var diamonds   = int.Parse(dataArray2[1]);
                                if (diamonds > 100)
                                {
                                    Player.GetClient().SendMessage(new RoomCustomizedAlertComposer("¡Ha ocurrido un error! Avisa a un miembro del equipo Staff."));
                                    RavenEnvironment.GetGame().GetClientManager().StaffAlert(RoomNotificationComposer.SendBubble("advice", "" + Player.GetClient().GetHabbo().Username + " ha usado un wired que no sigue las normas del hotel.\n             Click aquí.", "event:navigator/goto/" + Player.GetClient().GetHabbo().CurrentRoomId));
                                }
                                else
                                {
                                    Player.GetClient().GetHabbo().Diamonds += diamonds;
                                    Player.GetClient().SendMessage(new HabboActivityPointNotificationComposer(Player.GetClient().GetHabbo().Diamonds, diamonds, 5));
                                }
                            }
                        }
                        if (Player.GetBadgeComponent().HasBadge(code))
                        {
                            Player.GetClient().SendMessage(new WiredRewardAlertComposer(5));
                        }
                        else
                        {
                            Player.GetBadgeComponent().GiveBadge(code, true, Player.GetClient());
                            Player.GetClient().SendMessage(new WiredRewardAlertComposer(7));
                        }
                    }
                    else
                    {
                        ItemData ItemData = null;

                        if (!RavenEnvironment.GetGame().GetItemManager().GetItem(int.Parse(code), out ItemData))
                        {
                            Player.GetClient().SendMessage(new WhisperComposer(User.VirtualId, "No se pudo obtener Item ID: " + code, 0, User.LastBubble));
                            return(false);
                        }

                        Item Item = ItemFactory.CreateSingleItemNullable(ItemData, Player.GetClient().GetHabbo(), "", "", 0, 0, 0);


                        if (Item != null)
                        {
                            Player.GetClient().GetHabbo().GetInventoryComponent().TryAddItem(Item);
                            Player.GetClient().SendMessage(new FurniListNotificationComposer(Item.Id, 1));
                            Player.GetClient().SendMessage(new PurchaseOKComposer());
                            Player.GetClient().SendMessage(new FurniListAddComposer(Item));
                            Player.GetClient().SendMessage(new FurniListUpdateComposer());
                            Player.GetClient().SendMessage(new WiredRewardAlertComposer(6));
                        }
                    }
                }
            }

            if (premied)
            {
            }
            else if (!premied)
            {
                Player.GetClient().SendMessage(new WiredRewardAlertComposer(4));
            }
            else if (amountLeft > 1)
            {
                amountLeft--;
                this.StringData = Reward + "-" + often + "-" + amountLeft + "-" + oftenforuser;
            }

            return(true);
        }