Beispiel #1
0
        /// <summary>
        /// Goes the name of to room by.
        /// </summary>
        internal void GoToRoomByName()
        {
            string name   = Request.GetString();
            uint   roomId = 0;

            switch (name)
            {
            case "predefined_noob_lobby":
                roomId = Convert.ToUInt32(Yupi.GetDbConfig().DbData["noob.lobby.roomid"]);
                break;

            case "random_friending_room":
                List <RoomData> rooms = Yupi.GetGame().GetRoomManager().GetActiveRooms().Select(room => room.Key).Where(room => room != null && room.UsersNow > 0).ToList();
                if (!rooms.Any())
                {
                    return;
                }
                if (rooms.Count() == 1)
                {
                    roomId = rooms.First().Id;
                    break;
                }
                roomId = rooms[Yupi.GetRandomNumber(0, rooms.Count())].Id;
                break;
            }

            if (roomId == 0)
            {
                return;
            }
            ServerMessage roomFwd = new ServerMessage(LibraryParser.OutgoingRequest("RoomForwardMessageComposer"));

            roomFwd.AppendInteger(roomId);
            Session.SendMessage(roomFwd);
        }
Beispiel #2
0
        /// <summary>
        ///     Gets the random ecotron reward.
        /// </summary>
        /// <returns>EcotronReward.</returns>
        internal EcotronReward GetRandomEcotronReward()
        {
            uint level = 1u;

            if (Yupi.GetRandomNumber(1, 2000) == 2000)
            {
                level = 5u;
            }
            else if (Yupi.GetRandomNumber(1, 200) == 200)
            {
                level = 4u;
            }
            else if (Yupi.GetRandomNumber(1, 40) == 40)
            {
                level = 3u;
            }
            else if (Yupi.GetRandomNumber(1, 4) == 4)
            {
                level = 2u;
            }

            List <EcotronReward> ecotronRewardsForLevel = GetEcotronRewardsForLevel(level);

            return(ecotronRewardsForLevel[Yupi.GetRandomNumber(0, ecotronRewardsForLevel.Count - 1)]);
        }
Beispiel #3
0
        public static int HandleRotation(int oldRotation, RotationState state)
        {
            int rotation = oldRotation;

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

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

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

            return(rotation);
        }
Beispiel #4
0
        /// <summary>
        ///     Called when [teleport room user enter].
        /// </summary>
        /// <param name="user">The user.</param>
        /// <param name="item">The item.</param>
        internal void OnTeleportRoomUserEnter(RoomUser user, RoomItem item)
        {
            List <RoomItem> items = _banzaiTeleports.Inner.Values.Where(p => p.Id != item.Id).ToList();

            if (!items.Any())
            {
                return;
            }

            int countId     = Yupi.GetRandomNumber(0, items.Count());
            int countAmount = 0;

            foreach (RoomItem current in items.Where(current => current != null))
            {
                if (countAmount != countId)
                {
                    countAmount++;
                    continue;
                }
                current.ExtraData    = "1";
                current.UpdateNeeded = true;
                _room.GetGameMap().TeleportToItem(user, current);
                item.ExtraData    = "1";
                item.UpdateNeeded = true;
                current.UpdateState();
                item.UpdateState();

                break;
            }
        }
