#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,32 @@
using System;
namespace Server.Items
{
public class BlackDyeTub : DyeTub
{
[Constructable]
public BlackDyeTub()
{
Hue = DyedHue = 0x0001;
Redyable = false;
}
public BlackDyeTub( 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,33 @@
using System;
using Server;
namespace Server.Items
{
public class BlazeDyeTub : DyeTub
{
[Constructable]
public BlazeDyeTub()
{
Hue = DyedHue = 0x489;
Redyable = false;
}
public BlazeDyeTub( 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,224 @@
using System;
using Server;
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class CustomHueGroup
{
private int m_Name;
private string m_NameString;
private int[] m_Hues;
public int Name{ get{ return m_Name; } }
public string NameString{ get{ return m_NameString; } }
public int[] Hues{ get{ return m_Hues; } }
public CustomHueGroup( int name, int[] hues )
{
m_Name = name;
m_Hues = hues;
}
public CustomHueGroup( string name, int[] hues )
{
m_NameString = name;
m_Hues = hues;
}
}
public class CustomHuePicker
{
private CustomHueGroup[] m_Groups;
private bool m_DefaultSupported;
private int m_Title;
private string m_TitleString;
public bool DefaultSupported{ get{ return m_DefaultSupported; } }
public CustomHueGroup[] Groups{ get{ return m_Groups; } }
public int Title{ get{ return m_Title; } }
public string TitleString{ get{ return m_TitleString; } }
public CustomHuePicker( CustomHueGroup[] groups, bool defaultSupported )
{
m_Groups = groups;
m_DefaultSupported = defaultSupported;
}
public CustomHuePicker( CustomHueGroup[] groups, bool defaultSupported, int title )
{
m_Groups = groups;
m_DefaultSupported = defaultSupported;
m_Title = title;
}
public CustomHuePicker( CustomHueGroup[] groups, bool defaultSupported, string title )
{
m_Groups = groups;
m_DefaultSupported = defaultSupported;
m_TitleString = title;
}
public static readonly CustomHuePicker SpecialDyeTub = new CustomHuePicker( new CustomHueGroup[]
{
/* Violet */
new CustomHueGroup( 1018345, new int[]{ 1230, 1231, 1232, 1233, 1234, 1235 } ),
/* Tan */
new CustomHueGroup( 1018346, new int[]{ 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508 } ),
/* Brown */
new CustomHueGroup( 1018347, new int[]{ 2012, 2013, 2014, 2015, 2016, 2017 } ),
/* Dark Blue */
new CustomHueGroup( 1018348, new int[]{ 1303, 1304, 1305, 1306, 1307, 1308 } ),
/* Forest Green */
new CustomHueGroup( 1018349, new int[]{ 1420, 1421, 1422, 1423, 1424, 1425, 1426 } ),
/* Pink */
new CustomHueGroup( 1018350, new int[]{ 1619, 1620, 1621, 1622, 1623, 1624, 1625, 1626 } ),
/* Red */
new CustomHueGroup( 1018351, new int[]{ 1640, 1641, 1642, 1643, 1644 } ),
/* Olive */
new CustomHueGroup( 1018352, new int[]{ 2001, 2002, 2003, 2004, 2005 } )
}, false, 1018344 );
public static readonly CustomHuePicker LeatherDyeTub = new CustomHuePicker( new CustomHueGroup[]
{
/* Dull Copper */
new CustomHueGroup( 1018332, new int[]{ 2419, 2420, 2421, 2422, 2423, 2424 } ),
/* Shadow Iron */
new CustomHueGroup( 1018333, new int[]{ 2406, 2407, 2408, 2409, 2410, 2411, 2412 } ),
/* Copper */
new CustomHueGroup( 1018334, new int[]{ 2413, 2414, 2415, 2416, 2417, 2418 } ),
/* Bronze */
new CustomHueGroup( 1018335, new int[]{ 2414, 2415, 2416, 2417, 2418 } ),
/* Glden */
new CustomHueGroup( 1018336, new int[]{ 2213, 2214, 2215, 2216, 2217, 2218 } ),
/* Agapite */
new CustomHueGroup( 1018337, new int[]{ 2425, 2426, 2427, 2428, 2429, 2430 } ),
/* Verite */
new CustomHueGroup( 1018338, new int[]{ 2207, 2208, 2209, 2210, 2211, 2212 } ),
/* Valorite */
new CustomHueGroup( 1018339, new int[]{ 2219, 2220, 2221, 2222, 2223, 2224 } ),
/* Reds */
new CustomHueGroup( 1018340, new int[]{ 2113, 2114, 2115, 2116, 2117, 2118 } ),
/* Blues */
new CustomHueGroup( 1018341, new int[]{ 2119, 2120, 2121, 2122, 2123, 2124 } ),
/* Greens */
new CustomHueGroup( 1018342, new int[]{ 2126, 2127, 2128, 2129, 2130 } ),
/* Yellows */
new CustomHueGroup( 1018343, new int[]{ 2213, 2214, 2215, 2216, 2217, 2218 } )
}, true );
}
public delegate void CustomHuePickerCallback( Mobile from, object state, int hue );
public class CustomHuePickerGump : Gump
{
private Mobile m_From;
private CustomHuePicker m_Definition;
private CustomHuePickerCallback m_Callback;
private object m_State;
private int GetRadioID( int group, int index )
{
return (index * m_Definition.Groups.Length) + group;
}
private void RenderBackground()
{
AddPage( 0 );
AddBackground( 0, 0, 450, 450, 5054 );
AddBackground( 10, 10, 430, 430, 3000 );
if ( m_Definition.TitleString != null )
AddHtml( 20, 30, 400, 25, m_Definition.TitleString, false, false );
else if ( m_Definition.Title > 0 )
AddHtmlLocalized( 20, 30, 400, 25, m_Definition.Title, false, false );
AddButton( 20, 400, 4005, 4007, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 55, 400, 200, 25, 1011036, false, false ); // OKAY
if ( m_Definition.DefaultSupported )
{
AddButton( 200, 400, 4005, 4007, 2, GumpButtonType.Reply, 0 );
AddLabel( 235, 400, 0, "DEFAULT" );
}
}
private void RenderCategories()
{
CustomHueGroup[] groups = m_Definition.Groups;
for ( int i = 0; i < groups.Length; ++i )
{
AddButton( 30, 85 + (i * 25), 5224, 5224, 0, GumpButtonType.Page, 1 + i );
if ( groups[i].NameString != null )
AddHtml( 55, 85 + (i * 25), 200, 25, groups[i].NameString, false, false );
else
AddHtmlLocalized( 55, 85 + (i * 25), 200, 25, groups[i].Name, false, false );
}
for ( int i = 0; i < groups.Length; ++i )
{
AddPage( 1 + i );
int[] hues = groups[i].Hues;
for ( int j = 0; j < hues.Length; ++j )
{
AddRadio( 260, 90 + (j * 25), 210, 211, false, GetRadioID( i, j ) );
AddLabel( 278, 90 + (j * 25), hues[j] - 1, "*****" );
}
}
}
public CustomHuePickerGump( Mobile from, CustomHuePicker definition, CustomHuePickerCallback callback, object state ) : base( 50, 50 )
{
m_From = from;
m_Definition = definition;
m_Callback = callback;
m_State = state;
RenderBackground();
RenderCategories();
}
public override void OnResponse( NetState sender, RelayInfo info )
{
switch ( info.ButtonID )
{
case 1: // Okay
{
int[] switches = info.Switches;
if ( switches.Length > 0 )
{
int index = switches[0];
int group = index % m_Definition.Groups.Length;
index /= m_Definition.Groups.Length;
if ( group >= 0 && group < m_Definition.Groups.Length )
{
int[] hues = m_Definition.Groups[group].Hues;
if ( index >= 0 && index < hues.Length )
m_Callback( m_From, m_State, hues[index] );
}
}
break;
}
case 2: // Default
{
if ( m_Definition.DefaultSupported )
m_Callback( m_From, m_State, 0 );
break;
}
}
}
}
}

View file

@ -0,0 +1,293 @@
using System;
using System.Collections.Generic;
using Server;
using Server.Multis;
using Server.Targeting;
using Server.ContextMenus;
using Server.Gumps;
namespace Server.Items
{
public interface IDyable
{
bool Dye( Mobile from, DyeTub sender );
}
public class DyeTub : Item, ISecurable
{
private bool m_Redyable;
private int m_DyedHue;
private SecureLevel m_SecureLevel;
public virtual CustomHuePicker CustomHuePicker{ get{ return null; } }
public virtual bool AllowRunebooks
{
get{ return false; }
}
public virtual bool AllowFurniture
{
get{ return false; }
}
public virtual bool AllowStatuettes
{
get{ return false; }
}
public virtual bool AllowLeather
{
get{ return false; }
}
public virtual bool AllowDyables
{
get{ return true; }
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 ); // version
writer.Write( (int)m_SecureLevel );
writer.Write( (bool) m_Redyable );
writer.Write( (int) m_DyedHue );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 1:
{
m_SecureLevel = (SecureLevel)reader.ReadInt();
goto case 0;
}
case 0:
{
m_Redyable = reader.ReadBool();
m_DyedHue = reader.ReadInt();
break;
}
}
}
[CommandProperty( AccessLevel.GameMaster )]
public virtual bool Redyable
{
get
{
return m_Redyable;
}
set
{
m_Redyable = value;
}
}
[CommandProperty( AccessLevel.GameMaster )]
public int DyedHue
{
get
{
return m_DyedHue;
}
set
{
if ( m_Redyable )
{
m_DyedHue = value;
Hue = value;
}
}
}
[CommandProperty( AccessLevel.GameMaster )]
public SecureLevel Level
{
get
{
return m_SecureLevel;
}
set
{
m_SecureLevel = value;
}
}
[Constructable]
public DyeTub() : base( 0xFAB )
{
Weight = 10.0;
m_Redyable = true;
}
public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
{
base.GetContextMenuEntries( from, list );
SetSecureLevelEntry.AddTo( from, this, list );
}
public DyeTub( Serial serial ) : base( serial )
{
}
// Three metallic tubs now.
public virtual bool MetallicHues{ get { return false; } }
// Select the clothing to dye.
public virtual int TargetMessage{ get{ return 500859; } }
// You can not dye that.
public virtual int FailMessage{ get{ return 1042083; } }
public override void OnDoubleClick( Mobile from )
{
if ( from.InRange( this.GetWorldLocation(), 1 ) )
{
from.SendLocalizedMessage( TargetMessage );
from.Target = new InternalTarget( this );
}
else
{
from.SendLocalizedMessage( 500446 ); // That is too far away.
}
}
private class InternalTarget : Target
{
private DyeTub m_Tub;
public InternalTarget( DyeTub tub ) : base( 1, false, TargetFlags.None )
{
m_Tub = tub;
}
protected override void OnTarget( Mobile from, object targeted )
{
if ( targeted is Item )
{
Item item = (Item)targeted;
if ( item.QuestItem )
{
from.SendLocalizedMessage( 1151836 ); // You may not dye toggled quest items.
}
else if ( item is IDyable && m_Tub.AllowDyables )
{
if ( !from.InRange( m_Tub.GetWorldLocation(), 1 ) || !from.InRange( item.GetWorldLocation(), 1 ) )
from.SendLocalizedMessage( 500446 ); // That is too far away.
else if ( item.Parent is Mobile )
from.SendLocalizedMessage( 500861 ); // Can't Dye clothing that is being worn.
else if ( ((IDyable)item).Dye( from, m_Tub ) )
from.PlaySound( 0x23E );
}
else if ( (FurnitureAttribute.Check( item ) || (item is PotionKeg)) && m_Tub.AllowFurniture )
{
if ( !from.InRange( m_Tub.GetWorldLocation(), 1 ) || !from.InRange( item.GetWorldLocation(), 1 ) )
{
from.SendLocalizedMessage( 500446 ); // That is too far away.
}
else
{
bool okay = ( item.IsChildOf( from.Backpack ) );
if ( !okay )
{
if ( item.Parent == null )
{
BaseHouse house = BaseHouse.FindHouseAt( item );
if ( house == null || ( !house.IsLockedDown( item ) && !house.IsSecure( item ) ) )
from.SendLocalizedMessage( 501022 ); // Furniture must be locked down to paint it.
else if ( !house.IsCoOwner( from ) )
from.SendLocalizedMessage( 501023 ); // You must be the owner to use this item.
else
okay = true;
}
else
{
from.SendLocalizedMessage( 1048135 ); // The furniture must be in your backpack to be painted.
}
}
if ( okay )
{
item.Hue = m_Tub.DyedHue;
from.PlaySound( 0x23E );
}
}
}
else if ( (item is Runebook || item is RecallRune ) && m_Tub.AllowRunebooks )
{
if ( !from.InRange( m_Tub.GetWorldLocation(), 1 ) || !from.InRange( item.GetWorldLocation(), 1 ) )
{
from.SendLocalizedMessage( 500446 ); // That is too far away.
}
else if ( !item.Movable )
{
from.SendLocalizedMessage( 1049776 ); // You cannot dye runes or runebooks that are locked down.
}
else
{
item.Hue = m_Tub.DyedHue;
from.PlaySound( 0x23E );
}
}
else if ( item is MonsterStatuette && m_Tub.AllowStatuettes )
{
if ( !from.InRange( m_Tub.GetWorldLocation(), 1 ) || !from.InRange( item.GetWorldLocation(), 1 ) )
{
from.SendLocalizedMessage( 500446 ); // That is too far away.
}
else if ( !item.Movable )
{
from.SendLocalizedMessage( 1049779 ); // You cannot dye statuettes that are locked down.
}
else
{
item.Hue = m_Tub.DyedHue;
from.PlaySound( 0x23E );
}
}
else if ( (item is BaseArmor && (((BaseArmor)item).MaterialType == ArmorMaterialType.Leather || ((BaseArmor)item).MaterialType == ArmorMaterialType.Studded) || item is ElvenBoots || item is WoodlandBelt) && m_Tub.AllowLeather )
{
if ( !from.InRange( m_Tub.GetWorldLocation(), 1 ) || !from.InRange( item.GetWorldLocation(), 1 ) )
{
from.SendLocalizedMessage( 500446 ); // That is too far away.
}
else if ( !item.Movable )
{
from.SendLocalizedMessage( 1042419 ); // You may not dye leather items which are locked down.
}
else if ( item.Parent is Mobile )
{
from.SendLocalizedMessage( 500861 ); // Can't Dye clothing that is being worn.
}
else
{
item.Hue = m_Tub.DyedHue;
from.PlaySound( 0x23E );
}
}
else
{
from.SendLocalizedMessage( m_Tub.FailMessage );
}
}
else
{
from.SendLocalizedMessage( m_Tub.FailMessage );
}
}
}
}
}

View file

@ -0,0 +1,76 @@
using System;
namespace Server.Items
{
public class FurnitureDyeTub : DyeTub, Engines.VeteranRewards.IRewardItem
{
public override bool AllowDyables{ get{ return false; } }
public override bool AllowFurniture{ get{ return true; } }
public override int TargetMessage{ get{ return 501019; } } // Select the furniture to dye.
public override int FailMessage{ get{ return 501021; } } // That is not a piece of furniture.
public override int LabelNumber{ get{ return 1041246; } } // Furniture Dye Tub
private bool m_IsRewardItem;
[CommandProperty( AccessLevel.GameMaster )]
public bool IsRewardItem
{
get{ return m_IsRewardItem; }
set{ m_IsRewardItem = value; }
}
[Constructable]
public FurnitureDyeTub()
{
LootType = LootType.Blessed;
}
public override void OnDoubleClick( Mobile from )
{
if ( m_IsRewardItem && !Engines.VeteranRewards.RewardSystem.CheckIsUsableBy( from, this, null ) )
return;
base.OnDoubleClick( from );
}
public FurnitureDyeTub( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( Core.ML && m_IsRewardItem )
list.Add( 1076217 ); // 1st Year Veteran Reward
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 ); // version
writer.Write( (bool) m_IsRewardItem );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 1:
{
m_IsRewardItem = reader.ReadBool();
break;
}
}
if ( LootType == LootType.Regular )
LootType = LootType.Blessed;
}
}
}

View file

@ -0,0 +1,74 @@
using System;
namespace Server.Items
{
public class LeatherDyeTub : DyeTub, Engines.VeteranRewards.IRewardItem
{
public override bool AllowDyables{ get{ return false; } }
public override bool AllowLeather{ get{ return true; } }
public override int TargetMessage{ get{ return 1042416; } } // Select the leather item to dye.
public override int FailMessage{ get{ return 1042418; } } // You can only dye leather with this tub.
public override int LabelNumber{ get{ return 1041284; } } // Leather Dye Tub
public override CustomHuePicker CustomHuePicker { get { return CustomHuePicker.LeatherDyeTub; } }
private bool m_IsRewardItem;
[CommandProperty( AccessLevel.GameMaster )]
public bool IsRewardItem
{
get{ return m_IsRewardItem; }
set{ m_IsRewardItem = value; }
}
[Constructable]
public LeatherDyeTub()
{
LootType = LootType.Blessed;
}
public override void OnDoubleClick( Mobile from )
{
if ( m_IsRewardItem && !Engines.VeteranRewards.RewardSystem.CheckIsUsableBy( from, this, null ) )
return;
base.OnDoubleClick( from );
}
public LeatherDyeTub( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( Core.ML && m_IsRewardItem )
list.Add( 1076218 ); // 2nd Year Veteran Reward
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 ); // version
writer.Write( (bool) m_IsRewardItem );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 1:
{
m_IsRewardItem = reader.ReadBool();
break;
}
}
}
}
}

