From fd02afde67bec5281aff99077dcce85dcc19a3ac Mon Sep 17 00:00:00 2001 From: SilicaAndPina Date: Tue, 5 Jan 2021 17:30:47 +1300 Subject: [PATCH] Add horse spawning/ --- .../Game/{Horse.cs => Horse/HorseInfo.cs} | 35 +++- .../Game/Horse/HorseInstance.cs | 110 ++++++++++++ .../Horse Isle Server/Game/Horse/WildHorse.cs | 159 ++++++++++++++++++ .../Horse Isle Server/Game/Meta.cs | 7 +- .../Horse Isle Server.csproj | 4 +- .../Horse Isle Server/Program.cs | 2 + .../Horse Isle Server/Server/Database.cs | 159 ++++++++++++++++++ .../Horse Isle Server/Server/GameDataJson.cs | 7 +- .../Horse Isle Server/Server/GameServer.cs | 5 +- 9 files changed, 470 insertions(+), 18 deletions(-) rename Horse Isle Server/Horse Isle Server/Game/{Horse.cs => Horse/HorseInfo.cs} (59%) create mode 100644 Horse Isle Server/Horse Isle Server/Game/Horse/HorseInstance.cs create mode 100644 Horse Isle Server/Horse Isle Server/Game/Horse/WildHorse.cs diff --git a/Horse Isle Server/Horse Isle Server/Game/Horse.cs b/Horse Isle Server/Horse Isle Server/Game/Horse/HorseInfo.cs similarity index 59% rename from Horse Isle Server/Horse Isle Server/Game/Horse.cs rename to Horse Isle Server/Horse Isle Server/Game/Horse/HorseInfo.cs index 8e928e6..3a6a471 100644 --- a/Horse Isle Server/Horse Isle Server/Game/Horse.cs +++ b/Horse Isle Server/Horse Isle Server/Game/Horse/HorseInfo.cs @@ -1,14 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Collections.Generic; -namespace HISP.Game +namespace HISP.Game.Horse { - class Horse + class HorseInfo { - public struct Stats + public struct AdvancedStats { public int Speed; public int Strength; @@ -21,13 +17,24 @@ namespace HISP.Game public int MinHeight; public int MaxHeight; } + public struct BasicStats + { + public int Health; + public int Shoes; + public int Hunger; + public int Thirst; + public int Mood; + public int Groom; + public int Tiredness; + public int Experience; + } public struct Breed { public int Id; public string Name; public string Description; - public Stats BaseStats; + public AdvancedStats BaseStats; public string[] Colors; public string SpawnOn; public string SpawnInArea; @@ -35,6 +42,16 @@ namespace HISP.Game public string Type; } + public struct HorseEquips + { + public Item.ItemInformation Saddle; + public Item.ItemInformation SaddlePad; + public Item.ItemInformation Bridle; + public Item.ItemInformation Companion; + } + + + 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 new file mode 100644 index 0000000..4b65fdb --- /dev/null +++ b/Horse Isle Server/Horse Isle Server/Game/Horse/HorseInstance.cs @@ -0,0 +1,110 @@ + +using HISP.Security; +using HISP.Server; + +namespace HISP.Game.Horse +{ + class HorseInstance + { + public HorseInstance(HorseInfo.Breed breed, int randomId = -1) + { + RandomId = RandomID.NextRandomId(randomId); + Owner = 0; + if(breed.Type == "camel") + { + Name = "Wild Camel"; + if (GameServer.RandomNumberGenerator.Next(0, 100) >= 50) + { + Sex = "cow"; + } + else + { + Sex = "bull"; + } + + } + else if(breed.Type == "llama") + { + Name = "Jungle Llama"; + if(GameServer.RandomNumberGenerator.Next(0, 100) >= 50) + { + Sex = "male"; + } + else + { + Sex = "female"; + } + } + else if(breed.Type == "zebra") + { + Name = "Wild Zebra"; + if (GameServer.RandomNumberGenerator.Next(0, 100) >= 50) + { + Sex = "stallion"; + } + else + { + Sex = "mare"; + } + } + else + { + Name = "Wild Horse"; + if (GameServer.RandomNumberGenerator.Next(0,100) >= 50) + { + Sex = "stallion"; + } + else + { + Sex = "mare"; + } + } + + Description = ""; + Breed = breed; + Color = breed.Colors[GameServer.RandomNumberGenerator.Next(0, breed.Colors.Length)]; + + BasicStats = new HorseInfo.BasicStats(); + BasicStats.Health = 1000; + BasicStats.Shoes = 0; + BasicStats.Hunger = 1000; + BasicStats.Thirst = 1000; + BasicStats.Mood = 500; + BasicStats.Groom = 1000; + BasicStats.Tiredness = 1000; + BasicStats.Experience = 0; + + AdvancedStats = new HorseInfo.AdvancedStats(); + AdvancedStats.Speed = 0; + AdvancedStats.Strength = 0; + AdvancedStats.Conformation = 0; + AdvancedStats.Agility = 0; + AdvancedStats.Endurance = 0; + AdvancedStats.Inteligence = (GameServer.RandomNumberGenerator.Next(breed.BaseStats.Inteligence, breed.BaseStats.Inteligence * 2)) - breed.BaseStats.Inteligence; + AdvancedStats.Personality = (GameServer.RandomNumberGenerator.Next(breed.BaseStats.Personality, breed.BaseStats.Personality * 2)) - breed.BaseStats.Personality; + AdvancedStats.Height = GameServer.RandomNumberGenerator.Next(breed.BaseStats.MinHeight, breed.BaseStats.MaxHeight); + + Equipment = new HorseInfo.HorseEquips(); + AutoSell = 0; + Category = "KEEPER"; + Spoiled = 0; + MagicUsed = 0; + } + public int RandomId; + public int Owner; + public string Name; + public string Description; + public string Sex; + public string Color; + public HorseInfo.Breed Breed; + public HorseInfo.BasicStats BasicStats; + public HorseInfo.AdvancedStats AdvancedStats; + public HorseInfo.HorseEquips Equipment; + public int AutoSell; + public int Spoiled; + public int MagicUsed; + public string Category; + + + } +} diff --git a/Horse Isle Server/Horse Isle Server/Game/Horse/WildHorse.cs b/Horse Isle Server/Horse Isle Server/Game/Horse/WildHorse.cs new file mode 100644 index 0000000..58025a9 --- /dev/null +++ b/Horse Isle Server/Horse Isle Server/Game/Horse/WildHorse.cs @@ -0,0 +1,159 @@ +using HISP.Server; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace HISP.Game.Horse +{ + + class WildHorse + { + + public WildHorse(HorseInstance horse, int MapX = -1, int MapY = -1, int despawnTimeout=60, bool addToDatabase = true) + { + Instance = horse; + timeout = despawnTimeout; + + if(MapX == -1 && MapY == -1) + { + while (true) + { + if (horse.Breed.SpawnInArea == null) + { + + // Pick a random isle. + int isleId = GameServer.RandomNumberGenerator.Next(0, World.Isles.Count); + World.Isle isle = World.Isles[isleId]; + + // Pick x/y in isle. + int tryX = GameServer.RandomNumberGenerator.Next(isle.StartX, isle.EndX); + int tryY = GameServer.RandomNumberGenerator.Next(isle.StartY, isle.EndY); + + // Horses cannot be in towns. + if (World.InTown(tryX, tryY)) + continue; + if (World.InSpecialTile(tryX, tryY)) + continue; + + // Check Tile Type + int TileID = Map.GetTileId(tryX, tryY, false); + string TileType = Map.TerrainTiles[TileID - 1].Type; + if (TileType == horse.Breed.SpawnOn) + { + if (Map.CheckPassable(tryX, tryY)) // Can the player stand over here? + { + x = tryX; + y = tryY; + break; + } + } + } + else + { + World.Zone zone = World.GetZoneByName(horse.Breed.SpawnInArea); + // Pick x/y in zone. + int tryX = GameServer.RandomNumberGenerator.Next(zone.StartX, zone.EndX); + int tryY = GameServer.RandomNumberGenerator.Next(zone.StartY, zone.EndY); + + // Horses cannot be in towns. + if (World.InTown(tryX, tryY)) + continue; + if (World.InSpecialTile(tryX, tryY)) + continue; + + // Check Tile Type + int TileID = Map.GetTileId(tryX, tryY, false); + string TileType = Map.TerrainTiles[TileID - 1].Type; + if (TileType == horse.Breed.SpawnOn) + { + if (Map.CheckPassable(tryX, tryY)) // Can the player stand over here? + { + x = tryX; + y = tryY; + break; + } + } + + } + } + } + wildHorses.Add(this); + if(addToDatabase) + Database.AddWildHorse(this); + } + + private static List wildHorses = new List(); + public static WildHorse[] WildHorses + { + get + { + return wildHorses.ToArray(); + } + } + + public static void GenerateHorses() + { + Logger.InfoPrint("Generating horses."); + while(wildHorses.Count < 40) + { + HorseInfo.Breed horseBreed = HorseInfo.Breeds[GameServer.RandomNumberGenerator.Next(0, HorseInfo.Breeds.Count)]; + + if (horseBreed.SpawnInArea == "none") // no unipegs >_> + continue; + + HorseInstance horseInst = new HorseInstance(horseBreed); + WildHorse wildHorse = new WildHorse(horseInst); + + Logger.DebugPrint("Created " + horseBreed.Name + " at X:" + wildHorse.X + ", Y:" + wildHorse.Y); + } + } + + public static void Init() + { + Database.LoadWildHorses(); + GenerateHorses(); + } + public HorseInstance Instance; + public int X + { + get + { + return x; + } + set + { + x = value; + } + } + public int Y + { + get + { + return y; + } + set + { + y = value; + } + } + public int Timeout + { + get + { + return timeout; + } + set + { + timeout = value; + } + } + + + private int x; + private int y; + private int timeout; + + } +} diff --git a/Horse Isle Server/Horse Isle Server/Game/Meta.cs b/Horse Isle Server/Horse Isle Server/Game/Meta.cs index 0599b8f..94b19d1 100644 --- a/Horse Isle Server/Horse Isle Server/Game/Meta.cs +++ b/Horse Isle Server/Horse Isle Server/Game/Meta.cs @@ -1,4 +1,5 @@ -using HISP.Game.Inventory; +using HISP.Game.Horse; +using HISP.Game.Inventory; using HISP.Game.Services; using HISP.Player; using HISP.Server; @@ -620,7 +621,7 @@ namespace HISP.Game return message; } - public static string BuildBreedViewerLibary(Horse.Breed breed) + public static string BuildBreedViewerLibary(HorseInfo.Breed breed) { string message = Messages.FormatHorseBreedPreview(breed.Name, breed.Description); message += Messages.BreedViewerMaximumStats; @@ -639,7 +640,7 @@ namespace HISP.Game public static string BuildHorseList() { string message = ""; - foreach(Horse.Breed breed in Horse.Breeds.OrderBy(o => o.Name).ToList()) + foreach(HorseInfo.Breed breed in HorseInfo.Breeds.OrderBy(o => o.Name).ToList()) { if (breed.Type == "horse") message += Messages.FormatHorseBreed(breed.Name, breed.Id); 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 4196422..c9d67f7 100644 --- a/Horse Isle Server/Horse Isle Server/Horse Isle Server.csproj +++ b/Horse Isle Server/Horse Isle Server/Horse Isle Server.csproj @@ -78,7 +78,9 @@ - + + + diff --git a/Horse Isle Server/Horse Isle Server/Program.cs b/Horse Isle Server/Horse Isle Server/Program.cs index e38384b..bcaaaa2 100644 --- a/Horse Isle Server/Horse Isle Server/Program.cs +++ b/Horse Isle Server/Horse Isle Server/Program.cs @@ -2,6 +2,7 @@ using System.IO; using System.Reflection; using HISP.Game; +using HISP.Game.Horse; using HISP.Game.SwfModules; using HISP.Security; using HISP.Server; @@ -20,6 +21,7 @@ namespace HISP Map.OpenMap(); World.ReadWorldData(); DroppedItems.Init(); + WildHorse.Init(); Brickpoet.LoadPoetryRooms(); GameServer.StartServer(); diff --git a/Horse Isle Server/Horse Isle Server/Server/Database.cs b/Horse Isle Server/Horse Isle Server/Server/Database.cs index ef3ca74..e4b90c8 100644 --- a/Horse Isle Server/Horse Isle Server/Server/Database.cs +++ b/Horse Isle Server/Horse Isle Server/Server/Database.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using MySqlConnector; using HISP.Game; using HISP.Player; +using HISP.Game.Horse; namespace HISP.Server { @@ -33,6 +34,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 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"; @@ -231,6 +233,21 @@ namespace HISP.Server }; + try + { + + MySqlCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = WildHorse; + sqlCommand.ExecuteNonQuery(); + sqlCommand.Dispose(); + } + catch (Exception e) + { + Logger.WarnPrint(e.Message); + }; + + + try { @@ -308,6 +325,148 @@ namespace HISP.Server } } + public static void AddWildHorse(WildHorse horse) + { + + using (MySqlConnection db = new MySqlConnection(ConnectionString)) + { + db.Open(); + MySqlCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "INSERT INTO WildHorse VALUES(@randomId,@originalOwner,@breed,@x,@y,@name,@description,@sex,@color,@health,@shoes,@hunger,@thirst,@mood,@groom,@tiredness,@experience,@speed,@strength,@conformation,@agility,@endurance,@inteligence,@personality,@height,@saddle,@saddlepad,@bridle,@companion,@timeout,@autosell,@category,@spoiled,@magicused)"; + + sqlCommand.Parameters.AddWithValue("@randomId", horse.Instance.RandomId); + sqlCommand.Parameters.AddWithValue("@originalOwner", horse.Instance.Owner); + sqlCommand.Parameters.AddWithValue("@breed", horse.Instance.Breed.Id); + sqlCommand.Parameters.AddWithValue("@x", horse.X); + sqlCommand.Parameters.AddWithValue("@y", horse.Y); + sqlCommand.Parameters.AddWithValue("@name", horse.Instance.Name); + sqlCommand.Parameters.AddWithValue("@description", horse.Instance.Description); + sqlCommand.Parameters.AddWithValue("@sex", horse.Instance.Sex); + sqlCommand.Parameters.AddWithValue("@color", horse.Instance.Color); + + sqlCommand.Parameters.AddWithValue("@health", horse.Instance.BasicStats.Health); + sqlCommand.Parameters.AddWithValue("@shoes", horse.Instance.BasicStats.Shoes); + sqlCommand.Parameters.AddWithValue("@hunger", horse.Instance.BasicStats.Hunger); + sqlCommand.Parameters.AddWithValue("@thirst", horse.Instance.BasicStats.Thirst); + sqlCommand.Parameters.AddWithValue("@mood", horse.Instance.BasicStats.Mood); + sqlCommand.Parameters.AddWithValue("@groom", horse.Instance.BasicStats.Groom); + sqlCommand.Parameters.AddWithValue("@tiredness", horse.Instance.BasicStats.Tiredness); + sqlCommand.Parameters.AddWithValue("@experience", horse.Instance.BasicStats.Experience); + + sqlCommand.Parameters.AddWithValue("@speed", horse.Instance.AdvancedStats.Speed); + sqlCommand.Parameters.AddWithValue("@strength", horse.Instance.AdvancedStats.Strength); + sqlCommand.Parameters.AddWithValue("@conformation", horse.Instance.AdvancedStats.Conformation); + sqlCommand.Parameters.AddWithValue("@agility", horse.Instance.AdvancedStats.Agility); + sqlCommand.Parameters.AddWithValue("@endurance", horse.Instance.AdvancedStats.Endurance); + sqlCommand.Parameters.AddWithValue("@inteligence", horse.Instance.AdvancedStats.Inteligence); + sqlCommand.Parameters.AddWithValue("@personality", horse.Instance.AdvancedStats.Personality); + sqlCommand.Parameters.AddWithValue("@height", horse.Instance.AdvancedStats.Height); + + if(horse.Instance.Equipment.Saddle != null) + sqlCommand.Parameters.AddWithValue("@saddle", horse.Instance.Equipment.Saddle.Id); + else + sqlCommand.Parameters.AddWithValue("@saddle", null); + + if (horse.Instance.Equipment.SaddlePad != null) + sqlCommand.Parameters.AddWithValue("@saddlepad", horse.Instance.Equipment.SaddlePad.Id); + else + sqlCommand.Parameters.AddWithValue("@saddlepad", null); + + if (horse.Instance.Equipment.Bridle != null) + sqlCommand.Parameters.AddWithValue("@bridle", horse.Instance.Equipment.Bridle.Id); + else + sqlCommand.Parameters.AddWithValue("@bridle", null); + + if (horse.Instance.Equipment.Companion != null) + sqlCommand.Parameters.AddWithValue("@companion", horse.Instance.Equipment.Companion.Id); + else + sqlCommand.Parameters.AddWithValue("@companion", null); + + + + + + sqlCommand.Parameters.AddWithValue("@timeout", horse.Timeout); + sqlCommand.Parameters.AddWithValue("@autosell", horse.Instance.AutoSell); + sqlCommand.Parameters.AddWithValue("@category", horse.Instance.Category); + sqlCommand.Parameters.AddWithValue("@spoiled", horse.Instance.Spoiled); + sqlCommand.Parameters.AddWithValue("@magicused", horse.Instance.MagicUsed); + + sqlCommand.Prepare(); + sqlCommand.ExecuteNonQuery(); + + sqlCommand.Dispose(); + } + + } + + public static void LoadWildHorses() + { + using (MySqlConnection db = new MySqlConnection(ConnectionString)) + { + db.Open(); + MySqlCommand sqlCommand = db.CreateCommand(); + sqlCommand.CommandText = "SELECT * FROM WildHorse"; + + + sqlCommand.Prepare(); + MySqlDataReader reader = sqlCommand.ExecuteReader(); + + while(reader.Read()) + { + int randomId = reader.GetInt32(0); + int breedId = reader.GetInt32(2); + HorseInfo.Breed horseBreed = HorseInfo.GetBreedById(breedId); + HorseInstance inst = new HorseInstance(horseBreed, randomId); + inst.Owner = reader.GetInt32(1); + 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(30); + inst.Category = reader.GetString(31); + inst.Spoiled = reader.GetInt32(32); + inst.MagicUsed = reader.GetInt32(33); + + int x = reader.GetInt32(3); + int y = reader.GetInt32(4); + int timeout = reader.GetInt32(29); + WildHorse wildHorse = new WildHorse(inst, x, y, timeout, false); + + } + + sqlCommand.Dispose(); + } + } + public static bool LastPlayerExist(string roomId) { using (MySqlConnection db = new MySqlConnection(ConnectionString)) diff --git a/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs b/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs index f9321f0..e61af5e 100644 --- a/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs +++ b/Horse Isle Server/Horse Isle Server/Server/GameDataJson.cs @@ -6,6 +6,7 @@ using HISP.Game.Chat; using HISP.Player; using HISP.Game.Services; using HISP.Game.SwfModules; +using HISP.Game.Horse; namespace HISP.Server { @@ -456,13 +457,13 @@ namespace HISP.Server int totalBreeds = gameData.horses.breeds.Count; for(int i = 0; i < totalBreeds; i++) { - Horse.Breed horseBreed = new Horse.Breed(); + HorseInfo.Breed horseBreed = new HorseInfo.Breed(); horseBreed.Id = gameData.horses.breeds[i].id; horseBreed.Name = gameData.horses.breeds[i].name; horseBreed.Description = gameData.horses.breeds[i].description; - horseBreed.BaseStats = new Horse.Stats(); + horseBreed.BaseStats = new HorseInfo.AdvancedStats(); horseBreed.BaseStats.Speed = gameData.horses.breeds[i].base_stats.speed; horseBreed.BaseStats.Strength = gameData.horses.breeds[i].base_stats.strength; horseBreed.BaseStats.Conformation = gameData.horses.breeds[i].base_stats.conformation; @@ -480,7 +481,7 @@ namespace HISP.Server horseBreed.Swf = gameData.horses.breeds[i].swf; horseBreed.Type = gameData.horses.breeds[i].type; - Horse.Breeds.Add(horseBreed); + HorseInfo.Breeds.Add(horseBreed); Logger.DebugPrint("Reigistering Horse Breed: #" + horseBreed.Id + ": " + horseBreed.Name); } diff --git a/Horse Isle Server/Horse Isle Server/Server/GameServer.cs b/Horse Isle Server/Horse Isle Server/Server/GameServer.cs index 6d40430..2a938bf 100644 --- a/Horse Isle Server/Horse Isle Server/Server/GameServer.cs +++ b/Horse Isle Server/Horse Isle Server/Server/GameServer.cs @@ -14,6 +14,7 @@ using System.Drawing; using HISP.Game.Services; using HISP.Game.Inventory; using HISP.Game.SwfModules; +using HISP.Game.Horse; namespace HISP.Server { @@ -383,11 +384,11 @@ namespace HISP.Server { string idStr = buttonIdStr.Substring(2); int breedId = -1; - Horse.Breed horseBreed; + HorseInfo.Breed horseBreed; try { breedId = int.Parse(idStr); - horseBreed = Horse.GetBreedById(breedId); + horseBreed = HorseInfo.GetBreedById(breedId); } catch (Exception) { Logger.DebugPrint(sender.LoggedinUser.Username + " Sent invalid libary breed viewer request.");