BritainKnights/Scripts/Mobiles/Towns/Actions.cs

723 lines
No EOL
20 KiB
C#

using System;
using Server;
using System.Collections;
using System.Collections.Generic;
using Server.Network;
using Server.Items;
using Server.Mobiles;
namespace Server.Items
{
public class Actions : Item
{
private int m_Acts;
[CommandProperty( AccessLevel.GameMaster )]
public int Acts{ get{ return m_Acts; } set{ m_Acts = value; } }
[Constructable]
public Actions() : base( 0x8AB )
{
Movable = false;
}
public Actions( Serial serial ) : base( serial )
{
}
public bool facingNS( Mobile m )
{
if ( this.X == m.X )
return true;
return false;
}
public override void OnDoubleClick( Mobile from )
{
if ( !(from is BaseVendor ) )
return;
bool PlayRegular = true;
bool PlayRepetitive = Utility.RandomBool();
from.Direction = from.GetDirectionTo( GetWorldLocation() );
if ( from is LeatherWorker || from is Tanner )
{
if ( ItemID == 0x1069 || ItemID == 0x106A || ItemID == 0x107A || ItemID == 0x107B )
{
if ( ItemID == 0x1069 ){ ItemID = 0x106A; }
else if ( ItemID == 0x106A ){ ItemID = 0x1069; }
else if ( ItemID == 0x107A ){ ItemID = 0x107B; }
else if ( ItemID == 0x107B ){ ItemID = 0x107A; }
Name = "stretched hide";
from.Animate( 230, 5, 1, true, false, 0 );
if ( PlayRepetitive )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
else
{
Name = "leather";
if ( m_Acts == 1 )
{
ItemID = Utility.RandomList( 0x13C5, 0x13C6, 0x13C7, 0x13CB, 0x13CC, 0x13CD, 0x13CE, 0x13D2, 0x13D3, 0x1DB9, 0x1DBA, 0x13D4, 0x13D5, 0x13D6, 0x13DA, 0x13DB, 0x13DC, 0x13DD, 0x13E1, 0x13E2 );
from.PlaySound( 0x248 );
m_Acts = 0;
from.Animate( 230, 5, 1, true, false, 0 );
}
else
{
if ( PlayRegular )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
ItemID = Utility.RandomList( 0x1067, 0x1068, 0x1081, 0x1082 );
m_Acts = 1;
from.Animate( 230, 5, 1, true, false, 0 );
}
}
}
else if ( from is Butcher )
{
EquipVendor( from, "cleaver" );
Name = "carcass";
BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.OneHanded ) );
weapon.PlaySwingAnimation( from );
new Blood().MoveToWorld( Location, Map );
from.PlaySound( 0x133 );
}
else if ( from is Gypsy )
{
Name = "cards";
from.PlaySound( 0x5FA );
ItemID++;
if ( ItemID > 6499 )
ItemID = 6494;
}
else if ( from is Alchemist )
{
if ( ItemID >= 0x16EA && ItemID <= 0x16F1 )
{
Name = "cauldron";
Hue = Utility.RandomSpeechHue();
from.PlaySound( Utility.RandomList( 0x020, 0x025, 0x04E ) );
from.Animate( 230, 5, 1, true, false, 0 );
}
else if ( ItemID == 0x12AD )
{
Name = "bottle";
if ( m_Acts == 1 )
{
Hue = Utility.RandomSpeechHue();
from.PlaySound( 0x240 );
from.Animate( 230, 5, 1, true, false, 0 );
m_Acts = 0;
}
else
{
from.PlaySound( 0x242 );
m_Acts = 1;
}
}
}
else if ( from is Bowyer )
{
EquipVendor( from, "none" );
if ( m_Acts == 1 )
{
m_Acts = 0;
switch ( Utility.Random( 4 ) )
{
case 0: Name = "arrows"; ItemID = Utility.RandomList( 0xF40, 0xF41 ); break;
case 1: Name = "bolts"; ItemID = Utility.RandomList( 0x1BFC, 0x1BFD ); break;
case 2: Name = "crossbow"; ItemID = Utility.RandomList( 0x13FC, 0x13FD, 0xF4F, 0xF50 ); break;
case 3: Name = "bow"; ItemID = Utility.RandomList( 0x13B1, 0x13B2 ); break;
}
from.PlaySound( 0x55 );
from.Animate( 230, 5, 1, true, false, 0 );
}
else
{
m_Acts = 1;
Name = "wood";
ItemID = Utility.RandomList( 0x1BD8, 0x1BD9, 0x1BDB, 0x1BDC );
from.Animate( 230, 5, 1, true, false, 0 );
if ( PlayRegular )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
}
else if ( from is Fisherman )
{
if ( ItemID == 0x1797 )
{
EquipVendor( from, "pole" );
Name = "water";
from.Animate( 12, 5, 1, true, false, 0 );
Effects.SendLocationEffect( this.Location, this.Map, 0x352D, 16, 4 );
Effects.PlaySound( this.Location, this.Map, 0x364 );
((BaseVendor)from).m_NextAction = (DateTime.Now + TimeSpan.FromSeconds( Utility.RandomMinMax( 10, 20 ) ) );
}
else if ( ItemID == 0x9CC || ItemID == 0x9CD || ItemID == 0x1E15 || ItemID == 0x1E16 || ItemID == 0x1E17 || ItemID == 0x1E18 || ItemID == 0x97A )
{
EquipVendor( from, "cleaver" );
Name = "fish";
BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.OneHanded ) );
if ( m_Acts == 0 )
{
m_Acts++;
if ( facingNS( from ) )
ItemID = 0x9CC;
else
ItemID = 0x9CD;
from.Animate( 230, 5, 1, true, false, 0 );
if ( PlayRegular )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
else if ( m_Acts == 1 )
{
m_Acts++;
if ( facingNS( from ) )
ItemID = 0x1E15;
else
ItemID = 0x1E16;
weapon.PlaySwingAnimation( from );
new Blood().MoveToWorld( Location, Map );
from.PlaySound( 0x133 );
}
else if ( m_Acts == 2 )
{
m_Acts++;
if ( facingNS( from ) )
ItemID = 0x1E17;
else
ItemID = 0x1E18;
weapon.PlaySwingAnimation( from );
new Blood().MoveToWorld( Location, Map );
from.PlaySound( 0x133 );
}
else
{
m_Acts = 0;
ItemID = 0x97A;
weapon.PlaySwingAnimation( from );
from.PlaySound( 0x133 );
}
}
}
else if ( from is Cook )
{
if ( ItemID == 0x1305 || ItemID == 0x130B || ItemID == 0x12FF || ItemID == 0x12F3 )
{
Name = "skillet";
if ( m_Acts == 1 )
{
m_Acts = 0;
if ( ItemID == 0x1305 )
ItemID = 0x130B;
else
ItemID = 0x12FF;
from.Animate( 230, 5, 1, true, false, 0 );
from.PlaySound( 0x345 );
}
else
{
m_Acts = 1;
ItemID = Utility.RandomList( 0x12F3, 0x1305 );
from.Animate( 230, 5, 1, true, false, 0 );
if ( PlayRegular )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
}
else
{
if ( m_Acts == 1 )
{
m_Acts = 0;
Name = "bowl of food";
if ( ItemID == 0x15F8 )
ItemID = Utility.RandomList( 0x15F9, 0x15FA, 0x15FB, 0x15FC );
else
ItemID = Utility.RandomList( 0x15FE, 0x15FF, 0x1600, 0x1601, 0x1602 );
from.Animate( 230, 5, 1, true, false, 0 );
if ( PlayRepetitive )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
else
{
m_Acts = 1;
Name = "bowl";
ItemID = Utility.RandomList( 0x15F8, 0x15FD );
from.Animate( 230, 5, 1, true, false, 0 );
if ( PlayRegular )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
}
}
else if ( from is Herbalist )
{
Hue = 0x49E;
Name = "pot";
if ( m_Acts == 0 )
{
ItemID = 0x18B7;
from.Animate( 230, 5, 1, true, false, 0 );
m_Acts++;
if ( PlayRegular )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
else if ( m_Acts == 1 )
{
from.Animate( 230, 5, 1, true, false, 0 );
m_Acts++;
from.PlaySound( 0x025 );
ItemID = 0x18C8;
}
else if ( m_Acts == 2 )
{
from.Animate( 230, 5, 1, true, false, 0 );
m_Acts++;
ItemID = 0x18C9;
if ( PlayRepetitive )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
else if ( m_Acts == 3 )
{
from.Animate( 230, 5, 1, true, false, 0 );
m_Acts++;
ItemID = 0x18CA;
if ( PlayRepetitive )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
else if ( m_Acts == 4 )
{
from.Animate( 230, 5, 1, true, false, 0 );
m_Acts++;
ItemID = 0x18CB;
if ( PlayRepetitive )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
else
{
Name = "potted plant";
ItemID = Utility.RandomMinMax( 0x18B8, 0x18C7 );
m_Acts = 0;
}
}
else if ( from is Tailor || from is Weaver )
{
Name = "cloth";
if ( m_Acts == 0 )
{
ItemID = Utility.RandomMinMax( 0x175D, 0x1768 );
Hue = Utility.RandomHue();
from.Animate( 230, 5, 1, true, false, 0 );
m_Acts = 1;
if ( PlayRegular )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
else
{
Name = "clothing";
ItemID = Utility.RandomList( 0x1517, 0x1518, 0x1EFD, 0x1EFE, 0x1F9F, 0x1FA0, 0x1537, 0x1538, 0x152F, 0x1531, 0x1516, 0x152E, 0x1713, 0x1715, 0x1718, 0x171A, 0x171C );
from.PlaySound( 0x248 );
from.Animate( 230, 5, 1, true, false, 0 );
m_Acts = 0;
}
}
else if ( from is Tinker )
{
Name = "clock";
if ( ItemID == 0x104B || ItemID == 0x104C )
{
ItemID = Utility.RandomList( 0xC1F, 0x104D, 0x104E, 0x104F, 0x1050 );
from.Animate( 230, 5, 1, true, false, 0 );
if ( PlayRegular )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
else
{
ItemID = Utility.RandomList( 0x104B, 0x104C );
from.PlaySound( 0x241 );
from.Animate( 230, 5, 1, true, false, 0 );
}
}
else if ( from is Lumberjack || from is Carpenter )
{
if ( ItemID == 0x1264 || ItemID == 0x126A || ItemID == 0x1BE1 || ItemID == 0x1BDE )
{
EquipVendor( from, "axe" );
if ( m_Acts == 0 )
{
m_Acts = 1;
Name = "log";
from.Animate( 230, 5, 1, true, false, 0 );
ItemID = 0x1264;
if ( PlayRegular )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
else if ( m_Acts == 1 )
{
m_Acts = 2;
Name = "logs";
BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.TwoHanded ) );
weapon.PlaySwingAnimation( from );
from.PlaySound( 0x13E );
ItemID = Utility.RandomList( 0x1BDE, 0x1BE1 );
}
else
{
m_Acts = 0;
Name = "boards";
BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.TwoHanded ) );
weapon.PlaySwingAnimation( from );
from.PlaySound( 0x13E );
ItemID = 0x126A;
}
}
else
{
EquipVendor( from, "hammer" );
Name = "furniture";
if ( m_Acts == 0 )
{
Name = "wood";
m_Acts = 1;
from.Animate( 230, 5, 1, true, false, 0 );
ItemID = Utility.RandomList( 0x1BD8, 0x1BD9, 0x1BDB, 0x1BDC );
if ( PlayRegular )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
else if ( m_Acts == 1 )
{
from.PlaySound( 0x23D );
m_Acts = 2;
if ( facingNS( from ) )
ItemID = Utility.RandomList( 0x1E6F, 0x1E71, 0x1E76, 0x1E80 );
else
ItemID = Utility.RandomList( 0x1E78, 0x1E7A, 0x1E7E, 0x1E81 );
BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.OneHanded ) );
weapon.PlaySwingAnimation( from );
}
else
{
from.PlaySound( 0x23D );
m_Acts = 0;
switch ( ItemID )
{
case 0x1E6F: Name = "chair"; ItemID = 0x0B4F; break;
case 0x1E71: Name = "drawers"; ItemID = 0x0A2C; break;
case 0x1E76: Name = "shelf"; ItemID = 0x0A9D; break;
case 0x1E80: Name = "crate"; ItemID = 0x1FFF; break;
case 0x1E78: Name = "chair"; ItemID = 0x0B4E; break;
case 0x1E7A: Name = "drawers"; ItemID = 0x0A34; break;
case 0x1E7E: Name = "shelf"; ItemID = 0x0A9E; break;
case 0x1E81: Name = "crate"; ItemID = 0x0E7E; break;
}
BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.OneHanded ) );
weapon.PlaySwingAnimation( from );
}
}
}
else if ( from is Baker )
{
if ( m_Acts == 0 )
{
Name = "flour";
m_Acts = 1;
from.Animate( 230, 5, 1, true, false, 0 );
ItemID = Utility.RandomList( 0x1039, 0x1045 );
if ( PlayRegular )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
else if ( m_Acts == 1 )
{
Name = "flour";
m_Acts = 2;
from.Animate( 230, 5, 1, true, false, 0 );
ItemID = Utility.RandomList( 0x103A, 0x1046 );
if ( PlayRepetitive )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
else if ( m_Acts == 2 )
{
Name = "dough";
m_Acts = 3;
from.Animate( 230, 5, 1, true, false, 0 );
ItemID = 0xA1E;
from.PlaySound( 0x242 );
}
else if ( m_Acts == 3 )
{
if ( Utility.RandomBool() )
{
Name = "dough";
ItemID = 0x103D;
}
else
{
Name = "cookie mix";
ItemID = 0x103F;
}
m_Acts = 4;
from.Animate( 230, 5, 1, true, false, 0 );
if ( PlayRepetitive )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
else
{
m_Acts = 0;
if ( ItemID == 0x103D ){ Name = "bread"; ItemID = Utility.RandomList( 0x103C, 0x98C ); }
else { Name = "cookies"; ItemID = Utility.RandomList( 0x160B, 0x160C ); }
from.Animate( 230, 5, 1, true, false, 0 );
if ( PlayRepetitive )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
}
else if ( from is Miner || from is Blacksmith || from is Weaponsmith || from is IronWorker || from is Armorer )
{
if ( ItemID == 0x1775 || ItemID == 0x1776 || ItemID == 0x1777 || ItemID == 0x1778 || ItemID == 0x19B9 )
{
EquipVendor( from, "pick" );
Name = "rock";
BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.OneHanded ) );
weapon.PlaySwingAnimation( from );
from.PlaySound( Utility.RandomList( 0x125, 0x126 ) );
if ( m_Acts == 0 ){ ItemID = 0x1776; m_Acts++; }
else if ( m_Acts == 1 ){ ItemID = 0x1775; m_Acts++; }
else if ( m_Acts == 2 ){ ItemID = 0x1777; m_Acts++; }
else if ( m_Acts == 3 ){ ItemID = 0x1778; m_Acts++; }
else { ItemID = 0x19B9; m_Acts = 0; }
}
else if ( ItemID == 0x19B8 || ( ItemID >= 0x1BEF && ItemID <= 0x1BF4 ) )
{
EquipVendor( from, "none" );
if ( ItemID == 0x19B8 )
{
if ( facingNS( from ) )
ItemID = Utility.RandomMinMax( 0x1BF2, 0x1BF4 );
else
ItemID = Utility.RandomMinMax( 0x1BEF, 0x1BF1 );
Name = "ingots";
from.Animate( 230, 5, 1, true, false, 0 );
from.PlaySound( Utility.RandomList( 0x02B, 0x047, 0x208 ) );
}
else
{
ItemID = 0x19B8;
Name = "ore";
from.Animate( 230, 5, 1, true, false, 0 );
if ( PlayRegular )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
}
else
{
EquipVendor( from, "hammer" );
Name = "anvil";
if ( m_Acts == 0 )
{
m_Acts = 1;
if ( Utility.RandomBool() )
m_Acts = 2;
from.Animate( 230, 5, 1, true, false, 0 );
if ( facingNS( from ) )
ItemID = 0x2268;
else
ItemID = 0x2252;
if ( PlayRegular )
from.PlaySound( Utility.RandomList( 0x059, 0x057 ) );
}
else if ( m_Acts == 1 )
{
from.PlaySound( 0x2A );
m_Acts = 2;
BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.OneHanded ) );
weapon.PlaySwingAnimation( from );
}
else
{
from.PlaySound( 0x2A );
m_Acts = 0;
if ( from is Weaponsmith )
{
if ( facingNS( from ) )
ItemID = Utility.RandomMinMax( 0x2272, 0x227D );
else
ItemID = Utility.RandomMinMax( 0x225C, 0x2267 );
}
else if ( from is Armorer )
{
if ( facingNS( from ) )
ItemID = Utility.RandomMinMax( 0x2269, 0x2271 );
else
ItemID = Utility.RandomMinMax( 0x2253, 0x225B );
}
else
{
if ( facingNS( from ) )
ItemID = Utility.RandomMinMax( 0x2269, 0x227D );
else
ItemID = Utility.RandomMinMax( 0x2253, 0x2267 );
}
BaseWeapon weapon = ( BaseWeapon )( from.FindItemOnLayer( Layer.OneHanded ) );
weapon.PlaySwingAnimation( from );
}
}
}
else if ( from is Bard || from is Minstrel )
{
if ( m_Acts == 0 )
{
SetInstrument( from, this );
m_Acts = 1;
}
else
{
m_Acts = 0;
if ( this.Name == "flute" ){ from.PlaySound( 0x502 ); }
else if ( this.Name == "harp" ){ from.PlaySound( 0x45 ); }
else if ( this.Name == "drum" ){ from.PlaySound( 0x38 ); }
else if ( this.Name == "tambourine" ){ from.PlaySound( 0x52 ); }
else if ( this.Name == "lute" ){ from.PlaySound( 0x4C ); }
else if ( this.Name == "pipes" ){ from.PlaySound( 0x5B8 ); }
}
}
}
public static void EquipVendor( Mobile m, string item )
{
Item one = m.FindItemOnLayer( Layer.OneHanded );
if ( one == null )
one = m.FindItemOnLayer( Layer.FirstValid );
Item two = m.FindItemOnLayer( Layer.TwoHanded );
if ( item == "none" )
{
ClearHands( m );
}
else if ( item == "cleaver" && !(one is Cleaver) )
{
ClearHands( m );
m.AddItem( new Cleaver() );
}
else if ( item == "bow" && !(two is BaseRanged) )
{
ClearHands( m );
switch ( Utility.Random( 4 ) )
{
case 0: m.AddItem( new Bow() ); break;
case 1: m.AddItem( new Bow() ); break;
case 2: m.AddItem( new Crossbow() ); break;
case 3: m.AddItem( new HeavyCrossbow() ); break;
}
}
else if ( item == "pole" && !(two is FishingPole) )
{
ClearHands( m );
m.AddItem( new FishingPole() );
}
else if ( item == "pick" && !(two is Pickaxe) )
{
ClearHands( m );
m.AddItem( new Pickaxe() );
}
else if ( item == "axe" && !(two is Hatchet) )
{
ClearHands( m );
m.AddItem( new Hatchet() );
}
else if ( item == "hammer" && !(one is Club) )
{
ClearHands( m );
Item hammer = new Club();
hammer.Name = "hammer";
hammer.ItemID = 0x13E3;
m.AddItem( hammer );
}
}
public static void ClearHands( Mobile m )
{
Item one = m.FindItemOnLayer( Layer.OneHanded );
if ( one == null )
one = m.FindItemOnLayer( Layer.FirstValid );
Item two = m.FindItemOnLayer( Layer.TwoHanded );
if ( one != null ) { one.Delete(); }
if ( two != null ) { two.Delete(); }
}
public static void SetInstrument( Mobile from, Item instrument )
{
string facing = "east";
if ( from.X == instrument.X )
facing = "south";
if ( facing == "south" )
{
switch ( Utility.Random( 6 ) )
{
case 0: instrument.ItemID = 0x178F; instrument.Name = "lute"; instrument.Z = from.Z + 9; break;
case 1: instrument.ItemID = 0x178D; instrument.Name = "flute"; instrument.Z = from.Z + 11; break;
case 2: instrument.ItemID = 0x178B; instrument.Name = "harp"; instrument.Z = from.Z + 9; break;
case 3: instrument.ItemID = 0x1793; instrument.Name = "drum"; instrument.Z = from.Z + 7; break;
case 4: instrument.ItemID = 0x1791; instrument.Name = "tambourine"; instrument.Z = from.Z + 9; break;
case 5: instrument.ItemID = 0x2131; instrument.Name = "pipes"; instrument.Z = from.Z + 9; break;
}
}
else
{
switch ( Utility.Random( 6 ) )
{
case 0: instrument.ItemID = 0x178E; instrument.Name = "lute"; instrument.Z = from.Z + 9; break;
case 1: instrument.ItemID = 0x178C; instrument.Name = "flute"; instrument.Z = from.Z + 11; break;
case 2: instrument.ItemID = 0x178A; instrument.Name = "harp"; instrument.Z = from.Z + 9; break;
case 3: instrument.ItemID = 0x1792; instrument.Name = "drum"; instrument.Z = from.Z + 7; break;
case 4: instrument.ItemID = 0x1790; instrument.Name = "tambourine"; instrument.Z = from.Z + 9; break;
case 5: instrument.ItemID = 0x2130; instrument.Name = "pipes"; instrument.Z = from.Z + 9; break;
}
}
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 0 ); // version
writer.Write( (int) m_Acts );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
m_Acts = reader.ReadInt();
}
}
}