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!

holy water script

devil6

Wanderer
hmmm yea i dont no what happened there, but here is everything.

RunUO - [www.runuo.com] Version 1.0.0, Build 1337
Scripts: Compiling C# scripts...failed (1 errors, 14 warnings)
- Warning: Scripts\Commands\motd.cs: CS0183: (line 322, column 47) The given ex
pression is always of the provided ('Server.Mobiles.PlayerMobile') type
- Warning: Scripts\Commands\motd.cs: CS0219: (line 369, column 8) The variable
'line' is assigned but its value is never used
- Warning: Scripts\Custom\Vampire\BaseHolyWater.cs: CS0642: (line 265, column 3
3) Possible mistaken null statement
- Warning: Scripts\Custom\Vampire\BaseHolyWater.cs: CS0642: (line 276, column 4
9) Possible mistaken null statement
- Error: Scripts\Custom\Vampire\BaseHolyWater.cs: CS0029: (line 281, column 22)
Cannot implicitly convert type 'double' to 'int'
- Warning: Scripts\Custom\XmlSpawner2-v281-3of3\XmlMobiles\TalkingBaseEscortabl
e.cs: CS0219: (line 361, column 10) The variable 'gainedPath' is assigned but it
s value is never used
- Warning: Scripts\Mobiles\Vendors\BaseVendor.cs: CS0162: (line 355, column 4)
Unreachable code detected
- Warning: Scripts\Engines\Craft\Core\CraftItem.cs: CS0219: (line 1496, column
11) The variable 'endquality' is assigned but its value is never used
- Warning: Scripts\Engines\Craft\Core\CraftItem.cs: CS0219: (line 1627, column
11) The variable 'endquality' is assigned but its value is never used
- Warning: Scripts\Engines\Craft\DefBlacksmithy.cs: CS0219: (line 219, column 8
) The variable 'index' is assigned but its value is never used
- Warning: Scripts\Items\Weapons\BaseWeapon.cs: CS0219: (line 2699, column 8) T
he variable 'oreType' is assigned but its value is never used
- Warning: Scripts\Items\Wands\BaseWand.cs: CS0219: (line 184, column 8) The va
riable 'number' is assigned but its value is never used
- Warning: Scripts\Mobiles\Townfolk\BaseEscortable.cs: CS0219: (line 324, colum
n 10) The variable 'gainedPath' is assigned but its value is never used
- Warning: Scripts\Mobiles\PlayerMobile.cs: CS0219: (line 1526, column 11) The
variable 'gainedPath' is assigned but its value is never used
- Warning: Scripts\Online-Chat\OnlineClientGump.cs: CS0219: (line 185, column 8
) The variable 'line' is assigned but its value is never used
Scripts: One or more scripts failed to compile or no script files were found.
- Press return to exit, or R to try again.



PHP:
using System;
using System.Collections;
using Server;
using Server.Network;
using Server.Targeting;
using Server.Spells;
using Server.Mobiles;

namespace Server.Items
{
	public abstract class BaseHolyWater : BasePotion
	{
		public abstract int MinDamage { get; }
		public abstract int MaxDamage { get; }
		
		public override bool RequireFreeHand{ get{ return false; } }
		
		private static bool LeveledExplosion = false; // Should explosion potions explode other nearby potions?
		private static bool InstantExplosion = false; // Should explosion potions explode on impact?
		private const int   ExplosionRange   = 8;     // How long is the blast radius?
		
		public BaseHolyWater( PotionEffect effect ) : base( 0xF0D, effect )
		{
		}
		
		public BaseHolyWater( 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();
		}
		
		public virtual object FindParent( Mobile from )
		{
			Mobile m = this.HeldBy;
			
			if ( m != null && m.Holding == this )
				return m;
			
			object obj = this.RootParent;
			
			if ( obj != null )
				return obj;
			
			if ( Map == Map.Internal )
				return from;
			
			return this;
		}
		
		private Timer m_Timer;
		
		private ArrayList m_Users;
		
