Exemple #1
0
        private static void Shoot(PlayerMobile from, Mobile target, INinjaWeapon weapon)
        {
            if (from != target && CanUseWeapon(from, weapon) && from.CanBeHarmful(target))
            {
                if (weapon.WeaponMinRange == 0 || !from.InRange(target, weapon.WeaponMinRange))
                {
                    from.NinjaWepCooldown = true;

                    from.Direction = from.GetDirectionTo(target);

                    from.RevealingAction();

                    weapon.AttackAnimation(from, target);

                    ConsumeUse(weapon);

                    if (CombatCheck(from, target))
                    {
                        Timer.DelayCall(TimeSpan.FromSeconds(1.0), new TimerStateCallback<object[]>(OnHit), new object[] { from, target, weapon });
                    }

                    Timer.DelayCall(TimeSpan.FromSeconds(2.5), new TimerStateCallback<PlayerMobile>(ResetUsing), from);
                }
                else
                {
                    from.SendLocalizedMessage(1063303); // Your target is too close!
                }
            }
        }
		public static void Resurrect( PlayerMobile m, AnkhOfSacrificeAddon ankh )
		{
			if ( m == null )
			{
			}
			else if ( !m.InRange( ankh.GetWorldLocation(), 2 ) )
			{
				m.SendLocalizedMessage( 500446 ); // That is too far away.
			}
			else if ( m.Alive )
			{
				m.SendLocalizedMessage( 1060197 ); // You are not dead, and thus cannot be resurrected!
			}
			else if ( m.AnkhNextUse > DateTime.UtcNow )
			{			
				TimeSpan delay = m.AnkhNextUse - DateTime.UtcNow;

				if ( delay.TotalMinutes > 0 )
					m.SendLocalizedMessage( 1079265, Math.Round( delay.TotalMinutes ).ToString() ); // You must wait ~1_minutes~ minutes before you can use this item.
				else
					m.SendLocalizedMessage( 1079263, Math.Round( delay.TotalSeconds ).ToString() ); // You must wait ~1_seconds~ seconds before you can use this item.		
			}
			else
			{
				m.CloseGump( typeof( AnkhResurrectGump ) );
				m.SendGump( new AnkhResurrectGump( m, ResurrectMessage.VirtueShrine ) );
			}
		}
		public static void Resurrect( PlayerMobile m, AnkhOfSacrificeAddon ankh )
		{
			BaseHouse ankhhouse = BaseHouse.FindHouseAt( ankh );

			if ( m != null && ankhhouse != null && ankhhouse.IsFriend( m ) )
			{
				if ( !m.InRange( ankh.GetWorldLocation(), 2 ) )
					m.SendLocalizedMessage( 500446 ); // That is too far away.
				else if ( m.Alive )
					m.SendLocalizedMessage( 1060197 ); // You are not dead, and thus cannot be resurrected!
				else if ( m.AnkhNextUse > DateTime.UtcNow )
				{
					TimeSpan delay = m.AnkhNextUse - DateTime.UtcNow;

					if ( delay.TotalMinutes > 0 )
						m.SendLocalizedMessage( 1079265, Math.Round( delay.TotalMinutes ).ToString() ); // You must wait ~1_minutes~ minutes before you can use this item.
					else
						m.SendLocalizedMessage( 1079263, Math.Round( delay.TotalSeconds ).ToString() ); // You must wait ~1_seconds~ seconds before you can use this item.
				}
				else
				{
					m.CloseGump( typeof( AnkhResurrectGump ) );
					/*PlayerMobile pres = m as PlayerMobile;

					if (pres.MurderBounty > 0)
						m.SendGump( new ResurrectGump( m, m, pres.MurderBounty ) );
					else*/
						m.SendGump( new AnkhResurrectGump( m, ResurrectMessage.VirtueShrine ) );
				}
			}
		}
        public override void OnMovement(Mobile m, Point3D oldLocation)
        {
            PlayerMobile m_from = m as PlayerMobile;

            if (Multis.DesignContext.Check(m))
            {
                if (m_from == null)
                {
                    return;
                }
            }

            if (m_from.InRange(this, 2))
            {
                this.BoltEffect(0);
                m_from.SendMessage("Thy have disturbed my slumber, thy shall pay with thy life!");
                m_from.PlaySound(41);
                this.Delete();
                SpawnDaemon(m_from);
            }
        }
        public override void HandleButtonResponse(NetState sender, int adjustedButton, ImageTileButtonInfo buttonInfo)
        {
            PlayerMobile pm = sender.Mobile as PlayerMobile;

            Item item = ((ItemTileButtonInfo)buttonInfo).Item;

            if (!(pm != null && item.IsChildOf(pm.Backpack) && pm.InRange(m_Collector.Location, 7)))
            {
                return;
            }

            m_Collector.AwardPoints(pm, item, m_Collector.TurnInPoints);

            item.Delete();

            IEnumerable <ItemTileButtonInfo> buttons = m_Collector.FindRedeemableItems(pm);

            if (buttons != null && buttons.Count() > 0)
            {
                pm.SendGump(new TurnInGump(m_Collector, buttons));
            }
        }
