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 Shrink System w/ Taming Craft

W

walmart

Guest
ok why i get error you see error well this what happens can be on game for 2 hours 3hrs 1hrs 4hrs then bingo shard crashes and thats the crash log also shows it in runuo window so if you see its saying something about shrink item i had to take the scripts all out no more crashes you probably dont crash cause on my shard lots player on an always shrinking pets
 

Twlizer

Sorceror
Code:
[/CODE]
Scripts: Compiling C# scripts...done (0 errors, 0 warnings)
Scripts: Compiling VB.net scripts...no files found.
Scripts: Verifying...done (2521 items, 553 mobiles)
World: Loading...An error was encountered while loading a saved object
- Type: Server.Mobiles.PlayerMobile
- Serial: 0x0000720C
Delete the object? (y/n)
n
After pressing return an exception will be thrown and the server will terminate

Error:
System.Exception: Load failed (items=False, mobiles=True, guilds=False, regions=
False, type=Server.Mobiles.PlayerMobile, serial=0x0000720C) ---> System.Exceptio
n: ***** Bad serialize on Server.Mobiles.PlayerMobile *****
at Server.World.Load()
--- End of inner exception stack trace ---
at Server.World.Load()
at Server.ScriptCompiler.Compile(Boolean debug)
at Server.Core.Main(String[] args)
This exception is fatal, press return to exit
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
MyplayerMobile
Code:
using System;
using System.Collections;
using Server;
using Server.Misc;
using Server.Items;
using Server.Gumps;
using Server.Multis;
using Server.Engines.Help;
using Server.ContextMenus;
using Server.Network;
using Server.Spells;
using Server.Spells.Fifth;
using Server.Spells.Seventh;
using Server.Targeting;
using Server.Engines.Quests;

// FACTION SYSTEM BEGIN
using Server.Factions;
// FACTION SYSTEM END


