diff --git a/DataCollection/gamedata.json b/DataCollection/gamedata.json index e6e5c9f..872efba 100644 --- a/DataCollection/gamedata.json +++ b/DataCollection/gamedata.json @@ -12,6 +12,10 @@ "click_nothing_message":"Nothing interesting here...", "playtime_timeout":"You have run out of playtime for now. In one minute you will be disconnected. You gain one minute of playtime every 8 minutes. Please come back later!", "random_movement":"You are sooo %STAT%. You wander dizzily in a different direction.", + "consume":{ + "consumed_item_format":"GULP! You consumed the %ITEM%.", + "consumed_but_max_reached":"You could not finish it all. Some was wasted." + }, "equips":{ "removed_competition_gear":"You removed selected competition gear.", "removed_jewelry":"You removed selected jewelry.", @@ -338,7 +342,7 @@ "for_sender":{ "here_format":"%USERNAME%: %MESSAGE% (%AMOUNT% here)", "isle_format":"%USERNAME%: %MESSAGE% [%AMOUNT% on isle]", - "ads_format":"%USERNAME: %MESSAGE% [%AMOUNT% listening]", + "ads_format":"%USERNAME%: %MESSAGE% [%AMOUNT% listening]", "near_format":"%USERNAME%: %MESSAGE% [%AMOUNT% near]", "mod_format":"%USERNAME%: %MESSAGE% [%AMOUNT% mods]", "admin_format":"%USERNAME%: %MESSAGE% [%AMOUNT% admins]", diff --git a/Horse Isle Server/Horse Isle Server/Game/Chat/Chat.cs b/Horse Isle Server/Horse Isle Server/Game/Chat/Chat.cs index a336ca0..b2252a7 100644 --- a/Horse Isle Server/Horse Isle Server/Game/Chat/Chat.cs +++ b/Horse Isle Server/Horse Isle Server/Game/Chat/Chat.cs @@ -110,7 +110,7 @@ namespace HISP.Game.Chat foreach(Filter filter in FilteredWords) { - if (filter.MatchAll) + if (!filter.MatchAll) { foreach (string word in wordsSaid) { @@ -401,7 +401,8 @@ namespace HISP.Game.Chat else return Messages.FormatGlobalChatMessage(user.Username, message); case ChatChannel.Ads: - return Messages.FormatAdsChatMessage(user.Username, message); + int numbListening = GameServer.GetNumberOfPlayersListeningToAdsChat(); // vry specific function ik + return Messages.FormatAdsChatForSender(numbListening, user.Username, message); case ChatChannel.Buddies: return Messages.FormatBuddyChatMessageForSender(user.Friends.Count, user.Username, message); case ChatChannel.Isle: diff --git a/Horse Isle Server/Horse Isle Server/Game/Messages.cs b/Horse Isle Server/Horse Isle Server/Game/Messages.cs index 6509a8f..db33f4f 100644 --- a/Horse Isle Server/Horse Isle Server/Game/Messages.cs +++ b/Horse Isle Server/Horse Isle Server/Game/Messages.cs @@ -104,6 +104,7 @@ namespace HISP.Game public static string IsleChatFormatForSender; public static string NearChatFormatForSender; public static string HereChatFormatForSender; + public static string AdsChatFormatForSender; public static string BuddyChatFormatForSender; public static string DirectChatFormatForSender; public static string AdminChatFormatForSender; @@ -143,6 +144,11 @@ namespace HISP.Game public static string MaxJewelryMessage; public static string RemoveJewelry; + // Consume + + public static string ConsumeItemFormat; + public static string ConsumedButMaxReached; + // Inventory public static string InventoryItemFormat; public static string InventoryHeaderFormat; @@ -247,6 +253,10 @@ namespace HISP.Game // Click public static string NothingInterestingHere; + public static string FormatConsumeItemMessaege(string itemName) + { + return ConsumeItemFormat.Replace("%ITEM%", itemName); + } public static string FormatAwardEntry(int iconId, string title, int moneyBonus) { return AwardFormat.Replace("%ICON%", iconId.ToString()).Replace("%NAME%", title).Replace("%BONUS%", moneyBonus.ToString("N0")); @@ -631,29 +641,34 @@ namespace HISP.Game // For Sender public static string FormatBuddyChatMessageForSender(int numbBuddies, string username, string message) { - return BuddyChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbBuddies.ToString()); + return BuddyChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbBuddies.ToString("N0")); } public static string FormatHereChatMessageForSender(int numbHere, string username, string message) { - return HereChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbHere.ToString()); + return HereChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbHere.ToString("N0")); } public static string FormatNearChatMessageForSender(int numbNear, string username, string message) { - return NearChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbNear.ToString()); + return NearChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbNear.ToString("N0")); } public static string FormatIsleChatMessageForSender(int numbIsle, string username, string message) { - return IsleChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbIsle.ToString()); + return IsleChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbIsle.ToString("N0")); } public static string FormatAdminChatForSender(int numbAdmins, string username, string message) { - return AdminChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbAdmins.ToString()); + return AdminChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbAdmins.ToString("N0")); + } + + public static string FormatAdsChatForSender(int numbListening, string username, string message) + { + return AdsChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbListening.ToString("N0")); } public static string FormatModChatForSender(int numbMods, string username, string message) { - return ModChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbMods.ToString()); + return ModChatFormatForSender.Replace("%USERNAME%", username).Replace("%MESSAGE%", message).Replace("%AMOUNT%", numbMods.ToString("N0")); } public static string FormatDirectChatMessageForSender(string username,string toUsername, string message) { diff --git a/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs b/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs index 80276e9..419120e 100644 --- a/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs +++ b/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs @@ -500,6 +500,7 @@ namespace HISP.Server Messages.BuddyChatFormatForSender = gameData.messages.chat.for_sender.friend_format; Messages.DirectChatFormatForSender = gameData.messages.chat.for_sender.dm_format; Messages.ModChatFormatForSender = gameData.messages.chat.for_sender.mod_format; + Messages.AdsChatFormatForSender = gameData.messages.chat.for_sender.ads_format; Messages.AdminChatFormatForSender = gameData.messages.chat.for_sender.admin_format; Messages.AdminCommandFormat = gameData.messages.commands.admin_command_completed; @@ -549,6 +550,11 @@ namespace HISP.Server Messages.Brought5ButInventoryFull = gameData.messages.shop.brought_5_but_inv_full; Messages.Brought25ButInventoryFull = gameData.messages.shop.brought_25_but_inv_full; + // Consume + + Messages.ConsumeItemFormat = gameData.messages.consume.consumed_item_format; + Messages.ConsumedButMaxReached = gameData.messages.consume.consumed_but_max_reached; + // Meta Format Messages.LocationFormat = gameData.messages.meta.location_format; diff --git a/Horse Isle Server/Horse Isle Server/Server/GameServer.cs b/Horse Isle Server/Horse Isle Server/Server/GameServer.cs index 3184b61..0c7ab9f 100644 --- a/Horse Isle Server/Horse Isle Server/Server/GameServer.cs +++ b/Horse Isle Server/Horse Isle Server/Server/GameServer.cs @@ -1368,7 +1368,71 @@ namespace HISP.Server } break; + case PacketBuilder.ITEM_CONSUME: + packetStr = Encoding.UTF8.GetString(packet); + randomIdStr = packetStr.Substring(2, packet.Length - 2); + randomId = 0; + try + { + randomId = Int32.Parse(randomIdStr); + } + catch (FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid object interaction packet."); + return; + } + + if (sender.LoggedinUser.Inventory.HasItem(randomId)) + { + InventoryItem itm = sender.LoggedinUser.Inventory.GetItemByRandomid(randomId); + ItemInstance instance = itm.ItemInstances[0]; + sender.LoggedinUser.Inventory.Remove(instance); + Item.ItemInformation itmInfo = instance.GetItemInfo(); + bool toMuch = false; + foreach(Item.Effects effect in itmInfo.Effects) + { + switch(effect.EffectsWhat) + { + case "TIREDNESS": + if (sender.LoggedinUser.Tiredness + effect.EffectAmount > 1000) + toMuch = true; + sender.LoggedinUser.Tiredness += effect.EffectAmount; + break; + case "THIRST": + if (sender.LoggedinUser.Thirst + effect.EffectAmount > 1000) + toMuch = true; + sender.LoggedinUser.Thirst += effect.EffectAmount; + break; + case "HUNGER": + if (sender.LoggedinUser.Hunger + effect.EffectAmount > 1000) + toMuch = true; + sender.LoggedinUser.Hunger += effect.EffectAmount; + break; + case "NOEFFECT": + break; + default: + Logger.ErrorPrint("Unknown effect: " + effect.EffectsWhat); + break; + + } + } + + + byte[] chatPacket = PacketBuilder.CreateChat(Messages.FormatConsumeItemMessaege(itmInfo.Name), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + if (toMuch) + { + chatPacket = PacketBuilder.CreateChat(Messages.ConsumedButMaxReached, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(chatPacket); + } + UpdateInventory(sender); + } + else + { + Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to consume an item they did not have."); + } + break; case PacketBuilder.ITEM_DROP: packetStr = Encoding.UTF8.GetString(packet); randomIdStr = packetStr.Substring(2, packet.Length - 2); @@ -1912,6 +1976,19 @@ namespace HISP.Server return count; } + + public static int GetNumberOfPlayersListeningToAdsChat() + { + int count = 0; + foreach (GameClient client in ConnectedClients) + { + if (client.LoggedIn) + if (!client.LoggedinUser.MuteAds) + count++; + } + return count; + } + public static int GetNumberOfModsOnline() { int count = 0; @@ -2066,20 +2143,20 @@ namespace HISP.Server string[] args = paramaters.Split(','); try { - if(World.InIsle(tile.X, tile.Y)) + int newX = int.Parse(args[0]); + int newY = int.Parse(args[1]); + forClient.LoggedinUser.Teleport(newX, newY); + if (World.InIsle(tile.X, tile.Y)) { World.Isle isle = World.GetIsle(tile.X, tile.Y); int tileset = isle.Tileset; int overlay = Map.GetTileId(tile.X, tile.Y, true); - if(tileset == 6 && overlay == 249) + if (tileset == 6 && overlay == 249) // warp point { byte[] swfPacket = PacketBuilder.CreateSwfModulePacket("warpcutscene", PacketBuilder.PACKET_SWF_CUTSCENE); forClient.SendPacket(swfPacket); } } - int newX = int.Parse(args[0]); - int newY = int.Parse(args[1]); - forClient.LoggedinUser.Teleport(newX, newY); return false; } catch(Exception) diff --git a/Horse Isle Server/Horse Isle Server/Server/PacketBuilder.cs b/Horse Isle Server/Horse Isle Server/Server/PacketBuilder.cs index 4dc35e4..5be7100 100644 --- a/Horse Isle Server/Horse Isle Server/Server/PacketBuilder.cs +++ b/Horse Isle Server/Horse Isle Server/Server/PacketBuilder.cs @@ -89,6 +89,7 @@ namespace HISP.Server public const byte ITEM_SELL_ALL = 0x3D; public const byte ITEM_WEAR = 0x46; public const byte ITEM_REMOVE = 0x47; + public const byte ITEM_CONSUME = 0x51; public const byte ITEM_BINOCULARS = 0x5C; public const byte ITEM_MAGNIFYING = 0x5D; public const byte ITEM_RAKE = 0x5B;