View file

@ -0,0 +1,36 @@
using System;
namespace Server.Items
{
public class MetallicClothDyetub : DyeTub
{
public override int LabelNumber { get { return 1152920; } } // Metallic Cloth ...
public override bool MetallicHues { get { return true; } }
[Constructable]
public MetallicClothDyetub()
{
LootType = LootType.Blessed;
}
public MetallicClothDyetub( 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,82 @@
using Server;
using Server.Gumps;
using Server.Network;
using System;
namespace Server.Items
{
public class MetallicHuePicker : Gump
{
public delegate void MetallicHuePickerCallback( Mobile from, object state, int hue );
private Mobile m_From;
private MetallicHuePickerCallback m_Callback;
private object m_State;
public void Render()
{
AddPage( 0 );
AddBackground( 0, 0, 450, 450, 0x13BE );
AddBackground( 10, 10, 430, 430, 0xBB8 );
AddHtmlLocalized( 55, 400, 200, 25, 1011036, false, false ); // OKAY
AddButton( 20, 400, 4005, 4007, 1, GumpButtonType.Reply, 0 );
AddButton( 200, 400, 4005, 4007, 2, GumpButtonType.Reply, 0 );
AddLabel( 235, 400, 0, "DEFAULT" );
AddHtmlLocalized( 55, 25, 200, 25, 1150063, false, false ); // Base/Shadow Color
AddHtmlLocalized( 260, 25, 200, 25, 1150064, false, false ); // Highlight Color
for( int row = 0; row < 13; row++ )
{
AddButton( 30, ( 65 + ( row * 25 ) ), 0x1467, 0x1468, row + 1, GumpButtonType.Page, row + 1 );
AddItem( 50, ( 65 + ( row * 25 ) ), 0x1412, 2501 + ( row * 12 ) + ( ( row == 12 ) ? 6 : 0 ) );
}
for( int page = 1; page < 14; page++ )
{
AddPage( page );
for( int row = 0; row < 12; row++ )
{
int hue = ( 2501 + ( ( page == 13 ) ? 6 : 0 ) + ( row + ( 12 * ( page - 1 ) ) ) ); /* OSI just had to skip 6 unused hues, didnt they */
AddRadio( 260, ( 65 + ( row * 25 ) ), 0xd2, 0xd3, false, hue );
AddItem( 280, ( 65 + ( row * 25 ) ), 0x1412, hue );
}
}
}
public MetallicHuePicker( Mobile from, MetallicHuePickerCallback callback, object state )
: base( 450, 450 )
{
m_From = from;
m_Callback = callback;
m_State = state;
Render();
}
public override void OnResponse( NetState sender, RelayInfo info )
{
switch( info.ButtonID )
{
case 1: // Okay
{
if( info.Switches.Length > 0 )
{
m_Callback( m_From, m_State, info.Switches[ 0 ] );
}
break;
}
case 2: // Default
{
m_Callback( m_From, m_State, 0 );
break;
}
}
}
}
}

View file

@ -0,0 +1,46 @@
using System;
namespace Server.Items
{
public class MetallicLeatherDyeTub : LeatherDyeTub
{
public override CustomHuePicker CustomHuePicker{ get{ return null; } }
public override int LabelNumber { get { return 1153495; } } // Metallic Leather ...
public override bool MetallicHues { get { return true; } }
[Constructable]
public MetallicLeatherDyeTub()
{
LootType = LootType.Blessed;
}
public MetallicLeatherDyeTub( Serial serial )
: base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( Core.ML && IsRewardItem )
list.Add( 1076221 ); // 5th Year Veteran Reward
}
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,71 @@
using System;
namespace Server.Items
{
public class RewardBlackDyeTub : DyeTub, Engines.VeteranRewards.IRewardItem
{
public override int LabelNumber{ get{ return 1006008; } } // Black Dye Tub
private bool m_IsRewardItem;
[CommandProperty( AccessLevel.GameMaster )]
public bool IsRewardItem
{
get{ return m_IsRewardItem; }
set{ m_IsRewardItem = value; }
}
[Constructable]
public RewardBlackDyeTub()
{
Hue = DyedHue = 0x0001;
Redyable = false;
LootType = LootType.Blessed;
}
public override void OnDoubleClick( Mobile from )
{
if ( m_IsRewardItem && !Engines.VeteranRewards.RewardSystem.CheckIsUsableBy( from, this, null ) )
return;
base.OnDoubleClick( from );
}
public RewardBlackDyeTub( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( Core.ML && m_IsRewardItem )
list.Add( 1076217 ); // 1st Year Veteran Reward
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 ); // version
writer.Write( (bool) m_IsRewardItem );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 1:
{
m_IsRewardItem = reader.ReadBool();
break;
}
}
}
}
}

View file

@ -0,0 +1,74 @@
using System;
namespace Server.Items
{
public class RunebookDyeTub : DyeTub, Engines.VeteranRewards.IRewardItem
{
public override bool AllowDyables{ get{ return false; } }
public override bool AllowRunebooks{ get{ return true; } }
public override int TargetMessage{ get{ return 1049774; } } // Target the runebook or runestone to dye
public override int FailMessage{ get{ return 1049775; } } // You can only dye runestones or runebooks with this tub.
public override int LabelNumber{ get{ return 1049740; } } // Runebook Dye Tub
public override CustomHuePicker CustomHuePicker{ get{ return CustomHuePicker.LeatherDyeTub; } }
private bool m_IsRewardItem;
[CommandProperty( AccessLevel.GameMaster )]
public bool IsRewardItem
{
get{ return m_IsRewardItem; }
set{ m_IsRewardItem = value; }
}
[Constructable]
public RunebookDyeTub()
{
LootType = LootType.Blessed;
}
public override void OnDoubleClick( Mobile from )
{
if ( m_IsRewardItem && !Engines.VeteranRewards.RewardSystem.CheckIsUsableBy( from, this, null ) )
return;
base.OnDoubleClick( from );
}
public RunebookDyeTub( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( Core.ML && m_IsRewardItem )
list.Add( 1076220 ); // 4th Year Veteran Reward
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 ); // version
writer.Write( (bool) m_IsRewardItem );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 1:
{
m_IsRewardItem = reader.ReadBool();
break;
}
}
}
}
}

