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

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

View file

@ -0,0 +1,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; } } // Dawn’s 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,149 @@
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) 1 ); // version
writer.Write( (int) m_Music );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
switch ( version )
{
case 1:
{
m_Music = (MusicName) reader.ReadInt();
break;
}
}
if ( version == 0 ) // Music wasn't serialized in version 0, pick a new track of random rarity
{
DawnsMusicRarity rarity;
double rand = Utility.RandomDouble();
if ( rand < 0.025 )
rarity = DawnsMusicRarity.Rare;
else if ( rand < 0.225 )
rarity = DawnsMusicRarity.Uncommon;
else
rarity = DawnsMusicRarity.Common;
m_Music = DawnsMusicBox.RandomTrack( rarity );
}
}
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; } } // Dupre’s 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,280 @@
using System;
using System.Collections.Generic;
using Server.Gumps;
using Server.Multis;
namespace Server.Items
{
public class EnhancedBandage : Bandage
{
public static int HealingBonus { get { return 10; } }
public override int LabelNumber { get { return 1152441; } } // enhanced bandage
[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 AddNameProperties( ObjectPropertyList list )
{
base.AddNameProperties( 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 override bool OnDragLift( Mobile from )
{
return false;
}
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( from );
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( from );
return allow;
}
else
{
from.SendLocalizedMessage( 1075209 ); // Only bandages may be dropped into the fountain.
return false;
}
}
public override void AddNameProperties( ObjectPropertyList list )
{
base.AddNameProperties( 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.UtcNow )
m_Timer = Timer.DelayCall( TimeSpan.Zero, RechargeTime, new TimerCallback( Recharge ) );
else
m_Timer = Timer.DelayCall( next - DateTime.UtcNow, RechargeTime, new TimerCallback( Recharge ) );
}
public void Recharge()
{
m_Charges = 10;
Enhance( null );
}
public void Enhance( Mobile from )
{
for( int i = Items.Count - 1; i >= 0 && m_Charges > 0; --i )
{
if ( Items[i] is EnhancedBandage )
continue;
Bandage bandage = Items[i] as Bandage;
if( bandage != null )
{
Item enhanced;
if( bandage.Amount > m_Charges )
{
bandage.Amount -= m_Charges;
enhanced = new EnhancedBandage( m_Charges );
m_Charges = 0;
}
else
{
enhanced = new EnhancedBandage( bandage.Amount );
m_Charges -= bandage.Amount;
bandage.Delete();
}
if ( from == null || !TryDropItem( from, enhanced, false ) ) // try stacking first
DropItem( enhanced );
}
}
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,41 @@
using System;
namespace Server.Items
{
public class OssianGrimoire : NecromancerSpellbook, ITokunoDyable
{
public override int LabelNumber { get { return 1078148; } } // Ossian Grimoire
[Constructable]
public OssianGrimoire()
{
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( 1 ); //version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
if ( version == 0 )
Attributes.IncreasedKarmaLoss = 5;
}
}
}

View file

@ -0,0 +1,45 @@
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;
}
public QuiverOfInfinity( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 2 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
if ( version < 1 && DamageIncrease == 0 )
DamageIncrease = 10;
if ( version < 2 && Attributes.WeaponDamage == 10 )
Attributes.WeaponDamage = 0;
}
}
}

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(IEntity 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();
}
}
}