		public override void Drink( Mobile from )
		{
			if ( Core.AOS && (from.Paralyzed || from.Frozen || (from.Spell != null && from.Spell.IsCasting)) )
			{
				from.SendLocalizedMessage( 1062725 ); // You can not use a purple potion while paralyzed.
				return;
			}
			
			ThrowTarget targ = from.Target as ThrowTarget;
			
			if ( targ != null && targ.Potion == this )
				return;
			
			from.RevealingAction();
			
			if ( m_Users == null )
				m_Users = new ArrayList();
			
			if ( !m_Users.Contains( from ) )
				m_Users.Add( from );
			
			from.Target = new ThrowTarget( this );
			
			if ( m_Timer == null )
			{
				from.SendLocalizedMessage( 500236 ); // You should throw it now!
				m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 0.75 ), TimeSpan.FromSeconds( 1.0 ), 4, new TimerStateCallback( Detonate_OnTick ), new object[]{ from, 3 } );
			}
		}
		
		private void Detonate_OnTick( object state )
		{
			if ( Deleted )
				return;
			
			object[] states = (object[])state;
			Mobile from = (Mobile)states[0];
			int timer = (int)states[1];
			
			object parent = FindParent( from );
			
			if ( timer == 0 )
			{
				Point3D loc;
				Map map;
				
				if ( parent is Item )
				{
					Item item = (Item)parent;
					
					loc = item.GetWorldLocation();
					map = item.Map;
				}
				else if ( parent is Mobile )
				{
					Mobile m = (Mobile)parent;
					
					loc = m.Location;
					map = m.Map;
				}
				else
				{
					return;
				}
				
				Explode( from, true, loc, map );
			}
			else
			{
				if ( parent is Item )
					((Item)parent).PublicOverheadMessage( MessageType.Regular, 0x22, false, timer.ToString() );
				else if ( parent is Mobile )
					((Mobile)parent).PublicOverheadMessage( MessageType.Regular, 0x22, false, timer.ToString() );
				
				states[1] = timer - 1;
			}
		}
		
		private void Reposition_OnTick( object state )
		{
			if ( Deleted )
				return;
			
			object[] states = (object[])state;
			Mobile from = (Mobile)states[0];
			IPoint3D p = (IPoint3D)states[1];
			Map map = (Map)states[2];
			
			Point3D loc = new Point3D( p );
			
			if ( InstantExplosion )
				Explode( from, true, loc, map );
			else
				MoveToWorld( loc, map );
		}
		
		private class ThrowTarget : Target
		{
			private BaseHolyWater m_Potion;
			
			public BaseHolyWater Potion
			{
				get{ return m_Potion; }
			}
			
			public ThrowTarget( BaseHolyWater potion ) : base( 12, true, TargetFlags.None )
			{
				m_Potion = potion;
			}
			
			protected override void OnTarget( Mobile from, object targeted )
			{
				if ( m_Potion.Deleted || m_Potion.Map == Map.Internal )
					return;
				
				IPoint3D p = targeted as IPoint3D;
				
				if ( p == null )
					return;
				
				Map map = from.Map;
				
				if ( map == null )
					return;
				
				SpellHelper.GetSurfaceTop( ref p );
				
				from.RevealingAction();
				
				IEntity to;
				
				if ( p is Mobile )
					to = (Mobile)p;
				else
					to = new Entity( Serial.Zero, new Point3D( p ), map );
				
				Effects.SendMovingEffect( from, to, m_Potion.ItemID & 0x3FFF, 7, 0, false, false, m_Potion.Hue, 0 );
				
				m_Potion.Internalize();
				Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerStateCallback( m_Potion.Reposition_OnTick ), new object[]{ from, p, map } );
			}
		}
		
		public void Explode( Mobile from, bool direct, Point3D loc, Map map )
		{
			if ( Deleted )
				return;
			
			Delete();
			
			for ( int i = 0; m_Users != null && i < m_Users.Count; ++i )
			{
				Mobile m = (Mobile)m_Users[i];
				ThrowTarget targ = m.Target as ThrowTarget;
				
				if ( targ != null && targ.Potion == this )
					Target.Cancel( m );
			}
			
			if ( map == null )
				return;
			
			Effects.PlaySound( loc, map, 0x207 );
			Effects.SendLocationEffect( loc, map, 0x36BD, 20 );
			
			int alchemyBonus = 0;
			
			if ( direct )
				alchemyBonus = (int)(from.Skills.Alchemy.Value / (Core.AOS ? 5 : 10));
			
			IPooledEnumerable eable = LeveledExplosion ? map.GetObjectsInRange( loc, ExplosionRange ) : map.GetMobilesInRange( loc, ExplosionRange );
			ArrayList toExplode = new ArrayList();
			
			int toDamage = 0;
			
			foreach ( object o in eable )
			{
				if ( o is Mobile )
				{
					toExplode.Add( o );
					++toDamage;
				}
			}
			
			eable.Free();
			
			int min = Scale( from, MinDamage );
			int max = Scale( from, MaxDamage );
			
			for ( int i = 0; i < toExplode.Count; ++i )
			{
				object o = toExplode[i];
				
				if ( o is Mobile )
				{
					Mobile m = (Mobile)o;
					
					if ( from == null || (SpellHelper.ValidIndirectTarget( from, m ) && from.CanBeHarmful( m, false )) )
					{
						if  ( m is LesserVampire );
						{
							if ( from != null )
								from.DoHarmful( m );
							
							int damage = (int)m.HitsMax + 10;//Just kills them
							
							AOS.Damage( m, from, damage, 0, 100, 0, 0, 0 );
							m.FixedParticles( 0x3709, 1, 30, 9965, 5, 7, EffectLayer.Waist );
							m.PlaySound( 0x231 );
						}
						if ( m is Vampire || m is GreaterVampire );
						{
							if ( from != null )
								from.DoHarmful( m );
							
							int damage = (int)m.HitsMax * .8;//Damage does 80% of their Max Hit Points...
							
							AOS.Damage( m, from, damage, 0, 100, 0, 0, 0 );
							m.FixedParticles( 0x3709, 1, 30, 9965, 5, 7, EffectLayer.Waist );
							m.PlaySound( 0x231 );
						}
					}
					else if ( o is BaseHolyWater )
					{
						BaseHolyWater pot = (BaseHolyWater)o;
						
						pot.Explode( from, false, pot.GetWorldLocation(), pot.Map );
					}
				}
			}
		}
	}
}
 

