branch sync

This commit is contained in:
mark 2007-11-27 06:36:57 +00:00
parent 0b19ae183e
commit 162cf6f0a9
13 changed files with 226 additions and 40 deletions

View file

@ -246,7 +246,7 @@ namespace Server.Engines.Harvest
{ {
Item preLoot = null; Item preLoot = null;
switch ( Utility.Random( 7 ) ) switch ( Utility.Random( 8 ) )
{ {
case 0: // Body parts case 0: // Body parts
{ {
@ -288,7 +288,16 @@ namespace Server.Engines.Harvest
preLoot = new ShipwreckedItem( Utility.Random( 0xFC4, 9 ) ); preLoot = new ShipwreckedItem( Utility.Random( 0xFC4, 9 ) );
break; break;
} }
case 5: // Misc case 5: //Hats
{
if ( Utility.RandomBool() )
preLoot = new SkullCap();
else
preLoot = new TricorneHat();
break;
}
case 6: // Misc
{ {
int[] list = new int[] int[] list = new int[]
{ {
@ -299,13 +308,22 @@ namespace Server.Engines.Harvest
0x1EB1, 0x1EB2, 0x1EB3, 0x1EB4 // barrel staves 0x1EB1, 0x1EB2, 0x1EB3, 0x1EB4 // barrel staves
}; };
preLoot = new ShipwreckedItem( Utility.RandomList( list ) ); if ( Utility.Random( list.Length + 1 ) == 0 )
preLoot = new Candelabra();
else
preLoot = new ShipwreckedItem( Utility.RandomList( list ) );
break; break;
} }
} }
if ( preLoot != null ) if ( preLoot != null )
{
if ( preLoot is IShipwreckedItem )
( (IShipwreckedItem)preLoot ).IsShipwreckedItem = true;
return preLoot; return preLoot;
}
LockableContainer chest; LockableContainer chest;

View file

@ -10,10 +10,10 @@ namespace Server.Gumps
{ {
public enum ResurrectMessage public enum ResurrectMessage
{ {
ChaosShrine=0, ChaosShrine = 0,
VirtueShrine=1, VirtueShrine = 1,
Healer=2, Healer = 2,
Generic=3, Generic = 3,
} }
public class ResurrectGump : Gump public class ResurrectGump : Gump

View file

@ -3,6 +3,8 @@ using System.IO;
using System.Text; using System.Text;
using Server; using Server;
using Server.Network; using Server.Network;
using Server.Gumps;
using Server.Multis;
namespace Server.Items namespace Server.Items
{ {
@ -51,12 +53,13 @@ namespace Server.Items
} }
} }
public class BaseBook : Item public class BaseBook : Item, ISecurable
{ {
private string m_Title; private string m_Title;
private string m_Author; private string m_Author;
private BookPageInfo[] m_Pages; private BookPageInfo[] m_Pages;
private bool m_Writable; private bool m_Writable;
private SecureLevel m_SecureLevel;
[CommandProperty( AccessLevel.GameMaster )] [CommandProperty( AccessLevel.GameMaster )]
public string Title public string Title
@ -177,7 +180,11 @@ namespace Server.Items
if ( content == null || !content.IsMatch( m_Pages ) ) if ( content == null || !content.IsMatch( m_Pages ) )
flags |= SaveFlags.Content; flags |= SaveFlags.Content;
writer.Write( (int) 3 ); // version
writer.Write( (int) 4 ); // version
writer.Write( (int)m_SecureLevel );
writer.Write( (byte) flags ); writer.Write( (byte) flags );
@ -204,6 +211,11 @@ namespace Server.Items
switch ( version ) switch ( version )
{ {
case 4:
{
m_SecureLevel = (SecureLevel)reader.ReadInt();
goto case 3;
}
case 3: case 3:
case 2: case 2:
{ {
@ -324,7 +336,7 @@ namespace Server.Items
Mobile from = state.Mobile; Mobile from = state.Mobile;
BaseBook book = World.FindItem( pvSrc.ReadInt32() ) as BaseBook; BaseBook book = World.FindItem( pvSrc.ReadInt32() ) as BaseBook;
if ( book == null || !book.Writable || !from.InRange( book.GetWorldLocation(), 1 ) ) if ( book == null || !book.Writable || !from.InRange( book.GetWorldLocation(), 1 ) || !book.IsAccessibleTo( from ) )
return; return;
pvSrc.Seek( 4, SeekOrigin.Current ); // Skip flags and page count pvSrc.Seek( 4, SeekOrigin.Current ); // Skip flags and page count
@ -341,7 +353,7 @@ namespace Server.Items
Mobile from = state.Mobile; Mobile from = state.Mobile;
BaseBook book = World.FindItem( pvSrc.ReadInt32() ) as BaseBook; BaseBook book = World.FindItem( pvSrc.ReadInt32() ) as BaseBook;
if ( book == null || !book.Writable || !from.InRange( book.GetWorldLocation(), 1 ) ) if ( book == null || !book.Writable || !from.InRange( book.GetWorldLocation(), 1 ) || !book.IsAccessibleTo( from ) )
return; return;
pvSrc.Seek( 4, SeekOrigin.Current ); // Skip flags and page count pvSrc.Seek( 4, SeekOrigin.Current ); // Skip flags and page count
@ -369,7 +381,7 @@ namespace Server.Items
Mobile from = state.Mobile; Mobile from = state.Mobile;
BaseBook book = World.FindItem( pvSrc.ReadInt32() ) as BaseBook; BaseBook book = World.FindItem( pvSrc.ReadInt32() ) as BaseBook;
if ( book == null || !book.Writable || !from.InRange( book.GetWorldLocation(), 1 ) ) if ( book == null || !book.Writable || !from.InRange( book.GetWorldLocation(), 1 ) || !book.IsAccessibleTo( from ) )
return; return;
int pageCount = pvSrc.ReadUInt16(); int pageCount = pvSrc.ReadUInt16();
@ -408,6 +420,23 @@ namespace Server.Items
} }
} }
} }
#region ISecurable Members
[CommandProperty( AccessLevel.GameMaster )]
public SecureLevel Level
{
get
{
return m_SecureLevel;
}
set
{
m_SecureLevel = value;
}
}
#endregion
} }
public sealed class BookPageDetails : Packet public sealed class BookPageDetails : Packet

