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;