ModernUO/Scripts/Items/Special/Veteran Rewards/MiningCart.cs
xavier cd2462621f Lightning strike should not consume mana or deactivate when you miss.
http://www.uodemise.com/forum/showthread.php?t=145364

BOD turn-in should have 10 second timer since pub 50 
http://www.uodemise.com/forum/showthread.php?t=156441

Vet reward ore carts, gem carts, and stumps have missing range check added
http://www.uodemise.com/forum/showthread.php?t=156380

Blood Oath: missing 35hp pvp dmg cap added, correct credit for kills/dmg given to caster, ML magic resist now applies.
http://www.uodemise.com/forum/showthread.php?t=118729&page=3

Missing ore sizes added
http://www.uodemise.com/forum/showthread.php?t=119888

Player-cast gates reveal stealthers/hiders.
http://www.uodemise.com/forum/showthread.php?t=149218

Some necro spells should disturb a casting target
http://www.uodemise.com/forum/showthread.php?t=149361

Failed snoop attempts should reveal thief if hidden.
http://www.uodemise.com/forum/showthread.php?t=153962

Pets do not autostable in the case of a server restart/cash: fixed
http://www.uodemise.com/forum/showthread.php?t=122745

Misc Aesthetic changes to spells, etc.

earthquake wrong sound
magic arrow inappropriate particles
curse wrong sound
agility wrong sound
chain lightning should always play sound
poison wrong sound
dispel evil missing sound
noble sacrifice male/female, diff sounds
sacred journey missing sound
2010-09-25 13:48:08 +00:00

406 lines
11 KiB
C#