View file

@ -639,21 +639,7 @@ namespace Server.Items
{ {
List<EquipInfoAttribute> attrs = new List<EquipInfoAttribute>(); List<EquipInfoAttribute> attrs = new List<EquipInfoAttribute>();
if ( DisplayLootType ) AddEquipInfoAttributes( from, attrs );
{
if ( LootType == LootType.Blessed )
attrs.Add( new EquipInfoAttribute( 1038021 ) ); // blessed
else if ( LootType == LootType.Cursed )
attrs.Add( new EquipInfoAttribute( 1049643 ) ); // cursed
}
#region Factions
if ( m_FactionState != null )
attrs.Add( new EquipInfoAttribute( 1041350 ) ); // faction item
#endregion
if ( m_Quality == ClothingQuality.Exceptional )
attrs.Add( new EquipInfoAttribute( 1018305 - (int)m_Quality ) );
int number; int number;
@ -675,6 +661,25 @@ namespace Server.Items
from.Send( new DisplayEquipmentInfo( this, eqInfo ) ); from.Send( new DisplayEquipmentInfo( this, eqInfo ) );
} }
public virtual void AddEquipInfoAttributes( Mobile from, List<EquipInfoAttribute> attrs )
{
if ( DisplayLootType )
{
if ( LootType == LootType.Blessed )
attrs.Add( new EquipInfoAttribute( 1038021 ) ); // blessed
else if ( LootType == LootType.Cursed )
attrs.Add( new EquipInfoAttribute( 1049643 ) ); // cursed
}
#region Factions
if ( m_FactionState != null )
attrs.Add( new EquipInfoAttribute( 1041350 ) ); // faction item
#endregion
if ( m_Quality == ClothingQuality.Exceptional )
attrs.Add( new EquipInfoAttribute( 1018305 - (int)m_Quality ) );
}
#region Serialization #region Serialization
private static void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf ) private static void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf )
{ {

View file

@ -1,10 +1,21 @@
using System; using System;
using Server.Engines.Craft; using Server.Engines.Craft;
using Server.Network;
using System.Collections.Generic;
namespace Server.Items namespace Server.Items
{ {
public abstract class BaseHat : BaseClothing public abstract class BaseHat : BaseClothing, IShipwreckedItem
{ {
private bool m_IsShipwreckedItem;
[CommandProperty( AccessLevel.GameMaster )]
public bool IsShipwreckedItem
{
get { return m_IsShipwreckedItem; }
set { m_IsShipwreckedItem = value; }
}
public BaseHat( int itemID ) : this( itemID, 0 ) public BaseHat( int itemID ) : this( itemID, 0 )
{ {
} }
@ -21,7 +32,9 @@ namespace Server.Items
{ {
base.Serialize( writer ); base.Serialize( writer );
writer.Write( (int) 0 ); // version writer.Write( (int) 1 ); // version
writer.Write( m_IsShipwreckedItem );
} }
public override void Deserialize( GenericReader reader ) public override void Deserialize( GenericReader reader )
@ -29,6 +42,31 @@ namespace Server.Items
base.Deserialize( reader ); base.Deserialize( reader );
int version = reader.ReadInt(); int version = reader.ReadInt();
switch ( version )
{
case 1:
{
m_IsShipwreckedItem = reader.ReadBool();
break;
}
}
}
public override void AddEquipInfoAttributes( Mobile from, List<EquipInfoAttribute> attrs )
{
base.AddEquipInfoAttributes( from, attrs );
if( m_IsShipwreckedItem )
attrs.Add( new EquipInfoAttribute( 1041645 ) ); // recovered from a shipwreck
}
public override void AddNameProperties( ObjectPropertyList list )
{
base.AddNameProperties( list );
if ( m_IsShipwreckedItem )
list.Add( 1041645 ); // recovered from a shipwreck
} }
public override int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) public override int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )

View file

@ -5,7 +5,7 @@ using Server.Engines.Craft;
namespace Server.Items namespace Server.Items
{ {
public abstract class LockableContainer : TrapableContainer, ILockable, ILockpickable, ICraftable//, ITelekinesisable public abstract class LockableContainer : TrapableContainer, ILockable, ILockpickable, ICraftable, IShipwreckedItem
{ {
private bool m_Locked; private bool m_Locked;
private int m_LockLevel, m_MaxLockLevel, m_RequiredSkill; private int m_LockLevel, m_MaxLockLevel, m_RequiredSkill;
@ -121,7 +121,9 @@ namespace Server.Items
{ {
base.Serialize( writer ); base.Serialize( writer );
writer.Write( (int) 5 ); // version writer.Write( (int) 6 ); // version
writer.Write( m_IsShipwreckedItem );
writer.Write( (bool) m_TrapOnLockpick ); writer.Write( (bool) m_TrapOnLockpick );
@ -142,6 +144,12 @@ namespace Server.Items
switch ( version ) switch ( version )
{ {
case 6:
{
m_IsShipwreckedItem = reader.ReadBool();
goto case 5;
}
case 5: case 5:
{ {
m_TrapOnLockpick = reader.ReadBool(); m_TrapOnLockpick = reader.ReadBool();
@ -332,6 +340,21 @@ namespace Server.Items
} }
} }
public override void AddNameProperties( ObjectPropertyList list )
{
base.AddNameProperties( list );
if ( m_IsShipwreckedItem )
list.Add( 1041645 ); // recovered from a shipwreck
}
public override void OnSingleClick( Mobile from )
{
base.OnSingleClick( from );
LabelTo( from, 1041645 ); //recovered from a shipwreck
}
#region ICraftable Members #region ICraftable Members
public int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue ) public int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
@ -372,5 +395,18 @@ namespace Server.Items
} }
#endregion #endregion
#region IShipwreckedItem Members
private bool m_IsShipwreckedItem;
[CommandProperty( AccessLevel.GameMaster )]
public bool IsShipwreckedItem
{
get { return m_IsShipwreckedItem; }
set { m_IsShipwreckedItem = value; }
}
#endregion
} }
} }

View file

@ -3,7 +3,7 @@ using Server;
namespace Server.Items namespace Server.Items
{ {
public class Candelabra : BaseLight public class Candelabra : BaseLight, IShipwreckedItem
{ {
public override int LitItemID{ get { return 0xB1D; } } public override int LitItemID{ get { return 0xB1D; } }
public override int UnlitItemID{ get { return 0xA27; } } public override int UnlitItemID{ get { return 0xA27; } }
@ -24,13 +24,51 @@ namespace Server.Items
public override void Serialize( GenericWriter writer ) public override void Serialize( GenericWriter writer )
{ {
base.Serialize( writer ); base.Serialize( writer );
writer.Write( (int) 0 ); writer.Write( (int) 1 );
writer.Write( m_IsShipwreckedItem );
} }
public override void Deserialize( GenericReader reader ) public override void Deserialize( GenericReader reader )
{ {
base.Deserialize( reader ); base.Deserialize( reader );
int version = reader.ReadInt(); int version = reader.ReadInt();
switch ( version )
{
case 1:
{
m_IsShipwreckedItem = reader.ReadBool();
break;
}
}
} }
public override void AddNameProperties( ObjectPropertyList list )
{
base.AddNameProperties( list );
if ( m_IsShipwreckedItem )
list.Add( 1041645 ); // recovered from a shipwreck
}
public override void OnSingleClick( Mobile from )
{
base.OnSingleClick( from );
LabelTo( from, 1041645 ); //recovered from a shipwreck
}
#region IShipwreckedItem Members
private bool m_IsShipwreckedItem;
[CommandProperty( AccessLevel.GameMaster )]
public bool IsShipwreckedItem
{
get { return m_IsShipwreckedItem; }
set { m_IsShipwreckedItem = value; }
}
#endregion
} }
} }

View file

@ -2,7 +2,12 @@ using System;
namespace Server.Items namespace Server.Items
{ {
public class ShipwreckedItem : Item, IDyable public interface IShipwreckedItem
{
bool IsShipwreckedItem { get; set; }
}
public class ShipwreckedItem : Item, IDyable, IShipwreckedItem
{ {
public ShipwreckedItem( int itemID ) : base( itemID ) public ShipwreckedItem( int itemID ) : base( itemID )
{ {
@ -57,5 +62,20 @@ namespace Server.Items
from.SendLocalizedMessage( sender.FailMessage ); from.SendLocalizedMessage( sender.FailMessage );
return false; return false;
} }
#region IShipwreckedItem Members
public bool IsShipwreckedItem
{
get
{
return true; //It's a ShipwreckedItem item. 'Course it's gonna be a Shipwreckeditem
}
set
{
}
}
#endregion
} }
} }

View file

@ -277,7 +277,7 @@ namespace Server.Misc
return Notoriety.Enemy; return Notoriety.Enemy;
} }
if( target.Kills >= 5 || (target.Body.IsMonster && IsSummoned( target as BaseCreature ) && !(target is BaseFamiliar) && !(target is Golem)) || (target is BaseCreature && (((BaseCreature)target).AlwaysMurderer || ((BaseCreature)target).IsAnimatedDead)) ) if ( target.Kills >= 5 || ( target.Body.IsMonster && IsSummoned( target as BaseCreature ) && !( target is BaseFamiliar ) && !( target is ArcaneFey ) && !( target is Golem ) ) || ( target is BaseCreature && ( ( (BaseCreature)target ).AlwaysMurderer || ( (BaseCreature)target ).IsAnimatedDead ) ) )
return Notoriety.Murderer; return Notoriety.Murderer;
if( target.Criminal ) if( target.Criminal )