namespace Server.Mobiles
{
[Flags]
public enum PlayerFlag // First 16 bits are reserved for default-distro use, start custom flags at 0x00010000
{
None = 0x00000000,
Glassblowing = 0x00000001,
Masonry = 0x00000002,
SandMining = 0x00000004,
StoneMining = 0x00000008,
ToggleMiningStone = 0x00000010,
KarmaLocked = 0x00000020,
AutoRenewInsurance = 0x00000040,
UseOwnFilter = 0x00000080,
PublicMyRunUO = 0x00000100,
PagingSquelched = 0x00000200
}

public enum NpcGuild
{
None,
MagesGuild,
WarriorsGuild,
ThievesGuild,
RangersGuild,
HealersGuild,
MinersGuild,
MerchantsGuild,
TinkersGuild,
TailorsGuild,
FishermensGuild,
BardsGuild,
BlacksmithsGuild
}

public class PlayerMobile : Mobile
{
private class CountAndTimeStamp
{
private int m_Count;
private DateTime m_Stamp;

public CountAndTimeStamp()
{
}

public DateTime TimeStamp { get{ return m_Stamp; } }
public int Count 
{ 
get { return m_Count; } 
set { m_Count = value; m_Stamp = DateTime.Now; } 
}
}

private DesignContext m_DesignContext;

// FACTION SYSTEM BEGIN
private MainControlStone MC;
public ArrayList m_Macro = new ArrayList();
// FACTION SYSTEM END 


private NpcGuild m_NpcGuild;
private DateTime m_NpcGuildJoinTime;
private TimeSpan m_NpcGuildGameTime;
private PlayerFlag m_Flags;
private int m_StepsTaken;
private int m_Profession;


// FACTION SYSTEM BEGIN
private ArrayList killers = new ArrayList();
private bool m_FactionKill;
public int m_MaxSlots;
private int minPoints = -6;
public bool m_Leaving;
public DateTime BC = DateTime.Now;
public bool CMsg = false;

private DateTime m_NextStatRaise = DateTime.Now;

private Faction m_Faction;
private int m_Points;
private int m_Rank;
private int m_Votes;
private Sigil m_Sigil;

private bool m_Candidate;
private bool m_Voted;
private bool m_ColorWars;

private int m_ResKill;

private DateTime m_StartDate;
private DateTime m_Join;
private DateTime m_Left;
private DateTime m_GivePoints;

private ArrayList m_PurpleTizedItems;
// FACTION SYSTEM END

[CommandProperty( AccessLevel.GameMaster )]
public int Profession
{
get{ return m_Profession; }
set{ m_Profession = value; }
}

public int StepsTaken
{
get{ return m_StepsTaken; }
set{ m_StepsTaken = value; }
}

[CommandProperty( AccessLevel.GameMaster )]
public NpcGuild NpcGuild
{
get{ return m_NpcGuild; }
set{ m_NpcGuild = value; }
}

[CommandProperty( AccessLevel.GameMaster )]
public DateTime NpcGuildJoinTime
{
get{ return m_NpcGuildJoinTime; }
set{ m_NpcGuildJoinTime = value; }
}

[CommandProperty( AccessLevel.GameMaster )]
public TimeSpan NpcGuildGameTime
{
get{ return m_NpcGuildGameTime; }
set{ m_NpcGuildGameTime = value; }
}

public PlayerFlag Flags
{
get{ return m_Flags; }
set{ m_Flags = value; }
}

// FACTION SYSTEM BEGIN
public bool HasMoreThanMin(int chunk)
{ 
if((m_Points - chunk) < minPoints)
{ 
return false; 
}
else
{ 
return true; 
} 
}
// FACTION SYSTEM END


[CommandProperty( AccessLevel.GameMaster )]
public bool PagingSquelched
{
get{ return GetFlag( PlayerFlag.PagingSquelched ); }
set{ SetFlag( PlayerFlag.PagingSquelched, value ); }
}

[CommandProperty( AccessLevel.GameMaster )]
public bool Glassblowing
{
get{ return GetFlag( PlayerFlag.Glassblowing ); }
set{ SetFlag( PlayerFlag.Glassblowing, value ); }
}

[CommandProperty( AccessLevel.GameMaster )]
public bool Masonry
{
get{ return GetFlag( PlayerFlag.Masonry ); }
set{ SetFlag( PlayerFlag.Masonry, value ); }
}

[CommandProperty( AccessLevel.GameMaster )]
public bool SandMining
{
get{ return GetFlag( PlayerFlag.SandMining ); }
set{ SetFlag( PlayerFlag.SandMining, value ); }
}

[CommandProperty( AccessLevel.GameMaster )]
public bool StoneMining
{
get{ return GetFlag( PlayerFlag.StoneMining ); }
set{ SetFlag( PlayerFlag.StoneMining, value ); }
}

[CommandProperty( AccessLevel.GameMaster )]
public bool ToggleMiningStone
{
get{ return GetFlag( PlayerFlag.ToggleMiningStone ); }
set{ SetFlag( PlayerFlag.ToggleMiningStone, value ); }
}

[CommandProperty( AccessLevel.GameMaster )]
public bool KarmaLocked
{
get{ return GetFlag( PlayerFlag.KarmaLocked ); }
set{ SetFlag( PlayerFlag.KarmaLocked, value ); }
}

[CommandProperty( AccessLevel.GameMaster )]
public bool AutoRenewInsurance
{
get{ return GetFlag( PlayerFlag.AutoRenewInsurance ); }
set{ SetFlag( PlayerFlag.AutoRenewInsurance, value ); }
}

[CommandProperty( AccessLevel.GameMaster )]
public bool UseOwnFilter
{
get{ return GetFlag( PlayerFlag.UseOwnFilter ); }
set{ SetFlag( PlayerFlag.UseOwnFilter, value ); }
}

[CommandProperty( AccessLevel.GameMaster )]
public bool PublicMyRunUO
{
get{ return GetFlag( PlayerFlag.PublicMyRunUO ); }
set{ SetFlag( PlayerFlag.PublicMyRunUO, value ); InvalidateMyRunUO(); }
}

public static Direction GetDirection4( Point3D from, Point3D to )
{
int dx = from.X - to.X;
int dy = from.Y - to.Y;

int rx = dx - dy;
int ry = dx + dy;

Direction ret;

if ( rx >= 0 && ry >= 0 )
ret = Direction.West;
else if ( rx >= 0 && ry < 0 )
ret = Direction.South;
else if ( rx < 0 && ry < 0 )
ret = Direction.East;
else
ret = Direction.North;

return ret;
}

public override bool OnDroppedItemToWorld( Item item, Point3D location )
{
if ( !base.OnDroppedItemToWorld( item, location ) )
return false;

BounceInfo bi = item.GetBounce();

if ( bi != null )
{
Type type = item.GetType();

if ( type.IsDefined( typeof( FurnitureAttribute ), true ) || type.IsDefined( typeof( DynamicFlipingAttribute ), true ) )
{
object[] objs = type.GetCustomAttributes( typeof( FlipableAttribute ), true );

if ( objs != null && objs.Length > 0 )
{
FlipableAttribute fp = objs[0] as FlipableAttribute;

if ( fp != null )
{
int[] itemIDs = fp.ItemIDs;

Point3D oldWorldLoc = bi.m_WorldLoc;
Point3D newWorldLoc = location;

if ( oldWorldLoc.X != newWorldLoc.X || oldWorldLoc.Y != newWorldLoc.Y )
{
Direction dir = GetDirection4( oldWorldLoc, newWorldLoc );

if ( itemIDs.Length == 2 )
{
switch ( dir )
{
case Direction.North:
case Direction.South: item.ItemID = itemIDs[0]; break;
case Direction.East:
case Direction.West: item.ItemID = itemIDs[1]; break;
}
}
else if ( itemIDs.Length == 4 )
{
switch ( dir )
{
case Direction.South: item.ItemID = itemIDs[0]; break;
case Direction.East: item.ItemID = itemIDs[1]; break;
case Direction.North: item.ItemID = itemIDs[2]; break;
case Direction.West: item.ItemID = itemIDs[3]; break;
}
}
}
}
}
}
}

return true;
}

public bool GetFlag( PlayerFlag flag )
{
return ( (m_Flags & flag) != 0 );
}

public void SetFlag( PlayerFlag flag, bool value )
{
if ( value )
m_Flags |= flag;
else
m_Flags &= ~flag;
}

public DesignContext DesignContext
{
get{ return m_DesignContext; }
set{ m_DesignContext = value; }
}

public static void Initialize()
{
if ( FastwalkPrevention )
{
PacketHandler ph = PacketHandlers.GetHandler( 0x02 );

ph.ThrottleCallback = new ThrottlePacketCallback( MovementThrottle_Callback );
}

EventSink.Login += new LoginEventHandler( OnLogin );
EventSink.Logout += new LogoutEventHandler( OnLogout );
EventSink.Connected += new ConnectedEventHandler( EventSink_Connected );
EventSink.Disconnected += new DisconnectedEventHandler( EventSink_Disconnected );
}

public override void OnSkillInvalidated( Skill skill )
{
if ( Core.AOS && skill.SkillName == SkillName.MagicResist )
UpdateResistances();
}

public override int GetMaxResistance( ResistanceType type )
{
int max = base.GetMaxResistance( type );

if ( type != ResistanceType.Physical && 60 < max && Spells.Fourth.CurseSpell.UnderEffect( this ) )
max = 60;

return max;
}

private int m_LastGlobalLight = -1, m_LastPersonalLight = -1;

public override void OnNetStateChanged()
{
m_LastGlobalLight = -1;
m_LastPersonalLight = -1;
}

public override void ComputeBaseLightLevels( out int global, out int personal )
{
global = LightCycle.ComputeLevelFor( this );
personal = this.LightLevel;
}

public override void CheckLightLevels( bool forceResend )
{
NetState ns = this.NetState;

if ( ns == null )
return;

int global, personal;

ComputeLightLevels( out global, out personal );

if ( !forceResend )
forceResend = ( global != m_LastGlobalLight || personal != m_LastPersonalLight );

if ( !forceResend )
return;

m_LastGlobalLight = global;
m_LastPersonalLight = personal;

ns.Send( GlobalLightLevel.Instantiate( global ) );
ns.Send( new PersonalLightLevel( this, personal ) );
}

public override int GetMinResistance( ResistanceType type )
{
int magicResist = (int)(Skills[SkillName.MagicResist].Value * 10);
int min = int.MinValue;

if ( magicResist >= 1000 )
min = 40 + ((magicResist - 1000) / 50);
else if ( magicResist >= 400 )
min = (magicResist - 400) / 15;

if ( min > MaxPlayerResistance )
min = MaxPlayerResistance;

int baseMin = base.GetMinResistance( type );

if ( min < baseMin )
min = baseMin;

return min;
}

private static void OnLogin( LoginEventArgs e )
{
Mobile from = e.Mobile;

SacrificeVirtue.CheckAtrophy( from );
JusticeVirtue.CheckAtrophy( from );
CompassionVirtue.CheckAtrophy( from );

if ( AccountHandler.LockdownLevel > AccessLevel.Player )
{
string notice;

Accounting.Account acct = from.Account as Accounting.Account;

if ( acct == null || !acct.HasAccess( from.NetState ) )
{
if ( from.AccessLevel == AccessLevel.Player )
notice = "The server is currently under lockdown. No players are allowed to log in at this time.";
else
notice = "The server is currently under lockdown. You do not have sufficient access level to connect.";

Timer.DelayCall( TimeSpan.FromSeconds( 1.0 ), new TimerStateCallback( Disconnect ), from );
}
else if ( from.AccessLevel == AccessLevel.Administrator )
{
notice = "The server is currently under lockdown. As you are an administrator, you may change this from the [Admin gump.";
}
else
{
notice = "The server is currently under lockdown. You have sufficient access level to connect.";
}

from.SendGump( new NoticeGump( 1060637, 30720, notice, 0xFFC000, 300, 140, null, null ) );
}
}

private bool m_NoDeltaRecursion;

public void ValidateEquipment()
{
if ( m_NoDeltaRecursion || Map == null || Map == Map.Internal )
return;

if ( this.Items == null )
return;

m_NoDeltaRecursion = true;
Timer.DelayCall( TimeSpan.Zero, new TimerCallback( ValidateEquipment_Sandbox ) );
}

private void ValidateEquipment_Sandbox()
{
try
{
if ( Map == null || Map == Map.Internal )
return;

ArrayList items = this.Items;

if ( items == null )
return;

bool moved = false;

int str = this.Str;
int dex = this.Dex;
int intel = this.Int;

Mobile from = this;

for ( int i = items.Count - 1; i >= 0; --i )
{
if ( i >= items.Count )
continue;

Item item = (Item)items[i];

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

bool drop = false;

if ( dex < weapon.DexRequirement )
drop = true;
else if ( str < AOS.Scale( weapon.StrRequirement, 100 - weapon.GetLowerStatReq() ) )
drop = true;
else if ( intel < weapon.IntRequirement )
drop = true;

if ( drop )
{
string name = weapon.Name;

if ( name == null )
name = String.Format( "#{0}", weapon.LabelNumber );

from.SendLocalizedMessage( 1062001, name ); // You can no longer wield your ~1_WEAPON~
from.AddToBackpack( weapon );
moved = true;
}
}
else if ( item is BaseArmor )
{
BaseArmor armor = (BaseArmor)item;

bool drop = false;

if ( !armor.AllowMaleWearer && from.Body.IsMale && from.AccessLevel < AccessLevel.GameMaster )
{
drop = true;
}
else if ( !armor.AllowFemaleWearer && from.Body.IsFemale && from.AccessLevel < AccessLevel.GameMaster )
{
drop = true;
}
else
{
int strBonus = armor.ComputeStatBonus( StatType.Str ), strReq = armor.ComputeStatReq( StatType.Str );
int dexBonus = armor.ComputeStatBonus( StatType.Dex ), dexReq = armor.ComputeStatReq( StatType.Dex );
int intBonus = armor.ComputeStatBonus( StatType.Int ), intReq = armor.ComputeStatReq( StatType.Int );

if ( dex < dexReq || (dex + dexBonus) < 1 )
drop = true;
else if ( str < strReq || (str + strBonus) < 1 )
drop = true;
else if ( intel < intReq || (intel + intBonus) < 1 )
drop = true;
}

if ( drop )
{
string name = armor.Name;

if ( name == null )
name = String.Format( "#{0}", armor.LabelNumber );

if ( armor is BaseShield )
from.SendLocalizedMessage( 1062003, name ); // You can no longer equip your ~1_SHIELD~
else
from.SendLocalizedMessage( 1062002, name ); // You can no longer wear your ~1_ARMOR~

from.AddToBackpack( armor );
moved = true;
}
}
}

if ( moved )
from.SendLocalizedMessage( 500647 ); // Some equipment has been moved to your backpack.
}
catch ( Exception e )
{
Console.WriteLine( e );
}
finally
{
m_NoDeltaRecursion = false;
}
}

public override void Delta( MobileDelta flag )
{
base.Delta( flag );

if ( (flag & MobileDelta.Stat) != 0 )
ValidateEquipment();

if ( (flag & (MobileDelta.Name | MobileDelta.Hue)) != 0 )
InvalidateMyRunUO();
}

private static void Disconnect( object state )
{
NetState ns = ((Mobile)state).NetState;

if ( ns != null )
ns.Dispose();
}

private static void OnLogout( LogoutEventArgs e )
{
}

private static void EventSink_Connected( ConnectedEventArgs e )
{
PlayerMobile pm = e.Mobile as PlayerMobile;

if ( pm != null )
{
pm.m_SessionStart = DateTime.Now;

if ( pm.m_Quest != null )
pm.m_Quest.StartTimer();
}
}

private static void EventSink_Disconnected( DisconnectedEventArgs e )
{
Mobile from = e.Mobile;
DesignContext context = DesignContext.Find( from );

if ( context != null )
{
/* Client disconnected
* - Remove design context
* - Eject client from house
*/

// Remove design context
DesignContext.Remove( from );

// Eject client from house
from.RevealingAction();

from.MoveToWorld( context.Foundation.BanLocation, context.Foundation.Map );
}

PlayerMobile pm = e.Mobile as PlayerMobile;

if ( pm != null )
{
pm.m_GameTime += (DateTime.Now - pm.m_SessionStart);

if ( pm.m_Quest != null )
pm.m_Quest.StopTimer();
}
}

public override void RevealingAction()
{
if ( m_DesignContext != null )
return;

Spells.Sixth.InvisibilitySpell.RemoveTimer( this );

base.RevealingAction();
}

public override void OnSubItemAdded( Item item )
{
if ( AccessLevel < AccessLevel.GameMaster && item.IsChildOf( this.Backpack ) )
{
int maxWeight = WeightOverloading.GetMaxWeight( this );
int curWeight = Mobile.BodyWeight + this.TotalWeight;

if ( curWeight > maxWeight )
this.SendLocalizedMessage( 1019035, true, String.Format( " : {0} / {1}", curWeight, maxWeight ) );
}
}

public override bool CanBeHarmful( Mobile target, bool message, bool ignoreOurBlessedness )
{
if ( m_DesignContext != null || (target is PlayerMobile && ((PlayerMobile)target).m_DesignContext != null) )
return false;

if ( (target is BaseVendor && ((BaseVendor)target).IsInvulnerable) || target is PlayerVendor || target is TownCrier )
{
if ( message )
{
if ( target.Title == null )
SendMessage( "{0} the vendor cannot be harmed.", target.Name );
else
SendMessage( "{0} {1} cannot be harmed.", target.Name, target.Title );
}

return false;
}

return base.CanBeHarmful( target, message, ignoreOurBlessedness );
}

public override bool CanBeBeneficial( Mobile target, bool message, bool allowDead )
{
if ( m_DesignContext != null || (target is PlayerMobile && ((PlayerMobile)target).m_DesignContext != null) )
return false;

// FACTION SYSTEM BEGIN
if (target is PlayerMobile && m_Faction == Faction.None && ((PlayerMobile)target).Faction != Faction.None)
{

if (target.Combatant != null)
{
SendMessage("You can not help him right now");
return false;
}
}
// FACTION SYSTEM END


return base.CanBeBeneficial( target, message, allowDead );
}

public override bool CheckContextMenuDisplay( IEntity target )
{
return ( m_DesignContext == null );
}

public override void OnItemAdded( Item item )
{
base.OnItemAdded( item );

if ( item is BaseArmor || item is BaseWeapon )
{
Hits=Hits; Stam=Stam; Mana=Mana;
}

InvalidateMyRunUO();
}

public override void OnItemRemoved( Item item )
{
base.OnItemRemoved( item );

if ( item is BaseArmor || item is BaseWeapon )
{
Hits=Hits; Stam=Stam; Mana=Mana;
}

InvalidateMyRunUO();
}

public override int HitsMax
{
get
{
int strBase;
int strOffs = GetStatOffset( StatType.Str );

if ( Core.AOS )
{
strBase = this.Str;
strOffs += AosAttributes.GetValue( this, AosAttribute.BonusHits );
}
else
{
strBase = this.RawStr;
}

return (strBase / 2) + 50 + strOffs;
}
}

public override int StamMax
{
get{ return base.StamMax + AosAttributes.GetValue( this, AosAttribute.BonusStam ); }
}

public override int ManaMax
{
get{ return base.ManaMax + AosAttributes.GetValue( this, AosAttribute.BonusMana ); }
}

public override bool Move( Direction d )
{
NetState ns = this.NetState;

if ( ns != null )
{
Gump[] gumps = ns.Gumps;

for ( int i = 0; i < gumps.Length; ++i )
{
if ( gumps[i] is ResurrectGump )
{
if ( Alive )
{
CloseGump( typeof( ResurrectGump ) );
}
else
{
SendLocalizedMessage( 500111 ); // You are frozen and cannot move.
return false;
}
}
}
}

TimeSpan speed = ComputeMovementSpeed( d );

if ( !base.Move( d ) )
return false;

m_NextMovementTime += speed;
return true;
}

public override bool CheckMovement( Direction d, out int newZ )
{
DesignContext context = m_DesignContext;

if ( context == null )
return base.CheckMovement( d, out newZ );

HouseFoundation foundation = context.Foundation;

newZ = foundation.Z + HouseFoundation.GetLevelZ( context.Level );

int newX = this.X, newY = this.Y;
Movement.Movement.Offset( d, ref newX, ref newY );

int startX = foundation.X + foundation.Components.Min.X + 1;
int startY = foundation.Y + foundation.Components.Min.Y + 1;
int endX = startX + foundation.Components.Width - 1;
int endY = startY + foundation.Components.Height - 2;

return ( newX >= startX && newY >= startY && newX < endX && newY < endY && Map == foundation.Map );
}

public override bool AllowItemUse( Item item )
{
return DesignContext.Check( this );
}

public override bool AllowSkillUse( SkillName skill )
{
return DesignContext.Check( this );
}

private bool m_LastProtectedMessage;
private int m_NextProtectionCheck = 10;

public virtual void RecheckTownProtection()
{
m_NextProtectionCheck = 10;

Regions.GuardedRegion reg = this.Region as Regions.GuardedRegion;
bool isProtected = ( reg != null && !reg.IsDisabled() );

if ( isProtected != m_LastProtectedMessage )
{
if ( isProtected )
SendLocalizedMessage( 500112 ); // You are now under the protection of the town guards.
else
SendLocalizedMessage( 500113 ); // You have left the protection of the town guards.

m_LastProtectedMessage = isProtected;
}
}

public override void MoveToWorld( Point3D loc, Map map )
{
base.MoveToWorld( loc, map );

RecheckTownProtection();
}

public override void SetLocation( Point3D loc, bool isTeleport )
{
base.SetLocation( loc, isTeleport );

if ( isTeleport || --m_NextProtectionCheck == 0 )
RecheckTownProtection();
}

public override void GetContextMenuEntries( Mobile from, ArrayList list )
{
base.GetContextMenuEntries( from, list );

if ( from == this )
{
if ( m_Quest != null )
m_Quest.GetContextMenuEntries( list );

if ( Alive && InsuranceEnabled )
{
list.Add( new CallbackEntry( 6201, new ContextCallback( ToggleItemInsurance ) ) );

if ( AutoRenewInsurance )
list.Add( new CallbackEntry( 6202, new ContextCallback( CancelRenewInventoryInsurance ) ) );
else
list.Add( new CallbackEntry( 6200, new ContextCallback( AutoRenewInventoryInsurance ) ) );
}

// TODO: Toggle champ titles

BaseHouse house = BaseHouse.FindHouseAt( this );

if ( house != null && house.IsAosRules )
list.Add( new CallbackEntry( 6207, new ContextCallback( LeaveHouse ) ) );

if ( m_JusticeProtectors.Count > 0 )
list.Add( new CallbackEntry( 6157, new ContextCallback( CancelProtection ) ) );
}
}

private void CancelProtection()
{
for ( int i = 0; i < m_JusticeProtectors.Count; ++i )
{
Mobile prot = (Mobile)m_JusticeProtectors[i];

string args = String.Format( "{0}\t{1}", this.Name, prot.Name );

prot.SendLocalizedMessage( 1049371, args ); // The protective relationship between ~1_PLAYER1~ and ~2_PLAYER2~ has been ended.
this.SendLocalizedMessage( 1049371, args ); // The protective relationship between ~1_PLAYER1~ and ~2_PLAYER2~ has been ended.
}

m_JusticeProtectors.Clear();
}

private void ToggleItemInsurance()
{
if ( !CheckAlive() )
return;

BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) );
SendLocalizedMessage( 1060868 ); // Target the item you wish to toggle insurance status on <ESC> to cancel
}