Beispiel #5
0
Datei: Pet.cs Projekt: sgf/Yupi
        /// <summary>
        ///     Pets the energy.
        /// </summary>
        /// <param name="add">if set to <c>true</c> [add].</param>
        internal void PetEnergy(bool add)
        {
            int num;

            if (add)
            {
                if (Energy > 100)
                {
                    Energy = 100;

                    return;
                }

                if (Energy > 85)
                {
                    return;
                }

                if (Energy > 85)
                {
                    num = MaxEnergy - Energy;
                }
                else
                {
                    num = 10;
                }
            }

            else
            {
                num = 15;
            }

            if (num <= 4)
            {
                num = 15;
            }

            int randomNumber = Yupi.GetRandomNumber(4, num);

            if (!add)
            {
                Energy -= randomNumber;

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

            if (DbState != DatabaseUpdateState.NeedsInsert)
            {
                DbState = DatabaseUpdateState.NeedsUpdate;
            }
        }
Beispiel #6
0
        public static Point HandleMovementDir(Point newCoordinate, MovementDirection state, int newRotation)
        {
            Point newPoint = new Point(newCoordinate.X, newCoordinate.Y);

            switch (state)
            {
            case MovementDirection.Up:
            case MovementDirection.Down:
            case MovementDirection.Left:
            case MovementDirection.Right:
            case MovementDirection.DownRight:
            case MovementDirection.DownLeft:
            case MovementDirection.UpRight:
            case MovementDirection.UpLeft:
            {
                HandleMovementDir(ref newPoint, state);
                break;
            }

            case MovementDirection.Random:
            {
                switch (Yupi.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);
        }
Beispiel #7
0
        /// <summary>
        ///     Gets the random speech.
        /// </summary>
        /// <param name="mixPhrases">if set to <c>true</c> [mix phrases].</param>
        /// <returns>System.String.</returns>
        internal string GetRandomSpeech(bool mixPhrases)
        {
            if (!RandomSpeech.Any())
            {
                return(string.Empty);
            }

            if (mixPhrases)
            {
                return(RandomSpeech[Yupi.GetRandomNumber(0, RandomSpeech.Count - 1)]);
            }

            if (LastSpokenPhrase >= RandomSpeech.Count)
            {
                LastSpokenPhrase = 1;
            }

            string result = RandomSpeech[LastSpokenPhrase - 1];

            LastSpokenPhrase++;

            return(result);
        }
Beispiel #8
0
        /// <summary>
        ///     Cycles the pyramids.
        /// </summary>
        private void CyclePyramids()
        {
            foreach (RoomItem item in _banzaiPyramids.Select(pyramid => pyramid.Value).Where(current => current != null))
            {
                if (item.InteractionCountHelper == 0 && item.ExtraData == "1")
                {
                    _room.GetGameMap().RemoveFromMap(item, false);
                    item.InteractionCountHelper = 1;
                }
                if (string.IsNullOrEmpty(item.ExtraData))
                {
                    item.ExtraData = "0";
                }

                int randomNumber = Yupi.GetRandomNumber(0, 30);
                if (randomNumber <= 26)
                {
                    continue;
                }
                if (item.ExtraData == "0")
                {
                    item.ExtraData = "1";
                    item.UpdateState();
                    _room.GetGameMap().RemoveFromMap(item, false);
                }
                else
                {
                    if (!_room.GetGameMap().ItemCanBePlacedHere(item.X, item.Y))
                    {
                        continue;
                    }
                    item.ExtraData = "0";
                    item.UpdateState();
                    _room.GetGameMap().AddItemToMap(item, false);
                }
            }
        }
Beispiel #9
0
        public bool Execute(params object[] stuff)
        {
            if (stuff[0] == null)
            {
                return(false);
            }

            RoomUser user = (RoomUser)stuff[0];

            if (stuff[1] == null)
            {
                return(false);
            }

            Interaction item = (Interaction)stuff[1];

            if (_mBanned.Contains(item))
            {
                return(false);
            }

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

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

            int amountLeft = Convert.ToInt32(OtherExtraString2);

            bool unique = OtherBool;

            bool premied = false;

            if (amountLeft == 1)
            {
                ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("WiredRewardAlertMessageComposer"));

                message.AppendInteger(0);
                user.GetClient().SendMessage(message);

                return(true);
            }

            foreach (string dataStr in OtherString.Split(';'))
            {
                string[] dataArray = dataStr.Split(',');

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

                int random = Yupi.GetRandomNumber(0, 100);

                ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("WiredRewardAlertMessageComposer"));

                if (!unique && percentage < random)
                {
                    continue;
                }

                premied = true;

                if (isbadge)
                {
                    if (user.GetClient().GetHabbo().GetBadgeComponent().HasBadge(code))
                    {
                        message.AppendInteger(1);
                        user.GetClient().SendMessage(message);
                    }
                    else
                    {
                        user.GetClient()
                        .GetHabbo()
                        .GetBadgeComponent()
                        .GiveBadge(code, true, user.GetClient(), true);

                        message.AppendInteger(7);
                        user.GetClient().SendMessage(message);
                    }
                }
                else //item or effect
                {
                    Item roomItem = Yupi.GetGame().GetItemManager().GetItem(uint.Parse(code));

                    if (roomItem == null)
                    {
                        continue;
                    }

                    if (roomItem.Type == 'e') // is effect
                    {
                        user.GetClient().GetHabbo().GetAvatarEffectsInventoryComponent().AddNewEffect(roomItem.SpriteId, 3600, 1);
                    }
                    else
                    {
                        user.GetClient().GetHabbo().GetInventoryComponent().AddNewItem(0u, roomItem.Name, "0", 0u, true, false, 0, 0);
                        user.GetClient().SendMessage(new ServerMessage(LibraryParser.OutgoingRequest("UpdateInventoryMessageComposer")));
                    }

                    message.AppendInteger(6);
                    user.GetClient().SendMessage(message);
                }
            }

            if (!premied)
            {
                ServerMessage message = new ServerMessage(LibraryParser.OutgoingRequest("WiredRewardAlertMessageComposer"));
                message.AppendInteger(4);
                user.GetClient().SendMessage(message);
            }
            else if (amountLeft > 1)
            {
                amountLeft--;
                OtherExtraString2 = amountLeft.ToString();
            }

            return(true);
        }
Beispiel #10
0
        /// <summary>
        ///     Called when [timer tick].
        /// </summary>
        internal override void OnTimerTick()
        {
            if (_speechTimer <= 0)
            {
                RoomUser roomUser = GetRoomUser();

                if (roomUser != null)
                {
                    if (roomUser.PetData.DbState != DatabaseUpdateState.NeedsInsert)
                    {
                        roomUser.PetData.DbState = DatabaseUpdateState.NeedsUpdate;
                    }

                    Random random = new Random();

                    RemovePetStatus();

                    string[] value = PetLocale.GetValue($"speech.pet{roomUser.PetData.Type}");

                    string text = value[random.Next(0, value.Length - 1)];

                    if (GetRoom() != null && !GetRoom().MutedPets)
                    {
                        roomUser.Chat(null, text, false, 0);
                    }
                    else
                    {
                        roomUser.Statusses.Add(text, ServerUserChatTextHandler.GetString(roomUser.Z));
                    }
                }

                _speechTimer = Yupi.GetRandomNumber(20, 120);
            }
            else
            {
                _speechTimer--;
            }

            if (_actionTimer <= 0 && GetRoomUser() != null)
            {
                try
                {
                    _actionTimer = GetRoomUser().FollowingOwner != null ? 2 : Yupi.GetRandomNumber(15, 40 + GetRoomUser().PetData.VirtualId);

                    RemovePetStatus();

                    _actionTimer = Yupi.GetRandomNumber(15, 40 + GetRoomUser().PetData.VirtualId);

                    if (GetRoomUser().RidingHorse != true)
                    {
                        RemovePetStatus();

                        if (GetRoomUser().FollowingOwner != null)
                        {
                            GetRoomUser().MoveTo(GetRoomUser().FollowingOwner.SquareBehind);
                        }
                        else
                        {
                            if (GetRoomUser().PetData.Type == 16)
                            {
                                return;                                   //Monsterplants can't move
                            }
                            Point nextCoord = GetRoom().GetGameMap().GetRandomValidWalkableSquare();
                            GetRoomUser().MoveTo(nextCoord.X, nextCoord.Y);
                        }
                    }

                    if (new Random().Next(2, 15) % 2 == 0)
                    {
                        if (GetRoomUser().PetData.Type == 16)
                        {
                            MoplaBreed breed = GetRoomUser().PetData.MoplaBreed;
                            GetRoomUser().PetData.Energy--;
                            GetRoomUser().AddStatus("gst", breed.LiveState == MoplaState.Dead ? "sad" : "sml");
                            GetRoomUser()
                            .PetData.MoplaBreed.OnTimerTick(GetRoomUser().PetData.LastHealth,
                                                            GetRoomUser().PetData.UntilGrown);
                        }
                        else
                        {
                            if (GetRoomUser().PetData.Energy < 30)
                            {
                                GetRoomUser().AddStatus("lay", "");
                            }
                            else
                            {
                                GetRoomUser().AddStatus("gst", "joy");
                                if (new Random().Next(1, 7) == 3)
                                {
                                    GetRoomUser().AddStatus("snf", "");
                                }
                            }
                        }
                        GetRoomUser().UpdateNeeded = true;
                    }

                    goto IL_1B5;
                }
                catch (Exception pException)
                {
                    ServerLogManager.HandleException(pException, "PetBot.OnTimerTick");

                    goto IL_1B5;
                }
            }

            _actionTimer--;

IL_1B5:

            if (_energyTimer <= 0)
            {
                RemovePetStatus();

                RoomUser roomUser2 = GetRoomUser();

                roomUser2?.PetData.PetEnergy(true);

                _energyTimer = Yupi.GetRandomNumber(30, 120);

                return;
            }

            _energyTimer--;
        }
Beispiel #11
0
        public static Point HandleMovement(Point newCoordinate, MovementState state, int newRotation)
        {
            Point 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.LeftRight:
            {
                if (Yupi.GetRandomNumber(0, 2) == 1)
                {
                    HandleMovement(ref newPoint, MovementState.Left);
                }
                else
                {
                    HandleMovement(ref newPoint, MovementState.Right);
                }
                break;
            }

            case MovementState.UpDown:
            {
                if (Yupi.GetRandomNumber(0, 2) == 1)
                {
                    HandleMovement(ref newPoint, MovementState.Up);
                }
                else
                {
                    HandleMovement(ref newPoint, MovementState.Down);
                }
                break;
            }

            case MovementState.Random:
            {
                switch (Yupi.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);
        }