#W# Source and Scripts added. Added Scripts/Settings.cs to expose some basic tweak able settings.

This commit is contained in:
WarrentyExpired 2026-08-06 11:06:05 -04:00
parent b51c58f514
commit 3045c83799
3512 changed files with 627673 additions and 0 deletions

View file

@ -0,0 +1,324 @@
using System;
namespace Server.Items
{
[FlipableAttribute( 0x1BD7, 0x1BDA )]
public class Board : Item, ICommodity
{
private CraftResource m_Resource;
[CommandProperty( AccessLevel.GameMaster )]
public CraftResource Resource
{
get { return m_Resource; }
set { m_Resource = value; InvalidateProperties(); }
}
int ICommodity.DescriptionNumber
{
get
{
if ( m_Resource >= CraftResource.OakWood && m_Resource <= CraftResource.YewWood )
return 1075052 + ( (int)m_Resource - (int)CraftResource.OakWood );
switch ( m_Resource )
{
case CraftResource.Bloodwood: return 1075055;
case CraftResource.Frostwood: return 1075056;
case CraftResource.Heartwood: return 1075062; //WHY Osi. Why?
}
return LabelNumber;
}
}
bool ICommodity.IsDeedable { get { return true; } }
[Constructable]
public Board()
: this( 1 )
{
}
[Constructable]
public Board( int amount )
: this( CraftResource.RegularWood, amount )
{
}
public Board( Serial serial )
: base( serial )
{
}
[Constructable]
public Board( CraftResource resource ) : this( resource, 1 )
{
}
[Constructable]
public Board( CraftResource resource, int amount )
: base( 0x1BD7 )
{
Stackable = true;
Amount = amount;
m_Resource = resource;
Hue = CraftResources.GetHue( resource );
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( !CraftResources.IsStandard( m_Resource ) )
{
int num = CraftResources.GetLocalizationNumber( m_Resource );
if ( num > 0 )
list.Add( num );
else
list.Add( CraftResources.GetName( m_Resource ) );
}
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 3 );
writer.Write( (int)m_Resource );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 3:
case 2:
{
m_Resource = (CraftResource)reader.ReadInt();
break;
}
}
if ( (version == 0 && Weight == 0.1) || ( version <= 2 && Weight == 2 ) )
Weight = -1;
if ( version <= 1 )
m_Resource = CraftResource.RegularWood;
}
}
public class HeartwoodBoard : Board
{
[Constructable]
public HeartwoodBoard()
: this( 1 )
{
}
[Constructable]
public HeartwoodBoard( int amount )
: base( CraftResource.Heartwood, amount )
{
}
public HeartwoodBoard( Serial serial )
: base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int)0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
public class BloodwoodBoard : Board
{
[Constructable]
public BloodwoodBoard()
: this( 1 )
{
}
[Constructable]
public BloodwoodBoard( int amount )
: base( CraftResource.Bloodwood, amount )
{
}
public BloodwoodBoard( Serial serial )
: base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int)0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
public class FrostwoodBoard : Board
{
[Constructable]
public FrostwoodBoard()
: this( 1 )
{
}
[Constructable]
public FrostwoodBoard( int amount )
: base( CraftResource.Frostwood, amount )
{
}
public FrostwoodBoard( Serial serial )
: base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int)0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
public class OakBoard : Board
{
[Constructable]
public OakBoard()
: this( 1 )
{
}
[Constructable]
public OakBoard( int amount )
: base( CraftResource.OakWood, amount )
{
}
public OakBoard( Serial serial )
: base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int)0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
public class AshBoard : Board
{
[Constructable]
public AshBoard()
: this( 1 )
{
}
[Constructable]
public AshBoard( int amount )
: base( CraftResource.AshWood, amount )
{
}
public AshBoard( Serial serial )
: base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int)0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
public class YewBoard : Board
{
[Constructable]
public YewBoard()
: this( 1 )
{
}
[Constructable]
public YewBoard( int amount )
: base( CraftResource.YewWood, amount )
{
}
public YewBoard( Serial serial )
: base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int)0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,502 @@
using System;
using Server;
using Server.Multis;
using Server.Mobiles;
using Server.Targeting;
namespace Server.Items
{
[FlipableAttribute( 0x1EBA, 0x1EBB )]
public class TaxidermyKit : Item
{
public override int LabelNumber{ get{ return 1041279; } } // a taxidermy kit
[Constructable]
public TaxidermyKit() : base( 0x1EBA )
{
Weight = 1.0;
}
public TaxidermyKit( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
public override void OnDoubleClick(Mobile from)
{
if ( !IsChildOf( from.Backpack ) )
{
from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it.
}
else if ( from.Skills[SkillName.Carpentry].Base < 90.0 )
{
from.SendLocalizedMessage( 1042594 ); // You do not understand how to use this.
}
else
{
from.SendLocalizedMessage( 1042595 ); // Target the corpse to make a trophy out of.
from.Target = new CorpseTarget( this );
}
}
private static TrophyInfo[] m_Table = new TrophyInfo[]
{
new TrophyInfo( typeof( BrownBear ), 0x1E60, 1041093, 1041107 ),
new TrophyInfo( typeof( GreatHart ), 0x1E61, 1041095, 1041109 ),
new TrophyInfo( typeof( BigFish ), 0x1E62, 1041096, 1041110 ),
new TrophyInfo( typeof( Gorilla ), 0x1E63, 1041091, 1041105 ),
new TrophyInfo( typeof( Orc ), 0x1E64, 1041090, 1041104 ),
new TrophyInfo( typeof( PolarBear ), 0x1E65, 1041094, 1041108 ),
new TrophyInfo( typeof( Troll ), 0x1E66, 1041092, 1041106 )
};
public class TrophyInfo
{
public TrophyInfo( Type type, int id, int deedNum, int addonNum )
{
m_CreatureType = type;
m_NorthID = id;
m_DeedNumber = deedNum;
m_AddonNumber = addonNum;
}
private Type m_CreatureType;
private int m_NorthID;
private int m_DeedNumber;
private int m_AddonNumber;
public Type CreatureType { get { return m_CreatureType; } }
public int NorthID { get { return m_NorthID; } }
public int DeedNumber { get { return m_DeedNumber; } }
public int AddonNumber { get { return m_AddonNumber; } }
}
private class CorpseTarget : Target
{
private TaxidermyKit m_Kit;
public CorpseTarget( TaxidermyKit kit ) : base( 3, false, TargetFlags.None )
{
m_Kit = kit;
}
protected override void OnTarget( Mobile from, object targeted )
{
if ( m_Kit.Deleted )
return;
if ( !(targeted is Corpse) && !(targeted is BigFish) )
{
from.SendLocalizedMessage( 1042600 ); // That is not a corpse!
}
else if ( targeted is Corpse && ((Corpse)targeted).VisitedByTaxidermist )
{
from.SendLocalizedMessage( 1042596 ); // That corpse seems to have been visited by a taxidermist already.
}
else if ( !m_Kit.IsChildOf( from.Backpack ) )
{
from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it.
}
else if ( from.Skills[SkillName.Carpentry].Base < 90.0 )
{
from.SendLocalizedMessage( 1042603 ); // You would not understand how to use the kit.
}
else
{
object obj = targeted;
if ( obj is Corpse )
obj = ((Corpse)obj).Owner;
if ( obj != null )
{
for ( int i = 0; i < m_Table.Length; i++ )
{
if ( m_Table[i].CreatureType == obj.GetType() )
{
Container pack = from.Backpack;
if ( pack != null && pack.ConsumeTotal( typeof( Board ), 10 ) )
{
from.SendLocalizedMessage( 1042278 ); // You review the corpse and find it worthy of a trophy.
from.SendLocalizedMessage( 1042602 ); // You use your kit up making the trophy.
Mobile hunter = null;
int weight = 0;
if ( targeted is BigFish )
{
BigFish fish = targeted as BigFish;
hunter = fish.Fisher;
weight = (int)fish.Weight;
fish.Consume();
}
from.AddToBackpack( new TrophyDeed( m_Table[i], hunter, weight ) );
if ( targeted is Corpse )
((Corpse)targeted).VisitedByTaxidermist = true;
m_Kit.Delete();
return;
}
else
{
from.SendLocalizedMessage( 1042598 ); // You do not have enough boards.
return;
}
}
}
}
from.SendLocalizedMessage( 1042599 ); // That does not look like something you want hanging on a wall.
}
}
}
}
public class TrophyAddon : Item, IAddon
{
public override bool ForceShowProperties { get { return ObjectPropertyList.Enabled; } }
private int m_WestID;
private int m_NorthID;
private int m_DeedNumber;
private int m_AddonNumber;
private Mobile m_Hunter;
private int m_AnimalWeight;
[CommandProperty( AccessLevel.GameMaster )]
public int WestID{ get{ return m_WestID; } set{ m_WestID = value; } }
[CommandProperty( AccessLevel.GameMaster )]
public int NorthID{ get{ return m_NorthID; } set{ m_NorthID = value; } }
[CommandProperty( AccessLevel.GameMaster )]
public int DeedNumber{ get{ return m_DeedNumber; } set{ m_DeedNumber = value; } }
[CommandProperty( AccessLevel.GameMaster )]
public int AddonNumber{ get{ return m_AddonNumber; } set{ m_AddonNumber = value; InvalidateProperties(); } }
[CommandProperty( AccessLevel.GameMaster )]
public Mobile Hunter{ get{ return m_Hunter; } set{ m_Hunter = value; InvalidateProperties(); } }
[CommandProperty( AccessLevel.GameMaster )]
public int AnimalWeight{ get{ return m_AnimalWeight; } set{ m_AnimalWeight = value; InvalidateProperties(); } }
public override int LabelNumber{ get{ return m_AddonNumber; } }
[Constructable]
public TrophyAddon( Mobile from, int itemID, int westID, int northID, int deedNumber, int addonNumber ) : this( from, itemID, westID, northID, deedNumber, addonNumber, null, 0 )
{
}
public TrophyAddon( Mobile from, int itemID, int westID, int northID, int deedNumber, int addonNumber, Mobile hunter, int animalWeight ) : base( itemID )
{
m_WestID = westID;
m_NorthID = northID;
m_DeedNumber = deedNumber;
m_AddonNumber = addonNumber;
m_Hunter = hunter;
m_AnimalWeight = animalWeight;
Movable = false;
MoveToWorld( from.Location, from.Map );
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( m_AnimalWeight >= 20 )
{
if ( m_Hunter != null )
list.Add( 1070857, m_Hunter.Name ); // Caught by ~1_fisherman~
list.Add( 1070858, m_AnimalWeight.ToString() ); // ~1_weight~ stones
}
}
public TrophyAddon( Serial serial ) : base( serial )
{
}
public bool CouldFit( IPoint3D p, Map map )
{
if ( !map.CanFit( p.X, p.Y, p.Z, this.ItemData.Height ) )
return false;
if ( this.ItemID == m_NorthID )
return BaseAddon.IsWall( p.X, p.Y - 1, p.Z, map ); // North wall
else
return BaseAddon.IsWall( p.X - 1, p.Y, p.Z, map ); // West wall
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 ); // version
writer.Write( (Mobile) m_Hunter );
writer.Write( (int) m_AnimalWeight );
writer.Write( (int) m_WestID );
writer.Write( (int) m_NorthID );
writer.Write( (int) m_DeedNumber );
writer.Write( (int) m_AddonNumber );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 1:
{
m_Hunter = reader.ReadMobile();
m_AnimalWeight = reader.ReadInt();
goto case 0;
}
case 0:
{
m_WestID = reader.ReadInt();
m_NorthID = reader.ReadInt();
m_DeedNumber = reader.ReadInt();
m_AddonNumber = reader.ReadInt();
break;
}
}
Timer.DelayCall( TimeSpan.Zero, new TimerCallback( FixMovingCrate ) );
}
private void FixMovingCrate()
{
if ( this.Deleted )
return;
if ( this.Movable || this.IsLockedDown )
{
Item deed = this.Deed;
if ( this.Parent is Item )
{
((Item)this.Parent).AddItem( deed );
deed.Location = this.Location;
}
else
{
deed.MoveToWorld( this.Location, this.Map );
}
Delete();
}
}
public Item Deed
{
get{ return new TrophyDeed( m_WestID, m_NorthID, m_DeedNumber, m_AddonNumber, m_Hunter, m_AnimalWeight ); }
}
public override void OnDoubleClick( Mobile from )
{
BaseHouse house = BaseHouse.FindHouseAt( this );
if ( house != null && house.IsCoOwner( from ) )
{
if ( from.InRange( GetWorldLocation(), 1 ) )
{
from.AddToBackpack( this.Deed );
Delete();
}
else
{
from.SendLocalizedMessage( 500295 ); // You are too far away to do that.
}
}
}
}
[Flipable( 0x14F0, 0x14EF )]
public class TrophyDeed : Item
{
private int m_WestID;
private int m_NorthID;
private int m_DeedNumber;
private int m_AddonNumber;
private Mobile m_Hunter;
private int m_AnimalWeight;
[CommandProperty( AccessLevel.GameMaster )]
public int WestID{ get{ return m_WestID; } set{ m_WestID = value; } }
[CommandProperty( AccessLevel.GameMaster )]
public int NorthID{ get{ return m_NorthID; } set{ m_NorthID = value; } }
[CommandProperty( AccessLevel.GameMaster )]
public int DeedNumber{ get{ return m_DeedNumber; } set{ m_DeedNumber = value; InvalidateProperties(); } }
[CommandProperty( AccessLevel.GameMaster )]
public int AddonNumber{ get{ return m_AddonNumber; } set{ m_AddonNumber = value; } }
[CommandProperty( AccessLevel.GameMaster )]
public Mobile Hunter{ get{ return m_Hunter; } set{ m_Hunter = value; InvalidateProperties(); } }
[CommandProperty( AccessLevel.GameMaster )]
public int AnimalWeight{ get{ return m_AnimalWeight; } set{ m_AnimalWeight = value; InvalidateProperties(); } }
public override int LabelNumber{ get{ return m_DeedNumber; } }
[Constructable]
public TrophyDeed( int westID, int northID, int deedNumber, int addonNumber ) : this( westID, northID, deedNumber, addonNumber, null, 0 )
{
}
public TrophyDeed( int westID, int northID, int deedNumber, int addonNumber, Mobile hunter, int animalWeight ) : base( 0x14F0 )
{
m_WestID = westID;
m_NorthID = northID;
m_DeedNumber = deedNumber;
m_AddonNumber = addonNumber;
m_Hunter = hunter;
m_AnimalWeight = animalWeight;
}
public TrophyDeed( TaxidermyKit.TrophyInfo info, Mobile hunter, int animalWeight )
: this( info.NorthID + 7, info.NorthID, info.DeedNumber, info.AddonNumber, hunter, animalWeight )
{
}
public TrophyDeed( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( m_AnimalWeight >= 20 )
{
if ( m_Hunter != null )
list.Add( 1070857, m_Hunter.Name ); // Caught by ~1_fisherman~
list.Add( 1070858, m_AnimalWeight.ToString() ); // ~1_weight~ stones
}
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 ); // version
writer.Write( (Mobile) m_Hunter );
writer.Write( (int) m_AnimalWeight );
writer.Write( (int) m_WestID );
writer.Write( (int) m_NorthID );
writer.Write( (int) m_DeedNumber );
writer.Write( (int) m_AddonNumber );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 1:
{
m_Hunter = reader.ReadMobile();
m_AnimalWeight = reader.ReadInt();
goto case 0;
}
case 0:
{
m_WestID = reader.ReadInt();
m_NorthID = reader.ReadInt();
m_DeedNumber = reader.ReadInt();
m_AddonNumber = reader.ReadInt();
break;
}
}
}
public override void OnDoubleClick( Mobile from )
{
if ( IsChildOf( from.Backpack ) )
{
BaseHouse house = BaseHouse.FindHouseAt( from );
if ( house != null && house.IsCoOwner( from ) )
{
bool northWall = BaseAddon.IsWall( from.X, from.Y - 1, from.Z, from.Map );
bool westWall = BaseAddon.IsWall( from.X - 1, from.Y, from.Z, from.Map );
if ( northWall && westWall )
{
switch ( from.Direction & Direction.Mask )
{
case Direction.North:
case Direction.South: northWall = true; westWall = false; break;
case Direction.East:
case Direction.West: northWall = false; westWall = true; break;
default: from.SendMessage( "Turn to face the wall on which to hang this trophy." ); return;
}
}
int itemID = 0;
if ( northWall )
itemID = m_NorthID;
else if ( westWall )
itemID = m_WestID;
else
from.SendLocalizedMessage( 1042626 ); // The trophy must be placed next to a wall.
if ( itemID > 0 )
{
house.Addons.Add( new TrophyAddon( from, itemID, m_WestID, m_NorthID, m_DeedNumber, m_AddonNumber, m_Hunter, m_AnimalWeight ) );
Delete();
}
}
else
{
from.SendLocalizedMessage( 502092 ); // You must be in your house to do this.
}
}
else
{
from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it.
}
}
}
}