private bool CanInsure( Item item )
{
if ( item is Container )
return false;

if ( item is Spellbook || item is Runebook || item is PotionKeg )
return false;

if ( item.Stackable )
return false;

if ( item.LootType == LootType.Cursed )
return false;

if ( item.ItemID == 0x204E ) // death shroud
return false;

return true;
}

private void ToggleItemInsurance_Callback( Mobile from, object obj )
{
if ( !CheckAlive() )
return;

Item item = obj as Item;

if ( item == null || !item.IsChildOf( this ) )
{
BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) );
SendLocalizedMessage( 1060871, "", 0x23 ); // You can only insure items that you have equipped or that are in your backpack
}
else if ( item.Insured )
{
item.Insured = false;

SendLocalizedMessage( 1060874, "", 0x35 ); // You cancel the insurance on the item

BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) );
SendLocalizedMessage( 1060868, "", 0x23 ); // Target the item you wish to toggle insurance status on <ESC> to cancel
}
else if ( !CanInsure( item ) )
{
BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) );
SendLocalizedMessage( 1060869, "", 0x23 ); // You cannot insure that
}
else if ( item.LootType == LootType.Blessed || item.LootType == LootType.Newbied || item.BlessedFor == from )
{
BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) );
SendLocalizedMessage( 1060870, "", 0x23 ); // That item is blessed and does not need to be insured
SendLocalizedMessage( 1060869, "", 0x23 ); // You cannot insure that
}
else
{
if ( !item.PayedInsurance )
{
if ( Banker.Withdraw( from, 600 ) )
{
SendLocalizedMessage( 1060398, "600" ); // ~1_AMOUNT~ gold has been withdrawn from your bank box.
item.PayedInsurance = true;
}
else
{
SendLocalizedMessage( 1061079, "", 0x23 ); // You lack the funds to purchase the insurance
return;
}
}

item.Insured = true;

SendLocalizedMessage( 1060873, "", 0x23 ); // You have insured the item

BeginTarget( -1, false, TargetFlags.None, new TargetCallback( ToggleItemInsurance_Callback ) );
SendLocalizedMessage( 1060868, "", 0x23 ); // Target the item you wish to toggle insurance status on <ESC> to cancel
}
}

private void AutoRenewInventoryInsurance()
{
if ( !CheckAlive() )
return;

SendLocalizedMessage( 1060881, "", 0x23 ); // You have selected to automatically reinsure all insured items upon death
AutoRenewInsurance = true;
}

private void CancelRenewInventoryInsurance()
{
if ( !CheckAlive() )
return;

SendLocalizedMessage( 1061075, "", 0x23 ); // You have cancelled automatically reinsuring all insured items upon death
AutoRenewInsurance = false;
}

// TODO: Champ titles, toggle

private void LeaveHouse()
{
BaseHouse house = BaseHouse.FindHouseAt( this );

if ( house != null )
this.Location = house.BanLocation;
}

private delegate void ContextCallback();

private class CallbackEntry : ContextMenuEntry
{
private ContextCallback m_Callback;

public CallbackEntry( int number, ContextCallback callback ) : this( number, -1, callback )
{
}

public CallbackEntry( int number, int range, ContextCallback callback ) : base( number, range )
{
m_Callback = callback;
}

public override void OnClick()
{
if ( m_Callback != null )
m_Callback();
}
}

