diff --git a/DataCollection/gamedata.json b/DataCollection/gamedata.json
index 531d2e7..a6b9b73 100755
--- a/DataCollection/gamedata.json
+++ b/DataCollection/gamedata.json
@@ -194,6 +194,26 @@
"venus_flytrap_format":"The Giant Venus Flytrap chomped at you!
OUCH!!
It chomped your pocket, taking $%MONEY% with it!!",
"password_input":"
^PLReply:|^PS14|ANSWER^R1",
"last_poet":"^R1^LLast Player Poet:%USERNAME% ^R1",
+ "pawneer":{
+ "pawneer_order":"You have a Pawneer Order! Would you like to use it for a new horse?^T6Place a Pawneer Horse Order ^D47|ORDER^R1",
+ "untacked_i_can_buy":"
^LYour untacked horses that I am willing to buy:^R1",
+ "pawn_horse":"^I252^T6Pawn %HORSENAME% for $%PRICE% ^B3L%RANDOMID%^D51c%RANDOMID%|PAWN^R1",
+ "are_you_sure":"Are you sure you want me to take your %BREEDNAME%?^T4Yes I am.^D43c%RANDOMID%|PAWN MY HORSE^R5",
+ "horse_sold":"You sold your horse %HORSENAME% to the Pawneer for $%PRICE%",
+ "horse_not_found":"Horse Not Found!",
+ "order":{
+ "select_breed":"Select from the following breeds I have access to:",
+ "breed_entry":"^T6%BREEDNAME%^D48c%BREEDID%|SELECT^R1",
+
+ "select_color":"Select from the available colors for the %BREEDNAME%:",
+ "color_entry":"^T6%COLOR%^D49c%COLOR%|SELECT^R1",
+
+ "select_gender":"To complete the order for a %COLOR% %BREEDNAME%, choose a gender:",
+ "gender_entry":"^T6%GENDERNAME%^D50c%GENDERINTERNAL%|SELECT^R1",
+
+ "found":"I have found you a matching horse!
breed: %BREEDNAME%
color: %COLOR%
gender: %GENDER%
height: %HEIGHT%
personality: %PERSONALITY%
intelligence: %INTELIGENCE%
It has already been delivered to you! I hope you enjoy! Please treat the horse with respect!
"
+ }
+ },
"arena":{
"results":"The Competition Results are in!
",
"placing":"%PLACE% player %USERNAME% scored: %SCORE%
",
@@ -267,6 +287,7 @@
"train_all":"You attempt to train all of your horses:",
"train_success":"
Training %HORSENAME%: +%SPEED%SP +%STRENGTH%ST +%CONFORMATION%CO +%AGILITY%AG +%ENDURANCE%EN +%EXP%exp",
"train_bad_mood":"
Training %HORSENAME%: Horse is in way too bad a mood.",
+ "train_too_thirsty":"
Horse is too thirsty to pay attention.",
"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."
@@ -405,7 +426,7 @@
"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.",
- "uniter_time_over":"The %HOSRENAME%' time with you has ended. You were taken back to the Uniter."
+ "uniter_time_over":"The %HOSRENAME%' time with you has ended. You were taken back to the Uniter.",
"allstats":{
"all_stats_header":"All of your horses' complete stats:",
"horse_name_entry":"
%HORSENAME%: %COLOR% %BREEDNAME% %SEX% (%EXP%exp)
",
@@ -2503,178 +2524,178 @@
{"name":"RETIRED","message":"^LRETIRED - Horses that are still special to me but not used:^R1","message_others":"^LRETIRED - Horses that are still special to player but not used:^R1"}
],
"pawneer_base_price":[
- {"breed_id":111,"price":107500},
- {"breed_id":172,"price":107500},
- {"breed_id":1,"price":106000},
- {"breed_id":102,"price":106500},
- {"breed_id":89,"price":105000},
- {"breed_id":29,"price":104000},
- {"breed_id":33,"price":97000},
- {"breed_id":41,"price":99000},
- {"breed_id":117,"price":106000},
- {"breed_id":4,"price":106000},
- {"breed_id":125,"price":108500},
- {"breed_id":5,"price":98500},
- {"breed_id":127,"price":106000},
- {"breed_id":6,"price":107000},
- {"breed_id":97,"price":105000},
- {"breed_id":122,"price":108500},
- {"breed_id":52,"price":98000},
- {"breed_id":77,"price":103500},
- {"breed_id":7,"price":106000},
- {"breed_id":80,"price":104000},
- {"breed_id":8,"price":94000},
- {"breed_id":151,"price":106000},
- {"breed_id":171,"price":106000},
- {"breed_id":145,"price":108000},
- {"breed_id":136,"price":108000},
- {"breed_id":107,"price":106000},
- {"breed_id":96,"price":106000},
- {"breed_id":184,"price":110000},
- {"breed_id":56,"price":73500},
- {"breed_id":124,"price":106000},
- {"breed_id":90,"price":111000},
- {"breed_id":119,"price":107500},
- {"breed_id":158,"price":107000},
- {"breed_id":69,"price":103000},
- {"breed_id":9,"price":89000},
- {"breed_id":10,"price":101000},
- {"breed_id":11,"price":99000},
- {"breed_id":166,"price":107000},
- {"breed_id":59,"price":107000},
- {"breed_id":95,"price":110000},
- {"breed_id":168,"price":104000},
- {"breed_id":12,"price":102500},
- {"breed_id":81,"price":108000},
- {"breed_id":13,"price":93000},
- {"breed_id":146,"price":108000},
- {"breed_id":101,"price":106500},
- {"breed_id":78,"price":106500},
- {"breed_id":169,"price":110000},
- {"breed_id":14,"price":105000},
- {"breed_id":161,"price":107000},
- {"breed_id":154,"price":104500},
- {"breed_id":175,"price":108000},
- {"breed_id":49,"price":95000},
- {"breed_id":50,"price":94000},
- {"breed_id":16,"price":96000},
- {"breed_id":108,"price":104000},
- {"breed_id":99,"price":106500},
- {"breed_id":155,"price":106000},
- {"breed_id":83,"price":105000},
- {"breed_id":82,"price":104000},
- {"breed_id":18,"price":103000},
- {"breed_id":98,"price":107500},
- {"breed_id":177,"price":108000},
- {"breed_id":76,"price":109500},
- {"breed_id":143,"price":111000},
- {"breed_id":173,"price":110000},
- {"breed_id":103,"price":112000},
- {"breed_id":121,"price":106500},
- {"breed_id":165,"price":105500},
- {"breed_id":54,"price":105500},
- {"breed_id":19,"price":98000},
- {"breed_id":20,"price":102000},
- {"breed_id":22,"price":108500},
- {"breed_id":87,"price":106500},
- {"breed_id":137,"price":107000},
- {"breed_id":62,"price":105500},
- {"breed_id":162,"price":109000},
- {"breed_id":129,"price":109000},
- {"breed_id":23,"price":95000},
- {"breed_id":148,"price":110500},
- {"breed_id":65,"price":101500},
- {"breed_id":126,"price":110000},
- {"breed_id":179,"price":111500},
- {"breed_id":113,"price":104500},
- {"breed_id":100,"price":106000},
- {"breed_id":92,"price":106500},
- {"breed_id":114,"price":108000},
- {"breed_id":182,"price":113000},
- {"breed_id":91,"price":109500},
- {"breed_id":176,"price":110500},
- {"breed_id":133,"price":105000},
- {"breed_id":75,"price":108000},
- {"breed_id":116,"price":110000},
- {"breed_id":141,"price":103000},
- {"breed_id":74,"price":107000},
- {"breed_id":167,"price":108500},
- {"breed_id":25,"price":106000},
- {"breed_id":57,"price":86500},
- {"breed_id":153,"price":106500},
- {"breed_id":60,"price":104000},
- {"breed_id":138,"price":107000},
- {"breed_id":156,"price":109500},
- {"breed_id":174,"price":111500},
- {"breed_id":26,"price":89000},
- {"breed_id":27,"price":101500},
- {"breed_id":132,"price":106000},
- {"breed_id":67,"price":104500},
- {"breed_id":28,"price":104500},
- {"breed_id":120,"price":107000},
- {"breed_id":106,"price":106500},
- {"breed_id":115,"price":104000},
- {"breed_id":51,"price":99500},
- {"breed_id":73,"price":103000},
- {"breed_id":86,"price":110000},
- {"breed_id":72,"price":102000},
- {"breed_id":134,"price":113500},
- {"breed_id":104,"price":103500},
- {"breed_id":152,"price":105000},
- {"breed_id":94,"price":102500},
- {"breed_id":135,"price":106000},
- {"breed_id":164,"price":108500},
- {"breed_id":32,"price":104000},
- {"breed_id":68,"price":106000},
- {"breed_id":93,"price":105000},
- {"breed_id":34,"price":94000},
- {"breed_id":64,"price":137500},
- {"breed_id":35,"price":96000},
- {"breed_id":183,"price":109500},
- {"breed_id":37,"price":102000},
- {"breed_id":147,"price":109000},
- {"breed_id":39,"price":92000},
- {"breed_id":88,"price":103000},
- {"breed_id":40,"price":105000},
- {"breed_id":79,"price":106500},
- {"breed_id":61,"price":105500},
- {"breed_id":131,"price":102500},
- {"breed_id":142,"price":105000},
- {"breed_id":53,"price":108000},
- {"breed_id":71,"price":110000},
- {"breed_id":42,"price":97500},
- {"breed_id":44,"price":96500},
- {"breed_id":149,"price":108500},
- {"breed_id":105,"price":102000},
- {"breed_id":70,"price":105000},
- {"breed_id":181,"price":108500},
- {"breed_id":140,"price":106000},
- {"breed_id":178,"price":112000},
- {"breed_id":45,"price":96000},
- {"breed_id":66,"price":99000},
- {"breed_id":160,"price":106000},
- {"breed_id":84,"price":106000},
- {"breed_id":46,"price":97000},
- {"breed_id":128,"price":111000},
- {"breed_id":112,"price":110500},
- {"breed_id":47,"price":105000},
- {"breed_id":163,"price":108500},
- {"breed_id":58,"price":106000},
- {"breed_id":109,"price":107000},
- {"breed_id":123,"price":107000},
- {"breed_id":170,"price":137500},
- {"breed_id":63,"price":137500},
- {"breed_id":159,"price":110000},
- {"breed_id":144,"price":106500},
- {"breed_id":130,"price":98500},
- {"breed_id":110,"price":105500},
- {"breed_id":48,"price":100500},
- {"breed_id":118,"price":107500},
- {"breed_id":139,"price":108500},
- {"breed_id":150,"price":107500},
- {"breed_id":157,"price":107500},
- {"breed_id":55,"price":103000},
- {"breed_id":180,"price":108500}
+ {"breed_id":56,"price":33500},
+ {"breed_id":57,"price":46500},
+ {"breed_id":9,"price":49000},
+ {"breed_id":26,"price":49000},
+ {"breed_id":39,"price":52000},
+ {"breed_id":13,"price":53000},
+ {"breed_id":8,"price":54000},
+ {"breed_id":50,"price":54000},
+ {"breed_id":34,"price":54000},
+ {"breed_id":49,"price":55000},
+ {"breed_id":23,"price":55000},
+ {"breed_id":16,"price":56000},
+ {"breed_id":35,"price":56000},
+ {"breed_id":45,"price":56000},
+ {"breed_id":44,"price":56500},
+ {"breed_id":33,"price":57000},
+ {"breed_id":46,"price":57000},
+ {"breed_id":42,"price":57500},
+ {"breed_id":52,"price":58000},
+ {"breed_id":19,"price":58000},
+ {"breed_id":5,"price":58500},
+ {"breed_id":130,"price":58500},
+ {"breed_id":41,"price":59000},
+ {"breed_id":11,"price":59000},
+ {"breed_id":66,"price":59000},
+ {"breed_id":51,"price":59500},
+ {"breed_id":48,"price":60500},
+ {"breed_id":10,"price":61000},
+ {"breed_id":65,"price":61500},
+ {"breed_id":27,"price":61500},
+ {"breed_id":20,"price":62000},
+ {"breed_id":72,"price":62000},
+ {"breed_id":37,"price":62000},
+ {"breed_id":105,"price":62000},
+ {"breed_id":12,"price":62500},
+ {"breed_id":94,"price":62500},
+ {"breed_id":131,"price":62500},
+ {"breed_id":69,"price":63000},
+ {"breed_id":18,"price":63000},
+ {"breed_id":141,"price":63000},
+ {"breed_id":73,"price":63000},
+ {"breed_id":88,"price":63000},
+ {"breed_id":55,"price":63000},
+ {"breed_id":77,"price":63500},
+ {"breed_id":104,"price":63500},
+ {"breed_id":29,"price":64000},
+ {"breed_id":80,"price":64000},
+ {"breed_id":168,"price":64000},
+ {"breed_id":108,"price":64000},
+ {"breed_id":82,"price":64000},
+ {"breed_id":60,"price":64000},
+ {"breed_id":115,"price":64000},
+ {"breed_id":32,"price":64000},
+ {"breed_id":154,"price":64500},
+ {"breed_id":113,"price":64500},
+ {"breed_id":67,"price":64500},
+ {"breed_id":28,"price":64500},
+ {"breed_id":89,"price":65000},
+ {"breed_id":97,"price":65000},
+ {"breed_id":14,"price":65000},
+ {"breed_id":83,"price":65000},
+ {"breed_id":133,"price":65000},
+ {"breed_id":152,"price":65000},
+ {"breed_id":93,"price":65000},
+ {"breed_id":40,"price":65000},
+ {"breed_id":142,"price":65000},
+ {"breed_id":70,"price":65000},
+ {"breed_id":47,"price":65000},
+ {"breed_id":165,"price":65500},
+ {"breed_id":54,"price":65500},
+ {"breed_id":62,"price":65500},
+ {"breed_id":61,"price":65500},
+ {"breed_id":110,"price":65500},
+ {"breed_id":1,"price":66000},
+ {"breed_id":117,"price":66000},
+ {"breed_id":4,"price":66000},
+ {"breed_id":127,"price":66000},
+ {"breed_id":7,"price":66000},
+ {"breed_id":151,"price":66000},
+ {"breed_id":171,"price":66000},
+ {"breed_id":107,"price":66000},
+ {"breed_id":96,"price":66000},
+ {"breed_id":124,"price":66000},
+ {"breed_id":155,"price":66000},
+ {"breed_id":100,"price":66000},
+ {"breed_id":25,"price":66000},
+ {"breed_id":132,"price":66000},
+ {"breed_id":135,"price":66000},
+ {"breed_id":68,"price":66000},
+ {"breed_id":140,"price":66000},
+ {"breed_id":160,"price":66000},
+ {"breed_id":84,"price":66000},
+ {"breed_id":58,"price":66000},
+ {"breed_id":102,"price":66500},
+ {"breed_id":101,"price":66500},
+ {"breed_id":78,"price":66500},
+ {"breed_id":99,"price":66500},
+ {"breed_id":121,"price":66500},
+ {"breed_id":87,"price":66500},
+ {"breed_id":92,"price":66500},
+ {"breed_id":153,"price":66500},
+ {"breed_id":106,"price":66500},
+ {"breed_id":79,"price":66500},
+ {"breed_id":144,"price":66500},
+ {"breed_id":6,"price":67000},
+ {"breed_id":158,"price":67000},
+ {"breed_id":166,"price":67000},
+ {"breed_id":59,"price":67000},
+ {"breed_id":161,"price":67000},
+ {"breed_id":137,"price":67000},
+ {"breed_id":74,"price":67000},
+ {"breed_id":138,"price":67000},
+ {"breed_id":120,"price":67000},
+ {"breed_id":109,"price":67000},
+ {"breed_id":123,"price":67000},
+ {"breed_id":111,"price":67500},
+ {"breed_id":172,"price":67500},
+ {"breed_id":119,"price":67500},
+ {"breed_id":98,"price":67500},
+ {"breed_id":118,"price":67500},
+ {"breed_id":150,"price":67500},
+ {"breed_id":157,"price":67500},
+ {"breed_id":145,"price":68000},
+ {"breed_id":136,"price":68000},
+ {"breed_id":81,"price":68000},
+ {"breed_id":146,"price":68000},
+ {"breed_id":175,"price":68000},
+ {"breed_id":177,"price":68000},
+ {"breed_id":114,"price":68000},
+ {"breed_id":75,"price":68000},
+ {"breed_id":53,"price":68000},
+ {"breed_id":125,"price":68500},
+ {"breed_id":122,"price":68500},
+ {"breed_id":22,"price":68500},
+ {"breed_id":167,"price":68500},
+ {"breed_id":164,"price":68500},
+ {"breed_id":149,"price":68500},
+ {"breed_id":181,"price":68500},
+ {"breed_id":163,"price":68500},
+ {"breed_id":139,"price":68500},
+ {"breed_id":180,"price":68500},
+ {"breed_id":162,"price":69000},
+ {"breed_id":129,"price":69000},
+ {"breed_id":147,"price":69000},
+ {"breed_id":76,"price":69500},
+ {"breed_id":91,"price":69500},
+ {"breed_id":156,"price":69500},
+ {"breed_id":183,"price":69500},
+ {"breed_id":184,"price":70000},
+ {"breed_id":95,"price":70000},
+ {"breed_id":169,"price":70000},
+ {"breed_id":173,"price":70000},
+ {"breed_id":126,"price":70000},
+ {"breed_id":116,"price":70000},
+ {"breed_id":86,"price":70000},
+ {"breed_id":71,"price":70000},
+ {"breed_id":159,"price":70000},
+ {"breed_id":148,"price":70500},
+ {"breed_id":176,"price":70500},
+ {"breed_id":112,"price":70500},
+ {"breed_id":90,"price":71000},
+ {"breed_id":143,"price":71000},
+ {"breed_id":128,"price":71000},
+ {"breed_id":179,"price":71500},
+ {"breed_id":174,"price":71500},
+ {"breed_id":103,"price":72000},
+ {"breed_id":178,"price":72000},
+ {"breed_id":182,"price":73000},
+ {"breed_id":134,"price":73500},
+ {"breed_id":64,"price":97500},
+ {"breed_id":170,"price":97500},
+ {"breed_id":63,"price":97500}
],
"breeds":[
{
diff --git a/Horse Isle Server/HorseIsleServer/Game/Horse/HorseInfo.cs b/Horse Isle Server/HorseIsleServer/Game/Horse/HorseInfo.cs
index 06f2169..978b7f3 100755
--- a/Horse Isle Server/HorseIsleServer/Game/Horse/HorseInfo.cs
+++ b/Horse Isle Server/HorseIsleServer/Game/Horse/HorseInfo.cs
@@ -480,7 +480,7 @@ namespace HISP.Game.Horse
private int experience;
}
- public struct Breed
+ public class Breed
{
public int Id;
public string Name;
@@ -491,8 +491,29 @@ namespace HISP.Game.Horse
public string SpawnInArea;
public string Swf;
public string Type;
- }
+ public string[] GenderTypes()
+ {
+ string[] options = new string[2];
+ if (Type == "camel")
+ {
+ options[0] = "cow";
+ options[1] = "bull";
+ }
+ else if (Type == "llama")
+ {
+ options[0] = "male";
+ options[1] = "female";
+ }
+ else
+ {
+ options[0] = "stallion";
+ options[1] = "mare";
+ }
+ return options;
+ }
+
+ }
public struct HorseEquips
{
public Item.ItemInformation Saddle;
diff --git a/Horse Isle Server/HorseIsleServer/Game/Horse/HorseInstance.cs b/Horse Isle Server/HorseIsleServer/Game/Horse/HorseInstance.cs
index 619f0a8..2cdda54 100755
--- a/Horse Isle Server/HorseIsleServer/Game/Horse/HorseInstance.cs
+++ b/Horse Isle Server/HorseIsleServer/Game/Horse/HorseInstance.cs
@@ -16,51 +16,19 @@ namespace HISP.Game.Horse
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";
- }
}
}
else
@@ -68,6 +36,8 @@ namespace HISP.Game.Horse
name = loadName;
}
+ Sex = breed.GenderTypes()[GameServer.RandomNumberGenerator.Next(0, 1)];
+
description = loadDescription;
Breed = breed;
Color = breed.Colors[GameServer.RandomNumberGenerator.Next(0, breed.Colors.Length)];
diff --git a/Horse Isle Server/HorseIsleServer/Game/Items/Tack.cs b/Horse Isle Server/HorseIsleServer/Game/Items/Tack.cs
index 1e8ce2e..4b73c39 100644
--- a/Horse Isle Server/HorseIsleServer/Game/Items/Tack.cs
+++ b/Horse Isle Server/HorseIsleServer/Game/Items/Tack.cs
@@ -92,11 +92,7 @@ namespace HISP.Game.Items
return pos;
}
}
- private static string capitalizeFirstLetter(string str)
- {
- char firstChar = char.ToUpper(str[0]);
- return firstChar + str.Substring(1);
- }
+
private static List tackSets = new List();
public static TackSet[] TackSets
{
@@ -126,14 +122,13 @@ namespace HISP.Game.Items
try
{
- TackSet set = GetSetByName(capitalizeFirstLetter(itemInfo.EmbedSwf));
+ TackSet set = GetSetByName(Converters.CapitalizeFirstLetter(itemInfo.EmbedSwf));
set.Add(itemInfo);
}
catch(KeyNotFoundException)
{
TackSet tackSet = new TackSet();
- tackSet.SetName = capitalizeFirstLetter(itemInfo.EmbedSwf);
- Logger.DebugPrint("Created Tack Set: "+tackSet.SetName);
+ tackSet.SetName = Converters.CapitalizeFirstLetter(itemInfo.EmbedSwf);
tackSet.Add(itemInfo);
tackSets.Add(tackSet);
}
diff --git a/Horse Isle Server/HorseIsleServer/Game/Messages.cs b/Horse Isle Server/HorseIsleServer/Game/Messages.cs
index 9f84dc0..f0fea3a 100755
--- a/Horse Isle Server/HorseIsleServer/Game/Messages.cs
+++ b/Horse Isle Server/HorseIsleServer/Game/Messages.cs
@@ -313,6 +313,7 @@ namespace HISP.Game
public static string HorseCaptureTimer;
public static string YouCapturedTheHorse;
public static string HorseEvadedCapture;
+ public static string HorseEscapedAnyway;
public static string TooManyHorses;
public static string HorsesMenuHeader;
public static string UpdateHorseCategory;
@@ -643,6 +644,25 @@ namespace HISP.Game
public static string LongFullLine;
public static string MetaTerminator;
+ // Pawneer
+ public static string PawneerUntackedHorsesICanBuy;
+ public static string PawneerHorseFormat;
+ public static string PawneerOrderMeta;
+ public static string PawneerHorseConfirmationFormat;
+ public static string PawneerHorseSoldMessagesFormat;
+ public static string PawneerHorseNotFound;
+
+ public static string PawneerOrderSelectBreed;
+ public static string PawneerOrderBreedEntryFormat;
+
+ public static string PawneerOrderSelectColorFormat;
+ public static string PawneerOrderColorEntryFormat;
+
+ public static string PawneerOrderSelectGenderFormat;
+ public static string PawneerOrderGenderEntryFormat;
+
+ public static string PawneerOrderHorseFoundFormat;
+
// Shortcuts
public static string NoTelescope;
@@ -702,6 +722,43 @@ namespace HISP.Game
// Click
public static string NothingInterestingHere;
+ public static string FormatPawneerOrderHorseFound(string breedName, string color, string gender, int height, int personality, int inteligence)
+ {
+ return PawneerOrderHorseFoundFormat.Replace("%BREEDNAME%", breedName).Replace("%COLOR%", color).Replace("%GENDER%", gender).Replace("%HEIGHT%", height.ToString()).Replace("%PERSONALITY%", personality.ToString()).Replace("%INTELIGENCE%", inteligence.ToString());
+ }
+ public static string FormatPawneerOrderGenderEntry(string genderName, string genderInternal)
+ {
+ return PawneerOrderGenderEntryFormat.Replace("%GENDERNAME%", genderName).Replace("%GENDERINTERNAL%", genderInternal);
+ }
+ public static string FormatPawneerOrderSelectGender(string color, string breedName)
+ {
+ return PawneerOrderSelectGenderFormat.Replace("%BREEDNAME%", breedName).Replace("%COLOR%", color);
+ }
+
+ public static string FormatPawneerOrderColorEntry(string color)
+ {
+ return PawneerOrderColorEntryFormat.Replace("%COLOR%", color);
+ }
+ public static string FormatPawneerOrderSelectColor(string breedName)
+ {
+ return PawneerOrderSelectColorFormat.Replace("%BREEDNAME%", breedName);
+ }
+ public static string FormatPawneerOrderBreedEntry(string breedName, int breedId)
+ {
+ return PawneerOrderBreedEntryFormat.Replace("%BREEDNAME%", breedName).Replace("%BREEDID%", breedId.ToString());
+ }
+ public static string FormatPawneerHorseEntry(string horseName, int price, int randomId)
+ {
+ return PawneerHorseFormat.Replace("%HORSENAME%", horseName).Replace("%PRICE%", price.ToString("N0")).Replace("%RANDOMID%", randomId.ToString());
+ }
+ public static string FormatPawneerConfirmPawn(string breedName, int randomId)
+ {
+ return PawneerHorseConfirmationFormat.Replace("%BREEDNAME%", breedName).Replace("%RANDOMID%", randomId.ToString());
+ }
+ public static string FormatPawneerSold(string horseName, int price)
+ {
+ return PawneerHorseSoldMessagesFormat.Replace("%HORSENAME%", horseName).Replace("%PRICE%", price.ToString("N0"));
+ }
public static string FormatPlayerHereMessage(string playerName)
diff --git a/Horse Isle Server/HorseIsleServer/Game/Meta.cs b/Horse Isle Server/HorseIsleServer/Game/Meta.cs
index 61eddc8..b935873 100755
--- a/Horse Isle Server/HorseIsleServer/Game/Meta.cs
+++ b/Horse Isle Server/HorseIsleServer/Game/Meta.cs
@@ -1430,7 +1430,13 @@ namespace HISP.Game
message += Messages.MetaTerminator;
return message;
}
-
+ public static string BuildHorseEscapedAnyway()
+ {
+ string message = Messages.HorseEscapedAnyway;
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
public static string BuildHorseCaughtMessage()
{
string message = Messages.YouCapturedTheHorse;
@@ -1879,6 +1885,74 @@ namespace HISP.Game
message += buildCommonInfo(x, y);
return message;
}
+ public static string BuildPawneerOrderFound(HorseInstance instance)
+ {
+ string message = Messages.FormatPawneerOrderHorseFound(instance.Breed.Name, instance.Color, instance.Sex, instance.AdvancedStats.Height, instance.AdvancedStats.Personality, instance.AdvancedStats.Inteligence);
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildPawneerOrderGenderList(HorseInfo.Breed breed, string color)
+ {
+ string message = Messages.FormatPawneerOrderSelectGender(color, breed.Name);
+ foreach (string gender in breed.GenderTypes())
+ message += Messages.FormatPawneerOrderGenderEntry(Converters.CapitalizeFirstLetter(gender), gender);
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildPawneerOrderColorList(HorseInfo.Breed breed)
+ {
+ string message = Messages.FormatPawneerOrderSelectColor(breed.Name);
+ foreach (string color in breed.Colors)
+ message += Messages.FormatPawneerOrderColorEntry(color);
+
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+
+ }
+ public static string BuildPawneerOrderBreedList()
+ {
+ string message = Messages.PawneerOrderSelectBreed;
+ foreach (HorseInfo.Breed breed in HorseInfo.Breeds.OrderBy(o => o.Name).ToList())
+ {
+ if (breed.Swf == "")
+ continue;
+ if (breed.SpawnInArea == "none")
+ continue;
+ message += Messages.FormatPawneerOrderBreedEntry(breed.Name, breed.Id);
+ }
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+ public static string BuildPawneerConfimation(HorseInstance horse)
+ {
+ string message = "";
+ message += Messages.FormatPawneerConfirmPawn(horse.Breed.Name, horse.RandomId);
+ message += Messages.BackToMap;
+ message += Messages.MetaTerminator;
+ return message;
+ }
+
+ private static string buildPawneer(User user)
+ {
+ string message = "";
+ if (user.Inventory.HasItemId(Item.PawneerOrder))
+ message += Messages.PawneerOrderMeta;
+ message += Messages.PawneerUntackedHorsesICanBuy;
+ foreach(HorseInstance horse in user.HorseInventory.HorseList)
+ {
+ if(horse.Category == "TRADING" && horse.Equipment.Bridle == null && horse.Equipment.Saddle == null && horse.Equipment.SaddlePad == null && horse.Equipment.Companion == null)
+ {
+ message += Messages.FormatPawneerHorseEntry(horse.Name, Pawneer.CalculateTotalPrice(horse), horse.RandomId);
+ }
+ }
+ message += Messages.ExitThisPlace;
+ message += Messages.MetaTerminator;
+ return message;
+ }
public static string BuildSpecialTileInfo(User user, World.SpecialTile specialTile)
{
string message = "";
@@ -1961,6 +2035,10 @@ namespace HISP.Game
{
message += buildWishingWell(user);
}
+ if(TileCode == "HORSEPAWNEER")
+ {
+ message += buildPawneer(user);
+ }
if (TileCode == "VENUSFLYTRAP")
{
message += buildVenusFlyTrap(user);
diff --git a/Horse Isle Server/HorseIsleServer/Game/Services/Pawneer.cs b/Horse Isle Server/HorseIsleServer/Game/Services/Pawneer.cs
new file mode 100644
index 0000000..74c4455
--- /dev/null
+++ b/Horse Isle Server/HorseIsleServer/Game/Services/Pawneer.cs
@@ -0,0 +1,57 @@
+using HISP.Game.Horse;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HISP.Game.Services
+{
+ public class Pawneer
+ {
+ public Pawneer(int breedId, int basePrice)
+ {
+ BreedId = breedId;
+ BasePrice = basePrice;
+ }
+ public static List PawneerPriceModels = new List();
+ public int BreedId;
+ public int BasePrice;
+
+
+ public static int GetPawneerBasePriceForHorse(HorseInfo.Breed breed)
+ {
+ foreach (Pawneer ppm in PawneerPriceModels)
+ {
+ if (ppm.BreedId == breed.Id)
+ {
+ return ppm.BasePrice;
+ }
+ }
+
+ throw new Exception("No pawneeer base price found >_> for breed #" + breed.Id + " " + breed.Name);
+ }
+ public static int CalculateTotalPrice(HorseInstance horse)
+ {
+ HorseInfo.StatCalculator speedStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.SPEED);
+ HorseInfo.StatCalculator strengthStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.STRENGTH);
+ HorseInfo.StatCalculator conformationStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.CONFORMATION);
+ HorseInfo.StatCalculator agilityStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.AGILITY);
+ HorseInfo.StatCalculator enduranceStat = new HorseInfo.StatCalculator(horse, HorseInfo.StatType.ENDURANCE);
+
+ int basePrice = GetPawneerBasePriceForHorse(horse.Breed);
+
+ int additionalPrice = speedStat.BreedOffset * 350;
+ additionalPrice += strengthStat.BreedOffset * 350;
+ additionalPrice += conformationStat.BreedOffset * 350;
+ additionalPrice += agilityStat.BreedOffset * 350;
+ additionalPrice += enduranceStat.BreedOffset * 350;
+
+ additionalPrice += horse.BasicStats.Health * 40;
+ additionalPrice += horse.BasicStats.Shoes * 20;
+
+ int price = basePrice + additionalPrice;
+ return price;
+ }
+ }
+}
diff --git a/Horse Isle Server/HorseIsleServer/Player/User.cs b/Horse Isle Server/HorseIsleServer/Player/User.cs
index 0824688..73af366 100755
--- a/Horse Isle Server/HorseIsleServer/Player/User.cs
+++ b/Horse Isle Server/HorseIsleServer/Player/User.cs
@@ -73,6 +73,10 @@ namespace HISP.Player
return 7; // will change when ranches are implemented.
}
}
+ public HorseInfo.Breed PawneerOrderBreed = null;
+ public string PawneerOrderColor = "";
+ public string PawneerOrderGender = "";
+
public Mailbox MailBox;
public Friends Friends;
public string Password; // For chat filter.
diff --git a/Horse Isle Server/HorseIsleServer/Program.cs b/Horse Isle Server/HorseIsleServer/Program.cs
index e0232b0..bf29241 100755
--- a/Horse Isle Server/HorseIsleServer/Program.cs
+++ b/Horse Isle Server/HorseIsleServer/Program.cs
@@ -5,6 +5,7 @@ using HISP.Game.Horse;
using HISP.Game.SwfModules;
using HISP.Security;
using HISP.Server;
+using HISP.Game.Services;
namespace HISP
{
@@ -27,6 +28,7 @@ namespace HISP
Brickpoet.LoadPoetryRooms();
Drawingroom.LoadAllDrawingRooms();
Item.DoSpecialCases();
+
GameServer.StartServer();
}
diff --git a/Horse Isle Server/HorseIsleServer/Server/Converters.cs b/Horse Isle Server/HorseIsleServer/Server/Converters.cs
index 286040c..b7b2a9a 100755
--- a/Horse Isle Server/HorseIsleServer/Server/Converters.cs
+++ b/Horse Isle Server/HorseIsleServer/Server/Converters.cs
@@ -28,11 +28,15 @@ namespace HISP.Server
- public static Double PointsToDistance(int x1, int y1, int x2, int y2)
+ public static double PointsToDistance(int x1, int y1, int x2, int y2)
{
return Math.Sqrt(Math.Pow((x2 - x1), 2) + Math.Pow((y2 - y1), 2));
}
-
+ public static string CapitalizeFirstLetter(string str)
+ {
+ char firstChar = char.ToUpper(str[0]);
+ return firstChar + str.Substring(1);
+ }
public static DateTime UnixTimeStampToDateTime(double unixTimeStamp)
{
// Unix timestamp is seconds past epoch
diff --git a/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs b/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs
index 9c9ce19..6df845a 100755
--- a/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs
+++ b/Horse Isle Server/HorseIsleServer/Server/GameDataJson.cs
@@ -511,6 +511,17 @@ namespace HISP.Server
HorseInfo.Breeds.Add(horseBreed);
Logger.DebugPrint("Registered Horse Breed: #" + horseBreed.Id + ": " + horseBreed.Name);
}
+ // Register Breed Prices @ Pawneer Order
+ int totalBreedPrices = gameData.horses.pawneer_base_price.Count;
+ for(int i = 0; i < totalBreedPrices; i++)
+ {
+ int id = gameData.horses.pawneer_base_price[i].breed_id;
+ int price = gameData.horses.pawneer_base_price[i].price;
+ Pawneer pawneerPricing = new Pawneer(id, price);
+ Pawneer.PawneerPriceModels.Add(pawneerPricing);
+ Logger.DebugPrint("Registered Pawneer Base Price " + pawneerPricing.BreedId + " for $" + pawneerPricing.BasePrice.ToString("N0"));
+ }
+
int totalCategories = gameData.horses.categorys.Count;
for(int i = 0; i < totalCategories; i++)
{
@@ -913,6 +924,25 @@ namespace HISP.Server
Messages.FarrierPutOnSteelShoesAllMesssageFormat = gameData.messages.meta.farrier.put_on_steel_all;
Messages.FarrierShoesCantAffordMessage = gameData.messages.meta.farrier.cant_afford_farrier;
+ // Pawneer
+ Messages.PawneerUntackedHorsesICanBuy = gameData.messages.meta.pawneer.untacked_i_can_buy;
+ Messages.PawneerHorseFormat = gameData.messages.meta.pawneer.pawn_horse;
+ Messages.PawneerOrderMeta = gameData.messages.meta.pawneer.pawneer_order;
+ Messages.PawneerHorseConfirmationFormat = gameData.messages.meta.pawneer.are_you_sure;
+ Messages.PawneerHorseSoldMessagesFormat = gameData.messages.meta.pawneer.horse_sold;
+ Messages.PawneerHorseNotFound = gameData.messages.meta.pawneer.horse_not_found;
+
+ Messages.PawneerOrderSelectBreed = gameData.messages.meta.pawneer.order.select_breed;
+ Messages.PawneerOrderBreedEntryFormat = gameData.messages.meta.pawneer.order.breed_entry;
+
+ Messages.PawneerOrderSelectColorFormat = gameData.messages.meta.pawneer.order.select_color;
+ Messages.PawneerOrderColorEntryFormat = gameData.messages.meta.pawneer.order.color_entry;
+
+ Messages.PawneerOrderSelectGenderFormat = gameData.messages.meta.pawneer.order.select_gender;
+ Messages.PawneerOrderGenderEntryFormat = gameData.messages.meta.pawneer.order.gender_entry;
+
+ Messages.PawneerOrderHorseFoundFormat = gameData.messages.meta.pawneer.order.found;
+
// Vet
Messages.VetServiceHorseFormat = gameData.messages.meta.vet.service_horse;
Messages.VetSerivcesNotNeeded = gameData.messages.meta.vet.not_needed;
@@ -1010,8 +1040,10 @@ namespace HISP.Server
Messages.HorsesHere = gameData.messages.meta.horse.horses_here;
Messages.WildHorseFormat = gameData.messages.meta.horse.wild_horse;
Messages.HorseCaptureTimer = gameData.messages.meta.horse.horse_timer;
- Messages.YouCapturedTheHorse = gameData.messages.meta.horse.hore_caught;
+
+ Messages.YouCapturedTheHorse = gameData.messages.meta.horse.horse_caught;
Messages.HorseEvadedCapture = gameData.messages.meta.horse.horse_escaped;
+ Messages.HorseEscapedAnyway = gameData.messages.meta.horse.horse_escaped_anyway;
Messages.HorsesMenuHeader = gameData.messages.meta.horse.horses_menu;
Messages.TooManyHorses = gameData.messages.meta.horse.too_many_horses;
diff --git a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs
index b76da45..1ee6b0a 100755
--- a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs
+++ b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs
@@ -1203,16 +1203,16 @@ namespace HISP.Server
WildHorse capturing = WildHorse.GetHorseById(sender.LoggedinUser.CapturingHorseId);
sender.LoggedinUser.CapturingHorseId = 0;
- capturing.Escape();
- Logger.InfoPrint(sender.LoggedinUser.Username + " Failed to capture: " + capturing.Instance.Breed.Name + " new location: " + capturing.X + ", " + capturing.Y);
+ if (capturing.X == sender.LoggedinUser.X && capturing.Y == sender.LoggedinUser.Y)
+ {
+ capturing.Escape();
+ Logger.InfoPrint(sender.LoggedinUser.Username + " Failed to capture: " + capturing.Instance.Breed.Name + " new location: " + capturing.X + ", " + capturing.Y);
- sender.LoggedinUser.MetaPriority = true;
- byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseEscapedMessage());
- sender.SendPacket(metaPacket);
-
- UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y);
+ }
}
-
+ sender.LoggedinUser.MetaPriority = true;
+ byte[] hoseEscaped = PacketBuilder.CreateMetaPacket(Meta.BuildHorseEscapedMessage());
+ sender.SendPacket(hoseEscaped);
break;
case PacketBuilder.HORSE_CAUGHT:
if (WildHorse.DoesHorseExist(sender.LoggedinUser.CapturingHorseId))
@@ -1220,33 +1220,38 @@ namespace HISP.Server
WildHorse capturing = WildHorse.GetHorseById(sender.LoggedinUser.CapturingHorseId);
sender.LoggedinUser.CapturingHorseId = 0;
- try
+ if (capturing.X == sender.LoggedinUser.X && capturing.Y == sender.LoggedinUser.Y)
{
- capturing.Capture(sender.LoggedinUser);
- }
- catch(InventoryFullException)
- {
- byte[] chatMsg = PacketBuilder.CreateChat(Messages.TooManyHorses, PacketBuilder.CHAT_BOTTOM_RIGHT);
- sender.SendPacket(chatMsg);
+ try
+ {
+ capturing.Capture(sender.LoggedinUser);
+ }
+ catch (InventoryFullException)
+ {
+ byte[] chatMsg = PacketBuilder.CreateChat(Messages.TooManyHorses, PacketBuilder.CHAT_BOTTOM_RIGHT);
+ sender.SendPacket(chatMsg);
+ break;
+ }
+
+ sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorseCapture).Count++;
+
+ if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorseCapture).Count >= 100)
+ sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(24)); // Wrangler
+ if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorseCapture).Count >= 1000)
+ sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(25)); // Pro Wrangler
+
+ Logger.InfoPrint(sender.LoggedinUser.Username + " Captured a: " + capturing.Instance.Breed.Name);
+
+ sender.LoggedinUser.MetaPriority = true;
+ byte[] horseCaught = PacketBuilder.CreateMetaPacket(Meta.BuildHorseCaughtMessage());
+ sender.SendPacket(horseCaught);
+
break;
}
-
- sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorseCapture).Count++;
-
- if(sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorseCapture).Count >= 100)
- sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(24)); // Wrangler
- if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorseCapture).Count >= 1000)
- sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(25)); // Pro Wrangler
-
- Logger.InfoPrint(sender.LoggedinUser.Username + " Captured a: " + capturing.Instance.Breed.Name + " new location: " + capturing.X + ", " + capturing.Y);
-
- sender.LoggedinUser.MetaPriority = true;
- byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildHorseCaughtMessage());
- sender.SendPacket(metaPacket);
-
- UpdateAreaForAll(sender.LoggedinUser.X, sender.LoggedinUser.Y);
}
-
+ sender.LoggedinUser.MetaPriority = true;
+ byte[] horseAllreadyCaught = PacketBuilder.CreateMetaPacket(Meta.BuildHorseEscapedAnyway());
+ sender.SendPacket(horseAllreadyCaught);
break;
case PacketBuilder.HORSE_TRY_CAPTURE:
randomId = 0;
@@ -1820,6 +1825,11 @@ namespace HISP.Server
metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildBooksLibary());
sender.SendPacket(metaPacket);
break;
+ case "47":
+ sender.LoggedinUser.MetaPriority = true;
+ metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPawneerOrderBreedList());
+ sender.SendPacket(metaPacket);
+ break;
case "53": // Misc Stats / Tracked Items
sender.LoggedinUser.MetaPriority = true;
metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildMiscStats(sender.LoggedinUser));
@@ -1887,7 +1897,7 @@ namespace HISP.Server
}
break;
}
- if(buttonIdStr.StartsWith("32c")) // Horse Whisperer
+ if (buttonIdStr.StartsWith("32c")) // Horse Whisperer
{
string idStr = buttonIdStr.Substring(3);
int breedId = -1;
@@ -1895,12 +1905,13 @@ namespace HISP.Server
{
breedId = int.Parse(idStr);
}
- catch (FormatException) {
+ catch (FormatException)
+ {
Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to whisper a horse with BreedId NaN.");
- break;
+ break;
};
-
- if(sender.LoggedinUser.Money < 50000)
+
+ if (sender.LoggedinUser.Money < 50000)
{
byte[] cannotAffordMessage = PacketBuilder.CreateChat(Messages.WhispererServiceCannotAfford, PacketBuilder.CHAT_BOTTOM_RIGHT);
sender.SendPacket(cannotAffordMessage);
@@ -1908,15 +1919,15 @@ namespace HISP.Server
}
List horsesFound = new List();
- foreach(WildHorse horse in WildHorse.WildHorses)
+ foreach (WildHorse horse in WildHorse.WildHorses)
{
- if(horse.Instance.Breed.Id == breedId)
+ if (horse.Instance.Breed.Id == breedId)
{
horsesFound.Add(horse);
}
}
int cost = 0;
- if(horsesFound.Count >= 1)
+ if (horsesFound.Count >= 1)
{
cost = 50000;
}
@@ -1931,11 +1942,11 @@ namespace HISP.Server
byte[] serachResultMeta = PacketBuilder.CreateMetaPacket(Meta.BuildWhisperSearchResults(horsesFound.ToArray()));
sender.SendPacket(serachResultMeta);
-
+
sender.LoggedinUser.Money -= cost;
break;
}
- else if(buttonIdStr.StartsWith("4c")) // Libary Breed Search
+ else if (buttonIdStr.StartsWith("4c")) // Libary Breed Search
{
string idStr = buttonIdStr.Substring(2);
int breedId = -1;
@@ -1945,9 +1956,10 @@ namespace HISP.Server
breedId = int.Parse(idStr);
horseBreed = HorseInfo.GetBreedById(breedId);
}
- catch (Exception) {
+ catch (Exception)
+ {
Logger.DebugPrint(sender.LoggedinUser.Username + " Sent invalid libary breed viewer request.");
- break;
+ break;
};
sender.LoggedinUser.MetaPriority = true;
string metaTag = Meta.BuildBreedViewerLibary(horseBreed);
@@ -1959,7 +1971,144 @@ namespace HISP.Server
sender.SendPacket(loadSwf);
break;
-
+
+ }
+ else if(buttonIdStr.StartsWith("50c"))
+ {
+ string gender = buttonIdStr.Substring(3);
+ if (sender.LoggedinUser.PawneerOrderBreed != null)
+ {
+ if (sender.LoggedinUser.PawneerOrderBreed.GenderTypes().Contains(gender))
+ {
+ if(sender.LoggedinUser.Inventory.HasItemId(Item.PawneerOrder))
+ {
+ sender.LoggedinUser.PawneerOrderGender = gender;
+
+ HorseInstance horseInstance = new HorseInstance(sender.LoggedinUser.PawneerOrderBreed);
+ horseInstance.Color = sender.LoggedinUser.PawneerOrderColor;
+ horseInstance.Sex = sender.LoggedinUser.PawneerOrderGender;
+ horseInstance.Name = "Pawneer Order";
+
+ sender.LoggedinUser.Inventory.Remove(sender.LoggedinUser.Inventory.GetItemByItemId(Item.PawneerOrder).ItemInstances[0]);
+ sender.LoggedinUser.HorseInventory.AddHorse(horseInstance);
+
+ sender.LoggedinUser.MetaPriority = true;
+ metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPawneerOrderFound(horseInstance));
+ sender.SendPacket(metaPacket);
+ break;
+ }
+ }
+ }
+ Logger.ErrorPrint(sender.LoggedinUser.Username + " Error occured when doing a Pawneer Order.");
+ break;
+ }
+ else if(buttonIdStr.StartsWith("49c"))
+ {
+ string color = buttonIdStr.Substring(3);
+ if(sender.LoggedinUser.PawneerOrderBreed != null)
+ {
+ if(sender.LoggedinUser.PawneerOrderBreed.Colors.Contains(color))
+ {
+ sender.LoggedinUser.PawneerOrderColor = color;
+
+ sender.LoggedinUser.MetaPriority = true;
+ metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPawneerOrderGenderList(sender.LoggedinUser.PawneerOrderBreed, color));
+ sender.SendPacket(metaPacket);
+ break;
+ }
+ }
+ Logger.ErrorPrint(sender.LoggedinUser.Username + " Asked for a horse of an unknown color " + color);
+ break;
+ }
+ else if (buttonIdStr.StartsWith("48c")) // Pawneer Order Breed Select
+ {
+ string idStr = buttonIdStr.Substring(3);
+ int breedId = -1;
+ HorseInfo.Breed breed;
+ try
+ {
+ breedId = int.Parse(idStr);
+ breed = HorseInfo.GetBreedById(breedId);
+ }
+ catch (Exception)
+ {
+ Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to pawner order a horse with id NaN.");
+ break;
+ }
+ sender.LoggedinUser.PawneerOrderBreed = breed;
+
+ sender.LoggedinUser.MetaPriority = true;
+ metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildPawneerOrderColorList(breed));
+ sender.SendPacket(metaPacket);
+ break;
+ }
+ else if (buttonIdStr.StartsWith("43c")) // Pawn Horse Confirm
+ {
+ string idStr = buttonIdStr.Substring(3);
+ int horseId = -1;
+ try
+ {
+ horseId = int.Parse(idStr);
+ }
+ catch (FormatException)
+ {
+ Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to pawn a horse with id NaN.");
+ break;
+ }
+
+ if (sender.LoggedinUser.HorseInventory.HorseIdExist(horseId))
+ {
+ HorseInstance inst = sender.LoggedinUser.HorseInventory.GetHorseById(horseId);
+ int price = Pawneer.CalculateTotalPrice(inst);
+ string name = inst.Name;
+
+ sender.LoggedinUser.HorseInventory.DeleteHorse(inst); // 1000% a "distant land.."
+ sender.LoggedinUser.LastViewedHorse = null;
+
+ sender.LoggedinUser.Money += price;
+ byte[] soldHorseMessage = PacketBuilder.CreateChat(Messages.FormatPawneerSold(name, price), PacketBuilder.CHAT_BOTTOM_RIGHT);
+ sender.SendPacket(soldHorseMessage);
+
+ UpdateArea(sender);
+
+ break;
+ }
+ else
+ {
+ byte[] cantFindHorse = PacketBuilder.CreateChat(Messages.PawneerHorseNotFound, PacketBuilder.CHAT_BOTTOM_RIGHT);
+ sender.SendPacket(cantFindHorse);
+ }
+ break;
+ }
+ else if (buttonIdStr.StartsWith("51c")) // Pawn Horse
+ {
+ string idStr = buttonIdStr.Substring(3);
+ int horseId = -1;
+ try
+ {
+ horseId = int.Parse(idStr);
+ }
+ catch (FormatException)
+ {
+ Logger.DebugPrint(sender.LoggedinUser.Username + " Tried to pawn a horse with id NaN.");
+ break;
+ }
+
+ if (sender.LoggedinUser.HorseInventory.HorseIdExist(horseId))
+ {
+ HorseInstance inst = sender.LoggedinUser.HorseInventory.GetHorseById(horseId);
+
+ sender.LoggedinUser.MetaPriority = true;
+ byte[] confirmScreen = PacketBuilder.CreateMetaPacket(Meta.BuildPawneerConfimation(inst));
+ sender.SendPacket(confirmScreen);
+ break;
+ }
+ else
+ {
+ byte[] cantFindHorse = PacketBuilder.CreateChat(Messages.PawneerHorseNotFound, PacketBuilder.CHAT_BOTTOM_RIGHT);
+ sender.SendPacket(cantFindHorse);
+ }
+ break;
}
if(AbuseReport.DoesReasonExist(buttonIdStr))
{