added:ML aquariums, ML potions,runebook and spellbook makers mark, two new runic tools, NPC vendor updates

This commit is contained in:
xavier 2011-10-23 03:38:07 +00:00
parent 028b5ad696
commit cbd45b53b8
59 changed files with 3351 additions and 53 deletions

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,245 @@
using System;
using Server;
using Server.Mobiles;
using Server.Items;
using Server.Targeting;
namespace Server.Items
{
public class AquariumFishingNet : Item
{
public override int LabelNumber{ get{ return 1074463; } } // An aquarium fishing net
private static int[] m_Hues = { 0x09B, 0x0CD, 0x0D3, 0x14D, 0x1DD, 0x1E9, 0x1F4, 0x373, 0x451, 0x47F, 0x489, 0x492, 0x4B5, 0x8AA };
private static int[] m_WaterTiles = { 0x00A8, 0x00AB, 0x0136, 0x0137 };
private Mobile m_Player;
[Constructable]
public AquariumFishingNet() : base( 0xDC8 )
{
Weight = 1.0;
if ( 0.01 > Utility.RandomDouble() )
Hue = Utility.RandomList( m_Hues );
}
public AquariumFishingNet( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
if ( !IsChildOf( from.Backpack ) )
{
from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it.
return;
}
from.SendLocalizedMessage( 1010484 ); // Where do you wish to use the net?
from.BeginTarget( -1, true, TargetFlags.None, new TargetCallback( OnTarget ) );
}
public void OnTarget( Mobile from, object obj )
{
m_Player = from;
if ( Deleted )
return;
IPoint3D p3D = obj as IPoint3D;
if ( p3D == null )
return;
Map map = from.Map;
if ( map == null || map == Map.Internal )
return;
int x = p3D.X, y = p3D.Y;
if ( !from.InRange( p3D, 6 ) )
{
from.SendLocalizedMessage( 500976 ); // You need to be closer to the water to fish!
}
else if ( FullValidation( map, x, y ) )
{
Point3D p = new Point3D( x, y, map.GetAverageZ( x, y ) );
Movable = false;
MoveToWorld( p, map );
from.Animate( 12, 5, 1, true, false, 0 );
Timer.DelayCall( TimeSpan.FromSeconds( 1.5 ), TimeSpan.FromSeconds( 1.0 ), 20, new TimerStateCallback( DoEffect ), new object[]{ p, 0 } );
from.SendLocalizedMessage( 1010487 ); // You plunge the net into the sea...
}
else
{
from.SendLocalizedMessage( 1010485 ); // You can only use this net in deep water!
}
}
public static bool FullValidation( Map map, int x, int y )
{
bool valid = ValidateDeepWater( map, x, y );
for ( int j = 1, offset = 5; valid && j <= 5; ++j, offset += 5 )
{
if ( !ValidateDeepWater( map, x + offset, y + offset ) )
valid = false;
else if ( !ValidateDeepWater( map, x + offset, y - offset ) )
valid = false;
else if ( !ValidateDeepWater( map, x - offset, y + offset ) )
valid = false;
else if ( !ValidateDeepWater( map, x - offset, y - offset ) )
valid = false;
}
return valid;
}
private static bool ValidateDeepWater( Map map, int x, int y )
{
int tileID = map.Tiles.GetLandTile( x, y ).ID;
bool water = false;
for ( int i = 0; !water && i < m_WaterTiles.Length; i += 2 )
water = ( tileID >= m_WaterTiles[i] && tileID <= m_WaterTiles[i + 1] );
return water;
}
private void DoEffect( object state )
{
if ( Deleted )
return;
object[] states = (object[])state;
Point3D p = (Point3D)states[0];
int index = (int)states[1];
states[1] = ++index;
if ( index == 1 )
{
Effects.SendLocationEffect( p, Map, 0x352D, 16, 4 );
Effects.PlaySound( p, Map, 0x364 );
}
else if ( index <= 10 || index == 20 )
{
for ( int i = 0; i < 3; ++i )
{
int x, y;
switch ( Utility.Random( 8 ) )
{
default:
case 0: x = -1; y = -1; break;
case 1: x = -1; y = 0; break;
case 2: x = -1; y = +1; break;
case 3: x = 0; y = -1; break;
case 4: x = 0; y = +1; break;
case 5: x = +1; y = -1; break;
case 6: x = +1; y = 0; break;
case 7: x = +1; y = +1; break;
}
Effects.SendLocationEffect( new Point3D( p.X + x, p.Y + y, p.Z ), Map, 0x352D, 16, 4 );
}
Effects.PlaySound( p, Map, 0x364 );
if ( index == 20 )
FinishEffect( p );
else
this.Z -= 1;
}
}
private void FinishEffect( Point3D p )
{
BaseFish fish = GiveFish( m_Player.Skills.Fishing.Base / 100 );
if ( fish != null )
{
Item[] items = m_Player.Backpack.FindItemsByType( typeof( FishBowl ) );
foreach ( FishBowl bowl in items )
{
if ( !bowl.Deleted && bowl.Empty )
{
bowl.AddItem( fish );
bowl.InvalidateProperties();
m_Player.SendLocalizedMessage( 1074489 ); // A live creature jumps into the fish bowl in your pack!
Delete();
return;
}
}
if ( !m_Player.PlaceInBackpack( fish ) )
{
m_Player.SendLocalizedMessage( 500720 ); // You don't have enough room in your backpack!
fish.MoveToWorld( m_Player.Location, m_Player.Map );
}
else
m_Player.SendLocalizedMessage( 1074490 ); // A live creature flops around in your pack before running out of air.
fish.Kill();
Delete();
}
else
{
Movable = true;
if ( !m_Player.PlaceInBackpack( this ) )
MoveToWorld( m_Player.Location, m_Player.Map );
m_Player.SendLocalizedMessage( 1074487 ); // The creatures are too quick for you!
}
}
public BaseFish GiveFish( double skill )
{
if ( 0.004 * skill > Utility.RandomDouble() ) return new Shrimp();
if ( 0.008 * skill > Utility.RandomDouble() ) return new SmallMouthSuckerFin();
if ( 0.008 * skill > Utility.RandomDouble() ) return new SpinedScratcherFish();
if ( 0.022 * skill > Utility.RandomDouble() ) return new SpottedBuccaneer();
if ( 0.022 * skill > Utility.RandomDouble() ) return new YellowFinBluebelly();
if ( 0.030 * skill > Utility.RandomDouble() ) return new BritainCrownFish();
if ( 0.030 * skill > Utility.RandomDouble() ) return new PurpleFrog();
if ( 0.032 * skill > Utility.RandomDouble() ) return new VesperReefTiger();
if ( 0.038 * skill > Utility.RandomDouble() ) return new KillerFrog();
if ( 0.040 * skill > Utility.RandomDouble() ) return new AlbinoFrog();
if ( 0.046 * skill > Utility.RandomDouble() ) return new LongClawCrab();
if ( 0.052 * skill > Utility.RandomDouble() ) return new SpeckledCrab();
if ( 0.058 * skill > Utility.RandomDouble() ) return new Jellyfish();
if ( 0.062 * skill > Utility.RandomDouble() ) return new NujelmHoneyFish();
if ( 0.064 * skill > Utility.RandomDouble() ) return new MakotoCourtesanFish();
if ( 0.076 * skill > Utility.RandomDouble() ) return new AlbinoCourtesanFish();
if ( 0.082 * skill > Utility.RandomDouble() ) return new RedDartFish();
if ( 0.088 * skill > Utility.RandomDouble() ) return new MinocBlueFish();
if ( 0.090 * skill > Utility.RandomDouble() ) return new GoldenBroadtail();
if ( 0.148 * skill > Utility.RandomDouble() ) return new FandancerFish();
return null;
}
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,35 @@
using System;
using Server;
using Server.Mobiles;
namespace Server.Items
{
public class AquariumFood : Item
{
public override int LabelNumber{ get{ return 1074819; } } // Aquarium food
[Constructable]
public AquariumFood() : base( 0xEFC )
{
}
public AquariumFood( 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,108 @@
using System;
using System.Collections;
using Server.Gumps;
using Server.Items;
namespace Server.Items
{
public class AquariumGump : Gump
{
private Aquarium m_Aquarium;
private bool m_Edit;
public AquariumGump( Aquarium aquarium, bool edit ) : base( 100, 100 )
{
m_Aquarium = aquarium;
m_Edit = edit;
Closable = true;
Disposable = true;
Dragable = true;
Resizable = false;
AddPage( 0 );
AddBackground( 0, 0, 350, 323, 0xE10 );
AddImage( 0, 0, 0x2C96 );
if ( m_Aquarium.Items.Count == 0 )
return;
for ( int i = 1; i <= m_Aquarium.Items.Count; i ++ )
DisplayPage( i );
}
public virtual void DisplayPage( int page )
{
AddPage( page );
Item item = m_Aquarium.Items[ page - 1 ];
// item name
if ( item.LabelNumber != 0 )
AddHtmlLocalized( 20, 217, 250, 20, item.LabelNumber, 0xFFFFFF, false, false ); // Name
// item details
if ( item is BaseFish )
{
BaseFish fish = (BaseFish) item;
if ( !fish.Dead && fish.ItemID > 0x3B0F )
AddHtmlLocalized( 20, 239, 315, 20, 1074422, 0xFFFFFF, false, false ); // A very unusual live aquarium creature
else if ( !fish.Dead && fish.Hue > 0 )
AddHtmlLocalized( 20, 239, 315, 20, 1074423, 0xFFFFFF, false, false ); // A live aquarium creature of unusual color
else if ( !fish.Dead )
AddHtmlLocalized( 20, 239, 315, 20, 1073622, 0xFFFFFF, false, false ); // A live aquarium creature
else if ( fish.Dead && fish.ItemID > 0x3B0F )
AddHtmlLocalized( 20, 239, 315, 20, 1074424, 0xFFFFFF, false, false ); // A very unusual dead aquarium creature
else if ( fish.Dead && fish.Hue > 0 )
AddHtmlLocalized( 20, 239, 315, 20, 1074425, 0xFFFFFF, false, false ); // A dead aquarium creature of unusual color
else if ( fish.Dead )
AddHtmlLocalized( 20, 239, 315, 20, 1073623, 0xFFFFFF, false, false ); // A dead aquarium creature
}
else
{
AddHtmlLocalized( 20, 239, 315, 20, 1073634, 0xFFFFFF, false, false ); // An aquarium decoration
}
// item image
AddItem( 150, 80, item.ItemID, item.Hue );
// item number / all items
AddHtml( 20, 195, 250, 20, String.Format( "<BASEFONT COLOR=#{0:X6}>{1}</BASEFONT>", 0xFFFFFF, page + "/" + ( m_Aquarium.Items.Count ) ), false, false );
// remove item
if ( m_Edit )
{
AddBackground( 230, 195, 100, 26, 0x13BE );
AddButton( 235, 200, 0x845, 0x846, page, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 260, 198, 60, 26, 1073838, 0x0, false, false ); // Remove
}
// next page
if ( page < m_Aquarium.Items.Count )
{
AddButton( 195, 280, 0xFA5, 0xFA7, 0, GumpButtonType.Page, page + 1 );
AddHtmlLocalized( 230, 283, 100, 18, 1044045, 0xFFFFFF, false, false ); // NEXT PAGE
}
// previous page
if ( page > 1 )
{
AddButton( 45, 280, 0xFAE, 0xFAF, 0, GumpButtonType.Page, page - 1 );
AddHtmlLocalized( 80, 283, 100, 18, 1044044, 0xFFFFFF, false, false ); // PREV PAGE
}
}
public override void OnResponse( Server.Network.NetState sender, RelayInfo info )
{
if ( m_Aquarium == null || m_Aquarium.Deleted )
return;
if ( info.ButtonID > 0 && info.ButtonID <= m_Aquarium.Items.Count && m_Edit )
m_Aquarium.RemoveItem( sender.Mobile, info.ButtonID - 1 );
if ( info.ButtonID > 0 )
sender.Mobile.SendGump( new AquariumGump( m_Aquarium, m_Edit ) );
}
}
}

View file

@ -0,0 +1,89 @@
using System;
using Server;
namespace Server.Items
{
public enum WaterState
{
Dead,
Dying,
Unhealthy,
Healthy,
Strong,
}
public enum FoodState
{
Dead,
Starving,
Hungry,
Full,
Overfed,
}
[PropertyObject]
public class AquariumState
{
private int m_State;
private int m_Maintain;
private int m_Improve;
private int m_Added;
[CommandProperty( AccessLevel.GameMaster )]
public int State
{
get{ return m_State; }
set{ m_State = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public int Maintain
{
get{ return m_Maintain; }
set{ m_Maintain = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public int Improve
{
get{ return m_Improve; }
set{ m_Improve = value; }
}
[CommandProperty( AccessLevel.GameMaster )]
public int Added
{
get{ return m_Added; }
set{ m_Added = value; }
}
public AquariumState()
{
}
public override string ToString()
{
return "...";
}
public virtual void Serialize( GenericWriter writer )
{
writer.Write( 0 ); // version
writer.Write( m_State );
writer.Write( m_Maintain );
writer.Write( m_Improve );
writer.Write( m_Added );
}
public virtual void Deserialize( GenericReader reader )
{
int version = reader.ReadInt();
m_State = reader.ReadInt();
m_Maintain = reader.ReadInt();
m_Improve = reader.ReadInt();
m_Added = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,104 @@
using System;
using Server;
using Server.Items;
namespace Server.Items
{
public class BaseFish : Item
{
private Timer m_Timer;
[CommandProperty( AccessLevel.GameMaster )]
public bool Dead
{
get{ return ItemID == 0x3B0C; }
}
[Constructable]
public BaseFish( int itemID ) : base( itemID )
{
StartTimer();
}
public BaseFish( Serial serial ) : base( serial )
{
}
public virtual void StartTimer()
{
if ( m_Timer != null )
m_Timer.Stop();
m_Timer = Timer.DelayCall( TimeSpan.FromMinutes( 5 ), new TimerCallback( Kill ) );
}
public virtual void StopTimer()
{
if ( m_Timer != null )
m_Timer.Stop();
m_Timer = null;
}
public virtual void Kill()
{
ItemID = 0x3B0C;
StopTimer();
InvalidateProperties();
}
public override bool DropToItem( Mobile from, Item target, Point3D p )
{
if ( target is FishBowl || target is Aquarium )
{
if ( base.DropToItem( from, target, p ) )
{
StopTimer();
return true;
}
}
return base.DropToItem( from, target, p );
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( !Dead && ItemID > 0x3B0F )
list.Add( 1074422 ); // A very unusual live aquarium creature
else if ( !Dead && Hue > 0 )
list.Add( 1074423 ); // A live aquarium creature of unusual color
else if ( !Dead )
list.Add( 1073622 ); // A live aquarium creature
else if ( Dead && ItemID > 0x3B0F )
list.Add( 1074424 ); // A very unusual dead aquarium creature
else if ( Dead && Hue > 0 )
list.Add( 1074425 ); // A dead aquarium creature of unusual color
else if ( Dead )
list.Add( 1073623 ); // A dead aquarium creature
if ( !Dead && m_Timer != null )
list.Add( 1074507 ); // Gasping for air
}
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();
if ( !( Parent is Aquarium ) && !( Parent is FishBowl ) )
StartTimer();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class AlbinoCourtesanFish : BaseFish
{
public override int LabelNumber{ get{ return 1074592; } } // Albino Courtesan Fish
[Constructable]
public AlbinoCourtesanFish() : base( 0x3B04 )
{
}
public AlbinoCourtesanFish( 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;
using Server;
namespace Server.Items
{
public class AlbinoFrog : BaseFish
{
public override int LabelNumber{ get{ return 1073824; } } // An Albino Frog
[Constructable]
public AlbinoFrog() : base( 0x3B0D )
{
Hue = 0x47E;
}
public AlbinoFrog( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class BritainCrownFish : BaseFish
{
public override int LabelNumber{ get{ return 1074589; } } // Britain Crown Fish
[Constructable]
public BritainCrownFish() : base( 0x3AFF )
{
}
public BritainCrownFish( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class FandancerFish : BaseFish
{
public override int LabelNumber{ get{ return 1074591; } } // Fandancer Fish
[Constructable]
public FandancerFish() : base( 0x3B02 )
{
}
public FandancerFish( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class GoldenBroadtail : BaseFish
{
public override int LabelNumber{ get{ return 1073828; } } // A Golden Broadtail
[Constructable]
public GoldenBroadtail() : base( 0x3B03 )
{
}
public GoldenBroadtail( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class Jellyfish : BaseFish
{
public override int LabelNumber{ get{ return 1074593; } } // Jellyfish
[Constructable]
public Jellyfish() : base( 0x3B0E )
{
}
public Jellyfish( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class KillerFrog : BaseFish
{
public override int LabelNumber{ get{ return 1073825; } } // A Killer Frog
[Constructable]
public KillerFrog() : base( 0x3B0D )
{
}
public KillerFrog( 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;
using Server;
namespace Server.Items
{
public class LongClawCrab : BaseFish
{
public override int LabelNumber{ get{ return 1073827; } } // A Long Claw Crab
[Constructable]
public LongClawCrab() : base( 0x3AFC )
{
Hue = 0x527;
}
public LongClawCrab( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class MakotoCourtesanFish : BaseFish
{
public override int LabelNumber{ get{ return 1073835; } } // A Makoto Courtesan Fish
[Constructable]
public MakotoCourtesanFish() : base( 0x3AFD )
{
}
public MakotoCourtesanFish( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class MinocBlueFish : BaseFish
{
public override int LabelNumber{ get{ return 1073829; } } // A Minoc Blue Fish
[Constructable]
public MinocBlueFish() : base( 0x3AFE )
{
}
public MinocBlueFish( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class NujelmHoneyFish : BaseFish
{
public override int LabelNumber{ get{ return 1073830; } } // A Nujel'm Honey Fish
[Constructable]
public NujelmHoneyFish() : base( 0x3B06 )
{
}
public NujelmHoneyFish( 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;
using Server;
namespace Server.Items
{
public class PurpleFrog : BaseFish
{
public override int LabelNumber{ get{ return 1073823; } } // A Purple Frog
[Constructable]
public PurpleFrog() : base( 0x3B0D )
{
Hue = 0x4FA;
}
public PurpleFrog( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class RedDartFish : BaseFish
{
public override int LabelNumber{ get{ return 1073834; } } // A Red Dart Fish
[Constructable]
public RedDartFish() : base( 0x3B00 )
{
}
public RedDartFish( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class Shrimp : BaseFish
{
public override int LabelNumber{ get{ return 1074596; } } // Shrimp
[Constructable]
public Shrimp() : base( 0x3B14 )
{
}
public Shrimp( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class SmallMouthSuckerFin : BaseFish
{
public override int LabelNumber{ get{ return 1074590; } } // Small Mouth Sucker Fin
[Constructable]
public SmallMouthSuckerFin() : base( 0x3B01 )
{
}
public SmallMouthSuckerFin( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class SpeckledCrab : BaseFish
{
public override int LabelNumber{ get{ return 1073826; } } // A Speckled Crab
[Constructable]
public SpeckledCrab() : base( 0x3AFC )
{
}
public SpeckledCrab( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class SpinedScratcherFish : BaseFish
{
public override int LabelNumber{ get{ return 1073832; } } // A Spined Scratcher Fish
[Constructable]
public SpinedScratcherFish() : base( 0x3B05 )
{
}
public SpinedScratcherFish( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class SpottedBuccaneer : BaseFish
{
public override int LabelNumber{ get{ return 1073833; } } // A Spotted Buccaneer
[Constructable]
public SpottedBuccaneer() : base( 0x3B09 )
{
}
public SpottedBuccaneer( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class VesperReefTiger : BaseFish
{
public override int LabelNumber{ get{ return 1073836; } } // A Vesper Reef Tiger
[Constructable]
public VesperReefTiger() : base( 0x3B08 )
{
}
public VesperReefTiger( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class YellowFinBluebelly : BaseFish
{
public override int LabelNumber{ get{ return 1073831; } } // A Yellow Fin Bluebelly
[Constructable]
public YellowFinBluebelly() : base( 0x3B07 )
{
}
public YellowFinBluebelly( 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,127 @@
using System;
using System.Collections.Generic;
using Server;
using Server.Mobiles;
using Server.ContextMenus;
namespace Server.Items
{
public class FishBowl : Container
{
public override int LabelNumber{ get{ return 1074499; } } // A fish bowl
public bool Empty
{
get{ return Items.Count == 0; }
}
public BaseFish Fish
{
get
{
if ( Empty )
return null;
if ( Items[ 0 ] is BaseFish )
return (BaseFish) Items[ 0 ];
return null;
}
}
[Constructable]
public FishBowl() : base( 0x241C )
{
Hue = 0x47E;
MaxItems = 1;
Weight = 1;
}
public FishBowl( Serial serial ) : base( serial )
{
}
public override void OnDoubleClick( Mobile from )
{
}
public override bool OnDragDrop( Mobile from, Item dropped )
{
if ( dropped is BaseFish && Empty )
{
((BaseFish) dropped).StopTimer();
InvalidateProperties();
return base.OnDragDrop( from, dropped );
}
else
{
from.SendLocalizedMessage( 1074836 ); // The container can not hold that type of object.
return false;
}
}
public override void GetProperties( ObjectPropertyList list )
{
list.Add( 1074499 ); // A fish bowl
list.Add( 1072788, Weight.ToString() ); // Weight: ~1_WEIGHT~ stone
if ( !Empty )
list.Add( 1074494, "#" + Fish.LabelNumber ); // Contains: ~1_CREATURE~
list.Add( 1073841, "{0}\t{1}\t{2}", Items.Count, MaxItems, GetTotal( TotalType.Weight ) ); // Contents: ~1_COUNT~/~2_MAXCOUNT~ items, ~3_WEIGHT~ stones
}
public override void GetContextMenuEntries( Mobile from, List<ContextMenuEntry> list )
{
base.GetContextMenuEntries( from, list );
if ( !Empty )
list.Add( new RemoveCreature( this ) );
}
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 RemoveCreature : ContextMenuEntry
{
private FishBowl m_Bowl;
public RemoveCreature( FishBowl bowl ) : base( 6242, 0 ) // Remove creature
{
m_Bowl = bowl;
}
public override void OnClick()
{
if ( m_Bowl == null || m_Bowl.Deleted )
return;
BaseFish fish = m_Bowl.Fish;
if ( fish != null )
{
if ( !Owner.From.PlaceInBackpack( fish ) )
Owner.From.SendLocalizedMessage( 1074496 ); // There is no room in your pack for the creature.
else
{
Owner.From.SendLocalizedMessage( 1074495 ); // The creature has been removed from the fish bowl.
fish.StartTimer();
m_Bowl.InvalidateProperties();
}
}
}
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class BrineShrimp : BaseFish
{
public override int LabelNumber{ get{ return 1074415; } } // Brine shrimp
[Constructable]
public BrineShrimp() : base( 0x3B11 )
{
}
public BrineShrimp( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class Coral : BaseFish
{
public override int LabelNumber{ get{ return 1074588; } } // Coral
[Constructable]
public Coral() : base( Utility.RandomList( 0x3AF9, 0x3AFA, 0x3AFB ) )
{
}
public Coral( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class FullMoonFish : BaseFish
{
public override int LabelNumber{ get{ return 1074597; } } // A Full Moon Fish
[Constructable]
public FullMoonFish() : base( 0x3B15 )
{
}
public FullMoonFish( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class SeaHorseFish : BaseFish
{
public override int LabelNumber{ get{ return 1074414; } } // A sea horse
[Constructable]
public SeaHorseFish() : base( 0x3B10 )
{
}
public SeaHorseFish( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class StrippedFlakeFish : BaseFish
{
public override int LabelNumber{ get{ return 1074595; } } // Stripped Flake Fish
[Constructable]
public StrippedFlakeFish() : base( 0x3B0A )
{
}
public StrippedFlakeFish( Serial serial ) : base( serial )
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,33 @@
using System;
using Server;
namespace Server.Items
{
public class StrippedSosarianSwill : BaseFish
{
public override int LabelNumber{ get{ return 1074594; } } // Stripped Sosarian Swill
[Constructable]
public StrippedSosarianSwill() : base( 0x3B0A )
{
}
public StrippedSosarianSwill( 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,41 @@
using System;
using Server;
using Server.Items;
namespace Server.Items
{
public class AquariumMessage : MessageInABottle
{
public override int LabelNumber{ get{ return 1073894; } } // Message in a Bottle
[Constructable]
public AquariumMessage() : base()
{
}
public AquariumMessage( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
list.Add( 1073634 ); // An aquarium decoration
}
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,41 @@
using System;
using Server;
using Server.Items;
namespace Server.Items
{
public class CaptainBlackheartsFishingPole : FishingPole
{
public override int LabelNumber{ get{ return 1074571; } } // Captain Blackheart's Fishing Pole
[Constructable]
public CaptainBlackheartsFishingPole() : base()
{
}
public CaptainBlackheartsFishingPole( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
list.Add( 1073634 ); // An aquarium decoration
}
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,41 @@
using System;
using Server;
using Server.Items;
namespace Server.Items
{
public class CraftysFishingHat : BaseHat
{
public override int LabelNumber{ get{ return 1074572; } } // Crafty's Fishing Hat
[Constructable]
public CraftysFishingHat() : base( 0x1713 )
{
}
public CraftysFishingHat( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
list.Add( 1073634 ); // An aquarium decoration
}
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,41 @@
using System;
using Server;
namespace Server.Items
{
public class FishBones : Item
{
public override int LabelNumber{ get{ return 1074601; } } // Fish bones
[Constructable]
public FishBones() : base( 0x3B0C )
{
Weight = 1;
}
public FishBones( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
list.Add( 1073634 ); // An aquarium decoration
}
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,42 @@
using System;
using Server;
using Server.Items;
namespace Server.Items
{
public class IslandStatue : Item
{
public override int LabelNumber{ get{ return 1074600; } } // An island statue
[Constructable]
public IslandStatue() : base( 0x3B0F )
{
Weight = 1;
}
public IslandStatue( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
list.Add( 1073634 ); // An aquarium decoration
}
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,42 @@
using System;
using Server;
using Server.Items;
namespace Server.Items
{
public class Shell : Item
{
public override int LabelNumber{ get{ return 1074598; } } // A shell
[Constructable]
public Shell() : base( Utility.RandomList( 0x3B12, 0x3B13 ) )
{
Weight = 1;
}
public Shell( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
list.Add( 1073634 ); // An aquarium decoration
}
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,43 @@
using System;
using Server;
using Server.Items;
namespace Server.Items
{
[FlipableAttribute( 0x14F3, 0x14F4 )]
public class ToyBoat : Item
{
public override int LabelNumber{ get{ return 1074363; } } // A toy boat
[Constructable]
public ToyBoat() : base( 0x14F3 )
{
Weight = 1;
}
public ToyBoat( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
list.Add( 1073634 ); // An aquarium decoration
}
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,52 @@
using System;
using Server;
namespace Server.Items
{
public class WaterloggedBoots : BaseShoes
{
public override int LabelNumber{ get{ return 1074364; } } // Waterlogged boots
[Constructable]
public WaterloggedBoots() : base( 0x1711 )
{
if ( Utility.RandomBool() )
{
// thigh boots
ItemID = 0x1711;
Weight = 4.0;
}
else
{
// boots
ItemID = 0x170B;
Weight = 3.0;
}
}
public WaterloggedBoots( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
list.Add( 1073634 ); // An aquarium decoration
}
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,35 @@
using System;
using Server;
using Server.Mobiles;
namespace Server.Items
{
public class VacationWafer : Item
{
public override int LabelNumber{ get{ return 1074431; } } // An aquarium flake sphere
[Constructable]
public VacationWafer() : base( 0x971 )
{
}
public VacationWafer( 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;
namespace Server.Items
{
public class BrightsightLenses : ElvenGlasses
{
public override int LabelNumber{ get{ return 1075039; } } // Brightsight Lenses
public override int BasePhysicalResistance{ get{ return 9; } }
public override int BaseFireResistance{ get{ return 29; } }
public override int BaseColdResistance{ get{ return 7; } }
public override int BasePoisonResistance{ get{ return 8; } }
public override int BaseEnergyResistance{ get{ return 7; } }
public override int InitMinHits{ get{ return 255; } }
public override int InitMaxHits{ get{ return 255; } }
[Constructable]
public BrightsightLenses() : base()
{
Hue = 0x501;
Attributes.NightSight = 1;
Attributes.RegenMana = 3;
WeaponAttributes.SelfRepair = 3;
}
public BrightsightLenses( 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

@ -18,7 +18,7 @@ namespace Server.Items
SkillBonuses.SetValues( 0, SkillName.Archery, 10 );
WeaponAttributes.ResistFireBonus = 25;
Velocity = 15;
Velocity = 15;
}
public override void GetDamageTypes( Mobile wielder, out int phys, out int fire, out int cold, out int pois, out int nrgy, out int chaos, out int direct )

View file

@ -13,12 +13,12 @@ namespace Server.Items
[Constructable]
public Windsong() : base()
{
Hue = 0xAC;
Hue = 0xF7;
Attributes.WeaponDamage = 35;
WeaponAttributes.SelfRepair = 3;
Velocity = 25;
Velocity = 25;
}
public Windsong( Serial serial ) : base( serial )

View file

@ -196,12 +196,6 @@ namespace Server.Items
[CommandProperty( AccessLevel.GameMaster )]
public int AddonNumber{ get{ return m_AddonNumber; } set{ m_AddonNumber = value; InvalidateProperties(); } }
[CommandProperty( AccessLevel.GameMaster )]
public Mobile Hunter{ get{ return m_Hunter; } set{ m_Hunter = value; InvalidateProperties(); } }
[CommandProperty( AccessLevel.GameMaster )]
public int AnimalWeight{ get{ return m_AnimalWeight; } set{ m_AnimalWeight = value; InvalidateProperties(); } }
public override int LabelNumber{ get{ return m_AddonNumber; } }
[Constructable]
@ -388,9 +382,10 @@ namespace Server.Items
}
public TrophyDeed( TaxidermyKit.TrophyInfo info, Mobile hunter, int animalWeight )
: this( info.NorthID + 7, info.NorthID, info.DeedNumber, info.AddonNumber, hunter, animalWeight )
: this( info.NorthID + 7, info.NorthID, info.DeedNumber, info.AddonNumber )
{
}
public TrophyDeed( Serial serial ) : base( serial )
{
}

View file

@ -93,13 +93,13 @@ namespace Server.Items
public override int LabelNumber
{
get
{
if ( m_Held == 0 )
return 1041084; // A specially lined keg for potions.
else if( m_Type >= PotionEffect.Conflagration )
return 1072658 + (int) m_Type - (int) PotionEffect.Conflagration;
else
return ( 1041620 + (int)m_Type );
{
if( m_Held > 0 && ( int )m_Type >= ( int )PotionEffect.Conflagration )
{
return 1072658 + ( int )m_Type - ( int )PotionEffect.Conflagration;
}
return (m_Held > 0 ? 1041620 + (int)m_Type : 1041641);
}
}
@ -230,6 +230,14 @@ namespace Server.Items
}
else if ( m_Held == 0 )
{
#region Mondain's Legacy
if ( (int) pot.PotionEffect >= (int) PotionEffect.Invisibility )
{
from.SendLocalizedMessage( 502232 ); // The keg is not designed to hold that type of object.
return false;
}
#endregion
if ( GiveBottle( from, toHold ) )
{
m_Type = pot.PotionEffect;

View file

@ -32,7 +32,10 @@ namespace Server.Items
MaskOfDeath, // Mask of Death is not available in OSI but does exist in cliloc files
MaskOfDeathGreater, // included in enumeration for compatability if later enabled by OSI
ConfusionBlast,
ConfusionBlastGreater
ConfusionBlastGreater,
Invisibility,
Parasitic,
Darkglow,
}
public abstract class BasePotion : Item, ICraftable, ICommodity
@ -78,11 +81,10 @@ namespace Server.Items
if ( handTwo is BaseWeapon )
handOne = handTwo;
if ( handOne is BaseRanged )
if ( handTwo is BaseRanged )
{
BaseRanged ranged = (BaseRanged) handOne;
BaseRanged ranged = (BaseRanged) handTwo;
if ( ranged.Balanced )
return true;
}
@ -234,6 +236,9 @@ namespace Server.Items
if ( pack != null )
{
if ( (int) PotionEffect >= (int) PotionEffect.Invisibility )
return 1;
List<PotionKeg> kegs = pack.FindItemsByType<PotionKeg>();
for ( int i = 0; i < kegs.Count; ++i )

View file

@ -102,7 +102,7 @@ namespace Server.Items
foreach ( Mobile mobile in map.GetMobilesInRange( loc, Radius ) )
{
if ( mobile is BaseCreature && ( Notoriety.Compute ( from, mobile ) != Notoriety.Innocent ))
if ( mobile is BaseCreature )
{
BaseCreature mon = (BaseCreature) mobile;

View file

@ -0,0 +1,39 @@
using System;
using Server;
namespace Server.Items
{
public class DarkglowPotion : BasePoisonPotion
{
public override Poison Poison{ get{ return Poison.Greater; } } /* MUST be restored when prerequisites are done */
public override double MinPoisoningSkill{ get{ return 95.0; } }
public override double MaxPoisoningSkill{ get{ return 100.0; } }
public override int LabelNumber{ get{ return 1072849; } } // Darkglow Poison
[Constructable]
public DarkglowPotion() : base( PotionEffect.Darkglow )
{
Hue = 0x96;
}
public DarkglowPotion( 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,111 @@
using System;
using System.Collections;
using Server;
namespace Server.Items
{
public class InvisibilityPotion : BasePotion
{
public override int LabelNumber{ get{ return 1072941; } } // Potion of Invisibility
[Constructable]
public InvisibilityPotion() : base( 0xF0A, PotionEffect.Invisibility )
{
Hue = 0x48D;
}
public InvisibilityPotion( Serial serial ) : base( serial )
{
}
public override void Drink( Mobile from )
{
if ( from.Hidden )
{
from.SendLocalizedMessage( 1073185 ); // You are already unseen.
return;
}
if ( HasTimer( from ) )
{
from.SendLocalizedMessage( 1073186 ); // An invisibility potion is already taking effect on your person.
return;
}
Consume();
m_Table[ from ] = Timer.DelayCall( TimeSpan.FromSeconds( 2 ), new TimerStateCallback( Hide_Callback ), from );
PlayDrinkEffect( from );
}
private static void Hide_Callback( object obj )
{
if ( obj is Mobile )
Hide( (Mobile) obj );
}
public static void Hide( Mobile m )
{
Effects.SendLocationParticles( EffectItem.Create( new Point3D( m.X, m.Y, m.Z + 16 ), m.Map, EffectItem.DefaultDuration ), 0x376A, 10, 15, 5045 );
m.PlaySound( 0x3C4 );
m.Hidden = true;
BuffInfo.RemoveBuff( m, BuffIcon.HidingAndOrStealth );
BuffInfo.AddBuff( m, new BuffInfo( BuffIcon.Invisibility, 1075825 ) ); //Invisibility/Invisible
RemoveTimer( m );
Timer.DelayCall( TimeSpan.FromSeconds( 30 ), new TimerStateCallback( EndHide_Callback ), m );
}
private static void EndHide_Callback( object obj )
{
if ( obj is Mobile )
EndHide( (Mobile) obj );
}
public static void EndHide( Mobile m )
{
m.RevealingAction();
RemoveTimer( m );
}
private static Hashtable m_Table = new Hashtable();
public static bool HasTimer( Mobile m )
{
return m_Table[ m ] != null;
}
public static void RemoveTimer( Mobile m )
{
Timer t = (Timer) m_Table[ m ];
if ( t != null )
{
t.Stop();
m_Table.Remove( m );
}
}
public static void Iterrupt( Mobile m )
{
m.SendLocalizedMessage( 1073187 ); // The invisibility effect is interrupted.
RemoveTimer( m );
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
}
}
}

View file

@ -0,0 +1,39 @@
using System;
using Server;
namespace Server.Items
{
public class ParasiticPotion : BasePoisonPotion
{
public override Poison Poison{ get{ return Poison.Greater; } } /* public override Poison Poison{ get{ return Poison.Darkglow; } } MUST be restored when prerequisites are done */
public override double MinPoisoningSkill{ get{ return 95.0; } }
public override double MaxPoisoningSkill{ get{ return 100.0; } }
public override int LabelNumber{ get{ return 1072848; } } // Parasitic Poison
[Constructable]
public ParasiticPotion() : base( PotionEffect.Parasitic )
{
Hue = 0x17C;
}
public ParasiticPotion( 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

@ -15,6 +15,15 @@ namespace Server.Items
{
public static readonly TimeSpan UseDelay = TimeSpan.FromSeconds( 7.0 );
private BookQuality m_Quality;
[CommandProperty( AccessLevel.GameMaster )]
public BookQuality Quality
{
get{ return m_Quality; }
set{ m_Quality = value; InvalidateProperties(); }
}
private List<RunebookEntry> m_Entries;
private string m_Description;
private int m_CurCharges, m_MaxCharges;
@ -169,7 +178,9 @@ namespace Server.Items
{
base.Serialize( writer );
writer.Write( (int) 2 );
writer.Write( (int) 3 );
writer.Write( (byte) m_Quality );
writer.Write( m_Crafter );
@ -199,6 +210,11 @@ namespace Server.Items
switch ( version )
{
case 3:
{
m_Quality = (BookQuality) reader.ReadByte();
goto case 2;
}
case 2:
{
m_Crafter = reader.ReadMobile();
@ -272,6 +288,9 @@ namespace Server.Items
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( m_Quality == BookQuality.Exceptional )
list.Add( 1063341 ); // exceptional
if ( m_Crafter != null )
list.Add( 1050043, m_Crafter.Name ); // crafted by ~1_NAME~
@ -452,6 +471,8 @@ namespace Server.Items
if ( makersMark )
Crafter = from;
m_Quality = (BookQuality) ( quality - 1 );
return quality;
}

View file

@ -20,8 +20,31 @@ namespace Server.Items
Arcanist
}
public enum BookQuality
{
Regular,
Exceptional,
}
public class Spellbook : Item, ICraftable, ISlayer
{
private string m_EngravedText;
private BookQuality m_Quality;
[CommandProperty( AccessLevel.GameMaster )]
public string EngravedText
{
get{ return m_EngravedText; }
set{ m_EngravedText = value; InvalidateProperties(); }
}
[CommandProperty( AccessLevel.GameMaster )]
public BookQuality Quality
{
get{ return m_Quality; }
set{ m_Quality = value; InvalidateProperties(); }
}
public static void Initialize()
{
EventSink.OpenSpellbookRequest += new OpenSpellbookRequestEventHandler( EventSink_OpenSpellbookRequest );
@ -552,6 +575,12 @@ namespace Server.Items
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( m_Quality == BookQuality.Exceptional )
list.Add( 1063341 ); // exceptional
if ( m_EngravedText != null )
list.Add( 1072305, m_EngravedText ); // Engraved: ~1_INSCRIPTION~
if ( m_Crafter != null )
list.Add( 1050043, m_Crafter.Name ); // crafted by ~1_NAME~
@ -689,7 +718,12 @@ namespace Server.Items
{
base.Serialize( writer );
writer.Write( (int) 3 ); // version
writer.Write( (int) 5 ); // version
writer.Write( (byte) m_Quality );
writer.Write( (string) m_EngravedText );
writer.Write( m_Crafter );
writer.Write( (int)m_Slayer );
@ -710,6 +744,18 @@ namespace Server.Items
switch ( version )
{
case 5:
{
m_Quality = (BookQuality) reader.ReadByte();
goto case 4;
}
case 4:
{
m_EngravedText = reader.ReadString();
goto case 3;
}
case 3:
{
m_Crafter = reader.ReadMobile();
@ -808,7 +854,7 @@ namespace Server.Items
1 // 1 property : 1/4 : 25%
};
public int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
public virtual int OnCraft( int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool, CraftItem craftItem, int resHue )
{
int magery = from.Skills.Magery.BaseFixedPoint;
@ -851,6 +897,8 @@ namespace Server.Items
if ( makersMark )
Crafter = from;
m_Quality = (BookQuality) ( quality - 1 );
return quality;
}
}

View file

@ -1,8 +1,9 @@
using System;
using Server;
using Server.Engines.Craft;
namespace Server.Items
{
[FlipableAttribute( 0x1028, 0x1029 )]
public class RunicDovetailSaw : BaseRunicTool
{
public override CraftSystem CraftSystem{ get{ return DefCarpentry.CraftSystem; } }
@ -15,40 +16,20 @@ namespace Server.Items
if ( index >= 1 && index <= 6 )
return 1072633 + index;
return 1011196; // dovetail saw
return 1024137; // dovetail saw
}
}
public override void AddNameProperties( ObjectPropertyList list )
{
base.AddNameProperties( list );
int index = CraftResources.GetIndex( Resource );
if ( index >= 1 && index <= 6 )
return;
if ( !CraftResources.IsStandard( Resource ) )
{
int num = CraftResources.GetLocalizationNumber( Resource );
if ( num > 0 )
list.Add( num );
else
list.Add( CraftResources.GetName( Resource ) );
}
}
[Constructable]
public RunicDovetailSaw( CraftResource resource ) : base( resource, 0x1029 )
public RunicDovetailSaw( CraftResource resource ) : base( resource, 0x1028 )
{
Weight = 2.0;
Hue = CraftResources.GetHue( resource );
}
[Constructable]
public RunicDovetailSaw( CraftResource resource, int uses ) : base( resource, uses, 0x1029 )
public RunicDovetailSaw( CraftResource resource, int uses ) : base( resource, uses, 0x1028 )
{
Weight = 2.0;
Hue = CraftResources.GetHue( resource );

View file

@ -104,6 +104,9 @@ namespace Server.Mobiles
public bool IsSellable( Item item )
{
if ( item.QuestItem )
return false;
//if ( item.Hue != 0 )
//return false;
@ -112,6 +115,9 @@ namespace Server.Mobiles
public bool IsResellable( Item item )
{
if ( item.QuestItem )
return false;
//if ( item.Hue != 0 )
//return false;

View file

@ -290,6 +290,12 @@ namespace Server.Mobiles
{
SayTo( from, 502673 ); // I can not stable summoned creatures.
}
/*
else if ( pet.Allured )
{
SayTo( from, 1048053 ); // You can't stable that!
}
*/
else if ( (pet is PackLlama || pet is PackHorse || pet is Beetle) && (pet.Backpack != null && pet.Backpack.Items.Count > 0) )
{
SayTo( from, 1042563 ); // You need to unload your pet.

View file

@ -28,6 +28,15 @@ namespace Server.Mobiles
Add( new GenericBuyInfo( typeof( Fish ), 6, 80, 0x9CE, 0 ) );
Add( new GenericBuyInfo( typeof( Fish ), 6, 80, 0x9CF, 0 ) );
Add( new GenericBuyInfo( typeof( FishingPole ), 15, 20, 0xDC0, 0 ) );
#region Mondain's Legacy
Add( new GenericBuyInfo( typeof( AquariumFishingNet ), 250, 20, 0xDC8, 0 ) );
Add( new GenericBuyInfo( typeof( AquariumFood ), 62, 20, 0xEFC, 0 ) );
Add( new GenericBuyInfo( typeof( FishBowl ), 6312, 20, 0x241C, 0x482 ) );
Add( new GenericBuyInfo( typeof( VacationWafer ), 67, 20, 0x971, 0 ) );
Add( new GenericBuyInfo( typeof( AquariumNorthDeed ), 150000, 1, 0x14F0, 0 ) );
Add( new GenericBuyInfo( typeof( AquariumEastDeed ), 150000, 1, 0x14F0, 0 ) );
#endregion
}
}

View file

@ -55,7 +55,7 @@ namespace Server.Mobiles
else if ( i > 6 )
--itemID;
Add( new GenericBuyInfo( types[ i ], 12 + ( ( i / 8 ) * 10 ), 20, itemID, 0 ) );
Add( new GenericBuyInfo( types[i], 12 + ((i / 8) * 10), 20, itemID, 0 ) );
}
}
}