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!

FS Grave Digger Quest / System

Camerous

Wanderer
Great script! I only have a few things to talk about.

First off my shard doesn't have alot of super high end items on it. Because of that all of my players had a hard time with this. Even with 5 people working together they wiped a few times on each boss.

1.) The rate of monsters appearing compaired to getting loot is way out of wack. I made a 100 use shovel and recorded what was dug up with those 100. Bare in mind this person has 120 mining skill.

52 paragons
16 regular mobs
18 scrolls
2 furs
12 sets of regeants.

So the ratio of monsters, pargons at that, is 52% of the time. % of monsters, including paragons, dug up is almost 70%. And only 2% of the time was any deco object dug up. Admins may want to edit this some so it's not so unbalanced.

2.) With the ratios above in effect the difficulty of the overall quest is way too high compaired to the reewards gained. If the admins have a shard like mine, where players are more normal and not over powerful, then your players will not only have alot of problems completing this quest but they will have alot of problems when they dig the stuff up.

Just a little heads up to the people thinking about putting this on their shard.
 

Greystar

Wanderer
Camerous said:
Great script! I only have a few things to talk about.

First off my shard doesn't have alot of super high end items on it. Because of that all of my players had a hard time with this. Even with 5 people working together they wiped a few times on each boss.

1.) The rate of monsters appearing compaired to getting loot is way out of wack. I made a 100 use shovel and recorded what was dug up with those 100. Bare in mind this person has 120 mining skill.

52 paragons
16 regular mobs
18 scrolls
2 furs
12 sets of regeants.

So the ratio of monsters, pargons at that, is 52% of the time. % of monsters, including paragons, dug up is almost 70%. And only 2% of the time was any deco object dug up. Admins may want to edit this some so it's not so unbalanced.

2.) With the ratios above in effect the difficulty of the overall quest is way too high compaired to the reewards gained. If the admins have a shard like mine, where players are more normal and not over powerful, then your players will not only have alot of problems completing this quest but they will have alot of problems when they dig the stuff up.

Just a little heads up to the people thinking about putting this on their shard.

Yah I noticed that most of the mobs he has spawn via the shovel are set to be paragons. That is an easy fix however, just find the spots in the script that sets IsParagon = true (or maybe its just Paragon = true), but either way its easy to fix. Also one of the things I had changed was all the .Base checks to .Value to make finding some of the stuff a bit easier if players are wearing x items of Mining or the shard is set up to use StatMods to skills (easy to do, just edit out one of the checks in AOS.cs). Well at anyrate you are correct with this Camerous, keep in mind however this I think was originally written to only be in felucca and on a shard with players who where "high powered"
 

AdminZin

Wanderer
x-y-z

Liam said:
GenGraveDiggerQuest.cs contains the following:
Code:
public static void CreateMobiles()
			{
				CreateMobilesFacet( Map.Trammel );
			}

Perhaps changing that to Felucca?

Are the x-y-z locations the same on both maps? If so this would problably work. I am just a little afraid of doing this without knowing about xyz locations.
 

Greystar

Wanderer
AdminZin said:
Are the x-y-z locations the same on both maps? If so this would problably work. I am just a little afraid of doing this without knowing about xyz locations.

setting this up on both maps probably wouldnt be a good idea, but it should work since the coords are the same on both Tram and Fel, except in Occlo/Haven then the coords are the same but the maps are different.
 

kilobit

Wanderer
I run a custom shard and i cant install this on the regular maps to see where i need to place the characters. Can someone tell me where to place everything like place the drunk (at any inn), or place the boyfriend at (a graveyard). Since i cant actually play the quest i would need to know what general are to place these in. Many thanks on the script if i can set it up right, hehe.
-Thanks
 

Fixxxer

Sorceror
Greystar said:
Yah I noticed that most of the mobs he has spawn via the shovel are set to be paragons. That is an easy fix however, just find the spots in the script that sets IsParagon = true (or maybe its just Paragon = true), but either way its easy to fix. Also one of the things I had changed was all the .Base checks to .Value to make finding some of the stuff a bit easier if players are wearing x items of Mining or the shard is set up to use StatMods to skills (easy to do, just edit out one of the checks in AOS.cs). Well at anyrate you are correct with this Camerous, keep in mind however this I think was originally written to only be in felucca and on a shard with players who where "high powered"

i was just wondering about changing the base checks to value checks, i looked through the AOS.cs but im not too sure what to edit out. with this system i really like it but i dont dig up anything but monsters, the only edit i did to the script was add more uses to the shovels.
 

razzles

Wanderer
Fixxxer said:
i was just wondering about changing the base checks to value checks, i looked through the AOS.cs but im not too sure what to edit out. with this system i really like it but i dont dig up anything but monsters, the only edit i did to the script was add more uses to the shovels.

I noticed in the gravediggershovel.cs script that the mining skill is checked for a value up to 150. If you have 150 or higher mining you'll never get anything other than monsters.
 

Fixxxer

Sorceror
razzles said:
I noticed in the gravediggershovel.cs script that the mining skill is checked for a value up to 150. If you have 150 or higher mining you'll never get anything other than monsters.


well even if i raise that which i have tried doing that too, i still dont get anything but monsters or nothing at all. what else could i adjust to have a better chance to get something, the way im looking at it is that if you have to go through the quest each time you get a shovel you should at least get something for your troubles. on my shard a player doing this quest would have one heck of a time, so i want to make it as almost a for sure thing that you wont just dig up more monsters and get nothing else. i have messed around with what i could even caused a few errors when restarting and i still see no difference.
 

seanandre

Sorceror
To this day I am STILL having problems puting this script on my shard. It doesn't seem to be compatible with the other scripts I run. I can only get it to work on a clean install of a shard without anything else on it. Still have yet to figure out what script(s) I'm using that are causing it to give errors.
 

