public static void HandleTrashTokens(TrashProfile p, TrashToken t)
 {
     if (p != null && p.Owner != null && p.Owner is PlayerMobile)
     {
         CheckProgress<ItemConquest>((PlayerMobile) p.Owner, t);
     }
 }
示例#2
0
        public bool TransferTokens(Mobile source, Item trashed, int amount, bool message = true)
        {
            if (Deleted || Owner == null || Owner.Deleted)
            {
                return(false);
            }

            if (source == null)
            {
                source = Owner;
            }

            var limitReached = false;
            var total        = GetTokenTotal(DateTime.UtcNow);

            if (TrashCollection.CMOptions.DailyLimit > 0)
            {
                if (total >= TrashCollection.CMOptions.DailyLimit)
                {
                    limitReached = true;
                    amount       = 0;
                }
                else if (total + amount > TrashCollection.CMOptions.DailyLimit)
                {
                    limitReached = true;
                    amount       = (total + amount) - TrashCollection.CMOptions.DailyLimit;
                }
            }

            if (amount > 0)
            {
                var token = new TrashToken(amount);
                var name  = token.ResolveName(Owner.GetLanguage());

                if (Owner.Backpack.TryDropItem(Owner, token, true))
                {
                    if (message)
                    {
                        Owner.SendMessage(
                            0x55,
                            "{0}{1}{2} {3} been placed in your backpack.",
                            !name.StartsWith("a") && amount == 1 ? "a " : String.Empty,
                            name,
                            !name.EndsWith("s") && amount > 1 ? "s" : String.Empty,
                            amount > 1 ? "have" : "has");
                    }
                }
                else if (Owner.BankBox.TryDropItem(Owner, token, true))
                {
                    if (message)
                    {
                        Owner.SendMessage(
                            0x55,
                            "{0}{1}{2} {3} been placed in your bank.",
                            !name.StartsWith("a") && amount == 1 ? "a " : String.Empty,
                            name,
                            !name.EndsWith("s") && amount > 1 ? "s" : String.Empty,
                            amount > 1 ? "have" : "has");
                    }
                }
                else
                {
                    if (Owner.NetState == null && Owner is PlayerMobile)
                    {
                        token.MoveToWorld(Owner.LogoutLocation, Owner.LogoutMap);
                    }
                    else
                    {
                        token.MoveToWorld(Owner.Location, Owner.Map);
                    }

                    if (message)
                    {
                        Owner.SendMessage(
                            0x55,
                            "{0}{1}{2} {3} been placed at your feet.",
                            !name.StartsWith("a") && amount == 1 ? "a " : String.Empty,
                            name,
                            !name.EndsWith("s") && amount > 1 ? "s" : String.Empty,
                            amount > 1 ? "have" : "has");
                    }
                }

                if (TokensReceived != null)
                {
                    TokensReceived.Invoke(this, token);
                }
            }
            else
            {
                if (message)
                {
                    Owner.SendMessage(0x22, "You didn't receive any tokens this time.");
                }

                return(false);
            }

            if (limitReached && message)
            {
                Owner.SendMessage(
                    0x22,
                    "You have reached your daily trash token limit of {0:#,0}.",
                    TrashCollection.CMOptions.DailyLimit);
            }

            RegisterTokens(source, trashed, amount);
            return(true);
        }
示例#3
0
		public bool TransferTokens(Mobile source, Item trashed, int amount, bool message = true)
		{
			if (Deleted || Owner == null || Owner.Deleted)
			{
				return false;
			}

			if (source == null)
			{
				source = Owner;
			}

			var limitReached = false;
			var total = GetTokenTotal(DateTime.UtcNow);

			if (TrashCollection.CMOptions.DailyLimit > 0)
			{
				if (total >= TrashCollection.CMOptions.DailyLimit)
				{
					limitReached = true;
					amount = 0;
				}
				else if (total + amount > TrashCollection.CMOptions.DailyLimit)
				{
					limitReached = true;
					amount = (total + amount) - TrashCollection.CMOptions.DailyLimit;
				}
			}

			if (amount > 0)
			{
				var token = new TrashToken(amount);
				var name = token.ResolveName(Owner.GetLanguage());

				if (Owner.Backpack.TryDropItem(Owner, token, true))
				{
					if (message)
					{
						Owner.SendMessage(
							0x55,
							"{0}{1}{2} {3} been placed in your backpack.",
							!name.StartsWith("a") && amount == 1 ? "a " : String.Empty,
							name,
							!name.EndsWith("s") && amount > 1 ? "s" : String.Empty,
							amount > 1 ? "have" : "has");
					}
				}
				else if (Owner.BankBox.TryDropItem(Owner, token, true))
				{
					if (message)
					{
						Owner.SendMessage(
							0x55,
							"{0}{1}{2} {3} been placed in your bank.",
							!name.StartsWith("a") && amount == 1 ? "a " : String.Empty,
							name,
							!name.EndsWith("s") && amount > 1 ? "s" : String.Empty,
							amount > 1 ? "have" : "has");
					}
				}
				else
				{
					if (Owner.NetState == null && Owner is PlayerMobile)
					{
						token.MoveToWorld(Owner.LogoutLocation, Owner.LogoutMap);
					}
					else
					{
						token.MoveToWorld(Owner.Location, Owner.Map);
					}

					if (message)
					{
						Owner.SendMessage(
							0x55,
							"{0}{1}{2} {3} been placed at your feet.",
							!name.StartsWith("a") && amount == 1 ? "a " : String.Empty,
							name,
							!name.EndsWith("s") && amount > 1 ? "s" : String.Empty,
							amount > 1 ? "have" : "has");
					}
				}

				if (TokensReceived != null)
				{
					TokensReceived.Invoke(this, token);
				}
			}
			else
			{
				if (message)
				{
					Owner.SendMessage(0x22, "You didn't receive any tokens this time.");
				}

				return false;
			}

			if (limitReached && message)
			{
				Owner.SendMessage(
					0x22,
					"You have reached your daily trash token limit of {0:#,0}.",
					TrashCollection.CMOptions.DailyLimit);
			}

			RegisterTokens(source, trashed, amount);
			return true;
		}