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!

[RunUO 2.0 RC1] Xanthos Shrink System

X

Xanthos

Guest
Please read the readme carefully - it is well tested and working. If you still have problems - be explicit on what you did and the results you get - you don't give me much to go on.
 

Sentix

Wanderer
Well I just extracted everything as in the readme, on a clean install of runuo and all works fine, in shrinkconfig.xml petdetails is set to true, but all I see when I shrink a pet is: A shrunken pet, and if its bonded, I see a (bonded) under it
 

Johabius

Knight
I'm having that same issue, I'm testing right now to see if the problem only exists for custom pets, or all pets.
Same problem exists for regular unmodified horses as well.
 
D

DragonDan

Guest
Great System

Xanthos you have a great system so don't be sad if there is a few little bugs. We are all human and just have a problem when we try to do things because its inevitable our work will have a bug or two that's computers for you. Now you know why many computer programmers have nervous breakdowns or job burnout after 10 years or so! Keep at it my friend we know you will work it out and we still enjoy your system and will live with a few little quirks. Keep up the good work! :) :D
BTW for those of you that get the little ball for a shrunken pet here is an example how to make it all work. PM me if you need help always glad to help. Oh Mabuhay! from the Philippines! This place really is paradise. It was a big move but I love it here! Oh my example follows now :)
Code:
#ME Mobiles