Packer898

Knight
Well I am at a lose as to why it says that since damage is declared as a int and so is m.MaxHits. Hopefully someone else can chime in and fix it.
 

Geezer

Wanderer
Maybe it's the .8 in the calculation which changes the result into a double.

Try

Code:
int damage = ( (int)m.HitsMax / 10 ) * 8;
Which is the same as * .8
 

devil6

Wanderer
ok after changeing this
Code:
int damage = ( (int)m.HitsMax / 10 ) * 8;

to


PHP:
using System;
using System.Collections;
using Server;
using Server.Network;
using Server.Targeting;
using Server.Spells;
using Server.Mobiles;

namespace Server.Items
{
	public abstract class BaseHolyWater : BasePotion
	{
		public abstract int MinDamage { get; }
		public abstract int MaxDamage { get; }
		
		public override bool RequireFreeHand{ get{ return false; } }
		
		private static bool LeveledExplosion = false; // Should explosion potions explode other nearby potions?
		private static bool InstantExplosion = false; // Should explosion potions explode on impact?
		private const int   ExplosionRange   = 8;     // How long is the blast radius?
		
		public BaseHolyWater( PotionEffect effect ) : base( 0xF0D, effect )
		{
		}
		
		public BaseHolyWater( 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();
		}
		
		public virtual object FindParent( Mobile from )
		{
			Mobile m = this.HeldBy;
			
			if ( m != null && m.Holding == this )
				return m;
			
			object obj = this.RootParent;
			
			if ( obj != null )
				return obj;
			
			if ( Map == Map.Internal )
				return from;
			
			return this;
		}
		
		private Timer m_Timer;
		
		private ArrayList m_Users;
		
		public override void Drink( Mobile from )
		{
			if ( Core.AOS && (from.Paralyzed || from.Frozen || (from.Spell != null && from.Spell.IsCasting)) )
			{
				from.SendLocalizedMessage( 1062725 ); // You can not use a purple potion while paralyzed.
				return;
			}
			
			ThrowTarget targ = from.Target as ThrowTarget;
			
			if ( targ != null && targ.Potion == this )
				return;
			
			from.RevealingAction();
			
			if ( m_Users == null )
				m_Users = new ArrayList();
			
			if ( !m_Users.Contains( from ) )
				m_Users.Add( from );
			
			from.Target = new ThrowTarget( this );
			
			if ( m_Timer == null )
			{
				from.SendLocalizedMessage( 500236 ); // You should throw it now!
				m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 0.75 ), TimeSpan.FromSeconds( 1.0 ), 4, new TimerStateCallback( Detonate_OnTick ), new object[]{ from, 3 } );
			}
		}
		
		private void Detonate_OnTick( object state )
		{
			if ( Deleted )
				return;
			
			object[] states = (object[])state;
			Mobile from = (Mobile)states[0];
			int timer = (int)states[1];
			
			object parent = FindParent( from );
			
			if ( timer == 0 )
			{
				Point3D loc;
				Map map;
				
				if ( parent is Item )
				{
					Item item = (Item)parent;
					
					loc = item.GetWorldLocation();
					map = item.Map;
				}
				else if ( parent is Mobile )
				{
					Mobile m = (Mobile)parent;
					
					loc = m.Location;
					map = m.Map;
				}
				else
				{
					return;
				}
				
				Explode( from, true, loc, map );
			}
			else
			{
				if ( parent is Item )
					((Item)parent).PublicOverheadMessage( MessageType.Regular, 0x22, false, timer.ToString() );
				else if ( parent is Mobile )
					((Mobile)parent).PublicOverheadMessage( MessageType.Regular, 0x22, false, timer.ToString() );
				
				states[1] = timer - 1;
			}
		}
		
		private void Reposition_OnTick( object state )
		{
			if ( Deleted )
				return;
			
			object[] states = (object[])state;
			Mobile from = (Mobile)states[0];
			IPoint3D p = (IPoint3D)states[1];
			Map map = (Map)states[2];
			
			Point3D loc = new Point3D( p );
			
			if ( InstantExplosion )
				Explode( from, true, loc, map );
			else
				MoveToWorld( loc, map );
		}
		
		private class ThrowTarget : Target
		{
			private BaseHolyWater m_Potion;
			
			public BaseHolyWater Potion
			{
				get{ return m_Potion; }
			}
			
			public ThrowTarget( BaseHolyWater potion ) : base( 12, true, TargetFlags.None )
			{
				m_Potion = potion;
			}
			
			protected override void OnTarget( Mobile from, object targeted )
			{
				if ( m_Potion.Deleted || m_Potion.Map == Map.Internal )
					return;
				
				IPoint3D p = targeted as IPoint3D;
				
				if ( p == null )
					return;
				
				Map map = from.Map;
				
				if ( map == null )
					return;
				
				SpellHelper.GetSurfaceTop( ref p );
				
				from.RevealingAction();
				
				IEntity to;
				
				if ( p is Mobile )
					to = (Mobile)p;
				else
					to = new Entity( Serial.Zero, new Point3D( p ), map );
				
				Effects.SendMovingEffect( from, to, m_Potion.ItemID & 0x3FFF, 7, 0, false, false, m_Potion.Hue, 0 );
				
				m_Potion.Internalize();
				Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerStateCallback( m_Potion.Reposition_OnTick ), new object[]{ from, p, map } );
			}
		}
		
		public void Explode( Mobile from, bool direct, Point3D loc, Map map )
		{
			if ( Deleted )
				return;
			
			Delete();
			
			for ( int i = 0; m_Users != null && i < m_Users.Count; ++i )
			{
				Mobile m = (Mobile)m_Users[i];
				ThrowTarget targ = m.Target as ThrowTarget;
				
				if ( targ != null && targ.Potion == this )
					Target.Cancel( m );
			}
			
			if ( map == null )
				return;
			
			Effects.PlaySound( loc, map, 0x207 );
			Effects.SendLocationEffect( loc, map, 0x36BD, 20 );
			
			int alchemyBonus = 0;
			
			if ( direct )
				alchemyBonus = (int)(from.Skills.Alchemy.Value / (Core.AOS ? 5 : 10));
			
			IPooledEnumerable eable = LeveledExplosion ? map.GetObjectsInRange( loc, ExplosionRange ) : map.GetMobilesInRange( loc, ExplosionRange );
			ArrayList toExplode = new ArrayList();
			
			int toDamage = 0;
			
			foreach ( object o in eable )
			{
				if ( o is Mobile )
				{
					toExplode.Add( o );
					++toDamage;
				}
			}
			
			eable.Free();
			
			int min = Scale( from, MinDamage );
			int max = Scale( from, MaxDamage );
			
			for ( int i = 0; i < toExplode.Count; ++i )
			{
				object o = toExplode[i];
				
				if ( o is Mobile )
				{
					Mobile m = (Mobile)o;
					
					if ( from == null || (SpellHelper.ValidIndirectTarget( from, m ) && from.CanBeHarmful( m, false )) )
					{
						if  ( m is LesserVampire );
						{
							if ( from != null )
								from.DoHarmful( m );
							
							int damage = (int)m.HitsMax + 10;//Just kills them
							
							AOS.Damage( m, from, damage, 0, 100, 0, 0, 0 );
							m.FixedParticles( 0x3709, 1, 30, 9965, 5, 7, EffectLayer.Waist );
							m.PlaySound( 0x231 );
						}
						if ( m is Vampire || m is GreaterVampire );
						{
							if ( from != null )
								from.DoHarmful( m );
							
							int damage = (int)m.HitsMax / 10 ) * 8;  //Damage does 80% of their Max Hit Points...
							
							AOS.Damage( m, from, damage, 0, 100, 0, 0, 0 );
							m.FixedParticles( 0x3709, 1, 30, 9965, 5, 7, EffectLayer.Waist );
							m.PlaySound( 0x231 );
						}
					}
					else if ( o is BaseHolyWater )
					{
						BaseHolyWater pot = (BaseHolyWater)o;
						
						pot.Explode( from, false, pot.GetWorldLocation(), pot.Map );
					}
				}
			}
		}
	}
}[PHP]

