Heritage items, talismans

This commit is contained in:
xavier 2011-07-24 01:47:01 +00:00
parent e7db1fd9f7
commit 129cac945b
109 changed files with 11659 additions and 188 deletions

View file

@ -815,11 +815,24 @@ namespace Server.Engines.Craft
if( m_ForceNonExceptional )
return 0.0;
double bonus = 0.0;
if ( from.Talisman is BaseTalisman )
{
BaseTalisman talisman = (BaseTalisman) from.Talisman;
if ( talisman.Skill == system.MainSkill )
{
chance -= talisman.SuccessBonus / 100.0;
bonus = talisman.ExceptionalBonus / 100.0;
}
}
switch ( system.ECA )
{
default:
case CraftECA.ChanceMinusSixty: return chance - 0.6;
case CraftECA.FiftyPercentChanceMinusTenPercent: return (chance * 0.5) - 0.1;
case CraftECA.ChanceMinusSixty: chance -= 0.6; break;
case CraftECA.FiftyPercentChanceMinusTenPercent: chance = chance * 0.5 - 0.1; break;
case CraftECA.ChanceMinusSixtyToFourtyFive:
{
double offset = 0.60 - ((from.Skills[system.MainSkill].Value - 95.0) * 0.03);
@ -829,9 +842,15 @@ namespace Server.Engines.Craft
else if ( offset > 0.60 )
offset = 0.60;
return chance - offset;
chance -= offset;
break;
}
}
if ( chance > 0 )
return chance + bonus;
return chance;
}
public bool CheckSkills( Mobile from, Type typeRes, CraftSystem craftSystem, ref int quality, ref bool allRequiredSkills )
@ -886,6 +905,14 @@ namespace Server.Engines.Craft
else
chance = 0.0;
if ( allRequiredSkills && from.Talisman is BaseTalisman )
{
BaseTalisman talisman = (BaseTalisman) from.Talisman;
if ( talisman.Skill == craftSystem.MainSkill )
chance += talisman.SuccessBonus / 100.0;
}
if ( allRequiredSkills && valMainSkill == maxMainSkill )
chance = 1.0;

View file

@ -125,6 +125,15 @@ namespace Server.Engines.Craft
AddRes( index, typeof( Cloth ), 1044286, 5, 1044287 );
}
if ( Core.ML )
{
index = AddCraft( typeof( RunedSwitch ), 1044294, 1072896, 70.0, 120.0, typeof( Log ), 1044041, 2, 1044351 );
AddRes( index, typeof( EnchantedSwitch ), 1072893, 1, 1053098 );
AddRes( index, typeof( RunedPrism ), 1073465, 1, 1053098 );
AddRes( index, typeof( JeweledFiligree ), 1072894, 1, 1053098 );
SetNeededExpansion( index, Expansion.ML );
}
// Furniture
AddCraft( typeof( FootStool ), 1044291, 1022910, 11.0, 36.0, typeof( Log ), 1044041, 9, 1044351 );
AddCraft( typeof( Stool ), 1044291, 1022602, 11.0, 36.0, typeof( Log ), 1044041, 9, 1044351 );

View file

@ -128,6 +128,12 @@ namespace Server.Engines.Craft
AddCraft( typeof( EmptyVialsWRack ), 1044050, 1044616, 65.0, 115.0, typeof( Sand ), 1044625, 8, 1044627 );
AddCraft( typeof( FullVialsWRack ), 1044050, 1044617, 65.0, 115.0, typeof( Sand ), 1044625, 9, 1044627 );
AddCraft( typeof( SpinningHourglass ), 1044050, 1044618, 75.0, 125.0, typeof( Sand ), 1044625, 10, 1044627 );
if ( Core.ML )
{
index = AddCraft( typeof( HollowPrism ), 1044050, 1072895, 100.0, 150.0, typeof( Sand ), 1044625, 8, 1044627 );
SetNeededExpansion( index, Expansion.ML );
}
}
}
}

View file

@ -293,12 +293,30 @@ namespace Server.Engines.Craft
AddNecroSpell(16, 40, 79.6, typeof(ExorcismScroll), Reagent.NoxCrystal, Reagent.GraveDust);
}
int index;
int index;
if ( Core.ML )
{
index = AddCraft( typeof( EnchantedSwitch ), 1044294, 1072893, 45.0, 95.0, typeof( BlankScroll ), 1044377, 1, 1044378 );
AddRes( index, typeof( SpidersSilk ), 1044360, 1, 1044253 );
AddRes( index, typeof( BlackPearl ), 1044353, 1, 1044253 );
AddRes( index, typeof( SwitchItem ), 1073464, 1, 1044253 );
ForceNonExceptional( index );
SetNeededExpansion( index, Expansion.ML );
index = AddCraft( typeof( RunedPrism ), 1044294, 1073465, 45.0, 95.0, typeof( BlankScroll ), 1044377, 1, 1044378 );
AddRes( index, typeof( SpidersSilk ), 1044360, 1, 1044253 );
AddRes( index, typeof( BlackPearl ), 1044353, 1, 1044253 );
AddRes( index, typeof( HollowPrism ), 1072895, 1, 1044253 );
ForceNonExceptional( index );
SetNeededExpansion( index, Expansion.ML );
}
// Runebook
index = AddCraft(typeof(Runebook), 1044294, 1041267, 45.0, 95.0, typeof(BlankScroll), 1044377, 8, 1044378);
AddRes(index, typeof(RecallScroll), 1044445, 1, 1044253);
AddRes(index, typeof(GateTravelScroll), 1044446, 1, 1044253);
index = AddCraft( typeof( Runebook ), 1044294, 1041267, 45.0, 95.0, typeof( BlankScroll ), 1044377, 8, 1044378 );
AddRes( index, typeof( RecallScroll ), 1044445, 1, 1044253 );
AddRes( index, typeof( GateTravelScroll ), 1044446, 1, 1044253 );
if (Core.AOS)
{

View file

@ -201,6 +201,15 @@ namespace Server.Engines.Craft
AddCraft( typeof( BarrelHoops ), 1044047, 1024321, -15.0, 35.0, typeof( IronIngot ), 1044036, 5, 1044037 );
AddCraft( typeof( Hinge ), 1044047, 1024181, 5.0, 55.0, typeof( IronIngot ), 1044036, 2, 1044037 );
AddCraft( typeof( BolaBall ), 1044047, 1023699, 45.0, 95.0, typeof( IronIngot ), 1044036, 10, 1044037 );
if ( Core.ML )
{
index = AddCraft( typeof( JeweledFiligree ), 1044047, 1072894, 70.0, 110.0, typeof( IronIngot ), 1044036, 2, 1044037 );
AddRes( index, typeof( StarSapphire ), 1044231, 1, 1044253 );
AddRes( index, typeof( Ruby ), 1044234, 1, 1044253 );
SetNeededExpansion( index, Expansion.ML );
}
#endregion
#region Utensils

View file

@ -157,6 +157,9 @@ namespace Server.Items
if( !CraftResources.IsStandard( resource ) )
return true;
if ( i is ITokunoDyable )
return true;
return(
IsInTypeList( t, TreasuresOfTokuno.LesserArtifactsTotal )
|| IsInTypeList( t, TreasuresOfTokuno.GreaterArtifacts )

View file

@ -0,0 +1,74 @@
using System;
using Server;
using Server.Items;
using Server.Network;
namespace Server.Gumps
{
public class ConfirmHeritageGump : Gump
{
private HeritageToken m_Token;
private Type[] m_Selected;
private enum Buttons
{
Cancel,
Okay
}
public ConfirmHeritageGump( HeritageToken token, Type[] selected, int cliloc ) : base( 60, 36 )
{
m_Token = token;
m_Selected = selected;
AddPage( 0 );
AddBackground( 0, 0, 291, 99, 0x13BE );
AddImageTiled( 5, 6, 280, 20, 0xA40 );
AddHtmlLocalized( 9, 8, 280, 20, 1070972, 0x7FFF, false, false ); // Click "OKAY" to redeem the following promotional item:
AddImageTiled( 5, 31, 280, 40, 0xA40 );
AddHtmlLocalized( 9, 35, 272, 40, cliloc, 0x7FFF, false, false );
AddButton( 180, 73, 0xFB7, 0xFB8, (int) Buttons.Okay, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 215, 75, 100, 20, 1011036, 0x7FFF, false, false ); // OKAY
AddButton( 5, 73, 0xFB1, 0xFB2, (int) Buttons.Cancel, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 40, 75, 100, 20, 1060051, 0x7FFF, false, false ); // CANCEL
}
public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_Token == null || m_Token.Deleted )
return;
switch ( info.ButtonID )
{
case (int) Buttons.Okay:
Item item = null;
foreach ( Type type in m_Selected )
{
try
{
item = Activator.CreateInstance( type ) as Item;
}
catch ( Exception ex )
{
Console.WriteLine( ex.Message );
Console.WriteLine( ex.StackTrace );
}
if ( item != null )
{
m_Token.Delete();
sender.Mobile.AddToBackpack( item );
}
}
break;
case (int) Buttons.Cancel:
sender.Mobile.SendGump( new HeritageTokenGump( m_Token ) );
break;
}
}
}
}

View file

@ -0,0 +1,84 @@
using System;
using Server;
using Server.Network;
using Server.Items;
namespace Server.Gumps
{
public class DawnsMusicBoxGump : Gump
{
private DawnsMusicBox m_Box;
public DawnsMusicBoxGump( DawnsMusicBox box )
: base( 60, 36 )
{
m_Box = box;
AddPage( 0 );
AddBackground( 0, 0, 273, 324, 0x13BE );
AddImageTiled( 10, 10, 253, 20, 0xA40 );
AddImageTiled( 10, 40, 253, 244, 0xA40 );
AddImageTiled( 10, 294, 253, 20, 0xA40 );
AddAlphaRegion( 10, 10, 253, 304 );
AddButton( 10, 294, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 296, 450, 20, 1060051, 0x7FFF, false, false ); // CANCEL
AddHtmlLocalized( 14, 12, 273, 20, 1075130, 0x7FFF, false, false ); // Choose a track to play
int page = 1;
int i, y = 49;
AddPage( page );
for ( i = 0; i < m_Box.Tracks.Count; i++, y += 24 )
{
DawnsMusicInfo info = DawnsMusicBox.GetInfo( m_Box.Tracks[ i ] );
if ( i > 0 && i % 10 == 0 )
{
AddButton( 228, 294, 0xFA5, 0xFA6, 0, GumpButtonType.Page, page + 1 );
AddPage( page + 1 );
y = 49;
AddButton( 193, 294, 0xFAE, 0xFAF, 0, GumpButtonType.Page, page );
page++;
}
AddButton( 19, y, 0x845, 0x846, 100 + i, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, y - 2, 213, 20, info.Name, 0x7FFF, false, false );
}
if ( i % 10 == 0 )
{
AddButton( 228, 294, 0xFA5, 0xFA6, 0, GumpButtonType.Page, page + 1 );
AddPage( page + 1 );
y = 49;
AddButton( 193, 294, 0xFAE, 0xFAF, 0, GumpButtonType.Page, page );
}
AddButton( 19, y, 0x845, 0x846, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, y - 2, 213, 20, 1075207, 0x7FFF, false, false ); // Stop Song
}
public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_Box == null || m_Box.Deleted )
return;
Mobile m = sender.Mobile;
if ( !m_Box.IsChildOf( m.Backpack ) && !m_Box.IsLockedDown )
m.SendLocalizedMessage( 1061856 ); // You must have the item in your backpack or locked down in order to use it.
else if ( m_Box.IsLockedDown && !m_Box.HasAccces( m ) )
m.SendLocalizedMessage( 502691 ); // You must be the owner to use this.
else if ( info.ButtonID == 1 )
m_Box.EndMusic( m );
else if ( info.ButtonID >= 100 && info.ButtonID - 100 < m_Box.Tracks.Count )
m_Box.PlayMusic( m, m_Box.Tracks[ info.ButtonID - 100 ] );
}
}
}

View file