public override void OnDoubleClick( Mobile from )
{
if ( this == from && !Warmode )
{
IMount mount = Mount;

if ( mount != null && !DesignContext.Check( this ) )
return;
}

base.OnDoubleClick( from );
}

public override void DisplayPaperdollTo( Mobile to )
{
if ( DesignContext.Check( this ) )
base.DisplayPaperdollTo( to );
}

private static bool m_NoRecursion;

protected override void OnLocationChange( Point3D oldLocation )
{
CheckLightLevels( false );

DesignContext context = m_DesignContext;

if ( context == null || m_NoRecursion )
return;

m_NoRecursion = true;

HouseFoundation foundation = context.Foundation;

int newX = this.X, newY = this.Y;
int newZ = foundation.Z + HouseFoundation.GetLevelZ( context.Level );

int startX = foundation.X + foundation.Components.Min.X + 1;
int startY = foundation.Y + foundation.Components.Min.Y + 1;
int endX = startX + foundation.Components.Width - 1;
int endY = startY + foundation.Components.Height - 2;

if ( newX >= startX && newY >= startY && newX < endX && newY < endY && Map == foundation.Map )
{
if ( Z != newZ )
Location = new Point3D( X, Y, newZ );

m_NoRecursion = false;
return;
}

Location = new Point3D( foundation.X, foundation.Y, newZ );
Map = foundation.Map;

m_NoRecursion = false;
}

protected override void OnMapChange( Map oldMap )
{
DesignContext context = m_DesignContext;

if ( context == null || m_NoRecursion )
return;

m_NoRecursion = true;

HouseFoundation foundation = context.Foundation;

if ( Map != foundation.Map )
Map = foundation.Map;

m_NoRecursion = false;
}

public override void OnDamage( int amount, Mobile from, bool willKill )
{
if ( amount > (Core.AOS ? 25 : 0) )
{
BandageContext c = BandageContext.GetContext( this );

if ( c != null )
c.Slip();
}

WeightOverloading.FatigueOnDamage( this, amount );

base.OnDamage( amount, from, willKill );
}

public static int ComputeSkillTotal( Mobile m )
{
int total = 0;

for ( int i = 0; i < m.Skills.Length; ++i )
total += m.Skills[i].BaseFixedPoint;

return ( total / 10 );
}

public override void Resurrect()
{
bool wasAlive = this.Alive;

base.Resurrect();

if ( this.Alive && !wasAlive )
{
Item deathRobe = new DeathRobe();

if ( !EquipItem( deathRobe ) )
deathRobe.Delete();
}
}

private Mobile m_InsuranceAward;
private int m_InsuranceCost;
private int m_InsuranceBonus;

public override bool OnBeforeDeath()
{
m_InsuranceCost = 0;
m_InsuranceAward = base.FindMostRecentDamager( false );

if ( m_InsuranceAward != null && !m_InsuranceAward.Player )
m_InsuranceAward = null;

if ( m_InsuranceAward is PlayerMobile )
((PlayerMobile)m_InsuranceAward).m_InsuranceBonus = 0;

return base.OnBeforeDeath();
}

private bool CheckInsuranceOnDeath( Item item )
{
if ( InsuranceEnabled && item.Insured )
{
if ( AutoRenewInsurance )
{
int cost = ( m_InsuranceAward == null ? 600 : 300 );

if ( Banker.Withdraw( this, cost ) )
{
m_InsuranceCost += cost;
item.PayedInsurance = true;
}
else
{
SendLocalizedMessage( 1061079, "", 0x23 ); // You lack the funds to purchase the insurance
item.PayedInsurance = false;
item.Insured = false;
}
}
else
{
item.PayedInsurance = false;
item.Insured = false;
}

if ( m_InsuranceAward != null )
{
if ( Banker.Deposit( m_InsuranceAward, 300 ) )
{
if ( m_InsuranceAward is PlayerMobile )
((PlayerMobile)m_InsuranceAward).m_InsuranceBonus += 300;
}
}

return true;
}

return false;
}

public override DeathMoveResult GetParentMoveResultFor( Item item )
{
if ( CheckInsuranceOnDeath( item ) )
return DeathMoveResult.MoveToBackpack;

return base.GetParentMoveResultFor( item );
}

public override DeathMoveResult GetInventoryMoveResultFor( Item item )
{
if ( CheckInsuranceOnDeath( item ) )
return DeathMoveResult.MoveToBackpack;

return base.GetInventoryMoveResultFor( item );
}

public override void OnDeath( Container c )
{
base.OnDeath( c );

HueMod = -1;
NameMod = null;
SavagePaintExpiration = TimeSpan.Zero;

SetHairMods( -1, -1 );

PolymorphSpell.StopTimer( this );
IncognitoSpell.StopTimer( this );
DisguiseGump.StopTimer( this );

EndAction( typeof( PolymorphSpell ) );
EndAction( typeof( IncognitoSpell ) );

MeerMage.StopEffect( this, false );

if ( m_PermaFlags.Count > 0 )
{
m_PermaFlags.Clear();

if ( c is Corpse )
((Corpse)c).Criminal = true;

if ( SkillHandlers.Stealing.ClassicMode )
Criminal = true;
}

if ( this.Kills >= 5 && DateTime.Now >= m_NextJustAward )
{
Mobile m = FindMostRecentDamager( false );

if ( m != null && m.Player )
{
bool gainedPath = false;

int theirTotal = ComputeSkillTotal( m );
int ourTotal = ComputeSkillTotal( this );

int pointsToGain = 1 + ((theirTotal - ourTotal) / 50);

if ( pointsToGain < 1 )
pointsToGain = 1;
else if ( pointsToGain > 4 )
pointsToGain = 4;

if ( VirtueHelper.Award( m, VirtueName.Justice, pointsToGain, ref gainedPath ) )
{
if ( gainedPath )
m.SendLocalizedMessage( 1049367 ); // You have gained a path in Justice!
else
m.SendLocalizedMessage( 1049363 ); // You have gained in Justice.

m.FixedParticles( 0x375A, 9, 20, 5027, EffectLayer.Waist );
m.PlaySound( 0x1F7 );

m_NextJustAward = DateTime.Now + TimeSpan.FromMinutes( pointsToGain * 2 );
}
}
}

if ( m_InsuranceCost > 0 )
SendLocalizedMessage( 1060398, m_InsuranceCost.ToString() ); // ~1_AMOUNT~ gold has been withdrawn from your bank box.

if ( m_InsuranceAward is PlayerMobile )
{
PlayerMobile pm = (PlayerMobile)m_InsuranceAward;

if ( pm.m_InsuranceBonus > 0 )
pm.SendLocalizedMessage( 1060397, pm.m_InsuranceBonus.ToString() ); // ~1_AMOUNT~ gold has been deposited into your bank box.
}
}

private ArrayList m_PermaFlags;
private ArrayList m_VisList;
private Hashtable m_AntiMacroTable;
private TimeSpan m_GameTime;
private TimeSpan m_ShortTermElapse;
private TimeSpan m_LongTermElapse;
private DateTime m_SessionStart;
private DateTime m_LastEscortTime;
private DateTime m_NextSmithBulkOrder;
private DateTime m_NextTailorBulkOrder;
private DateTime m_SavagePaintExpiration;
private SkillName m_Learning = (SkillName)(-1);
private DateTime m_NextTamingBulkOrder;
private bool m_Bioenginer;

public SkillName Learning
{
get{ return m_Learning; }
set{ m_Learning = value; }
}

[CommandProperty( AccessLevel.GameMaster )]
public TimeSpan SavagePaintExpiration
{
get
{
TimeSpan ts = m_SavagePaintExpiration - DateTime.Now;

if ( ts < TimeSpan.Zero )
ts = TimeSpan.Zero;

return ts;
}
set
{
m_SavagePaintExpiration = DateTime.Now + value;
}
}

[CommandProperty( AccessLevel.GameMaster )]
public TimeSpan NextSmithBulkOrder
{
get
{
TimeSpan ts = m_NextSmithBulkOrder - DateTime.Now;

if ( ts < TimeSpan.Zero )
ts = TimeSpan.Zero;

return ts;
}
set
{
try{ m_NextSmithBulkOrder = DateTime.Now + value; }
catch{}
}
}
[CommandProperty( AccessLevel.GameMaster )]
public TimeSpan NextTamingBulkOrder
{
get
{
TimeSpan ts = m_NextTamingBulkOrder - DateTime.Now;

if ( ts < TimeSpan.Zero )
ts = TimeSpan.Zero;

return ts;
}
set
{
try{ m_NextTamingBulkOrder = DateTime.Now + value; }
catch{}
}
}

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

[CommandProperty( AccessLevel.GameMaster )]
public TimeSpan NextTailorBulkOrder
{
get
{
TimeSpan ts = m_NextTailorBulkOrder - DateTime.Now;

if ( ts < TimeSpan.Zero )
ts = TimeSpan.Zero;

return ts;
}
set
{
try{ m_NextTailorBulkOrder = DateTime.Now + value; }
catch{}
}
}

public DateTime LastEscortTime
{
get{ return m_LastEscortTime; }
set{ m_LastEscortTime = value; }
}

public PlayerMobile()
{

// FACTION SYSTEM BEGIN
m_FactionKill = true;
// FACTION SYSTEM END

m_VisList = new ArrayList();
m_PermaFlags = new ArrayList();
m_AntiMacroTable = new Hashtable();

m_BOBFilter = new Engines.BulkOrders.BOBFilter();

m_GameTime = TimeSpan.Zero;
m_ShortTermElapse = TimeSpan.FromHours( 8.0 );
m_LongTermElapse = TimeSpan.FromHours( 40.0 );

m_JusticeProtectors = new ArrayList();

InvalidateMyRunUO();
}