265	0x2D8B
this is the code for a hydra the 265 is its body code and the 0x2D8B is the item id (don't forget to TAB from the body code to the item id! Have fun everyone!
 
D

DragonDan

Guest
I think I have kinda sorta solved the issue of not having the pets say more than "a shrunken pet". I could not accomplish this without adding to 2 lines of the script (sorry for altering your work) I have enclosed the following code to show you what I did to get the info gump to show itself. It's very nice now and my players are very happy with the change. I hope you appreciate my help with the quandry of no name for shrunken pet. I love your system and we have not had any problems with the system at all.
In the ShrinkItem.cs file
Look for line 70
Change this:
Code:
Name = "a shrunken pet";
To this:
Code:
Name = m_Name + "a shrunken pet";
Then look at line 240
Change this:
Code:
list.Add( 1060663, "Name\t{0} Breed: {1} Gender: {2}", m_Name,m_IsBonded, m_Breed, m_Gender );
To this:
Code:
list.Add( 1060663, "Name\t{0} Bonded: {1} Breed: {2} Gender: {3}", m_Name,m_IsBonded, m_Breed, m_Gender );
this is so it will display true or false if the pet is bonded.
If the details still don't display make sure this line in ShrinkConfig.xml in the C:\data folder looks like this:
Code:
<ShowPetDetails type="bool">true</ShowPetDetails>
Hope I did a good job. Always glad to help.
Daniel
 
X

Xanthos

Guest
Version 2.1 has been posted. This version fixes problems with the display of the pet name and properties.

- Fixed an overwritten value in ShrinkConfig.cs that caused ShowPetDetails to take on the wrong value.
- Bonded status and name now appear in the properties of the ShrinkItem when ShowPetDetails is false, otherwise the full pet details are shown.
 

munkie

Wanderer
I'm using this on a Pre-AOS shard, and the shrunken pets are only named "a shrunken pet". Is there anyway to make it show its stats? (I also enabled to show them, but i suspect this is aos and higher only?)
 

ABTOP

Sorceror
Hmmm Still bug. Please help fix it.
This lines
Code:
	public class LockShrinkItem : ContextMenuEntry
	{
		private Mobile m_From;
		private ShrinkItem m_ShrinkItem;

		public LockShrinkItem( Mobile from, ShrinkItem shrink ) : base( 2029, 5 )
		{
			m_From = from;
			m_ShrinkItem = shrink;
		}

		public override void OnClick()
		{
			m_ShrinkItem.Locked = true;
			m_From.SendMessage( 38, "You have locked this shrunken pet so only you can reclaim it." );
		}
	}

	public class UnLockShrinkItem : ContextMenuEntry
	{
		private Mobile m_From;
		private ShrinkItem m_ShrinkItem;

		public UnLockShrinkItem( Mobile from, ShrinkItem shrink ) : base( 2033, 5 )
		{
			m_From = from;
			m_ShrinkItem = shrink;
		}

		public override void OnClick()
		{
			m_ShrinkItem.Locked = false;
			m_From.SendMessage( 38, "You have unlocked this shrunken pet, now anyone can reclaim it as theirs." );
		}
	}
Whn i locked shrink pet and then make SingleClick i got menu UnLock but i cant lock when i make SinglClick on Unlocked pet nothing not happen...
So i can UnLock and cant lock....
This is full script
Code:
/**************************************
*Script Name: Xanthos's Shrink System *
*Author: Joeku AKA Demortris          *
*For use with RunUO 2.0               *
*Client Tested with: 5.0.2b           *
*Version: 1.17                        *
*Initial Release: 07/18/06            *
*Revision Date: 07/18/06              *
**************************************/

#region AuthorHeader
//
//	Shrink System version 1.16, by Xanthos
//
//
#endregion AuthorHeader

using System;
using Server;
using Server.Items;
using Server.Mobiles;
using Server.Targeting;
using System.Collections;
using System.Collections.Generic;
using Server.ContextMenus;
using Xanthos.Utilities;
using Xanthos.Interfaces;
using Server.Regions;

namespace Xanthos.Evo
{
	public class ShrinkItem : Item, IShrinkItem
	{
		// Persisted
		private bool m_IsStatuette;
		private bool m_Locked;
		private Mobile m_Owner;
		private BaseCreature m_Pet;

		// Not persisted; lazy loaded.
		private bool m_PropsLoaded;
		private string m_Breed;
		private string m_Gender;
		private bool m_IsBonded;
		private string m_Name;
		private int m_RawStr;
		private int m_RawDex;
		private int m_RawInt;
		private double m_Wrestling;
		private double m_Tactics;
		private double m_Anatomy;
		private double m_Poisoning;
		private double m_Magery;
		private double m_EvalInt;
		private double m_MagicResist;
		private double m_Meditation;
		private double m_Archery;
		private double m_Fencing;
		private double m_Macing;
		private double m_Swords;
		private double m_Parry;
		//private int m_EvoEp;
		//private int m_EvoStage;

		private bool m_IgnoreLockDown;	// Is only ever changed by staff

		[CommandProperty( AccessLevel.GameMaster )]
		public bool IsStatuette
		{
			get { return m_IsStatuette; }
			set
			{
				if ( null == ShrunkenPet )
				{
					ItemID = 0xFAA;
					Name = "unlinked shrink item!";
				}
				else if ( m_IsStatuette = value )
				{
					ItemID = ShrinkTable.Lookup( m_Pet );
					Name = "a shrunken pet";
				}
				else
				{
					ItemID = 0x14EF;
					Name = "a pet deed";
				}
			}
		}

		[CommandProperty( AccessLevel.GameMaster )]
		public bool IgnoreLockDown
		{
			get { return m_IgnoreLockDown; }
			set { m_IgnoreLockDown = value; InvalidateProperties(); }
		}

		[CommandProperty( AccessLevel.GameMaster )]
		public bool Locked
		{
			get { return m_Locked; }
			set { m_Locked = value; InvalidateProperties(); }
		}

		[CommandProperty( AccessLevel.GameMaster )]
		public Mobile Owner
		{
			get { return m_Owner; }
			set { m_Owner = value; InvalidateProperties(); }
		}

		[CommandProperty( AccessLevel.GameMaster )]
		public BaseCreature ShrunkenPet
		{
			get { return m_Pet; }
			set { m_Pet = value; InvalidateProperties(); }
		}

		public ShrinkItem() : base()
		{
		}

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

		public ShrinkItem( BaseCreature pet ) : this()
		{
			ShrinkPet( pet );
			IsStatuette = ShrinkConfig.PetAsStatuette;
			m_IgnoreLockDown = false; // This is only used to allow GMs to bypass the lockdown, one pet at a time.
			Weight = ShrinkConfig.ShrunkenWeight;

			//if ( !( m_Pet is Xanthos.Evo.Mercenary ))
				Hue = m_Pet.Hue;
		}

		public override void OnDoubleClick( Mobile from )
		{
			if ( !m_PropsLoaded )
				PreloadProperties();

			if ( !IsChildOf( from.Backpack ) )
				from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it.

			else if ( m_Pet == null || m_Pet.Deleted || ItemID == 0xFAA )
				from.SendMessage( "Due to unforseen circumstances your pet is lost forever." );

			else if ( m_Locked && m_Owner != from )
			{
				from.SendMessage( "This is locked and only the owner can claim this pet while locked." );
				from.SendMessage( "This item is now being returned to its owner." );
				m_Owner.AddToBackpack( this );
				m_Owner.SendMessage( "Your pet {0} has been returned to you because it was locked and {1} was trying to claim it.", m_Breed, from.Name );
			}
			else if ( from.Followers + m_Pet.ControlSlots > from.FollowersMax )
				from.SendMessage( "You have to many followers to claim this pet." );

			else if ( Server.Spells.SpellHelper.CheckCombat( from ) )
				from.SendMessage( "You cannot reclaim your pet while your fighting." );

			else if ( ShrinkCommands.LockDown == true && !m_IgnoreLockDown )
				from.SendMessage( 54, "The server is on a shrinkitem lockdown. You cannot unshrink your pet at this time." );

			else if ( !m_Pet.CanBeControlledBy( from ))
				from.SendMessage( "You do not have the required skills to control this pet.");

			else
				UnshrinkPet( from );
		}

		private void ShrinkPet( BaseCreature pet )
		{
			m_Pet = pet;
			m_Owner = pet.ControlMaster;
				
			if ( ShrinkConfig.LootStatus == ShrinkConfig.BlessStatus.All
				|| ( m_Pet.IsBonded && ShrinkConfig.LootStatus == ShrinkConfig.BlessStatus.BondedOnly ))
				LootType = LootType.Blessed;
			else
				LootType = LootType.Regular;

			m_Pet.Internalize();
			m_Pet.SetControlMaster( null );
			m_Pet.ControlOrder = OrderType.Stay;
			m_Pet.SummonMaster = null;
			m_Pet.IsStabled = true;

			//if ( pet is IEvoCreature )
				//((IEvoCreature)m_Pet).OnShrink( this );
		}

		private void UnshrinkPet( Mobile from )
		{
			m_Pet.SetControlMaster( from );
			m_Pet.IsStabled = false;
			m_Pet.MoveToWorld( from.Location, from.Map );
			if ( from != m_Owner )
				m_Pet.IsBonded = false;

			m_Pet = null;
			this.Delete();
		}

		// Summoning orb was used so dispose of the shrink item
		public void OnPetSummoned()
		{
			m_Pet = null;
			Delete();
		}

		public override void Delete()
		{
			if ( m_Pet != null )
				m_Pet.Delete();

			base.Delete();
		}

		public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
		{
			base.GetContextMenuEntries( from, list );

			if (( ShrinkConfig.AllowLocking || m_Locked == true ) && from.Alive && m_Owner == from )
			{
				if ( m_Locked == false )
					list.Add( new LockShrinkItem( from, this ) );
				else
					list.Add( new UnLockShrinkItem( from, this ) );
			}
		}

		public override void AddNameProperties( ObjectPropertyList list )
		{
			base.AddNameProperties( list );

			if ( null == m_Pet || m_Pet.Deleted )
				return;

			if ( !m_PropsLoaded )
				PreloadProperties();

			if ( m_IsBonded && ShrinkConfig.BlessStatus.None == ShrinkConfig.LootStatus )	// Only show bonded when the item is not blessed
				list.Add( 1049608 );

			if ( ShrinkConfig.AllowLocking || m_Locked )	// Only show lock status when locking enabled or already locked
				list.Add( 1049644, ( m_Locked == true ) ? "Locked" : "Unlocked" );
		
			if ( ShrinkConfig.ShowPetDetails )
			{
				list.Add( 1060663, "Name\t{0} Breed: {1} Gender: {2}", m_Name, m_Breed, m_Gender );
				list.Add( 1061640, ( null == m_Owner ) ? "nobody" : m_Owner.Name ); // Owner: ~1_OWNER~
				list.Add( 1060659, "Stats\tStrength {0}, Dexterity {1}, Intelligence {2}", m_RawStr, m_RawDex, m_RawInt );
				list.Add( 1060660, "Combat Skills\tWrestling {0}, Tactics {1}, Anatomy {2}, Poisoning {3}", m_Wrestling, m_Tactics, m_Anatomy, m_Poisoning );
				list.Add( 1060661, "Magic Skills\tMagery {0}, Eval Intel {1}, Magic Resist {2}, Meditation {3}", m_Magery, m_EvalInt, m_MagicResist, m_Meditation );
				if ( !( 0 == m_Parry && 0 == m_Archery ))
					list.Add( 1060661, "Weapon Skills\tArchery {0}, Fencing {1}, Macing {2}, Parry {3}, Swords {4}", m_Archery, m_Fencing, m_Macing, m_Parry, m_Swords );
				//if ( m_EvoEp > 0 )
					//list.Add( 1060662, "EP\t{0}, Stage: {1}", m_EvoEp, m_EvoStage + 1 );
			}
		}

		private void PreloadProperties()
		{
			if ( null == m_Pet )
				return;

			m_IsBonded = m_Pet.IsBonded;
			m_Name = m_Pet.Name;
			
			m_Gender = (m_Pet.Female ? "Female" : "Male");
			m_Breed = GetFormattedBreedString( m_Pet ); //m_Breed = Xanthos.Evo.BaseEvo.GetFormattedBreedString( m_Pet );
			m_RawStr = m_Pet.RawStr;
			m_RawDex = m_Pet.RawDex;
			m_RawInt = m_Pet.RawInt;
			m_Wrestling = m_Pet.Skills[SkillName.Wrestling].Base;
			m_Tactics = m_Pet.Skills[SkillName.Tactics].Base;
			m_Anatomy = m_Pet.Skills[SkillName.Anatomy].Base;
			m_Poisoning = m_Pet.Skills[SkillName.Poisoning].Base;
			m_Magery = m_Pet.Skills[SkillName.Magery].Base;
			m_EvalInt = m_Pet.Skills[SkillName.EvalInt].Base;
			m_MagicResist = m_Pet.Skills[SkillName.MagicResist].Base;
			m_Meditation = m_Pet.Skills[SkillName.Meditation].Base;
			m_Parry = m_Pet.Skills[SkillName.Parry].Base;
			m_Archery = m_Pet.Skills[SkillName.Archery].Base;
			m_Fencing = m_Pet.Skills[SkillName.Fencing].Base;
			m_Swords = m_Pet.Skills[SkillName.Swords].Base;
			m_Macing = m_Pet.Skills[SkillName.Macing].Base;

			//Xanthos.Evo.BaseEvo evo = m_Pet as Xanthos.Evo.BaseEvo;

			//if ( null != evo )
			//{
				//m_EvoEp = evo.Ep;
				//m_EvoStage = evo.Stage;
			//}

			m_PropsLoaded = true;
		}

		public static bool IsPackAnimal( BaseCreature pet )
		{
			if ( null == pet || pet.Deleted )
				return false;

			Type breed = pet.GetType();

			foreach ( Type packBreed in ShrinkConfig.PackAnimals )
				if ( packBreed == breed )
					return true;
	
			return false;
		}

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

			writer.Write( (int)0 ); // version
			writer.Write( m_IsStatuette );
			writer.Write( m_Locked );
			writer.Write( (Mobile)m_Owner );
			writer.Write( (Mobile)m_Pet );
		}

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

			switch ( reader.ReadInt() )
			{
				case 0:
				{
					m_IsStatuette = reader.ReadBool();
					m_Locked = reader.ReadBool();
					m_Owner = (PlayerMobile)reader.ReadMobile();
					m_Pet = (BaseCreature)reader.ReadMobile();

					if (null != m_Pet )
						m_Pet.IsStabled = true;

					break;
				}
			}
		}

		#region JOEKUADDITION
		public static string GetFormattedBreedString( BaseCreature pet )
		{
			string breed = pet.GetType().Name;

			int index = 0;

			while ( index < breed.Length )
			{
				if ( index > 0 && char.IsUpper( breed, index ) )
				{
					breed.Insert( index, " " );
					index++;
				}

				index++;
			}

			return breed;
		}
		#endregion JOEKUADDITION
	}

	public class LockShrinkItem : ContextMenuEntry
	{
		private Mobile m_From;
		private ShrinkItem m_ShrinkItem;

		public LockShrinkItem( Mobile from, ShrinkItem shrink ) : base( 2029, 5 )
		{
			m_From = from;
			m_ShrinkItem = shrink;
		}

		public override void OnClick()
		{
			m_ShrinkItem.Locked = true;
			m_From.SendMessage( 38, "You have locked this shrunken pet so only you can reclaim it." );
		}
	}

	public class UnLockShrinkItem : ContextMenuEntry
	{
		private Mobile m_From;
		private ShrinkItem m_ShrinkItem;

		public UnLockShrinkItem( Mobile from, ShrinkItem shrink ) : base( 2033, 5 )
		{
			m_From = from;
			m_ShrinkItem = shrink;
		}

		public override void OnClick()
		{
			m_ShrinkItem.Locked = false;
			m_From.SendMessage( 38, "You have unlocked this shrunken pet, now anyone can reclaim it as theirs." );
		}
	}

	public class ShrinkTarget : Target
	{
		private IShrinkTool m_ShrinkTool;

		public ShrinkTarget( Mobile from, IShrinkTool shrinkTool ) : base ( 10, false, TargetFlags.None )
		{
			m_ShrinkTool = shrinkTool;
			from.SendMessage( "Target the pet you wish to shrink." );
		}

		protected override void OnTarget( Mobile from, object target )
		{
			BaseCreature pet = target as BaseCreature;

			if ( target == from )
				from.SendMessage( "You cannot shrink yourself!" );

			else if ( target is Item )
				from.SendMessage( "You cannot shrink that!" );

			else if ( target is PlayerMobile )
				from.SendMessage( "That person gives you a dirty look!" );

			else if ( Server.Spells.SpellHelper.CheckCombat( from ) )
				from.SendMessage( "You cannot shrink your pet while you are fighting." );

			else if ( null == pet )
				from.SendMessage( "That is not a pet!" );

			else if (( pet.BodyValue == 400 || pet.BodyValue == 401 ) && pet.Controlled == false )
				from.SendMessage( "That person gives you a dirty look!" );

			else if ( pet.IsDeadPet )
				from.SendMessage( "You cannot shrink the dead!" );

			else if ( pet.Summoned )
				from.SendMessage( "You cannot shrink a summoned creature!" );

			else if ( pet.Combatant != null && pet.InRange( pet.Combatant, 12 ) && pet.Map == pet.Combatant.Map )
				from.SendMessage( "Your pet is fighting; you cannot shrink it yet." );

			else if ( pet.BodyMod != 0 )
				from.SendMessage( "You cannot shrink your pet while it is polymorphed." );

			else if ( pet.Controlled == false )
				from.SendMessage( "You cannot not shrink wild creatures." );

			else if ( pet.ControlMaster != from )
				from.SendMessage( "That is not your pet." );

			else if ( ShrinkItem.IsPackAnimal( pet ) && ( null != pet.Backpack && pet.Backpack.Items.Count > 0 ))
				from.SendMessage( "You must unload this pet's pack before it can be shrunk." );

			else
			{
				if ( pet.ControlMaster != from && !pet.Controlled )
				{
					SpawnEntry se = pet.Spawner as SpawnEntry;
					if ( se != null && se.UnlinkOnTaming )
					{
						pet.Spawner.Remove( this );
						pet.Spawner = null;
					}

					pet.CurrentWayPoint = null;
				
					pet.ControlMaster = from;
					pet.Controlled = true;
					pet.ControlTarget = null;
					pet.ControlOrder = OrderType.Come;
					pet.Guild = null;

					pet.Delta( MobileDelta.Noto );
				}

				IEntity p1 = new Entity( Serial.Zero, new Point3D( from.X, from.Y, from.Z ), from.Map );
				IEntity p2 = new Entity( Serial.Zero, new Point3D( from.X, from.Y, from.Z + 50 ), from.Map );

				Effects.SendMovingParticles( p2, p1, ShrinkTable.Lookup( pet ), 1, 0, true, false, 0, 3, 1153, 1, 0, EffectLayer.Head, 0x100 );
				from.PlaySound( 492 );
				from.AddToBackpack( new ShrinkItem( pet ) );

				if ( null != m_ShrinkTool && m_ShrinkTool.ShrinkCharges > 0 )
					m_ShrinkTool.ShrinkCharges--;
			}
		}
	}
}
 