@ -0,0 +1,389 @@
using System;
using System.Collections.Generic;
using Server;
using Server.Items;
using Server.Network;
namespace Server.Gumps
{
public class HeritageTokenGump : Gump
{
private HeritageToken m_Token;
public HeritageTokenGump( HeritageToken token ) : base( 60, 36 )
{
m_Token = token;
AddPage( 0 );
AddBackground( 0, 0, 520, 404, 0x13BE );
AddImageTiled( 10, 10, 500, 20, 0xA40 );
AddImageTiled( 10, 40, 500, 324, 0xA40 );
AddImageTiled( 10, 374, 500, 20, 0xA40 );
AddAlphaRegion( 10, 10, 500, 384 );
AddButton( 10, 374, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 376, 450, 20, 1060051, 0x7FFF, false, false ); // CANCEL
AddHtmlLocalized( 14, 12, 500, 20, 1075576, 0x7FFF, false, false ); // Choose your item from the following pages
AddPage( 1 );
AddImageTiledButton( 14, 44, 0x918, 0x919, 0x64, GumpButtonType.Reply, 0, 0x1411, 0x2C, 18, 8 );
AddTooltip( 1062912 );
AddHtmlLocalized( 98, 44, 250, 60, 1078147, 0x7FFF, false, false ); // Royal Leggings of Embers
AddImageTiledButton( 264, 44, 0x918, 0x919, 0x65, GumpButtonType.Reply, 0, 0x234D, 0x0, 18, 12 );
AddTooltip( 1062914 );
AddHtmlLocalized( 348, 44, 250, 60, 1062913, 0x7FFF, false, false ); // Rose of Trinsic
AddImageTiledButton( 14, 108, 0x918, 0x919, 0x66, GumpButtonType.Reply, 0, 0x26C3, 0x504, 18, 8 );
AddTooltip( 1062916 );
AddHtmlLocalized( 98, 108, 250, 60, 1062915, 0x7FFF, false, false ); // Shaminos Best Crossbow
AddImageTiledButton( 264, 108, 0x918, 0x919, 0x67, GumpButtonType.Reply, 0, 0x3F1D, 0x0, 18, 8 );
AddTooltip( 1062918 );
AddHtmlLocalized( 348, 108, 250, 60, 1062917, 0x7FFF, false, false ); // The Tapestry of Sosaria
AddImageTiledButton( 14, 172, 0x918, 0x919, 0x68, GumpButtonType.Reply, 0, 0x3F14, 0x0, 18, 8 );
AddTooltip( 1062920 );
AddHtmlLocalized( 98, 172, 250, 60, 1062919, 0x7FFF, false, false ); // Hearth of the Home Fire
AddImageTiledButton( 264, 172, 0x918, 0x919, 0x69, GumpButtonType.Reply, 0, 0xF60, 0x482, -1, 10 );
AddTooltip( 1062922 );
AddHtmlLocalized( 348, 172, 250, 60, 1062921, 0x7FFF, false, false ); // The Holy Sword
AddImageTiledButton( 14, 236, 0x918, 0x919, 0x6A, GumpButtonType.Reply, 0, 0x236C, 0x0, 18, 6 );
AddTooltip( 1062924 );
AddHtmlLocalized( 98, 236, 250, 60, 1062923, 0x7FFF, false, false ); // Ancient Samurai Helm
AddImageTiledButton( 264, 236, 0x918, 0x919, 0x6B, GumpButtonType.Reply, 0, 0x2B10, 0x226, 18, 11 );
AddTooltip( 1075223 );
AddHtmlLocalized( 348, 236, 250, 60, 1075188, 0x7FFF, false, false ); // Helm of Spirituality
AddImageTiledButton( 14, 300, 0x918, 0x919, 0x6C, GumpButtonType.Reply, 0, 0x2B0C, 0x226, 18, 15 );
AddTooltip( 1075224 );
AddHtmlLocalized( 98, 300, 250, 60, 1075192, 0x7FFF, false, false ); // Gauntlets of Valor
AddImageTiledButton( 264, 300, 0x918, 0x919, 0x6D, GumpButtonType.Reply, 0, 0x2B01, 0x0, 18, 9 );
AddTooltip( 1075225 );
AddHtmlLocalized( 348, 300, 250, 60, 1075196, 0x7FFF, false, false ); // Dupres Shield
AddButton( 400, 374, 0xFA5, 0xFA7, 0, GumpButtonType.Page, 2 );
AddHtmlLocalized( 440, 376, 60, 20, 1043353, 0x7FFF, false, false ); // Next
AddPage( 2 );
AddButton( 300, 374, 0xFAE, 0xFB0, 0, GumpButtonType.Page, 1 );
AddHtmlLocalized( 340, 376, 60, 20, 1011393, 0x7FFF, false, false ); // Back
AddImageTiledButton( 14, 44, 0x918, 0x919, 0x6E, GumpButtonType.Reply, 0, 0x2AC6, 0x0, 29, 0 );
AddTooltip( 1075226 );
AddHtmlLocalized( 98, 44, 250, 60, 1075197, 0x7FFF, false, false ); // Fountain of Life
AddImageTiledButton( 264, 44, 0x918, 0x919, 0x6F, GumpButtonType.Reply, 0, 0x2AF9, 0x0, -4, -5 );
AddTooltip( 1075227 );
AddHtmlLocalized( 348, 44, 250, 60, 1075198, 0x7FFF, false, false ); // Dawns Music Box
AddImageTiledButton( 14, 108, 0x918, 0x919, 0x70, GumpButtonType.Reply, 0, 0x2253, 0x0, 18, 12 );
AddTooltip( 1075228 );
AddHtmlLocalized( 98, 108, 250, 60, 1078148, 0x7FFF, false, false ); // Ossian Grimoire
AddImageTiledButton( 264, 108, 0x918, 0x919, 0x71, GumpButtonType.Reply, 0, 0x2D98, 0x0, 19, 13 );
AddTooltip( 1078527 );
AddHtmlLocalized( 348, 108, 250, 60, 1078142, 0x7FFF, false, false ); // Talisman of the Fey:<br>Ferret
AddImageTiledButton( 14, 172, 0x918, 0x919, 0x72, GumpButtonType.Reply, 0, 0x2D97, 0x0, 19, 13 );
AddTooltip( 1078528 );
AddHtmlLocalized( 98, 172, 250, 60, 1078143, 0x7FFF, false, false ); // Talisman of the Fey:<br>Squirrel
AddImageTiledButton( 264, 172, 0x918, 0x919, 0x73, GumpButtonType.Reply, 0, 0x2D96, 0x0, 19, 8 );
AddTooltip( 1078529 );
AddHtmlLocalized( 348, 172, 250, 60, 1078144, 0x7FFF, false, false ); // Talisman of the Fey:<br>Cu Sidhe
AddImageTiledButton( 14, 236, 0x918, 0x919, 0x74, GumpButtonType.Reply, 0, 0x2D95, 0x0, -4, 2 );
AddTooltip( 1078530 );
AddHtmlLocalized( 98, 236, 250, 60, 1078145, 0x7FFF, false, false ); // Talisman of the Fey:<br>Reptalon
AddImageTiledButton( 264, 236, 0x918, 0x919, 0x75, GumpButtonType.Reply, 0, 0x2B02, 0x0, -2, 9 );
AddTooltip( 1078526 );
AddHtmlLocalized( 348, 236, 250, 60, 1075201, 0x7FFF, false, false ); // Quiver of Infinity
AddImageTiledButton( 14, 300, 0x918, 0x919, 0x76, GumpButtonType.Reply, 0, 0x2A91, 0x0, 25, 5 );
AddTooltip( 1075986 );
AddHtmlLocalized( 98, 300, 250, 60, 1074797, 0x7FFF, false, false ); // Bone Throne, Bone Couch<br>and Bone Table
AddImageTiledButton( 264, 300, 0x918, 0x919, 0x77, GumpButtonType.Reply, 0, 0x2A99, 0x0, 18, 1 );
AddTooltip( 1075987 );
AddHtmlLocalized( 348, 300, 250, 60, 1078146, 0x7FFF, false, false ); // Creepy Portraits
AddButton( 400, 374, 0xFA5, 0xFA7, 0, GumpButtonType.Page, 3 );
AddHtmlLocalized( 440, 376, 60, 20, 1043353, 0x7FFF, false, false ); // Next
AddPage( 3 );
AddButton( 300, 374, 0xFAE, 0xFB0, 0, GumpButtonType.Page, 2 );
AddHtmlLocalized( 340, 376, 60, 20, 1011393, 0x7FFF, false, false ); // Back
AddImageTiledButton( 14, 44, 0x918, 0x919, 0x78, GumpButtonType.Reply, 0, 0x2A71, 0x0, 13, 5 );
AddTooltip( 1075988 );
AddHtmlLocalized( 98, 44, 250, 60, 1074799, 0x7FFF, false, false ); // Mounted Pixies (5)
AddImageTiledButton( 264, 44, 0x918, 0x919, 0x79, GumpButtonType.Reply, 0, 0x2A98, 0x0, 26, 1 );
AddTooltip( 1075990 );
AddHtmlLocalized( 348, 44, 250, 60, 1074800, 0x7FFF, false, false ); // Haunted Mirror
AddImageTiledButton( 14, 108, 0x918, 0x919, 0x7A, GumpButtonType.Reply, 0, 0x2A92, 0x0, 18, 1 );
AddTooltip( 1075989 );
AddHtmlLocalized( 98, 108, 250, 60, 1074801, 0x7FFF, false, false ); // Bed of Nails
AddImageTiledButton( 264, 108, 0x918, 0x919, 0x7B, GumpButtonType.Reply, 0, 0x2AB8, 0x0, 18, 1 );
AddTooltip( 1075991 );
AddHtmlLocalized( 348, 108, 250, 60, 1074818, 0x7FFF, false, false ); // Sacrificial Altar
AddImageTiledButton( 14, 172, 0x918, 0x919, 0x7C, GumpButtonType.Reply, 0, 0x3F26, 0x0, 18, 8 );
AddTooltip( 1076610 );
AddHtmlLocalized( 98, 172, 250, 60, 1076257, 0x7FFF, false, false ); // Broken Covered Chair
AddImageTiledButton( 264, 172, 0x918, 0x919, 0x7D, GumpButtonType.Reply, 0, 0x3F22, 0x0, 18, 8 );
AddTooltip( 1076610 );
AddHtmlLocalized( 348, 172, 250, 60, 1076258, 0x7FFF, false, false ); // Broken Bookcase
AddImageTiledButton( 14, 236, 0x918, 0x919, 0x7E, GumpButtonType.Reply, 0, 0x3F24, 0x0, 18, 8 );
AddTooltip( 1076610 );
AddHtmlLocalized( 98, 236, 250, 60, 1076259, 0x7FFF, false, false ); // Standing Broken Chair
AddImageTiledButton( 264, 236, 0x918, 0x919, 0x7F, GumpButtonType.Reply, 0, 0x3F25, 0x0, 18, 8 );
AddTooltip( 1076610 );
AddHtmlLocalized( 348, 236, 250, 60, 1076260, 0x7FFF, false, false ); // Broken Vanity
AddImageTiledButton( 14, 300, 0x918, 0x919, 0x80, GumpButtonType.Reply, 0, 0x3F23, 0x0, 18, 8 );
AddTooltip( 1076610 );
AddHtmlLocalized( 98, 300, 250, 60, 1076261, 0x7FFF, false, false ); // Broken Chest of Drawers
AddImageTiledButton( 264, 300, 0x918, 0x919, 0x81, GumpButtonType.Reply, 0, 0x3F21, 0x0, 18, 8 );
AddTooltip( 1076610 );
AddHtmlLocalized( 348, 300, 250, 60, 1076262, 0x7FFF, false, false ); // Broken Armoire
AddButton( 400, 374, 0xFA5, 0xFA7, 0, GumpButtonType.Page, 4 );
AddHtmlLocalized( 440, 376, 60, 20, 1043353, 0x7FFF, false, false ); // Next
AddPage( 4 );
AddButton( 300, 374, 0xFAE, 0xFB0, 0, GumpButtonType.Page, 3 );
AddHtmlLocalized( 340, 376, 60, 20, 1011393, 0x7FFF, false, false ); // Back
AddImageTiledButton( 14, 44, 0x918, 0x919, 0x82, GumpButtonType.Reply, 0, 0x3F0B, 0x0, 18, 8 );
AddTooltip( 1076610 );
AddHtmlLocalized( 98, 44, 250, 60, 1076263, 0x7FFF, false, false ); // Broken Bed
AddImageTiledButton( 264, 44, 0x918, 0x919, 0x83, GumpButtonType.Reply, 0, 0xC19, 0x0, 13, 8 );
AddTooltip( 1076610 );
AddHtmlLocalized( 348, 44, 250, 60, 1076264, 0x7FFF, false, false ); // Broken Fallen Chair
AddImageTiledButton( 14, 108, 0x918, 0x919, 0x84, GumpButtonType.Reply, 0, 0x3DAA, 0x0, 20, -3 );
AddTooltip( 1076611 );
AddHtmlLocalized( 98, 108, 250, 60, 1076265, 0x7FFF, false, false ); // Suit of Gold Armor
AddImageTiledButton( 264, 108, 0x918, 0x919, 0x85, GumpButtonType.Reply, 0, 0x151C, 0x0, -20, -3 );
AddTooltip( 1076612 );
AddHtmlLocalized( 348, 108, 250, 60, 1076266, 0x7FFF, false, false ); // Suit of Silver Armor
AddImageTiledButton( 14, 172, 0x918, 0x919, 0x86, GumpButtonType.Reply, 0, 0x3DB1, 0x0, 18, 8 );
AddTooltip( 1076613 );
AddHtmlLocalized( 98, 172, 250, 60, 1076267, 0x7FFF, false, false ); // Boiling Cauldron
AddImageTiledButton( 264, 172, 0x918, 0x919, 0x87, GumpButtonType.Reply, 0, 0x3F27, 0x0, 18, 8 );
AddTooltip( 1076614 );
AddHtmlLocalized( 348, 172, 250, 60, 1024656, 0x7FFF, false, false ); // Guillotine
AddImageTiledButton( 14, 236, 0x918, 0x919, 0x88, GumpButtonType.Reply, 0, 0x3F0C, 0x0, 18, 8 );
AddTooltip( 1076615 );
AddHtmlLocalized( 98, 236, 250, 60, 1076268, 0x7FFF, false, false ); // Cherry Blossom Tree
AddImageTiledButton( 264, 236, 0x918, 0x919, 0x89, GumpButtonType.Reply, 0, 0x3F07, 0x0, 18, 8 );
AddTooltip( 1076616 );
AddHtmlLocalized( 348, 236, 250, 60, 1076269, 0x7FFF, false, false ); // Apple Tree
AddImageTiledButton( 14, 300, 0x918, 0x919, 0x8A, GumpButtonType.Reply, 0, 0x3F16, 0x0, 18, 8 );
AddTooltip( 1076617 );
AddHtmlLocalized( 98, 300, 250, 60, 1076270, 0x7FFF, false, false ); // Peach Tree
AddImageTiledButton( 264, 300, 0x918, 0x919, 0x8B, GumpButtonType.Reply, 0, 0x3F12, 0x0, 18, 8 );
AddTooltip( 1076618 );
AddHtmlLocalized( 348, 300, 250, 60, 1076271, 0x7FFF, false, false ); // Hanging Axes
AddButton( 400, 374, 0xFA5, 0xFA7, 0, GumpButtonType.Page, 5 );
AddHtmlLocalized( 440, 376, 60, 20, 1043353, 0x7FFF, false, false ); // Next
AddPage( 5 );
AddButton( 300, 374, 0xFAE, 0xFB0, 0, GumpButtonType.Page, 4 );
AddHtmlLocalized( 340, 376, 60, 20, 1011393, 0x7FFF, false, false ); // Back
AddImageTiledButton( 14, 44, 0x918, 0x919, 0x8C, GumpButtonType.Reply, 0, 0x3F13, 0x0, 18, 8 );
AddTooltip( 1076619 );
AddHtmlLocalized( 98, 44, 250, 60, 1076272, 0x7FFF, false, false ); // Hanging Swords
AddImageTiledButton( 264, 44, 0x918, 0x919, 0x8D, GumpButtonType.Reply, 0, 0x3F09, 0x0, 18, 8 );
AddTooltip( 1076620 );
AddHtmlLocalized( 348, 44, 250, 60, 1076273, 0x7FFF, false, false ); // Blue fancy rug
AddImageTiledButton( 14, 108, 0x918, 0x919, 0x8E, GumpButtonType.Reply, 0, 0x3F0E, 0x0, 18, 8 );
AddTooltip( 1076621 );
AddHtmlLocalized( 98, 108, 250, 60, 1076274, 0x7FFF, false, false ); // Coffin
AddImageTiledButton( 264, 108, 0x918, 0x919, 0x8F, GumpButtonType.Reply, 0, 0x3F1F, 0x0, 18, 8 );
AddTooltip( 1076623 );
AddHtmlLocalized( 348, 108, 250, 60, 1074027, 0x7FFF, false, false ); // Vanity
AddImageTiledButton( 14, 172, 0x918, 0x919, 0x90, GumpButtonType.Reply, 0, 0x118B, 0x0, -4, -9 );
AddTooltip( 1076624 );
AddHtmlLocalized( 98, 172, 250, 60, 1076635, 0x7FFF, false, false ); // Table With A Purple<br>Tablecloth
AddImageTiledButton( 264, 172, 0x918, 0x919, 0x91, GumpButtonType.Reply, 0, 0x118C, 0x0, -4, -9 );
AddTooltip( 1076624 );
AddHtmlLocalized( 348, 172, 250, 60, 1076636, 0x7FFF, false, false ); // Table With A Blue<br>Tablecloth
AddImageTiledButton( 14, 236, 0x918, 0x919, 0x92, GumpButtonType.Reply, 0, 0x118D, 0x0, -4, -9 );
AddTooltip( 1076624 );
AddHtmlLocalized( 98, 236, 250, 60, 1076637, 0x7FFF, false, false ); // Table With A Red<br>Tablecloth
AddImageTiledButton( 264, 236, 0x918, 0x919, 0x93, GumpButtonType.Reply, 0, 0x118E, 0x0, -4, -9 );
AddTooltip( 1076624 );
AddHtmlLocalized( 348, 236, 250, 60, 1076638, 0x7FFF, false, false ); // Table With An Orange<br>Tablecloth
AddImageTiledButton( 14, 300, 0x918, 0x919, 0x94, GumpButtonType.Reply, 0, 0x3F1E, 0x0, 18, 8 );
AddTooltip( 1076625 );
AddHtmlLocalized( 98, 300, 250, 60, 1076279, 0x7FFF, false, false ); // Unmade Bed
AddImageTiledButton( 264, 300, 0x918, 0x919, 0x95, GumpButtonType.Reply, 0, 0x3F0F, 0x0, 18, 8 );
AddTooltip( 1076626 );
AddHtmlLocalized( 348, 300, 250, 60, 1076280, 0x7FFF, false, false ); // Curtains
AddButton( 400, 374, 0xFA5, 0xFA7, 0, GumpButtonType.Page, 6 );
AddHtmlLocalized( 440, 376, 60, 20, 1043353, 0x7FFF, false, false ); // Next
AddPage( 6 );
AddButton( 300, 374, 0xFAE, 0xFB0, 0, GumpButtonType.Page, 5 );
AddHtmlLocalized( 340, 376, 60, 20, 1011393, 0x7FFF, false, false ); // Back
AddImageTiledButton( 14, 44, 0x918, 0x919, 0x96, GumpButtonType.Reply, 0, 0x1E34, 0x0, 18, -17 );
AddTooltip( 1076627 );
AddHtmlLocalized( 98, 44, 250, 60, 1076281, 0x7FFF, false, false ); // Scarecrow
AddImageTiledButton( 264, 44, 0x918, 0x919, 0x97, GumpButtonType.Reply, 0, 0xA0C, 0x0, 18, 8 );
AddTooltip( 1076628 );
AddHtmlLocalized( 348, 44, 250, 60, 1076282, 0x7FFF, false, false ); // Wall Torch
AddImageTiledButton( 14, 108, 0x918, 0x919, 0x98, GumpButtonType.Reply, 0, 0x3F10, 0x0, 18, 9 );
AddTooltip( 1076629 );
AddHtmlLocalized( 98, 108, 250, 60, 1076283, 0x7FFF, false, false ); // Fountain
AddImageTiledButton( 264, 108, 0x918, 0x919, 0x99, GumpButtonType.Reply, 0, 0x3F19, 0x0, 18, 8 );
AddTooltip( 1076630 );
AddHtmlLocalized( 348, 108, 250, 60, 1076284, 0x7FFF, false, false ); // Statue
AddImageTiledButton( 14, 172, 0x918, 0x919, 0x9A, GumpButtonType.Reply, 0, 0x1EA5, 0x0, 5, -25 );
AddTooltip( 1076631 );
AddHtmlLocalized( 98, 172, 250, 60, 1076285, 0x7FFF, false, false ); // Large Fish Net
AddImageTiledButton( 264, 172, 0x918, 0x919, 0x9B, GumpButtonType.Reply, 0, 0x1EA3, 0x0, 18, -27 );
AddTooltip( 1076632 );
AddHtmlLocalized( 348, 172, 250, 60, 1076286, 0x7FFF, false, false ); // Small Fish Net
AddImageTiledButton( 14, 236, 0x918, 0x919, 0x9C, GumpButtonType.Reply, 0, 0x2FDF, 0x0, 18, -36 );
AddTooltip( 1076633 );
AddHtmlLocalized( 98, 236, 250, 60, 1076287, 0x7FFF, false, false ); // Ladder
AddImageTiledButton( 264, 236, 0x918, 0x919, 0x9D, GumpButtonType.Reply, 0, 0x3F15, 0x0, 18, 8 );
AddTooltip( 1076622 );
AddHtmlLocalized( 348, 236, 250, 60, 1076288, 0x7FFF, false, false ); // Iron Maiden
AddImageTiledButton( 14, 300, 0x918, 0x919, 0x9E, GumpButtonType.Reply, 0, 0x3F0A, 0x0, 18, 8 );
AddTooltip( 1076620 );
AddHtmlLocalized( 98, 300, 250, 60, 1076585, 0x7FFF, false, false ); // Blue plain rug
AddImageTiledButton( 264, 300, 0x918, 0x919, 0x9F, GumpButtonType.Reply, 0, 0x3F11, 0x0, 18, 8 );
AddTooltip( 1076620 );
AddHtmlLocalized( 348, 300, 250, 60, 1076586, 0x7FFF, false, false ); // Golden decorative rug
AddButton( 400, 374, 0xFA5, 0xFA7, 0, GumpButtonType.Page, 7 );
AddHtmlLocalized( 440, 376, 60, 20, 1043353, 0x7FFF, false, false ); // Next
AddPage( 7 );
AddButton( 300, 374, 0xFAE, 0xFB0, 0, GumpButtonType.Page, 6 );
AddHtmlLocalized( 340, 376, 60, 20, 1011393, 0x7FFF, false, false ); // Back
AddImageTiledButton( 14, 44, 0x918, 0x919, 0xA0, GumpButtonType.Reply, 0, 0x3F0D, 0x0, 18, 8 );
AddTooltip( 1076620 );
AddHtmlLocalized( 98, 44, 250, 60, 1076587, 0x7FFF, false, false ); // Cinnamon fancy rug
AddImageTiledButton( 264, 44, 0x918, 0x919, 0xA1, GumpButtonType.Reply, 0, 0x3F18, 0x0, 18, 8 );
AddTooltip( 1076620 );
AddHtmlLocalized( 348, 44, 250, 60, 1076588, 0x7FFF, false, false ); // Red plain rug
AddImageTiledButton( 14, 108, 0x918, 0x919, 0xA2, GumpButtonType.Reply, 0, 0x3F08, 0x0, 18, 8 );
AddTooltip( 1076620 );
AddHtmlLocalized( 98, 108, 250, 60, 1076589, 0x7FFF, false, false ); // Blue decorative rug
AddImageTiledButton( 264, 108, 0x918, 0x919, 0xA3, GumpButtonType.Reply, 0, 0x3F17, 0x0, 18, 8 );
AddTooltip( 1076620 );
AddHtmlLocalized( 348, 108, 250, 60, 1076590, 0x7FFF, false, false ); // Pink fancy rug
AddImageTiledButton( 14, 172, 0x918, 0x919, 0xA4, GumpButtonType.Reply, 0, 0x312A, 0x0, 18, 8 );
AddTooltip( 1076615 );
AddHtmlLocalized( 98, 172, 250, 60, 1076784, 0x7FFF, false, false ); // Cherry Blossom Trunk
AddImageTiledButton( 264, 172, 0x918, 0x919, 0xA5, GumpButtonType.Reply, 0, 0x3128, 0x0, 18, 8 );
AddTooltip( 1076616 );
AddHtmlLocalized( 348, 172, 250, 60, 1076785, 0x7FFF, false, false ); // Apple Trunk
AddImageTiledButton( 14, 236, 0x918, 0x919, 0xA6, GumpButtonType.Reply, 0, 0x3129, 0x0, 18, 8 );
AddTooltip( 1076617 );
AddHtmlLocalized( 98, 236, 250, 60, 1076786, 0x7FFF, false, false ); // Peach Trunk
}
public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_Token == null || m_Token.Deleted || info.ButtonID == 0 )
return;
List<Type> types = new List<Type>();
int cliloc = 0;
switch ( info.ButtonID )
{
// 7th anniversary
case 0x64: types.Add( typeof( LeggingsOfEmbers ) ); cliloc = 1078147; break;
case 0x65: types.Add( typeof( RoseOfTrinsic ) ); cliloc = 1062913; break;
case 0x66: types.Add( typeof( ShaminoCrossbow ) ); cliloc = 1062915; break;
case 0x67: types.Add( typeof( TapestryOfSosaria ) ); cliloc = 1062917; break;
case 0x68: types.Add( typeof( HearthOfHomeFireDeed ) ); cliloc = 1062919; break;
case 0x69: types.Add( typeof( HolySword ) ); cliloc = 1062921; break;
case 0x6A: types.Add( typeof( SamuraiHelm ) ); cliloc = 1062923; break;
// 8th anniversary
/*case 0x6B: types.Add( typeof( SpiritualityHelm ) ); cliloc = 1075188; break;
case 0x6C: types.Add( typeof( ValorGauntlets ) ); cliloc = 1075192; break;*/
case 0x6D: types.Add( typeof( DupresShield ) ); cliloc = 1075196; break;
case 0x6E: types.Add( typeof( FountainOfLifeDeed ) ); cliloc = 1075197; break;
case 0x6F: types.Add( typeof( DawnsMusicBox ) ); cliloc = 1075198; break;
case 0x70: types.Add( typeof( OssianGrimoire ) ); cliloc = 1078148; break;
case 0x71: types.Add( typeof( FerretFormTalisman ) ); cliloc = 1078142; break;
case 0x72: types.Add( typeof( SquirrelFormTalisman ) ); cliloc = 1078143; break;
case 0x73: types.Add( typeof( CuSidheFormTalisman ) ); cliloc = 1078144; break;
case 0x74: types.Add( typeof( ReptalonFormTalisman ) ); cliloc = 1078145; break;
case 0x75: types.Add( typeof( QuiverOfInfinity ) ); cliloc = 1075201; break;
// evil home decor
case 0x76:
types.Add( typeof( BoneThroneDeed ) );
types.Add( typeof( BoneCouchDeed ) );
types.Add( typeof( BoneTableDeed ) );
cliloc = 1074797;
break;
case 0x77:
types.Add( typeof( CreepyPortraitDeed ) );
types.Add( typeof( DisturbingPortraitDeed ) );
types.Add( typeof( UnsettlingPortraitDeed ) );
cliloc = 1078146;
break;
case 0x78:
types.Add( typeof( MountedPixieBlueDeed ) );
types.Add( typeof( MountedPixieGreenDeed ) );
types.Add( typeof( MountedPixieLimeDeed ) );
types.Add( typeof( MountedPixieOrangeDeed ) );
types.Add( typeof( MountedPixieWhiteDeed ) );
cliloc = 1074799;
break;
case 0x79: types.Add( typeof( HaunterMirrorDeed ) ); cliloc = 1074800; break;
case 0x7A: types.Add( typeof( BedOfNailsDeed ) ); cliloc = 1074801; break;
case 0x7B: types.Add( typeof( SacrificialAltarDeed ) ); cliloc = 1074818; break;
// broken furniture
case 0x7C: types.Add( typeof( BrokenCoveredChairDeed ) ); cliloc = 1076257; break;
case 0x7D: types.Add( typeof( BrokenBookcaseDeed ) ); cliloc = 1076258; break;
case 0x7E: types.Add( typeof( StandingBrokenChairDeed ) ); cliloc = 1076259; break;
case 0x7F: types.Add( typeof( BrokenVanityDeed ) ); cliloc = 1076260; break;
case 0x80: types.Add( typeof( BrokenChestOfDrawersDeed ) ); cliloc = 1076261; break;
case 0x81: types.Add( typeof( BrokenArmoireDeed ) ); cliloc = 1076262; break;
case 0x82: types.Add( typeof( BrokenBedDeed ) ); cliloc = 1076263; break;
case 0x83: types.Add( typeof( BrokenFallenChairDeed ) ); cliloc = 1076264; break;
// other
case 0x84: types.Add( typeof( SuitOfGoldArmorDeed ) ); cliloc = 1076265; break;
case 0x85: types.Add( typeof( SuitOfSilverArmorDeed ) ); cliloc = 1076266; break;
case 0x86: types.Add( typeof( BoilingCauldronDeed ) ); cliloc = 1076267; break;
case 0x87: types.Add( typeof( GuillotineDeed ) ); cliloc = 1024656; break;
case 0x88: types.Add( typeof( CherryBlossomTreeDeed ) ); cliloc = 1076268; break;
case 0x89: types.Add( typeof( AppleTreeDeed ) ); cliloc = 1076269; break;
case 0x8A: types.Add( typeof( PeachTreeDeed ) ); cliloc = 1076270; break;
case 0x8B: types.Add( typeof( HangingAxesDeed ) ); cliloc = 1076271; break;
case 0x8C: types.Add( typeof( HangingSwordsDeed ) ); cliloc = 1076272; break;
case 0x8D: types.Add( typeof( BlueFancyRugDeed ) ); cliloc = 1076273; break;
case 0x8E: types.Add( typeof( WoodenCoffinDeed ) ); cliloc = 1076274; break;
case 0x8F: types.Add( typeof( VanityDeed ) ); cliloc = 1074027; break;
case 0x90: types.Add( typeof( TableWithPurpleClothDeed ) ); cliloc = 1076635; break;
case 0x91: types.Add( typeof( TableWithBlueClothDeed ) ); cliloc = 1076636; break;
case 0x92: types.Add( typeof( TableWithRedClothDeed ) ); cliloc = 1076637; break;
case 0x93: types.Add( typeof( TableWithOrangeClothDeed ) ); cliloc = 1076638; break;
case 0x94: types.Add( typeof( UnmadeBedDeed ) ); cliloc = 1076279; break;
case 0x95: types.Add( typeof( CurtainsDeed ) ); cliloc = 1076280; break;
case 0x96: types.Add( typeof( ScarecrowDeed ) ); cliloc = 1076281; break;
case 0x97: types.Add( typeof( WallTorchDeed ) ); cliloc = 1076282; break;
case 0x98: types.Add( typeof( FountainDeed ) ); cliloc = 1076283; break;
case 0x99: types.Add( typeof( StoneStatueDeed ) ); cliloc = 1076284; break;
case 0x9A: types.Add( typeof( LargeFishingNetDeed ) ); cliloc = 1076285; break;
case 0x9B: types.Add( typeof( SmallFishingNetDeed ) ); cliloc = 1076286; break;
case 0x9C: types.Add( typeof( HouseLadderDeed ) ); cliloc = 1076287; break;
case 0x9D: types.Add( typeof( IronMaidenDeed ) ); cliloc = 1076288; break;
case 0x9E: types.Add( typeof( BluePlainRugDeed ) ); cliloc = 1076585; break;
case 0x9F: types.Add( typeof( GoldenDecorativeRugDeed ) ); cliloc = 1076586; break;
case 0xA0: types.Add( typeof( CinnamonFancyRugDeed ) ); cliloc = 1076587; break;
case 0xA1: types.Add( typeof( RedPlainRugDeed ) ); cliloc = 1076588; break;
case 0xA2: types.Add( typeof( BlueDecorativeRugDeed ) ); cliloc = 1076589; break;
case 0xA3: types.Add( typeof( PinkFancyRugDeed ) ); cliloc = 1076590; break;
case 0xA4: types.Add( typeof( CherryBlossomTrunkDeed ) ); cliloc = 1076784; break;
case 0xA5: types.Add( typeof( AppleTrunkDeed ) ); cliloc = 1076785; break;
case 0xA6: types.Add( typeof( PeachTrunkDeed ) ); cliloc = 1076786; break;
}
if ( types.Count > 0 && cliloc > 0 )
{
sender.Mobile.CloseGump( typeof( ConfirmHeritageGump ) );
sender.Mobile.SendGump( new ConfirmHeritageGump( m_Token, types.ToArray(), cliloc ) );
}
else
sender.Mobile.SendLocalizedMessage( 501311 ); // This option is currently disabled, while we evaluate it for game balance.
}
}
}

View file

@ -0,0 +1,171 @@
using System;
using System.Collections.Generic;
using Server;
using Server.ContextMenus;
namespace Server.Items
{
public class AddonContainerComponent : Item, IChopable
{
public virtual bool NeedsWall { get { return false; } }
public virtual Point3D WallPosition { get { return Point3D.Zero; } }
private Point3D m_Offset;
private BaseAddonContainer m_Addon;
[CommandProperty( AccessLevel.GameMaster )]
public BaseAddonContainer Addon
{
get { return m_Addon; }
set { m_Addon = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public Point3D Offset
{
get { return m_Offset; }
set { m_Offset = value; }
}
[Hue, CommandProperty( AccessLevel.GameMaster )]
public override int Hue
{
get { return base.Hue; }
set
{
base.Hue = value;
if ( m_Addon != null && m_Addon.ShareHue )
m_Addon.Hue = value;
}
}
[Constructable]
public AddonContainerComponent( int itemID ) : base( itemID )
{
Movable = false;
AddonComponent.ApplyLightTo( this );
}
public AddonContainerComponent( Serial serial ) : base( serial )
{
}
public override bool OnDragDrop( Mobile from, Item dropped )
{
if ( Addon != null )
return Addon.OnDragDrop( from, dropped );
return false;
}
public override void OnDoubleClick( Mobile from )
{
if ( m_Addon != null )
m_Addon.OnComponentUsed( this, from );
}
public override void OnLocationChange( Point3D old )
{
if ( m_Addon != null )
m_Addon.Location = new Point3D( X - m_Offset.X, Y - m_Offset.Y, Z - m_Offset.Z );
}
public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
{
if ( m_Addon != null )
m_Addon.GetContextMenuEntries( from, list );
}
public override void OnMapChange()
{
if ( m_Addon != null )
m_Addon.Map = Map;
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
if ( m_Addon != null )
m_Addon.Delete();
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
writer.Write( m_Addon );
writer.Write( m_Offset );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
m_Addon = reader.ReadItem() as BaseAddonContainer;
m_Offset = reader.ReadPoint3D();
if ( m_Addon != null )
m_Addon.OnComponentLoaded( this );
AddonComponent.ApplyLightTo( this );
}
public virtual void OnChop( Mobile from )
{
if ( m_Addon != null && from.InRange( GetWorldLocation(), 3 ) )
m_Addon.OnChop( from );
else
from.SendLocalizedMessage( 500446 ); // That is too far away.
}
}
public class LocalizedContainerComponent : AddonContainerComponent
{
private int m_LabelNumber;
public override int LabelNumber
{
get
{
if ( m_LabelNumber > 0 )
return m_LabelNumber;
return base.LabelNumber;
}
}
public LocalizedContainerComponent( int itemID, int labelNumber ) : base( itemID )
{
m_LabelNumber = labelNumber;
}
public LocalizedContainerComponent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
writer.Write( m_LabelNumber );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
m_LabelNumber = reader.ReadInt();
}
}
}

View file

@ -13,7 +13,8 @@ namespace Server.Items
Blocked,
NotInHouse,
DoorTooClose,
NoWall
NoWall,
DoorsNotClosed
}
public interface IAddon

View file