public override bool MutateSpeech( ArrayList hears, ref string text, ref object context )
{
if ( Alive )
return false;

if ( Core.AOS )
{
for ( int i = 0; i < hears.Count; ++i )
{
object o = hears[i];

if ( o != this && o is Mobile && ((Mobile)o).Skills[SkillName.SpiritSpeak].Value >= 100.0 )
return false;
}
}

return base.MutateSpeech( hears, ref text, ref context );
}

public override void Damage( int amount, Mobile from )
{
if ( Spells.Necromancy.EvilOmenSpell.CheckEffect( this ) )
amount = (int)(amount * 1.25);

Mobile oath = Spells.Necromancy.BloodOathSpell.GetBloodOath( from );

if ( oath == this )
{
amount = (int)(amount * 1.1);
from.Damage( amount, from );
}

base.Damage( amount, from );
}

public override ApplyPoisonResult ApplyPoison( Mobile from, Poison poison )
{
if ( !Alive )
return ApplyPoisonResult.Immune;

if ( Spells.Necromancy.EvilOmenSpell.CheckEffect( this ) )
return base.ApplyPoison( from, PoisonImpl.IncreaseLevel( poison ) );

return base.ApplyPoison( from, poison );
}

public PlayerMobile( Serial s ) : base( s )
{
m_VisList = new ArrayList();
m_AntiMacroTable = new Hashtable();
InvalidateMyRunUO();
}

public ArrayList VisibilityList
{
get{ return m_VisList; }
}

public ArrayList PermaFlags
{
get{ return m_PermaFlags; }
}

public override int Luck{ get{ return AosAttributes.GetValue( this, AosAttribute.Luck ); } }

public override bool IsHarmfulCriminal( Mobile target )
{
if ( SkillHandlers.Stealing.ClassicMode && target is PlayerMobile && ((PlayerMobile)target).m_PermaFlags.Count > 0 )
{
int noto = Notoriety.Compute( this, target );

if ( noto == Notoriety.Innocent )
target.Delta( MobileDelta.Noto );

return false;
}

if ( target is BaseCreature && ((BaseCreature)target).InitialInnocent )
return false;

return base.IsHarmfulCriminal( target );
}

public bool AntiMacroCheck( Skill skill, object obj )
{
if ( obj == null || m_AntiMacroTable == null || this.AccessLevel != AccessLevel.Player )
return true;

Hashtable tbl = (Hashtable)m_AntiMacroTable[skill];
if ( tbl == null )
m_AntiMacroTable[skill] = tbl = new Hashtable();

CountAndTimeStamp count = (CountAndTimeStamp)tbl[obj];
if ( count != null )
{
if ( count.TimeStamp + SkillCheck.AntiMacroExpire <= DateTime.Now )
{
count.Count = 1;
return true;
}
else
{
++count.Count;
if ( count.Count <= SkillCheck.Allowance )
return true;
else
return false;
}
}
else
{
tbl[obj] = count = new CountAndTimeStamp();
count.Count = 1;

return true;
}
}

private void RevertHair()
{
SetHairMods( -1, -1 );
}

private Engines.BulkOrders.BOBFilter m_BOBFilter;

public Engines.BulkOrders.BOBFilter BOBFilter
{
get{ return m_BOBFilter; }
}


// FACTION SYSTEM BEGIN
public override bool CanBeBeneficial( Mobile target )
{
if (target is PlayerMobile && m_Faction == Faction.None && ((PlayerMobile)target).Faction != Faction.None)
{

if (target.Combatant != null)
{
SendMessage("You can not help him right now");
return false;
}
}
return base.CanBeBeneficial( target );
}
// FACTION SYSTEM END


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

// FACTION SYSTEM BEGIN
if (m_Faction != Faction.None)
FindMainControl(); 

m_FactionKill = true;

// FACTION SYSTEM END


switch ( version )
{
// FACTION SYSTEM BEGIN
case 19: // <-- CHANGE TO YOUR NEW CASE NUMBER (I.E If your last case is 17 make this 18 )
{
m_Bioenginer = reader.ReadBool();
NextTamingBulkOrder = reader.ReadTimeSpan();
goto case 17; // <-- CHANGE NUMBER TO YOUR LAST CASES NUMBER.
}
case 18:
{
m_Leaving = reader.ReadBool();
m_Faction = (Faction) reader.ReadInt();
m_Points = reader.ReadInt();
m_Rank = reader.ReadInt();
m_Votes = reader.ReadInt();

int serial = reader.ReadInt();

if (Serial != 0)
m_Sigil = (Sigil)World.FindItem(serial);

m_Candidate = reader.ReadBool();
m_Voted = reader.ReadBool();

m_ResKill = reader.ReadInt();
m_StartDate = reader.ReadDateTime();
m_Join = reader.ReadDateTime();
m_Left = reader.ReadDateTime();
m_GivePoints = reader.ReadDateTime();
goto case 17;
} 
// FACTION SYSTEM END


case 17: // changed how DoneQuests is serialized
case 16:
{
m_Quest = QuestSerializer.DeserializeQuest( reader );

if ( m_Quest != null )
m_Quest.From = this;

int count = reader.ReadEncodedInt();

if ( count > 0 )
{
m_DoneQuests = new ArrayList();

for ( int i = 0; i < count; ++i )
{
Type questType = QuestSerializer.ReadType( QuestSystem.QuestTypes, reader );
DateTime restartTime;

if ( version < 17 )
restartTime = DateTime.MaxValue;
else
restartTime = reader.ReadDateTime();

m_DoneQuests.Add( new QuestRestartInfo( questType, restartTime ) );
}
}

m_Profession = reader.ReadEncodedInt();
goto case 15;
}
case 15:
{
m_LastCompassionLoss = reader.ReadDeltaTime();
goto case 14;
}
case 14:
{
m_CompassionGains = reader.ReadEncodedInt();

if ( m_CompassionGains > 0 )
m_NextCompassionDay = reader.ReadDeltaTime();

goto case 13;
}
case 13: // just removed m_PayedInsurance list
case 12:
{
m_BOBFilter = new Engines.BulkOrders.BOBFilter( reader );
goto case 11;
}
case 11:
{
if ( version < 13 )
{
ArrayList payed = reader.ReadItemList();

for ( int i = 0; i < payed.Count; ++i )
((Item)payed[i]).PayedInsurance = true;
}

goto case 10;
}
case 10:
{
if ( reader.ReadBool() )
{
m_HairModID = reader.ReadInt();
m_HairModHue = reader.ReadInt();
m_BeardModID = reader.ReadInt();
m_BeardModHue = reader.ReadInt();

// We cannot call SetHairMods( -1, -1 ) here because the items have not yet loaded
Timer.DelayCall( TimeSpan.Zero, new TimerCallback( RevertHair ) );
}

goto case 9;
}
case 9:
{
SavagePaintExpiration = reader.ReadTimeSpan();

if ( SavagePaintExpiration > TimeSpan.Zero )
{
BodyMod = ( Female ? 184 : 183 );
HueMod = 0;
}

goto case 8;
}
case 8:
{
m_NpcGuild = (NpcGuild)reader.ReadInt();
m_NpcGuildJoinTime = reader.ReadDateTime();
m_NpcGuildGameTime = reader.ReadTimeSpan();
goto case 7;
}
case 7:
{
m_PermaFlags = reader.ReadMobileList();
goto case 6;
}
case 6:
{
NextTailorBulkOrder = reader.ReadTimeSpan();
goto case 5;
}
case 5:
{
NextSmithBulkOrder = reader.ReadTimeSpan();
goto case 4;
}
case 4:
{
m_LastJusticeLoss = reader.ReadDeltaTime();
m_JusticeProtectors = reader.ReadMobileList();
goto case 3;
}
case 3:
{
m_LastSacrificeGain = reader.ReadDeltaTime();
m_LastSacrificeLoss = reader.ReadDeltaTime();
m_AvailableResurrects = reader.ReadInt();
goto case 2;
}
case 2:
{
m_Flags = (PlayerFlag)reader.ReadInt();
goto case 1;
}
case 1:
{
m_LongTermElapse = reader.ReadTimeSpan();
m_ShortTermElapse = reader.ReadTimeSpan();
m_GameTime = reader.ReadTimeSpan();
goto case 0;
}
case 0:
{
break;
}
}

if ( m_PermaFlags == null )
m_PermaFlags = new ArrayList();

if ( m_JusticeProtectors == null )
m_JusticeProtectors = new ArrayList();

if ( m_BOBFilter == null )
m_BOBFilter = new Engines.BulkOrders.BOBFilter();

ArrayList list = this.Stabled;

for ( int i = 0; i < list.Count; ++i )
{
BaseCreature bc = list[i] as BaseCreature;

if ( bc != null )
bc.IsStabled = true;
}
}