Exemple #6
0
        public static void HandleTerror( PlayerMobile m )
        {
            if( m.Feats.GetFeatLevel( FeatList.Terror ) < 1 )
            {
                m.SendMessage( "You need the first level of Terror to use this ability." );
                return;
            }

            if( m.Combatant != null && m.InRange( m.Combatant.Location, 6 ) )
                TerrorTarget.TryTerror( m, m.Combatant );

            else
                m.Target = new TerrorTarget();
        }
Exemple #7
0
		// Unused...was it meant to do anything?!
		/*public static Hashtable VisitSectorList = new Hashtable();

		public static void RegisterMove(PlayerMobile m_player)
		{

			if (m_player == null || m_player.Map == null) return;

			// check for any attachments that might support the OnMove method
			//XmlAttach.CheckOnMove(m_player);

			// check to see if the current sector that the player is in, is registered in the VISIT sector list
			Sector newSector = m_player.Map.GetSector(m_player.Location);

			if (VisitSectorList != null && VisitSectorList.Contains(newSector))
			{
				// check to see if the player has a quest with a VISIT type objective
				if (m_player.GetFlag(CarriedXmlQuestFlag))
				{
					CheckVisited(m_player);
				}
			}
		}*/

		public static bool CheckVisitObjective(IXmlQuest quest, PlayerMobile m_player, string objectivestr, string statestr, out string newstatestr, out bool visitstatus)
		{
			newstatestr = statestr;
			visitstatus = false;

			if (objectivestr == null) return false;

			// format for the objective string will be VISIT,x,y,range[,duration]
			string[] arglist = BaseXmlSpawner.ParseString(objectivestr, 5, ",");

			bool found = false;

			int targetcount = 1;

			string status_str = null;

			if (status_str != null) quest.Status = status_str;

			if (arglist.Length > 3)
			{
				// escort task objective
				if (arglist[0] == "VISIT")
				{

					double duration = 0; // duration in minutes

					// get the coords
					int x = 0;
					if(!int.TryParse(arglist[1], out x))
						status_str = "invalid VISIT x";

					int y = 0;
					if(!int.TryParse(arglist[2], out y))
						status_str = "invalid VISIT y";

					int range = 0;
					if(!int.TryParse(arglist[3], out range))
						status_str = "invalid VISIT range";

					if (arglist.Length > 4)
					{
						if(!double.TryParse(arglist[4], NumberStyles.Any, CultureInfo.InvariantCulture, out duration))
							status_str = "invalid VISIT duration";
					}

					// check them against the players current location

					if (m_player != null && m_player.InRange(new Point2D(x, y), range))
					{
						if (duration > 0)
						{
							// is there already a timer started on the quest object?
						}
						else
						{
							found = true;
						}
						// if it is in range, then start the timer
					}
				}
			}

			// update the objective state
			if (found)
			{
				// get the current visitation count and update it
				int current = 0;
				int.TryParse(statestr, out current);

				int visited = current + 1;

				newstatestr = String.Format("{0}", visited);

				if (visited >= targetcount)
				{
					// visitation completed
					visitstatus = true; ;
				}
				return true;
			}
			else
				// not a visitation task
				return false;
		}
		private bool ValidatePet( Mobile pet, PlayerMobile messageReciever, RequestType type )
		{
			if ( pet != null && pet is BaseCreature && !pet.Deleted )
			{
				BaseCreature bc = pet as BaseCreature;

				if ( bc.IsStabled )
				{
					this.SayTo( messageReciever, "That creature is in your stables. If you wish to see it, talk to your stablemaster." );
					return false;
				}

				switch(type)
				{
					case RequestType.Spirit:
					{
						if ( !bc.IsBonded)
						{
							this.SayTo( messageReciever, "You have not bonded with that pet, and so I cannot reach it's spirit through you." );
							return false;
						}

						else if ( messageReciever.InRange( bc, 12 ) )
						{
							this.SayTo( messageReciever, "Your pet is not far from here, you do not require my assistance." );
							return false;
						}
						break;
					}
					case RequestType.Locate:
					{
						if ( messageReciever.InRange( bc, 12 ) )
						{
							this.SayTo( messageReciever, "Your pet is not far from here, you do not require my assistance." );
							return false;
                        }
						break;
					}
					case RequestType.Bond:
					{
						if(bc.IsBonded)
						{
							this.SayTo( messageReciever, "Your pet is bonded too you already for all time, you do not require my assistance." );
							return false;
						}
						else if ( !messageReciever.InRange( bc, 6 ) )
						{
							this.SayTo( messageReciever, "Your pet is too far away from here, and the bonding process can not begin." );
							return false;
						}
						else if(bc.BondingBegin != DateTime.MinValue)
						{
							this.SayTo( messageReciever, "The bonding of {0}'s spirit has already begun, you must now wait some time for it to complete.", bc.Name.ToString());
							return false;
						}
						else if(bc.MinTameSkill >= 29.1 && messageReciever.Skills[SkillName.AnimalTaming].Value < bc.MinTameSkill)
						{
							this.SayTo( messageReciever, "Your connection and control over your pet is too weak, and you may not bond with it.");
							return false;
						}
						break;
					}
					case RequestType.Release:
					{
						if ( messageReciever.InRange( bc, 12 ) )
						{
							this.SayTo( messageReciever, "Your pet is not far from here, you do not require my assistance." );
							return false;
						}

						break;
					}
				}

				if ( GetSpiritPrice(bc) == -1 )
					return false;

				return true;
			}
			else
				this.SayTo( messageReciever, "You have no pets by that name." );

			return false;
		}
        public void TryToWithdraw( PlayerMobile m )
        {
            if( !IsGuildMember(m, this, true) || !HasTreasury(m, true) )
                return;

            if( m.CustomGuilds[this].Balance < 1 )
            {
                m.SendMessage( "You currently have no funds to withdraw." );
                return;
            }

            if( !m.InRange(this, 3) )
            {
                m.SendMessage( "You need to be near your organization's stone in order to do that." );
                return;
            }

            int amount = 0;
            ArrayList list = new ArrayList();

            foreach( Item item in Treasury.Items )
            {
                if( item is Copper )
                {
                    amount += item.Amount;
                    list.Add( item );
                }
            }

            for( int i = 0; i < list.Count; i++ )
            {
                Item item = list[i] as Item;
                item.Delete();
            }

            if( amount == 0 )
            {
                m.SendMessage( "Your organization currently has no funds." );
                return;
            }

            if( amount < m.CustomGuilds[this].Balance )
            {
                m.SendMessage( "You withdraw every single coin available, but it is still not enough." );
                m.Backpack.DropItem( new Copper(amount) );
                m.CustomGuilds[this].Balance -= amount;
            }

            else
            {
                m.SendMessage( "You withdraw all the copper you are entitled to." );
                m.Backpack.DropItem( new Copper(m.CustomGuilds[this].Balance) );
                amount -= m.CustomGuilds[this].Balance;
                m.CustomGuilds[this].Balance = 0;

                if( amount > 0 )
                    Treasury.DropItem( new Copper(amount) );
            }
        }