@ -0,0 +1,307 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Server;
using Server.Multis;
using Server.Regions;
namespace Server.Items
{
public abstract class BaseAddonContainer : BaseContainer, IChopable, IAddon
{
public override bool DisplayWeight { get { return false; } }
[Hue, CommandProperty( AccessLevel.GameMaster )]
public override int Hue
{
get
{
return base.Hue;
}
set
{
if ( base.Hue != value )
{
base.Hue = value;
if ( !Deleted && this.ShareHue && m_Components != null )
{
Hue = value;
foreach ( AddonContainerComponent c in m_Components )
c.Hue = value;
}
}
}
}
private CraftResource m_Resource;
[CommandProperty( AccessLevel.GameMaster )]
public CraftResource Resource
{
get { return m_Resource; }
set
{
if ( m_Resource != value )
{
m_Resource = value;
Hue = CraftResources.GetHue( m_Resource );
InvalidateProperties();
}
}
}
Item IAddon.Deed
{
get { return this.Deed; }
}
public virtual bool RetainDeedHue { get { return false; } }
public virtual bool NeedsWall { get { return false; } }
public virtual bool ShareHue { get { return true; } }
public virtual Point3D WallPosition { get { return Point3D.Zero; } }
public virtual BaseAddonContainerDeed Deed { get { return null; } }
private List<AddonContainerComponent> m_Components;
public List<AddonContainerComponent> Components
{
get { return m_Components; }
}
public BaseAddonContainer( int itemID ) : base( itemID )
{
AddonComponent.ApplyLightTo( this );
m_Components = new List<AddonContainerComponent>();
}
public BaseAddonContainer( Serial serial ) : base( serial )
{
}
public override void OnLocationChange( Point3D oldLoc )
{
base.OnLocationChange( oldLoc );
if ( Deleted )
return;
foreach ( AddonContainerComponent c in m_Components )
c.Location = new Point3D( X + c.Offset.X, Y + c.Offset.Y, Z + c.Offset.Z );
}
public override void OnMapChange()
{
base.OnMapChange();
if ( Deleted )
return;
foreach ( AddonContainerComponent c in m_Components )
c.Map = Map;
}
public override void OnDelete()
{
BaseHouse house = BaseHouse.FindHouseAt( this );
if ( house != null )
house.Addons.Remove( this );
base.OnDelete();
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( !CraftResources.IsStandard( m_Resource ) )
list.Add( CraftResources.GetLocalizationNumber( m_Resource ) );
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
foreach ( AddonContainerComponent c in m_Components )
c.Delete();
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
writer.WriteItemList<AddonContainerComponent>( m_Components );
writer.Write( (int) m_Resource );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
m_Components = reader.ReadStrongItemList<AddonContainerComponent>();
m_Resource = (CraftResource) reader.ReadInt();
AddonComponent.ApplyLightTo( this );
}
public void DropItemsToGround()
{
for ( int i = Items.Count - 1; i >= 0; i-- )
Items[ i ].MoveToWorld( Location );
}
public void AddComponent( AddonContainerComponent c, int x, int y, int z )
{
if ( Deleted )
return;
m_Components.Add( c );
c.Addon = this;
c.Offset = new Point3D( x, y, z );
c.MoveToWorld( new Point3D( X + x, Y + y, Z + z ), Map );
}
public AddonFitResult CouldFit( IPoint3D p, Map map, Mobile from, ref BaseHouse house )
{
if ( Deleted )
return AddonFitResult.Blocked;
foreach ( AddonContainerComponent c in m_Components )
{
Point3D p3D = new Point3D( p.X + c.Offset.X, p.Y + c.Offset.Y, p.Z + c.Offset.Z );
if ( !map.CanFit( p3D.X, p3D.Y, p3D.Z, c.ItemData.Height, false, true, ( c.Z == 0 ) ) )
return AddonFitResult.Blocked;
else if ( !BaseAddon.CheckHouse( from, p3D, map, c.ItemData.Height, ref house ) )
return AddonFitResult.NotInHouse;
if ( c.NeedsWall )
{
Point3D wall = c.WallPosition;
if ( !BaseAddon.IsWall( p3D.X + wall.X, p3D.Y + wall.Y, p3D.Z + wall.Z, map ) )
return AddonFitResult.NoWall;
}
}
Point3D p3 = new Point3D( p.X, p.Y, p.Z );
if ( !map.CanFit( p3.X, p3.Y, p3.Z, ItemData.Height, false, true, ( Z == 0 ) ) )
return AddonFitResult.Blocked;
else if ( !BaseAddon.CheckHouse( from, p3, map, ItemData.Height, ref house ) )
return AddonFitResult.NotInHouse;
if ( NeedsWall )
{
Point3D wall = WallPosition;
if ( !BaseAddon.IsWall( p3.X + wall.X, p3.Y + wall.Y, p3.Z + wall.Z, map ) )
return AddonFitResult.NoWall;
}
if ( house != null )
{
ArrayList doors = house.Doors;
for ( int i = 0; i < doors.Count; ++i )
{
BaseDoor door = doors[ i ] as BaseDoor;
if ( door != null && door.Open )
return AddonFitResult.DoorsNotClosed;
Point3D doorLoc = door.GetWorldLocation();
int doorHeight = door.ItemData.CalcHeight;
foreach ( AddonContainerComponent c in m_Components )
{
Point3D addonLoc = new Point3D( p.X + c.Offset.X, p.Y + c.Offset.Y, p.Z + c.Offset.Z );
int addonHeight = c.ItemData.CalcHeight;
if ( Utility.InRange( doorLoc, addonLoc, 1 ) && ( addonLoc.Z == doorLoc.Z || ( ( addonLoc.Z + addonHeight ) > doorLoc.Z && ( doorLoc.Z + doorHeight ) > addonLoc.Z ) ) )
return AddonFitResult.DoorTooClose;
}
Point3D addonLo = new Point3D( p.X, p.Y, p.Z );
int addonHeigh = ItemData.CalcHeight;
if ( Utility.InRange( doorLoc, addonLo, 1 ) && ( addonLo.Z == doorLoc.Z || ( ( addonLo.Z + addonHeigh ) > doorLoc.Z && ( doorLoc.Z + doorHeight ) > addonLo.Z ) ) )
return AddonFitResult.DoorTooClose;
}
}
return AddonFitResult.Valid;
}
public bool CouldFit( IPoint3D p, Map map )
{
BaseHouse house = null;
return ( CouldFit( p, map, null, ref house ) == AddonFitResult.Valid );
}
public virtual void OnChop( Mobile from )
{
BaseHouse house = BaseHouse.FindHouseAt( this );
if ( house != null && house.IsOwner( from ) )
{
if ( !IsSecure )
{
Effects.PlaySound( GetWorldLocation(), Map, 0x3B3 );
from.SendLocalizedMessage( 500461 ); // You destroy the item.
int hue = 0;
if ( RetainDeedHue )
{
for ( int i = 0; hue == 0 && i < m_Components.Count; ++i )
{
AddonContainerComponent c = m_Components[ i ];
if ( c.Hue != 0 )
hue = c.Hue;
}
}
DropItemsToGround();
Delete();
house.Addons.Remove( this );
BaseAddonContainerDeed deed = Deed;
if ( deed != null )
{
deed.Resource = Resource;
if ( RetainDeedHue )
deed.Hue = hue;
from.AddToBackpack( deed );
}
}
else
from.SendLocalizedMessage( 1074870 ); // This item must be unlocked/unsecured before re-deeding it.
}
}
public virtual void OnComponentLoaded( AddonContainerComponent c )
{
}
public virtual void OnComponentUsed( AddonContainerComponent c, Mobile from )
{
}
}
}

View file

@ -0,0 +1,165 @@
using System;
using Server;
using Server.Multis;
using Server.Targeting;
using Server.Engines.Craft;
namespace Server.Items
{
[Flipable( 0x14F0, 0x14EF )]
public abstract class BaseAddonContainerDeed : Item, ICraftable
{
public abstract BaseAddonContainer Addon{ get; }
private CraftResource m_Resource;
[CommandProperty( AccessLevel.GameMaster )]
public CraftResource Resource
{
get{ return m_Resource; }
set
{
if ( m_Resource != value )
{
m_Resource = value;
Hue = CraftResources.GetHue( m_Resource );
InvalidateProperties();
}
}
}
public BaseAddonContainerDeed() : base( 0x14F0 )
{
Weight = 1.0;
if ( !Core.AOS )
LootType = LootType.Newbied;
}
public BaseAddonContainerDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 ); // version
// version 1
writer.Write( (int) m_Resource );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch ( version )
{
case 1:
m_Resource = (CraftResource) reader.ReadInt();
break;
}
}
public override void OnDoubleClick( Mobile from )
{
if ( IsChildOf( from.Backpack ) )
from.Target = new InternalTarget( this );
else
from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used.
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( !CraftResources.IsStandard( m_Resource ) )
list.Add( CraftResources.GetLocalizationNumber( m_Resource ) );
}
#region ICraftable
public virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
{
Type resourceType = typeRes;
if ( resourceType == null )
resourceType = craftItem.Resources.GetAt( 0 ).ItemType;
Resource = CraftResources.GetFromType( resourceType );
CraftContext context = craftSystem.GetContext( from );
if ( context != null && context.DoNotColor )
Hue = 0;
return quality;
}
#endregion
private class InternalTarget : Target
{
private BaseAddonContainerDeed m_Deed;
public InternalTarget( BaseAddonContainerDeed deed ) : base( -1, true, TargetFlags.None )
{
m_Deed = deed;
CheckLOS = false;
}
protected override void OnTarget( Mobile from, object targeted )
{
IPoint3D p = targeted as IPoint3D;
Map map = from.Map;
if ( p == null || map == null || m_Deed.Deleted )
return;
if ( m_Deed.IsChildOf( from.Backpack ) )
{
BaseAddonContainer addon = m_Deed.Addon;
addon.Resource = m_Deed.Resource;
Server.Spells.SpellHelper.GetSurfaceTop( ref p );
BaseHouse house = null;
AddonFitResult res = addon.CouldFit( p, map, from, ref house );
if ( res == AddonFitResult.Valid )
addon.MoveToWorld( new Point3D( p ), map );
else if ( res == AddonFitResult.Blocked )
from.SendLocalizedMessage( 500269 ); // You cannot build that there.
else if ( res == AddonFitResult.NotInHouse )
from.SendLocalizedMessage( 500274 ); // You can only place this in a house that you own!
else if ( res == AddonFitResult.DoorsNotClosed )
from.SendMessage( "You must close all house doors before placing this." );
else if ( res == AddonFitResult.DoorTooClose )
from.SendLocalizedMessage( 500271 ); // You cannot build near the door.
else if ( res == AddonFitResult.NoWall )
from.SendLocalizedMessage( 500268 ); // This object needs to be mounted on something.
if ( res == AddonFitResult.Valid )
{
m_Deed.Delete();
house.Addons.Add( addon );
house.AddSecure( from, addon );
}
else
{
addon.Delete();
}
}
else
{
from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it.
}
}
}
}
}

View file

