diff --git a/DataCollection/gamedata.json b/DataCollection/gamedata.json
index 54e71be..9d919b7 100755
--- a/DataCollection/gamedata.json
+++ b/DataCollection/gamedata.json
@@ -198,8 +198,8 @@
"wagon":"
^T6Your Wagon can take you to the nearest station.^D7|STATION^R1^H",
"training_pen":"
^T6You can train all your horses via the Pen^D13|TRAIN ALL^R1^H",
"train_all":"You attempt to train all of your horses:",
- "train_success":"
Training %HORSENAME%: +1SP +1ST +1CO +1AG +1EN +1exp",
- "train_cant_train":"%HORSENAME%: Horse needs to rest %TIME% game minutes.",
+ "train_success":"
Training %HORSENAME%: +%SPEED%SP +%STRENGTH%ST +%CONFORMATION%CO +%AGILITY%AG +%ENDURANCE%EN +%EXP%exp",
+ "train_cant_train":"
%HORSENAME%: Horse needs to rest %TIME% game minutes.",
"fully_rested":"
You have a Barn. All of your horses are fully relaxed now.",
"wagon_used":"Your wagon dropped you off at the nearest station."
},
@@ -310,6 +310,10 @@
"cant_release_currently_riding":"You cannot release the horse you are riding!",
"released_horse":"You released the horse! It now roams Horse Isle freely. It will disappear in an hour.",
"horse_bucked":"Your inexperienced horse has become frustrated and has bucked you off! (Horse gained 1exp)",
+
+ "auto_sell_success":"Horse %HORSENAME% Purchase Completed!",
+ "auto_sell_insufficent_money":"You cannot afford that horse!",
+ "auto_sell_toomany_horses":"You do not have any room for another horse. Barns on your ranch allow for more horses.",
"allstats":{
"all_stats_header":"All of your horses' complete stats:",
"horse_name_entry":"
%HORSENAME%: %COLOR% %BREEDNAME% %SEX% (%EXP%exp)
",
@@ -344,6 +348,7 @@
},
"horse_inventory":{
"your_horse_format":"Your horse: %NAME%:
",
+ "horse_others_format":"%NAME%:
",
"description_format":" %DESCRIPTION%",
"hands_high":"
^H It is a %COLOR% %BREED% %SEX% standing %HANDS% hands high.
",
"experience":" It has earned %EXP% experience points.
",
@@ -361,20 +366,23 @@
"no_auto_sell":"NO Auto-Sell",
"auto_sell_format":"Auto-Selling: $%MONEY%",
- "change_auto_sell":"^D25|CHANGE AUTO-SELL",
- "set_auto_sell":"^D25|SET AUTO-SELL PRICE",
+ "change_auto_sell":"^D25|CHANGE AUTO-SELL^R1",
+ "set_auto_sell":"^D25|SET AUTO-SELL PRICE^R1",
+ "auto_sell_others":"^T3[Auto-Sell: $%PRICE%]^D26|BUY HORSE^R1",
"auto_sell":"^R1^T2[%AUTOSELL%]",
- "cannot_auto_sell_tacked":"^R1^T8Cannot set Auto-Sell on a Horse with Tack",
+ "cannot_auto_sell_tacked":"^R1^T8Cannot set Auto-Sell on a Horse with Tack^R1",
- "marked_as":"^R1^LHorse currently marked [%CATEGORY%]. Mark:^R1^D52c1|KEEPER^D52c2|TRAINING^D52c3|TRADING^D52c4|RETIRED^R1",
+ "marked_as":"^LHorse currently marked [%CATEGORY%].%MARKOPTIONS%^R1",
+ "marking_options":" Mark:^R1^D52c1|KEEPER^D52c2|TRAINING^D52c3|TRADING^D52c4|RETIRED",
"horse_stats":"^HHORSE STATS:
",
"wearing_tacked":"^HWEARING/TACKED:
",
"tacked_format":"^I%ICON%^T5%NAME%^B4LN%ITEMID%^R1",
"companion":"^HCOMPANION:
",
- "companion_selected":"^I%ICON%^T5%NAME%^B4LN%ITEMID%^D6|CHANGE^R1",
+ "companion_selected":"^I%ICON%^T5%NAME%^B4LN%ITEMID%%COMPANIONCHANGEBUTTON%",
+ "companion_change_button":"^D6|CHANGE",
"no_companion":"^T5Horse has no companion^D6|SELECT^R1",
- "advanced_stats":"^HADVANCED STATS:
Special treats:%SPOILED% Magic residue:%MAGICUSED%
^AA",
+ "advanced_stats":"^R1^HADVANCED STATS:
Special treats:%SPOILED% Magic residue:%MAGICUSED%
^AA",
"breed_details":"^HBREED DETAILS:
Name: %BREED%
Description: %DESCRIPTION%",
"height_range":"
Average Height Range: %MIN%-%MAX% hands
",
"possible_colors":"
Possible Colors: %COLORS%
",
diff --git a/Horse Isle Server/HorseIsleServer/Game/Horse/HorseInstance.cs b/Horse Isle Server/HorseIsleServer/Game/Horse/HorseInstance.cs
index 83291ca..4c5cfe2 100755
--- a/Horse Isle Server/HorseIsleServer/Game/Horse/HorseInstance.cs
+++ b/Horse Isle Server/HorseIsleServer/Game/Horse/HorseInstance.cs
@@ -83,7 +83,6 @@ namespace HISP.Game.Horse
category = loadCategory;
spoiled = loadSpoiled;
magicUsed = loadMagicUsed;
- TrainTimer = 0;
RanchId = 0;
Leaser = 0;
}
@@ -117,7 +116,21 @@ namespace HISP.Game.Horse
}
public string Sex;
public string Color;
- public int TrainTimer;
+ public int TrainTimer
+ {
+ get
+ {
+ int timeout = Database.GetHorseTrainTimeout(this.RandomId);
+ if (timeout < 0)
+ return 0;
+ else
+ return timeout;
+ }
+ set
+ {
+ Database.SetHorseTrainTimeout(this.RandomId, value);
+ }
+ }
public HorseInfo.Breed Breed;
public HorseInfo.BasicStats BasicStats;
public HorseInfo.AdvancedStats AdvancedStats;
diff --git a/Horse Isle Server/HorseIsleServer/Game/Messages.cs b/Horse Isle Server/HorseIsleServer/Game/Messages.cs
index 4f78757..9ef6c99 100755
--- a/Horse Isle Server/HorseIsleServer/Game/Messages.cs
+++ b/Horse Isle Server/HorseIsleServer/Game/Messages.cs
@@ -66,7 +66,7 @@ namespace HISP.Game
public static string BuildingVegatableGarden;
public static string RanchTrainAllAttempt;
- public static string RanchTrainSuccess;
+ public static string RanchTrainSuccessFormat;
public static string RanchTrainCantTrain;
public static string RanchHorsesFullyRested;
public static string RanchWagonDroppedYouOff;
@@ -311,7 +311,8 @@ namespace HISP.Game
public static string HorseBuckedYou;
public static string HorseRidingMessageFormat;
- public static string HorseNameFormat;
+ public static string HorseNameYoursFormat;
+ public static string HorseNameOthersFormat;
public static string HorseDescriptionFormat;
public static string HorseHandsHeightFormat;
public static string HorseExperienceEarnedFormat;
@@ -333,6 +334,7 @@ namespace HISP.Game
public static string HorseAutoSellPriceFormat;
public static string HorseCantAutoSellTacked;
public static string HorseCurrentlyCategoryFormat;
+ public static string HorseMarkAsCategory;
public static string HorseStats;
public static string HorseTacked;
public static string HorseTackFormat;
@@ -365,6 +367,7 @@ namespace HISP.Game
public static string HorseChangeAutoSell;
public static string HorseSetAutoSell;
+ public static string HorseCompanionChangeButton;
public static string HorseTackFailAutoSell;
public static string HorseAreYouSureYouWantToReleaseFormat;
@@ -660,6 +663,15 @@ namespace HISP.Game
// Click
public static string NothingInterestingHere;
+
+ public static string FormatRanchTrainFail(string horseName, int timeout)
+ {
+ return RanchTrainCantTrain.Replace("%HORSENAME%", horseName).Replace("%TIME%", timeout.ToString());
+ }
+ public static string FormatRanchTrain(string horseName, int speed, int strength, int conformation, int agility, int endurance, int exp)
+ {
+ return RanchTrainSuccessFormat.Replace("%HORSENAME%", horseName).Replace("%SPEED%", speed.ToString("N0")).Replace("%STRENGTH%", strength.ToString("N0")).Replace("%CONFORMATION%", conformation.ToString("N0")).Replace("%AGILITY%", agility.ToString("N0")).Replace("%ENDURANCE%", endurance.ToString("N0")).Replace("%EXP%", exp.ToString("N0"));
+ }
public static string FormatRanchDescOthers(string description)
{
return RanchDescriptionOthersFormat.Replace("%DESCRIPTION%", description);
@@ -742,7 +754,7 @@ namespace HISP.Game
}
public static string FormatTrainSuccess(string horseName)
{
- return RanchTrainSuccess.Replace("%HORSENAME%", horseName);
+ return RanchTrainSuccessFormat.Replace("%HORSENAME%", horseName);
}
public static string FormatCantTrain(string horseName)
{
@@ -1044,9 +1056,13 @@ namespace HISP.Game
- public static string FormatHorseName(string name)
+ public static string FormatHorseNameYours(string name)
{
- return HorseNameFormat.Replace("%NAME%", name);
+ return HorseNameYoursFormat.Replace("%NAME%", name);
+ }
+ public static string FormatHorseNameOthers(string name)
+ {
+ return HorseNameOthersFormat.Replace("%NAME%", name);
}
public static string FormatHorseDescription(string Description)
{
@@ -1099,17 +1115,17 @@ namespace HISP.Game
return HorseAutoSellFormat.Replace("%AUTOSELL%", autoSellStr);
}
- public static string FormatHorseCategory(string category)
+ public static string FormatHorseCategory(string category, string markAsCategoryButtons)
{
- return HorseCurrentlyCategoryFormat.Replace("%CATEGORY%", category);
+ return HorseCurrentlyCategoryFormat.Replace("%CATEGORY%", category).Replace("%MARKOPTIONS%", markAsCategoryButtons);
}
public static string FormatHorseTackEntry(int iconId, string name, int itemId)
{
return HorseTackFormat.Replace("%ICON%", iconId.ToString()).Replace("%NAME%", name).Replace("%ITEMID%", itemId.ToString());
}
- public static string FormatHorseCompanionEntry(int iconId, string name, int itemId)
+ public static string FormatHorseCompanionEntry(int iconId, string name, string companionChangeButton, int itemId)
{
- return HorseCompanionFormat.Replace("%ICON%", iconId.ToString()).Replace("%NAME%", name).Replace("%ITEMID%", itemId.ToString());
+ return HorseCompanionFormat.Replace("%ICON%", iconId.ToString()).Replace("%NAME%", name).Replace("%ITEMID%", itemId.ToString()).Replace("%COMPANIONCHANGEBUTTON%", companionChangeButton);
}
public static string FormatHorseAdvancedStats(int spoiled, int magicUsed)
diff --git a/Horse Isle Server/HorseIsleServer/Game/Meta.cs b/Horse Isle Server/HorseIsleServer/Game/Meta.cs
index 589a7cb..4ae2496 100755
--- a/Horse Isle Server/HorseIsleServer/Game/Meta.cs
+++ b/Horse Isle Server/HorseIsleServer/Game/Meta.cs
@@ -261,6 +261,30 @@ namespace HISP.Game
return message;
+ }
+
+ private static string buildHorseListIndependantlyOfUserInstance(int userId)
+ {
+ string message = "";
+ int i = 1;
+
+
+ foreach (HorseInfo.Category category in HorseInfo.HorseCategories)
+ {
+ HorseInstance[] horsesInCategory = Database.GetPlayerHorsesInCategory(userId, category.Name);
+ if (horsesInCategory.Length > 0)
+ {
+ message += category.MetaOthers;
+ foreach (HorseInstance instance in horsesInCategory)
+ {
+ message += Messages.FormatHorseEntry(i, instance.Name, instance.Breed.Name, instance.RandomId, instance.AutoSell > 0);
+ i++;
+ }
+ }
+ }
+
+ return message;
+
}
public static string buildLibary()
{
@@ -581,6 +605,34 @@ namespace HISP.Game
message += Messages.MetaTerminator;
return message;
}
+
+ public static string BuildRanchTraining(User user)
+ {
+ string message = "";
+ message += Messages.RanchTrainAllAttempt;
+ foreach(HorseInstance horse in user.HorseInventory.HorseList)
+ {
+ if(horse.TrainTimer == 0)
+ {
+ horse.AdvancedStats.Speed += 1;
+ horse.AdvancedStats.Strength += 1;
+ horse.AdvancedStats.Conformation += 1;
+ horse.AdvancedStats.Agility += 1;
+ horse.AdvancedStats.Endurance += 1;
+ horse.BasicStats.Experience += 1;
+ horse.TrainTimer = 720;
+ message += Messages.FormatRanchTrain(horse.Name, 1, 1, 1, 1, 1, 1);
+ }
+ else
+ {
+ message += Messages.FormatRanchTrainFail(horse.Name, horse.TrainTimer);
+ }
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+
public static string BuildTransportInfo(User user, Transport.TransportPoint transportPoint)
{
string message = "";
@@ -1087,13 +1139,24 @@ namespace HISP.Game
{
string message = "";
message += Messages.FormatViewBuilding(upgrade.Title, upgrade.Description);
+
message += Messages.BackToMap;
return message;
}
- public static string BuildRanchBuilding(Ranch ranch, Ranch.RanchBuilding upgrade)
+ public static string BuildRanchBuilding(Ranch ranch, Ranch.RanchBuilding building)
{
string message = "";
- message += Messages.FormatViewBuilding(upgrade.Title, upgrade.Description);
+ message += Messages.FormatViewBuilding(building.Title, building.Description);
+ if(building.Id == 1 || building.Id == 10 || building.Id == 11) // Barn, Big Barn, Gold Barn
+ {
+ int ranchOwner = ranch.OwnerId; // TOCTOU BAD
+
+ if (ranchOwner != -1)
+ {
+ string horsesList = buildHorseListIndependantlyOfUserInstance(ranchOwner);
+ message += Messages.FormatBarn(horsesList);
+ }
+ }
message += Messages.BackToMap;
return message;
}
@@ -1402,7 +1465,7 @@ namespace HISP.Game
}
return Messages.FormatAbuseReportMetaPage(reportReasons);
}
- private static string buildHorseList(User user)
+ private static string buildHorseList(User user, bool youView=true)
{
string message = "";
int i = 1;
@@ -1411,7 +1474,10 @@ namespace HISP.Game
HorseInstance[] horsesInCategory = user.HorseInventory.GetHorsesInCategory(category);
if (horsesInCategory.Length > 0)
{
- message += category.Meta;
+ if (youView)
+ message += category.Meta;
+ else
+ message += category.MetaOthers;
foreach (HorseInstance instance in horsesInCategory)
{
message += Messages.FormatHorseEntry(i, instance.Name, instance.Breed.Name, instance.RandomId, instance.AutoSell > 0);
@@ -1569,8 +1635,14 @@ namespace HISP.Game
}
public static string BuildHorseInformation(HorseInstance horse, User user)
{
+ bool isMyHorse = horse.Owner == user.Id;
+
string message = "";
- message += Messages.FormatHorseName(horse.Name);
+ if (isMyHorse)
+ message += Messages.FormatHorseNameYours(horse.Name);
+ else
+ message += Messages.FormatHorseNameOthers(horse.Name);
+
message += Messages.FormatHorseDescription(horse.Description);
message += Messages.FormatHorseHandsHigh(horse.Color, horse.Breed.Name, horse.Sex, HorseInfo.CalculateHands(horse.AdvancedStats.Height, false));
message += Messages.FormatHorseExperience(horse.BasicStats.Experience);
@@ -1580,36 +1652,46 @@ namespace HISP.Game
else
message += Messages.HorseIsTrainable;
- if (user.CurrentlyRidingHorse == null)
- message += Messages.FormatMountButton(horse.RandomId);
- else
- message += Messages.FormatDisMountButton(horse.RandomId);
-
- message += Messages.FormatFeedButton(horse.RandomId);
- message += Messages.FormatTackButton(horse.RandomId);
- message += Messages.FormatPetButton(horse.RandomId);
- message += Messages.FormatProfileButton(horse.RandomId);
-
- if (horse.Equipment.Saddle == null && horse.Equipment.SaddlePad == null && horse.Equipment.Bridle == null && horse.Equipment.Companion == null)
+ if(isMyHorse)
{
- string autoSellMessage = Messages.HorseNoAutoSell;
- if (horse.AutoSell > 0)
- autoSellMessage = Messages.FormatAutoSellPrice(horse.AutoSell);
- message += Messages.FormatAutoSell(autoSellMessage);
- if (horse.AutoSell > 0)
- message += Messages.HorseChangeAutoSell;
+ if (user.CurrentlyRidingHorse == null)
+ message += Messages.FormatMountButton(horse.RandomId);
else
- message += Messages.HorseSetAutoSell;
- }
- else
- {
- message += Messages.HorseCantAutoSellTacked;
+ message += Messages.FormatDisMountButton(horse.RandomId);
+
+
+ message += Messages.FormatFeedButton(horse.RandomId);
+ message += Messages.FormatTackButton(horse.RandomId);
+ message += Messages.FormatPetButton(horse.RandomId);
+ message += Messages.FormatProfileButton(horse.RandomId);
+
+ if (horse.Equipment.Saddle == null && horse.Equipment.SaddlePad == null && horse.Equipment.Bridle == null && horse.Equipment.Companion == null)
+ {
+ string autoSellMessage = Messages.HorseNoAutoSell;
+ if (horse.AutoSell > 0)
+ autoSellMessage = Messages.FormatAutoSellPrice(horse.AutoSell);
+ message += Messages.FormatAutoSell(autoSellMessage);
+ if (horse.AutoSell > 0)
+ message += Messages.HorseChangeAutoSell;
+ else
+ message += Messages.HorseSetAutoSell;
+ }
+ else
+ {
+ message += Messages.HorseCantAutoSellTacked;
+ }
}
- message += Messages.FormatHorseCategory(horse.Category);
+
+
+ if(isMyHorse)
+ message += Messages.FormatHorseCategory(horse.Category, Messages.HorseMarkAsCategory);
+ else
+ message += Messages.FormatHorseCategory(horse.Category, "");
+
message += Messages.HorseStats;
- // What is energy?
+ // Energy == Tiredness
message += Messages.FormatHorseBasicStat(horse.BasicStats.Health, horse.BasicStats.Hunger, horse.BasicStats.Thirst, horse.BasicStats.Mood, horse.BasicStats.Tiredness, horse.BasicStats.Groom, horse.BasicStats.Shoes);
message += Messages.HorseTacked;
@@ -1623,9 +1705,13 @@ namespace HISP.Game
message += Messages.HorseCompanion;
if (horse.Equipment.Companion != null)
- message += Messages.FormatHorseCompanionEntry(horse.Equipment.Companion.IconId, horse.Equipment.Companion.Name, horse.Equipment.Companion.Id);
+ if(isMyHorse)
+ message += Messages.FormatHorseCompanionEntry(horse.Equipment.Companion.IconId, horse.Equipment.Companion.Name, Messages.HorseCompanionChangeButton, horse.Equipment.Companion.Id);
+ else
+ message += Messages.FormatHorseCompanionEntry(horse.Equipment.Companion.IconId, horse.Equipment.Companion.Name, "", horse.Equipment.Companion.Id);
else
- message += Messages.HorseNoCompanion;
+ if(isMyHorse)
+ message += Messages.HorseNoCompanion;
message += Messages.FormatHorseAdvancedStats(horse.Spoiled, horse.MagicUsed);
@@ -1650,23 +1736,30 @@ namespace HISP.Game
message += Messages.FormatPossibleColors(horse.Breed.Colors);
- bool canRelease = true;
- if(World.InTown(user.X, user.Y))
- canRelease = false;
-
-
- if (World.InSpecialTile(user.X, user.Y))
+ if(isMyHorse)
{
- World.SpecialTile tile = World.GetSpecialTile(user.X, user.Y);
- if (tile.Code != null)
+ bool canRelease = true;
+ if (World.InTown(user.X, user.Y))
canRelease = false;
+
+
+ if (World.InSpecialTile(user.X, user.Y))
+ {
+ World.SpecialTile tile = World.GetSpecialTile(user.X, user.Y);
+ if (tile.Code != null)
+ canRelease = false;
+ }
+
+ if (canRelease)
+ message += Messages.HorseReleaseButton;
}
- if(canRelease)
- message += Messages.HorseReleaseButton;
message += Messages.HorseOthers;
- message += buildHorseList(user);
+ if (isMyHorse)
+ message += buildHorseList(user);
+ else
+ message += buildHorseListIndependantlyOfUserInstance(horse.Owner);
message += Messages.BackToMapHorse;
message += Messages.MetaTerminator;
diff --git a/Horse Isle Server/HorseIsleServer/Server/Database.cs b/Horse Isle Server/HorseIsleServer/Server/Database.cs
index 900c4b4..df54242 100755
--- a/Horse Isle Server/HorseIsleServer/Server/Database.cs
+++ b/Horse Isle Server/HorseIsleServer/Server/Database.cs
@@ -1420,6 +1420,60 @@ namespace HISP.Server
}
+ public static HorseInstance ReadHorseInstance(MySqlDataReader reader)
+ {
+ int randomId = reader.GetInt32(0);
+ int breedId = reader.GetInt32(4);
+
+ HorseInfo.Breed horseBreed = HorseInfo.GetBreedById(breedId);
+ string name = reader.GetString(5);
+ string description = reader.GetString(6);
+ int spoiled = reader.GetInt32(32);
+ string category = reader.GetString(31);
+ int magicUsed = reader.GetInt32(33);
+ int autosell = reader.GetInt32(29);
+
+
+ HorseInstance inst = new HorseInstance(horseBreed, randomId, name, description, spoiled, category, magicUsed, autosell);
+ inst.Owner = reader.GetInt32(1);
+ inst.RanchId = reader.GetInt32(2);
+ inst.Leaser = reader.GetInt32(3);
+ inst.Sex = reader.GetString(7);
+ inst.Color = reader.GetString(8);
+
+
+ int health = reader.GetInt32(9);
+ int shoes = reader.GetInt32(10);
+ int hunger = reader.GetInt32(11);
+ int thirst = reader.GetInt32(12);
+ int mood = reader.GetInt32(13);
+ int groom = reader.GetInt32(14);
+ int tiredness = reader.GetInt32(15);
+ int experience = reader.GetInt32(16);
+ inst.BasicStats = new HorseInfo.BasicStats(inst, health, shoes, hunger, thirst, mood, groom, tiredness, experience);
+
+
+ int speed = reader.GetInt32(17);
+ int strength = reader.GetInt32(18);
+ int conformation = reader.GetInt32(19);
+ int agility = reader.GetInt32(20);
+ int endurance = reader.GetInt32(21);
+ int inteligence = reader.GetInt32(22);
+ int personality = reader.GetInt32(23);
+ int height = reader.GetInt32(24);
+ inst.AdvancedStats = new HorseInfo.AdvancedStats(inst, speed, strength, conformation, agility, inteligence, endurance, personality, height);
+
+ 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));
+ return inst;
+ }
+
public static void LoadHorseInventory(HorseInventory inv, int playerId)
{
using (MySqlConnection db = new MySqlConnection(ConnectionString))
@@ -1433,58 +1487,7 @@ namespace HISP.Server
while (reader.Read())
{
- int randomId = reader.GetInt32(0);
- int breedId = reader.GetInt32(4);
-
- HorseInfo.Breed horseBreed = HorseInfo.GetBreedById(breedId);
- string name = reader.GetString(5);
- string description = reader.GetString(6);
- int spoiled = reader.GetInt32(32);
- string category = reader.GetString(31);
- int magicUsed = reader.GetInt32(33);
- int autosell = reader.GetInt32(29);
-
-
- HorseInstance inst = new HorseInstance(horseBreed, randomId, name, description, spoiled, category, magicUsed, autosell);
- inst.Owner = reader.GetInt32(1);
- inst.RanchId = reader.GetInt32(2);
- inst.Leaser = reader.GetInt32(3);
- inst.Sex = reader.GetString(7);
- inst.Color = reader.GetString(8);
-
-
- int health = reader.GetInt32(9);
- int shoes = reader.GetInt32(10);
- int hunger = reader.GetInt32(11);
- int thirst = reader.GetInt32(12);
- int mood = reader.GetInt32(13);
- int groom = reader.GetInt32(14);
- int tiredness = reader.GetInt32(15);
- int experience = reader.GetInt32(16);
- inst.BasicStats = new HorseInfo.BasicStats(inst, health, shoes, hunger, thirst, mood, groom, tiredness, experience);
-
-
- int speed = reader.GetInt32(17);
- int strength = reader.GetInt32(18);
- int conformation = reader.GetInt32(19);
- int agility = reader.GetInt32(20);
- int endurance = reader.GetInt32(21);
- int inteligence = reader.GetInt32(22);
- int personality = reader.GetInt32(23);
- int height = reader.GetInt32(24);
- inst.AdvancedStats = new HorseInfo.AdvancedStats(inst, speed, strength, conformation, agility, inteligence, endurance, personality, height);
-
- 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.TrainTimer = reader.GetInt32(30);
- inv.AddHorse(inst, false);
+ inv.AddHorse(ReadHorseInstance(reader), false);
}
@@ -2145,6 +2148,95 @@ namespace HISP.Server
}
}
+ public static void DecHorseTrainTimeout()
+ {
+ using (MySqlConnection db = new MySqlConnection(ConnectionString))
+ {
+ db.Open();
+ MySqlCommand sqlCommand = db.CreateCommand();
+ sqlCommand.CommandText = "UPDATE Horses SET trainTimer=trainTimer-1 WHERE trainTimer-1 > -1";
+ sqlCommand.Prepare();
+ sqlCommand.ExecuteNonQuery();
+ sqlCommand.Dispose();
+ }
+ }
+
+
+ public static HorseInstance[] GetPlayerHorsesInCategory(int playerId, string category)
+ {
+
+ List instances = new List();
+ using (MySqlConnection db = new MySqlConnection(ConnectionString))
+ {
+ db.Open();
+ MySqlCommand sqlCommand = db.CreateCommand();
+ sqlCommand.CommandText = "SELECT * FROM Horses WHERE ownerId=@playerId AND category=@category";
+ sqlCommand.Parameters.AddWithValue("@playerId", playerId);
+ sqlCommand.Parameters.AddWithValue("@category", category);
+ sqlCommand.Prepare();
+ MySqlDataReader reader = sqlCommand.ExecuteReader();
+ while(reader.Read())
+ {
+ instances.Add(ReadHorseInstance(reader));
+ }
+ sqlCommand.Dispose();
+ return instances.ToArray();
+ }
+ }
+
+ public static HorseInstance GetPlayerHorse(int horseRandomId)
+ {
+ HorseInstance instance = null;
+ using (MySqlConnection db = new MySqlConnection(ConnectionString))
+ {
+ db.Open();
+ MySqlCommand sqlCommand = db.CreateCommand();
+ sqlCommand.CommandText = "SELECT * FROM Horses WHERE randomId=@horseRandomId";
+ sqlCommand.Parameters.AddWithValue("@horseRandomId", horseRandomId);
+ sqlCommand.Prepare();
+ MySqlDataReader reader = sqlCommand.ExecuteReader();
+ while (reader.Read())
+ {
+ instance = ReadHorseInstance(reader);
+ break;
+ }
+
+ sqlCommand.Dispose();
+ if (instance == null)
+ throw new KeyNotFoundException();
+ return instance;
+ }
+ }
+
+ public static int GetHorseTrainTimeout(int horseRandomId)
+ {
+ using (MySqlConnection db = new MySqlConnection(ConnectionString))
+ {
+ db.Open();
+ MySqlCommand sqlCommand = db.CreateCommand();
+ sqlCommand.CommandText = "SELECT trainTimer FROM Horses WHERE randomId=@randomId";
+ sqlCommand.Parameters.AddWithValue("@randomId", horseRandomId);
+ sqlCommand.Prepare();
+ int trainTimer = Convert.ToInt32(sqlCommand.ExecuteScalar());
+ sqlCommand.Dispose();
+ return trainTimer;
+ }
+ }
+ public static void SetHorseTrainTimeout(int horseRandomId, int trainTimeout)
+ {
+ using (MySqlConnection db = new MySqlConnection(ConnectionString))
+ {
+ db.Open();
+ MySqlCommand sqlCommand = db.CreateCommand();
+ sqlCommand.CommandText = "UPDATE Horses SET trainTimer=@trainTimer WHERE randomId=@randomId";
+ sqlCommand.Parameters.AddWithValue("@trainTimer", trainTimeout);
+ sqlCommand.Parameters.AddWithValue("@randomId", horseRandomId);
+ sqlCommand.Prepare();
+ sqlCommand.ExecuteNonQuery();
+ sqlCommand.Dispose();
+ }
+ }
+
public static void SetHorseCategory(int horseRandomId, string Category)
{
using (MySqlConnection db = new MySqlConnection(ConnectionString))
diff --git a/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs b/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs
index 9f291b7..89b1e35 100755
--- a/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs
+++ b/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs
@@ -722,7 +722,7 @@ namespace HISP.Server
Messages.BuildingVegatableGarden = gameData.messages.meta.ranch.special.vegatable_garden;
Messages.RanchTrainAllAttempt = gameData.messages.meta.ranch.special.train_all;
- Messages.RanchTrainSuccess = gameData.messages.meta.ranch.special.train_success;
+ Messages.RanchTrainSuccessFormat = gameData.messages.meta.ranch.special.train_success;
Messages.RanchTrainCantTrain = gameData.messages.meta.ranch.special.train_cant_train;
Messages.RanchHorsesFullyRested = gameData.messages.meta.ranch.special.fully_rested;
Messages.RanchWagonDroppedYouOff = gameData.messages.meta.ranch.special.wagon_used;
@@ -938,7 +938,8 @@ namespace HISP.Server
Messages.HorseBuckedYou = gameData.messages.meta.horse.horse_bucked;
Messages.HorseRidingMessageFormat = gameData.messages.meta.horse.riding_message;
- Messages.HorseNameFormat = gameData.messages.meta.horse.horse_inventory.your_horse_format;
+ Messages.HorseNameYoursFormat = gameData.messages.meta.horse.horse_inventory.your_horse_format;
+ Messages.HorseNameOthersFormat = gameData.messages.meta.horse.horse_inventory.horse_others_format;
Messages.HorseDescriptionFormat = gameData.messages.meta.horse.horse_inventory.description_format;
Messages.HorseHandsHeightFormat = gameData.messages.meta.horse.horse_inventory.hands_high;
Messages.HorseExperienceEarnedFormat = gameData.messages.meta.horse.horse_inventory.experience;
@@ -962,12 +963,14 @@ namespace HISP.Server
Messages.HorseCantAutoSellTacked = gameData.messages.meta.horse.horse_inventory.cannot_auto_sell_tacked;
Messages.HorseCurrentlyCategoryFormat = gameData.messages.meta.horse.horse_inventory.marked_as;
+ Messages.HorseMarkAsCategory = gameData.messages.meta.horse.horse_inventory.marking_options;
Messages.HorseStats = gameData.messages.meta.horse.horse_inventory.horse_stats;
Messages.HorseTacked = gameData.messages.meta.horse.horse_inventory.wearing_tacked;
Messages.HorseTackFormat = gameData.messages.meta.horse.horse_inventory.tacked_format;
Messages.HorseCompanion = gameData.messages.meta.horse.horse_inventory.companion;
Messages.HorseCompanionFormat = gameData.messages.meta.horse.horse_inventory.companion_selected;
+ Messages.HorseCompanionChangeButton = gameData.messages.meta.horse.companion_change_button;
Messages.HorseNoCompanion = gameData.messages.meta.horse.horse_inventory.no_companion;
Messages.HorseAdvancedStatsFormat = gameData.messages.meta.horse.horse_inventory.advanced_stats;
diff --git a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs
index 809743f..d346bc4 100755
--- a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs
+++ b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs
@@ -49,7 +49,7 @@ namespace HISP.Server
private static void onGameTick(object state)
{
World.TickWorldClock();
-
+ Database.DecHorseTrainTimeout();
gameTimer.Change(gameTickSpeed, gameTickSpeed);
}
private static void onMinuteTick(object state)
@@ -166,11 +166,11 @@ namespace HISP.Server
}
if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId))
{
- HorseInstance horseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
+ HorseInstance horseFeedInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
- sender.LoggedinUser.LastViewedHorse = horseInst;
+ sender.LoggedinUser.LastViewedHorse = horseFeedInst;
sender.LoggedinUser.MetaPriority = true;
- byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseFeedMenu(horseInst, sender.LoggedinUser));
+ byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseFeedMenu(horseFeedInst, sender.LoggedinUser));
sender.SendPacket(metaPacket);
break;
}
@@ -195,24 +195,24 @@ namespace HISP.Server
}
if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId))
{
- HorseInstance horseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
- sender.LoggedinUser.LastViewedHorse = horseInst;
+ HorseInstance horsePetInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
+ sender.LoggedinUser.LastViewedHorse = horsePetInst;
int randMoodAddition = RandomNumberGenerator.Next(1, 20);
int randTiredMinus = RandomNumberGenerator.Next(1, 10);
string msgs = "";
- if (horseInst.BasicStats.Mood + randMoodAddition >= 1000)
+ if (horsePetInst.BasicStats.Mood + randMoodAddition >= 1000)
msgs += Messages.HorsePetTooHappy;
- if (horseInst.BasicStats.Tiredness - randTiredMinus <= 0)
+ if (horsePetInst.BasicStats.Tiredness - randTiredMinus <= 0)
msgs += Messages.HorsePetTooTired;
-
- horseInst.BasicStats.Tiredness -= randTiredMinus;
- horseInst.BasicStats.Mood += randMoodAddition;
+
+ horsePetInst.BasicStats.Tiredness -= randTiredMinus;
+ horsePetInst.BasicStats.Mood += randMoodAddition;
byte[] petMessagePacket = PacketBuilder.CreateChat(Messages.FormatHorsePetMessage(msgs,randMoodAddition, randTiredMinus), PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(petMessagePacket);
@@ -284,8 +284,8 @@ namespace HISP.Server
}
if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId))
{
- HorseInstance horseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
- sender.LoggedinUser.LastViewedHorse = horseInst;
+ HorseInstance horseVetServiceInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
+ sender.LoggedinUser.LastViewedHorse = horseVetServiceInst;
if(World.InSpecialTile(sender.LoggedinUser.X, sender.LoggedinUser.Y))
{
@@ -296,13 +296,13 @@ namespace HISP.Server
int vetId = int.Parse(vetInfo[1]);
Vet vet = Vet.GetVetById(vetId);
- int price = vet.CalculatePrice(horseInst.BasicStats.Health);
+ int price = vet.CalculatePrice(horseVetServiceInst.BasicStats.Health);
if(sender.LoggedinUser.Money >= price)
{
- horseInst.BasicStats.Health = 1000;
+ horseVetServiceInst.BasicStats.Health = 1000;
sender.LoggedinUser.Money -= price;
- byte[] messagePacket = PacketBuilder.CreateChat(Messages.FormatVetHorseAtFullHealthMessage(horseInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT);
+ byte[] messagePacket = PacketBuilder.CreateChat(Messages.FormatVetHorseAtFullHealthMessage(horseVetServiceInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(messagePacket);
}
else
@@ -450,10 +450,10 @@ namespace HISP.Server
}
- HorseInstance horseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
+ HorseInstance horseReleaseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
if(sender.LoggedinUser.CurrentlyRidingHorse != null)
{
- if(horseInst.RandomId == sender.LoggedinUser.CurrentlyRidingHorse.RandomId)
+ if(horseReleaseInst.RandomId == sender.LoggedinUser.CurrentlyRidingHorse.RandomId)
{
byte[] errorChatPacket = PacketBuilder.CreateChat(Messages.HorseCantReleaseTheHorseYourRidingOn, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(errorChatPacket);
@@ -462,15 +462,15 @@ namespace HISP.Server
}
- if (horseInst.Description == "")
- horseInst.Description += Messages.FormatHorseReleasedBy(sender.LoggedinUser.Username);
+ if (horseReleaseInst.Description == "")
+ horseReleaseInst.Description += Messages.FormatHorseReleasedBy(sender.LoggedinUser.Username);
- Logger.InfoPrint(sender.LoggedinUser.Username + " RELEASED HORSE: " + horseInst.Name + " (a " + horseInst.Breed.Name + ").");
+ Logger.InfoPrint(sender.LoggedinUser.Username + " RELEASED HORSE: " + horseReleaseInst.Name + " (a " + horseReleaseInst.Breed.Name + ").");
- sender.LoggedinUser.HorseInventory.DeleteHorse(horseInst);
- new WildHorse(horseInst, sender.LoggedinUser.X, sender.LoggedinUser.Y, 60, true);
+ sender.LoggedinUser.HorseInventory.DeleteHorse(horseReleaseInst);
+ new WildHorse(horseReleaseInst, sender.LoggedinUser.X, sender.LoggedinUser.Y, 60, true);
- sender.LoggedinUser.LastViewedHorse = horseInst;
+ sender.LoggedinUser.LastViewedHorse = horseReleaseInst;
sender.LoggedinUser.MetaPriority = true;
byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseReleased());
sender.SendPacket(metaPacket);
@@ -497,11 +497,11 @@ namespace HISP.Server
}
if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId))
{
- HorseInstance horseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
+ HorseInstance horseTackInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
- sender.LoggedinUser.LastViewedHorse = horseInst;
+ sender.LoggedinUser.LastViewedHorse = horseTackInst;
sender.LoggedinUser.MetaPriority = true;
- byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildTackMenu(horseInst, sender.LoggedinUser));
+ byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildTackMenu(horseTackInst, sender.LoggedinUser));
sender.SendPacket(metaPacket);
break;
}
@@ -536,25 +536,25 @@ namespace HISP.Server
}
if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId))
{
- HorseInstance horseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
+ HorseInstance horseDrinkInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
- if(horseInst.BasicStats.Health < 200)
+ if(horseDrinkInst.BasicStats.Health < 200)
{
- byte[] hpToLow = PacketBuilder.CreateChat(Messages.FormatPondHpLowMessage(horseInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT);
+ byte[] hpToLow = PacketBuilder.CreateChat(Messages.FormatPondHpLowMessage(horseDrinkInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(hpToLow);
break;
}
- if(horseInst.BasicStats.Thirst < 1000)
+ if(horseDrinkInst.BasicStats.Thirst < 1000)
{
- horseInst.BasicStats.Thirst = 1000;
- byte[] drinkFull = PacketBuilder.CreateChat(Messages.FormatPondDrinkFull(horseInst.Name),PacketBuilder.CHAT_BOTTOM_RIGHT);
+ horseDrinkInst.BasicStats.Thirst = 1000;
+ byte[] drinkFull = PacketBuilder.CreateChat(Messages.FormatPondDrinkFull(horseDrinkInst.Name),PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(drinkFull);
if(RandomNumberGenerator.Next(0, 100) < 25)
{
- horseInst.BasicStats.Health -= 200;
- byte[] ohNoes = PacketBuilder.CreateChat(Messages.FormatPondDrinkOhNoes(horseInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT);
+ horseDrinkInst.BasicStats.Health -= 200;
+ byte[] ohNoes = PacketBuilder.CreateChat(Messages.FormatPondDrinkOhNoes(horseDrinkInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(ohNoes);
}
@@ -562,7 +562,7 @@ namespace HISP.Server
}
else
{
- byte[] notThirsty = PacketBuilder.CreateChat(Messages.FormatPondNotThirsty(horseInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT);
+ byte[] notThirsty = PacketBuilder.CreateChat(Messages.FormatPondNotThirsty(horseDrinkInst.Name), PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(notThirsty);
break;
}
@@ -768,6 +768,7 @@ namespace HISP.Server
sender.LoggedinUser.Facing %= 5;
byte[] rideHorsePacket = PacketBuilder.CreateHorseRidePacket(sender.LoggedinUser.X, sender.LoggedinUser.Y, sender.LoggedinUser.CharacterId, sender.LoggedinUser.Facing, 10, true);
sender.SendPacket(rideHorsePacket);
+ sender.LoggedinUser.NoClip = false;
UpdateUserInfo(sender.LoggedinUser);
}
@@ -793,24 +794,24 @@ namespace HISP.Server
}
if (sender.LoggedinUser.HorseInventory.HorseIdExist(randomId))
{
- HorseInstance horseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
+ HorseInstance horseMountInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
- if(horseInst.Equipment.Saddle == null || horseInst.Equipment.SaddlePad == null || horseInst.Equipment.Bridle == null)
+ if(horseMountInst.Equipment.Saddle == null || horseMountInst.Equipment.SaddlePad == null || horseMountInst.Equipment.Bridle == null)
{
byte[] horseNotTackedMessage = PacketBuilder.CreateChat(Messages.HorseCannotMountUntilTackedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(horseNotTackedMessage);
break;
}
- string ridingHorseMessage = Messages.FormatHorseRidingMessage(horseInst.Name);
+ string ridingHorseMessage = Messages.FormatHorseRidingMessage(horseMountInst.Name);
byte[] ridingHorseMessagePacket = PacketBuilder.CreateChat(ridingHorseMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(ridingHorseMessagePacket);
- sender.LoggedinUser.CurrentlyRidingHorse = horseInst;
+ sender.LoggedinUser.CurrentlyRidingHorse = horseMountInst;
// Determine what sprite to use;
int incBy = 0;
- switch(horseInst.Color)
+ switch(horseMountInst.Color)
{
case "brown":
incBy = 1;
@@ -846,34 +847,36 @@ namespace HISP.Server
}
- if(horseInst.Breed.Type == "zebra")
+ if(horseMountInst.Breed.Type == "zebra")
{
incBy = 11;
}
- if(horseInst.Breed.Id == 5) // Appaloosa
+ if(horseMountInst.Breed.Id == 5) // Appaloosa
{
- if(horseInst.Color == "brown")
+ if(horseMountInst.Color == "brown")
incBy = 12;
}
- if (horseInst.Breed.Type == "camel")
+ if (horseMountInst.Breed.Type == "camel")
{
- if (horseInst.Color == "brown")
+ if (horseMountInst.Color == "brown")
incBy = 13;
- if (horseInst.Color == "white")
+ if (horseMountInst.Color == "white")
incBy = 14;
}
- if (horseInst.Breed.Type == "unicorn")
+ if (horseMountInst.Breed.Type == "unicorn")
{
incBy = 15;
}
- if (horseInst.Breed.Type == "pegasus")
+ if (horseMountInst.Breed.Type == "pegasus")
{
incBy = 16;
+ sender.LoggedinUser.NoClip = true;
}
- if(horseInst.Breed.Id == 170) // Unipeg
+ if(horseMountInst.Breed.Id == 170) // Unipeg
{
incBy = 17;
+ sender.LoggedinUser.NoClip = true;
}
incBy *= 5;
@@ -896,6 +899,7 @@ namespace HISP.Server
randomId = 0;
packetStr = Encoding.UTF8.GetString(packet);
randomIdStr = packetStr.Substring(2, packetStr.Length - 4);
+ HorseInstance horseInst;
try
{
randomId = int.Parse(randomIdStr);
@@ -908,13 +912,22 @@ namespace HISP.Server
}
if(sender.LoggedinUser.HorseInventory.HorseIdExist(randomId))
{
- HorseInstance horseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
+ horseInst = sender.LoggedinUser.HorseInventory.GetHorseById(randomId);
UpdateHorseMenu(sender, horseInst);
}
else
{
- Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to look at a non existant horse.");
- break;
+ try
+ { // Not your horse? possibly viewed inside a ranch?
+ horseInst = Database.GetPlayerHorse(randomId);
+ UpdateHorseMenu(sender, horseInst);
+ break;
+ }
+ catch(Exception)
+ {
+ Logger.HackerPrint(sender.LoggedinUser.Username + " Tried to look at a non existant horse.");
+ break;
+ }
}
break;
@@ -1427,6 +1440,17 @@ namespace HISP.Server
metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildMinigamesLibary());
sender.SendPacket(metaPacket);
break;
+ case "13": // Train All (Ranch)
+ if (sender.LoggedinUser.OwnedRanch != null)
+ {
+ if(sender.LoggedinUser.OwnedRanch.GetBuildingCount(6) > 0) // Training Pen
+ {
+ sender.LoggedinUser.MetaPriority = true;
+ metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildRanchTraining(sender.LoggedinUser));
+ sender.SendPacket(metaPacket);
+ }
+ }
+ break;
case "20": // Minigame Rankings
sender.LoggedinUser.MetaPriority = true;
metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildMinigameRankingsForUser(sender.LoggedinUser));
@@ -4790,7 +4814,10 @@ namespace HISP.Server
{
int TileID = Map.GetTileId(forClient.LoggedinUser.X, forClient.LoggedinUser.Y, false);
string type = Map.TerrainTiles[TileID - 1].Type;
- forClient.LoggedinUser.LastViewedHorse = horseInst;
+
+ if(horseInst.Owner == forClient.LoggedinUser.Id)
+ forClient.LoggedinUser.LastViewedHorse = horseInst;
+
forClient.LoggedinUser.MetaPriority = true;
byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseInformation(horseInst, forClient.LoggedinUser));
forClient.SendPacket(metaPacket);