mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-07 13:45:42 +12:00
Add Trading :D
This commit is contained in:
parent
507d8910dc
commit
ee3fc56839
7 changed files with 237 additions and 13 deletions
|
@ -226,13 +226,13 @@
|
|||
"tag_button":"^B1X%PLAYERID%",
|
||||
"pm_button":"^B1P%PLAYERNAME%",
|
||||
"trade":{
|
||||
"trading_with":"^ATTrading with %PLAYERNAME%^H",
|
||||
"trading_with":"^ATTrading with %PLAYERNAME%",
|
||||
|
||||
"trade_wait_for_done":"^LWaiting for other player to click DONE.^R1",
|
||||
"other_player_is_done":"^LOther player is DONE adding things to the offer.^R1",
|
||||
"final_review":"<B>Final Trade Review - Only accept if you feel trade is 100% Fair!</B>",
|
||||
"final_review":"^H<B>Final Trade Review - Only accept if you feel trade is 100% Fair!</B>",
|
||||
|
||||
"you_offering":"<B>You are offering %PLAYERNAME% the following:</B> ",
|
||||
"you_offering":"^H<B>You are offering %PLAYERNAME% the following:</B> ",
|
||||
|
||||
"add_items":"^T6Add additional trade items:^D58|ADD^R1",
|
||||
"other_offering":"^H<B>%PLAYERNAME% is offering you the following:</B>",
|
||||
|
@ -262,6 +262,8 @@
|
|||
"money_offer_submenu":"<B>How much money do you want to OFFER player?</B>^PMAmount of money to offer:|%CURRENTMONEYOFFER%^PS3|Add to offer^R1",
|
||||
"object_offer_submenu":"^PMQuantity of item (%QUANTITY% max):|1^R1^PS3|Add to offer^R1",
|
||||
|
||||
|
||||
|
||||
"waiting_for_other_to_accept":"Waiting for other player to Accept or Reject trade...",
|
||||
|
||||
"requires_both_players":"Trade process requires other player to click TRADE with you also before it will start.",
|
||||
|
@ -282,6 +284,9 @@
|
|||
"cant_handle_more_horses":"You cannot handle this many more horses!",
|
||||
"other_player_cant_handle_more_horses":"Player %PLAYERNAME% cannot handle this many more horses!",
|
||||
|
||||
"other_carry_more":"Buyer cannot carry that quantity of one of the items!",
|
||||
"you_cant_carry_more":"You cannot carry that quantity of one of the items!",
|
||||
|
||||
"trade_spent":"You spent $%MONEY% in the trade.",
|
||||
"trade_received":"You received $%MONEY% in the trade.",
|
||||
|
||||
|
@ -998,7 +1003,7 @@
|
|||
"grab_all":"^T3^B4R^R1"
|
||||
},
|
||||
"nearby":{
|
||||
"players_nearby":"<B>Players Nearby:</B>",
|
||||
"players_nearby":"<B>Players Nearby:</B><BR>",
|
||||
"east":"<B>East:</B>",
|
||||
"west":"<B>West:</B>",
|
||||
"south":"<B>South:</B>",
|
||||
|
|
|
@ -77,6 +77,9 @@ namespace HISP.Game
|
|||
public static string TradeYouSpentMoneyMessageFormat;
|
||||
public static string TradeYouReceivedMoneyMessageFormat;
|
||||
|
||||
public static string TradeYouCantCarryMoreItems;
|
||||
public static string TradeOtherCantCarryMoreItems;
|
||||
|
||||
public static string TradeNotAllowedWhileBidding;
|
||||
public static string TradeNotAllowedWhileOtherBidding;
|
||||
|
||||
|
|
|
@ -41,7 +41,6 @@ namespace HISP.Game
|
|||
User[] playersAt = GameServer.GetUsersAt(x, y, true, true);
|
||||
if(playersAt.Length > 1)
|
||||
{
|
||||
playersHere += Messages.Seperator;
|
||||
playersHere += Messages.PlayersHere;
|
||||
int count = 0;
|
||||
foreach(User playerAt in playersAt)
|
||||
|
@ -72,7 +71,7 @@ namespace HISP.Game
|
|||
return playersHere;
|
||||
}
|
||||
|
||||
private static string buildNearbyString(int x, int y)
|
||||
private static string buildNearbyString(int x, int y, bool showNearbyPlayersHeader=true)
|
||||
{
|
||||
string playersNearby = "";
|
||||
|
||||
|
@ -80,9 +79,10 @@ namespace HISP.Game
|
|||
int count = 0;
|
||||
if (nearbyUsers.Length > 1)
|
||||
{
|
||||
playersNearby += Messages.Seperator;
|
||||
playersNearby += Messages.NearbyPlayers;
|
||||
playersNearby += Messages.Seperator;
|
||||
if(showNearbyPlayersHeader)
|
||||
{
|
||||
playersNearby += Messages.NearbyPlayers;
|
||||
}
|
||||
|
||||
string usersWest = "";
|
||||
string usersNorth = "";
|
||||
|
@ -956,7 +956,8 @@ namespace HISP.Game
|
|||
|
||||
public static string BuildNearbyList(User user)
|
||||
{
|
||||
string message = Messages.NearbyPlayersListHeader;
|
||||
string message = "";
|
||||
message += Messages.NearbyPlayersListHeader;
|
||||
User[] nearbyUsers = GameServer.GetNearbyUsers(user.X, user.Y, false, true);
|
||||
foreach (User nearbyUser in nearbyUsers)
|
||||
{
|
||||
|
@ -2558,6 +2559,7 @@ namespace HISP.Game
|
|||
|
||||
if (specialTile.Description != null && specialTile.Description != "")
|
||||
message += specialTile.Description;
|
||||
message += Messages.Seperator; // <BR>
|
||||
|
||||
string npc = buildNpc(user, specialTile.X, specialTile.Y);
|
||||
message += npc;
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
using HISP.Game;
|
||||
using HISP.Game.Horse;
|
||||
using HISP.Game.Inventory;
|
||||
using HISP.Game.Items;
|
||||
using HISP.Security;
|
||||
using HISP.Server;
|
||||
|
@ -41,6 +42,164 @@ namespace HISP.Player
|
|||
GameServer.UpdateArea(OtherTrade.Trader.LoggedinClient);
|
||||
}
|
||||
|
||||
public void CompleteTrade()
|
||||
{
|
||||
bool fail = false;
|
||||
// Check hell
|
||||
if (OtherTrade.Trader.Money < 0)
|
||||
{
|
||||
byte[] otherNegativeMoneyNotAllowed = PacketBuilder.CreateChat(Messages.TradeOtherPlayerHasNegativeMoney, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
Trader.LoggedinClient.SendPacket(otherNegativeMoneyNotAllowed);
|
||||
fail = true;
|
||||
}
|
||||
if (Trader.Money < 0)
|
||||
{
|
||||
byte[] negativeMoneyNotAllowed = PacketBuilder.CreateChat(Messages.TradeYouHaveNegativeMoney, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
Trader.LoggedinClient.SendPacket(negativeMoneyNotAllowed);
|
||||
fail = true;
|
||||
}
|
||||
if (OtherTrade.Trader.Bids.Count > 0)
|
||||
{
|
||||
byte[] tradeNotAllowedWhileOtherBidding = PacketBuilder.CreateChat(Messages.TradeNotAllowedWhileOtherBidding, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
Trader.LoggedinClient.SendPacket(tradeNotAllowedWhileOtherBidding);
|
||||
fail = true;
|
||||
}
|
||||
if (Trader.Bids.Count > 0)
|
||||
{
|
||||
byte[] tradeNotAllowedWhileBidding = PacketBuilder.CreateChat(Messages.TradeNotAllowedWhileBidding, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
Trader.LoggedinClient.SendPacket(tradeNotAllowedWhileBidding);
|
||||
fail = true;
|
||||
}
|
||||
if (OtherTrade.Trader.HorseInventory.HorseList.Length > OtherTrade.Trader.MaxHorses)
|
||||
{
|
||||
byte[] tradeYouHaveTooManyHorses = PacketBuilder.CreateChat(Messages.TradeYouCantHandleMoreHorses, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
Trader.LoggedinClient.SendPacket(tradeYouHaveTooManyHorses);
|
||||
fail = true;
|
||||
}
|
||||
if (Trader.HorseInventory.HorseList.Length > Trader.MaxHorses)
|
||||
{
|
||||
byte[] tradeYouHaveTooManyHorses = PacketBuilder.CreateChat(Messages.TradeYouCantHandleMoreHorses, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
Trader.LoggedinClient.SendPacket(tradeYouHaveTooManyHorses);
|
||||
fail = true;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Item Checks
|
||||
*/
|
||||
|
||||
bool itemYouFail = false;
|
||||
foreach (ItemInstance[] inst in OtherTrade.ItemsOffered)
|
||||
{
|
||||
if (Trader.Inventory.HasItemId(inst[0].ItemId))
|
||||
{
|
||||
InventoryItem items = Trader.Inventory.GetItemByItemId(inst[0].ItemId);
|
||||
if (items.ItemInstances.Count + inst.Length >= ConfigReader.MAX_STACK)
|
||||
{
|
||||
itemYouFail = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (itemYouFail)
|
||||
{
|
||||
fail = true;
|
||||
byte[] tradeTooManyItems = PacketBuilder.CreateChat(Messages.TradeYouCantCarryMoreItems, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
Trader.LoggedinClient.SendPacket(tradeTooManyItems);
|
||||
}
|
||||
|
||||
bool itemOtherFail = false;
|
||||
foreach (ItemInstance[] inst in ItemsOffered)
|
||||
{
|
||||
if (OtherTrade.Trader.Inventory.HasItemId(inst[0].ItemId))
|
||||
{
|
||||
InventoryItem items = OtherTrade.Trader.Inventory.GetItemByItemId(inst[0].ItemId);
|
||||
if (items.ItemInstances.Count + inst.Length >= ConfigReader.MAX_STACK)
|
||||
{
|
||||
itemOtherFail = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (itemOtherFail)
|
||||
{
|
||||
fail = true;
|
||||
byte[] tradeTooManyItems = PacketBuilder.CreateChat(Messages.TradeOtherCantCarryMoreItems, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
Trader.LoggedinClient.SendPacket(tradeTooManyItems);
|
||||
}
|
||||
|
||||
if (fail)
|
||||
goto cancelTrade;
|
||||
else
|
||||
goto acceptTrade;
|
||||
|
||||
|
||||
acceptTrade:;
|
||||
byte[] tradeAccepted = PacketBuilder.CreateChat(Messages.TradeAcceptedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
Trader.LoggedinClient.SendPacket(tradeAccepted);
|
||||
|
||||
if (MoneyOffered > 0) // Transfer Money
|
||||
{
|
||||
Trader.Money -= MoneyOffered;
|
||||
byte[] tradeSpentMoney = PacketBuilder.CreateChat(Messages.FormatTradeYouSpent(MoneyOffered), PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
Trader.LoggedinClient.SendPacket(tradeSpentMoney);
|
||||
}
|
||||
|
||||
if(OtherTrade.MoneyOffered > 0)
|
||||
{
|
||||
Trader.Money += OtherTrade.MoneyOffered;
|
||||
byte[] tradeReceivedMoney = PacketBuilder.CreateChat(Messages.FormatTradeYouReceived(OtherTrade.MoneyOffered), PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
Trader.LoggedinClient.SendPacket(tradeReceivedMoney);
|
||||
}
|
||||
|
||||
foreach (HorseInstance inst in HorsesOffered) // Transfer Horses
|
||||
{
|
||||
inst.Owner = OtherTrade.Trader.Id;
|
||||
Trader.HorseInventory.DeleteHorse(inst, false);
|
||||
OtherTrade.Trader.HorseInventory.AddHorse(inst, false);
|
||||
}
|
||||
|
||||
foreach (ItemInstance[] item in ItemsOffered) // Transfer Items
|
||||
{
|
||||
foreach (ItemInstance itm in item)
|
||||
{
|
||||
Trader.Inventory.Remove(itm);
|
||||
OtherTrade.Trader.Inventory.Add(itm);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Trader.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Trading).Count++;
|
||||
|
||||
|
||||
if (Trader.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Trading).Count >= 100)
|
||||
Trader.Awards.AddAward(Award.GetAwardById(29)); // Trader
|
||||
if (Trader.TrackedItems.GetTrackedItem(Tracking.TrackableItem.Trading).Count >= 1000)
|
||||
Trader.Awards.AddAward(Award.GetAwardById(50)); // Pro Trader
|
||||
|
||||
endTrade();
|
||||
return;
|
||||
|
||||
cancelTrade:;
|
||||
byte[] tradeCanceled = PacketBuilder.CreateChat(Messages.TradeCanceledInterupted, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
Trader.LoggedinClient.SendPacket(tradeCanceled);
|
||||
endTrade();
|
||||
return;
|
||||
|
||||
}
|
||||
public void AcceptTrade()
|
||||
{
|
||||
byte[] waitingForAccept = PacketBuilder.CreateChat(Messages.TradeWaitingForOthersToAcceptMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
Trader.LoggedinClient.SendPacket(waitingForAccept);
|
||||
|
||||
if (OtherTrade.Stage == "ACCEPTED")
|
||||
{
|
||||
CompleteTrade();
|
||||
OtherTrade.CompleteTrade();
|
||||
}
|
||||
|
||||
Stage = "ACCEPTED";
|
||||
}
|
||||
public void CancelTrade()
|
||||
{
|
||||
byte[] tradeCanceled = PacketBuilder.CreateChat(Messages.TradeCanceledByYouMessage, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
|
|
|
@ -885,6 +885,9 @@ namespace HISP.Server
|
|||
Messages.TradeYouCantHandleMoreHorses = gameData.messages.meta.player_interaction.trade.cant_handle_more_horses;
|
||||
Messages.TradeOtherPlayerCantHandleMoreHorsesFormat = gameData.messages.meta.player_interaction.trade.other_player_cant_handle_more_horses;
|
||||
|
||||
Messages.TradeOtherCantCarryMoreItems = gameData.messages.meta.player_interaction.trade.other_carry_more;
|
||||
Messages.TradeYouCantCarryMoreItems = gameData.messages.meta.player_interaction.trade.you_cant_carry_more;
|
||||
|
||||
Messages.TradeYouSpentMoneyMessageFormat = gameData.messages.meta.player_interaction.trade.trade_spent;
|
||||
Messages.TradeYouReceivedMoneyMessageFormat = gameData.messages.meta.player_interaction.trade.trade_received;
|
||||
|
||||
|
|
|
@ -207,6 +207,10 @@ namespace HISP.Server
|
|||
if (sender.LoggedinUser.TradingWith != null)
|
||||
sender.LoggedinUser.TradingWith.CancelTrade();
|
||||
break;
|
||||
case PacketBuilder.PLAYER_INTERACTION_ACCEPT:
|
||||
if (sender.LoggedinUser.TradingWith != null)
|
||||
sender.LoggedinUser.TradingWith.AcceptTrade();
|
||||
break;
|
||||
case PacketBuilder.PLAYER_INTERACTION_ADD_ITEM:
|
||||
if (sender.LoggedinUser.TradingWith == null)
|
||||
break;
|
||||
|
@ -228,6 +232,7 @@ namespace HISP.Server
|
|||
}
|
||||
|
||||
sender.LoggedinUser.TradeMenuPriority = true;
|
||||
sender.LoggedinUser.AttemptingToOfferItem = -1;
|
||||
byte[] metaPacket = PacketBuilder.CreateMetaPacket(Meta.BuildTradeAddMoney(sender.LoggedinUser.TradingWith.MoneyOffered));
|
||||
sender.SendPacket(metaPacket);
|
||||
|
||||
|
@ -252,8 +257,8 @@ namespace HISP.Server
|
|||
sender.LoggedinUser.TradingWith.HorsesOffered.Add(horse);
|
||||
|
||||
UpdateArea(sender);
|
||||
if(!sender.LoggedinUser.TradingWith.Trader.TradeMenuPriority)
|
||||
UpdateArea(sender.LoggedinUser.TradingWith.Trader.LoggedinClient);
|
||||
if (!sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority)
|
||||
UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient);
|
||||
|
||||
break;
|
||||
case '1': // Item
|
||||
|
@ -1879,10 +1884,40 @@ namespace HISP.Server
|
|||
|
||||
}
|
||||
break;
|
||||
case 3: // Add Item to Trade
|
||||
case 3: // Add Item or Money to Trade
|
||||
{
|
||||
if (dynamicInput.Length >= 2)
|
||||
{
|
||||
if(sender.LoggedinUser.AttemptingToOfferItem == -1) // Money
|
||||
{
|
||||
string answer = dynamicInput[1];
|
||||
int amountMoney = -1;
|
||||
try
|
||||
{
|
||||
amountMoney = int.Parse(answer);
|
||||
}
|
||||
catch (FormatException)
|
||||
{
|
||||
Logger.ErrorPrint(sender.LoggedinUser.Username + " Tried to send a invalid dynamic input (Money TRADE, amount is NaN)");
|
||||
}
|
||||
|
||||
if(sender.LoggedinUser.Money <= amountMoney)
|
||||
{
|
||||
byte[] tooMuchMoney = PacketBuilder.CreateChat(Messages.TradeMoneyOfferTooMuch, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(tooMuchMoney);
|
||||
break;
|
||||
}
|
||||
|
||||
sender.LoggedinUser.TradingWith.MoneyOffered = amountMoney;
|
||||
|
||||
UpdateArea(sender);
|
||||
if (!sender.LoggedinUser.TradingWith.OtherTrade.Trader.TradeMenuPriority)
|
||||
UpdateArea(sender.LoggedinUser.TradingWith.OtherTrade.Trader.LoggedinClient);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (Item.ItemIdExist(sender.LoggedinUser.AttemptingToOfferItem))
|
||||
{
|
||||
string answer = dynamicInput[1];
|
||||
|
@ -2731,6 +2766,12 @@ namespace HISP.Server
|
|||
sender.SendPacket(soldHorseMessage);
|
||||
|
||||
sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorsePawn).Count++;
|
||||
if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorsePawn).Count >= 100)
|
||||
sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(44)); // Vendor
|
||||
if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorsePawn).Count >= 1000)
|
||||
sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(45)); // Pro Vendor
|
||||
if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.HorsePawn).Count >= 10000)
|
||||
sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(52)); // Top Vendor
|
||||
|
||||
UpdateArea(sender);
|
||||
|
||||
|
@ -3400,6 +3441,16 @@ namespace HISP.Server
|
|||
break;
|
||||
}
|
||||
sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WishingWell).Count++;
|
||||
|
||||
if(sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WishingWell).Count >= 100)
|
||||
sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(30)); // Well Wisher
|
||||
|
||||
if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WishingWell).Count >= 1000)
|
||||
sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(31)); // Star Wisher
|
||||
|
||||
if (sender.LoggedinUser.TrackedItems.GetTrackedItem(Tracking.TrackableItem.WishingWell).Count >= 10000)
|
||||
sender.LoggedinUser.Awards.AddAward(Award.GetAwardById(51)); // Extraordanary Wisher
|
||||
|
||||
byte[] msg = PacketBuilder.CreateChat(message, PacketBuilder.CHAT_BOTTOM_RIGHT);
|
||||
sender.SendPacket(msg);
|
||||
|
||||
|
|
|
@ -54,6 +54,7 @@ namespace HISP.Server
|
|||
|
||||
public const byte PLAYER_INTERACTION_TRADE = 0x28;
|
||||
public const byte PLAYER_INTERACTION_ADD_ITEM = 0x29;
|
||||
public const byte PLAYER_INTERACTION_ACCEPT = 0x2A;
|
||||
public const byte PLAYER_INTERACTION_TRADE_REJECT = 0x2B;
|
||||
|
||||
public const byte AUCTION_BID_100 = 0x29;
|
||||
|
|
Loading…
Add table
Reference in a new issue