using System;
using System.Collections.Generic;
using Server;
using Server.Gumps;
using Server.Multis;
using Server.Network;
using Server.Engines.VeteranRewards;
namespace Server.Items
{
public enum MiningCartType
{
OreSouth = 100,
OreEast = 101,
GemSouth = 102,
GemEast = 103
}
public class MiningCart : BaseAddon, IRewardItem
{
public override BaseAddonDeed Deed
{
get
{
MiningCartDeed deed = new MiningCartDeed();
deed.IsRewardItem = m_IsRewardItem;
deed.Gems = m_Gems;
deed.Ore = m_Ore;
return deed;
}
}
private bool m_IsRewardItem;
[CommandProperty( AccessLevel.GameMaster )]
public bool IsRewardItem
{
get{ return m_IsRewardItem; }
set{ m_IsRewardItem = value; }
}
private MiningCartType m_CartType;
[CommandProperty( AccessLevel.GameMaster )]
public MiningCartType CartType
{
get{ return m_CartType; }
}
private int m_Gems;
[CommandProperty( AccessLevel.GameMaster )]
public int Gems
{
get{ return m_Gems; }
set{ m_Gems = value; }
}
private int m_Ore;
[CommandProperty( AccessLevel.GameMaster )]
public int Ore
{
get{ return m_Ore; }
set{ m_Ore = value; }
}
private Timer m_Timer;
[Constructable]
public MiningCart( MiningCartType type ) : base()
{
m_CartType = type;
switch ( type )
{
case MiningCartType.OreSouth:
AddComponent( new AddonComponent( 0x1A83 ), 0, 0, 0 );
AddComponent( new AddonComponent( 0x1A82 ), 0, 1, 0 );
AddComponent( new AddonComponent( 0x1A86 ), 0, -1, 0 );
break;
case MiningCartType.OreEast:
AddComponent( new AddonComponent( 0x1A88 ), 0, 0, 0 );
AddComponent( new AddonComponent( 0x1A87 ), 1, 0, 0 );
AddComponent( new AddonComponent( 0x1A8B ), -1, 0, 0 );
break;
case MiningCartType.GemSouth:
AddComponent( new LocalizedAddonComponent( 0x1A83, 1080388 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x1A82, 1080388 ), 0, 1, 0 );
AddComponent( new LocalizedAddonComponent( 0x1A86, 1080388 ), 0, -1, 0 );
AddComponent( new AddonComponent( 0xF2C ), 0, 0, 6 );
AddComponent( new AddonComponent( 0xF1D ), 0, 0, 5 );
AddComponent( new AddonComponent( 0xF2B ), 0, 0, 2 );
AddComponent( new AddonComponent( 0xF21 ), 0, 0, 1 );
AddComponent( new AddonComponent( 0xF22 ), 0, 0, 4 );
AddComponent( new AddonComponent( 0xF2F ), 0, 0, 5 );
AddComponent( new AddonComponent( 0xF26 ), 0, 0, 6 );
AddComponent( new AddonComponent( 0xF27 ), 0, 0, 3 );
AddComponent( new AddonComponent( 0xF29 ), 0, 0, 0 );
break;
case MiningCartType.GemEast:
AddComponent( new LocalizedAddonComponent( 0x1A88, 1080388 ), 0, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x1A87, 1080388 ), 1, 0, 0 );
AddComponent( new LocalizedAddonComponent( 0x1A8B, 1080388 ), -1, 0, 0 );
AddComponent( new AddonComponent( 0xF2E ), 0, 0, 6 );
AddComponent( new AddonComponent( 0xF12 ), 0, 0, 3 );
AddComponent( new AddonComponent( 0xF29 ), 0, 0, 1 );
AddComponent( new AddonComponent( 0xF24 ), 0, 0, 5 );
AddComponent( new AddonComponent( 0xF21 ), 0, 0, 1 );
AddComponent( new AddonComponent( 0xF2B ), 0, 0, 3 );
AddComponent( new AddonComponent( 0xF2F ), 0, 0, 4 );
AddComponent( new AddonComponent( 0xF23 ), 0, 0, 3 );
AddComponent( new AddonComponent( 0xF27 ), 0, 0, 3 );
break;
}
m_Timer = Timer.DelayCall( TimeSpan.FromDays( 1 ), TimeSpan.FromDays( 1 ), new TimerCallback( GiveResources ) );
}
public MiningCart( Serial serial ) : base( serial )
{
}
private void GiveResources()
{
switch ( m_CartType )
{
case MiningCartType.OreSouth:
case MiningCartType.OreEast:
m_Ore = Math.Min( 100, m_Ore + 10 );
break;
case MiningCartType.GemSouth:
case MiningCartType.GemEast:
m_Gems = Math.Min( 50, m_Gems + 5 );
break;
}
}
public override void OnComponentUsed( AddonComponent c, Mobile from )
{
BaseHouse house = BaseHouse.FindHouseAt( this );
if ( !from.InRange( GetWorldLocation(), 2 ) )
{
from.LocalOverheadMessage( Network.MessageType.Regular, 0x3B2, 1019045 ); // I can't reach that.
}
else if ( house != null && house.HasSecureAccess( from, SecureLevel.Friends ) )
{
switch ( m_CartType )
{
case MiningCartType.OreSouth:
case MiningCartType.OreEast:
if ( m_Ore > 0 )
{
Item ingots = null;
switch ( Utility.Random( 9 ) )
{
case 0: ingots = new IronIngot(); break;
case 1: ingots = new DullCopperIngot(); break;
case 2: ingots = new ShadowIronIngot(); break;
case 3: ingots = new CopperIngot(); break;
case 4: ingots = new BronzeIngot(); break;
case 5: ingots = new GoldIngot(); break;
case 6: ingots = new AgapiteIngot(); break;
case 7: ingots = new VeriteIngot(); break;
case 8: ingots = new ValoriteIngot(); break;
}
int amount = Math.Min( 10, m_Ore );
ingots.Amount = amount;
if ( !from.PlaceInBackpack( ingots ) )
{
ingots.Delete();
from.SendLocalizedMessage( 1078837 ); // Your backpack is full! Please make room and try again.
}
else
{
PublicOverheadMessage(MessageType.Regular, 0, 1094724, amount.ToString() ); // Ore: ~1_COUNT~
m_Ore -= amount;
}
}
else
from.SendLocalizedMessage( 1094725 ); // There are no more resources available at this time.
break;
case MiningCartType.GemSouth:
case MiningCartType.GemEast:
if ( m_Gems > 0 )
{
Item gems = null;
switch ( Utility.Random( 15 ) )
{
case 0: gems = new Amber(); break;
case 1: gems = new Amethyst(); break;
case 2: gems = new Citrine(); break;
case 3: gems = new Diamond(); break;
case 4: gems = new Emerald(); break;
case 5: gems = new Ruby(); break;
case 6: gems = new Sapphire(); break;
case 7: gems = new StarSapphire(); break;
case 8: gems = new Tourmaline(); break;
// Mondain's Legacy gems
case 9: gems = new PerfectEmerald(); break;
case 10: gems = new DarkSapphire(); break;
case 11: gems = new Turquoise(); break;
case 12: gems = new EcruCitrine(); break;
case 13: gems = new FireRuby(); break;
case 14: gems = new BlueDiamond(); break;
}
int amount = Math.Min( 5, m_Gems );
gems.Amount = amount;
if ( !from.PlaceInBackpack( gems ) )
{
gems.Delete();
from.SendLocalizedMessage( 1078837 ); // Your backpack is full! Please make room and try again.
}
else
{
PublicOverheadMessage( MessageType.Regular, 0, 1094723, amount.ToString() ); // Gems: ~1_COUNT~
m_Gems -= amount;
}
}
else
from.SendLocalizedMessage( 1094725 ); // There are no more resources available at this time.
break;
}
}
else
from.SendLocalizedMessage( 1061637 ); // You are not allowed to access this.
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 1 ); // version
#region version 1
writer.Write( (int) m_CartType );
#endregion
writer.Write( (bool) m_IsRewardItem );
writer.Write( (int) m_Gems );
writer.Write( (int) m_Ore );
if ( m_Timer != null )
writer.Write( (DateTime) m_Timer.Next );
else
writer.Write( (DateTime) DateTime.Now + TimeSpan.FromDays( 1 ) );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
switch ( version )
{
case 1:
m_CartType = (MiningCartType) reader.ReadInt();
goto case 0;
case 0:
m_IsRewardItem = reader.ReadBool();
m_Gems = reader.ReadInt();
m_Ore = reader.ReadInt();
DateTime next = reader.ReadDateTime();
if ( next < DateTime.Now )
next = DateTime.Now;
m_Timer = Timer.DelayCall( next - DateTime.Now, TimeSpan.FromDays( 1 ), new TimerCallback( GiveResources ) );
break;
}
}
}
public class MiningCartDeed : BaseAddonDeed, IRewardItem, IRewardOption
{
public override int LabelNumber{ get{ return 1080385; } } // deed for a mining cart decoration
public override BaseAddon Addon
{
get
{
MiningCart addon = new MiningCart( m_CartType );
addon.IsRewardItem = m_IsRewardItem;
addon.Gems = m_Gems;
addon.Ore = m_Ore;
return addon;
}
}
private MiningCartType m_CartType;
private bool m_IsRewardItem;
[CommandProperty( AccessLevel.GameMaster )]
public bool IsRewardItem
{
get{ return m_IsRewardItem; }
set{ m_IsRewardItem = value; InvalidateProperties(); }
}
private int m_Gems;
[CommandProperty( AccessLevel.GameMaster )]
public int Gems
{
get{ return m_Gems; }
set{ m_Gems = value; }
}
private int m_Ore;
[CommandProperty( AccessLevel.GameMaster )]
public int Ore
{
get{ return m_Ore; }
set{ m_Ore = value; }
}
[Constructable]
public MiningCartDeed() : base()
{
LootType = LootType.Blessed;
}
public MiningCartDeed( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( m_IsRewardItem )
list.Add( 1080457 ); // 10th Year Veteran Reward
}
public override void OnDoubleClick( Mobile from )
{
if ( m_IsRewardItem && !RewardSystem.CheckIsUsableBy( from, this, null ) )
return;
if ( IsChildOf( from.Backpack ) )
{
from.CloseGump( typeof( RewardOptionGump ) );
from.SendGump( new RewardOptionGump( this ) );
}
else
from.SendLocalizedMessage( 1062334 ); // This item must be in your backpack to be used.
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
writer.Write( (bool) m_IsRewardItem );
writer.Write( (int) m_Gems );
writer.Write( (int) m_Ore );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
m_IsRewardItem = reader.ReadBool();
m_Gems = reader.ReadInt();
m_Ore = reader.ReadInt();
}
public void GetOptions( RewardOptionList list )
{
list.Add( (int) MiningCartType.OreSouth, 1080391 );
list.Add( (int) MiningCartType.OreEast, 1080390 );
list.Add( (int) MiningCartType.GemSouth, 1080500 );
list.Add( (int) MiningCartType.GemEast, 1080499 );
}
public void OnOptionSelected( Mobile from, int choice )
{
m_CartType = (MiningCartType) choice;
if ( !Deleted )
base.OnDoubleClick( from );
}
}
}