razzles

Wanderer
Fixxxer said:
well even if i raise that which i have tried doing that too, i still dont get anything but monsters or nothing at all. what else could i adjust to have a better chance to get something, the way im looking at it is that if you have to go through the quest each time you get a shovel you should at least get something for your troubles. on my shard a player doing this quest would have one heck of a time, so i want to make it as almost a for sure thing that you wont just dig up more monsters and get nothing else. i have messed around with what i could even caused a few errors when restarting and i still see no difference.

Hmm.... I set my mining skill to 140 and was digging stuff up with no problem and with no mods to the script. When it was set to 200, I would dig up monsters or nothing at all. What is you mining skill at when you're trying to dig?
 

Fixxxer

Sorceror
razzles said:
Hmm.... I set my mining skill to 140 and was digging stuff up with no problem and with no mods to the script. When it was set to 200, I would dig up monsters or nothing at all. What is you mining skill at when you're trying to dig?



well at first i had it at 200 but then i lowered it to 100 and played around with it up to 1000 and down to 50. hehe maybe i just have really bad luck, cause i cant even get an artifact to drop after killing 1000 demonknights :D
 

Fixxxer

Sorceror
Still Not Getting Anything With Skill Over 80

im still not able to get anything unless i lower my skill to 80, i have adjusted the script where i thought the chances were but im thinking that i missed something. can someone help me please..

Gravediggershovel.cs
Code:
 using System;
using Server;
using Server.Gumps; 
using Server.Network; 
using Server.Misc; 
using Server.Mobiles;
using Server.Targeting;
using Server.Items;

namespace Server.Items
{
	public class GraveDiggersShovel : Item
	{
		private int m_Uses;
		private bool m_IsDigging;

		[CommandProperty( AccessLevel.GameMaster )]
		public int Uses
		{
			get{ return m_Uses; }
			set{ m_Uses = value; InvalidateProperties(); }
		}

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

		[Constructable]
		public GraveDiggersShovel() : base( 0xF39 )
		{
			Weight = 0.0;
			Hue = 1109;
			Name = "a grave diggers shovel";
			m_Uses = Utility.RandomList( 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 );
		}

		public override void AddNameProperties( ObjectPropertyList list )
		{
			base.AddNameProperties( list );
			list.Add( 1060662, "Uses\t{0}", m_Uses );
		}

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

		public override void OnDoubleClick( Mobile from )
		{
			if ( !IsChildOf (from.Backpack))
			{
				from.SendMessage( "You must have this in your backpack in order to dig." );
			}	
			if ( IsDigging != true )
			{
				from.Target = new GraveTarget( this, from );
				from.SendMessage( "What grave would you like it dig in." );
			}
			else
			{
				from.SendMessage( "You must wait to use this item again." );
			}
		}

		private static void GetRandomAOSStats( out int attributeCount, out int min, out int max )
		{
			int rnd = Utility.Random( 15 );

			if ( rnd < 2 )
			{
				attributeCount = Utility.RandomMinMax( 5, 9 );
				min = 50; max = 200;
			}
			else if ( rnd < 4 )
			{
				attributeCount = Utility.RandomMinMax( 4, 8 );
				min = 40; max = 80;
			}
			else if ( rnd < 6 )
			{
				attributeCount = Utility.RandomMinMax( 3, 6 );
				min = 30; max = 60;
			}
			else if ( rnd < 8 )
			{
				attributeCount = Utility.RandomMinMax( 2, 5 );
				min = 20; max = 50;
			}
			else if ( rnd < 10 )
			{
				attributeCount = Utility.RandomMinMax( 1, 4 );
				min = 10; max = 40;
			}
			else
			{
				attributeCount = 1;
				min = 10; max = 30;
			}
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );
			writer.Write( (int) 0 ); // version 

			writer.Write( m_Uses );
			writer.Write( m_IsDigging );
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );
			int version = reader.ReadInt();