View file

@ -151,7 +151,7 @@ namespace Server.Misc
get { return "shard poller"; } get { return "shard poller"; }
} }
[Constructable] [Constructable( AccessLevel.Administrator )]
public ShardPoller() : base( 0x1047 ) public ShardPoller() : base( 0x1047 )
{ {
m_Duration = TimeSpan.FromHours( 24.0 ); m_Duration = TimeSpan.FromHours( 24.0 );

View file

@ -88,7 +88,6 @@ namespace Server.Mobiles
ScaleResistances(); ScaleResistances();
DoCounter( attacker ); DoCounter( attacker );
} }
private void ScaleResistances() private void ScaleResistances()

View file

@ -1013,8 +1013,6 @@ namespace Server.Multis
return true; return true;
else if ( item is Clock ) else if ( item is Clock )
return true; return true;
else if ( item is BaseBook )
return true;
else if ( item is BaseInstrument ) else if ( item is BaseInstrument )
return true; return true;
else if ( item is Dyes || item is DyeTub ) else if ( item is Dyes || item is DyeTub )

View file

@ -913,7 +913,12 @@ namespace Server.Multis
} }
else if ( cost < 0 ) else if ( cost < 0 )
{ {
if ( Banker.Deposit( from, -cost ) ) if ( this.Deleted ) {
from.SendLocalizedMessage( 1060397, ( -cost ).ToString() ); // ~1_AMOUNT~ gold has been deposited into your bank box. (let them think it worked)
using ( StreamWriter op = new StreamWriter( "customexploiters.log", true ) )
op.WriteLine( "{0}\t{1}\t{2}\tLocation: {3}", from.Account, from.NetState != null ? from.NetState.ToString() : "null account", from.RawName, from.Location.ToString() );
}
else if ( Banker.Deposit( from, -cost ) )
from.SendLocalizedMessage( 1060397, ( -cost ).ToString() ); // ~1_AMOUNT~ gold has been deposited into your bank box. from.SendLocalizedMessage( 1060397, ( -cost ).ToString() ); // ~1_AMOUNT~ gold has been deposited into your bank box.
else else
return; return;