@ -0,0 +1,43 @@
using System;
using Server;
namespace Server.Items
{
public class BloodwoodSpirit : BaseTalisman
{
public override int LabelNumber{ get{ return 1075034; } } // Bloodwood Spirit
public override bool ForceShowName{ get{ return true; } }
[Constructable]
public BloodwoodSpirit() : base( 0x2F5A )
{
Hue = 0x27;
MaxChargeTime = 1200;
Removal = TalismanRemoval.Damage;
Blessed = GetRandomBlessed();
Protection = GetRandomProtection();
SkillBonuses.SetValues( 0, SkillName.SpiritSpeak, 10.0 );
SkillBonuses.SetValues( 1, SkillName.Necromancy, 5.0 );
}
public BloodwoodSpirit( 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,48 @@
using System;
using Server;
using Server.Mobiles;
namespace Server.Items
{
public class TotemOfVoid : BaseTalisman
{
public override int LabelNumber{ get{ return 1075035; } } // Totem of the Void
public override bool ForceShowName{ get{ return true; } }
[Constructable]
public TotemOfVoid() : base( 0x2F5B )
{
Hue = 0x2D0;
MaxChargeTime = 1800;
Blessed = GetRandomBlessed();
Protection = GetRandomProtection();
Attributes.RegenHits = 2;
Attributes.LowerManaCost = 10;
}
public TotemOfVoid( Serial serial ) : base( serial )
{
}
public override Type GetSummoner()
{
return Utility.RandomBool() ? typeof( SummonedSkeletalKnight ) : typeof( SummonedSheep );
}
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,130 @@
using System;
using System.Reflection;
using System.Collections.Generic;
using Server.Multis;
namespace Server.Items
{
[AttributeUsage( AttributeTargets.Class )]
public class FlipableAddonAttribute : Attribute
{
private static string m_MethodName = "Flip";
private static Type[] m_Params = new Type[]
{
typeof( Mobile ), typeof( Direction )
};
private Direction[] m_Directions;
public Direction[] Directions
{
get { return m_Directions; }
}
public FlipableAddonAttribute( params Direction[] directions )
{
m_Directions = directions;
}
public virtual void Flip( Mobile from, Item addon )
{
if ( m_Directions != null && m_Directions.Length > 1 )
{
try
{
MethodInfo flipMethod = addon.GetType().GetMethod( m_MethodName, m_Params );
if ( flipMethod != null )
{
int index = 0;
for ( int i = 0; i < m_Directions.Length; i++ )
{
if ( addon.Direction == m_Directions[ i ] )
{
index = i + 1;
break;
}
}
if ( index >= m_Directions.Length )
index = 0;
ClearComponents( addon );
flipMethod.Invoke( addon, new object[ 2 ] { from, m_Directions[ index ] } );
BaseHouse house = null;
AddonFitResult result = AddonFitResult.Valid;
addon.Map = Map.Internal;
if ( addon is BaseAddon )
result = ( (BaseAddon) addon ).CouldFit( addon.Location, from.Map, from, ref house );
else if ( addon is BaseAddonContainer )
result = ( (BaseAddonContainer) addon ).CouldFit( addon.Location, from.Map, from, ref house );
addon.Map = from.Map;
if ( result != AddonFitResult.Valid )
{
if ( index == 0 )
index = m_Directions.Length - 1;
else
index -= 1;
ClearComponents( addon );
flipMethod.Invoke( addon, new object[ 2 ] { from, m_Directions[ index ] } );
if ( result == AddonFitResult.Blocked )
from.SendLocalizedMessage( 500269 ); // You cannot build that there.
else if ( result == AddonFitResult.NotInHouse )
from.SendLocalizedMessage( 500274 ); // You can only place this in a house that you own!
else if ( result == AddonFitResult.DoorsNotClosed )
from.SendMessage( "You must close all house doors before placing this." );
else if ( result == AddonFitResult.DoorTooClose )
from.SendLocalizedMessage( 500271 ); // You cannot build near the door.
else if ( result == AddonFitResult.NoWall )
from.SendLocalizedMessage( 500268 ); // This object needs to be mounted on something.
}
addon.Direction = m_Directions[ index ];
}
}
catch
{
}
}
}
private void ClearComponents( Item item )
{
if ( item is BaseAddon )
{
BaseAddon addon = (BaseAddon) item;
foreach ( AddonComponent c in addon.Components )
{
c.Addon = null;
c.Delete();
}
addon.Components.Clear();
}
else if ( item is BaseAddonContainer )
{
BaseAddonContainer addon = (BaseAddonContainer) item;
foreach ( AddonContainerComponent c in addon.Components )
{
c.Addon = null;
c.Delete();
}
addon.Components.Clear();
}
}
}
}

View file

@ -157,10 +157,42 @@ namespace Server.Items
bool isDecorableComponent = false;
if ( item is AddonComponent )
if ( ((AddonComponent)item).Addon.Components.Count == 1 && Core.SE )
if ( item is AddonComponent || item is AddonContainerComponent || item is BaseAddonContainer )
{
object addon = null;
int count = 0;
if ( item is AddonComponent )
{
AddonComponent component = (AddonComponent) item;
count = component.Addon.Components.Count;
addon = component.Addon;
}
else if ( item is AddonContainerComponent )
{
AddonContainerComponent component = (AddonContainerComponent) item;
count = component.Addon.Components.Count;
addon = component.Addon;
}
else if ( item is BaseAddonContainer )
{
BaseAddonContainer container = (BaseAddonContainer) item;
count = container.Components.Count;
addon = container;
}
if ( count == 1 && Core.SE )
isDecorableComponent = true;
if ( m_Decorator.Command == DecorateCommand.Turn )
{
FlipableAddonAttribute[] attributes = (FlipableAddonAttribute[]) addon.GetType().GetCustomAttributes( typeof( FlipableAddonAttribute ), false );
if ( attributes.Length > 0 )
isDecorableComponent = true;
}
}
if ( house == null || !house.IsCoOwner( from ) )
{
from.SendLocalizedMessage( 502092 ); // You must be in your house to do this.
@ -208,10 +240,30 @@ namespace Server.Items
private static void Turn( Item item, Mobile from )
{
FlipableAttribute[] attributes = (FlipableAttribute[])item.GetType().GetCustomAttributes( typeof( FlipableAttribute ), false );
if ( item is AddonComponent || item is AddonContainerComponent || item is BaseAddonContainer )
{
object addon = null;
if( attributes.Length > 0 )
attributes[0].Flip( item );
if ( item is AddonComponent )
addon = ((AddonComponent) item).Addon;
else if ( item is AddonContainerComponent )
addon = ((AddonContainerComponent) item).Addon;
else if ( item is BaseAddonContainer )
addon = (BaseAddonContainer) item;
FlipableAddonAttribute[] aAttributes = (FlipableAddonAttribute[]) addon.GetType().GetCustomAttributes( typeof( FlipableAddonAttribute ), false );
if ( aAttributes.Length > 0 )
{
aAttributes[ 0 ].Flip( from, (Item) addon );
return;
}
}
FlipableAttribute[] attributes = (FlipableAttribute[]) item.GetType().GetCustomAttributes( typeof( FlipableAttribute ), false );
if ( attributes.Length > 0 )
attributes[ 0 ].Flip( item );
else
from.SendLocalizedMessage( 1042273 ); // You cannot turn that.
}

View file

@ -34,7 +34,7 @@ namespace Server.Items
{
}
public bool Dye( Mobile from, DyeTub sender )
public virtual bool Dye( Mobile from, DyeTub sender )
{
if ( Deleted )
return false;

View file

@ -0,0 +1,315 @@
using System;
using System.Collections.Generic;
using Server.ContextMenus;
using Server.Gumps;
using Server.Multis;
using Server.Network;
namespace Server.Items
{
public sealed class StopMusic : Packet
{
public static readonly Packet Instance = Packet.SetStatic( new StopMusic() );
public StopMusic() : base( 0x6D, 3 )
{
m_Stream.Write( (short) 0x1FFF );
}
}
[Flipable( 0x2AF9, 0x2AFD )]
public class DawnsMusicBox : Item, ISecurable
{
public override int LabelNumber { get { return 1075198; } } // Dawns Music Box
private List<MusicName> m_Tracks;
public List<MusicName> Tracks
{
get { return m_Tracks; }
}
private SecureLevel m_Level;
[CommandProperty( AccessLevel.GameMaster )]
public SecureLevel Level
{
get { return m_Level; }
set { m_Level = value; }
}
[Constructable]
public DawnsMusicBox() : base( 0x2AF9 )
{
Weight = 1.0;
m_Tracks = new List<MusicName>();
while ( m_Tracks.Count < 4 )
{
MusicName name = RandomTrack( DawnsMusicRarity.Common );
if ( !m_Tracks.Contains( name ) )
m_Tracks.Add( name );
}
}
public DawnsMusicBox( Serial serial ) : base( serial )
{
}
public override void OnAfterDuped( Item newItem )
{
DawnsMusicBox box = newItem as DawnsMusicBox;
if ( box == null )
return;
box.m_Tracks = new List<MusicName>();
box.m_Tracks.AddRange( m_Tracks );
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
int commonSongs = 0;
int uncommonSongs = 0;
int rareSongs = 0;
for ( int i = 0; i < m_Tracks.Count; i++ )
{
DawnsMusicInfo info = GetInfo( m_Tracks[ i ] );
switch ( info.Rarity )
{
case DawnsMusicRarity.Common: commonSongs++; break;
case DawnsMusicRarity.Uncommon: uncommonSongs++; break;
case DawnsMusicRarity.Rare: rareSongs++; break;
}
}
if ( commonSongs > 0 )
list.Add( 1075234, commonSongs.ToString() ); // ~1_NUMBER~ Common Tracks
if ( uncommonSongs > 0 )
list.Add( 1075235, uncommonSongs.ToString() ); // ~1_NUMBER~ Uncommon Tracks
if ( rareSongs > 0 )
list.Add( 1075236, rareSongs.ToString() ); // ~1_NUMBER~ Rare Tracks
}
public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
{
base.GetContextMenuEntries( from, list );
SetSecureLevelEntry.AddTo( from, this, list ); // Set secure level
}
public override void OnDoubleClick( Mobile from )
{
if ( !IsChildOf( from.Backpack ) && !IsLockedDown )
from.SendLocalizedMessage( 1061856 ); // You must have the item in your backpack or locked down in order to use it.
else if ( IsLockedDown && !HasAccces( from ) )
from.SendLocalizedMessage( 502436 ); // That is not accessible.
else
{
from.CloseGump( typeof( DawnsMusicBoxGump ) );
from.SendGump( new DawnsMusicBoxGump( this ) );
}
}
public bool HasAccces( Mobile m )
{
if ( m.AccessLevel >= AccessLevel.GameMaster )
return true;
BaseHouse house = BaseHouse.FindHouseAt( this );
return ( house != null && house.HasAccess( m ) );
}
private Timer m_Timer;
private int m_ItemID = 0;
private int m_Count = 0;
public void PlayMusic( Mobile m, MusicName music )
{
if ( m_Timer != null && m_Timer.Running )
EndMusic( m );
else
m_ItemID = ItemID;
m.Send( new PlayMusic( music ) );
m_Timer = Timer.DelayCall( TimeSpan.FromSeconds( 0.5 ), TimeSpan.FromSeconds( 0.5 ), 4, new TimerCallback( Animate ) );
}
public void EndMusic( Mobile m )
{
if ( m_Timer != null && m_Timer.Running )
m_Timer.Stop();
m.Send( StopMusic.Instance );
if ( m_Count > 0 )
ItemID = m_ItemID;
m_Count = 0;
}
private void Animate()
{
m_Count++;
if ( m_Count >= 4 )
{
m_Count = 0;
ItemID = m_ItemID;
}
else
ItemID++;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
writer.Write( (int) m_Tracks.Count );
for ( int i = 0; i < m_Tracks.Count; i++ )
writer.Write( (int) m_Tracks[ i ] );
writer.Write( (int) m_Level );
writer.Write( (int) m_ItemID );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
int count = reader.ReadInt();
m_Tracks = new List<MusicName>();
for ( int i = 0; i < count; i++ )
m_Tracks.Add( (MusicName) reader.ReadInt() );
m_Level = (SecureLevel) reader.ReadInt();
m_ItemID = reader.ReadInt();
}
private static Dictionary<MusicName, DawnsMusicInfo> m_Info = new Dictionary<MusicName, DawnsMusicInfo>();
public static void Initialize()
{
m_Info.Add( MusicName.Samlethe, new DawnsMusicInfo( 1075152, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Sailing, new DawnsMusicInfo( 1075163, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Britain2, new DawnsMusicInfo( 1075145, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Britain1, new DawnsMusicInfo( 1075144, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Bucsden, new DawnsMusicInfo( 1075146, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Forest_a, new DawnsMusicInfo( 1075161, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Cove, new DawnsMusicInfo( 1075176, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Death, new DawnsMusicInfo( 1075171, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Dungeon9, new DawnsMusicInfo( 1075160, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Dungeon2, new DawnsMusicInfo( 1075175, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Cave01, new DawnsMusicInfo( 1075159, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Combat3, new DawnsMusicInfo( 1075170, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Combat1, new DawnsMusicInfo( 1075168, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Combat2, new DawnsMusicInfo( 1075169, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Jhelom, new DawnsMusicInfo( 1075147, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Linelle, new DawnsMusicInfo( 1075185, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.LBCastle, new DawnsMusicInfo( 1075148, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Minoc, new DawnsMusicInfo( 1075150, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Moonglow, new DawnsMusicInfo( 1075177, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Magincia, new DawnsMusicInfo( 1075149, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Nujelm, new DawnsMusicInfo( 1075174, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.BTCastle, new DawnsMusicInfo( 1075173, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Tavern04, new DawnsMusicInfo( 1075167, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Skarabra, new DawnsMusicInfo( 1075154, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Stones2, new DawnsMusicInfo( 1075143, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Serpents, new DawnsMusicInfo( 1075153, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Taiko, new DawnsMusicInfo( 1075180, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Tavern01, new DawnsMusicInfo( 1075164, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Tavern02, new DawnsMusicInfo( 1075165, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Tavern03, new DawnsMusicInfo( 1075166, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.TokunoDungeon, new DawnsMusicInfo( 1075179, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Trinsic, new DawnsMusicInfo( 1075155, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.OldUlt01, new DawnsMusicInfo( 1075142, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Ocllo, new DawnsMusicInfo( 1075151, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Vesper, new DawnsMusicInfo( 1075156, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Victory, new DawnsMusicInfo( 1075172, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Mountn_a, new DawnsMusicInfo( 1075162, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Wind, new DawnsMusicInfo( 1075157, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Yew, new DawnsMusicInfo( 1075158, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.Zento, new DawnsMusicInfo( 1075178, DawnsMusicRarity.Common ) );
m_Info.Add( MusicName.GwennoConversation, new DawnsMusicInfo( 1075131, DawnsMusicRarity.Uncommon ) );
m_Info.Add( MusicName.DreadHornArea, new DawnsMusicInfo( 1075181, DawnsMusicRarity.Uncommon ) );
m_Info.Add( MusicName.ElfCity, new DawnsMusicInfo( 1075182, DawnsMusicRarity.Uncommon ) );
m_Info.Add( MusicName.GoodEndGame, new DawnsMusicInfo( 1075132, DawnsMusicRarity.Uncommon ) );
m_Info.Add( MusicName.GoodVsEvil, new DawnsMusicInfo( 1075133, DawnsMusicRarity.Uncommon ) );
m_Info.Add( MusicName.GreatEarthSerpents, new DawnsMusicInfo( 1075134, DawnsMusicRarity.Uncommon ) );
m_Info.Add( MusicName.GrizzleDungeon, new DawnsMusicInfo( 1075186, DawnsMusicRarity.Uncommon ) );
m_Info.Add( MusicName.Humanoids_U9, new DawnsMusicInfo( 1075135, DawnsMusicRarity.Uncommon ) );
m_Info.Add( MusicName.MelisandesLair, new DawnsMusicInfo( 1075183, DawnsMusicRarity.Uncommon ) );
m_Info.Add( MusicName.MinocNegative, new DawnsMusicInfo( 1075136, DawnsMusicRarity.Uncommon ) );
m_Info.Add( MusicName.ParoxysmusLair, new DawnsMusicInfo( 1075184, DawnsMusicRarity.Uncommon ) );
m_Info.Add( MusicName.Paws, new DawnsMusicInfo( 1075137, DawnsMusicRarity.Uncommon ) );
m_Info.Add( MusicName.SelimsBar, new DawnsMusicInfo( 1075138, DawnsMusicRarity.Rare ) );
m_Info.Add( MusicName.SerpentIsleCombat_U7, new DawnsMusicInfo( 1075139, DawnsMusicRarity.Rare ) );
m_Info.Add( MusicName.ValoriaShips, new DawnsMusicInfo( 1075140, DawnsMusicRarity.Rare ) );
}
public static MusicName[] m_CommonTracks = new MusicName[]
{
MusicName.Samlethe, MusicName.Sailing, MusicName.Britain2, MusicName.Britain1,
MusicName.Bucsden, MusicName.Forest_a, MusicName.Cove, MusicName.Death,
MusicName.Dungeon9, MusicName.Dungeon2, MusicName.Cave01, MusicName.Combat3,
MusicName.Combat1, MusicName.Combat2, MusicName.Jhelom, MusicName.Linelle,
MusicName.LBCastle, MusicName.Minoc, MusicName.Moonglow, MusicName.Magincia,
MusicName.Nujelm, MusicName.BTCastle, MusicName.Tavern04, MusicName.Skarabra,
MusicName.Stones2, MusicName.Serpents, MusicName.Taiko, MusicName.Tavern01,
MusicName.Tavern02, MusicName.Tavern03, MusicName.TokunoDungeon, MusicName.Trinsic,
MusicName.OldUlt01, MusicName.Ocllo, MusicName.Vesper, MusicName.Victory,
MusicName.Mountn_a, MusicName.Wind, MusicName.Yew, MusicName.Zento
};
public static MusicName[] m_UncommonTracks = new MusicName[]
{
MusicName.GwennoConversation, MusicName.DreadHornArea, MusicName.ElfCity,
MusicName.GoodEndGame, MusicName.GoodVsEvil, MusicName.GreatEarthSerpents,
MusicName.GrizzleDungeon, MusicName.Humanoids_U9, MusicName.MelisandesLair,
MusicName.MinocNegative, MusicName.ParoxysmusLair, MusicName.Paws
};
public static MusicName[] m_RareTracks = new MusicName[]
{
MusicName.SelimsBar, MusicName.SerpentIsleCombat_U7, MusicName.ValoriaShips
};
public static DawnsMusicInfo GetInfo( MusicName name )
{
if ( m_Info.ContainsKey( name ) )
return m_Info[ name ];
return null;
}
public static MusicName RandomTrack( DawnsMusicRarity rarity )
{
MusicName[] list = null;
switch ( rarity )
{
default:
case DawnsMusicRarity.Common: list = m_CommonTracks; break;
case DawnsMusicRarity.Uncommon: list = m_UncommonTracks; break;
case DawnsMusicRarity.Rare: list = m_RareTracks; break;
}
return list[ Utility.Random( list.Length ) ];
}
}
}

View file

@ -0,0 +1,123 @@
using System;
using Server.Targeting;
namespace Server.Items
{
[Flipable( 0x1053, 0x1054 )]
public class DawnsMusicGear : Item
{
public static DawnsMusicGear RandomCommon
{
get { return new DawnsMusicGear( DawnsMusicBox.RandomTrack( DawnsMusicRarity.Common ) ); }
}
public static DawnsMusicGear RandomUncommon
{
get { return new DawnsMusicGear( DawnsMusicBox.RandomTrack( DawnsMusicRarity.Uncommon ) ); }
}
public static DawnsMusicGear RandomRare
{
get { return new DawnsMusicGear( DawnsMusicBox.RandomTrack( DawnsMusicRarity.Rare ) ); }
}
private MusicName m_Music;
[CommandProperty( AccessLevel.GameMaster )]
public MusicName Music
{
get { return m_Music; }
set { m_Music = value; }
}
[Constructable]
public DawnsMusicGear() : this( DawnsMusicBox.RandomTrack( DawnsMusicRarity.Common ) )
{
}
[Constructable]
public DawnsMusicGear( MusicName music ) : base( 0x1053 )
{
m_Music = music;
Weight = 1.0;
}
public DawnsMusicGear( Serial serial ) : base( serial )
{
}
public override void AddNameProperty( ObjectPropertyList list )
{
DawnsMusicInfo info = DawnsMusicBox.GetInfo( m_Music );
if ( info != null )
{
if ( info.Rarity == DawnsMusicRarity.Common )
list.Add( 1075204 ); // Gear for Dawn's Music Box (Common)
else if ( info.Rarity == DawnsMusicRarity.Uncommon )
list.Add( 1075205 ); // Gear for Dawn's Music Box (Uncommon)
else if ( info.Rarity == DawnsMusicRarity.Rare )
list.Add( 1075206 ); // Gear for Dawn's Music Box (Rare)
list.Add( info.Name );
}
else
base.AddNameProperty( list );
}
public override void OnDoubleClick( Mobile from )
{
from.Target = new InternalTarget( this );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
public class InternalTarget : Target
{
private DawnsMusicGear m_Gear;
public InternalTarget( DawnsMusicGear gear ) : base( 2, false, TargetFlags.None )
{
m_Gear = gear;
}
protected override void OnTarget( Mobile from, object targeted )
{
if ( m_Gear == null || m_Gear.Deleted )
return;
DawnsMusicBox box = targeted as DawnsMusicBox;
if ( box != null )
{
if ( !box.Tracks.Contains( m_Gear.Music ) )
{
box.Tracks.Add( m_Gear.Music );
box.InvalidateProperties();
m_Gear.Delete();
from.SendLocalizedMessage( 1071961 ); // This song has been added to the musicbox.
}
else
from.SendLocalizedMessage( 1071962 ); // This song track is already in the musicbox.
}
else
from.SendLocalizedMessage( 1071964 ); // Gears can only be put into a musicbox.
}
}
}
}

View file

@ -0,0 +1,34 @@
using System;
namespace Server.Items
{
public enum DawnsMusicRarity
{
Common,
Uncommon,
Rare,
}
public class DawnsMusicInfo
{
private int m_Name;
public int Name
{
get { return m_Name; }
}
private DawnsMusicRarity m_Rarity;
public DawnsMusicRarity Rarity
{
get { return m_Rarity; }
}
public DawnsMusicInfo( int name, DawnsMusicRarity rarity )
{
m_Name = name;
m_Rarity = rarity;
}
}
}

View file

@ -0,0 +1,53 @@
using System;
using Server;
namespace Server.Items
{
public class DupresShield : BaseShield, ITokunoDyable
{
public override int LabelNumber { get { return 1075196; } } // Dupres Shield
public override int BasePhysicalResistance { get { return 1; } }
public override int BaseFireResistance { get { return 0; } }
public override int BaseColdResistance { get { return 0; } }
public override int BasePoisonResistance { get { return 0; } }
public override int BaseEnergyResistance { get { return 1; } }
public override int InitMinHits { get { return 255; } }
public override int InitMaxHits { get { return 255; } }
public override int AosStrReq { get { return 50; } }
public override int ArmorBase { get { return 15; } }
[Constructable]
public DupresShield() : base( 0x2B01 )
{
LootType = LootType.Blessed;
Weight = 6.0;
Attributes.BonusHits = 5;
Attributes.RegenHits = 1;
SkillBonuses.SetValues( 0, SkillName.Parry, 5 );
}
public DupresShield( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); //version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,256 @@
using System;
using Server.Multis;
using System.Collections.Generic;
using Server.Gumps;
namespace Server.Items
{
public class EnhancedBandage : Bandage
{
public static int HealingBonus { get { return 10; } }
[Constructable]
public EnhancedBandage() : this( 1 )
{
}
[Constructable]
public EnhancedBandage( int amount ) : base( amount )
{
Hue = 0x8A5;
}
public EnhancedBandage( Serial serial ) : base( serial )
{
}
public override bool Dye( Mobile from, DyeTub sender )
{
return false;
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
list.Add( 1075216 ); // these bandages have been enhanced
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); //version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
[FlipableAttribute( 0x2AC0, 0x2AC3 )]
public class FountainOfLife : BaseAddonContainer
{
public override BaseAddonContainerDeed Deed
{
get { return new FountainOfLifeDeed( m_Charges ); }
}
public virtual TimeSpan RechargeTime { get { return TimeSpan.FromDays( 1 ); } }
public override int LabelNumber { get { return 1075197; } } // Fountain of Life
public override int DefaultGumpID { get { return 0x484; } }
public override int DefaultDropSound { get { return 66; } }
public override int DefaultMaxItems { get { return 125; } }
private int m_Charges;
[CommandProperty( AccessLevel.GameMaster )]
public int Charges
{
get { return m_Charges; }
set { m_Charges = Math.Min( value, 10 ); InvalidateProperties(); }
}
private Timer m_Timer;
[Constructable]
public FountainOfLife() : this( 10 )
{
}
[Constructable]
public FountainOfLife( int charges ) : base( 0x2AC0 )
{
m_Charges = charges;
m_Timer = Timer.DelayCall( RechargeTime, RechargeTime, new TimerCallback( Recharge ) );
}
public FountainOfLife( Serial serial ) : base( serial )
{
}
public override bool OnDragDrop( Mobile from, Item dropped )
{
if ( dropped is Bandage )
{
bool allow = base.OnDragDrop( from, dropped );
if ( allow )
Enhance();
return allow;
}
else
{
from.SendLocalizedMessage( 1075209 ); // Only bandages may be dropped into the fountain.
return false;
}
}
public override bool OnDragDropInto( Mobile from, Item item, Point3D p )
{
if ( item is Bandage )
{
bool allow = base.OnDragDropInto( from, item, p );
if ( allow )
Enhance();
return allow;
}
else
{
from.SendLocalizedMessage( 1075209 ); // Only bandages may be dropped into the fountain.
return false;
}
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
list.Add( 1075217, m_Charges.ToString() ); // ~1_val~ charges remaining
}
public override void OnDelete()
{
if ( m_Timer != null )
m_Timer.Stop();
base.OnDelete();
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); //version
writer.Write( m_Charges );
writer.Write( (DateTime) m_Timer.Next );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
m_Charges = reader.ReadInt();
DateTime next = reader.ReadDateTime();
if ( next < DateTime.Now )
m_Timer = Timer.DelayCall( TimeSpan.Zero, RechargeTime, new TimerCallback( Recharge ) );
else
m_Timer = Timer.DelayCall( next - DateTime.Now, RechargeTime, new TimerCallback( Recharge ) );
}
public void Recharge()
{
m_Charges = 10;
Enhance();
}
public void Enhance()
{
for ( int i = Items.Count - 1; i >= 0 && m_Charges > 0; i-- )
{
Bandage bandage = Items[ i ] as Bandage;
if ( bandage != null )
{
if ( bandage.Amount > m_Charges )
{
bandage.Amount -= m_Charges;
DropItem( new EnhancedBandage( m_Charges ) );
m_Charges = 0;
}
else
{
DropItem( new EnhancedBandage( bandage.Amount ) );
m_Charges -= bandage.Amount;
bandage.Delete();
}
InvalidateProperties();
}
}
}
}
public class FountainOfLifeDeed : BaseAddonContainerDeed
{
public override int LabelNumber { get { return 1075197; } } // Fountain of Life
public override BaseAddonContainer Addon { get { return new FountainOfLife( m_Charges ); } }
private int m_Charges;
[CommandProperty( AccessLevel.GameMaster )]
public int Charges
{
get { return m_Charges; }
set { m_Charges = Math.Min( value, 10 ); InvalidateProperties(); }
}
[Constructable]
public FountainOfLifeDeed() : this( 10 )
{
}
[Constructable]
public FountainOfLifeDeed( int charges ) : base()
{
LootType = LootType.Blessed;
m_Charges = charges;
}
public FountainOfLifeDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); //version
writer.Write( m_Charges );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
m_Charges = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,38 @@
using System;
namespace Server.Items
{
public class OssianGrimoire : NecromancerSpellbook, ITokunoDyable
{
public override int LabelNumber { get { return 1078148; } } // Ossian Grimoire
[Constructable]
public OssianGrimoire() : base()
{
LootType = LootType.Blessed;
SkillBonuses.SetValues( 0, SkillName.Necromancy, 10.0 );
Attributes.RegenMana = 1;
Attributes.CastSpeed = 1;
//Attributes.IncreasedKarmaLoss = 5;
}
public OssianGrimoire( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); //version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,40 @@
using System;
namespace Server.Items
{
public class QuiverOfInfinity : BaseQuiver, ITokunoDyable
{
public override int LabelNumber { get { return 1075201; } } // Quiver of Infinity
[Constructable]
public QuiverOfInfinity() : base( 0x2B02 )
{
LootType = LootType.Blessed;
Weight = 8.0;
WeightReduction = 30;
LowerAmmoCost = 20;
Attributes.DefendChance = 5;
Attributes.WeaponDamage = 10;
}
public QuiverOfInfinity( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); //version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,187 @@
using System;
using Server.Mobiles;
using Server.Spells.Ninjitsu;
namespace Server.Items
{
public enum TalismanForm
{
Ferret = 1031672,
Squirrel = 1031671,
CuSidhe = 1031670,
Reptalon = 1075202
}
public class BaseFormTalisman : Item, ITokunoDyable
{
public virtual TalismanForm Form { get { return TalismanForm.Squirrel; } }
public BaseFormTalisman() : base( 0x2F59 )
{
LootType = LootType.Blessed;
Layer = Layer.Talisman;
Weight = 1.0;
}
public BaseFormTalisman( Serial serial ) : base( serial )
{
}
public override void AddNameProperty( ObjectPropertyList list )
{
list.Add( 1075200, String.Format( "#{0}", (int) Form ) );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); //version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
public override void OnRemoved( object parent )
{
base.OnRemoved( parent );
if ( parent is Mobile )
{
Mobile m = (Mobile) parent;
AnimalForm.RemoveContext( m, true );
}
}
public static bool EntryEnabled( Mobile m, Type type )
{
if ( type == typeof( Squirrel ) )
return m.Talisman is SquirrelFormTalisman;
else if ( type == typeof( Ferret ) )
return m.Talisman is FerretFormTalisman;
else if ( type == typeof( CuSidhe ) )
return m.Talisman is CuSidheFormTalisman;
else if ( type == typeof( Reptalon ) )
return m.Talisman is ReptalonFormTalisman;
return true;
}
}
public class FerretFormTalisman : BaseFormTalisman
{
public override TalismanForm Form { get { return TalismanForm.Ferret; } }
[Constructable]
public FerretFormTalisman() : base()
{
}
public FerretFormTalisman( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); //version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SquirrelFormTalisman : BaseFormTalisman
{
public override TalismanForm Form { get { return TalismanForm.Squirrel; } }
[Constructable]
public SquirrelFormTalisman () : base()
{
}
public SquirrelFormTalisman ( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); //version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class CuSidheFormTalisman : BaseFormTalisman
{
public override TalismanForm Form { get { return TalismanForm.CuSidhe; } }
[Constructable]
public CuSidheFormTalisman() : base()
{
}
public CuSidheFormTalisman( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); //version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class ReptalonFormTalisman : BaseFormTalisman
{
public override TalismanForm Form { get { return TalismanForm.Reptalon; } }
[Constructable]
public ReptalonFormTalisman() : base()
{
}
public ReptalonFormTalisman( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); //version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,91 @@
using System;
namespace Server.Items
{
[Flipable( 0xC12, 0xC13 )]
public class BrokenArmoireComponent : AddonComponent
{
public override int LabelNumber { get { return 1076262; } } // Broken Armoire
public BrokenArmoireComponent() : base( 0xC12 )
{
}
public BrokenArmoireComponent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BrokenArmoireAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new BrokenArmoireDeed(); } }
[Constructable]
public BrokenArmoireAddon() : base()
{
AddComponent( new BrokenArmoireComponent(), 0, 0, 0 );
}
public BrokenArmoireAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BrokenArmoireDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new BrokenArmoireAddon(); } }
public override int LabelNumber { get { return 1076262; } } // Broken Armoire
[Constructable]
public BrokenArmoireDeed() : base()
{
LootType = LootType.Blessed;
}
public BrokenArmoireDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,134 @@
using System;
using Server;
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class BrokenBedAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new BrokenBedDeed(); } }
[Constructable]
public BrokenBedAddon( bool east ) : base()
{
if ( east ) // east
{
AddComponent( new LocalizedAddonComponent( 0x1895, 1076263 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x1894, 1076263 ), 0, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0x1897, 1076263 ), 1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x1896, 1076263 ), 1, 1, 0 );
}
else // south
{
AddComponent( new LocalizedAddonComponent( 0x1899, 1076263 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x1898, 1076263 ), 1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x189B, 1076263 ), 0, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0x189A, 1076263 ), 1, 1, 0 );
}
}
public BrokenBedAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BrokenBedDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new BrokenBedAddon( m_East ); } }
public override int LabelNumber { get { return 1076263; } } // Broken Bed
private bool m_East;
[Constructable]
public BrokenBedDeed() : base()
{
LootType = LootType.Blessed;
}
public BrokenBedDeed( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( IsChildOf( from.Backpack ) )
{
from.CloseGump( typeof( InternalGump ) );
from.SendGump( new InternalGump( this ) );
}
else
from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used.
}
private void SendTarget( Mobile m )
{
base.OnDoubleClick( m );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
private class InternalGump : Gump
{
private BrokenBedDeed m_Deed;
public InternalGump( BrokenBedDeed deed ) : base( 60, 36 )
{
m_Deed = deed;
AddPage( 0 );
AddBackground( 0, 0, 273, 324, 0x13BE );
AddImageTiled( 10, 10, 253, 20, 0xA40 );
AddImageTiled( 10, 40, 253, 244, 0xA40 );
AddImageTiled( 10, 294, 253, 20, 0xA40 );
AddAlphaRegion( 10, 10, 253, 304 );
AddButton( 10, 294, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 296, 450, 20, 1060051, 0x7FFF, false, false ); // CANCEL
AddHtmlLocalized( 14, 12, 273, 20, 1076749, 0x7FFF, false, false ); // Please select your broken bed position
AddPage( 1 );
AddButton( 19, 49, 0x845, 0x846, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 47, 213, 20, 1075386, 0x7FFF, false, false ); // South
AddButton( 19, 73, 0x845, 0x846, 2, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 71, 213, 20, 1075387, 0x7FFF, false, false ); // East
}
public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_Deed == null || m_Deed.Deleted || info.ButtonID == 0 )
return;
m_Deed.m_East = ( info.ButtonID != 1 );
m_Deed.SendTarget( sender.Mobile );
}
}
}
}

View file

@ -0,0 +1,91 @@
using System;
namespace Server.Items
{
[Flipable( 0xC14, 0xC15 )]
public class BrokenBookcaseComponent : AddonComponent
{
public override int LabelNumber { get { return 1076258; } } // Broken Bookcase
public BrokenBookcaseComponent() : base( 0xC14 )
{
}
public BrokenBookcaseComponent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BrokenBookcaseAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new BrokenBookcaseDeed(); } }
[Constructable]
public BrokenBookcaseAddon() : base()
{
AddComponent( new BrokenBookcaseComponent(), 0, 0, 0 );
}
public BrokenBookcaseAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BrokenBookcaseDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new BrokenBookcaseAddon(); } }
public override int LabelNumber { get { return 1076258; } } // Broken Bookcase
[Constructable]
public BrokenBookcaseDeed() : base()
{
LootType = LootType.Blessed;
}
public BrokenBookcaseDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,91 @@
using System;
namespace Server.Items
{
[Flipable( 0xC24, 0xC25 )]
public class BrokenChestOfDrawersComponent : AddonComponent
{
public override int LabelNumber { get { return 1076261; } } // Broken Chest of Drawers
public BrokenChestOfDrawersComponent() : base( 0xC24 )
{
}
public BrokenChestOfDrawersComponent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BrokenChestOfDrawersAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new BrokenChestOfDrawersDeed(); } }
[Constructable]
public BrokenChestOfDrawersAddon() : base()
{
AddComponent( new BrokenChestOfDrawersComponent(), 0, 0, 0 );
}
public BrokenChestOfDrawersAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BrokenChestOfDrawersDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new BrokenChestOfDrawersAddon(); } }
public override int LabelNumber { get { return 1076261; } } // Broken Chest of Drawers
[Constructable]
public BrokenChestOfDrawersDeed() : base()
{
LootType = LootType.Blessed;
}
public BrokenChestOfDrawersDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,91 @@
using System;
namespace Server.Items
{
[Flipable( 0xC17, 0xC18 )]
public class BrokenCoveredChairComponent : AddonComponent
{
public override int LabelNumber { get { return 1076257; } } // Broken Covered Chair
public BrokenCoveredChairComponent() : base( 0xC17 )
{
}
public BrokenCoveredChairComponent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BrokenCoveredChairAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new BrokenCoveredChairDeed(); } }
[Constructable]
public BrokenCoveredChairAddon() : base()
{
AddComponent( new BrokenCoveredChairComponent(), 0, 0, 0 );
}
public BrokenCoveredChairAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BrokenCoveredChairDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new BrokenCoveredChairAddon(); } }
public override int LabelNumber { get { return 1076257; } } // Broken Covered Chair
[Constructable]
public BrokenCoveredChairDeed() : base()
{
LootType = LootType.Blessed;
}
public BrokenCoveredChairDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,91 @@
using System;
namespace Server.Items
{
[Flipable( 0xC17, 0xC17 )]
public class BrokenFallenChairComponent : AddonComponent
{
public override int LabelNumber { get { return 1076264; } } // Broken Fallen Chair
public BrokenFallenChairComponent() : base( 0xC17 )
{
}
public BrokenFallenChairComponent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BrokenFallenChairAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new BrokenFallenChairDeed(); } }
[Constructable]
public BrokenFallenChairAddon() : base()
{
AddComponent( new BrokenFallenChairComponent(), 0, 0, 0 );
}
public BrokenFallenChairAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BrokenFallenChairDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new BrokenFallenChairAddon(); } }
public override int LabelNumber { get { return 1076264; } } // Broken Fallen Chair
[Constructable]
public BrokenFallenChairDeed() : base()
{
LootType = LootType.Blessed;
}
public BrokenFallenChairDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,130 @@
using System;
using Server;
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class BrokenVanityAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new BrokenVanityDeed(); } }
[Constructable]
public BrokenVanityAddon( bool east ) : base()
{
if ( east ) // east
{
AddComponent( new LocalizedAddonComponent( 0xC20, 1076260 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xC21, 1076260 ), 0, -1, 0 );
}
else // south
{
AddComponent( new LocalizedAddonComponent( 0xC22, 1076260 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xC23, 1076260 ), -1, 0, 0 );
}
}
public BrokenVanityAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BrokenVanityDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new BrokenVanityAddon( m_East ); } }
public override int LabelNumber { get { return 1076260; } } // Broken Vanity
private bool m_East;
[Constructable]
public BrokenVanityDeed() : base()
{
LootType = LootType.Blessed;
}
public BrokenVanityDeed( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( IsChildOf( from.Backpack ) )
{
from.CloseGump( typeof( InternalGump ) );
from.SendGump( new InternalGump( this ) );
}
else
from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used.
}
private void SendTarget( Mobile m )
{
base.OnDoubleClick( m );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
private class InternalGump : Gump
{
private BrokenVanityDeed m_Deed;
public InternalGump( BrokenVanityDeed deed ) : base( 60, 63 )
{
m_Deed = deed;
AddPage( 0 );
AddBackground( 0, 0, 273, 324, 0x13BE );
AddImageTiled( 10, 10, 253, 20, 0xA40 );
AddImageTiled( 10, 40, 253, 244, 0xA40 );
AddImageTiled( 10, 294, 253, 20, 0xA40 );
AddAlphaRegion( 10, 10, 253, 304 );
AddButton( 10, 294, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 296, 450, 20, 1060051, 0x7FFF, false, false ); // CANCEL
AddHtmlLocalized( 14, 12, 273, 20, 1076747, 0x7FFF, false, false ); // Please select your broken vanity position
AddPage( 1 );
AddButton( 19, 49, 0x845, 0x846, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 47, 213, 20, 1075386, 0x7FFF, false, false ); // South
AddButton( 19, 73, 0x845, 0x846, 2, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 71, 213, 20, 1075387, 0x7FFF, false, false ); // East
}
public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_Deed == null || m_Deed.Deleted || info.ButtonID == 0 )
return;
m_Deed.m_East = ( info.ButtonID != 1 );
m_Deed.SendTarget( sender.Mobile );
}
}
}
}

View file

@ -0,0 +1,91 @@
using System;
namespace Server.Items
{
[Flipable( 0xC1B, 0xC1C, 0xC1E, 0xC1D )]
public class StandingBrokenChairComponent : AddonComponent
{
public override int LabelNumber { get { return 1076259; } } // Standing Broken Chair
public StandingBrokenChairComponent() : base( 0xC1B )
{
}
public StandingBrokenChairComponent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class StandingBrokenChairAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new StandingBrokenChairDeed(); } }
[Constructable]
public StandingBrokenChairAddon() : base()
{
AddComponent( new StandingBrokenChairComponent(), 0, 0, 0 );
}
public StandingBrokenChairAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class StandingBrokenChairDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new StandingBrokenChairAddon(); } }
public override int LabelNumber { get { return 1076259; } } // Standing Broken Chair
[Constructable]
public StandingBrokenChairDeed() : base()
{
LootType = LootType.Blessed;
}
public StandingBrokenChairDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,188 @@
using System;
using Server;
using Server.Network;
namespace Server.Items
{
[Flipable( 0x2A5D, 0x2A61 )]
public class AwesomeDisturbingPortraitComponent : AddonComponent
{
public override int LabelNumber { get { return 1074479; } } // Disturbing portrait
public bool FacingSouth { get { return ItemID < 0x2A61; } }
private InternalTimer m_Timer;
public AwesomeDisturbingPortraitComponent() : base( 0x2A5D )
{
m_Timer = new InternalTimer( this, TimeSpan.FromSeconds( 1 ) );
m_Timer.Start();
}
public AwesomeDisturbingPortraitComponent( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( Utility.InRange( Location, from.Location, 2 ) )
{
int hours;
int minutes;
Clock.GetTime( Map, X, Y, out hours, out minutes );
if ( hours < 4 || hours > 20 )
Effects.PlaySound( Location, Map, 0x569 );
UpdateImage();
}
else
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
if ( m_Timer != null && m_Timer.Running )
m_Timer.Stop();
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
m_Timer = new InternalTimer( this, TimeSpan.Zero );
m_Timer.Start();
}
private void UpdateImage()
{
int hours;
int minutes;
Clock.GetTime( Map, X, Y, out hours, out minutes );
if ( FacingSouth )
{
if ( hours < 4 )
ItemID = 0x2A60;
else if ( hours < 6 )
ItemID = 0x2A5F;
else if ( hours < 8 )
ItemID = 0x2A5E;
else if ( hours < 16 )
ItemID = 0x2A5D;
else if ( hours < 18 )
ItemID = 0x2A5E;
else if ( hours < 20 )
ItemID = 0x2A5F;
else
ItemID = 0x2A60;
}
else
{
if ( hours < 4 )
ItemID = 0x2A64;
else if ( hours < 6 )
ItemID = 0x2A63;
else if ( hours < 8 )
ItemID = 0x2A62;
else if ( hours < 16 )
ItemID = 0x2A61;
else if ( hours < 18 )
ItemID = 0x2A62;
else if ( hours < 20 )
ItemID = 0x2A63;
else
ItemID = 0x2A64;
}
}
private class InternalTimer : Timer
{
private AwesomeDisturbingPortraitComponent m_Component;
public InternalTimer( AwesomeDisturbingPortraitComponent c, TimeSpan delay ) : base( delay, TimeSpan.FromMinutes( 10 ) )
{
m_Component = c;
Priority = TimerPriority.OneMinute;
}
protected override void OnTick()
{
if ( m_Component != null && !m_Component.Deleted )
m_Component.UpdateImage();
}
}
}
public class AwesomeDisturbingPortraitAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new AwesomeDisturbingPortraitDeed(); } }
[Constructable]
public AwesomeDisturbingPortraitAddon() : base()
{
AddComponent( new AwesomeDisturbingPortraitComponent(), 0, 0, 0 );
}
public AwesomeDisturbingPortraitAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class AwesomeDisturbingPortraitDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new AwesomeDisturbingPortraitAddon(); } }
public override int LabelNumber { get { return 1074479; } } // Disturbing portrait
[Constructable]
public AwesomeDisturbingPortraitDeed() : base()
{
LootType = LootType.Blessed;
}
public AwesomeDisturbingPortraitDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,180 @@
using System;
namespace Server.Items
{
public class BedOfNailsComponent : AddonComponent
{
public override int LabelNumber { get { return 1074801; } } // Bed of Nails
public BedOfNailsComponent( int itemID ) : base( itemID )
{
}
public BedOfNailsComponent( Serial serial ) : base( serial )
{
}
public override bool OnMoveOver( Mobile m )
{
bool allow = base.OnMoveOver( m );
if ( allow && Addon is BedOfNailsAddon )
( (BedOfNailsAddon) Addon ).OnMoveOver( m );
return allow;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
[FlipableAddon( Direction.South, Direction.East )]
public class BedOfNailsAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new BedOfNailsDeed(); } }
private InternalTimer m_Timer;
[Constructable]
public BedOfNailsAddon() : base()
{
Direction = Direction.South;
AddComponent( new BedOfNailsComponent( 0x2A81 ), 0, 0, 0 );
AddComponent( new BedOfNailsComponent( 0x2A82 ), 0, -1, 0 );
}
public BedOfNailsAddon( Serial serial ) : base( serial )
{
}
public override bool OnMoveOver( Mobile m )
{
if ( m.Alive && ( m.AccessLevel == AccessLevel.Player || !m.Hidden ) )
{
if ( m.Player )
{
if ( m.Female )
Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x53B, 0x53D ) );
else
Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x53E, 0x540 ) );
}
if ( m_Timer == null || !m_Timer.Running )
( m_Timer = new InternalTimer( m ) ).Start();
}
return true;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
public virtual void Flip( Mobile from, Direction direction )
{
switch ( direction )
{
case Direction.East:
AddComponent( new BedOfNailsComponent( 0x2A89 ), 0, 0, 0 );
AddComponent( new BedOfNailsComponent( 0x2A8A ), -1, 0, 0 );
break;
case Direction.South:
AddComponent( new BedOfNailsComponent( 0x2A81 ), 0, 0, 0 );
AddComponent( new BedOfNailsComponent( 0x2A82 ), 0, -1, 0 );
break;
}
}
private class InternalTimer : Timer
{
private Mobile m_Mobile;
private Point3D m_Location;
public InternalTimer( Mobile m ) : base( TimeSpan.Zero, TimeSpan.FromSeconds( 1 ), 5 )
{
m_Mobile = m;
m_Location = Point3D.Zero;
}
protected override void OnTick()
{
if ( m_Location != m_Mobile.Location )
{
int amount = Utility.RandomMinMax( 0, 7 );
for ( int i = 0; i < amount; i++ )
{
int x = m_Mobile.X + Utility.RandomMinMax( -1, 1 );
int y = m_Mobile.Y + Utility.RandomMinMax( -1, 1 );
int z = m_Mobile.Z;
if ( !m_Mobile.Map.CanFit( x, y, z, 1, false, false, true ) )
{
z = m_Mobile.Map.GetAverageZ( x, y );
if ( !m_Mobile.Map.CanFit( x, y, z, 1, false, false, true ) )
continue;
}
Blood blood = new Blood( Utility.RandomMinMax( 0x122C, 0x122F ) );
blood.MoveToWorld( new Point3D( x, y, z ), m_Mobile.Map );
}
m_Location = m_Mobile.Location;
}
}
}
}
public class BedOfNailsDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new BedOfNailsAddon(); } }
public override int LabelNumber { get { return 1074801; } } // Bed of Nails
[Constructable]
public BedOfNailsDeed() : base()
{
LootType = LootType.Blessed;
}
public BedOfNailsDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,119 @@
using System;
namespace Server.Items
{
public class BoneCouchComponent : AddonComponent
{
public override int LabelNumber { get { return 1074477; } } // Bone couch
public BoneCouchComponent( int itemID ) : base( itemID )
{
}
public BoneCouchComponent( Serial serial ) : base( serial )
{
}
public override bool OnMoveOver( Mobile m )
{
bool allow = base.OnMoveOver( m );
if ( allow && m.Alive && m.Player && ( m.AccessLevel == AccessLevel.Player || !m.Hidden ) )
Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x547, 0x54A ) );
return allow;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
[FlipableAddon( Direction.South, Direction.East )]
public class BoneCouchAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new BoneCouchDeed(); } }
[Constructable]
public BoneCouchAddon() : base()
{
Direction = Direction.South;
AddComponent( new BoneCouchComponent( 0x2A5A ), 0, 0, 0 );
AddComponent( new BoneCouchComponent( 0x2A5B ), -1, 0, 0 );
}
public BoneCouchAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
public virtual void Flip( Mobile from, Direction direction )
{
switch ( direction )
{
case Direction.East:
AddComponent( new BoneCouchComponent( 0x2A80 ), 0, 0, 0 );
AddComponent( new BoneCouchComponent( 0x2A7F ), 0, 1, 0 );
break;
case Direction.South:
AddComponent( new BoneCouchComponent( 0x2A5A ), 0, 0, 0 );
AddComponent( new BoneCouchComponent( 0x2A5B ), -1, 0, 0 );
break;
}
}
}
public class BoneCouchDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new BoneCouchAddon(); } }
public override int LabelNumber { get { return 1074477; } } // Bone couch
[Constructable]
public BoneCouchDeed() : base()
{
LootType = LootType.Blessed;
}
public BoneCouchDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,63 @@
using System;
namespace Server.Items
{
public class BoneTableAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new BoneTableDeed(); } }
[Constructable]
public BoneTableAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0x2A5C, 1074478 ), 0, 0, 0 );
}
public BoneTableAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BoneTableDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new BoneTableAddon(); } }
public override int LabelNumber { get { return 1074478; } } // Bone table
[Constructable]
public BoneTableDeed() : base()
{
LootType = LootType.Blessed;
}
public BoneTableDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,101 @@
using System;
namespace Server.Items
{
[Flipable( 0x2A58, 0x2A59 )]
public class BoneThroneComponent : AddonComponent
{
public override int LabelNumber { get { return 1074476; } } // Bone throne
public BoneThroneComponent() : base( 0x2A58 )
{
}
public BoneThroneComponent( Serial serial ) : base( serial )
{
}
public override bool OnMoveOver( Mobile m )
{
bool allow = base.OnMoveOver( m );
if ( allow && m.Alive && m.Player && ( m.AccessLevel == AccessLevel.Player || !m.Hidden ) )
Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x54B, 0x54D ) );
return allow;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BoneThroneAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new BoneThroneDeed(); } }
[Constructable]
public BoneThroneAddon() : base()
{
AddComponent( new BoneThroneComponent(), 0, 0, 0 );
}
public BoneThroneAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BoneThroneDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new BoneThroneAddon(); } }
public override int LabelNumber { get { return 1074476; } } // Bone throne
[Constructable]
public BoneThroneDeed() : base()
{
LootType = LootType.Blessed;
}
public BoneThroneDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,129 @@
using System;
using Server;
using Server.Network;
namespace Server.Items
{
[Flipable( 0x2A69, 0x2A6D )]
public class CreepyPortraitComponent : AddonComponent
{
public override int LabelNumber { get { return 1074481; } } // Creepy portrait
public override bool HandlesOnMovement { get { return true; } }
public CreepyPortraitComponent() : base( 0x2A69 )
{
}
public CreepyPortraitComponent( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( Utility.InRange( Location, from.Location, 2 ) )
Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x565, 0x566 ) );
else
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
public override void OnMovement( Mobile m, Point3D old )
{
if ( m.Alive && m.Player && ( m.AccessLevel == AccessLevel.Player || !m.Hidden ) )
{
if ( !Utility.InRange( old, Location, 2 ) && Utility.InRange( m.Location, Location, 2 ) )
{
if ( ItemID == 0x2A69 || ItemID == 0x2A6D )
Timer.DelayCall( TimeSpan.FromSeconds( 0.5 ), TimeSpan.FromSeconds( 0.5 ), 3, new TimerCallback( Up ) );
}
else if ( Utility.InRange( old, Location, 2 ) && !Utility.InRange( m.Location, Location, 2 ) )
{
if ( ItemID == 0x2A6C || ItemID == 0x2A70 )
Timer.DelayCall( TimeSpan.FromSeconds( 0.5 ), TimeSpan.FromSeconds( 0.5 ), 3, new TimerCallback( Down ) );
}
}
}
private void Up()
{
ItemID += 1;
}
private void Down()
{
ItemID -= 1;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class CreepyPortraitAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new CreepyPortraitDeed(); } }
[Constructable]
public CreepyPortraitAddon() : base()
{
AddComponent( new CreepyPortraitComponent(), 0, 0, 0 );
}
public CreepyPortraitAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class CreepyPortraitDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new CreepyPortraitAddon(); } }
public override int LabelNumber { get { return 1074481; } } // Creepy portrait
[Constructable]
public CreepyPortraitDeed() : base()
{
LootType = LootType.Blessed;
}
public CreepyPortraitDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,122 @@
using System;
using Server;
using Server.Network;
namespace Server.Items
{
[Flipable( 0x2A5D, 0x2A61 )]
public class DisturbingPortraitComponent : AddonComponent
{
public override int LabelNumber { get { return 1074479; } } // Disturbing portrait
private Timer m_Timer;
public DisturbingPortraitComponent() : base( 0x2A5D )
{
m_Timer = Timer.DelayCall( TimeSpan.FromMinutes( 3 ), TimeSpan.FromMinutes( 3 ), new TimerCallback( Change ) );
}
public DisturbingPortraitComponent( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( Utility.InRange( Location, from.Location, 2 ) )
Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x567, 0x568 ) );
else
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
if ( m_Timer != null && m_Timer.Running )
m_Timer.Stop();
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
m_Timer = Timer.DelayCall( TimeSpan.FromMinutes( 3 ), TimeSpan.FromMinutes( 3 ), new TimerCallback( Change ) );
}
private void Change()
{
if ( ItemID < 0x2A61 )
ItemID = Utility.RandomMinMax( 0x2A5D, 0x2A60 );
else
ItemID = Utility.RandomMinMax( 0x2A61, 0x2A64 );
}
}
public class DisturbingPortraitAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new DisturbingPortraitDeed(); } }
[Constructable]
public DisturbingPortraitAddon() : base()
{
AddComponent( new DisturbingPortraitComponent(), 0, 0, 0 );
}
public DisturbingPortraitAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class DisturbingPortraitDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new DisturbingPortraitAddon(); } }
public override int LabelNumber { get { return 1074479; } } // Disturbing portrait
[Constructable]
public DisturbingPortraitDeed() : base()
{
LootType = LootType.Blessed;
}
public DisturbingPortraitDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,114 @@
using System;
namespace Server.Items
{
[Flipable( 0x2A7B, 0x2A7D )]
public class HaunterMirrorComponent : AddonComponent
{
public override int LabelNumber { get { return 1074800; } } // Haunted Mirror
public override bool HandlesOnMovement { get { return true; } }
public HaunterMirrorComponent() : base( 0x2A7B )
{
}
public HaunterMirrorComponent( Serial serial ) : base( serial )
{
}
public override void OnMovement( Mobile m, Point3D old )
{
base.OnMovement( m, old );
if ( m.Alive && m.Player && ( m.AccessLevel == AccessLevel.Player || !m.Hidden ) )
{
if ( !Utility.InRange( old, Location, 2 ) && Utility.InRange( m.Location, Location, 2 ) )
{
if ( ItemID == 0x2A7B || ItemID == 0x2A7D )
{
Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x551, 0x553 ) );
ItemID += 1;
}
}
else if ( Utility.InRange( old, Location, 2 ) && !Utility.InRange( m.Location, Location, 2 ) )
{
if ( ItemID == 0x2A7C || ItemID == 0x2A7E )
ItemID -= 1;
}
}
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class HaunterMirrorAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new HaunterMirrorDeed(); } }
[Constructable]
public HaunterMirrorAddon() : base()
{
AddComponent( new HaunterMirrorComponent(), 0, 0, 0 );
}
public HaunterMirrorAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class HaunterMirrorDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new HaunterMirrorAddon(); } }
public override int LabelNumber { get { return 1074800; } } // Haunted Mirror
[Constructable]
public HaunterMirrorDeed() : base()
{
LootType = LootType.Blessed;
}
public HaunterMirrorDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,100 @@
using System;
using Server;
using Server.Network;
namespace Server.Items
{
[Flipable( 0x2A75, 0x2A76 )]
public class MountedPixieBlueComponent : AddonComponent
{
public override int LabelNumber { get { return 1074482; } } // Mounted pixie
public MountedPixieBlueComponent() : base( 0x2A75 )
{
}
public MountedPixieBlueComponent( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( Utility.InRange( Location, from.Location, 2 ) )
Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x55C, 0x55E ) );
else
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class MountedPixieBlueAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new MountedPixieBlueDeed(); } }
public MountedPixieBlueAddon() : base()
{
AddComponent( new MountedPixieBlueComponent(), 0, 0, 0 );
}
public MountedPixieBlueAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class MountedPixieBlueDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new MountedPixieBlueAddon(); } }
public override int LabelNumber { get { return 1074482; } } // Mounted pixie
[Constructable]
public MountedPixieBlueDeed() : base()
{
LootType = LootType.Blessed;
}
public MountedPixieBlueDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,100 @@
using System;
using Server;
using Server.Network;
namespace Server.Items
{
[Flipable( 0x2A71, 0x2A72 )]
public class MountedPixieGreenComponent : AddonComponent
{
public override int LabelNumber { get { return 1074482; } } // Mounted pixie
public MountedPixieGreenComponent() : base( 0x2A71 )
{
}
public MountedPixieGreenComponent( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( Utility.InRange( Location, from.Location, 2 ) )
Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x554, 0x557 ) );
else
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class MountedPixieGreenAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new MountedPixieGreenDeed(); } }
public MountedPixieGreenAddon() : base()
{
AddComponent( new MountedPixieGreenComponent(), 0, 0, 0 );
}
public MountedPixieGreenAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class MountedPixieGreenDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new MountedPixieGreenAddon(); } }
public override int LabelNumber { get { return 1074482; } } // Mounted pixie
[Constructable]
public MountedPixieGreenDeed() : base()
{
LootType = LootType.Blessed;
}
public MountedPixieGreenDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,100 @@
using System;
using Server;
using Server.Network;
namespace Server.Items
{
[Flipable( 0x2A77, 0x2A78 )]
public class MountedPixieLimeComponent : AddonComponent
{
public override int LabelNumber { get { return 1074482; } } // Mounted pixie
public MountedPixieLimeComponent() : base( 0x2A77 )
{
}
public MountedPixieLimeComponent( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( Utility.InRange( Location, from.Location, 2 ) )
Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x55F, 0x561 ) );
else
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class MountedPixieLimeAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new MountedPixieLimeDeed(); } }
public MountedPixieLimeAddon() : base()
{
AddComponent( new MountedPixieLimeComponent(), 0, 0, 0 );
}
public MountedPixieLimeAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class MountedPixieLimeDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new MountedPixieLimeAddon(); } }
public override int LabelNumber { get { return 1074482; } } // Mounted pixie
[Constructable]
public MountedPixieLimeDeed() : base()
{
LootType = LootType.Blessed;
}
public MountedPixieLimeDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,100 @@
using System;
using Server;
using Server.Network;
namespace Server.Items
{
[Flipable( 0x2A73, 0x2A74 )]
public class MountedPixieOrangeComponent : AddonComponent
{
public override int LabelNumber { get { return 1074482; } } // Mounted pixie
public MountedPixieOrangeComponent() : base( 0x2A73 )
{
}
public MountedPixieOrangeComponent( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( Utility.InRange( Location, from.Location, 2 ) )
Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x558, 0x55B ) );
else
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class MountedPixieOrangeAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new MountedPixieOrangeDeed(); } }
public MountedPixieOrangeAddon() : base()
{
AddComponent( new MountedPixieOrangeComponent(), 0, 0, 0 );
}
public MountedPixieOrangeAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class MountedPixieOrangeDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new MountedPixieOrangeAddon(); } }
public override int LabelNumber { get { return 1074482; } } // Mounted pixie
[Constructable]
public MountedPixieOrangeDeed() : base()
{
LootType = LootType.Blessed;
}
public MountedPixieOrangeDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,100 @@
using System;
using Server;
using Server.Network;
namespace Server.Items
{
[Flipable( 0x2A79, 0x2A7A )]
public class MountedPixieWhiteComponent : AddonComponent
{
public override int LabelNumber { get { return 1074482; } } // Mounted pixie
public MountedPixieWhiteComponent() : base( 0x2A79 )
{
}
public MountedPixieWhiteComponent( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( Utility.InRange( Location, from.Location, 2 ) )
Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x562, 0x564 ) );
else
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class MountedPixieWhiteAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new MountedPixieWhiteDeed(); } }
public MountedPixieWhiteAddon() : base()
{
AddComponent( new MountedPixieWhiteComponent(), 0, 0, 0 );
}
public MountedPixieWhiteAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class MountedPixieWhiteDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new MountedPixieWhiteAddon(); } }
public override int LabelNumber { get { return 1074482; } } // Mounted pixie
[Constructable]
public MountedPixieWhiteDeed() : base()
{
LootType = LootType.Blessed;
}
public MountedPixieWhiteDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,164 @@
using System;
namespace Server.Items
{
[FlipableAddon( Direction.South, Direction.East )]
public class SacrificialAltarAddon : BaseAddonContainer
{
public override BaseAddonContainerDeed Deed { get { return new SacrificialAltarDeed(); } }
public override int LabelNumber { get { return 1074818; } } // Sacrificial Altar
public override int DefaultMaxWeight { get { return 0; } }
public override int DefaultGumpID { get { return 0x107; } }
public override int DefaultDropSound { get { return 0x42; } }
private Timer m_Timer;
[Constructable]
public SacrificialAltarAddon() : base( 0x2A9B )
{
Direction = Direction.South;
AddComponent( new LocalizedContainerComponent( 0x2A9A, 1074818 ), 1, 0, 0 );
}
public SacrificialAltarAddon( Serial serial ) : base( serial )
{
}
public override bool OnDragDrop( Mobile from, Item dropped )
{
if ( !base.OnDragDrop( from, dropped ) )
return false;
if ( TotalItems >= 50 )
{
SendLocalizedMessageTo( from, 501478 ); // The trash is full! Emptying!
Empty();
}
else
{
SendLocalizedMessageTo( from, 1010442 ); // The item will be deleted in three minutes
if ( m_Timer != null )
m_Timer.Stop();
m_Timer = Timer.DelayCall( TimeSpan.FromMinutes( 3 ), new TimerCallback( Empty ) );
}
return true;
}
public override bool OnDragDropInto( Mobile from, Item item, Point3D p )
{
if ( !base.OnDragDropInto( from, item, p ) )
return false;
if ( TotalItems >= 50 )
{
SendLocalizedMessageTo( from, 501478 ); // The trash is full! Emptying!
Empty();
}
else
{
SendLocalizedMessageTo( from, 1010442 ); // The item will be deleted in three minutes
if ( m_Timer != null )
m_Timer.Stop();
m_Timer = Timer.DelayCall( TimeSpan.FromMinutes( 3 ), new TimerCallback( Empty ) );
}
return true;
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
if ( Items.Count > 0 )
m_Timer = Timer.DelayCall( TimeSpan.FromMinutes( 3 ), new TimerCallback( Empty ) );
}
public virtual void Flip( Mobile from, Direction direction )
{
switch ( direction )
{
case Direction.East:
ItemID = 0x2A9C;
AddComponent( new LocalizedContainerComponent( 0x2A9D, 1074818 ), 0, -1, 0 );
break;
case Direction.South:
ItemID = 0x2A9B;
AddComponent( new LocalizedContainerComponent( 0x2A9A, 1074818 ), 1, 0, 0 );
break;
}
}
public virtual void Empty()
{
if ( Items.Count > 0 )
{
Point3D location = Location;
location.Z += 10;
Effects.SendLocationEffect( location, Map, 0x3709, 10, 10, 0x356, 0 );
Effects.PlaySound( location, Map, 0x32E );
if ( Items.Count > 0 )
{
for ( int i = Items.Count - 1; i >= 0; --i )
{
if ( i >= Items.Count )
continue;
Items[ i ].Delete();
}
}
}
if ( m_Timer != null )
m_Timer.Stop();
m_Timer = null;
}
}
public class SacrificialAltarDeed : BaseAddonContainerDeed
{
public override BaseAddonContainer Addon { get { return new SacrificialAltarAddon(); } }
public override int LabelNumber { get { return 1074818; } } // Sacrificial Altar
[Constructable]
public SacrificialAltarDeed() : base()
{
LootType = LootType.Blessed;
}
public SacrificialAltarDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,126 @@
using System;
using Server;
using Server.Network;
namespace Server.Items
{
[Flipable( 0x2A65, 0x2A67 )]
public class UnsettlingPortraitComponent : AddonComponent
{
public override int LabelNumber { get { return 1074480; } } // Unsettling portrait
private Timer m_Timer;
public UnsettlingPortraitComponent() : base( 0x2A65 )
{
m_Timer = Timer.DelayCall( TimeSpan.FromMinutes( 3 ), TimeSpan.FromMinutes( 3 ), new TimerCallback( ChangeDirection ) );
}
public UnsettlingPortraitComponent( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( Utility.InRange( Location, from.Location, 2 ) )
Effects.PlaySound( Location, Map, Utility.RandomMinMax( 0x567, 0x568 ) );
else
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
if ( m_Timer != null )
m_Timer.Stop();
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
m_Timer = Timer.DelayCall( TimeSpan.FromMinutes( 3 ), TimeSpan.FromMinutes( 3 ), new TimerCallback( ChangeDirection ) );
}
private void ChangeDirection()
{
if ( ItemID == 0x2A65 )
ItemID += 1;
else if ( ItemID == 0x2A66 )
ItemID -= 1;
else if ( ItemID == 0x2A67 )
ItemID += 1;
else if ( ItemID == 0x2A68 )
ItemID -= 1;
}
}
public class UnsettlingPortraitAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new UnsettlingPortraitDeed(); } }
[Constructable]
public UnsettlingPortraitAddon() : base()
{
AddComponent( new UnsettlingPortraitComponent(), 0, 0, 0 );
}
public UnsettlingPortraitAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class UnsettlingPortraitDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new UnsettlingPortraitAddon(); } }
public override int LabelNumber { get { return 1074480; } } // Unsettling portrait
[Constructable]
public UnsettlingPortraitDeed() : base()
{
LootType = LootType.Blessed;
}
public UnsettlingPortraitDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,63 @@
using System;
namespace Server.Items
{
public class AppleTrunkAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new AppleTrunkDeed(); } }
[Constructable]
public AppleTrunkAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0xD98, 1076785 ), 0, 0, 0 );
}
public AppleTrunkAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class AppleTrunkDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new AppleTrunkAddon(); } }
public override int LabelNumber { get { return 1076785; } } // Apple Trunk
[Constructable]
public AppleTrunkDeed() : base()
{
LootType = LootType.Blessed;
}
public AppleTrunkDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,71 @@
using System;
namespace Server.Items
{
public class BlueDecorativeRugAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new BlueDecorativeRugDeed(); } }
[Constructable]
public BlueDecorativeRugAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0xAD2, 1076589 ), 1, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAD3, 1076589 ), -1, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAD4, 1076589 ), -1, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAD5, 1076589 ), 1, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAD6, 1076589 ), -1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xAD7, 1076589 ), 0, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAD8, 1076589 ), 1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xAD9, 1076589 ), 0, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAD1, 1076589 ), 0, 0, 0 );
}
public BlueDecorativeRugAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BlueDecorativeRugDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new BlueDecorativeRugAddon(); } }
public override int LabelNumber { get { return 1076589; } } // Blue decorative rug
[Constructable]
public BlueDecorativeRugDeed() : base()
{
LootType = LootType.Blessed;
}
public BlueDecorativeRugDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,71 @@
using System;
namespace Server.Items
{
public class BlueFancyRugAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new BlueFancyRugDeed(); } }
[Constructable]
public BlueFancyRugAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0xAC2, 1076273 ), 1, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAC3, 1076273 ), -1, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAC4, 1076273 ), -1, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAC5, 1076273 ), 1, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAF6, 1076273 ), -1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xAF7, 1076273 ), 0, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAF8, 1076273 ), 1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xAF9, 1076273 ), 0, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAFA, 1076273 ), 0, 0, 0 );
}
public BlueFancyRugAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BlueFancyRugDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new BlueFancyRugAddon(); } }
public override int LabelNumber { get { return 1076273; } } // Blue fancy rug
[Constructable]
public BlueFancyRugDeed() : base()
{
LootType = LootType.Blessed;
}
public BlueFancyRugDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,71 @@
using System;
namespace Server.Items
{
public class BluePlainRugAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new BluePlainRugDeed(); } }
[Constructable]
public BluePlainRugAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0xAC2, 1076585 ), 1, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAC3, 1076585 ), -1, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAC4, 1076585 ), -1, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAC5, 1076585 ), 1, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAF6, 1076585 ), -1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xAF7, 1076585 ), 0, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAF8, 1076585 ), 1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xAF9, 1076585 ), 0, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAC0, 1076585 ), 0, 0, 0 );
}
public BluePlainRugAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BluePlainRugDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new BluePlainRugAddon(); } }
public override int LabelNumber { get { return 1076585; } } // Blue plain rug
[Constructable]
public BluePlainRugDeed() : base()
{
LootType = LootType.Blessed;
}
public BluePlainRugDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,68 @@
using System;
namespace Server.Items
{
[Flipable( 0x2068, 0x207A )]
public class BoilingCauldronAddon : BaseAddonContainer
{
public override BaseAddonContainerDeed Deed { get { return new BoilingCauldronDeed(); } }
public override int LabelNumber { get { return 1076267; } } // Boiling Cauldron
public override int DefaultGumpID { get { return 0x9; } }
public override int DefaultDropSound { get { return 0x42; } }
[Constructable]
public BoilingCauldronAddon() : base( 0x2068 )
{
AddComponent( new LocalizedContainerComponent( 0xFAC, 1076267 ), 0, 0, 0 );
AddComponent( new LocalizedContainerComponent( 0x970, 1076267 ), 0, 0, 8 );
}
public BoilingCauldronAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class BoilingCauldronDeed : BaseAddonContainerDeed
{
public override BaseAddonContainer Addon { get { return new BoilingCauldronAddon(); } }
public override int LabelNumber { get { return 1076267; } } // Boiling Cauldron
[Constructable]
public BoilingCauldronDeed() : base()
{
LootType = LootType.Blessed;
}
public BoilingCauldronDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,64 @@
using System;
namespace Server.Items
{
public class CherryBlossomTreeAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new CherryBlossomTreeDeed(); } }
[Constructable]
public CherryBlossomTreeAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0x26EE, 1076268 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x3122, 1076268 ), 0, 0, 0 );
}
public CherryBlossomTreeAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class CherryBlossomTreeDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new CherryBlossomTreeAddon(); } }
public override int LabelNumber { get { return 1076268; } } // Cherry Blossom Tree
[Constructable]
public CherryBlossomTreeDeed() : base()
{
LootType = LootType.Blessed;
}
public CherryBlossomTreeDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,63 @@
using System;
namespace Server.Items
{
public class CherryBlossomTrunkAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new CherryBlossomTrunkDeed(); } }
[Constructable]
public CherryBlossomTrunkAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0x26EE, 1076784 ), 0, 0, 0 );
}
public CherryBlossomTrunkAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class CherryBlossomTrunkDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new CherryBlossomTrunkAddon(); } }
public override int LabelNumber { get { return 1076784; } } // Cherry Blossom Trunk
[Constructable]
public CherryBlossomTrunkDeed() : base()
{
LootType = LootType.Blessed;
}
public CherryBlossomTrunkDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,71 @@
using System;
namespace Server.Items
{
public class CinnamonFancyRugAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new CinnamonFancyRugDeed(); } }
[Constructable]
public CinnamonFancyRugAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0xAE3, 1076587 ), 1, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAE4, 1076587 ), -1, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAE5, 1076587 ), -1, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAE6, 1076587 ), 1, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAE7, 1076587 ), -1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xAE8, 1076587 ), 0, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAE9, 1076587 ), 1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xAEA, 1076587 ), 0, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAEB, 1076587 ), 0, 0, 0 );
}
public CinnamonFancyRugAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class CinnamonFancyRugDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new CinnamonFancyRugAddon(); } }
public override int LabelNumber { get { return 1076587; } } // Cinnamon fancy rug
[Constructable]
public CinnamonFancyRugDeed() : base()
{
LootType = LootType.Blessed;
}
public CinnamonFancyRugDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,213 @@
using System;
using Server;
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class CurtainsComponent : AddonComponent, IDyable
{
public override int LabelNumber { get { return 1076280; } } // Curtains
public override bool DisplayWeight { get { return false; } }
private int m_ClosedID;
[CommandProperty( AccessLevel.GameMaster )]
public int ClosedID
{
get { return m_ClosedID; }
set { m_ClosedID = value; }
}
public CurtainsComponent( int itemID, int closedID ) : base( itemID )
{
m_ClosedID = closedID;
}
public CurtainsComponent( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
base.OnDoubleClick( from );
if ( Addon != null )
{
if ( from.InRange( Location, 1 ) )
{
foreach ( AddonComponent c in Addon.Components )
{
if ( c is CurtainsComponent )
{
CurtainsComponent curtain = (CurtainsComponent) c;
int temp = curtain.ItemID;
curtain.ItemID = curtain.ClosedID;
curtain.ClosedID = temp;
}
}
}
else
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
writer.Write( (int) m_ClosedID );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
m_ClosedID = reader.ReadInt();
}
#region IDyable
public virtual bool Dye( Mobile from, DyeTub sender )
{
if ( Deleted )
return false;
Hue = sender.DyedHue;
return true;
}
#endregion
}
public class CurtainsAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new CurtainsDeed(); } }
public override bool RetainDeedHue { get { return true; } }
[Constructable]
public CurtainsAddon( bool east ) : base()
{
if ( east ) // east
{
AddComponent( new CurtainsComponent( 0x3D9E, 0x3DA8 ), 0, -1, 0 );
AddComponent( new CurtainsComponent( 0x3DAC, 0x3DAE ), 0, 0, 0 );
AddComponent( new CurtainsComponent( 0x3DA0, 0x3DA6 ), 0, 2, 0 );
AddComponent( new CurtainsComponent( 0x3D9F, 0x3DA7 ), 0, 1, 0 );
}
else // south
{
AddComponent( new CurtainsComponent( 0x3D9C, 0x3DAD ), 0, 0, 0 );
AddComponent( new CurtainsComponent( 0x3D9D, 0x3DA3 ), -1, 0, 0 );
AddComponent( new CurtainsComponent( 0x3DA1, 0x3DA5 ), 2, 0, 0 );
AddComponent( new CurtainsComponent( 0x3DAB, 0x3DA4 ), 1, 0, 0 );
}
}
public CurtainsAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class CurtainsDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new CurtainsAddon( m_East ); } }
public override int LabelNumber { get { return 1076280; } } // Curtains
private bool m_East;
[Constructable]
public CurtainsDeed() : base()
{
LootType = LootType.Blessed;
}
public CurtainsDeed( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( IsChildOf( from.Backpack ) )
{
from.CloseGump( typeof( InternalGump ) );
from.SendGump( new InternalGump( this ) );
}
else
from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used.
}
private void SendTarget( Mobile m )
{
base.OnDoubleClick( m );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
private class InternalGump : Gump
{
private CurtainsDeed m_Deed;
public InternalGump( CurtainsDeed deed ) : base( 60, 36 )
{
m_Deed = deed;
AddPage( 0 );
AddBackground( 0, 0, 273, 324, 0x13BE );
AddImageTiled( 10, 10, 253, 20, 0xA40 );
AddImageTiled( 10, 40, 253, 244, 0xA40 );
AddImageTiled( 10, 294, 253, 20, 0xA40 );
AddAlphaRegion( 10, 10, 253, 304 );
AddButton( 10, 294, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 296, 450, 20, 1060051, 0x7FFF, false, false ); // CANCEL
AddHtmlLocalized( 14, 12, 273, 20, 1076581, 0x7FFF, false, false ); // Please select your curtain position
AddPage( 1 );
AddButton( 19, 49, 0x845, 0x846, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 47, 213, 20, 1075386, 0x7FFF, false, false ); // South
AddButton( 19, 73, 0x845, 0x846, 2, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 71, 213, 20, 1075387, 0x7FFF, false, false ); // East
}
public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_Deed == null || m_Deed.Deleted || info.ButtonID == 0 )
return;
m_Deed.m_East = ( info.ButtonID != 1 );
m_Deed.SendTarget( sender.Mobile );
}
}
}
}