			m_Uses = reader.ReadInt();
			m_IsDigging = reader.ReadBool();
		}

		private class DigTimer : Timer
		{ 
			private Mobile m_From;
			private GraveDiggersShovel m_Item;

			public DigTimer( Mobile from, GraveDiggersShovel shovel, TimeSpan duration ) : base( duration ) 
			{ 
				Priority = TimerPriority.OneSecond;
				m_From = from;
				m_Item = shovel;
			}

			protected override void OnTick() 
			{
				Item gem = Loot.RandomGem();
				Item reg = Loot.RandomPossibleReagent();

				Item equip;
				equip = Loot.RandomArmorOrShieldOrWeaponOrJewelry();

				if ( m_Item != null )
					m_Item.IsDigging = false;

				if ( equip is BaseWeapon )
				{
					BaseWeapon weapon = (BaseWeapon)equip;

					int attributeCount;
					int min, max;

					GetRandomAOSStats( out attributeCount, out min, out max );

					BaseRunicTool.ApplyAttributesTo( weapon, attributeCount, min, max );
				}
				else if ( equip is BaseArmor )
				{
					BaseArmor armor = (BaseArmor)equip;

					int attributeCount;
					int min, max;

					GetRandomAOSStats( out attributeCount, out min, out max );

					BaseRunicTool.ApplyAttributesTo( armor, attributeCount, min, max );
				}
				else if ( equip is BaseJewel )
				{
					int attributeCount;
					int min, max;

					GetRandomAOSStats( out attributeCount, out min, out max );

					BaseRunicTool.ApplyAttributesTo( (BaseJewel)equip, attributeCount, min, max );
				}

				if ( Utility.Random( 100 ) < 35 )
				{
					switch ( Utility.Random ( 15 ) )
					{
						case 0:
						Skeleton skel = new Skeleton();
						skel.Location = m_From.Location;
						skel.Map = m_From.Map;
						skel.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							skel.IsParagon = true;

        					World.AddMobile( skel );
						break;

						case 1:
						Ghoul ghoul = new Ghoul();
						ghoul.Location = m_From.Location;
						ghoul.Map = m_From.Map;
						ghoul.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							ghoul.IsParagon = true;

        					World.AddMobile( ghoul );
						break;

						case 2:
						Wraith wraith = new Wraith();
						wraith.Location = m_From.Location;
						wraith.Map = m_From.Map;
						wraith.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							wraith.IsParagon = true;

        					World.AddMobile( wraith );
						break;

						case 3:
						Lich lich = new Lich();
						lich.Location = m_From.Location;
						lich.Map = m_From.Map;
						lich.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							lich.IsParagon = true;

        					World.AddMobile( lich );
						break;

						case 4:
						LichLord lichl = new LichLord();
						lichl.Location = m_From.Location;
						lichl.Map = m_From.Map;
						lichl.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							lichl.IsParagon = true;

        					World.AddMobile( lichl );
						break;

						case 5:
						AncientLich alich = new AncientLich();
						alich.Location = m_From.Location;
						alich.Map = m_From.Map;
						alich.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							alich.IsParagon = true;

        					World.AddMobile( alich );
						break;

						case 6:
						Mummy mum = new Mummy();
						mum.Location = m_From.Location;
						mum.Map = m_From.Map;
						mum.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							mum.IsParagon = true;

        					World.AddMobile( mum );
						break;

						case 7:
						Zombie zom = new Zombie();
						zom.Location = m_From.Location;
						zom.Map = m_From.Map;
						zom.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							zom.IsParagon = true;

        					World.AddMobile( zom );
						break;

						case 8:
						SkeletalKnight sk = new SkeletalKnight();
						sk.Location = m_From.Location;
						sk.Map = m_From.Map;
						sk.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							sk.IsParagon = true;

        					World.AddMobile( sk );
						break;

						case 9:
						SkeletalMage sm = new SkeletalMage();
						sm.Location = m_From.Location;
						sm.Map = m_From.Map;
						sm.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							sm.IsParagon = true;

        					World.AddMobile( sm );
						break;

						case 10:
						BoneKnight bk = new BoneKnight();
						bk.Location = m_From.Location;
						bk.Map = m_From.Map;
						bk.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							bk.IsParagon = true;

        					World.AddMobile( bk );
						break;

						case 11:
						BoneMagi bm = new BoneMagi();
						bm.Location = m_From.Location;
						bm.Map = m_From.Map;
						bm.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							bm.IsParagon = true;

        					World.AddMobile( bm );
						break;

						case 12:
						Spectre spec = new Spectre();
						spec.Location = m_From.Location;
						spec.Map = m_From.Map;
						spec.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							spec.IsParagon = true;

        					World.AddMobile( spec );
						break;

						case 13:
						Shade shade = new Shade();
						shade.Location = m_From.Location;
						shade.Map = m_From.Map;
						shade.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							shade.IsParagon = true;

        					World.AddMobile( shade );
						break;

						case 14:
						Bogle bog = new Bogle();
						bog.Location = m_From.Location;
						bog.Map = m_From.Map;
						bog.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							bog.IsParagon = true;

        					World.AddMobile( bog );
						break;
					}
					m_From.SendMessage( "You have angered the spirits." );
				}
				else if ( m_From.Skills[SkillName.Mining].Base < 15.0 )
				{
					if ( Utility.Random( 100 ) < 55 )
					{
						m_From.SendMessage( "You fail to dig anything up." );
					}
					else
					{
						switch ( Utility.Random ( 3 ) )
						{
							case 0:
							m_From.AddToBackpack( gem );
							m_From.SendMessage( "You dig up a gem." );
							break;

							case 1:
							m_From.AddToBackpack( reg );
							m_From.SendMessage( "You dig up a reagent." );
							break;

							case 2:
							m_From.AddToBackpack( equip );
							m_From.SendMessage( "You dig up some equipment." );
							break;
						}
					}
				}
				else if ( m_From.Skills[SkillName.Mining].Base < 35.0 )
				{
					if ( Utility.Random( 100 ) < 45 )
					{
						m_From.SendMessage( "You fail to dig anything up." );
					}
					else
					{
						gem.Amount = Utility.RandomMinMax( 2, 4 );
						reg.Amount = Utility.RandomMinMax( 2, 4 );

						switch ( Utility.Random ( 5 ) )
						{
							case 0:
							m_From.AddToBackpack( gem );
							m_From.SendMessage( "You dig up some gems." );
							break;

							case 1:
							m_From.AddToBackpack( reg );
							m_From.SendMessage( "You dig up some reagents." );
							break;

							case 2:
							m_From.AddToBackpack( equip );
							m_From.SendMessage( "You dig up some equipment." );
							break;

							case 3:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 20, SpellbookType.Regular ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 4:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 5, SpellbookType.Necromancer ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;
						}
					}
				}
				else if ( m_From.Skills[SkillName.Mining].Base < 50.0 )
				{
					if ( Utility.Random( 100 ) < 35 )
					{
						m_From.SendMessage( "You fail to dig anything up." );
					}
					else
					{
						gem.Amount = Utility.RandomMinMax( 2, 10 );
						reg.Amount = Utility.RandomMinMax( 2, 10 );

						switch ( Utility.Random ( 6 ) )
						{
							case 0:
							m_From.AddToBackpack( gem );
							m_From.SendMessage( "You dig up some gems." );
							break;

							case 1:
							m_From.AddToBackpack( reg );
							m_From.SendMessage( "You dig up some reagents." );
							break;

							case 2:
							m_From.AddToBackpack( equip );
							m_From.SendMessage( "You dig up some equipment." );
							break;

							case 3:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 40, SpellbookType.Regular ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 4:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 10, SpellbookType.Necromancer ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 5:
							m_From.AddToBackpack( new Bones() );
							m_From.SendMessage( "You dig up a bones." );
							break;
						}
					}
				}
				else if ( m_From.Skills[SkillName.Mining].Base < 75.0 )
				{
					if ( Utility.Random( 100 ) < 25 )
					{
						m_From.SendMessage( "You fail to dig anything up." );
					}
					else
					{
						gem.Amount = Utility.RandomMinMax( 2, 20 );
						reg.Amount = Utility.RandomMinMax( 2, 20 );

						switch ( Utility.Random ( 7 ) )
						{
							case 0:
							m_From.AddToBackpack( gem );
							m_From.SendMessage( "You dig up some gems." );
							break;

							case 1:
							m_From.AddToBackpack( reg );
							m_From.SendMessage( "You dig up some reagents." );
							break;

							case 2:
							m_From.AddToBackpack( equip );
							m_From.SendMessage( "You dig up some equipment." );
							break;

							case 3:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 50, SpellbookType.Regular ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 4:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 13, SpellbookType.Necromancer ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;
	
							case 5:
							m_From.AddToBackpack( new Bones() );
							m_From.SendMessage( "You dig up a bones." );
							break;

							case 6:
							m_From.AddToBackpack( new BonePile() );
							m_From.SendMessage( "You dig up a bones." );
							break;
						}
					}
				}
				else if ( m_From.Skills[SkillName.Mining].Base < 90.0 )
				{
					if ( Utility.Random( 100 ) < 15 )
					{
						m_From.SendMessage( "You fail to dig anything up." );
					}
					else
					{
						gem.Amount = Utility.RandomMinMax( 2, 30 );
						reg.Amount = Utility.RandomMinMax( 2, 30 );

						switch ( Utility.Random ( 8 ) )
						{
							case 0:
							m_From.AddToBackpack( gem );
							m_From.SendMessage( "You dig up some gems." );
							break;

							case 1:
							m_From.AddToBackpack( reg );
							m_From.SendMessage( "You dig up some reagents." );
							break;

							case 2:
							m_From.AddToBackpack( equip );
							m_From.SendMessage( "You dig up some equipment." );
							break;

							case 3:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 63, SpellbookType.Regular ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 4:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 15, SpellbookType.Necromancer ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 5:
							m_From.AddToBackpack( new Bones() );
							m_From.SendMessage( "You dig up a bones." );
							break;

							case 6:
							m_From.AddToBackpack( new BonePile() );
							m_From.SendMessage( "You dig up a bones." );
							break;

							case 7:
							m_From.AddToBackpack( new GraveItem() );
							m_From.SendMessage( "You dig up an ancient artifact." );
							break;
						}
					}
				}
				else if ( m_From.Skills[SkillName.Mining].Base < 100.0)
				{
					if ( Utility.Random( 500 ) < 5 )
					{
						m_From.SendMessage( "You dig up and item of great value." );
						switch ( Utility.Random ( 5 ) )
						{
							case 0:
							m_From.AddToBackpack( new ArmoredRobe() );
							break;

							case 1:
							m_From.AddToBackpack( new ButchersResolve() );
							break;

							case 2:
							m_From.AddToBackpack( new FollowerOfTheOldLord() );
							break;

							case 3:
							m_From.AddToBackpack( new SkirtOfTheAmazon() );
							break;

							case 4:
							m_From.AddToBackpack( new HolyHammerOfExorcism() );
							break;
						}
					}
					else
					{
						gem.Amount = Utility.RandomMinMax( 2, 40 );
						reg.Amount = Utility.RandomMinMax( 2, 40 );

						switch ( Utility.Random ( 8 ) )
						{
							case 0:
							m_From.AddToBackpack( gem );
							m_From.SendMessage( "You dig up some gems." );
							break;

							case 1:
							m_From.AddToBackpack( reg );
							m_From.SendMessage( "You dig up some reagents." );
							break;

							case 2:
							m_From.AddToBackpack( equip );
							m_From.SendMessage( "You dig up some equipment." );
							break;

							case 3:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 63, SpellbookType.Regular ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 4:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 15, SpellbookType.Necromancer ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 5:
							m_From.AddToBackpack( new Bones() );
							m_From.SendMessage( "You dig up a bones." );
							break;

							case 6:
							m_From.AddToBackpack( new BonePile() );
							m_From.SendMessage( "You dig up a bones." );
							break;

							case 7:
							m_From.AddToBackpack( new GraveItem() );
							m_From.SendMessage( "You dig up an ancient artifact." );
							break;
						}
					}
				}
				else
				{
					m_From.SendMessage( "You fail to dig anything up." );
				}

				Stop();
			}
		}

		private class GraveTarget : Target
		{

			//Grave ItemIDs
			public static int[] m_Grave = new int[]
			{
				3795,
				3807,
				3808,
				3809,
				3810,
				3816
			
			};

			private GraveDiggersShovel m_Item;
			private Mobile m_From;

			public GraveTarget( GraveDiggersShovel item, Mobile from ) : base( 12, false, TargetFlags.None )
			{
				m_Item = item;
				m_From = from;
			}

			protected override void OnTarget( Mobile from, object targeted )
			{
				if ( targeted is Item )
				{
					Item i = (Item)targeted;

					bool isGrave = false;

					foreach ( int check in m_Grave )
					{
  						if ( check == i.ItemID )
    							isGrave = true;
					}
				
					if ( isGrave == true )
					{
						m_Item.Uses -= 1;
						if ( m_Item.Uses == 0 )
						{
							m_Item.Delete();
							if ( m_From != null )
								m_From.SendMessage( "Your shovel has broken." );
						}

						if ( m_From != null )
							m_From.SendMessage( "You start to dig." );

						DigTimer dt = new DigTimer( m_From, m_Item, TimeSpan.FromSeconds( 10.0 ) );
						dt.Start();
						m_From.PlaySound( Utility.RandomList( 0x125, 0x126 ) );
						m_From.Animate( 11, 1, 1, true, false, 0 );
						m_Item.IsDigging = true;
					}
					else
					{
						if ( m_From != null )
							m_From.SendMessage( "That is not a grave." );
					}

				}
				else if ( targeted is StaticTarget )
				{
					StaticTarget i = (StaticTarget)targeted;

					bool isGrave = false;

					foreach ( int check in m_Grave )
					{
  						if ( check == i.ItemID )
    							isGrave = true;
					}

					if ( isGrave == true )
					{
						m_Item.Uses -= 1;
						if ( m_Item.Uses <= 0 )
						{
							m_Item.Delete();
							if ( m_From != null )
								m_From.SendMessage( "Your shovel has broken." );
						}

						if ( m_From != null )
							m_From.SendMessage( "You start to dig." );

						DigTimer dt = new DigTimer( m_From, m_Item, TimeSpan.FromSeconds( 10.0 ) );
						dt.Start();
						m_From.PlaySound( Utility.RandomList( 0x125, 0x126 ) );
						m_From.Animate( 11, 1, 1, true, false, 0 );
						m_Item.IsDigging = true;
					}
				}
				else
				{
					m_From.SendMessage( "That is not a grave." );
				}
			}
		}
	}
}
 