here are the errors

[QUOTE]**************************************************************
*  _______  _______  _______               _______  _______  *
* (  ____ )(  ____ )(  ____ \    |\     /|(  ___  )(  ____ ) *
* | (    )|| (    )|| (    \/    | )   ( || (   ) || (    )| *
* | (____)|| (____)|| (__  _____ | |   | || |   | || (____)| *
* |  _____)|     __)|  __)(_____)| |   | || |   | ||     __) *
* | (      | (\ (   | (          | |   | || |   | || (\ (    *
* | )      | ) \ \__| (____/\    | (___) || (___) || ) \ \__ *
* |/       |/   \__/(_______/    (_______)(_______)|/   \__/ *
*      _____ _          _                  _   _  ___        *
*   __|_   _| |_  ___  | |_ _ _ _  _ ___  | | | |/ _ \       *
*  |___|| | | ' \/ -_) |  _| '_| || / -_) | |_| | (_) |      *
*       |_| |_||_\___|  \__|_|  \_,_\___|  \___/ \___/       *
*                                                            *
**************************************************************
RunUO - [www.runuo.com] Version 1.0.0, Build 1337
Scripts: Compiling C# scripts...failed (2 errors, 14 warnings)
 - Warning: Scripts\Commands\motd.cs: CS0183: (line 322, column 47) The given ex
pression is always of the provided ('Server.Mobiles.PlayerMobile') type
 - Warning: Scripts\Commands\motd.cs: CS0219: (line 369, column 8) The variable
'line' is assigned but its value is never used
 - Warning: Scripts\Custom\Vampire\BaseHolyWater.cs: CS0642: (line 265, column 3
3) Possible mistaken null statement
 - Warning: Scripts\Custom\Vampire\BaseHolyWater.cs: CS0642: (line 276, column 4
9) Possible mistaken null statement
 - Error: Scripts\Custom\Vampire\BaseHolyWater.cs: CS1002: (line 281, column 41)
 ; expected
 - Error: Scripts\Custom\Vampire\BaseHolyWater.cs: CS1525: (line 281, column 41)
 Invalid expression term ')'
 - Warning: Scripts\Custom\XmlSpawner2-v281-3of3\XmlMobiles\TalkingBaseEscortabl
e.cs: CS0219: (line 361, column 10) The variable 'gainedPath' is assigned but it
s value is never used
 - Warning: Scripts\Mobiles\Vendors\BaseVendor.cs: CS0162: (line 355, column 4)
Unreachable code detected
 - Warning: Scripts\Engines\Craft\Core\CraftItem.cs: CS0219: (line 1496, column
11) The variable 'endquality' is assigned but its value is never used
 - Warning: Scripts\Engines\Craft\Core\CraftItem.cs: CS0219: (line 1627, column
11) The variable 'endquality' is assigned but its value is never used
 - Warning: Scripts\Engines\Craft\DefBlacksmithy.cs: CS0219: (line 219, column 8
) The variable 'index' is assigned but its value is never used
 - Warning: Scripts\Items\Weapons\BaseWeapon.cs: CS0219: (line 2699, column 8) T
he variable 'oreType' is assigned but its value is never used
 - Warning: Scripts\Items\Wands\BaseWand.cs: CS0219: (line 184, column 8) The va
riable 'number' is assigned but its value is never used
 - Warning: Scripts\Mobiles\Townfolk\BaseEscortable.cs: CS0219: (line 324, colum
n 10) The variable 'gainedPath' is assigned but its value is never used
 - Warning: Scripts\Mobiles\PlayerMobile.cs: CS0219: (line 1526, column 11) The
variable 'gainedPath' is assigned but its value is never used
 - Warning: Scripts\Online-Chat\OnlineClientGump.cs: CS0219: (line 185, column 8
) The variable 'line' is assigned but its value is never used
Scripts: One or more scripts failed to compile or no script files were found.
 - Press return to exit, or R to try again.
[/QUOTE]
 

devil6

Wanderer
ok, got it working , however it doesn't kill the vampires instead it kills me ???

PHP:
using System;
using System.Collections;
using Server;
using Server.Network;
using Server.Targeting;
using Server.Spells;
using Server.Mobiles;

namespace Server.Items
{
	public abstract class BaseHolyWater : BasePotion
	{
		public abstract int MinDamage { get; }
		public abstract int MaxDamage { get; }
		
		public override bool RequireFreeHand{ get{ return false; } }
		
		private static bool LeveledExplosion = false; // Should explosion potions explode other nearby potions?
		private static bool InstantExplosion = false; // Should explosion potions explode on impact?
		private const int   ExplosionRange   = 8;     // How long is the blast radius?
		
		public BaseHolyWater( PotionEffect effect ) : base( 0xF0D, effect )
		{
		}
		
		public BaseHolyWater( 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();
		}
		
		public virtual object FindParent( Mobile from )
		{
			Mobile m = this.HeldBy;
			
			if ( m != null && m.Holding == this )
				return m;
			
			object obj = this.RootParent;
			
			if ( obj != null )
				return obj;
			
			if ( Map == Map.Internal )
				return from;
			
			return this;
		}
		
		private Timer m_Timer;
		
		private ArrayList m_Users;
		
		public override void Drink( Mobile from )
		{
			if ( Core.AOS && (from.Paralyzed || from.Frozen || (from.Spell != null && from.Spell.IsCasting)) )
			{
				from.SendLocalizedMessage( 1062725 ); // You can not use a purple potion while paralyzed.
				return;
			}
			
			ThrowTarget targ = from.Target as ThrowTarget;
			
			if ( targ != null && targ.Potion == this )
				return;
			
			from.RevealingAction();
			
			if ( m_Users == null )
				m_Users = new ArrayList();
			
			if ( !m_Users.Contains( from ) )
				m_Users.Add( from );
			
			from.Target = new ThrowTarget( this );
			
			if ( m_Timer == null )
			{
				from.SendLocalizedMessage( 500236 ); // You should throw it now!
				m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 0.75 ), TimeSpan.FromSeconds( 1.0 ), 4, new TimerStateCallback( Detonate_OnTick ), new object[]{ from, 3 } );
			}
		}
		
		private void Detonate_OnTick( object state )
		{
			if ( Deleted )
				return;
			
			object[] states = (object[])state;
			Mobile from = (Mobile)states[0];
			int timer = (int)states[1];
			
			object parent = FindParent( from );
			
			if ( timer == 0 )
			{
				Point3D loc;
				Map map;
				
				if ( parent is Item )
				{
					Item item = (Item)parent;
					
					loc = item.GetWorldLocation();
					map = item.Map;
				}
				else if ( parent is Mobile )
				{
					Mobile m = (Mobile)parent;
					
					loc = m.Location;
					map = m.Map;
				}
				else
				{
					return;
				}
				
				Explode( from, true, loc, map );
			}
			else
			{
				if ( parent is Item )
					((Item)parent).PublicOverheadMessage( MessageType.Regular, 0x22, false, timer.ToString() );
				else if ( parent is Mobile )
					((Mobile)parent).PublicOverheadMessage( MessageType.Regular, 0x22, false, timer.ToString() );
				
				states[1] = timer - 1;
			}
		}
		
		private void Reposition_OnTick( object state )
		{
			if ( Deleted )
				return;
			
			object[] states = (object[])state;
			Mobile from = (Mobile)states[0];
			IPoint3D p = (IPoint3D)states[1];
			Map map = (Map)states[2];
			
			Point3D loc = new Point3D( p );
			
			if ( InstantExplosion )
				Explode( from, true, loc, map );
			else
				MoveToWorld( loc, map );
		}
		
		private class ThrowTarget : Target
		{
			private BaseHolyWater m_Potion;
			
			public BaseHolyWater Potion
			{
				get{ return m_Potion; }
			}
			
			public ThrowTarget( BaseHolyWater potion ) : base( 12, true, TargetFlags.None )
			{
				m_Potion = potion;
			}
			
			protected override void OnTarget( Mobile from, object targeted )
			{
				if ( m_Potion.Deleted || m_Potion.Map == Map.Internal )
					return;
				
				IPoint3D p = targeted as IPoint3D;
				
				if ( p == null )
					return;
				
				Map map = from.Map;
				
				if ( map == null )
					return;
				
				SpellHelper.GetSurfaceTop( ref p );
				
				from.RevealingAction();
				
				IEntity to;
				
				if ( p is Mobile )
					to = (Mobile)p;
				else
					to = new Entity( Serial.Zero, new Point3D( p ), map );
				
				Effects.SendMovingEffect( from, to, m_Potion.ItemID & 0x3FFF, 7, 0, false, false, m_Potion.Hue, 0 );
				
				m_Potion.Internalize();
				Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerStateCallback( m_Potion.Reposition_OnTick ), new object[]{ from, p, map } );
			}
		}
		
		public void Explode( Mobile from, bool direct, Point3D loc, Map map )
		{
			if ( Deleted )
				return;
			
			Delete();
			
			for ( int i = 0; m_Users != null && i < m_Users.Count; ++i )
			{
				Mobile m = (Mobile)m_Users[i];
				ThrowTarget targ = m.Target as ThrowTarget;
				
				if ( targ != null && targ.Potion == this )
					Target.Cancel( m );
			}
			
			if ( map == null )
				return;
			
			Effects.PlaySound( loc, map, 0x207 );
			Effects.SendLocationEffect( loc, map, 0x36BD, 20 );
			
			int alchemyBonus = 0;
			
			if ( direct )
				alchemyBonus = (int)(from.Skills.Alchemy.Value / (Core.AOS ? 5 : 10));
			
			IPooledEnumerable eable = LeveledExplosion ? map.GetObjectsInRange( loc, ExplosionRange ) : map.GetMobilesInRange( loc, ExplosionRange );
			ArrayList toExplode = new ArrayList();
			
			int toDamage = 0;
			
			foreach ( object o in eable )
			{
				if ( o is Mobile )
				{
					toExplode.Add( o );
					++toDamage;
				}
			}
			
			eable.Free();
			
			int min = Scale( from, MinDamage );
			int max = Scale( from, MaxDamage );
			
			for ( int i = 0; i < toExplode.Count; ++i )
			{
				object o = toExplode[i];
				
				if ( o is Mobile )
				{
					Mobile m = (Mobile)o;
					
					if ( from == null || (SpellHelper.ValidIndirectTarget( from, m ) && from.CanBeHarmful( m, false )) )
					{
						if  ( m is LesserVampire );
						{
							if ( from != null )
								from.DoHarmful( m );
							
							int damage = (int)m.HitsMax + 10;//Just kills them
							
							AOS.Damage( m, from, damage, 0, 100, 0, 0, 0 );
							m.FixedParticles( 0x3709, 1, 30, 9965, 5, 7, EffectLayer.Waist );
							m.PlaySound( 0x231 );
						}
						if ( m is Vampire || m is GreaterVampire );
						{
							if ( from != null )
								from.DoHarmful( m );
							
							int damage = (int)m.HitsMax / 10;   //Damage does 80% of their Max Hit Points...
							
							AOS.Damage( m, from, damage, 0, 100, 0, 0, 0 );
							m.FixedParticles( 0x3709, 1, 30, 9965, 5, 7, EffectLayer.Waist );
							m.PlaySound( 0x231 );
						}
					}
					else if ( o is BaseHolyWater )
					{
						BaseHolyWater pot = (BaseHolyWater)o;
						
						pot.Explode( from, false, pot.GetWorldLocation(), pot.Map );
					}
				}
			}
		}
	}
}
 

daat99

Moderator
Staff member
I haven't looked at the distro so this might be the right way but just in case:
Code:
AOS.Damage( m, from, damage, 0, 100, 0, 0, 0 );
Switch m and from in this line and see if it kill the vampire instead.

P.S.
Like I said it you might have the right lines so keep a backup.
 

devil6

Wanderer
ok switch the two you told me to, sill kills only me, here is something else you might need to know. no mater where the exlotion happens i die. on a vampire or not.
 

daat99

Moderator
Staff member
devil6 said:
hmmm, what you mean?
It means that you're using a custom core and custom core isn't supported in this forums.
You problem can be caused by your own custom core, we can't predict how your core reacts so we can't help you anymore.
 

Packer898

Knight
Hehe the core mod he is using is person's Pre-UOR core. The only things that changes in persons core from the distro one is the text colors. I know this because I have a copy of his and have looked it over a few times using Winmerge. His core has absolutley nothing to do with the problem here.

I will look again and see if I can figure out why its killing you. lol
 

daat99

Moderator
Staff member
Packer898 said:
Hehe the core mod he is using is person's Pre-UOR core. The only things that changes in persons core from the distro one is the text colors. I know this because I have a copy of his and have looked it over a few times using Winmerge. His core has absolutley nothing to do with the problem here.

I will look again and see if I can figure out why its killing you. lol
It doesn't realy matter for 2 reasons.
1. You can't tell for sure.
2. Custom core isn't supported no matter who customized it.
 

Packer898

Knight
Sure you can tell. I can compare the 5 files that something has changed in and see that what he changed is only the hue of text. Its not that hard to do. But like you stated custom cores arent supported for the reasons above.

I will attempt to help him fix it regardless, Especially since I know he doesnt have the knowledge to make any additional core mods that could contribute/cause this problem. This is just basic scripting and not anything that would matter one way or the other. =)-