View file

@ -0,0 +1,62 @@
using System;
namespace Server.Items
{
public class FountainAddon : StoneFountainAddon
{
public override BaseAddonDeed Deed { get { return new FountainDeed(); } }
[Constructable]
public FountainAddon() : base()
{
}
public FountainAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class FountainDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new FountainAddon(); } }
public override int LabelNumber { get { return 1076283; } } // Fountain
[Constructable]
public FountainDeed() : base()
{
LootType = LootType.Blessed;
}
public FountainDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,215 @@
using System;
using Server;
using Server.Network;
namespace Server.Items
{
public abstract class BaseFruitTreeAddon : BaseAddon
{
public override abstract BaseAddonDeed Deed { get; }
public abstract Item Fruit { get; }
private int m_Fruits;
[CommandProperty( AccessLevel.GameMaster )]
public int Fruits
{
get { return m_Fruits; }
set
{
if ( value < 0 )
m_Fruits = 0;
else
m_Fruits = value;
}
}
public BaseFruitTreeAddon() : base()
{
Timer.DelayCall( TimeSpan.FromMinutes( 5 ), new TimerCallback( Respawn ) );
}
public BaseFruitTreeAddon( Serial serial ) : base( serial )
{
}
public override void OnComponentUsed( AddonComponent c, Mobile from )
{
if ( from.InRange( c.Location, 2 ) )
{
if ( m_Fruits > 0 )
{
Item fruit = Fruit;
if ( fruit == null )
return;
if ( !from.PlaceInBackpack( fruit ) )
{
fruit.Delete();
from.SendLocalizedMessage( 501015 ); // There is no room in your backpack for the fruit.
}
else
{
if ( --m_Fruits == 0 )
Timer.DelayCall( TimeSpan.FromMinutes( 30 ), new TimerCallback( Respawn ) );
from.SendLocalizedMessage( 501016 ); // You pick some fruit and put it in your backpack.
}
}
else
from.SendLocalizedMessage( 501017 ); // There is no more fruit on this tree
}
else
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
private void Respawn()
{
m_Fruits = Utility.RandomMinMax( 1, 4 );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
writer.Write( (int) m_Fruits );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
m_Fruits = reader.ReadInt();
if ( m_Fruits == 0 )
Respawn();
}
}
public class AppleTreeAddon : BaseFruitTreeAddon
{
public override BaseAddonDeed Deed { get { return new AppleTreeDeed(); } }
public override Item Fruit { get { return new Apple(); } }
[Constructable]
public AppleTreeAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0xD98, 1076269 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x3124, 1076269 ), 0, 0, 0 );
}
public AppleTreeAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class AppleTreeDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new AppleTreeAddon(); } }
public override int LabelNumber { get { return 1076269; } } // Apple Tree
[Constructable]
public AppleTreeDeed() : base()
{
LootType = LootType.Blessed;
}
public AppleTreeDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class PeachTreeAddon : BaseFruitTreeAddon
{
public override BaseAddonDeed Deed { get { return new PeachTreeDeed(); } }
public override Item Fruit { get { return new Peach(); } }
[Constructable]
public PeachTreeAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0xD9C, 1076270 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x3123, 1076270 ), 0, 0, 0 );
}
public PeachTreeAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class PeachTreeDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new PeachTreeAddon(); } }
public override int LabelNumber { get { return 1076270; } } // Peach Tree
[Constructable]
public PeachTreeDeed() : base()
{
LootType = LootType.Blessed;
}
public PeachTreeDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,71 @@
using System;
namespace Server.Items
{
public class GoldenDecorativeRugAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new GoldenDecorativeRugDeed(); } }
[Constructable]
public GoldenDecorativeRugAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0xADB, 1076586 ), 1, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xADC, 1076586 ), -1, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xADD, 1076586 ), -1, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xADE, 1076586 ), 1, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xADF, 1076586 ), -1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xAE0, 1076586 ), 0, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAE1, 1076586 ), 1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xAE2, 1076586 ), 0, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xADA, 1076586 ), 0, 0, 0 );
}
public GoldenDecorativeRugAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class GoldenDecorativeRugDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new GoldenDecorativeRugAddon(); } }
public override int LabelNumber { get { return 1076586; } } // Golden decorative rug
[Constructable]
public GoldenDecorativeRugDeed() : base()
{
LootType = LootType.Blessed;
}
public GoldenDecorativeRugDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,174 @@
using System;
using Server;
using Server.Spells;
using Server.Network;
namespace Server.Items
{
[Flipable( 0x125E, 0x1230 )]
public class GuillotineComponent : AddonComponent
{
public override int LabelNumber { get { return 1024656; } } // Guillotine
public GuillotineComponent() : base( 0x125E )
{
}
public GuillotineComponent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class GuillotineAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new GuillotineDeed(); } }
public GuillotineAddon() : base()
{
AddComponent( new GuillotineComponent(), 0, 0, 0 );
}
public GuillotineAddon( Serial serial ) : base( serial )
{
}
public override void OnComponentUsed( AddonComponent c, Mobile from )
{
if ( from.InRange( Location, 2 ) )
{
if ( Utility.RandomBool() )
{
from.Location = Location;
Timer.DelayCall( TimeSpan.FromSeconds( 0.5 ), new TimerStateCallback( Activate ), new object[] { c, from } );
}
else
from.LocalOverheadMessage( MessageType.Regular, 0, 501777 ); // Hmm... you suspect that if you used this again, it might hurt.
}
else
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
private void Activate( object obj )
{
object[] param = (object[]) obj;
if ( param[ 0 ] is AddonComponent && param[ 1 ] is Mobile )
Activate( (AddonComponent) param[ 0 ], (Mobile) param[ 1 ] );
}
public virtual void Activate( AddonComponent c, Mobile from )
{
if ( c.ItemID == 0x125E )
c.ItemID = 0x1269;
else
c.ItemID = 0x1247;
// blood
int amount = Utility.RandomMinMax( 3, 7 );
for ( int i = 0; i < amount; i++ )
{
int x = c.X + Utility.RandomMinMax( -1, 1 );
int y = c.Y + Utility.RandomMinMax( -1, 1 );
int z = c.Z;
if ( !c.Map.CanFit( x, y, z, 1, false, false, true ) )
{
z = c.Map.GetAverageZ( x, y );
if ( !c.Map.CanFit( x, y, z, 1, false, false, true ) )
continue;
}
Blood blood = new Blood( Utility.RandomMinMax( 0x122C, 0x122F ) );
blood.MoveToWorld( new Point3D( x, y, z ), c.Map );
}
if ( from.Female )
from.PlaySound( Utility.RandomMinMax( 0x150, 0x153 ) );
else
from.PlaySound( Utility.RandomMinMax( 0x15A, 0x15D ) );
from.LocalOverheadMessage( MessageType.Regular, 0, 501777 ); // Hmm... you suspect that if you used this again, it might hurt.
SpellHelper.Damage( TimeSpan.Zero, from, Utility.Dice( 2, 10, 5 ) );
Timer.DelayCall( TimeSpan.FromSeconds( 0.5 ), TimeSpan.FromSeconds( 0.5 ), 2, new TimerStateCallback( Deactivate ), c );
}
private void Deactivate( object obj )
{
if ( obj is AddonComponent )
{
AddonComponent c = (AddonComponent) obj;
if ( c.ItemID == 0x1269 )
c.ItemID = 0x1260;
else if ( c.ItemID == 0x1260 )
c.ItemID = 0x125E;
else if ( c.ItemID == 0x1247 )
c.ItemID = 0x1246;
else if ( c.ItemID == 0x1246 )
c.ItemID = 0x1230;
}
}
}
public class GuillotineDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new GuillotineAddon(); } }
public override int LabelNumber { get { return 1024656; } } // Guillotine
[Constructable]
public GuillotineDeed() : base()
{
LootType = LootType.Blessed;
}
public GuillotineDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,130 @@
using System;
using Server;
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class HangingAxesAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new HangingAxesDeed(); } }
[Constructable]
public HangingAxesAddon( bool east ) : base()
{
if ( east ) // east
{
AddComponent( new LocalizedAddonComponent( 0x156A, 1076271 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x156B, 1076271 ), 0, -1, 0 );
}
else // south
{
AddComponent( new LocalizedAddonComponent( 0x1568, 1076271 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x1569, 1076271 ), 1, 0, 0 );
}
}
public HangingAxesAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class HangingAxesDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new HangingAxesAddon( m_East ); } }
public override int LabelNumber { get { return 1076271; } } // Hanging Axes
private bool m_East;
[Constructable]
public HangingAxesDeed() : base()
{
LootType = LootType.Blessed;
}
public HangingAxesDeed( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( IsChildOf( from.Backpack ) )
{
from.CloseGump( typeof( InternalGump ) );
from.SendGump( new InternalGump( this ) );
}
else
from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used.
}
private void SendTarget( Mobile m )
{
base.OnDoubleClick( m );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
private class InternalGump : Gump
{
private HangingAxesDeed m_Deed;
public InternalGump( HangingAxesDeed deed ) : base( 60, 36 )
{
m_Deed = deed;
AddPage( 0 );
AddBackground( 0, 0, 273, 324, 0x13BE );
AddImageTiled( 10, 10, 253, 20, 0xA40 );
AddImageTiled( 10, 40, 253, 244, 0xA40 );
AddImageTiled( 10, 294, 253, 20, 0xA40 );
AddAlphaRegion( 10, 10, 253, 304 );
AddButton( 10, 294, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 296, 450, 20, 1060051, 0x7FFF, false, false ); // CANCEL
AddHtmlLocalized( 14, 12, 273, 20, 1076745, 0x7FFF, false, false ); // Please select your hanging axe position
AddPage( 1 );
AddButton( 19, 49, 0x845, 0x846, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 47, 213, 20, 1075386, 0x7FFF, false, false ); // South
AddButton( 19, 73, 0x845, 0x846, 2, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 71, 213, 20, 1075387, 0x7FFF, false, false ); // East
}
public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_Deed == null || m_Deed.Deleted || info.ButtonID == 0 )
return;
m_Deed.m_East = ( info.ButtonID != 1 );
m_Deed.SendTarget( sender.Mobile );
}
}
}
}