koluch

Sorceror
A simple YES or NO

Has anyone had this system in and running for any length of time and then tried to remove it?


**Went to update the server a bit and wiped everything and everything else was fine, but that can not be removed :confused:
 

Gaea

Sorceror
Odd..I installed it quite awhile ago, and when I'd had it about 3 or 4 months, I took out ALL quests, and started adding them again from scratch. I removed it ok then, but i havent tried recently...
 

Fixxxer

Sorceror
Fixxxer said:
im still not able to get anything unless i lower my skill to 80, i have adjusted the script where i thought the chances were but im thinking that i missed something. can someone help me please..

Gravediggershovel.cs
Code:
 using System;
using Server;
using Server.Gumps; 
using Server.Network; 
using Server.Misc; 
using Server.Mobiles;
using Server.Targeting;
using Server.Items;

namespace Server.Items
{
	public class GraveDiggersShovel : Item
	{
		private int m_Uses;
		private bool m_IsDigging;

		[CommandProperty( AccessLevel.GameMaster )]
		public int Uses
		{
			get{ return m_Uses; }
			set{ m_Uses = value; InvalidateProperties(); }
		}

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

		[Constructable]
		public GraveDiggersShovel() : base( 0xF39 )
		{
			Weight = 0.0;
			Hue = 1109;
			Name = "a grave diggers shovel";
			m_Uses = Utility.RandomList( 5, 10, 15, 20, 25, 30, 35, 40, 45, 50 );
		}

