RunUO Community

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

A way to make admins walk on water?

Status
Not open for further replies.

Memnoch

Wanderer
A way to make admins walk on water?

First off yes i know if i change [props on a char i can set "walk on water" to true, but none of the chars i do that to can ever walk on water, neither can they walk over mountains or other things you'd expect them to be able to do. While i'm thinking about it, is there a way for gm/admin to dress or undress a player or take things from the players backpack? Every time i try to remove items i get "that does not belong to you, you can attempt to steal it" So far the only way i've found to get a robe off of a player is to [remove and i'd really rather not delete players items :) Any help is welcome thx.
 

BluDevil

Wanderer
well to walk on water and go accross mountains..all you have to do is [tele or [multi tele..well for the character thing just do [delete if it doesn't belong to them. and who ever the item belongs too just replace the item back. i am not sure why you want to dress and undress your players. but i hope my info will help ya :)
 

bean56

Wanderer
I believe walking on water is a cilent issue you can't do anything about. That is only for mobiles like a krakken. As gm or above you should be able to just take things out of players backpack or bank if you are close enough to them. To take stuff off of them you can try doing the [move command. Also [m tele would be the easiest to get around.
 

Zorce

Wanderer
To walk on water you can set your props canswim true then [add seahorse a horse will spawn get on him and ride all over the water. They cant walk on land mounted though. There isnt a way for the char its self to walk on water.
 
Walking on water.

This is a serious pain in the butt, However if you have the know how.... Script invisable Tiles... Then place massive ammounts of these across the rivers and other water sources, and then use 3rd party progs to freeze these items into static maps files
Will be a serious pain though, We did this on a Sphere Server once across the Holy Lake... Worked out ok. :)
 
RavenCBMcloud said:
This is a serious pain in the butt, However if you have the know how.... Script invisable Tiles... Then place massive ammounts of these across the rivers and other water sources, and then use 3rd party progs to freeze these items into static maps files
Will be a serious pain though, We did this on a Sphere Server once across the Holy Lake... Worked out ok. :)


Raven's right. Make it a spell or something for admins only... as in dont make a spellbook for it, make it only castable through the [cast command, therefore players wont be able to use it, then make it so no matter where the admin walks there's 9 tiles around him (or more, only 9 may effect his running). Increase it's time or something, and then you have your walk on water.
 

xir

Wanderer
I can walk on water.

(oh... you mean in game. Sorry, not possible there.)

Not true. I got it working on Runuo so I can walk on water and nothing so drastic as the plans mentioned :rolleyes:
 

KillerBeeZ

Knight
I have Aquatic elves on my shard, they can ride sea horses on water... its not hard to do.

I don't get why one wouldn't want to ride a horse on the water... walking without a mount is just slow.

I set the sea horses to look for the Race register (to be sure only Aquatics can do so) if found, it sets the walk on water to true, if not, it sets it to false.

if you want everyone to use them, just add this line to the ethereal sea horses (and/or normal sea horses)

public override void OnDoubleClick( Mobile from )
{
from.CanSwim = true;
base.OnDoubleClick( from );
}

the sea horses (non ethy) can walk on land but not water... until they have a rider, then they can go on water but not land.

Also you may want to place a few steps on docks around the world.

When walking on water, you cant get on land unless you can step up to the land, and most places are too high for that... the only other way is by using a boat (or the stuck menu), and if a player doesn't have one, he/she will have a very hard time finding places to get back on land (not impossible though, there are a few such areas)
 

chro

Wanderer
I think it's client side.
for those who remind that, on sphere shards (older client version) you could use the godverdata.mul that would clientside take anytile as "walkable", so u'd have a nasty bumpy effect if you were a player because your movement were checked by the server and the server was sending u back each time u were bumping.
but if u were a gm you'd be able to walk anywhere (thru walls or water, anythin')
so I guess it's probably the same problem. or at least can be fixed the same way.
all the idees i've heard up to now to get to walk on water seem a bit too "heavy" for the server, just to get a gm to walk on water. ;)
 

Jakko

Wanderer
Correct Chro, it depends on the verdata.
Both the client and the server have to allow you to take a step.
 

Lokigom92

Wanderer
Hey Killer...I tried that and for some reason, it didn't work. It compiled just fine, but the ethy seahorse still would not let me walk on the water...Here is my Ethereal.cs script.
Code:
using System;
using Server.Mobiles;
using Server.Items;
using Server.Spells;

namespace Server.Mobiles
{
	public class EtherealMount : Item, IMount, IMountItem, Engines.VeteranRewards.IRewardItem
	{
		private int m_MountedID;
		private int m_RegularID;
		private Mobile m_Rider;
		private bool m_IsRewardItem;

		[CommandProperty( AccessLevel.GameMaster )]
		public bool IsRewardItem
		{
			get{ return m_IsRewardItem; }
			set{ m_IsRewardItem = value; }
		}

		[Constructable]
		public EtherealMount( int itemID, int mountID ) : base( itemID )
		{
			m_MountedID = mountID;
			m_RegularID = itemID;
			m_Rider = null;

			Layer = Layer.Invalid;

			LootType = LootType.Blessed;
		}

		[CommandProperty( AccessLevel.GameMaster )]
		public int MountedID
		{
			get
			{
				return m_MountedID;
			}
			set
			{
				if ( m_MountedID != value )
				{
					m_MountedID = value;

					if ( m_Rider != null )
						ItemID = value;
				}
			}
		}

		[CommandProperty( AccessLevel.GameMaster )]
		public int RegularID
		{
			get
			{
				return m_RegularID;
			}
			set
			{
				if ( m_RegularID != value )
				{
					m_RegularID = value;

					if ( m_Rider == null )
						ItemID = value;
				}
			}
		}

		public EtherealMount( Serial serial ) : base( serial )
		{
		}

		public override bool DisplayLootType{ get{ return false; } }

		public virtual int FollowerSlots{ get{ return 1; } }

		public void RemoveFollowers()
		{
			if ( m_Rider != null )
				m_Rider.Followers -= FollowerSlots;

			if ( m_Rider != null && m_Rider.Followers < 0 )
				m_Rider.Followers = 0;
		}

		public void AddFollowers()
		{
			if ( m_Rider != null )
				m_Rider.Followers += FollowerSlots;
		}

		public override void OnDoubleClick( Mobile from )
		{
			if ( !IsChildOf( from.Backpack ) )
				from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it.
			else if ( m_IsRewardItem && !Engines.VeteranRewards.RewardSystem.CheckIsUsableBy( from, this, null ) )
				return;
			else if ( !from.CanBeginAction( typeof( BaseMount ) ) )
				from.SendLocalizedMessage( 1040024 ); // You are still too dazed from being knocked off your mount to ride!
			else if ( from.Mounted )
				from.SendLocalizedMessage( 1005583 ); // Please dismount first.
			else if ( from.IsBodyMod && !from.Body.IsHuman )
				from.SendLocalizedMessage( 1061628 ); // You can't do that while polymorphed.
			else if ( from.HasTrade )
				from.SendLocalizedMessage( 1042317, "", 0x41 ); // You may not ride at this time
			else if ( (from.Followers + FollowerSlots) > from.FollowersMax )
				from.SendLocalizedMessage( 1049679 ); // You have too many followers to summon your mount.
			else if ( Multis.DesignContext.Check( from ) )
				new EtherealSpell( this, from ).Cast();
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 2 ); // version

			writer.Write( (bool) m_IsRewardItem );

			writer.Write( (int)m_MountedID );
			writer.Write( (int)m_RegularID );
			writer.Write( m_Rider );
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );
			LootType = LootType.Blessed;

			int version = reader.ReadInt();

			switch ( version )
			{
				case 2:
				{
					m_IsRewardItem = reader.ReadBool();
					goto case 0;
				}
				case 1: reader.ReadInt(); goto case 0;
				case 0:
				{
					m_MountedID = reader.ReadInt();
					m_RegularID = reader.ReadInt();
					m_Rider = reader.ReadMobile();

					if ( m_MountedID == 0x3EA2 )
						m_MountedID = 0x3EAA;

					break;
				}
			}

			AddFollowers();
		}

		public override DeathMoveResult OnParentDeath( Mobile parent )
		{
			Rider = null;//get off, move to pack

			return DeathMoveResult.RemainEquiped;
		}

		public static void Dismount( Mobile m )
		{
			IMount mount = m.Mount;

			if ( mount != null )
				mount.Rider = null;
		}

		[CommandProperty( AccessLevel.GameMaster )]
		public Mobile Rider
		{
			get
			{
				return m_Rider;
			}
			set
			{
				if ( value != m_Rider )
				{
					if ( value == null )
					{
						Internalize();
						UnmountMe();

						RemoveFollowers();
						m_Rider = value;
					}
					else
					{
						if ( m_Rider != null )
							Dismount( m_Rider );

						Dismount( value );

						RemoveFollowers();
						m_Rider = value;
						AddFollowers();

						MountMe();
					}
				}
			}
		}

		public void UnmountMe()
		{
			Container bp = m_Rider.Backpack;

			ItemID = m_RegularID;
			Layer = Layer.Invalid;
			Movable = true;

			if ( Hue == 0x4001 )
				Hue = 0;

			if ( bp != null )
			{
				bp.DropItem( this );
			}
			else
			{
				Point3D loc = m_Rider.Location;
				Map map = m_Rider.Map;

				if ( map == null || map == Map.Internal )
				{
					loc = m_Rider.LogoutLocation;
					map = m_Rider.LogoutMap;
				}

				MoveToWorld( loc, map );
			}
		}

		public void MountMe()
		{
			ItemID = m_MountedID;
			Layer = Layer.Mount;
			Movable = false;

			if ( Hue == 0 )
				Hue = 0x4001;

			ProcessDelta();
			m_Rider.ProcessDelta();
			m_Rider.EquipItem( this );
			m_Rider.ProcessDelta();
			ProcessDelta();
		}

		public IMount Mount
		{
			get
			{
				return this;
			}
		}

		public static void StopMounting( Mobile mob )
		{
			if ( mob.Spell is EtherealSpell )
				((EtherealSpell)mob.Spell).Stop();
		}

		private class EtherealSpell : Spell
		{
			private static SpellInfo m_Info = new SpellInfo( "Ethereal Mount", "", SpellCircle.Second, 230 );

			private EtherealMount m_Mount;
			private Mobile m_Rider;

			public EtherealSpell( EtherealMount mount, Mobile rider ) : base( rider, null, m_Info )
			{
				m_Rider = rider;
				m_Mount = mount;
			}

			public override bool ClearHandsOnCast{ get{ return false; } }
			public override bool RevealOnCast{ get{ return false; } }

			public override TimeSpan GetCastRecovery()
			{
				return TimeSpan.Zero;
			}

			public override TimeSpan GetCastDelay()
			{
				return TimeSpan.FromSeconds( 0.0 );
			}

			public override int GetMana()
			{
				return 0;
			}

			public override bool ConsumeReagents()
			{
				return true;
			}

			public override bool CheckFizzle()
			{
				return true;
			}

			private bool m_Stop;

			public void Stop()
			{
				m_Stop = true;
				Disturb( DisturbType.Hurt, false, false );
			}

			public override bool CheckDisturb( DisturbType type, bool checkFirst, bool resistable )
			{
				if ( type == DisturbType.EquipRequest || type == DisturbType.UseRequest/* || type == DisturbType.Hurt*/ )
					return false;

				return true;
			}

			public override void DoHurtFizzle()
			{
				if ( !m_Stop )
					base.DoHurtFizzle();
			}

			public override void DoFizzle()
			{
				if ( !m_Stop )
					base.DoFizzle();
			}

			public override void OnDisturb( DisturbType type, bool message )
			{
				if ( message && !m_Stop )
					Caster.SendLocalizedMessage( 1049455 ); // You have been disrupted while attempting to summon your ethereal mount!

				//m_Mount.UnmountMe();
			}

			public override void OnCast()
			{
				if ( !m_Mount.Deleted && m_Mount.Rider == null && m_Mount.IsChildOf( m_Rider.Backpack ) )
					m_Mount.Rider = m_Rider;

				FinishSequence();
			}
		}
	}

	public class EtherealHorse : EtherealMount
	{
		public override int LabelNumber{ get{ return 1041298; } } // Ethereal Horse Statuette

		[Constructable]
		public EtherealHorse() : base( 0x20DD, 0x3EAA )
		{
		}

		public EtherealHorse( Serial serial ) : base( serial )
		{
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			if ( Name == "an ethereal horse" )
				Name = null;

			if ( ItemID == 0x2124 )
				ItemID = 0x20DD;
		}
	}

	public class EtherealLlama : EtherealMount
	{
		public override int LabelNumber{ get{ return 1041300; } } // Ethereal Llama Statuette

		[Constructable]
		public EtherealLlama() : base( 0x20F6, 0x3EAB )
		{
		}

		public EtherealLlama( Serial serial ) : base( serial )
		{
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			if ( Name == "an ethereal llama" )
				Name = null;
		}
	}

	public class EtherealOstard : EtherealMount
	{
		public override int LabelNumber{ get{ return 1041299; } } // Ethereal Ostard Statuette

		[Constructable]
		public EtherealOstard() : base( 0x2135, 0x3EAC )
		{
		}

		public EtherealOstard( Serial serial ) : base( serial )
		{
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			if ( Name == "an ethereal ostard" )
				Name = null;
		}
	}

	public class EtherealRidgeback : EtherealMount
	{
		public override int LabelNumber{ get{ return 1049747; } } // Ethereal Ridgeback Statuette

		[Constructable]
		public EtherealRidgeback() : base( 0x2615, 0x3E9A )
		{
		}

		public EtherealRidgeback( Serial serial ) : base( serial )
		{
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			if ( Name == "an ethereal ridgeback" )
				Name = null;
		}
	}

	public class EtherealUnicorn : EtherealMount
	{
		public override int LabelNumber{ get{ return 1049745; } } // Ethereal Unicorn Statuette

		[Constructable]
		public EtherealUnicorn() : base( 0x25CE, 0x3E9B )
		{
		}

		public EtherealUnicorn( Serial serial ) : base( serial )
		{
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			if ( Name == "an ethereal unicorn" )
				Name = null;
		}
	}

	public class EtherealBeetle : EtherealMount
	{
		public override int LabelNumber{ get{ return 1049748; } } // Ethereal Beetle Statuette

		[Constructable]
		public EtherealBeetle() : base( 0x260F, 0x3E97 )
		{
		}

		public EtherealBeetle( Serial serial ) : base( serial )
		{
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			if ( Name == "an ethereal beetle" )
				Name = null;
		}
	}

	public class EtherealKirin : EtherealMount
	{
		public override int LabelNumber{ get{ return 1049746; } } // Ethereal Ki-Rin Statuette

		[Constructable]
		public EtherealKirin() : base( 0x25A0, 0x3E9C )
		{
		}

		public EtherealKirin( Serial serial ) : base( serial )
		{
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			if ( Name == "an ethereal kirin" )
				Name = null;
		}
	}

	public class EtherealHellsteed : EtherealMount
	{
		
		[Constructable]
		public EtherealHellsteed() : base( 0x2617, 0x3EBB )
		{
			Name = "an Ethereal Hellsteed";
		}

		public EtherealHellsteed( Serial serial ) : base( serial )
		{
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			if ( Name == "an Ethereal Hellsteed" )
				Name = null;
		}
	}	
	
	
	public class EtherealSwampDragon : EtherealMount
	{
		public override int LabelNumber{ get{ return 1049749; } } // Ethereal Swamp Dragon Statuette

		[Constructable]
		public EtherealSwampDragon() : base( 0x2619, 0x3E98 )
		{
			Name = "an ethereal swamp dragon";
		}

		public EtherealSwampDragon( Serial serial ) : base( serial )
		{
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			if ( Name == "an ethereal swamp dragon" )
				Name = null;
		}
	}


	public class EtherealHiryu : EtherealMount
	{
		public override int LabelNumber{ get{ return 1049749; } } // Ethereal Hiryu Statuette

		[Constructable]
		public EtherealHiryu() : base( 0x276A, 0x3E94 )
		{
			Name = "an ethereal hiryu";
		}

		public EtherealHiryu( Serial serial ) : base( serial )
		{
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			if ( Name == "an ethereal hiryu" )
				Name = null;
		}
	}

	public class EtherealSeaHorse : EtherealMount
	{
		
		[Constructable]
		public EtherealSeaHorse() : base( 0x25BA, 0x3EAA )
		{
			Name = "an Ethereal Sea Horse";
		}

		public override void OnDoubleClick( Mobile from ) 
		{ 
			from.CanSwim = true; 
			base.OnDoubleClick( from ); 
		}


		public EtherealSeaHorse( Serial serial ) : base( serial )
		{
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );

			writer.Write( (int) 0 ); // version
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );

			int version = reader.ReadInt();

			if ( Name == "an Ethereal Sea Horse" )
				Name = null;
		}
	}
}
That is how you meant, right?
 
Status
Not open for further replies.
Top