public override void Serialize( GenericWriter writer )
{
// FACTION SYSTEM BEGIN
if (m_Faction != Faction.None && MC == null)
FindMainControl();

if (m_Faction != Faction.None && MC != null)
{
if (m_Faction == Faction.Britannians && MC.Brit != null)
MC.Brit.AddMember(this);

if (m_Faction == Faction.Minax && MC.Minx != null)
MC.Minx.AddMember(this);

if (m_Faction == Faction.ShadowLords && MC.Shad != null)
MC.Shad.AddMember(this);

if (m_Faction == Faction.Mages && MC.Mage != null)
MC.Mage.AddMember(this);

}

if (m_Faction == Faction.None && MC != null)
{
MC.RemoveAll(this);

}

// FACTION SYSTEM END

//cleanup our anti-macro table 
foreach ( Hashtable t in m_AntiMacroTable.Values )
{
ArrayList remove = new ArrayList();
foreach ( CountAndTimeStamp time in t.Values )
{
if ( time.TimeStamp + SkillCheck.AntiMacroExpire <= DateTime.Now )
remove.Add( time );
}

for (int i=0;i<remove.Count;++i)
t.Remove( remove[i] );
}

//decay our kills
if ( m_ShortTermElapse < this.GameTime )
{
m_ShortTermElapse += TimeSpan.FromHours( 8 );
if ( ShortTermMurders > 0 )
--ShortTermMurders;
}

if ( m_LongTermElapse < this.GameTime )
{
m_LongTermElapse += TimeSpan.FromHours( 40 );
if ( Kills > 0 )
--Kills;
}

base.Serialize( writer );


// FACTION SYSTEM BEGIN
writer.Write( (int) 18 ); // version

writer.Write( m_Leaving );
writer.Write( (int) m_Faction );
writer.Write( m_Points );
writer.Write( m_Rank );
writer.Write( m_Votes );

if (m_Sigil != null)
writer.Write( (int) m_Sigil.Serial); 
else
writer.Write( (int) 0);

writer.Write( (bool) m_Candidate);
writer.Write( (bool) m_Voted);
writer.Write( (int) m_ResKill);
writer.Write( m_StartDate );
writer.Write( m_Join );
writer.Write( m_Left );
writer.Write( m_GivePoints );
// FACTION SYSTEM END

// Changed Version number from 17 to 18
writer.Write( (int) 19 ); // version

//Start Bio / Taming BODS

writer.Write( m_Bioenginer );

writer.Write( NextTamingBulkOrder );

//End



if ( m_DoneQuests == null )
{
writer.WriteEncodedInt( (int) 0 );
}
else
{
writer.WriteEncodedInt( (int) m_DoneQuests.Count );

for ( int i = 0; i < m_DoneQuests.Count; ++i )
{
QuestRestartInfo restartInfo = (QuestRestartInfo)m_DoneQuests[i];

QuestSerializer.Write( (Type) restartInfo.QuestType, QuestSystem.QuestTypes, writer );
writer.Write( (DateTime) restartInfo.RestartTime );
}
}

writer.WriteEncodedInt( (int) m_Profession );

writer.WriteDeltaTime( m_LastCompassionLoss );

writer.WriteEncodedInt( m_CompassionGains );

if ( m_CompassionGains > 0 )
writer.WriteDeltaTime( m_NextCompassionDay );

m_BOBFilter.Serialize( writer );

bool useMods = ( m_HairModID != -1 || m_BeardModID != -1 );

writer.Write( useMods );

if ( useMods )
{
writer.Write( (int) m_HairModID );
writer.Write( (int) m_HairModHue );
writer.Write( (int) m_BeardModID );
writer.Write( (int) m_BeardModHue );
}

writer.Write( SavagePaintExpiration );

writer.Write( (int) m_NpcGuild );
writer.Write( (DateTime) m_NpcGuildJoinTime );
writer.Write( (TimeSpan) m_NpcGuildGameTime );

writer.WriteMobileList( m_PermaFlags, true );

writer.Write( NextTailorBulkOrder );

writer.Write( NextSmithBulkOrder );

writer.WriteDeltaTime( m_LastJusticeLoss );
writer.WriteMobileList( m_JusticeProtectors, true );

writer.WriteDeltaTime( m_LastSacrificeGain );
writer.WriteDeltaTime( m_LastSacrificeLoss );
writer.Write( m_AvailableResurrects );

writer.Write( (int) m_Flags );

writer.Write( m_LongTermElapse );
writer.Write( m_ShortTermElapse );
writer.Write( this.GameTime );
}

// FACTION SYSTEM BEGIN
public void FindMainControl()
{
if (MC != null) return;

foreach ( Item item in World.Items.Values )
{
if ( item is MainControlStone)
{
MC = (MainControlStone) item;

if (m_Faction == Faction.Britannians && MC.Brit != null)
MC.Brit.AddMember(this);

if (m_Faction == Faction.Minax && MC.Minx != null)
MC.Minx.AddMember(this);

if (m_Faction == Faction.ShadowLords && MC.Shad != null)
MC.Shad.AddMember(this);

if (m_Faction == Faction.Mages && MC.Mage != null)
MC.Mage.AddMember(this);

return;
}
}
}
// FACTION SYSTEM END


public void ResetKillTime()
{
m_ShortTermElapse = this.GameTime + TimeSpan.FromHours( 8 );
m_LongTermElapse = this.GameTime + TimeSpan.FromHours( 40 );
}

[CommandProperty( AccessLevel.GameMaster )]
public TimeSpan GameTime
{
get
{
if ( NetState != null )
return m_GameTime + (DateTime.Now - m_SessionStart);
else
return m_GameTime;
}
}

// FACTION SYSTEM BEGIN
[CommandProperty( AccessLevel.GameMaster )]
public DateTime GivePoints
{
get{ return m_GivePoints; }
set{ m_GivePoints = value; }
}

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

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

public bool CanRaise ( Mobile m )
{
int num = 0;

foreach (Point3D m_loc in m_Macro)

{
if (m.Location == m_loc)
{
num++;
} 
}

if (num < 130) return true; 
return false;
}

public void AddKiller( PlayerMobile killer)
{ 
if (!(killers.Contains(killer)))
killers.Add(killer); 
} 

public void RemoveKiller( PlayerMobile killer)
{ 
if (killers.Contains(killer))
killers.Remove(killer); 
} 

public bool KillerIsTimed( PlayerMobile killer)
{ 
if(killers.Count != 0)
{ 
if ( killers.Contains (killer) )
{ 
return true; 
} 
} 
return false; 
} 

[CommandProperty( AccessLevel.GameMaster )]
public Sigil Sigil
{
get { return m_Sigil; }
set { m_Sigil = value; }
}
[CommandProperty(AccessLevel.GameMaster)] 
public int Votes
{ 
get{return m_Votes;} 
set{m_Votes = value;} 
}

[CommandProperty(AccessLevel.Counselor)] 
public int Rank
{ 
get{return m_Rank;} 
set{m_Rank = value;InvalidateProperties();} 
} 
[CommandProperty(AccessLevel.Counselor)] 
public int Points
{ 
get{return m_Points;} 
set{m_Points = value;} 
} 
[CommandProperty(AccessLevel.Counselor)] 
public Faction Faction
{ 
get{return m_Faction;} 
set
{
if (MainControl != null && MainControl.Brit != null && m_Faction == Faction.Britannians)
{
MainControl.Brit.RemoveMember(this);
}
if (MainControl != null && MainControl.Shad != null && m_Faction == Faction.ShadowLords)
{
MainControl.Shad.RemoveMember(this);
}
if (MainControl != null && MainControl.Minx != null && m_Faction == Faction.Minax)
{
MainControl.Minx.RemoveMember(this);
}
if (MainControl != null && MainControl.Mage != null && m_Faction == Faction.Mages)
{
MainControl.Mage.RemoveMember(this);
}

m_Faction = value;

if (MainControl != null && MainControl.Brit != null && m_Faction == Faction.Britannians)
{
MainControl.Brit.AddMember(this);
}
if (MainControl != null && MainControl.Shad != null && m_Faction == Faction.ShadowLords)
{
MainControl.Shad.AddMember(this);
}
if (MainControl != null && MainControl.Minx != null && m_Faction == Faction.Minax)
{
MainControl.Minx.AddMember(this);
}
if (MainControl != null && MainControl.Mage != null && m_Faction == Faction.Mages)
{
MainControl.Mage.AddMember(this);
}
} 
} 

[CommandProperty(AccessLevel.Counselor)] 
public bool FactionKill
{ 
get{return m_FactionKill;} 
set{m_FactionKill = value;} 
}

[CommandProperty( AccessLevel.GameMaster )]
public bool ResetSigil
{
get {return false;}
set 
{
m_Sigil = null; 
}
}
[CommandProperty( AccessLevel.GameMaster )]
public bool Leaving
{
get { return m_Leaving; }
set { m_Leaving = value; }
}

[CommandProperty( AccessLevel.GameMaster )]
public int ResKill
{
get { return m_ResKill; }
set { m_ResKill = value; }
}

[CommandProperty( AccessLevel.GameMaster )]
public MainControlStone MainControl
{
get { return MC; }
set { MC = value; }
}

public DateTime Left
{
get { return m_Left; }
set { m_Left = value; }
}

public DateTime StartDate
{
get { return m_StartDate; }
set { m_StartDate = value; }
}


public int GetPoints(){ return m_Points; } 

public void SubPoints(int chunk)
{ 
if((m_Points - chunk) > minPoints)
{ 
m_Points -= chunk; 
}
else
{ 
m_Points = minPoints; 
} 
} 

public void AddPoints(int chunk)
{ 
m_Points += chunk; 
} 


public bool HasEnoughPoints(int chunk)
{ 
if((m_Points - chunk) < 0)
{ 
return false; 
}
else
{ 
return true; 
} 
} 
// FACTION SYSTEM END


public override bool CanSee( Mobile m )
{
if ( m is PlayerMobile && ((PlayerMobile)m).m_VisList.Contains( this ) )
return true;

return base.CanSee( m );
}

public override bool CanSee( Item item )
{
if ( m_DesignContext != null && m_DesignContext.Foundation.IsHiddenToCustomizer( item ) )
return false;

return base.CanSee( item );
}

// FACTION SYSTEM BEGIN
public bool CanFactionKill()
{
if (m_FactionKill)
return true;
else
return false;
}

private class PurpleTizedItem
{
private Item m_Item;
private int m_Hue;

public PurpleTizedItem(Item item)
{
m_Item = item;
m_Hue = item.Hue;

}
public Item item 
{ 
get { return m_Item; } 
set { m_Item = value; } 
}
public int Hue 
{ 
get { return m_Hue; } 
set { m_Hue = value; } 
}
}