		public override void AddNameProperties( ObjectPropertyList list )
		{
			base.AddNameProperties( list );
			list.Add( 1060662, "Uses\t{0}", m_Uses );
		}

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

		public override void OnDoubleClick( Mobile from )
		{
			if ( !IsChildOf (from.Backpack))
			{
				from.SendMessage( "You must have this in your backpack in order to dig." );
			}	
			if ( IsDigging != true )
			{
				from.Target = new GraveTarget( this, from );
				from.SendMessage( "What grave would you like it dig in." );
			}
			else
			{
				from.SendMessage( "You must wait to use this item again." );
			}
		}

		private static void GetRandomAOSStats( out int attributeCount, out int min, out int max )
		{
			int rnd = Utility.Random( 15 );

			if ( rnd < 2 )
			{
				attributeCount = Utility.RandomMinMax( 5, 9 );
				min = 50; max = 200;
			}
			else if ( rnd < 4 )
			{
				attributeCount = Utility.RandomMinMax( 4, 8 );
				min = 40; max = 80;
			}
			else if ( rnd < 6 )
			{
				attributeCount = Utility.RandomMinMax( 3, 6 );
				min = 30; max = 60;
			}
			else if ( rnd < 8 )
			{
				attributeCount = Utility.RandomMinMax( 2, 5 );
				min = 20; max = 50;
			}
			else if ( rnd < 10 )
			{
				attributeCount = Utility.RandomMinMax( 1, 4 );
				min = 10; max = 40;
			}
			else
			{
				attributeCount = 1;
				min = 10; max = 30;
			}
		}

		public override void Serialize( GenericWriter writer )
		{
			base.Serialize( writer );
			writer.Write( (int) 0 ); // version 

			writer.Write( m_Uses );
			writer.Write( m_IsDigging );
		}

		public override void Deserialize( GenericReader reader )
		{
			base.Deserialize( reader );
			int version = reader.ReadInt();

			m_Uses = reader.ReadInt();
			m_IsDigging = reader.ReadBool();
		}

		private class DigTimer : Timer
		{ 
			private Mobile m_From;
			private GraveDiggersShovel m_Item;

			public DigTimer( Mobile from, GraveDiggersShovel shovel, TimeSpan duration ) : base( duration ) 
			{ 
				Priority = TimerPriority.OneSecond;
				m_From = from;
				m_Item = shovel;
			}

