public void CompleteTrade() { /* * Money Checks */ // Check if other player has no money if (MoneyOffered > 0 && OtherTrade.Trader.Money < 0) { byte[] otherNegativeMoneyNotAllowed = PacketBuilder.CreateChat(Messages.TradeOtherPlayerHasNegativeMoney, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.LoggedinClient.SendPacket(otherNegativeMoneyNotAllowed); Fail = true; OtherTrade.Fail = true; } // Check if current player has no money if (OtherTrade.MoneyOffered > 0 && Trader.Money < 0) { byte[] negativeMoneyNotAllowed = PacketBuilder.CreateChat(Messages.TradeYouHaveNegativeMoney, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.LoggedinClient.SendPacket(negativeMoneyNotAllowed); Fail = true; OtherTrade.Fail = true; } // Check if other player has any bids if (OtherTrade.Trader.Bids.Length > 0) { byte[] tradeNotAllowedWhileOtherBidding = PacketBuilder.CreateChat(Messages.TradeNotAllowedWhileOtherBidding, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.LoggedinClient.SendPacket(tradeNotAllowedWhileOtherBidding); Fail = true; OtherTrade.Fail = true; } // check if current player has bids' if (Trader.Bids.Length > 0) { byte[] tradeNotAllowedWhileBidding = PacketBuilder.CreateChat(Messages.TradeNotAllowedWhileBidding, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.LoggedinClient.SendPacket(tradeNotAllowedWhileBidding); Fail = true; OtherTrade.Fail = true; } // Check if other player has max money if (MoneyOffered > 0 && OtherTrade.Trader.Money + MoneyOffered > 2100000000) { byte[] tradeOtherHasTooMuchMoney = PacketBuilder.CreateChat(Messages.TradeWillGiveOtherTooMuchMoney, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.LoggedinClient.SendPacket(tradeOtherHasTooMuchMoney); Fail = true; OtherTrade.Fail = true; } // Check if you have no money if (OtherTrade.MoneyOffered > 0 && Trader.Money + OtherTrade.MoneyOffered > 2100000000) { byte[] tradeYouHasTooMuchMoney = PacketBuilder.CreateChat(Messages.TradeWillGiveYouTooMuchMoney, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.LoggedinClient.SendPacket(tradeYouHasTooMuchMoney); Fail = true; OtherTrade.Fail = true; } /* * Horse Checks */ // Check if other player has max horses if (HorsesOffered.Length > 0 && OtherTrade.Trader.HorseInventory.HorseList.Length + HorsesOffered.Length > OtherTrade.Trader.MaxHorses) { byte[] tradeYouHaveTooManyHorses = PacketBuilder.CreateChat(Messages.TradeYouCantHandleMoreHorses, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.LoggedinClient.SendPacket(tradeYouHaveTooManyHorses); Fail = true; OtherTrade.Fail = true; } // Check if current player has max horses if (OtherTrade.HorsesOffered.Length > 0 && Trader.HorseInventory.HorseList.Length + OtherTrade.HorsesOffered.Length > Trader.MaxHorses) { byte[] tradeYouHaveTooManyHorses = PacketBuilder.CreateChat(Messages.TradeYouCantHandleMoreHorses, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.LoggedinClient.SendPacket(tradeYouHaveTooManyHorses); Fail = true; OtherTrade.Fail = true; } /* * Item Checks */ if (OtherTrade.ItemsOffered.Length > 0) { foreach (ItemInstance[] inst in OtherTrade.ItemsOffered) { if (Trader.Inventory.HasItemId(inst[0].ItemId)) { InventoryItem items = Trader.Inventory.GetItemByItemId(inst[0].ItemId); if (items.ItemInstances.Length + inst.Length > Item.MAX_STACK) { byte[] tradeTooManyItems = PacketBuilder.CreateChat(Messages.TradeYouCantCarryMoreItems, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.LoggedinClient.SendPacket(tradeTooManyItems); Fail = true; OtherTrade.Fail = true; } } } } if (ItemsOffered.Length > 0) { 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.Length + inst.Length > Item.MAX_STACK) { byte[] tradeTooManyItems = PacketBuilder.CreateChat(Messages.TradeOtherCantCarryMoreItems, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.LoggedinClient.SendPacket(tradeTooManyItems); Fail = true; OtherTrade.Fail = true; } } } } if (this.Fail) { goto cancelTrade; } else { goto acceptTrade; } acceptTrade :; byte[] tradeAccepted = PacketBuilder.CreateChat(Messages.TradeAcceptedMessage, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.LoggedinClient.SendPacket(tradeAccepted); // Transfer Money if (MoneyOffered > 0) { Trader.TakeMoney(MoneyOffered); byte[] tradeSpentMoney = PacketBuilder.CreateChat(Messages.FormatTradeYouSpent(MoneyOffered), PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.LoggedinClient.SendPacket(tradeSpentMoney); } if (OtherTrade.MoneyOffered > 0) { Trader.AddMoney(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; // Dismount horse if its traded if (Trader.CurrentlyRidingHorse != null) { if (Trader.CurrentlyRidingHorse.RandomId == inst.RandomId) { byte[] disMounted = PacketBuilder.CreateChat(Messages.TradeRiddenHorse, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.Facing %= 5; Trader.CurrentlyRidingHorse = null; Trader.LoggedinClient.SendPacket(disMounted); } } 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.AddIgnoringFull(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 :; InteruptTrade(); return; }
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; // Dismount horse if its traded if (Trader.CurrentlyRidingHorse != null) { if (Trader.CurrentlyRidingHorse.RandomId == inst.RandomId) { byte[] disMounted = PacketBuilder.CreateChat(Messages.TradeRiddenHorse, PacketBuilder.CHAT_BOTTOM_RIGHT); Trader.Facing %= 5; Trader.CurrentlyRidingHorse = null; Trader.LoggedinClient.SendPacket(disMounted); } } 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 :; InteruptTrade(); return; }
public User(GameClient baseClient, int UserId) { if (!Database.CheckUserExist(UserId)) { throw new KeyNotFoundException("User " + UserId + " not found in database!"); } if (!Database.CheckUserExtExists(UserId)) { Database.CreateUserExt(UserId); NewPlayer = true; } EquipedCompetitionGear = new CompetitionGear(UserId); EquipedJewelry = new Jewelry(UserId); Id = UserId; Username = Database.GetUsername(UserId); Administrator = Database.CheckUserIsAdmin(Username); Moderator = Database.CheckUserIsModerator(Username); chatViolations = Database.GetChatViolations(UserId); x = Database.GetPlayerX(UserId); y = Database.GetPlayerY(UserId); charId = Database.GetPlayerCharId(UserId); Facing = PacketBuilder.DIRECTION_DOWN; experience = Database.GetExperience(UserId); money = Database.GetPlayerMoney(UserId); bankMoney = Database.GetPlayerBankMoney(UserId); questPoints = Database.GetPlayerQuestPoints(UserId); subscribed = Database.IsUserSubscribed(UserId); subscribedUntil = Database.GetUserSubscriptionExpireDate(UserId); profilePage = Database.GetPlayerProfile(UserId); privateNotes = Database.GetPlayerNotes(UserId); hunger = Database.GetPlayerHunger(UserId); thirst = Database.GetPlayerThirst(UserId); tired = Database.GetPlayerTiredness(UserId); if (Ranch.IsRanchOwned(this.Id)) { if (this.Subscribed) { OwnedRanch = Ranch.GetRanchOwnedBy(this.Id); } else // idk what it does here ... { OwnedRanch = null; Ranch.GetRanchOwnedBy(this.Id).OwnerId = -1; } } Gender = Database.GetGender(UserId); MailBox = new Mailbox(this); Highscores = new Highscore(this); Awards = new Award(this); MutePlayer = new MutedPlayers(this); TrackedItems = new Tracking(this); HorseInventory = new HorseInventory(this); // Generate SecCodes SecCodeSeeds[0] = (byte)GameServer.RandomNumberGenerator.Next(40, 60); SecCodeSeeds[1] = (byte)GameServer.RandomNumberGenerator.Next(40, 60); SecCodeSeeds[2] = (byte)GameServer.RandomNumberGenerator.Next(40, 60); SecCodeInc = (byte)GameServer.RandomNumberGenerator.Next(40, 60); Friends = new Friends(this); LoginTime = DateTime.UtcNow; LoggedinClient = baseClient; Inventory = new PlayerInventory(this); Quests = new PlayerQuests(this); // Get auctions foreach (Auction auction in Auction.AuctionRooms) { foreach (Auction.AuctionEntry auctionEntry in auction.AuctionEntries) { if (auctionEntry.HighestBidder == this.Id) { Auction.AuctionBid bid = new Auction.AuctionBid(); bid.BidUser = this; bid.BidAmount = auctionEntry.HighestBid; bid.AuctionItem = auctionEntry; if (bid.BidAmount > 0) { Bids.Add(bid); auctionEntry.Bidders.Add(bid); } } } } }