p.s. Ya know I love ya daat99 this was not meant as a flame or argument against you. Its just that I know for a fact it doesnt have anything to do with the modded core, and it is a good chance to help him learn something( or myself actually =)- ).
 

devil6

Wanderer
Good Looking out Packer, and Daat, I know you mean well, I had no idea that the core was tapered with, so that’s my bad. I assumed that since it was still 1.0 that it didn’t matter. But again that’s my bad. So thanks for the help anyone has given, and I will appreciated any help need in the future.
 

daat99

Moderator
Staff member
devil6 said:
Good Looking out Packer, and Daat, I know you mean well, I had no idea that the core was tapered with, so that’s my bad. I assumed that since it was still 1.0 that it didn’t matter. But again that’s my bad. So thanks for the help anyone has given, and I will appreciated any help need in the future.
Well I can write a totaly new core that does nothing but display a message in the client that run it and still call it RunUO 1.0.0.
Will it still be the same?
The answer is ofcourse no.
We have absolutly no way to tell what changes your core contains (even tho we have an idea we still can't be sure).
 

devil6

Wanderer
yea, i see what your saying :) so what i have done is placed this script in a un-tamppered UO 1.0 download. so we can batter understand what is going on. As before it loads up fine, but instead of killing the vamps it kill the me.

