Great System
BTW for those of you that get the little ball for a shrunken pet here is an example how to make it all work.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!Code:#ME Mobiles 265 0x2D8B
[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 = m_Name + "a shrunken pet";
}
else
{
ItemID = 0x14EF;
Name = "a pet deed";
}
}
}
Tried doing it that way but the name still didnt show up. instead of using m_Name I used m_Pet.Name and it worked fine for me, seems the m_Name doesnt get defined till later on in the script.For those that are still having issues with shrunken pets showing up as "A Shrunken Pet", make sure your public bool IsStatuette looks like this:
Code:[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 = m_Name + "a shrunken pet"; } else { ItemID = 0x14EF; Name = "a pet deed"; } } }
[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 = m_Pet.Name + ": a shrunken pet";
}
else
{
ItemID = 0x14EF;
Name = "a pet deed";
}
}
}
Someone could of cleaned it off the InternalMap (tons of stuff that try to "clean" the internal map) or something else. Tracking down the specific issue would be a fun journey. Would be easier to simply store the pets in your own temp database or something, too much stuff tries to rely on storing stuff on the internal map...pretty bad practices.
AddLabel( 205, 180, NewsGump.kDataColor, (( state.Flags & 0x10 ) != 0 ) ? "Samurai Empire" : (( state.Flags & 0x08 ) != 0) ? "Age of Shadows" : (( state.Flags & 0x04 ) != 0) ? "Blackthorn's Revenge" : (( state.Flags & 0x02 ) != 0 ) ? "Third Dawn" : (( state.Flags & 0x01 ) != 0 ) ? "Renaissance" : "The Second Age" );
AddLabel( 205, 180, NewsGump.kDataColor, (( state.Flags & ClientFlags.Tokuno ) != 0 ) ? "Samurai Empire" : (( state.Flags & ClientFlags.Malas ) != 0) ? "Age of Shadows" : (( state.Flags & ClientFlags.Ilshenar ) != 0) ? "Blackthorn's Revenge" : (( state.Flags & ClientFlags.Trammel ) != 0 ) ? "Third Dawn" : (( state.Flags & ClientFlags.Felucca ) != 0 ) ? "Renaissance" : "The Second Age" );
using System;
using Server.Items;
using Server.Mobiles;
using Server.Regions;
using Server.Targeting;
using Xanthos.Interfaces;
using Xanthos.ShrinkSystem;
namespace Server.Items
{
public class ShrinkPotion : Item
{
[Constructable]
public ShrinkPotion() : base( 0xF04 )
{
Name="a Shrink Potion";
}
public override void OnDoubleClick( Mobile from )
{
if ( !Movable )
return;
else if( from.InRange( this.GetWorldLocation(), 2 ) == false )
{
from.SendLocalizedMessage( 500486 ); //That is too far away.
return;
}
Container pack = from.Backpack;
if ( !(Parent == from || ( pack != null && Parent == pack )) ) //If not in pack.
{
from.SendLocalizedMessage( 1042001 ); //That must be in your pack to use it.
return;
}
from.Target=new ShrinkPotionTarget( this );
from.SendMessage( "What do you wish to shrink?" );
}
private class ShrinkPotionTarget : Target
{
private ShrinkPotion m_Potion;
public ShrinkPotionTarget( Item i ) : base( 3, false, TargetFlags.None )
{
m_Potion=(ShrinkPotion)i;
}
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 BaseEscortable)
from.SendMessage("That person gives you a dirty look.");
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 ( !(m_Potion.Deleted) )
{
if ( pet.ControlMaster != from && !pet.Controlled )
{
SpawnEntry se = pet.Spawner as SpawnEntry;
if ( se != null && se.UnlinkOnTaming )
{
pet.Spawner.Remove( (ISpawnable)pet );
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 ) );
m_Potion.Delete();
}
return;
}
}
#region Serialization
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public ShrinkPotion( Serial serial ) : base( serial )
{
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
#endregion
}
}
Ive been having problems with "Your pet is lost forever" what the hells with that?