From 2947e7f1c766a78fe33fd41d803da52a816f8363 Mon Sep 17 00:00:00 2001 From: SilicaAndPina Date: Thu, 7 Jan 2021 00:35:03 +1300 Subject: [PATCH] Add horse inventory. --- DataCollection/gamedata.json | 14 +- .../Horse Isle Server/Game/Horse/HorseInfo.cs | 7 +- .../Game/Horse/HorseInstance.cs | 4 + .../Horse Isle Server/Game/Horse/WildHorse.cs | 48 ++++++ .../Game/Inventory/HorseInventory.cs | 42 +++++- .../Horse Isle Server/Game/Messages.cs | 19 +++ .../Horse Isle Server/Game/Meta.cs | 26 ++++ .../Horse Isle Server.csproj | 1 + .../Horse Isle Server/Player/User.cs | 3 +- .../Horse Isle Server/Server/Database.cs | 141 +++++++++++++++++- .../Horse Isle Server/Server/GameDataJson.cs | 16 +- .../Horse Isle Server/Server/GameServer.cs | 12 +- 12 files changed, 321 insertions(+), 12 deletions(-) diff --git a/DataCollection/gamedata.json b/DataCollection/gamedata.json index 3482141..81a82cb 100644 --- a/DataCollection/gamedata.json +++ b/DataCollection/gamedata.json @@ -136,7 +136,13 @@ "wild_horse":"^I252^T6%NAME%, It's a %BREED%^B3U%RANDOMID%^R1", "horse_timer":"You have 60 seconds to capture the horse. Good luck!", "horse_escaped":"The Horse Evaded Capture.", - "hore_caught":"You Captured the Horse!" + "hore_caught":"You Captured the Horse!", + + "horses_menu":"^ATYour Horses^HYou can have up to %MAXHORSE% horses. Here are your %TOTALHORSE%:
", + "update_category":"Horse set as %CATEGORY%", + "horse_format":"^I252^T7#%NUMB%: %NAME% (%BREED%) ^B3L%ID%^R1", + "view_basic_stats":"^T6View all of basic stats together:^D33|BASIC STATS^R1", + "view_advanced_stats":"^T6View all advanced stats together:^D34|ALL STATS^R1" }, "libary":{ "main_menu":"Welcome to the Library! You can research different subjects.
^T2Search Residents: ^D30|SEARCH NPC^R1^T2Search Ranches: ^D31|SEARCH RANCH^R1^T2Research Horses: ^D4|VIEW BREEDS^R1^T2Research Tack: ^D9|VIEW TACK^R1^T2Research Companions: ^D10|VIEW COMPANIONS^R1^T2Research Mini-Games: ^D12|VIEW MINIGAMES^R1^T2Research Locations: ^D22|VIEW LOCATIONS^R1^T2Research Awards: ^D23|VIEW AWARDS^R1^T2Read Books: ^D38|READ BOOKS^R1", @@ -580,6 +586,12 @@ } }, "horses":{ + "categorys":[ + {"name":"KEEPER","message":"^LKEEPERS - Horses I would not sell for any price:^R1"}, + {"name":"TRAINING","message":"^LTRAINING - Horses I am actively training and competing with:^R1"}, + {"name":"TRADING","message":"^LTRADING - Horses I am trading or auctioning:^R1"}, + {"name":"RETIRED","message":"^LRETIRED - Horses that are still special to me but not used:^R1"}, + ], "breeds":[ { "id": 1, diff --git a/Horse Isle Server/Horse Isle Server/Game/Horse/HorseInfo.cs b/Horse Isle Server/Horse Isle Server/Game/Horse/HorseInfo.cs index 3a6a471..a368fbd 100644 --- a/Horse Isle Server/Horse Isle Server/Game/Horse/HorseInfo.cs +++ b/Horse Isle Server/Horse Isle Server/Game/Horse/HorseInfo.cs @@ -50,8 +50,13 @@ namespace HISP.Game.Horse public Item.ItemInformation Companion; } + public struct Category + { + public string Name; + public string Meta; + } - + public static List HorseCategories = new List(); public static List Breeds = new List(); public static Breed GetBreedById(int id) diff --git a/Horse Isle Server/Horse Isle Server/Game/Horse/HorseInstance.cs b/Horse Isle Server/Horse Isle Server/Game/Horse/HorseInstance.cs index 4b65fdb..56902ad 100644 --- a/Horse Isle Server/Horse Isle Server/Game/Horse/HorseInstance.cs +++ b/Horse Isle Server/Horse Isle Server/Game/Horse/HorseInstance.cs @@ -89,7 +89,11 @@ namespace HISP.Game.Horse Category = "KEEPER"; Spoiled = 0; MagicUsed = 0; + RanchId = 0; + Leaser = 0; } + public int RanchId; + public int Leaser; public int RandomId; public int Owner; public string Name; diff --git a/Horse Isle Server/Horse Isle Server/Game/Horse/WildHorse.cs b/Horse Isle Server/Horse Isle Server/Game/Horse/WildHorse.cs index d63ee37..d5bdd12 100644 --- a/Horse Isle Server/Horse Isle Server/Game/Horse/WildHorse.cs +++ b/Horse Isle Server/Horse Isle Server/Game/Horse/WildHorse.cs @@ -90,6 +90,45 @@ namespace HISP.Game.Horse Database.AddWildHorse(this); } + + public void RandomWander() + { + int direction = GameServer.RandomNumberGenerator.Next(0, 3); + int tryX = this.X; + int tryY = this.Y; + + switch(direction) + { + case 0: + tryX += 1; + break; + case 1: + tryX -= 1; + break; + case 2: + tryY += 1; + break; + case 3: + tryY -= 1; + break; + + + } + // Horses cannot be in towns. + if (World.InTown(tryX, tryY)) + return; + if (World.InSpecialTile(tryX, tryY)) + return; + + if (Map.CheckPassable(tryX, tryY)) + { + X = tryX; + Y = tryY; + return; + } + + } + public void Escape() { while(true) @@ -115,6 +154,7 @@ namespace HISP.Game.Horse public void Capture(User forUser) { + forUser.HorseInventory.AddHorse(this.Instance); Despawn(this); } @@ -191,8 +231,16 @@ namespace HISP.Game.Horse foreach(WildHorse wildHorse in WildHorses) { wildHorse.Timeout -= 1; + + if (GameServer.GetUsersAt(wildHorse.X, wildHorse.Y, true, true).Length > 0) + continue; + if (wildHorse.Timeout <= 0) Despawn(wildHorse); + + if(wildHorse.Timeout % 5 == 0) + if (GameServer.RandomNumberGenerator.Next(0, 100) > 50) + wildHorse.RandomWander(); } if(WildHorses.Length < 40) { diff --git a/Horse Isle Server/Horse Isle Server/Game/Inventory/HorseInventory.cs b/Horse Isle Server/Horse Isle Server/Game/Inventory/HorseInventory.cs index e866e2a..9192517 100644 --- a/Horse Isle Server/Horse Isle Server/Game/Inventory/HorseInventory.cs +++ b/Horse Isle Server/Horse Isle Server/Game/Inventory/HorseInventory.cs @@ -1,12 +1,46 @@ -using System; +using HISP.Game.Horse; +using HISP.Player; +using HISP.Server; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace HISP.Game.Inventory { class HorseInventory { + private User baseUser; + private List horsesList = new List(); + public HorseInstance[] HorseList + { + get + { + return horsesList.ToArray(); + } + } + + public void AddHorse(HorseInstance horse, bool addToDb=true) + { + horse.Owner = baseUser.Id; + if(addToDb) + Database.AddHorse(horse); + horsesList.Add(horse); + } + public HorseInventory(User user) + { + baseUser = user; + Database.LoadHorseInventory(this, baseUser.Id); + } + + public HorseInstance[] GetHorsesInCategory(HorseInfo.Category category) + { + List instances = new List(); + foreach(HorseInstance horse in HorseList) + { + if (horse.Category == category.Name) + { + instances.Add(horse); + } + } + return instances.ToArray(); + } } } diff --git a/Horse Isle Server/Horse Isle Server/Game/Messages.cs b/Horse Isle Server/Horse Isle Server/Game/Messages.cs index 2fbfb79..16eeb14 100644 --- a/Horse Isle Server/Horse Isle Server/Game/Messages.cs +++ b/Horse Isle Server/Horse Isle Server/Game/Messages.cs @@ -170,6 +170,12 @@ namespace HISP.Game public static string YouCapturedTheHorse; public static string HorseEvadedCapture; + public static string HorsesMenuHeader; + public static string UpdateHorseCategory; + public static string HorseEntryFormat; + public static string ViewBaiscStats; + public static string ViewAdvancedStats; + // Consume public static string ConsumeItemFormat; @@ -360,6 +366,19 @@ namespace HISP.Game // Click public static string NothingInterestingHere; + public static string FormatHorseCategoryChangedMessage(string newCategory) + { + return UpdateHorseCategory.Replace("%CATEGORY%", newCategory); + } + public static string FormatHorseEntry(int numb, string horseName, string breedName, int randomId) + { + return HorseEntryFormat.Replace("%NUMB%", numb.ToString()).Replace("%NAME%", horseName).Replace("%BREED%", breedName).Replace("%ID%", randomId.ToString()); + } + public static string FormatHorseHeader(int maxHorses, int numHorses) + { + return HorsesMenuHeader.Replace("%MAXHORSE%", maxHorses.ToString()).Replace("%TOTALHORSE%", numHorses.ToString()); + } + public static string FormatWildHorse(string name, string breed, int randomId) { diff --git a/Horse Isle Server/Horse Isle Server/Game/Meta.cs b/Horse Isle Server/Horse Isle Server/Game/Meta.cs index 6f9f153..507040e 100644 --- a/Horse Isle Server/Horse Isle Server/Game/Meta.cs +++ b/Horse Isle Server/Horse Isle Server/Game/Meta.cs @@ -875,6 +875,32 @@ namespace HISP.Game } return Messages.FormatAbuseReportMetaPage(reportReasons); } + + public static string BuildHorseInventory(User user) + { + // TODO: calculate max number based on ranch barns owned. + string message = Messages.FormatHorseHeader(7, user.HorseInventory.HorseList.Length); + + int i = 1; + foreach(HorseInfo.Category category in HorseInfo.HorseCategories) + { + HorseInstance[] horsesInCategory = user.HorseInventory.GetHorsesInCategory(category); + if(horsesInCategory.Length > 0) + { + message += category.Meta; + foreach(HorseInstance instance in horsesInCategory) + { + message += Messages.FormatHorseEntry(i, instance.Name, instance.Breed.Name, instance.RandomId); + i++; + } + } + } + message += Messages.ViewBaiscStats; + message += Messages.ViewAdvancedStats; + message += Messages.BackToMap; + message += Messages.MetaTerminator; + return message; + } public static string BuildPlayerList(User user) { string message = ""; diff --git a/Horse Isle Server/Horse Isle Server/Horse Isle Server.csproj b/Horse Isle Server/Horse Isle Server/Horse Isle Server.csproj index c9d67f7..e85199d 100644 --- a/Horse Isle Server/Horse Isle Server/Horse Isle Server.csproj +++ b/Horse Isle Server/Horse Isle Server/Horse Isle Server.csproj @@ -81,6 +81,7 @@ + diff --git a/Horse Isle Server/Horse Isle Server/Player/User.cs b/Horse Isle Server/Horse Isle Server/Player/User.cs index 0de948c..3ac5d99 100644 --- a/Horse Isle Server/Horse Isle Server/Player/User.cs +++ b/Horse Isle Server/Horse Isle Server/Player/User.cs @@ -5,7 +5,6 @@ using HISP.Server; using HISP.Player.Equips; using HISP.Game.Services; using HISP.Game.Inventory; -using HISP.Game.Horse; namespace HISP.Player { @@ -43,6 +42,7 @@ namespace HISP.Player public Npc.NpcEntry LastTalkedToNpc; public Shop LastShoppedAt; public Inn LastVisitedInn; + public HorseInventory HorseInventory; public PlayerQuests Quests; public Highscore Highscores; public Award Awards; @@ -428,6 +428,7 @@ namespace HISP.Player MailBox = new Mailbox(this); Highscores = new Highscore(this); Awards = new Award(this); + HorseInventory = new HorseInventory(this); // Generate SecCodes diff --git a/Horse Isle Server/Horse Isle Server/Server/Database.cs b/Horse Isle Server/Horse Isle Server/Server/Database.cs index 769d3db..83843f3 100644 --- a/Horse Isle Server/Horse Isle Server/Server/Database.cs +++ b/Horse Isle Server/Horse Isle Server/Server/Database.cs @@ -4,6 +4,7 @@ using MySqlConnector; using HISP.Game; using HISP.Player; using HISP.Game.Horse; +using HISP.Game.Inventory; namespace HISP.Server { @@ -34,7 +35,7 @@ namespace HISP.Server string Leaderboards = "CREATE TABLE Leaderboards(playerId INT, minigame TEXT(128), wins INT, looses INT, timesplayed INT, score INT, type TEXT(128))"; string NpcStartPoint = "CREATE TABLE NpcStartPoint(playerId INT, npcId INT, chatpointId INT)"; string PoetryRooms = "CREATE TABLE PoetryRooms(poetId INT, X INT, Y INT, roomId INT)"; - string Horses = "CREATE TABLE Horses(randomId INT, originalOwner INT, breed INT, name TEXT(128), description TEXT(1028), sex TEXT(128), color TEXT(128), health INT, shoes INT, hunger INT, thirst INT, mood INT, groom INT, tiredness INT, experience INT, speed INT, strength INT, conformation INT, agility INT, endurance INT, inteligence INT, personality INT, height INT, saddle INT, saddlepad INT, bridle INT, companion INT, autoSell INT, category TEXT(128), spoiled INT, magicUsed INT)" + string Horses = "CREATE TABLE Horses(randomId INT, ownerId INT, ranchId INT, leaser INT, breed INT, name TEXT(128), description TEXT(1028), sex TEXT(128), color TEXT(128), health INT, shoes INT, hunger INT, thirst INT, mood INT, groom INT, tiredness INT, experience INT, speed INT, strength INT, conformation INT, agility INT, endurance INT, inteligence INT, personality INT, height INT, saddle INT, saddlepad INT, bridle INT, companion INT, autoSell INT, category TEXT(128), spoiled INT, magicUsed INT)"; string WildHorse = "CREATE TABLE WildHorse(randomId INT, originalOwner INT, breed INT, x INT, y INT, name TEXT(128), description TEXT(1028), sex TEXT(128), color TEXT(128), health INT, shoes INT, hunger INT, thirst INT, mood INT, groom INT, tiredness INT, experience INT, speed INT, strength INT, conformation INT, agility INT, endurance INT, inteligence INT, personality INT, height INT, saddle INT, saddlepad INT, bridle INT, companion INT, timeout INT, autoSell INT, category TEXT(128), spoiled INT, magicUsed INT)"; string LastPlayer = "CREATE TABLE LastPlayer(roomId TEXT(1028), playerId INT)"; string DeleteOnlineUsers = "DELETE FROM OnlineUsers"; @@ -392,6 +393,144 @@ namespace HISP.Server sqlCommand.Dispose(); } } + + public static void AddHorse(HorseInstance horse) + { + + using (MySqlConnection db = new MySqlConnection(ConnectionString)) + { + db.Open(); + MySqlCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO Horses VALUES(@randomId,@originalOwner,@ranch,@leaser,@breed,@name,@description,@sex,@color,@health,@shoes,@hunger,@thirst,@mood,@groom,@tiredness,@experience,@speed,@strength,@conformation,@agility,@endurance,@inteligence,@personality,@height,@saddle,@saddlepad,@bridle,@companion,@autosell,@category,@spoiled,@magicused)"; + + sqlCommand.Parameters.AddWithValue("@randomId", horse.RandomId); + sqlCommand.Parameters.AddWithValue("@originalOwner", horse.Owner); + sqlCommand.Parameters.AddWithValue("@ranch", horse.RanchId); + sqlCommand.Parameters.AddWithValue("@leaser", horse.Leaser); + sqlCommand.Parameters.AddWithValue("@breed", horse.Breed.Id); + sqlCommand.Parameters.AddWithValue("@name", horse.Name); + sqlCommand.Parameters.AddWithValue("@description", horse.Description); + sqlCommand.Parameters.AddWithValue("@sex", horse.Sex); + sqlCommand.Parameters.AddWithValue("@color", horse.Color); + + sqlCommand.Parameters.AddWithValue("@health", horse.BasicStats.Health); + sqlCommand.Parameters.AddWithValue("@shoes", horse.BasicStats.Shoes); + sqlCommand.Parameters.AddWithValue("@hunger", horse.BasicStats.Hunger); + sqlCommand.Parameters.AddWithValue("@thirst", horse.BasicStats.Thirst); + sqlCommand.Parameters.AddWithValue("@mood", horse.BasicStats.Mood); + sqlCommand.Parameters.AddWithValue("@groom", horse.BasicStats.Groom); + sqlCommand.Parameters.AddWithValue("@tiredness", horse.BasicStats.Tiredness); + sqlCommand.Parameters.AddWithValue("@experience", horse.BasicStats.Experience); + + sqlCommand.Parameters.AddWithValue("@speed", horse.AdvancedStats.Speed); + sqlCommand.Parameters.AddWithValue("@strength", horse.AdvancedStats.Strength); + sqlCommand.Parameters.AddWithValue("@conformation", horse.AdvancedStats.Conformation); + sqlCommand.Parameters.AddWithValue("@agility", horse.AdvancedStats.Agility); + sqlCommand.Parameters.AddWithValue("@endurance", horse.AdvancedStats.Endurance); + sqlCommand.Parameters.AddWithValue("@inteligence", horse.AdvancedStats.Inteligence); + sqlCommand.Parameters.AddWithValue("@personality", horse.AdvancedStats.Personality); + sqlCommand.Parameters.AddWithValue("@height", horse.AdvancedStats.Height); + + if (horse.Equipment.Saddle != null) + sqlCommand.Parameters.AddWithValue("@saddle", horse.Equipment.Saddle.Id); + else + sqlCommand.Parameters.AddWithValue("@saddle", null); + + if (horse.Equipment.SaddlePad != null) + sqlCommand.Parameters.AddWithValue("@saddlepad", horse.Equipment.SaddlePad.Id); + else + sqlCommand.Parameters.AddWithValue("@saddlepad", null); + + if (horse.Equipment.Bridle != null) + sqlCommand.Parameters.AddWithValue("@bridle", horse.Equipment.Bridle.Id); + else + sqlCommand.Parameters.AddWithValue("@bridle", null); + + if (horse.Equipment.Companion != null) + sqlCommand.Parameters.AddWithValue("@companion", horse.Equipment.Companion.Id); + else + sqlCommand.Parameters.AddWithValue("@companion", null); + + + + + + sqlCommand.Parameters.AddWithValue("@autosell", horse.AutoSell); + sqlCommand.Parameters.AddWithValue("@category", horse.Category); + sqlCommand.Parameters.AddWithValue("@spoiled", horse.Spoiled); + sqlCommand.Parameters.AddWithValue("@magicused", horse.MagicUsed); + + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + sqlCommand.Dispose(); + } + + } + + public static void LoadHorseInventory(HorseInventory inv, int playerId) + { + using (MySqlConnection db = new MySqlConnection(ConnectionString)) + { + db.Open(); + MySqlCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM Horses WHERE ownerId=@playerId"; + sqlCommand.Parameters.AddWithValue("@playerId", playerId); + sqlCommand.Prepare(); + MySqlDataReader reader = sqlCommand.ExecuteReader(); + + while (reader.Read()) + { + int randomId = reader.GetInt32(0); + int breedId = reader.GetInt32(4); + HorseInfo.Breed horseBreed = HorseInfo.GetBreedById(breedId); + HorseInstance inst = new HorseInstance(horseBreed, randomId); + inst.Owner = reader.GetInt32(1); + inst.RanchId = reader.GetInt32(2); + inst.Leaser = reader.GetInt32(3); + inst.Name = reader.GetString(5); + inst.Description = reader.GetString(6); + inst.Sex = reader.GetString(7); + inst.Color = reader.GetString(8); + + inst.BasicStats.Health = reader.GetInt32(9); + inst.BasicStats.Shoes = reader.GetInt32(10); + inst.BasicStats.Hunger = reader.GetInt32(11); + inst.BasicStats.Thirst = reader.GetInt32(12); + inst.BasicStats.Mood = reader.GetInt32(13); + inst.BasicStats.Groom = reader.GetInt32(14); + inst.BasicStats.Tiredness = reader.GetInt32(15); + inst.BasicStats.Experience = reader.GetInt32(16); + + inst.AdvancedStats.Speed = reader.GetInt32(17); + inst.AdvancedStats.Strength = reader.GetInt32(18); + inst.AdvancedStats.Conformation = reader.GetInt32(19); + inst.AdvancedStats.Agility = reader.GetInt32(20); + inst.AdvancedStats.Endurance = reader.GetInt32(21); + inst.AdvancedStats.Inteligence = reader.GetInt32(22); + inst.AdvancedStats.Personality = reader.GetInt32(23); + inst.AdvancedStats.Height = reader.GetInt32(24); + + if (!reader.IsDBNull(25)) + inst.Equipment.Saddle = Item.GetItemById(reader.GetInt32(25)); + if (!reader.IsDBNull(26)) + inst.Equipment.SaddlePad = Item.GetItemById(reader.GetInt32(26)); + if (!reader.IsDBNull(27)) + inst.Equipment.Bridle = Item.GetItemById(reader.GetInt32(27)); + if (!reader.IsDBNull(28)) + inst.Equipment.Companion = Item.GetItemById(reader.GetInt32(28)); + + inst.AutoSell = reader.GetInt32(29); + inst.Category = reader.GetString(30); + inst.Spoiled = reader.GetInt32(31); + inst.MagicUsed = reader.GetInt32(32); + inv.AddHorse(inst, false); + + } + + sqlCommand.Dispose(); + } + } public static void AddWildHorse(WildHorse horse) { diff --git a/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs b/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs index 27e8921..d9a90e9 100644 --- a/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs +++ b/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs @@ -484,7 +484,15 @@ namespace HISP.Server HorseInfo.Breeds.Add(horseBreed); Logger.DebugPrint("Reigistering Horse Breed: #" + horseBreed.Id + ": " + horseBreed.Name); } - + int totalCategories = gameData.horses.categorys.Count; + for(int i = 0; i < totalCategories; i++) + { + HorseInfo.Category category = new HorseInfo.Category(); + category.Name = gameData.horses.categorys[i].name; + category.Meta = gameData.horses.categorys[i].message; + HorseInfo.HorseCategories.Add(category); + Logger.DebugPrint("Registering horse category type: " + category.Name); + } Item.Present = gameData.item.special.present; Item.MailMessage = gameData.item.special.mail_message; @@ -595,6 +603,12 @@ namespace HISP.Server Messages.YouCapturedTheHorse = gameData.messages.meta.horse.hore_caught; Messages.HorseEvadedCapture = gameData.messages.meta.horse.horse_escaped; + Messages.HorsesMenuHeader = gameData.messages.meta.horse.horses_menu; + Messages.UpdateHorseCategory = gameData.messages.meta.horse.update_category; + Messages.HorseEntryFormat = gameData.messages.meta.horse.horse_format; + Messages.ViewBaiscStats = gameData.messages.meta.horse.view_basic_stats; + Messages.ViewAdvancedStats = gameData.messages.meta.horse.view_advanced_stats; + // Libary Messages.LibaryMainMenu = gameData.messages.meta.libary.main_menu; Messages.LibaryFindNpc = gameData.messages.meta.libary.find_npc; diff --git a/Horse Isle Server/Horse Isle Server/Server/GameServer.cs b/Horse Isle Server/Horse Isle Server/Server/GameServer.cs index 6c5fcb1..6ca3ce6 100644 --- a/Horse Isle Server/Horse Isle Server/Server/GameServer.cs +++ b/Horse Isle Server/Horse Isle Server/Server/GameServer.cs @@ -90,15 +90,20 @@ namespace HISP.Server return; } - if(packet.Length < 4) + if(packet.Length < 3) { - Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid sized horse interaction packet."); + Logger.ErrorPrint(sender.LoggedinUser.Username + " Sent an invalid sized horse interaction packet: " + BitConverter.ToString(packet).Replace("-", " ")); return; } byte method = packet[1]; switch(method) { + case PacketBuilder.PACKET_CLIENT_TERMINATOR: // 19 0a 00 (horse list) + sender.LoggedinUser.MetaPriority = true; + byte[] metaTags = PacketBuilder.CreateMetaPacket(Meta.BuildHorseInventory(sender.LoggedinUser)); + sender.SendPacket(metaTags); + break; case PacketBuilder.HORSE_ESCAPE: if(WildHorse.DoesHorseExist(sender.LoggedinUser.CapturingHorseId)) { @@ -2781,7 +2786,8 @@ namespace HISP.Server { if (client.LoggedIn) if (client.LoggedinUser.X == x && client.LoggedinUser.Y == y) - UpdateArea(client); + if(!client.LoggedinUser.MetaPriority) + UpdateArea(client); } } public static void UpdateArea(GameClient forClient)