View file

@ -0,0 +1,130 @@
using System;
using Server;
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class HangingSwordsAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new HangingSwordsDeed(); } }
[Constructable]
public HangingSwordsAddon( bool east ) : base()
{
if ( east ) // east
{
AddComponent( new LocalizedAddonComponent( 0x1566, 1076272 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x1567, 1076272 ), 0, -1, 0 );
}
else // south
{
AddComponent( new LocalizedAddonComponent( 0x1564, 1076272 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x1565, 1076272 ), 1, 0, 0 );
}
}
public HangingSwordsAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class HangingSwordsDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new HangingSwordsAddon( m_East ); } }
public override int LabelNumber { get { return 1076272; } } // Hanging Swords
private bool m_East;
[Constructable]
public HangingSwordsDeed() : base()
{
LootType = LootType.Blessed;
}
public HangingSwordsDeed( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( IsChildOf( from.Backpack ) )
{
from.CloseGump( typeof( InternalGump ) );
from.SendGump( new InternalGump( this ) );
}
else
from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used.
}
private void SendTarget( Mobile m )
{
base.OnDoubleClick( m );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
private class InternalGump : Gump
{
private HangingSwordsDeed m_Deed;
public InternalGump( HangingSwordsDeed deed ) : base( 60, 36 )
{
m_Deed = deed;
AddPage( 0 );
AddBackground( 0, 0, 273, 324, 0x13BE );
AddImageTiled( 10, 10, 253, 20, 0xA40 );
AddImageTiled( 10, 40, 253, 244, 0xA40 );
AddImageTiled( 10, 294, 253, 20, 0xA40 );
AddAlphaRegion( 10, 10, 253, 304 );
AddButton( 10, 294, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 296, 450, 20, 1060051, 0x7FFF, false, false ); // CANCEL
AddHtmlLocalized( 14, 12, 273, 20, 1076746, 0x7FFF, false, false ); // Please select your hanging sword position
AddPage( 1 );
AddButton( 19, 49, 0x845, 0x846, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 47, 213, 20, 1075386, 0x7FFF, false, false ); // South
AddButton( 19, 73, 0x845, 0x846, 2, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 71, 213, 20, 1075387, 0x7FFF, false, false ); // East
}
public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_Deed == null || m_Deed.Deleted || info.ButtonID == 0 )
return;
m_Deed.m_East = ( info.ButtonID != 1 );
m_Deed.SendTarget( sender.Mobile );
}
}
}
}

View file