View file

@ -0,0 +1,71 @@
using System;
using Server.Engines.VeteranRewards;
namespace Server.Items
{
public class SpecialDyeTub : DyeTub, IRewardItem
{
public override CustomHuePicker CustomHuePicker{ get{ return CustomHuePicker.SpecialDyeTub; } }
public override int LabelNumber{ get{ return 1041285; } } // Special Dye Tub
private bool m_IsRewardItem;
[CommandProperty( AccessLevel.GameMaster )]
public bool IsRewardItem
{
get{ return m_IsRewardItem; }
set{ m_IsRewardItem = value; }
}
[Constructable]
public SpecialDyeTub()
{
LootType = LootType.Blessed;
}
public override void OnDoubleClick( Mobile from )
{
if ( m_IsRewardItem && !Engines.VeteranRewards.RewardSystem.CheckIsUsableBy( from, this, null ) )
return;
base.OnDoubleClick( from );
}
public SpecialDyeTub( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( Core.ML && m_IsRewardItem )
list.Add( 1076217 ); // 1st Year Veteran Reward
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 ); // version
writer.Write( (bool) m_IsRewardItem );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 1:
{
m_IsRewardItem = reader.ReadBool();
break;
}
}
}
}
}

View file

@ -0,0 +1,74 @@
using System;
namespace Server.Items
{
public class StatuetteDyeTub : DyeTub, Engines.VeteranRewards.IRewardItem
{
public override bool AllowDyables{ get{ return false; } }
public override bool AllowStatuettes{ get{ return true; } }
public override int TargetMessage{ get{ return 1049777; } } // Target the statuette to dye
public override int FailMessage{ get{ return 1049778; } } // You can only dye veteran reward statuettes with this tub.
public override int LabelNumber{ get{ return 1049741; } } // Reward Statuette Dye Tub
public override CustomHuePicker CustomHuePicker{ get{ return CustomHuePicker.LeatherDyeTub; } }
private bool m_IsRewardItem;
[CommandProperty( AccessLevel.GameMaster )]
public bool IsRewardItem
{
get{ return m_IsRewardItem; }
set{ m_IsRewardItem = value; }
}
[Constructable]
public StatuetteDyeTub()
{
LootType = LootType.Blessed;
}
public override void OnDoubleClick( Mobile from )
{
if ( m_IsRewardItem && !Engines.VeteranRewards.RewardSystem.CheckIsUsableBy( from, this, null ) )
return;
base.OnDoubleClick( from );
}
public StatuetteDyeTub( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( Core.ML && m_IsRewardItem )
list.Add( 1076221 ); // 5th Year Veteran Reward
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 ); // version
writer.Write( (bool) m_IsRewardItem );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 1:
{
m_IsRewardItem = reader.ReadBool();
break;
}
}
}
}
}