AdminZin

Wanderer
Pet Leash

I am having a problem with the leash itself. Players can shrink anything without having to tame them:eek:. I think I was lucky and it was an admin playing that realized this. Not sure if any other players have found this. Anyone else using this on their shard may want to check it out. Myself I had never thought of trying to click on an untamed animal with my player char, but another admin did. Can anyone help with this problem. I can't seem to figure out what to do.
 

AdminZin

Wanderer
Please respond

I am posting another thread to get this back to the top of the list. I have not figured out what to do to make the pet leashes not automatically shrink an untamed pet. Please respond to my post. Someone, anyone!
 

Aaronski

Wanderer
making things blessed

i thought i did it right a few times but i cant seem to get it to bless everything that i shrink.Can someone help ive already moved to xml file to the dats folder then change the cs file to say"all" to make everything blessed but it still isnt working but the shard is compiling just fine.
 

AdminZin

Wanderer
Still waiting for answer

AdminZin;708053 said:
I am having a problem with the leash itself. Players can shrink anything without having to tame them:eek:. I think I was lucky and it was an admin playing that realized this. Not sure if any other players have found this. Anyone else using this on their shard may want to check it out. Myself I had never thought of trying to click on an untamed animal with my player char, but another admin did. Can anyone help with this problem. I can't seem to figure out what to do.

I still need an answer for this if anyone is out there. hehe. Please someone check into this. It has to be happening on other shards.
 

Murzin

Knight
you are wrong...

it is not a BUG it is a FEATURE purposefully scripted in.

Code:
bool isStaff = from.AccessLevel != AccessLevel.Player;

before you accuse someone of releasing buggy code, verify it is a bug and not a feature.
 

AdminZin

Wanderer
Murzin;719490 said:
you are wrong...

it is not a BUG it is a FEATURE purposefully scripted in.

Code:
bool isStaff = from.AccessLevel != AccessLevel.Player;

before you accuse someone of releasing buggy code, verify it is a bug and not a feature.

This was not an accusation this was just a problem I was having and I wanted some feedback. Sorry you got a problem with it seeing that you didn't even write this script. Get a life!
 

ElSagundo

Wanderer
cant get it to bless

can someone help me? I cant get it to bless pets after they are shrunk.I moved the file to data and changed the cs.file to say all and it still isnt blessing anything.
 
Top