			protected override void OnTick() 
			{
				Item gem = Loot.RandomGem();
				Item reg = Loot.RandomPossibleReagent();

				Item equip;
				equip = Loot.RandomArmorOrShieldOrWeaponOrJewelry();

				if ( m_Item != null )
					m_Item.IsDigging = false;

				if ( equip is BaseWeapon )
				{
					BaseWeapon weapon = (BaseWeapon)equip;

					int attributeCount;
					int min, max;

					GetRandomAOSStats( out attributeCount, out min, out max );

					BaseRunicTool.ApplyAttributesTo( weapon, attributeCount, min, max );
				}
				else if ( equip is BaseArmor )
				{
					BaseArmor armor = (BaseArmor)equip;

					int attributeCount;
					int min, max;

					GetRandomAOSStats( out attributeCount, out min, out max );

					BaseRunicTool.ApplyAttributesTo( armor, attributeCount, min, max );
				}
				else if ( equip is BaseJewel )
				{
					int attributeCount;
					int min, max;

					GetRandomAOSStats( out attributeCount, out min, out max );

					BaseRunicTool.ApplyAttributesTo( (BaseJewel)equip, attributeCount, min, max );
				}

				if ( Utility.Random( 100 ) < 35 )
				{
					switch ( Utility.Random ( 15 ) )
					{
						case 0:
						Skeleton skel = new Skeleton();
						skel.Location = m_From.Location;
						skel.Map = m_From.Map;
						skel.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							skel.IsParagon = true;

        					World.AddMobile( skel );
						break;

						case 1:
						Ghoul ghoul = new Ghoul();
						ghoul.Location = m_From.Location;
						ghoul.Map = m_From.Map;
						ghoul.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							ghoul.IsParagon = true;

        					World.AddMobile( ghoul );
						break;

						case 2:
						Wraith wraith = new Wraith();
						wraith.Location = m_From.Location;
						wraith.Map = m_From.Map;
						wraith.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							wraith.IsParagon = true;

        					World.AddMobile( wraith );
						break;

						case 3:
						Lich lich = new Lich();
						lich.Location = m_From.Location;
						lich.Map = m_From.Map;
						lich.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							lich.IsParagon = true;

        					World.AddMobile( lich );
						break;

						case 4:
						LichLord lichl = new LichLord();
						lichl.Location = m_From.Location;
						lichl.Map = m_From.Map;
						lichl.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							lichl.IsParagon = true;

        					World.AddMobile( lichl );
						break;

						case 5:
						AncientLich alich = new AncientLich();
						alich.Location = m_From.Location;
						alich.Map = m_From.Map;
						alich.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							alich.IsParagon = true;

        					World.AddMobile( alich );
						break;

						case 6:
						Mummy mum = new Mummy();
						mum.Location = m_From.Location;
						mum.Map = m_From.Map;
						mum.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							mum.IsParagon = true;

        					World.AddMobile( mum );
						break;

						case 7:
						Zombie zom = new Zombie();
						zom.Location = m_From.Location;
						zom.Map = m_From.Map;
						zom.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							zom.IsParagon = true;

        					World.AddMobile( zom );
						break;

						case 8:
						SkeletalKnight sk = new SkeletalKnight();
						sk.Location = m_From.Location;
						sk.Map = m_From.Map;
						sk.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							sk.IsParagon = true;

        					World.AddMobile( sk );
						break;

						case 9:
						SkeletalMage sm = new SkeletalMage();
						sm.Location = m_From.Location;
						sm.Map = m_From.Map;
						sm.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							sm.IsParagon = true;

        					World.AddMobile( sm );
						break;

						case 10:
						BoneKnight bk = new BoneKnight();
						bk.Location = m_From.Location;
						bk.Map = m_From.Map;
						bk.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							bk.IsParagon = true;

        					World.AddMobile( bk );
						break;

						case 11:
						BoneMagi bm = new BoneMagi();
						bm.Location = m_From.Location;
						bm.Map = m_From.Map;
						bm.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							bm.IsParagon = true;

        					World.AddMobile( bm );
						break;

						case 12:
						Spectre spec = new Spectre();
						spec.Location = m_From.Location;
						spec.Map = m_From.Map;
						spec.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							spec.IsParagon = true;

        					World.AddMobile( spec );
						break;

						case 13:
						Shade shade = new Shade();
						shade.Location = m_From.Location;
						shade.Map = m_From.Map;
						shade.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							shade.IsParagon = true;

        					World.AddMobile( shade );
						break;

						case 14:
						Bogle bog = new Bogle();
						bog.Location = m_From.Location;
						bog.Map = m_From.Map;
						bog.Combatant = m_From;

						if ( Utility.Random( 100 ) < 50 )
							bog.IsParagon = true;

        					World.AddMobile( bog );
						break;
					}
					m_From.SendMessage( "You have angered the spirits." );
				}
				else if ( m_From.Skills[SkillName.Mining].Base < 15.0 )
				{
					if ( Utility.Random( 100 ) < 55 )
					{
						m_From.SendMessage( "You fail to dig anything up." );
					}
					else
					{
						switch ( Utility.Random ( 3 ) )
						{
							case 0:
							m_From.AddToBackpack( gem );
							m_From.SendMessage( "You dig up a gem." );
							break;

							case 1:
							m_From.AddToBackpack( reg );
							m_From.SendMessage( "You dig up a reagent." );
							break;

							case 2:
							m_From.AddToBackpack( equip );
							m_From.SendMessage( "You dig up some equipment." );
							break;
						}
					}
				}
				else if ( m_From.Skills[SkillName.Mining].Base < 35.0 )
				{
					if ( Utility.Random( 100 ) < 45 )
					{
						m_From.SendMessage( "You fail to dig anything up." );
					}
					else
					{
						gem.Amount = Utility.RandomMinMax( 2, 4 );
						reg.Amount = Utility.RandomMinMax( 2, 4 );

						switch ( Utility.Random ( 5 ) )
						{
							case 0:
							m_From.AddToBackpack( gem );
							m_From.SendMessage( "You dig up some gems." );
							break;

							case 1:
							m_From.AddToBackpack( reg );
							m_From.SendMessage( "You dig up some reagents." );
							break;

							case 2:
							m_From.AddToBackpack( equip );
							m_From.SendMessage( "You dig up some equipment." );
							break;

							case 3:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 20, SpellbookType.Regular ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 4:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 5, SpellbookType.Necromancer ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;
						}
					}
				}
				else if ( m_From.Skills[SkillName.Mining].Base < 50.0 )
				{
					if ( Utility.Random( 100 ) < 35 )
					{
						m_From.SendMessage( "You fail to dig anything up." );
					}
					else
					{
						gem.Amount = Utility.RandomMinMax( 2, 10 );
						reg.Amount = Utility.RandomMinMax( 2, 10 );

						switch ( Utility.Random ( 6 ) )
						{
							case 0:
							m_From.AddToBackpack( gem );
							m_From.SendMessage( "You dig up some gems." );
							break;

							case 1:
							m_From.AddToBackpack( reg );
							m_From.SendMessage( "You dig up some reagents." );
							break;

							case 2:
							m_From.AddToBackpack( equip );
							m_From.SendMessage( "You dig up some equipment." );
							break;

							case 3:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 40, SpellbookType.Regular ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 4:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 10, SpellbookType.Necromancer ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 5:
							m_From.AddToBackpack( new Bones() );
							m_From.SendMessage( "You dig up a bones." );
							break;
						}
					}
				}
				else if ( m_From.Skills[SkillName.Mining].Base < 75.0 )
				{
					if ( Utility.Random( 100 ) < 25 )
					{
						m_From.SendMessage( "You fail to dig anything up." );
					}
					else
					{
						gem.Amount = Utility.RandomMinMax( 2, 20 );
						reg.Amount = Utility.RandomMinMax( 2, 20 );

						switch ( Utility.Random ( 7 ) )
						{
							case 0:
							m_From.AddToBackpack( gem );
							m_From.SendMessage( "You dig up some gems." );
							break;

							case 1:
							m_From.AddToBackpack( reg );
							m_From.SendMessage( "You dig up some reagents." );
							break;

							case 2:
							m_From.AddToBackpack( equip );
							m_From.SendMessage( "You dig up some equipment." );
							break;

							case 3:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 50, SpellbookType.Regular ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 4:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 13, SpellbookType.Necromancer ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;
	
							case 5:
							m_From.AddToBackpack( new Bones() );
							m_From.SendMessage( "You dig up a bones." );
							break;

							case 6:
							m_From.AddToBackpack( new BonePile() );
							m_From.SendMessage( "You dig up a bones." );
							break;
						}
					}
				}
				else if ( m_From.Skills[SkillName.Mining].Base < 90.0 )
				{
					if ( Utility.Random( 100 ) < 15 )
					{
						m_From.SendMessage( "You fail to dig anything up." );
					}
					else
					{
						gem.Amount = Utility.RandomMinMax( 2, 30 );
						reg.Amount = Utility.RandomMinMax( 2, 30 );

						switch ( Utility.Random ( 8 ) )
						{
							case 0:
							m_From.AddToBackpack( gem );
							m_From.SendMessage( "You dig up some gems." );
							break;

							case 1:
							m_From.AddToBackpack( reg );
							m_From.SendMessage( "You dig up some reagents." );
							break;

							case 2:
							m_From.AddToBackpack( equip );
							m_From.SendMessage( "You dig up some equipment." );
							break;

							case 3:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 63, SpellbookType.Regular ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 4:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 15, SpellbookType.Necromancer ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 5:
							m_From.AddToBackpack( new Bones() );
							m_From.SendMessage( "You dig up a bones." );
							break;

							case 6:
							m_From.AddToBackpack( new BonePile() );
							m_From.SendMessage( "You dig up a bones." );
							break;

							case 7:
							m_From.AddToBackpack( new GraveItem() );
							m_From.SendMessage( "You dig up an ancient artifact." );
							break;
						}
					}
				}
				else if ( m_From.Skills[SkillName.Mining].Base < 100.0)
				{
					if ( Utility.Random( 500 ) < 5 )
					{
						m_From.SendMessage( "You dig up and item of great value." );
						switch ( Utility.Random ( 5 ) )
						{
							case 0:
							m_From.AddToBackpack( new ArmoredRobe() );
							break;

							case 1:
							m_From.AddToBackpack( new ButchersResolve() );
							break;

							case 2:
							m_From.AddToBackpack( new FollowerOfTheOldLord() );
							break;

							case 3:
							m_From.AddToBackpack( new SkirtOfTheAmazon() );
							break;

							case 4:
							m_From.AddToBackpack( new HolyHammerOfExorcism() );
							break;
						}
					}
					else
					{
						gem.Amount = Utility.RandomMinMax( 2, 40 );
						reg.Amount = Utility.RandomMinMax( 2, 40 );

						switch ( Utility.Random ( 8 ) )
						{
							case 0:
							m_From.AddToBackpack( gem );
							m_From.SendMessage( "You dig up some gems." );
							break;

							case 1:
							m_From.AddToBackpack( reg );
							m_From.SendMessage( "You dig up some reagents." );
							break;

							case 2:
							m_From.AddToBackpack( equip );
							m_From.SendMessage( "You dig up some equipment." );
							break;

							case 3:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 63, SpellbookType.Regular ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 4:
							m_From.AddToBackpack( Loot.RandomScroll( 0, 15, SpellbookType.Necromancer ) );
							m_From.SendMessage( "You dig up a scroll." );
							break;

							case 5:
							m_From.AddToBackpack( new Bones() );
							m_From.SendMessage( "You dig up a bones." );
							break;

							case 6:
							m_From.AddToBackpack( new BonePile() );
							m_From.SendMessage( "You dig up a bones." );
							break;

							case 7:
							m_From.AddToBackpack( new GraveItem() );
							m_From.SendMessage( "You dig up an ancient artifact." );
							break;
						}
					}
				}
				else
				{
					m_From.SendMessage( "You fail to dig anything up." );
				}

				Stop();
			}
		}

