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)