public void PurpleTize()
{
m_PurpleTizedItems = new ArrayList();

foreach (Item item in Items)
{
PurpleTizedItem pur = new PurpleTizedItem(item);
m_PurpleTizedItems.Add(pur);
item.Hue = 11;
item.Movable = false;
}
}

public void UnPurpleTize()
{
if (m_PurpleTizedItems != null)
{
foreach (PurpleTizedItem item in m_PurpleTizedItems)
{
if (item !=null && item.item != null)
{
item.item.Hue = item.Hue;
item.item.Movable = true;
}
}
}

m_PurpleTizedItems = null;
}


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

if (m_Faction == Faction.Britannians && m_Rank >= 0 && m_Rank <= 3)
{
list.Add(1060790);
list.Add(1060771);
}
if (m_Faction == Faction.Britannians && m_Rank > 3 && m_Rank <= 5)
{
list.Add(1060791);
list.Add(1060771);
}
if (m_Faction == Faction.Britannians && m_Rank >5 && m_Rank <= 7)
{
list.Add(1060792);
list.Add(1060771);
}
if (m_Faction == Faction.Britannians && m_Rank >7 && m_Rank <= 9)
{
list.Add(1060793);
list.Add(1060771);
}

if (m_Faction == Faction.Britannians && m_Rank >9)
{
list.Add(1060794);
list.Add(1060771);
}


if (m_Faction == Faction.ShadowLords && m_Rank > 0 && m_Rank <= 3)
{
list.Add(1060795);
list.Add(1060772);
}

if (m_Faction == Faction.ShadowLords && m_Rank > 3 && m_Rank <= 5)
{
list.Add(1060796);
list.Add(1060772);
}
if (m_Faction == Faction.ShadowLords && m_Rank > 5 && m_Rank <= 7)
{
list.Add(1060797);
list.Add(1060772);
}

if (m_Faction == Faction.ShadowLords && m_Rank > 7 && m_Rank <= 9)
{
list.Add(1060798);
list.Add(1060772);
}

if (m_Faction == Faction.ShadowLords && m_Rank > 9 )
{
list.Add(1060799);
list.Add(1060772);
}

if (m_Faction == Faction.Mages && m_Rank > 0 && m_Rank <= 3)
{
list.Add(1060785);
list.Add(1060770);
}

if (m_Faction == Faction.Mages && m_Rank > 3 && m_Rank <= 5)
{
list.Add(1060786);
list.Add(1060770);
}
if (m_Faction == Faction.Mages && m_Rank > 5&& m_Rank <= 7)
{
list.Add(1060787);
list.Add(1060770);
}

if (m_Faction == Faction.Mages && m_Rank > 7 && m_Rank <= 9)
{
list.Add(1060788);
list.Add(1060770);
}

if (m_Faction == Faction.Mages && m_Rank > 9 )
{
list.Add(1060789);
list.Add(1060770);
}

if (m_Faction == Faction.Minax && m_Rank > 0 && m_Rank <= 3)
{
list.Add(1060779);
list.Add(1060769);
}
if (m_Faction == Faction.Minax && m_Rank > 3 && m_Rank <= 5)
{
list.Add(1060780);
list.Add(1060769);
}
if (m_Faction == Faction.Minax && m_Rank > 5 && m_Rank <= 7)
{
list.Add(1060781);
list.Add(1060769);
}

if (m_Faction == Faction.Minax && m_Rank > 7 && m_Rank <= 9)
{
list.Add(1060782);
list.Add(1060769);
}
if (m_Faction == Faction.Minax && m_Rank > 9)
{
list.Add(1060783);
list.Add(1060769);
}
}
// FACTION SYSTEM END


#region Quest stuff
private QuestSystem m_Quest;
private ArrayList m_DoneQuests;

public QuestSystem Quest
{
get{ return m_Quest; }
set{ m_Quest = value; }
}

public ArrayList DoneQuests
{
get{ return m_DoneQuests; }
set{ m_DoneQuests = value; }
}
#endregion

#region MyRunUO Invalidation
private bool m_ChangedMyRunUO;

public bool ChangedMyRunUO
{
get{ return m_ChangedMyRunUO; }
set{ m_ChangedMyRunUO = value; }
}

public void InvalidateMyRunUO()
{
if ( !Deleted && !m_ChangedMyRunUO )
{
m_ChangedMyRunUO = true;
Engines.MyRunUO.MyRunUO.QueueMobileUpdate( this );
}
}

public override void OnKillsChange( int oldValue )
{
InvalidateMyRunUO();
}

public override void OnGenderChanged( bool oldFemale )
{
InvalidateMyRunUO();
}

public override void OnGuildChange( Server.Guilds.BaseGuild oldGuild )
{
InvalidateMyRunUO();
}

public override void OnGuildTitleChange( string oldTitle )
{
InvalidateMyRunUO();
}

public override void OnKarmaChange( int oldValue )
{
InvalidateMyRunUO();
}

public override void OnFameChange( int oldValue )
{
InvalidateMyRunUO();
}

public override void OnSkillChange( SkillName skill, double oldBase )
{
InvalidateMyRunUO();
}

public override void OnAccessLevelChanged( AccessLevel oldLevel )
{
InvalidateMyRunUO();
}

public override void OnRawStatChange( StatType stat, int oldValue )
{
InvalidateMyRunUO();
}

public override void OnDelete()
{
InvalidateMyRunUO();
}
#endregion

#region Fastwalk Prevention
private static bool FastwalkPrevention = true; // Is fastwalk prevention enabled?
private static TimeSpan FastwalkThreshold = TimeSpan.FromSeconds( 0.4 ); // Fastwalk prevention will become active after 0.4 seconds

private DateTime m_NextMovementTime;

public virtual bool UsesFastwalkPrevention{ get{ return ( AccessLevel < AccessLevel.GameMaster ); } }

public virtual TimeSpan ComputeMovementSpeed( Direction dir )
{
if ( (dir & Direction.Mask) != (this.Direction & Direction.Mask) )
return TimeSpan.Zero;

bool running = ( (dir & Direction.Running) != 0 );

bool onHorse = ( this.Mount != null );

if ( onHorse )
return ( running ? TimeSpan.FromSeconds( 0.1 ) : TimeSpan.FromSeconds( 0.2 ) );

return ( running ? TimeSpan.FromSeconds( 0.2 ) : TimeSpan.FromSeconds( 0.4 ) );
}

public static bool MovementThrottle_Callback( NetState ns )
{
PlayerMobile pm = ns.Mobile as PlayerMobile;

if ( pm == null || !pm.UsesFastwalkPrevention )
return true;

if ( pm.m_NextMovementTime == DateTime.MinValue )
{
// has not yet moved
pm.m_NextMovementTime = DateTime.Now;
return true;
}

TimeSpan ts = pm.m_NextMovementTime - DateTime.Now;

if ( ts < TimeSpan.Zero )
{
// been a while since we've last moved
pm.m_NextMovementTime = DateTime.Now;
return true;
}

return ( ts < FastwalkThreshold );
}
#endregion

#region Enemy of One
private Type m_EnemyOfOneType;
private bool m_WaitingForEnemy;

public Type EnemyOfOneType
{
get{ return m_EnemyOfOneType; }
set
{
Type oldType = m_EnemyOfOneType;
Type newType = value;

if ( oldType == newType )
return;

m_EnemyOfOneType = value;

DeltaEnemies( oldType, newType );
}
}

public bool WaitingForEnemy
{
get{ return m_WaitingForEnemy; }
set{ m_WaitingForEnemy = value; }
}

private void DeltaEnemies( Type oldType, Type newType )
{
foreach ( Mobile m in this.GetMobilesInRange( 18 ) )
{
Type t = m.GetType();

if ( t == oldType || t == newType )
Send( new MobileMoving( m, Notoriety.Compute( this, m ) ) );
}
}
#endregion

#region Hair and beard mods
private int m_HairModID = -1, m_HairModHue;
private int m_BeardModID = -1, m_BeardModHue;

public void SetHairMods( int hairID, int beardID )
{
if ( hairID == -1 )
InternalRestoreHair( true, ref m_HairModID, ref m_HairModHue );
else if ( hairID != -2 )
InternalChangeHair( true, hairID, ref m_HairModID, ref m_HairModHue );

if ( beardID == -1 )
InternalRestoreHair( false, ref m_BeardModID, ref m_BeardModHue );
else if ( beardID != -2 )
InternalChangeHair( false, beardID, ref m_BeardModID, ref m_BeardModHue );
}

private Item CreateHair( bool hair, int id, int hue )
{
if ( hair )
return Server.Items.Hair.CreateByID( id, hue );
else
return Server.Items.Beard.CreateByID( id, hue );
}

private void InternalRestoreHair( bool hair, ref int id, ref int hue )
{
if ( id == -1 )
return;

Item item = FindItemOnLayer( hair ? Layer.Hair : Layer.FacialHair );

if ( item != null )
item.Delete();

if ( id != 0 )
AddItem( CreateHair( hair, id, hue ) );

id = -1;
hue = 0;
}

private void InternalChangeHair( bool hair, int id, ref int storeID, ref int storeHue )
{
Item item = FindItemOnLayer( hair ? Layer.Hair : Layer.FacialHair );

if ( item != null )
{
if ( storeID == -1 )
{
storeID = item.ItemID;
storeHue = item.Hue;
}

item.Delete();
}
else if ( storeID == -1 )
{
storeID = 0;
storeHue = 0;
}

if ( id == 0 )
return;

AddItem( CreateHair( hair, id, 0 ) );
}
#endregion

#region Virtue stuff
private DateTime m_LastSacrificeGain;
private DateTime m_LastSacrificeLoss;
private int m_AvailableResurrects;