		private class GraveTarget : Target
		{

			//Grave ItemIDs
			public static int[] m_Grave = new int[]
			{
				3795,
				3807,
				3808,
				3809,
				3810,
				3816
			
			};

			private GraveDiggersShovel m_Item;
			private Mobile m_From;

			public GraveTarget( GraveDiggersShovel item, Mobile from ) : base( 12, false, TargetFlags.None )
			{
				m_Item = item;
				m_From = from;
			}

			protected override void OnTarget( Mobile from, object targeted )
			{
				if ( targeted is Item )
				{
					Item i = (Item)targeted;

					bool isGrave = false;

					foreach ( int check in m_Grave )
					{
  						if ( check == i.ItemID )
    							isGrave = true;
					}
				
					if ( isGrave == true )
					{
						m_Item.Uses -= 1;
						if ( m_Item.Uses == 0 )
						{
							m_Item.Delete();
							if ( m_From != null )
								m_From.SendMessage( "Your shovel has broken." );
						}

						if ( m_From != null )
							m_From.SendMessage( "You start to dig." );

						DigTimer dt = new DigTimer( m_From, m_Item, TimeSpan.FromSeconds( 10.0 ) );
						dt.Start();
						m_From.PlaySound( Utility.RandomList( 0x125, 0x126 ) );
						m_From.Animate( 11, 1, 1, true, false, 0 );
						m_Item.IsDigging = true;
					}
					else
					{
						if ( m_From != null )
							m_From.SendMessage( "That is not a grave." );
					}

				}
				else if ( targeted is StaticTarget )
				{
					StaticTarget i = (StaticTarget)targeted;

					bool isGrave = false;

					foreach ( int check in m_Grave )
					{
  						if ( check == i.ItemID )
    							isGrave = true;
					}

					if ( isGrave == true )
					{
						m_Item.Uses -= 1;
						if ( m_Item.Uses <= 0 )
						{
							m_Item.Delete();
							if ( m_From != null )
								m_From.SendMessage( "Your shovel has broken." );
						}

						if ( m_From != null )
							m_From.SendMessage( "You start to dig." );

						DigTimer dt = new DigTimer( m_From, m_Item, TimeSpan.FromSeconds( 10.0 ) );
						dt.Start();
						m_From.PlaySound( Utility.RandomList( 0x125, 0x126 ) );
						m_From.Animate( 11, 1, 1, true, false, 0 );
						m_Item.IsDigging = true;
					}
				}
				else
				{
					m_From.SendMessage( "That is not a grave." );
				}
			}
		}
	}
}


