From d9cdd05acb0996eae473ab9b7d253b6b144c0844 Mon Sep 17 00:00:00 2001 From: SilicaAndPina Date: Mon, 15 Feb 2021 13:31:00 +1300 Subject: [PATCH] Add Horse Pawneer and Pawneer Orders. --- DataCollection/gamedata.json | 367 +++++++++--------- .../HorseIsleServer/Game/Horse/HorseInfo.cs | 25 +- .../Game/Horse/HorseInstance.cs | 34 +- .../HorseIsleServer/Game/Items/Tack.cs | 11 +- .../HorseIsleServer/Game/Messages.cs | 57 +++ .../HorseIsleServer/Game/Meta.cs | 80 +++- .../HorseIsleServer/Game/Services/Pawneer.cs | 57 +++ .../HorseIsleServer/Player/User.cs | 4 + Horse Isle Server/HorseIsleServer/Program.cs | 2 + .../HorseIsleServer/Server/Converters.cs | 8 +- .../HorseIsleServer/Server/GameDataJson.cs | 34 +- .../HorseIsleServer/Server/GameServer.cs | 237 ++++++++--- 12 files changed, 653 insertions(+), 263 deletions(-) create mode 100644 Horse Isle Server/HorseIsleServer/Game/Services/Pawneer.cs 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)) {