View file

@ -0,0 +1,37 @@
using Server;
using System;
namespace Server.Items /* High seas, loot from merchant ship's hold, also a "uncommon" loot item */
{
public class WhiteClothDyeTub : DyeTub
{
public override int LabelNumber { get { return 1149984; } } // White Cloth Dye Tub
public override bool Redyable { get { return false; } }
[Constructable]
public WhiteClothDyeTub()
{
DyedHue = Hue = 0x9C2;
}
public WhiteClothDyeTub( 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,39 @@
using Server;
using System;
namespace Server.Items
{
public class WhiteLeatherDyeTub : LeatherDyeTub /* OSI UO 13th anniv gift, from redeemable gift tickets */
{
public override int LabelNumber { get { return 1149900; } } // White Leather Dye Tub
public override bool Redyable { get { return false; } }
[Constructable]
public WhiteLeatherDyeTub()
{
DyedHue = Hue = 0x9C2;
LootType = LootType.Blessed;
}
public WhiteLeatherDyeTub( Serial serial )
: base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( ( int )1 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,32 @@
using System;
namespace Server.Items
{
[FlipableAttribute(0xec6, 0xec7)]
public class Dressform : Item
{
[Constructable]
public Dressform() : base(0xec6)
{
Weight = 10;
}
public Dressform(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int) 0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,127 @@
using System;
using Server.Targeting;
using Server.HuePickers;
namespace Server.Items
{
public class Dyes : Item /* , IUsesRemaining */ /* TODO complete usesremaing */
{
/*
public bool ShowUsesRemaining { get { return false; } set { } }
[CommandProperty( AccessLevel.GameMaster )]
public virtual int UsesRemaining { get { return m_UsesRemaining; } set { m_UsesRemaining = value; } }
private int m_UsesRemaining;
*/
[Constructable]
public Dyes() : base( 0xFA9 )
{
Weight = 3.0;
/* m_UsesRemaining = 25; */
}
public Dyes( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 ); // version
/* writer.Write( ( int )m_UsesRemaining ); */
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
if ( Weight == 0.0 )
Weight = 3.0;
/* m_UsesRemaining = ( version == 0 ) ? 25 : reader.ReadInt(); */
}
public override void OnDoubleClick( Mobile from )
{
from.SendLocalizedMessage( 500856 ); // Select the dye tub to use the dyes on.
from.Target = new InternalTarget();
}
private class InternalTarget : Target
{
public InternalTarget() : base( 1, false, TargetFlags.None )
{
}
private class InternalPicker : HuePicker
{
private DyeTub m_Tub;
public InternalPicker( DyeTub tub ) : base( tub.ItemID )
{
m_Tub = tub;
}
public override void OnResponse( int hue )
{
m_Tub.DyedHue = hue;
}
}
public virtual void SetTubHue( Mobile from, object state, int hue )
{
if( state is DyeTub )
{
DyeTub tub = state as DyeTub;
tub.DyedHue = hue;
/* dyes.m_UsesRemaining--; let this change ride till the overhaul */
}
}
protected override void OnTarget( Mobile from, object targeted )
{
if ( targeted is DyeTub )
{
DyeTub tub = (DyeTub) targeted;
if ( tub.Redyable )
{
if( tub.MetallicHues ) /* OSI has three metallic tubs now */
{
from.SendGump( new MetallicHuePicker( from, new MetallicHuePicker.MetallicHuePickerCallback( SetTubHue ), tub ) );
}
else if( tub.CustomHuePicker != null )
{
from.SendGump( new CustomHuePickerGump( from, tub.CustomHuePicker, new CustomHuePickerCallback( SetTubHue ), tub ) );
}
else
{
from.SendHuePicker( new InternalPicker( tub ) );
}
}
else if ( tub is BlackDyeTub )
{
from.SendLocalizedMessage( 1010092 ); // You can not use this on a black dye tub.
}
else
{
from.SendMessage( "That dye tub may not be redyed." );
}
}
else
{
from.SendLocalizedMessage( 500857 ); // Use this on a dye tub.
}
}
}
}
}

View file

@ -0,0 +1,124 @@
using System;
using Server.Network;
using Server.Targeting;
using Server.Mobiles;
namespace Server.Items
{
public interface IScissorable
{
bool Scissor( Mobile from, Scissors scissors );
}
[FlipableAttribute( 0xf9f, 0xf9e )]
public class Scissors : Item
{
[Constructable]
public Scissors() : base( 0xF9F )
{
Weight = 1.0;
}
public Scissors( 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 )
{
from.SendLocalizedMessage( 502434 ); // What should I use these scissors on?
from.Target = new InternalTarget( this );
}
private class InternalTarget : Target
{
private Scissors m_Item;
public InternalTarget( Scissors item ) : base( 2, false, TargetFlags.None )
{
m_Item = item;
}
protected override void OnTarget( Mobile from, object targeted )
{
if ( m_Item.Deleted )
return;
/*if ( targeted is Item && !((Item)targeted).IsStandardLoot() )
{
from.SendLocalizedMessage( 502440 ); // Scissors can not be used on that to produce anything.
}
else */
if( Core.AOS && targeted == from )
{
from.SendLocalizedMessage( 1062845 + Utility.Random( 3 ) ); //"That doesn't seem like the smartest thing to do." / "That was an encounter you don't wish to repeat." / "Ha! You missed!"
}
else if (Core.SE && Utility.RandomDouble() > .20 && (from.Direction & Direction.Running) != 0 && (Core.TickCount - from.LastMoveTime) < from.ComputeMovementSpeed(from.Direction))
{
from.SendLocalizedMessage( 1063305 ); // Didn't your parents ever tell you not to run with scissors in your hand?!
}
else if( targeted is Item && !((Item)targeted).Movable )
{
if( targeted is IScissorable && ( targeted is PlagueBeastInnard || targeted is PlagueBeastMutationCore ) )
{
IScissorable obj = (IScissorable) targeted;
if ( CanScissor( from, obj ) && obj.Scissor( from, m_Item ) )
from.PlaySound( 0x248 );
}
}
else if ( targeted is IScissorable )
{
IScissorable obj = (IScissorable)targeted;
if ( CanScissor( from, obj ) && obj.Scissor( from, m_Item ) )
from.PlaySound( 0x248 );
}
else
{
from.SendLocalizedMessage( 502440 ); // Scissors can not be used on that to produce anything.
}
}
protected override void OnNonlocalTarget( Mobile from, object targeted )
{
if ( targeted is IScissorable && ( targeted is PlagueBeastInnard || targeted is PlagueBeastMutationCore ) )
{
IScissorable obj = (IScissorable) targeted;
if ( CanScissor( from, obj ) && obj.Scissor( from, m_Item ) )
from.PlaySound( 0x248 );
}
else
base.OnNonlocalTarget( from, targeted );
}
}
public static bool CanScissor( Mobile from, IScissorable obj )
{
if ( obj is Item && ( (Item)obj ).Nontransferable )
{
from.SendLocalizedMessage( 502440 ); // Scissors can not be used on that to produce anything.
return false;
}
// TODO: Move other general checks from the different implementations here
return true;
}
}
}