any help here?
 

mehla

Sorceror
Has anyone noticed that this quest seems to no longer work after 5.0.2 patch? Seems no players can run the event anymore...

*shrug*
 

koluch

Sorceror
Can't Remove Quest

Even after full server wipe( only things kept were players and their accounts )
Code:
Verifying scripts: done (2248 items, 665 mobiles)
World: Loading...failed
Error: Type 'Server.Engines.Quests.TheGraveDigger.TheDrunk' was not found. Delet
e all of those types? (y/n)
y
World: Loading...failed
Error: Type 'Server.Engines.Quests.TheGraveDigger.Vincent' was not found. Delete
 all of those types? (y/n)
y
World: Loading...failed
Error: Type 'Server.Engines.Quests.TheGraveDigger.Linda' was not found. Delete a
ll of those types? (y/n)
y
World: Loading...failed
Error: Type 'Server.Engines.Quests.TheGraveDigger.LindasBoyfriend' was not found
. Delete all of those types? (y/n)
y
World: Loading...failed
Error: Type 'Server.Engines.Quests.TheGraveDigger.BloodLich' was not found. Dele
te all of those types? (y/n)
y
World: Loading...failed
Error: Type 'Server.Engines.Quests.TheGraveDigger.YeastFarmer' was not found. De
lete all of those types? (y/n)
y
World: Loading...failed
Error: Type 'Server.Engines.Quests.TheGraveDigger.LordYoshimitsu' was not found.
 Delete all of those types? (y/n)
y
World: Loading...failed
Error: Type 'Server.Engines.Quests.TheGraveDigger.Bacchus' was not found. Delete
 all of those types? (y/n)
y
World: Loading...failed to load mobile: System.ArgumentOutOfRangeException: Tick
s must be between DateTime.MinValue.Ticks and DateTime.MaxValue.Ticks.
Parameter name: ticks
   at System.DateTime..ctor(Int64 ticks)
   at System.DateTime.op_Addition(DateTime d, TimeSpan t)
   at Server.Mobiles.PlayerMobile.set_SavagePaintExpiration(TimeSpan value)
   at Server.Mobiles.PlayerMobile.Deserialize(GenericReader reader)
   at Server.World.Load()
An error was encountered while loading a saved object
 - Type: Server.Mobiles.PlayerMobile
 - Serial: 0x00006CD6
Delete the object? (y/n)
Everything, again, was removed from the server except this Quest, which continually gives the delete player mobile if taken out.
?? Reference to savage paint??
I'd appreciate any thoughts on this, thanks!
 
Top