/// <summary> /// Writes a donation to the packet. /// </summary> /// <param name="donation">The donation.</param> public void WriteDonation(Models.Nobility.NobilityDonation donation) { WriteUInt32(donation.ClientId); WriteUInt32(0); // unknown WriteUInt32(donation.Player != null ? donation.Player.Mesh : (uint)0); WriteStringWithReminder(donation.Name, 16); WriteUInt32(0); // unknown ... padding ?? WriteInt64(donation.Donation); WriteUInt32((uint)donation.Rank); WriteInt32(donation.Ranking); }
/// <summary> /// Handles the donation- /// </summary> /// <param name="player">The player.</param> /// <param name="amount">The amount.</param> /// <param name="isMoney">Boolean determining if it's a silver donation or not. If set to false it will be a cps donation.</param> /// <returns>True if the packet was handled correctly.</returns> private static bool Handle(Models.Entities.Player player, long amount, bool isMoney) { uint requiredAmount = (uint)(isMoney ? amount : (amount / 50000)); if (isMoney && player.Money < requiredAmount || !isMoney && player.CPs < requiredAmount || amount < 3000000 || amount > 999999999) { return(true); } player.AddActionLog("NobilityDonate" + (isMoney ? "Silver" : "CPs"), requiredAmount); var donation = player.Nobility; if (donation == null) { donation = new Models.Nobility.NobilityDonation(new Database.Models.DbPlayerNobility()); donation.Player = player; player.Nobility = donation; Collections.NobilityBoard.TryAdd(donation); } if (isMoney) { player.Money -= requiredAmount; } else { player.CPs -= requiredAmount; } amount = (uint)Math.Min(Data.Constants.GameMode.MaxNobilityDonation, (donation.Donation + amount)); donation.Donation = amount; Collections.NobilityBoard.GetTop50(); player.UpdateClientNobility(); return(true); }