@ -0,0 +1,170 @@
using System;
using Server;
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class HouseLadderAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new HouseLadderDeed(); } }
[Constructable]
public HouseLadderAddon( int type ) : base()
{
switch ( type )
{
case 0: // castle south
AddComponent( new LocalizedAddonComponent( 0x3DB2, 1076791 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x3F28, 1076791 ), 0, 1, 28 );
AddComponent( new LocalizedAddonComponent( 0x3DB4, 1076791 ), 0, 2, 20 );
break;
case 1: // castle east
AddComponent( new LocalizedAddonComponent( 0x3DB3, 1076791 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x3F28, 1076791 ), 1, 0, 28 );
AddComponent( new LocalizedAddonComponent( 0x3DB5, 1076791 ), 2, 0, 20 );
break;
case 2: // castle north
AddComponent( new LocalizedAddonComponent( 0x2FDF, 1076791 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x3F28, 1076791 ), 0, -1, 28 );
AddComponent( new LocalizedAddonComponent( 0x3DB6, 1076791 ), 0, -2, 20 );
break;
case 3: // castle west
AddComponent( new LocalizedAddonComponent( 0x2FDE, 1076791 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x3F28, 1076791 ), -1, 0, 28 );
AddComponent( new LocalizedAddonComponent( 0x3DB7, 1076791 ), -2, 0, 20 );
break;
case 4: // south
AddComponent( new LocalizedAddonComponent( 0x3DB2, 1076287 ), 0, 0, 0 );
break;
case 5: // east
AddComponent( new LocalizedAddonComponent( 0x3DB3, 1076287 ), 0, 0, 0 );
break;
case 6: // north
AddComponent( new LocalizedAddonComponent( 0x2FDF, 1076287 ), 0, 0, 0 );
break;
case 7: // west
AddComponent( new LocalizedAddonComponent( 0x2FDE, 1076287 ), 0, 0, 0 );
break;
}
}
public HouseLadderAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class HouseLadderDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new HouseLadderAddon( m_Type ); } }
public override int LabelNumber { get { return 1076287; } } // Ladder
private int m_Type;
[Constructable]
public HouseLadderDeed() : base()
{
LootType = LootType.Blessed;
}
public HouseLadderDeed( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( IsChildOf( from.Backpack ) )
{
from.CloseGump( typeof( InternalGump ) );
from.SendGump( new InternalGump( this ) );
}
else
from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used.
}
private void SendTarget( Mobile m )
{
base.OnDoubleClick( m );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
private class InternalGump : Gump
{
private HouseLadderDeed m_Deed;
public InternalGump( HouseLadderDeed deed ) : base( 60, 36 )
{
m_Deed = deed;
AddPage( 0 );
AddBackground( 0, 0, 273, 324, 0x13BE );
AddImageTiled( 10, 10, 253, 20, 0xA40 );
AddImageTiled( 10, 40, 253, 244, 0xA40 );
AddImageTiled( 10, 294, 253, 20, 0xA40 );
AddAlphaRegion( 10, 10, 253, 304 );
AddButton( 10, 294, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 296, 450, 20, 1060051, 0x7FFF, false, false ); // CANCEL
AddHtmlLocalized( 14, 12, 273, 20, 1076780, 0x7FFF, false, false ); // Please select your ladder position. <br>Use the ladders marked (castle) <br> for accessing the tops of keeps <br> and castles.
AddPage( 1 );
AddButton( 19, 49, 0x845, 0x846, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 47, 213, 20, 1076794, 0x7FFF, false, false ); // South (Castle)
AddButton( 19, 73, 0x845, 0x846, 2, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 71, 213, 20, 1076795, 0x7FFF, false, false ); // East (Castle)
AddButton( 19, 97, 0x845, 0x846, 3, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 95, 213, 20, 1076792, 0x7FFF, false, false ); // North (Castle)
AddButton( 19, 121, 0x845, 0x846, 4, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 119, 213, 20, 1076793, 0x7FFF, false, false ); // West (Castle)
AddButton( 19, 145, 0x845, 0x846, 5, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 143, 213, 20, 1075386, 0x7FFF, false, false ); // South
AddButton( 19, 169, 0x845, 0x846, 6, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 167, 213, 20, 1075387, 0x7FFF, false, false ); // East
AddButton( 19, 193, 0x845, 0x846, 7, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 191, 213, 20, 1075389, 0x7FFF, false, false ); // North
AddButton( 19, 217, 0x845, 0x846, 8, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 215, 213, 20, 1075390, 0x7FFF, false, false ); // West
}
public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_Deed == null || m_Deed.Deleted || info.ButtonID == 0 )
return;
if ( info.ButtonID >= 1 && info.ButtonID <= 8 )
{
m_Deed.m_Type = info.ButtonID - 1;
m_Deed.SendTarget( sender.Mobile );
}
}
}
}
}

View file

@ -0,0 +1,136 @@
using System;
using Server;
using Server.Spells;
using Server.Network;
namespace Server.Items
{
public class IronMaidenAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new IronMaidenDeed(); } }
public IronMaidenAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0x1249, 1076288 ), 0, 0, 0 );
}
public IronMaidenAddon( Serial serial ) : base( serial )
{
}
public override void OnComponentUsed( AddonComponent c, Mobile from )
{
if ( from.InRange( Location, 2 ) )
{
if ( Utility.RandomBool() )
{
from.Location = Location;
c.ItemID = 0x124A;
Timer.DelayCall( TimeSpan.FromSeconds( 0.5 ), TimeSpan.FromSeconds( 0.5 ), 3, new TimerStateCallback( Activate ), new object[] { c, from } );
}
else
from.LocalOverheadMessage( MessageType.Regular, 0, 501777 ); // Hmm... you suspect that if you used this again, it might hurt.
}
else
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
private void Activate( object obj )
{
object[] param = (object[]) obj;
if ( param[ 0 ] is AddonComponent && param[ 1 ] is Mobile )
Activate( (AddonComponent) param[ 0 ], (Mobile) param[ 1 ] );
}
public virtual void Activate( AddonComponent c, Mobile from )
{
c.ItemID += 1;
if ( c.ItemID >= 0x124D )
{
// blood
int amount = Utility.RandomMinMax( 3, 7 );
for ( int i = 0; i < amount; i++ )
{
int x = c.X + Utility.RandomMinMax( -1, 1 );
int y = c.Y + Utility.RandomMinMax( -1, 1 );
int z = c.Z;
if ( !c.Map.CanFit( x, y, z, 1, false, false, true ) )
{
z = c.Map.GetAverageZ( x, y );
if ( !c.Map.CanFit( x, y, z, 1, false, false, true ) )
continue;
}
Blood blood = new Blood( Utility.RandomMinMax( 0x122C, 0x122F ) );
blood.MoveToWorld( new Point3D( x, y, z ), c.Map );
}
if ( from.Female )
from.PlaySound( Utility.RandomMinMax( 0x150, 0x153 ) );
else
from.PlaySound( Utility.RandomMinMax( 0x15A, 0x15D ) );
from.LocalOverheadMessage( MessageType.Regular, 0, 501777 ); // Hmm... you suspect that if you used this again, it might hurt.
SpellHelper.Damage( TimeSpan.Zero, from, Utility.Dice( 2, 10, 5 ) );
Timer.DelayCall( TimeSpan.FromSeconds( 1 ), new TimerStateCallback( Deactivate ), c );
}
}
private void Deactivate( object obj )
{
if ( obj is AddonComponent )
( (AddonComponent) obj ).ItemID = 0x1249;
}
}
public class IronMaidenDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new IronMaidenAddon(); } }
public override int LabelNumber { get { return 1076288; } } // Iron Maiden
[Constructable]
public IronMaidenDeed() : base()
{
LootType = LootType.Blessed;
}
public IronMaidenDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,91 @@
using System;
namespace Server.Items
{
[Flipable( 0x3D8E, 0x3D8F )]
public class LargeFishingNetComponent : AddonComponent
{
public override int LabelNumber { get { return 1076285; } } // Large Fish Net
public LargeFishingNetComponent() : base( 0x3D8E )
{
}
public LargeFishingNetComponent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class LargeFishingNetAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new LargeFishingNetDeed(); } }
[Constructable]
public LargeFishingNetAddon() : base()
{
AddComponent( new LargeFishingNetComponent(), 0, 0, 0 );
}
public LargeFishingNetAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class LargeFishingNetDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new LargeFishingNetAddon(); } }
public override int LabelNumber { get { return 1076285; } } // Large Fish Net
[Constructable]
public LargeFishingNetDeed() : base()
{
LootType = LootType.Blessed;
}
public LargeFishingNetDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,63 @@
using System;
namespace Server.Items
{
public class PeachTrunkAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new PeachTrunkDeed(); } }
[Constructable]
public PeachTrunkAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0xD9C, 1076786 ), 0, 0, 0 );
}
public PeachTrunkAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class PeachTrunkDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new PeachTrunkAddon(); } }
public override int LabelNumber { get { return 1076786; } } // Peach Trunk
[Constructable]
public PeachTrunkDeed() : base()
{
LootType = LootType.Blessed;
}
public PeachTrunkDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,71 @@
using System;
namespace Server.Items
{
public class PinkFancyRugAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new PinkFancyRugDeed(); } }
[Constructable]
public PinkFancyRugAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0xAEE, 1076590 ), 1, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAEF, 1076590 ), -1, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAF0, 1076590 ), -1, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAF1, 1076590 ), 1, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAF2, 1076590 ), -1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xAF3, 1076590 ), 0, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAF4, 1076590 ), 1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xAF5, 1076590 ), 0, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAEC, 1076590 ), 0, 0, 0 );
}
public PinkFancyRugAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class PinkFancyRugDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new PinkFancyRugAddon(); } }
public override int LabelNumber { get { return 1076590; } } // Pink fancy rug
[Constructable]
public PinkFancyRugDeed() : base()
{
LootType = LootType.Blessed;
}
public PinkFancyRugDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,71 @@
using System;
namespace Server.Items
{
public class RedPlainRugAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new RedPlainRugDeed(); } }
[Constructable]
public RedPlainRugAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0xAC9, 1076588 ), 1, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xACA, 1076588 ), -1, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xACB, 1076588 ), -1, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xACC, 1076588 ), 1, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xACD, 1076588 ), -1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xACE, 1076588 ), 0, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xACF, 1076588 ), 1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xAD0, 1076588 ), 0, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0xAC6, 1076588 ), 0, 0, 0 );
}
public RedPlainRugAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class RedPlainRugDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new RedPlainRugAddon(); } }
public override int LabelNumber { get { return 1076588; } } // Red plain rug
[Constructable]
public RedPlainRugDeed() : base()
{
LootType = LootType.Blessed;
}
public RedPlainRugDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,91 @@
using System;
namespace Server.Items
{
[Flipable( 0x1E34, 0x1E35 )]
public class ScarecrowComponent : AddonComponent
{
public override int LabelNumber { get { return 1076608; } } // Scarecrow
public ScarecrowComponent() : base( 0x1E34 )
{
}
public ScarecrowComponent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class ScarecrowAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new ScarecrowDeed(); } }
[Constructable]
public ScarecrowAddon() : base()
{
AddComponent( new ScarecrowComponent(), 0, 0, 0 );
}
public ScarecrowAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class ScarecrowDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new ScarecrowAddon(); } }
public override int LabelNumber { get { return 1076608; } } // Scarecrow
[Constructable]
public ScarecrowDeed() : base()
{
LootType = LootType.Blessed;
}
public ScarecrowDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,91 @@
using System;
namespace Server.Items
{
[Flipable( 0x1EA3, 0x1EA4 )]
public class SmallFishingNetComponent : AddonComponent
{
public override int LabelNumber { get { return 1076286; } } // Small Fish Net
public SmallFishingNetComponent() : base( 0x1EA3 )
{
}
public SmallFishingNetComponent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SmallFishingNetAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new SmallFishingNetDeed(); } }
[Constructable]
public SmallFishingNetAddon() : base()
{
AddComponent( new SmallFishingNetComponent(), 0, 0, 0 );
}
public SmallFishingNetAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SmallFishingNetDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new SmallFishingNetAddon(); } }
public override int LabelNumber { get { return 1076286; } } // Small Fish Net
[Constructable]
public SmallFishingNetDeed() : base()
{
LootType = LootType.Blessed;
}
public SmallFishingNetDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,132 @@
using System;
using Server;
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class StoneStatueAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new StoneStatueDeed(); } }
[Constructable]
public StoneStatueAddon( bool east ) : base()
{
if ( east ) // east
{
AddComponent( new LocalizedAddonComponent( 0x139E, 1076284 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x139F, 1076284 ), -1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x13A0, 1076284 ), 0, -1, 0 );
}
else // south
{
AddComponent( new LocalizedAddonComponent( 0x129F, 1076284 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x12A0, 1076284 ), 0, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0x12A1, 1076284 ), -1, 0, 0 );
}
}
public StoneStatueAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class StoneStatueDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new StoneStatueAddon( m_East ); } }
public override int LabelNumber { get { return 1076284; } } // Statue
private bool m_East;
[Constructable]
public StoneStatueDeed() : base()
{
LootType = LootType.Blessed;
}
public StoneStatueDeed( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( IsChildOf( from.Backpack ) )
{
from.CloseGump( typeof( InternalGump ) );
from.SendGump( new InternalGump( this ) );
}
else
from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used.
}
private void SendTarget( Mobile m )
{
base.OnDoubleClick( m );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
private class InternalGump : Gump
{
private StoneStatueDeed m_Deed;
public InternalGump( StoneStatueDeed deed ) : base( 60, 36 )
{
m_Deed = deed;
AddPage( 0 );
AddBackground( 0, 0, 273, 324, 0x13BE );
AddImageTiled( 10, 10, 253, 20, 0xA40 );
AddImageTiled( 10, 40, 253, 244, 0xA40 );
AddImageTiled( 10, 294, 253, 20, 0xA40 );
AddAlphaRegion( 10, 10, 253, 304 );
AddButton( 10, 294, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 296, 450, 20, 1060051, 0x7FFF, false, false ); // CANCEL
AddHtmlLocalized( 14, 12, 273, 20, 1076579, 0x7FFF, false, false ); // Please select your statue position
AddPage( 1 );
AddButton( 19, 49, 0x845, 0x846, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 47, 213, 20, 1075386, 0x7FFF, false, false ); // South
AddButton( 19, 73, 0x845, 0x846, 2, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 71, 213, 20, 1075387, 0x7FFF, false, false ); // East
}
public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_Deed == null || m_Deed.Deleted || info.ButtonID == 0 )
return;
m_Deed.m_East = ( info.ButtonID != 1 );
m_Deed.SendTarget( sender.Mobile );
}
}
}
}

View file

@ -0,0 +1,91 @@
using System;
namespace Server.Items
{
[Flipable( 0x3DAA, 0x3DA9 )]
public class SuitOfGoldArmorComponent : AddonComponent
{
public override int LabelNumber { get { return 1076265; } } // Suit of Gold Armor
public SuitOfGoldArmorComponent() : base( 0x3DAA )
{
}
public SuitOfGoldArmorComponent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SuitOfGoldArmorAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new SuitOfGoldArmorDeed(); } }
[Constructable]
public SuitOfGoldArmorAddon() : base()
{
AddComponent( new SuitOfGoldArmorComponent(), 0, 0, 0 );
}
public SuitOfGoldArmorAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SuitOfGoldArmorDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new SuitOfGoldArmorAddon(); } }
public override int LabelNumber { get { return 1076265; } } // Suit of Gold Armor
[Constructable]
public SuitOfGoldArmorDeed() : base()
{
LootType = LootType.Blessed;
}
public SuitOfGoldArmorDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,91 @@
using System;
namespace Server.Items
{
[Flipable( 0x3D86, 0x3D87 )]
public class SuitOfSilverArmorComponent : AddonComponent
{
public override int LabelNumber { get { return 1076266; } } // Suit of Silver Armor
public SuitOfSilverArmorComponent() : base( 0x3D86 )
{
}
public SuitOfSilverArmorComponent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SuitOfSilverArmorAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new SuitOfSilverArmorDeed(); } }
[Constructable]
public SuitOfSilverArmorAddon() : base()
{
AddComponent( new SuitOfSilverArmorComponent(), 0, 0, 0 );
}
public SuitOfSilverArmorAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SuitOfSilverArmorDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new SuitOfSilverArmorAddon(); } }
public override int LabelNumber { get { return 1076266; } } // Suit of Silver Armor
[Constructable]
public SuitOfSilverArmorDeed() : base()
{
LootType = LootType.Blessed;
}
public SuitOfSilverArmorDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,63 @@
using System;
namespace Server.Items
{
public class TableWithBlueClothAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new TableWithBlueClothDeed(); } }
[Constructable]
public TableWithBlueClothAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0x118C, 1076276 ), 0, 0, 0 );
}
public TableWithBlueClothAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class TableWithBlueClothDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new TableWithBlueClothAddon(); } }
public override int LabelNumber { get { return 1076276; } } // Table With A Blue Tablecloth
[Constructable]
public TableWithBlueClothDeed() : base()
{
LootType = LootType.Blessed;
}
public TableWithBlueClothDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,63 @@
using System;
namespace Server.Items
{
public class TableWithOrangeClothAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new TableWithOrangeClothDeed(); } }
[Constructable]
public TableWithOrangeClothAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0x118E, 1076278 ), 0, 0, 0 );
}
public TableWithOrangeClothAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class TableWithOrangeClothDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new TableWithOrangeClothAddon(); } }
public override int LabelNumber { get { return 1076278; } } // Table With An Orange Tablecloth
[Constructable]
public TableWithOrangeClothDeed() : base()
{
LootType = LootType.Blessed;
}
public TableWithOrangeClothDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,63 @@
using System;
namespace Server.Items
{
public class TableWithPurpleClothAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new TableWithPurpleClothDeed(); } }
[Constructable]
public TableWithPurpleClothAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0x118B, 1076275 ), 0, 0, 0 );
}
public TableWithPurpleClothAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class TableWithPurpleClothDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new TableWithPurpleClothAddon(); } }
public override int LabelNumber { get { return 1076275; } } // Table With A Purple Tablecloth
[Constructable]
public TableWithPurpleClothDeed() : base()
{
LootType = LootType.Blessed;
}
public TableWithPurpleClothDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,63 @@
using System;
namespace Server.Items
{
public class TableWithRedClothAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new TableWithRedClothDeed(); } }
[Constructable]
public TableWithRedClothAddon() : base()
{
AddComponent( new LocalizedAddonComponent( 0x118D, 1076277 ), 0, 0, 0 );
}
public TableWithRedClothAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class TableWithRedClothDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new TableWithRedClothAddon(); } }
public override int LabelNumber { get { return 1076277; } } // Table With A Red Tablecloth
[Constructable]
public TableWithRedClothDeed() : base()
{
LootType = LootType.Blessed;
}
public TableWithRedClothDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,134 @@
using System;
using Server;
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class UnmadeBedAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new UnmadeBedDeed(); } }
[Constructable]
public UnmadeBedAddon( bool east ) : base()
{
if ( east ) // east
{
AddComponent( new LocalizedAddonComponent( 0xA8C, 1076279 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xA8D, 1076279 ), 0, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xA90, 1076279 ), -1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xA91, 1076279 ), -1, -1, 0 );
}
else // south
{
AddComponent( new LocalizedAddonComponent( 0xDB0, 1076279 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xDB1, 1076279 ), -1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0xDB4, 1076279 ), 0, -1, 0 );
AddComponent( new LocalizedAddonComponent( 0xDB5, 1076279 ), -1, -1, 0 );
}
}
public UnmadeBedAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class UnmadeBedDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new UnmadeBedAddon( m_East ); } }
public override int LabelNumber { get { return 1076279; } } // Unmade Bed
private bool m_East;
[Constructable]
public UnmadeBedDeed() : base()
{
LootType = LootType.Blessed;
}
public UnmadeBedDeed( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( IsChildOf( from.Backpack ) )
{
from.CloseGump( typeof( InternalGump ) );
from.SendGump( new InternalGump( this ) );
}
else
from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used.
}
private void SendTarget( Mobile m )
{
base.OnDoubleClick( m );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
private class InternalGump : Gump
{
private UnmadeBedDeed m_Deed;
public InternalGump( UnmadeBedDeed deed ) : base( 60, 36 )
{
m_Deed = deed;
AddPage( 0 );
AddBackground( 0, 0, 273, 324, 0x13BE );
AddImageTiled( 10, 10, 253, 20, 0xA40 );
AddImageTiled( 10, 40, 253, 244, 0xA40 );
AddImageTiled( 10, 294, 253, 20, 0xA40 );
AddAlphaRegion( 10, 10, 253, 304 );
AddButton( 10, 294, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 296, 450, 20, 1060051, 0x7FFF, false, false ); // CANCEL
AddHtmlLocalized( 14, 12, 273, 20, 1076580, 0x7FFF, false, false ); // Pleae select your unmade bed position
AddPage( 1 );
AddButton( 19, 49, 0x845, 0x846, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 47, 213, 20, 1075386, 0x7FFF, false, false ); // South
AddButton( 19, 73, 0x845, 0x846, 2, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 71, 213, 20, 1075387, 0x7FFF, false, false ); // East
}
public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_Deed == null || m_Deed.Deleted || info.ButtonID == 0 )
return;
m_Deed.m_East = ( info.ButtonID != 1 );
m_Deed.SendTarget( sender.Mobile );
}
}
}
}

View file

@ -0,0 +1,131 @@
using System;
using Server;
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class VanityAddon : BaseAddonContainer
{
public override BaseAddonContainerDeed Deed { get { return new VanityDeed(); } }
public override int LabelNumber { get { return 1074027; } } // Vanity
public override int DefaultGumpID { get { return 0x51; } }
public override int DefaultDropSound { get { return 0x42; } }
[Constructable]
public VanityAddon( bool east ) : base( east ? 0xA44 : 0xA3C )
{
if ( east ) // east
{
AddComponent( new AddonContainerComponent( 0xA45 ), 0, -1, 0 );
}
else // south
{
AddComponent( new AddonContainerComponent( 0xA3D ), -1, 0, 0 );
}
}
public VanityAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class VanityDeed : BaseAddonContainerDeed
{
public override BaseAddonContainer Addon { get { return new VanityAddon( m_East ); } }
public override int LabelNumber { get { return 1074027; } } // Vanity
private bool m_East;
[Constructable]
public VanityDeed() : base()
{
LootType = LootType.Blessed;
}
public VanityDeed( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( IsChildOf( from.Backpack ) )
{
from.CloseGump( typeof( InternalGump ) );
from.SendGump( new InternalGump( this ) );
}
else
from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used.
}
private void SendTarget( Mobile m )
{
base.OnDoubleClick( m );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
private class InternalGump : Gump
{
private VanityDeed m_Deed;
public InternalGump( VanityDeed deed ) : base( 60, 36 )
{
m_Deed = deed;
AddPage( 0 );
AddBackground( 0, 0, 273, 324, 0x13BE );
AddImageTiled( 10, 10, 253, 20, 0xA40 );
AddImageTiled( 10, 40, 253, 244, 0xA40 );
AddImageTiled( 10, 294, 253, 20, 0xA40 );
AddAlphaRegion( 10, 10, 253, 304 );
AddButton( 10, 294, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 296, 450, 20, 1060051, 0x7FFF, false, false ); // CANCEL
AddHtmlLocalized( 14, 12, 273, 20, 1076744, 0x7FFF, false, false ); // Please select your vanity position.
AddPage( 1 );
AddButton( 19, 49, 0x845, 0x846, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 47, 213, 20, 1075386, 0x7FFF, false, false ); // South
AddButton( 19, 73, 0x845, 0x846, 2, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 71, 213, 20, 1075387, 0x7FFF, false, false ); // East
}
public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_Deed == null || m_Deed.Deleted || info.ButtonID == 0 )
return;
m_Deed.m_East = ( info.ButtonID != 1 );
m_Deed.SendTarget( sender.Mobile );
}
}
}
}

View file