PHP:
using System;
using System.Collections;
using Server;
using Server.Network;
using Server.Targeting;
using Server.Spells;
using Server.Mobiles;

namespace Server.Items
{
	public abstract class BaseHolyWater : BasePotion
	{
		public abstract int MinDamage { get; }
		public abstract int MaxDamage { get; }
		
		public override bool RequireFreeHand{ get{ return false; } }
		
		private static bool LeveledExplosion = false; // Should explosion potions explode other nearby potions?
		private static bool InstantExplosion = false; // Should explosion potions explode on impact?
		private const int   ExplosionRange   = 8;     // How long is the blast radius?
		
		public BaseHolyWater( PotionEffect effect ) : base( 0xF0D, effect )
		{
		}
		
		public BaseHolyWater( 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();
		}
		
		public virtual object FindParent( Mobile from )
		{
			Mobile m = this.HeldBy;
			
			if ( m != null && m.Holding == this )
				return m;
			
			object obj = this.RootParent;
			
			if ( obj != null )
				return obj;
			
			if ( Map == Map.Internal )
				return from;
			
			return this;
		}
		
		private Timer m_Timer;
		
		private ArrayList m_Users;
		
		public override void Drink( Mobile from )
		{
			if ( Core.AOS && (from.Paralyzed || from.Frozen || (from.Spell != null && from.Spell.IsCasting)) )
			{
				from.SendLocalizedMessage( 1062725 ); // You can not use a purple potion while paralyzed.
				return;
			}
			
			ThrowTarget targ = from.Target as ThrowTarget;
			
			if ( targ != null && targ.Potion == this )
				return;
			
			from.RevealingAction();
			
			if ( m_Users == null )
				m_Users = new ArrayList();
			
			if ( !m_Users.Contains( from ) )
				m_Users.Add( from );
			
			from.Target = new ThrowTarget( this );
			
			if ( m_Timer == null )
			{
				from.SendLocalizedMessage( 500236 ); // You should throw it now!
				m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 0.75 ), TimeSpan.FromSeconds( 1.0 ), 4, new TimerStateCallback( Detonate_OnTick ), new object[]{ from, 3 } );
			}
		}
		
		private void Detonate_OnTick( object state )
		{
			if ( Deleted )
				return;
			
			object[] states = (object[])state;
			Mobile from = (Mobile)states[0];
			int timer = (int)states[1];
			
			object parent = FindParent( from );
			
			if ( timer == 0 )
			{
				Point3D loc;
				Map map;
				
				if ( parent is Item )
				{
					Item item = (Item)parent;
					
					loc = item.GetWorldLocation();
					map = item.Map;
				}
				else if ( parent is Mobile )
				{
					Mobile m = (Mobile)parent;
					
					loc = m.Location;
					map = m.Map;
				}
				else
				{
					return;
				}
				
				Explode( from, true, loc, map );
			}
			else
			{
				if ( parent is Item )
					((Item)parent).PublicOverheadMessage( MessageType.Regular, 0x22, false, timer.ToString() );
				else if ( parent is Mobile )
					((Mobile)parent).PublicOverheadMessage( MessageType.Regular, 0x22, false, timer.ToString() );
				
				states[1] = timer - 1;
			}
		}
		
		private void Reposition_OnTick( object state )
		{
			if ( Deleted )
				return;
			
			object[] states = (object[])state;
			Mobile from = (Mobile)states[0];
			IPoint3D p = (IPoint3D)states[1];
			Map map = (Map)states[2];
			
			Point3D loc = new Point3D( p );
			
			if ( InstantExplosion )
				Explode( from, true, loc, map );
			else
				MoveToWorld( loc, map );
		}
		
		private class ThrowTarget : Target
		{
			private BaseHolyWater m_Potion;
			
			public BaseHolyWater Potion
			{
				get{ return m_Potion; }
			}
			
			public ThrowTarget( BaseHolyWater potion ) : base( 12, true, TargetFlags.None )
			{
				m_Potion = potion;
			}
			
			protected override void OnTarget( Mobile from, object targeted )
			{
				if ( m_Potion.Deleted || m_Potion.Map == Map.Internal )
					return;
				
				IPoint3D p = targeted as IPoint3D;
				
				if ( p == null )
					return;
				
				Map map = from.Map;
				
				if ( map == null )
					return;
				
				SpellHelper.GetSurfaceTop( ref p );
				
				from.RevealingAction();
				
				IEntity to;
				
				if ( p is Mobile )
					to = (Mobile)p;
				else
					to = new Entity( Serial.Zero, new Point3D( p ), map );
				
				Effects.SendMovingEffect( from, to, m_Potion.ItemID & 0x3FFF, 7, 0, false, false, m_Potion.Hue, 0 );
				
				m_Potion.Internalize();
				Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerStateCallback( m_Potion.Reposition_OnTick ), new object[]{ from, p, map } );
			}
		}
		
		public void Explode( Mobile from, bool direct, Point3D loc, Map map )
		{
			if ( Deleted )
				return;
			
			Delete();
			
			for ( int i = 0; m_Users != null && i < m_Users.Count; ++i )
			{
				Mobile m = (Mobile)m_Users[i];
				ThrowTarget targ = m.Target as ThrowTarget;
				
				if ( targ != null && targ.Potion == this )
					Target.Cancel( m );
			}
			
			if ( map == null )
				return;
			
			Effects.PlaySound( loc, map, 0x207 );
			Effects.SendLocationEffect( loc, map, 0x36BD, 20 );
			
			int alchemyBonus = 0;
			
			if ( direct )
				alchemyBonus = (int)(from.Skills.Alchemy.Value / (Core.AOS ? 5 : 10));
			
			IPooledEnumerable eable = LeveledExplosion ? map.GetObjectsInRange( loc, ExplosionRange ) : map.GetMobilesInRange( loc, ExplosionRange );
			ArrayList toExplode = new ArrayList();
			
			int toDamage = 0;
			
			foreach ( object o in eable )
			{
				if ( o is Mobile )
				{
					toExplode.Add( o );
					++toDamage;
				}
			}
			
			eable.Free();
			
			int min = Scale( from, MinDamage );
			int max = Scale( from, MaxDamage );
			
			for ( int i = 0; i < toExplode.Count; ++i )
			{
				object o = toExplode[i];
				
				if ( o is Mobile )
				{
					Mobile m = (Mobile)o;
					
					if ( from == null || (SpellHelper.ValidIndirectTarget( from, m ) && from.CanBeHarmful( m, false )) )
					{
						if  ( m is LesserVampire );
						{
							if ( from != null )
								from.DoHarmful( m );
							
							int damage = (int)m.HitsMax + 10;//Just kills them
							
							AOS.Damage( from, m, damage, 0, 100, 0, 0, 0 );
							m.FixedParticles( 0x3709, 1, 30, 9965, 5, 7, EffectLayer.Waist );
							m.PlaySound( 0x231 );
						}
						if ( m is Vampire || m is GreaterVampire );
						{
							if ( from != null )
								from.DoHarmful( m );
							
							int damage = (int)m.HitsMax / 10;   //Damage does 80% of their Max Hit Points...
							
							AOS.Damage( from, m, damage, 0, 100, 0, 0, 0 );
							m.FixedParticles( 0x3709, 1, 30, 9965, 5, 7, EffectLayer.Waist );
							m.PlaySound( 0x231 );
						}
					}
					else if ( o is BaseHolyWater )
					{
						BaseHolyWater pot = (BaseHolyWater)o;
						
						pot.Explode( from, false, pot.GetWorldLocation(), pot.Map );
					}
				}
			}
		}
	}
}
 

Packer898

Knight
Try switching these around...

Currently:
Code:
							AOS.Damage( [COLOR="Red"]from, m[/COLOR], damage, 0, 100, 0, 0, 0 );

Change it to...
Code:
							AOS.Damage( [COLOR="Red"]m, from[/COLOR], damage, 0, 100, 0, 0, 0 );
 

devil6

Wanderer
ok, did that.... still killing me. this might help.... but even if i use a Holywater on nothing it also kills me when it explodes
 
Top