Exemple #10
0
        private bool ValidatePet(Mobile pet, PlayerMobile messageReciever, RequestType type)
        {
            if (pet != null && pet is BaseCreature && !pet.Deleted)
            {
                BaseCreature bc = pet as BaseCreature;

                if (bc.IsStabled)
                {
                    this.SayTo(messageReciever, "That creature is in your stables. If you wish to see it, talk to your stablemaster.");
                    return(false);
                }

                switch (type)
                {
                case RequestType.Spirit:
                {
                    if (!bc.IsBonded)
                    {
                        this.SayTo(messageReciever, "You have not bonded with that pet, and so I cannot reach it's spirit through you.");
                        return(false);
                    }

                    else if (messageReciever.InRange(bc, 12))
                    {
                        this.SayTo(messageReciever, "Your pet is not far from here, you do not require my assistance.");
                        return(false);
                    }
                    break;
                }

                case RequestType.Locate:
                {
                    if (messageReciever.InRange(bc, 12))
                    {
                        this.SayTo(messageReciever, "Your pet is not far from here, you do not require my assistance.");
                        return(false);
                    }
                    break;
                }

                case RequestType.Bond:
                {
                    if (bc.IsBonded)
                    {
                        this.SayTo(messageReciever, "Your pet is bonded too you already for all time, you do not require my assistance.");
                        return(false);
                    }
                    else if (!messageReciever.InRange(bc, 6))
                    {
                        this.SayTo(messageReciever, "Your pet is too far away from here, and the bonding process can not begin.");
                        return(false);
                    }
                    else if (bc.BondingBegin != DateTime.MinValue)
                    {
                        this.SayTo(messageReciever, "The bonding of {0}'s spirit has already begun, you must now wait some time for it to complete.", bc.Name.ToString());
                        return(false);
                    }
                    else if (bc.MinTameSkill >= 29.1 && messageReciever.Skills[SkillName.AnimalTaming].Value < bc.MinTameSkill)
                    {
                        this.SayTo(messageReciever, "Your connection and control over your pet is too weak, and you may not bond with it.");
                        return(false);
                    }
                    break;
                }

                case RequestType.Release:
                {
                    if (messageReciever.InRange(bc, 12))
                    {
                        this.SayTo(messageReciever, "Your pet is not far from here, you do not require my assistance.");
                        return(false);
                    }

                    break;
                }
                }

                if (GetSpiritPrice(bc) == -1)
                {
                    return(false);
                }

                return(true);
            }
            else
            {
                this.SayTo(messageReciever, "You have no pets by that name.");
            }

            return(false);
        }
Exemple #11
0
		private static bool ValidatePet( Mobile pet, PlayerMobile messageReciever )
		{
			if ( pet != null && pet is BaseCreature && !pet.Deleted )
			{
				BaseCreature bc = pet as BaseCreature;

				if ( bc.IsStabled )
				{
					messageReciever.SendMessage( "That creature is in your stables." );
					return false;
				}
				else if ( !bc.IsBonded )
				{
					messageReciever.SendMessage( "That pet is not bonded to you." );
					return false;
				}
				else if ( messageReciever.InRange( bc, 12 ) )
				{
					messageReciever.SendMessage( "Your pet is not far from here, you do not require my assistance." );
					return false;
				}

				return true;
			}
			
			else
				messageReciever.SendMessage( "You have no pets by that name." );

			return false;

		}