@ -0,0 +1,112 @@
using System;
using Server;
using Server.Spells;
using Server.Network;
namespace Server.Items
{
[Flipable( 0x3D98, 0x3D94 )]
public class WallTorchComponent : AddonComponent
{
public override int LabelNumber { get { return 1076282; } } // Wall Torch
public WallTorchComponent() : base( 0x3D98 )
{
}
public WallTorchComponent( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( from.InRange( Location, 2 ) )
{
switch ( ItemID )
{
case 0x3D98: ItemID = 0x3D9B; break;
case 0x3D9B: ItemID = 0x3D98; break;
case 0x3D94: ItemID = 0x3D97; break;
case 0x3D97: ItemID = 0x3D94; break;
}
Effects.PlaySound( Location, Map, 0x3BE );
}
else
from.LocalOverheadMessage( MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class WallTorchAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new WallTorchDeed(); } }
public WallTorchAddon() : base()
{
AddComponent( new WallTorchComponent(), 0, 0, 0 );
}
public WallTorchAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class WallTorchDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new WallTorchAddon(); } }
public override int LabelNumber { get { return 1076282; } } // Wall Torch
[Constructable]
public WallTorchDeed() : base()
{
LootType = LootType.Blessed;
}
public WallTorchDeed( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -0,0 +1,159 @@
using System;
using Server;
using Server.Gumps;
using Server.Network;
namespace Server.Items
{
public class WoodenCoffinComponent : AddonComponent
{
public override int LabelNumber { get { return 1076274; } } // Coffin
public WoodenCoffinComponent( int itemID ) : base( itemID )
{
}
public WoodenCoffinComponent( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class WoodenCoffinAddon : BaseAddon
{
public override BaseAddonDeed Deed { get { return new WoodenCoffinDeed(); } }
[Constructable]
public WoodenCoffinAddon( bool east ) : base()
{
if ( east ) // east
{
AddComponent( new WoodenCoffinComponent( 0x1C41 ), 0, 0, 0 );
AddComponent( new WoodenCoffinComponent( 0x1C42 ), 1, 0, 0 );
AddComponent( new WoodenCoffinComponent( 0x1C43 ), 2, 0, 0 );
}
else // south
{
AddComponent( new WoodenCoffinComponent( 0x1C4F ), 0, 0, 0 );
AddComponent( new WoodenCoffinComponent( 0x1C50 ), 0, 1, 0 );
AddComponent( new WoodenCoffinComponent( 0x1C51 ), 0, 2, 0 );
}
}
public WoodenCoffinAddon( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class WoodenCoffinDeed : BaseAddonDeed
{
public override BaseAddon Addon { get { return new WoodenCoffinAddon( m_East ); } }
public override int LabelNumber { get { return 1076274; } } // Coffin
private bool m_East;
[Constructable]
public WoodenCoffinDeed() : base()
{
LootType = LootType.Blessed;
}
public WoodenCoffinDeed( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( IsChildOf( from.Backpack ) )
{
from.CloseGump( typeof( InternalGump ) );
from.SendGump( new InternalGump( this ) );
}
else
from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used.
}
private void SendTarget( Mobile m )
{
base.OnDoubleClick( m );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
private class InternalGump : Gump
{
private WoodenCoffinDeed m_Deed;
public InternalGump( WoodenCoffinDeed deed ) : base( 60, 36 )
{
m_Deed = deed;
AddPage( 0 );
AddBackground( 0, 0, 273, 324, 0x13BE );
AddImageTiled( 10, 10, 253, 20, 0xA40 );
AddImageTiled( 10, 40, 253, 244, 0xA40 );
AddImageTiled( 10, 294, 253, 20, 0xA40 );
AddAlphaRegion( 10, 10, 253, 304 );
AddButton( 10, 294, 0xFB1, 0xFB2, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 45, 296, 450, 20, 1060051, 0x7FFF, false, false ); // CANCEL
AddHtmlLocalized( 14, 12, 273, 20, 1076748, 0x7FFF, false, false ); // Please select your coffin position
AddPage( 1 );
AddButton( 19, 49, 0x845, 0x846, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 47, 213, 20, 1075386, 0x7FFF, false, false ); // South
AddButton( 19, 73, 0x845, 0x846, 2, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 44, 71, 213, 20, 1075387, 0x7FFF, false, false ); // East
}
public override void OnResponse( NetState sender, RelayInfo info )
{
if ( m_Deed == null || m_Deed.Deleted || info.ButtonID == 0 )
return;
m_Deed.m_East = ( info.ButtonID != 1 );
m_Deed.SendTarget( sender.Mobile );
}
}
}
}

View file

@ -0,0 +1,58 @@
using System;
using Server;
using Server.Gumps;
namespace Server.Items
{
public interface ITokunoDyable
{
}
public class HeritageToken : Item
{
public override int LabelNumber { get { return 1076596; } } // A Heritage Token
[Constructable]
public HeritageToken() : base( 0x367A )
{
LootType = LootType.Blessed;
Weight = 5.0;
}
public HeritageToken( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( IsChildOf( from.Backpack ) )
{
from.CloseGump( typeof( HeritageTokenGump ) );
from.SendGump( new HeritageTokenGump( this ) );
}
else
from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used.
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
list.Add( 1070998, String.Format( "#{0}", 1076595 ) ); // Use this to redeem<br>Your Heritage Items
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,33 @@
using System;
namespace Server.Items
{
public class EnchantedSwitch : Item
{
public override int LabelNumber{ get{ return 1072893; } } // enchanted switch
[Constructable]
public EnchantedSwitch() : base( 0x2F5C )
{
Weight = 1.0;
}
public EnchantedSwitch( 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,34 @@
using System;
namespace Server.Items
{
public class HollowPrism : Item
{
public override int LabelNumber{ get{ return 1072895; } } // hollow prism
[Constructable]
public HollowPrism() : base( 0x2F5D )
{
Weight = 1.0;
}
public HollowPrism( 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,34 @@
using System;
namespace Server.Items
{
public class JeweledFiligree : Item
{
public override int LabelNumber{ get{ return 1072894; } } // jeweled filigree
[Constructable]
public JeweledFiligree() : base( 0x2F5E )
{
Weight = 1.0;
}
public JeweledFiligree( 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,34 @@
using System;
namespace Server.Items
{
public class RunedPrism : Item
{
public override int LabelNumber{ get{ return 1073465; } } // runed prism
[Constructable]
public RunedPrism() : base( 0x2F57 )
{
Weight = 1.0;
}
public RunedPrism( 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,79 @@
using System;
using Server;
using Server.Targeting;
namespace Server.Items
{
public class RunedSwitch : Item
{
public override int LabelNumber{ get{ return 1072896; } } // runed switch
[Constructable]
public RunedSwitch() : base( 0x2F61 )
{
Weight = 1.0;
}
public RunedSwitch( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( IsChildOf( from.Backpack ) )
{
from.SendLocalizedMessage( 1075101 ); // Please select an item to recharge.
from.Target = new InternalTarget( this );
}
else
from.SendLocalizedMessage( 1060640 ); // The item must be in your backpack to use it.
}
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();
}
private class InternalTarget : Target
{
private RunedSwitch m_Item;
public InternalTarget( RunedSwitch item ) : base( 0, false, TargetFlags.None )
{
m_Item = item;
}
protected override void OnTarget( Mobile from, object o )
{
if ( m_Item == null || m_Item.Deleted )
return;
if ( o is BaseTalisman )
{
BaseTalisman talisman = (BaseTalisman) o;
if ( talisman.Charges == 0 )
{
talisman.Charges = talisman.MaxCharges;
m_Item.Delete();
from.SendLocalizedMessage( 1075100 ); // The item has been recharged.
}
else
from.SendLocalizedMessage( 1075099 ); // You cannot recharge that item until all of its current charges have been used.
}
else
from.SendLocalizedMessage( 1046439 ); // That is not a valid target.
}
}
}
}

View file

@ -0,0 +1,63 @@
using System;
using Server;
using Server.Mobiles;
using Server.Items;
namespace Server.Items
{
public class RandomTalisman : BaseTalisman
{
[Constructable]
public RandomTalisman() : base( GetRandomItemID() )
{
Summoner = BaseTalisman.GetRandomSummoner();
if ( Summoner.IsEmpty )
{
Removal = BaseTalisman.GetRandomRemoval();
if ( Removal != TalismanRemoval.None )
{
MaxCharges = BaseTalisman.GetRandomCharges();
MaxChargeTime = 1200;
}
}
else
{
MaxCharges = Utility.RandomMinMax( 10, 50 );
if ( Summoner.IsItem )
MaxChargeTime = 60;
else
MaxChargeTime = 1800;
}
Blessed = BaseTalisman.GetRandomBlessed();
Slayer = BaseTalisman.GetRandomSlayer();
Protection = BaseTalisman.GetRandomProtection();
Killer = BaseTalisman.GetRandomKiller();
Skill = BaseTalisman.GetRandomSkill();
ExceptionalBonus = BaseTalisman.GetRandomExceptional();
SuccessBonus = BaseTalisman.GetRandomSuccessful();
Charges = MaxCharges;
}
public RandomTalisman( 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,145 @@
using System;
using Server;
namespace Server.Items
{
[PropertyObject]
public class TalismanAttribute
{
private Type m_Type;
private TextDefinition m_Name;
private int m_Amount;
[CommandProperty( AccessLevel.GameMaster )]
public Type Type
{
get{ return m_Type; }
set{ m_Type = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public TextDefinition Name
{
get{ return m_Name; }
set{ m_Name = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public int Amount
{
get { return m_Amount; }
set { m_Amount = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool IsEmpty
{
get { return m_Type == null; }
}
[CommandProperty( AccessLevel.GameMaster )]
public bool IsItem
{
get { return m_Type != null && m_Type.Namespace.Equals( "Server.Items" ); }
}
public TalismanAttribute() : this( null, 0, 0 )
{
}
public TalismanAttribute( TalismanAttribute copy )
{
if ( copy != null )
{
m_Type = copy.Type;
m_Name = copy.Name;
m_Amount = copy.Amount;
}
}
public TalismanAttribute( Type type, TextDefinition name ) : this( type, name, 0 )
{
}
public TalismanAttribute( Type type, TextDefinition name, int amount )
{
m_Type = type;
m_Name = name;
m_Amount = amount;
}
public TalismanAttribute( GenericReader reader )
{
int version = reader.ReadInt();
SaveFlag flags = (SaveFlag) reader.ReadEncodedInt();
if ( GetSaveFlag( flags, SaveFlag.Type ) )
m_Type = ScriptCompiler.FindTypeByFullName( reader.ReadString(), false );
if ( GetSaveFlag( flags, SaveFlag.Name ) )
m_Name = new TextDefinition( reader );
if ( GetSaveFlag( flags, SaveFlag.Amount ) )
m_Amount = reader.ReadEncodedInt();
}
public override string ToString()
{
if ( m_Type != null )
return m_Type.Name;
return "None";
}
private static void SetSaveFlag( ref SaveFlag flags, SaveFlag toSet, bool setIf )
{
if ( setIf )
flags |= toSet;
}
private static bool GetSaveFlag( SaveFlag flags, SaveFlag toGet )
{
return ( (flags & toGet) != 0 );
}
[Flags]
private enum SaveFlag
{
None = 0x00000000,
Type = 0x00000001,
Name = 0x00000002,
Amount = 0x00000004,
}
public virtual void Serialize( GenericWriter writer )
{
writer.Write( (int) 0 ); // version
SaveFlag flags = SaveFlag.None;
SetSaveFlag( ref flags, SaveFlag.Type, m_Type != null );
SetSaveFlag( ref flags, SaveFlag.Name, m_Name != null );
SetSaveFlag( ref flags, SaveFlag.Amount, m_Amount != 0 );
writer.WriteEncodedInt( (int) flags );
if ( GetSaveFlag( flags, SaveFlag.Type ) )
writer.Write( m_Type.FullName );
if ( GetSaveFlag( flags, SaveFlag.Name ) )
m_Name.Serialize( writer );
if ( GetSaveFlag( flags, SaveFlag.Amount ) )
writer.WriteEncodedInt( m_Amount );
}
public int DamageBonus( Mobile to )
{
if ( to != null && to.GetType() == m_Type )
return m_Amount;
return 0;
}
}
}

View file

@ -0,0 +1,114 @@
using System;
using System.Collections.Generic;
using Server;
using Server.Mobiles;
namespace Server.Items
{
public enum TalismanSlayerName
{
None,
Bear,
Vermin,
Bat,
Mage,
Beetle,
Bird,
Ice,
Flame,
Bovine
}
public static class TalismanSlayer
{
private static Dictionary<TalismanSlayerName, Type[]> m_Table = new Dictionary<TalismanSlayerName,Type[]>();
public static void Initialize()
{
m_Table[ TalismanSlayerName.Bear ] = new Type[]
{
typeof( GrizzlyBear ), typeof( BlackBear ), typeof( BrownBear ), typeof( PolarBear ) //, typeof( Grobu )
};
m_Table[ TalismanSlayerName.Vermin ] = new Type[]
{
typeof( RatmanMage ), typeof( RatmanMage ), typeof( RatmanArcher ), typeof( Barracoon),
typeof( Ratman ), typeof( Sewerrat ), typeof( Rat ), typeof( GiantRat ) //, typeof( Chiikkaha )
};
m_Table[ TalismanSlayerName.Bat ] = new Type[]
{
typeof( Mongbat ), typeof( StrongMongbat ), typeof( VampireBat )
};
m_Table[ TalismanSlayerName.Mage ] = new Type[]
{
typeof( EvilMage ), typeof( EvilMageLord ), typeof( AncientLich ), typeof( Lich ), typeof( LichLord ),
typeof( SkeletalMage ), typeof( BoneMagi ), typeof( OrcishMage ), typeof( KhaldunZealot ), typeof( JukaMage ),
};
m_Table[ TalismanSlayerName.Beetle ] = new Type[]
{
typeof( Beetle ), typeof( RuneBeetle ), typeof( FireBeetle ), typeof( DeathwatchBeetle ),
typeof( DeathwatchBeetleHatchling )
};
m_Table[ TalismanSlayerName.Bird ] = new Type[]
{
typeof( Bird ), typeof( TropicalBird ), typeof( Chicken ), typeof( Crane ),
typeof( DesertOstard ), typeof( Eagle ), typeof( ForestOstard ), typeof( FrenziedOstard ),
typeof( Phoenix ), /*typeof( Pyre ), typeof( Swoop ), typeof( Saliva ),*/ typeof( Harpy ),
typeof( StoneHarpy ) // ?????
};
m_Table[ TalismanSlayerName.Ice ] = new Type[]
{
typeof( ArcticOgreLord ), typeof( IceElemental ), typeof( SnowElemental ), typeof( FrostOoze ),
typeof( IceFiend ), /*typeof( UnfrozenMummy ),*/ typeof( FrostSpider ), typeof( LadyOfTheSnow ),
typeof( FrostTroll ),
// TODO WinterReaper, check
typeof( IceSnake ), typeof( SnowLeopard ), typeof( PolarBear ), typeof( IceSerpent ), typeof( GiantIceWorm )
};
m_Table[ TalismanSlayerName.Flame ] = new Type[]
{
typeof( FireBeetle ), typeof( HellHound ), typeof( LavaSerpent ), typeof( FireElemental ),
typeof( PredatorHellCat ), typeof( Phoenix ), typeof( FireGargoyle ), typeof( HellCat ),
/*typeof( Pyre ),*/ typeof( FireSteed ), typeof( LavaLizard ),
// TODO check
typeof( LavaSnake ),
};
m_Table[ TalismanSlayerName.Bovine ] = new Type[]
{
typeof( Cow ), typeof( Bull ), typeof( Gaman ) /*, typeof( MinotaurCaptain ),
typeof( MinotaurScout ), typeof( Minotaur )*/
// TODO TormentedMinotaur
};
}
public static bool Slays( TalismanSlayerName name, Mobile m )
{
if ( !m_Table.ContainsKey( name ) )
return false;
Type[] types = m_Table[ name ];
if ( types == null || m == null )
return false;
Type type = m.GetType();
for ( int i = 0; i < types.Length; i++ )
{
if ( types[ i ] == type )
return true;
}
return false;
}
}
}

View file

@ -0,0 +1,614 @@
using System;
using System.Collections.Generic;
using Server.ContextMenus;
using Server.Regions;
using Server.Items;
using BunnyHole = Server.Mobiles.VorpalBunny.BunnyHole;
namespace Server.Mobiles
{
public class BaseTalismanSummon : BaseCreature
{
public override bool Commandable{ get{ return false; } }
public override bool InitialInnocent{ get{ return true; } }
public virtual bool IsInvulnerable{ get{ return true; } }
public BaseTalismanSummon() : base( AIType.AI_Melee, FightMode.None, 10, 1, 0.2, 0.4 )
{
}
public BaseTalismanSummon( Serial serial ) : base( serial )
{
}
public override void AddCustomContextEntries( Mobile from, List<ContextMenuEntry> list )
{
if ( from.Alive && ControlMaster == from )
list.Add( new TalismanReleaseEntry( this ) );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
private class TalismanReleaseEntry : ContextMenuEntry
{
private Mobile m_Mobile;
public TalismanReleaseEntry( Mobile m ) : base( 6118, 3 )
{
m_Mobile = m;
}
public override void OnClick()
{
Effects.SendLocationParticles( EffectItem.Create( m_Mobile.Location, m_Mobile.Map, EffectItem.DefaultDuration ), 0x3728, 8, 20, 5042 );
Effects.PlaySound( m_Mobile, m_Mobile.Map, 0x201 );
m_Mobile.Delete();
}
}
}
public class SummonedAntLion : BaseTalismanSummon
{
[Constructable]
public SummonedAntLion() : base()
{
Name = "an ant lion";
Body = 787;
BaseSoundID = 1006;
}
public SummonedAntLion( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SummonedArcticOgreLord : BaseTalismanSummon
{
[Constructable]
public SummonedArcticOgreLord() : base()
{
Name = "an arctic ogre lord";
Body = 135;
BaseSoundID = 427;
}
public SummonedArcticOgreLord( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SummonedBakeKitsune : BaseTalismanSummon
{
[Constructable]
public SummonedBakeKitsune() : base()
{
Name = "a bake kitsune";
Body = 246;
BaseSoundID = 0x4DD;
}
public SummonedBakeKitsune( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SummonedBogling : BaseTalismanSummon
{
[Constructable]
public SummonedBogling() : base()
{
Name = "a bogling";
Body = 779;
BaseSoundID = 422;
}
public SummonedBogling( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SummonedBullFrog : BaseTalismanSummon
{
[Constructable]
public SummonedBullFrog() : base()
{
Name = "a bull frog";
Body = 81;
Hue = Utility.RandomList( 0x5AC, 0x5A3, 0x59A, 0x591, 0x588, 0x57F );
BaseSoundID = 0x266;
}
public SummonedBullFrog( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SummonedChicken : BaseTalismanSummon
{
[Constructable]
public SummonedChicken() : base()
{
Name = "a chicken";
Body = 0xD0;
BaseSoundID = 0x6E;
}
public SummonedChicken( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SummonedCow : BaseTalismanSummon
{
[Constructable]
public SummonedCow() : base()
{
Name = "a cow";
Body = Utility.RandomList( 0xD8, 0xE7 );
BaseSoundID = 0x78;
}
public SummonedCow( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SummonedDoppleganger : BaseTalismanSummon
{
[Constructable]
public SummonedDoppleganger() : base()
{
Name = "a doppleganger";
Body = 0x309;
BaseSoundID = 0x451;
}
public SummonedDoppleganger( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SummonedFrostSpider : BaseTalismanSummon
{
[Constructable]
public SummonedFrostSpider() : base()
{
Name = "a frost spider";
Body = 20;
BaseSoundID = 0x388;
}
public SummonedFrostSpider( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SummonedGreatHart : BaseTalismanSummon
{
[Constructable]
public SummonedGreatHart() : base()
{
Name = "a great hart";
Body = 0xEA;
BaseSoundID = 0x82;
}
public SummonedGreatHart( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SummonedLavaSerpent : BaseTalismanSummon
{
[Constructable]
public SummonedLavaSerpent() : base()
{
Name = "a lava serpent";
Body = 90;
BaseSoundID = 219;
}
public SummonedLavaSerpent( Serial serial ) : base( serial )
{
}
public override void OnThink()
{
if ( m_NextWave < DateTime.Now )
AreaHeatDamage();
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
private DateTime m_NextWave;
public void AreaHeatDamage()
{
Mobile mob = ControlMaster;
if ( mob != null )
{
if ( mob.InRange( Location, 2 ) )
{
if ( mob.AccessLevel != AccessLevel.Player )
{
AOS.Damage( mob, Utility.Random( 2, 3 ), 0, 100, 0, 0, 0 );
mob.SendLocalizedMessage( 1008112 ); // The intense heat is damaging you!
}
}
GuardedRegion r = Region as GuardedRegion;
if ( r != null && mob.Alive )
{
foreach ( Mobile m in GetMobilesInRange( 2 ) )
{
if ( !mob.CanBeHarmful( m ) )
mob.CriminalAction( false );
}
}
}
m_NextWave = DateTime.Now + TimeSpan.FromSeconds( 3 );
}
}
public class SummonedOrcBrute : BaseTalismanSummon
{
[Constructable]
public SummonedOrcBrute() : base()
{
Body = 189;
Name = "an orc brute";
BaseSoundID = 0x45A;
}
public SummonedOrcBrute( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SummonedPanther : BaseTalismanSummon
{
[Constructable]
public SummonedPanther() : base()
{
Name = "a panther";
Body = 0xD6;
Hue = 0x901;
BaseSoundID = 0x462;
}
public SummonedPanther( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SummonedSheep : BaseTalismanSummon
{
[Constructable]
public SummonedSheep() : base()
{
Name = "a sheep";
Body = 0xCF;
BaseSoundID = 0xD6;
}
public SummonedSheep( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SummonedSkeletalKnight : BaseTalismanSummon
{
[Constructable]
public SummonedSkeletalKnight() : base()
{
Name = "a skeletal knight";
Body = 147;
BaseSoundID = 451;
}
public SummonedSkeletalKnight( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SummonedVorpalBunny : BaseTalismanSummon
{
[Constructable]
public SummonedVorpalBunny() : base()
{
Name = "a vorpal bunny";
Body = 205;
Hue = 0x480;
BaseSoundID = 0xC9;
Timer.DelayCall( TimeSpan.FromMinutes( 30.0 ), new TimerCallback( BeginTunnel ) );
}
public SummonedVorpalBunny( Serial serial ) : base( serial )
{
}
public virtual void BeginTunnel()
{
if ( Deleted )
return;
new BunnyHole().MoveToWorld( Location, Map );
Frozen = true;
Say( "* The bunny begins to dig a tunnel back to its underground lair *" );
PlaySound( 0x247 );
Timer.DelayCall( TimeSpan.FromSeconds( 5.0 ), new TimerCallback( Delete ) );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
public class SummonedWailingBanshee : BaseTalismanSummon
{
[Constructable]
public SummonedWailingBanshee() : base()
{
Name = "a wailing banshee";
Body = 310;
BaseSoundID = 0x482;
}
public SummonedWailingBanshee( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
}
}
}

View file

@ -1495,6 +1495,11 @@ namespace Server.Items
//if ( factor > 3.0 )
// factor = 3.0;
BaseTalisman talisman = attacker.Talisman as BaseTalisman;
if ( talisman != null && talisman.Killer != null )
percentageBonus += talisman.Killer.DamageBonus( defender );
percentageBonus = Math.Min( percentageBonus, 300 );
//damage = (int)(damage * factor);
@ -1943,6 +1948,11 @@ namespace Server.Items
if ( atkSlayer != null && atkSlayer.Slays( defender ) || atkSlayer2 != null && atkSlayer2.Slays( defender ) )
return CheckSlayerResult.Slayer;
BaseTalisman talisman = attacker.Talisman as BaseTalisman;
if ( talisman != null && TalismanSlayer.Slays( talisman.Slayer, defender ) )
return CheckSlayerResult.Slayer;
if ( !Core.SE )
{
ISlayer defISlayer = Spellbook.FindEquippedSpellbook( defender );

View file

@ -303,7 +303,14 @@ namespace Server
if( attrs != null )
value += attrs[attribute];
}
}
else if ( obj is BaseTalisman )
{
AosAttributes attrs = ((BaseTalisman)obj).Attributes;
if (attrs != null)
value += attrs[attribute];
}
}
return value;

View file

@ -630,6 +630,44 @@ namespace Server
{
return Construct( m_LibraryBookTypes ) as BaseBook;
}
public static BaseTalisman RandomTalisman()
{
BaseTalisman talisman = new BaseTalisman( BaseTalisman.GetRandomItemID() );
talisman.Summoner = BaseTalisman.GetRandomSummoner();
if ( talisman.Summoner.IsEmpty )
{
talisman.Removal = BaseTalisman.GetRandomRemoval();
if ( talisman.Removal != TalismanRemoval.None )
{
talisman.MaxCharges = BaseTalisman.GetRandomCharges();
talisman.MaxChargeTime = 1200;
}
}
else
{
talisman.MaxCharges = Utility.RandomMinMax( 10, 50 );
if ( talisman.Summoner.IsItem )
talisman.MaxChargeTime = 60;
else
talisman.MaxChargeTime = 1800;
}
talisman.Blessed = BaseTalisman.GetRandomBlessed();
talisman.Slayer = BaseTalisman.GetRandomSlayer();
talisman.Protection = BaseTalisman.GetRandomProtection();
talisman.Killer = BaseTalisman.GetRandomKiller();
talisman.Skill = BaseTalisman.GetRandomSkill();
talisman.ExceptionalBonus = BaseTalisman.GetRandomExceptional();
talisman.SuccessBonus = BaseTalisman.GetRandomSuccessful();
talisman.Charges = talisman.MaxCharges;
return talisman;
}
#endregion
#region Construction methods

View file

@ -24,6 +24,18 @@ namespace Server
m_String = text;
}
public TextDefinition( GenericReader reader )
{
int type = reader.ReadEncodedInt();
switch ( type )
{
case 1: m_Number = reader.ReadEncodedInt(); m_String = null; break;
case 2: m_Number = 0; m_String = reader.ReadString(); break;
default: m_Number = 0; m_String = null; break;
}
}
public override string ToString()
{
if ( m_Number > 0 )
@ -34,6 +46,22 @@ namespace Server
return "(empty)";
}
public virtual void Serialize( GenericWriter writer )
{
if ( m_Number > 0 )
{
writer.WriteEncodedInt( 1 );
writer.WriteEncodedInt( m_Number );
}
else if ( m_String != null )
{
writer.WriteEncodedInt( 2 );
writer.Write( m_String );
}
else
writer.WriteEncodedInt( 0 );
}
public static void AddTo( ObjectPropertyList list, TextDefinition def )
{
if ( def != null && def.m_Number > 0 )

View file

@ -56,6 +56,24 @@ namespace Server.Mobiles
m_NextAbilityTime = DateTime.Now + TimeSpan.FromSeconds( Utility.RandomMinMax( 5, 30 ) );
}
public override void OnDeath( Container c )
{
base.OnDeath( c );
if ( 0.05 > Utility.RandomDouble() )
{
if ( !IsParagon )
{
if ( 0.75 > Utility.RandomDouble() )
c.DropItem( DawnsMusicGear.RandomCommon );
else
c.DropItem( DawnsMusicGear.RandomUncommon );
}
else
c.DropItem( DawnsMusicGear.RandomRare );
}
}
public override int GetDeathSound()
{
return 0x423;
@ -148,7 +166,8 @@ namespace Server.Mobiles
}
}
public Betrayer( Serial serial ) : base( serial )
public Betrayer( Serial serial )
: base( serial )
{
}

View file

@ -52,6 +52,25 @@ namespace Server.Mobiles
if ( 0.4 > Utility.RandomDouble() )
PackItem( new ClockworkAssembly() );
}
public override void OnDeath( Container c )
{
base.OnDeath( c );
if ( 0.05 > Utility.RandomDouble() )
{
if ( !IsParagon )
{
if ( 0.75 > Utility.RandomDouble() )
c.DropItem( DawnsMusicGear.RandomCommon );
else
c.DropItem( DawnsMusicGear.RandomUncommon );
}
else
c.DropItem( DawnsMusicGear.RandomRare );
}
}
public override void GenerateLoot()
{
AddLoot( LootPack.Rich );

Some files were not shown because too many files have changed in this diff Show more