/// <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); }
/// <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)]); }
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); }
/// <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; } }
/// <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; } }
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); }
/// <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); }
/// <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); } } }
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); }
/// <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--; }
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); }