public DateTime LastSacrificeGain{ get{ return m_LastSacrificeGain; } set{ m_LastSacrificeGain = value; } }
public DateTime LastSacrificeLoss{ get{ return m_LastSacrificeLoss; } set{ m_LastSacrificeLoss = value; } }
public int AvailableResurrects{ get{ return m_AvailableResurrects; } set{ m_AvailableResurrects = value; } }

private DateTime m_NextJustAward;
private DateTime m_LastJusticeLoss;
private ArrayList m_JusticeProtectors;

public DateTime LastJusticeLoss{ get{ return m_LastJusticeLoss; } set{ m_LastJusticeLoss = value; } }
public ArrayList JusticeProtectors{ get{ return m_JusticeProtectors; } set{ m_JusticeProtectors = value; } }

private DateTime m_LastCompassionLoss;
private DateTime m_NextCompassionDay;
private int m_CompassionGains;

public DateTime LastCompassionLoss{ get{ return m_LastCompassionLoss; } set{ m_LastCompassionLoss = value; } }
public DateTime NextCompassionDay{ get{ return m_NextCompassionDay; } set{ m_NextCompassionDay = value; } }
public int CompassionGains{ get{ return m_CompassionGains; } set{ m_CompassionGains = value; } }
#endregion
}
}[CODE]/code
 

RoninGT

Sorceror
Twiz here is one problem

Code:
case 19: // <-- CHANGE TO YOUR NEW CASE NUMBER (I.E If your last case is 17 make this 18 )
{
m_Bioenginer = reader.ReadBool();
NextTamingBulkOrder = reader.ReadTimeSpan();
goto case 17; // <-- CHANGE NUMBER TO YOUR LAST CASES NUMBER.
}

Your at case 19 and skiping case 18 to goto case 17 In the read i explain that if you have a custom PM it will be differant for you you have to look at your last case and go from there. it should be

Code:
goto case 18;

EDIT: ALSO! change

Code:
writer.Write( (int) 18 ); // version

To:

Code:
writer.Write( (int) 19 ); // version

Cause your latest case is 19.


Still working on other crashes give me a moment i am getting ready to open a test so you guys can show me where this crash starts

Ill post again tonight

Ronin
 

RoninGT

Sorceror
Ok i have a test up for anyone who wishes to get on and help me test.

ip: revelations.no-ip.info
port: 2594

Sad part everyones crashing and i have had it running none stop on my server with zero crashes... Altho that dont mean its not gonna happen... First off..

The folder "Taming" needs to be cut and pasted into /Data/Bulk Orders/ Or you will get errors and possible crashes cause thats what tells the bod to fill with what and that would cause a null referance and maybe even crashes with props. If this is not your case i am still working on the ShrinkItem bug and the Pet powerscrolls...

Whew... Sorry for the mess i think i am gonna take up baskit weaving. hehe

or spelling :D

Anyway ill have the server up all night working on fixes drop in if you want to help

Thanks again for all the reporting and sorry for the mess ups here ill get them worked out

Ronin
 

RoninGT

Sorceror
Sorry for the multi posting I have uploaded a minor fix for Pet power scrolls, and Addressed and issue with the ShrinkItem Crashes. Not sure if its the one everyone is coming up with however i did crash when playing around with the shrink items this fixed it.

Will work on this thur out the night and check back here for any more problems

Ronin
 

Twlizer

Sorceror
Tahnk you for

Thank you helping me with the playermobile..i had fixed it before you replyed though but thanks all the same. Second could i ask you to explain the Bio Scripts a lilbit. I am confused on how they come into play on shard.

Thank you again
 

RoninGT

Sorceror
Bio 101

First off bio engineering is a taming bod reward. A player can get a bio tool by doing almost any bod, However in order to use the tool the player get a bio engineering book, and must fill and return at large 20 taming bod and its a random chance to get them.

A player must have 100 Taming 100 Tinkering to read the book and learn bio engineering (Tinkering cause its a type of tech skill and it just seemed right your welcome to change if you feel you need to)

Once a player has learned bio they can use the tool to make bio pet deeds and level 1 crystals. Any player can use a bio pet deed however ONLY a bio engineer can modify a pet.

When you double click the deed you will get a selection of body values.. If you pick one from the menu you will be stuck with that body value for the life of that pet. However if you pick None, It will start with a Default body value and later a rare form crystal can be used on it to make it a rare form.

Level 2, 3, Form, Counter Attacks, Power Attacks, and All Other crystals are found on the biolord npc as RARE loot. Very rare due to the powerful nature of level 3 crystals. also the Orgaincs needed to craft are found on the biolords (Will be adding more npcs soon After fixes)

The bio engineer uses the crystals on the bio pet to enhance stats, Skills, and other abilities of the creature.

Counter attacks can be learned and will preform them randomly there are 4 so far to pick from.

Power Attacks can be learned and will preform them rarly and randomly as attacking. (Ice blast is my favorite :) ) However the pet can only learn one Power and one Counter attack and this can never be change ( Unless a gm does it )

Anyone can control a bio pet however a bio must enhance it. (As stated above)

When a bio pet is first made its stats are very low and is not safe to fight with right away...

Some like the system some feel it takes away from the Might&Magic of UO however, Sorry i love tech and i tend to make alot of scripts about it

Hope you enjoy and hope this helps

Ronin

P.S. To make a short story long :cool:
Bio is the craft where you can make a pet rather than tame it, However they do have draw backs. like they cannot be shrunk.
 

Scripter

Wanderer
Evo Dragon w/shrink sys.

First of all I have to say that I love this shrink system. My players and I have noticed one lil problem with evo dragon. When its shrunken and enlarged, it looses all its kp points. Wasn't sure if anyone else reported this. Besides this slight hurdle, my players love it. being able to craft all thier potions and pet dyes and especially the pet leashes. Its been the biggest asset to my shard. Thank you :D
 
W

walmart

Guest
Scripter said:
First of all I have to say that I love this shrink system. My players and I have noticed one lil problem with evo dragon. When its shrunken and enlarged, it looses all its kp points. Wasn't sure if anyone else reported this. Besides this slight hurdle, my players love it. being able to craft all thier potions and pet dyes and especially the pet leashes. Its been the biggest asset to my shard. Thank you :D
you need to read the instructions there you have to add it on certain of your scripts read instruction kp wont get lost if you add the lines instruction says
 

RoninGT

Sorceror
Scripter said:
First of all I have to say that I love this shrink system. My players and I have noticed one lil problem with evo dragon. When its shrunken and enlarged, it looses all its kp points. Wasn't sure if anyone else reported this. Besides this slight hurdle, my players love it. being able to craft all thier potions and pet dyes and especially the pet leashes. Its been the biggest asset to my shard. Thank you :D

walmart said:
you need to read the instructions there you have to add it on certain of your scripts read instruction kp wont get lost if you add the lines instruction says

What they said, Evo do not come standard in the shrink system you have to add them in its very simple to do i have detailed readme on the howto, all you have to do is remove the /* */ around the code for Evos, DNA dragons however is another story :)

Ronin
 

Injall

Wanderer
Bug

Ok i am using an old version af this shrink system, so dont know if this has been corrected, but when we use "Drop" command on our animals, they drop they loot if they are monster. The problem is when deshrink and reshrink the pet, he drop again his loot !

Very bad bug :/
 

paladineD

Wanderer
Prob with biopets and shrink

I have noticed that when you shrink a bio engineered pet, no matter what form, its not saving what it has leanred. Its saving the stats skills and resists but no the special moves.
 

darksky

Sorceror
Crashed

My shard got a crash today, here is the log:

Exception:
System.ArgumentNullException: Key cannot be null.
Parameter name: key
at System.Collections.Hashtable.get_Item(Object
key)
at Server.TypeTable.Get(String key, Boolean
ignoreCase)
at Server.ScriptCompiler.FindTypeByName(String
name, Boolean ignoreCase)
at Server.ScriptCompiler.FindTypeByName(String
name)
at Server.Items.ShrinkItem.OnDoubleClick(Mobile
from)
at Server.Mobile.Use(Item item)
at Server.Network.PacketHandlers.UseReq(NetState
state, PacketReader pvSrc)
at
Server.Network.MessagePump.HandleReceive(NetState ns)
at Server.Network.MessagePump.Slice()
at Server.Core.Main(String[] args)

Any idea? Thanks! :)
 
W

walmart

Guest
i am not sure why but my shard crashed a week ago with same crash log that you posted it i took my off and added the stable stone less items so less lagg and also since you got that crash trust me its going to keep happing a lot thats why i use stable stone players love it
 

Sir Xuse

Wanderer
A bug..

Not sure if its a bug to report to u RoninGT or to Viago but the evo and dna on shrink lose the points still and worse thing after unshrink there stats are the same so if u keep shrinking and unshrinking it allows them to continue going through there levels i think best bet is to take them outta shrink all together hehe
 

RoninGT

Sorceror
Sorry i have been away for some time. I closed my shard down and started playing SWG lol, But i am reopening my shard with a new theme. and restarted work on this script. I will look into the bugs/errors you all have been having. and see what i can do. I myself never had the errors so having a hard time tracking them down.

Sorry for all the problems i will see what i can do to get it back up and running ok

Ronin

EDIT: Sorry walmart seen the stable stones they look nice hope there working out for you ok, I know you have had alot of issues with my system. Xuse Make sure you read the setup to enable evos and dnas so they store those values. Also Xuse ICQ me as soon as you can i would like your help testing the next release i have a new feature for all pets to breed and level and make any pet evo. I need some testers to help me get the bugs worked out sence i feel that was my problem i didnt have enough testers. hehe

Ronin
 
Top