diff --git a/DataCollection/gamedata.json b/DataCollection/gamedata.json index c5bdd0b..c460acc 100755 --- a/DataCollection/gamedata.json +++ b/DataCollection/gamedata.json @@ -243,7 +243,7 @@ "offering_nothing":"^T6 Nothing being offered.^R1", "offering_money":"^T8 Money: $%MONEY%^R1", - "offering_item":"^T8%TOTAL% %ITEM% ^R1", + "offering_item":"^I%ICONID%^T8%TOTAL% %ITEM% ^R1", "offering_horse":"^I252^T8 Horse: %HORSENAME%^B3L%HORSERANDOMID%^R1", diff --git a/Horse Isle Server/HorseIsleServer/Game/Messages.cs b/Horse Isle Server/HorseIsleServer/Game/Messages.cs index 6d73a8d..5adc9c9 100755 --- a/Horse Isle Server/HorseIsleServer/Game/Messages.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Messages.cs @@ -1025,9 +1025,9 @@ namespace HISP.Game { return TradeOfferingHorseFormat.Replace("%HORSENAME%", horseName).Replace("%HORSERANDOMID%", horseRandomId.ToString()); } - public static string FormatTradeItemOffer(int quantity, string item) + public static string FormatTradeItemOffer(int iconId, int quantity, string item) { - return TradeOfferingItemFormat.Replace("%TOTAL%", quantity.ToString()).Replace("%ITEM%", item); + return TradeOfferingItemFormat.Replace("%ICONID%", iconId.ToString()).Replace("%TOTAL%", quantity.ToString()).Replace("%ITEM%", item); } public static string FormatTradeMoneyOffer(int amount) { diff --git a/Horse Isle Server/HorseIsleServer/Game/Meta.cs b/Horse Isle Server/HorseIsleServer/Game/Meta.cs index e618468..801e97c 100755 --- a/Horse Isle Server/HorseIsleServer/Game/Meta.cs +++ b/Horse Isle Server/HorseIsleServer/Game/Meta.cs @@ -469,10 +469,10 @@ namespace HISP.Game message += Messages.FormatTradeYourOffering(trade.OtherTrade.Trader.Username); - if (trade.MoenyOffered == 0 && trade.ItemsOffered.Count == 0 && trade.HorsesOffered.Count == 0) + if (trade.MoneyOffered == 0 && trade.ItemsOffered.Count == 0 && trade.HorsesOffered.Count == 0) message += Messages.TradeOfferingNothing; - if (trade.MoenyOffered > 0) - message += Messages.FormatTradeMoneyOffer(trade.MoenyOffered); + if (trade.MoneyOffered > 0) + message += Messages.FormatTradeMoneyOffer(trade.MoneyOffered); if(trade.HorsesOffered.Count > 0) foreach(HorseInstance horse in trade.HorsesOffered) message += Messages.FormatTradeHorseOffer(horse.Name, horse.RandomId); @@ -484,17 +484,17 @@ namespace HISP.Game if (item.Length > 1) name = itemInfo.PluralName; - message += Messages.FormatTradeItemOffer(item.Length, name); + message += Messages.FormatTradeItemOffer(itemInfo.IconId, item.Length, name); } if(trade.Stage == "OPEN") message += Messages.TradeAddItems; message += Messages.FormatTradeOtherOffering(trade.OtherTrade.Trader.Username); - if (trade.OtherTrade.MoenyOffered == 0 && trade.OtherTrade.ItemsOffered.Count == 0 && trade.OtherTrade.HorsesOffered.Count == 0) + if (trade.OtherTrade.MoneyOffered == 0 && trade.OtherTrade.ItemsOffered.Count == 0 && trade.OtherTrade.HorsesOffered.Count == 0) message += Messages.TradeOfferingNothing; - if (trade.OtherTrade.MoenyOffered > 0) - message += Messages.FormatTradeMoneyOffer(trade.OtherTrade.MoenyOffered); + if (trade.OtherTrade.MoneyOffered > 0) + message += Messages.FormatTradeMoneyOffer(trade.OtherTrade.MoneyOffered); if (trade.OtherTrade.HorsesOffered.Count > 0) foreach (HorseInstance horse in trade.OtherTrade.HorsesOffered) message += Messages.FormatTradeHorseOffer(horse.Name, horse.RandomId); @@ -506,7 +506,7 @@ namespace HISP.Game if (item.Length > 1) name = itemInfo.PluralName; - message += Messages.FormatTradeItemOffer(item.Length, name); + message += Messages.FormatTradeItemOffer(itemInfo.IconId, item.Length, name); } if (trade.Stage == "OPEN") diff --git a/Horse Isle Server/HorseIsleServer/Player/Trade.cs b/Horse Isle Server/HorseIsleServer/Player/Trade.cs index cfc4f77..b31150a 100644 --- a/Horse Isle Server/HorseIsleServer/Player/Trade.cs +++ b/Horse Isle Server/HorseIsleServer/Player/Trade.cs @@ -25,7 +25,7 @@ namespace HISP.Player public string Stage = "OPEN"; - public int MoenyOffered = 0; + public int MoneyOffered = 0; public List HorsesOffered = new List(); public List ItemsOffered = new List(); diff --git a/Horse Isle Server/HorseIsleServer/Player/User.cs b/Horse Isle Server/HorseIsleServer/Player/User.cs index 6b7bd4a..b28a7ed 100755 --- a/Horse Isle Server/HorseIsleServer/Player/User.cs +++ b/Horse Isle Server/HorseIsleServer/Player/User.cs @@ -424,6 +424,7 @@ namespace HISP.Player public Trade TradingWith = null; public int AttemptingToOfferItem; + public bool TradeMenuPriority = false; public byte[] SecCodeSeeds = new byte[3]; public int SecCodeInc = 0; diff --git a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs index 27c5374..85abf89 100755 --- a/Horse Isle Server/HorseIsleServer/Server/GameServer.cs +++ b/Horse Isle Server/HorseIsleServer/Server/GameServer.cs @@ -227,8 +227,8 @@ namespace HISP.Server break; } - - byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildTradeAddMoney(sender.LoggedinUser.Money)); + sender.LoggedinUser.TradeMenuPriority = true; + byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildTradeAddMoney(sender.LoggedinUser.TradingWith.MoneyOffered)); sender.SendPacket(metaPacket); break; @@ -252,7 +252,8 @@ namespace HISP.Server sender.LoggedinUser.TradingWith.HorsesOffered.Add(horse); UpdateArea(sender); - UpdateArea(sender.LoggedinUser.TradingWith.Trader.LoggedinClient); + if(!sender.LoggedinUser.TradingWith.Trader.TradeMenuPriority) + UpdateArea(sender.LoggedinUser.TradingWith.Trader.LoggedinClient); break; case '1': // Item @@ -270,8 +271,8 @@ namespace HISP.Server if (!sender.LoggedinUser.Inventory.HasItemId(itemId)) break; + sender.LoggedinUser.TradeMenuPriority = true; sender.LoggedinUser.AttemptingToOfferItem = itemId; - InventoryItem item = sender.LoggedinUser.Inventory.GetItemByItemId(itemId); byte[] addItemPacket = PacketBuilder.CreateMetaPacket(Meta.BuildTradeAddItem(item.ItemInstances.Count)); sender.SendPacket(addItemPacket); @@ -1878,6 +1879,68 @@ namespace HISP.Server } break; + case 3: // Add Item to Trade + { + if (dynamicInput.Length >= 2) + { + if (Item.ItemIdExist(sender.LoggedinUser.AttemptingToOfferItem)) + { + string answer = dynamicInput[1]; + int itemCount = -1; + try + { + itemCount = int.Parse(answer); + } + catch(FormatException) + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (Item TRADE, id is NaN)"); + } + + InventoryItem item = sender.LoggedinUser.Inventory.GetItemByItemId(sender.LoggedinUser.AttemptingToOfferItem); + + if (itemCount <= 0) + { + byte[] MustBeAtleast1 = PacketBuilder.CreateChat(Messages.TradeItemOfferAtleast1, PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(MustBeAtleast1); + break; + } + if(itemCount > item.ItemInstances.Count) + { + byte[] TooMuchItems = PacketBuilder.CreateChat(Messages.FormatTradeItemOfferTooMuch(item.ItemInstances.Count, itemCount), PacketBuilder.CHAT_BOTTOM_RIGHT); + sender.SendPacket(TooMuchItems); + break; + } + + foreach(ItemInstance[] existingItems in sender.LoggedinUser.TradingWith.ItemsOffered) + { + if(existingItems[0].ItemId == sender.LoggedinUser.AttemptingToOfferItem) + { + sender.LoggedinUser.TradingWith.ItemsOffered.Remove(existingItems); + break; + } + } + + + + ItemInstance[] items = new ItemInstance[itemCount]; + for (int i = 0; i < itemCount; i++) + { + items[i] = item.ItemInstances[i]; + } + sender.LoggedinUser.TradingWith.ItemsOffered.Add(items); + + UpdateArea(sender); + if (!sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority) + UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); + } + break; + } + else + { + Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (Item TRADE, wrong size)"); + break; + } + } case 6: // Riddle Room if (dynamicInput.Length >= 2) { @@ -2412,7 +2475,7 @@ namespace HISP.Server case "58": // Add new item to trade if(sender.LoggedinUser.TradingWith != null) { - sender.LoggedinUser.MetaPriority = true; + sender.LoggedinUser.TradeMenuPriority = true; metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildTradeAdd(sender.LoggedinUser.TradingWith)); sender.SendPacket(metaPacket); } @@ -2422,7 +2485,7 @@ namespace HISP.Server { sender.LoggedinUser.TradingWith.Stage = "DONE"; - if (sender.LoggedinUser.TradingWith.OtherTrade.Trader.MetaPriority == false) + if (sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority == false) UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient); UpdateArea(sender); @@ -6339,6 +6402,7 @@ namespace HISP.Server if(forClient.LoggedinUser.TradingWith != null) { forClient.LoggedinUser.MetaPriority = true; + forClient.LoggedinUser.TradeMenuPriority = false; byte[] tradeMeta = PacketBuilder.CreateMetaPacket(Meta.BuildTrade(forClient.LoggedinUser.TradingWith)); forClient.SendPacket(tradeMeta); return;