ModernUO/Scripts/Items/Special/Veteran Rewards/TreeStump.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

250 lines
6 KiB
C#

using System;
using Server;
using Server.Gumps;
using Server.Network;
using Server.Multis;
using Server.Engines.VeteranRewards;
namespace Server.Items
{
public class TreeStump : BaseAddon, IRewardItem
{
public override BaseAddonDeed Deed
{
get
{
TreeStumpDeed deed = new TreeStumpDeed();
deed.IsRewardItem = m_IsRewardItem;
deed.Logs = m_Logs;
return deed;
}
}
private bool m_IsRewardItem;
[CommandProperty( AccessLevel.GameMaster )]
public bool IsRewardItem
{
get{ return m_IsRewardItem; }
set{ m_IsRewardItem = value; InvalidateProperties(); }
}
private int m_Logs;
[CommandProperty( AccessLevel.GameMaster )]
public int Logs
{
get{ return m_Logs; }
set{ m_Logs = value; InvalidateProperties(); }
}
private Timer m_Timer;
[Constructable]
public TreeStump( int itemID ) : base()
{
AddComponent( new AddonComponent( itemID ), 0, 0, 0 );
m_Timer = Timer.DelayCall( TimeSpan.FromDays( 1 ), TimeSpan.FromDays( 1 ), new TimerCallback( GiveLogs ) );
}
public TreeStump( Serial serial ) : base( serial )
{
}
private void GiveLogs()
{
m_Logs = Math.Min( 100, m_Logs + 10 );
}
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 ) )
{
if ( m_Logs > 0 )
{
Item logs = null;
switch ( Utility.Random( 7 ) )
{
case 0: logs = new Log(); break;
case 1: logs = new AshLog(); break;
case 2: logs = new OakLog(); break;
case 3: logs = new YewLog(); break;
case 4: logs = new HeartwoodLog(); break;
case 5: logs = new BloodwoodLog(); break;
case 6: logs = new FrostwoodLog(); break;
}
int amount = Math.Min( 10, m_Logs );
logs.Amount = amount;
if ( !from.PlaceInBackpack( logs ) )
{
logs.Delete();
from.SendLocalizedMessage( 1078837 ); // Your backpack is full! Please make room and try again.
}
else
{
m_Logs -= amount;
PublicOverheadMessage( MessageType.Regular, 0, 1094719, m_Logs.ToString() ); // Logs: ~1_COUNT~
}
}
else
from.SendLocalizedMessage( 1094720 ); // There are no more logs available.
}
else
from.SendLocalizedMessage( 1061637 ); // You are not allowed to access this.
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.WriteEncodedInt( 0 ); // version
writer.Write( (bool) m_IsRewardItem );
writer.Write( (int) m_Logs );
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();
m_IsRewardItem = reader.ReadBool();
m_Logs = 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( GiveLogs ) );
}
}
public class TreeStumpDeed : BaseAddonDeed, IRewardItem, IRewardOption
{
public override int LabelNumber{ get{ return 1080406; } } // a deed for a tree stump decoration
public override BaseAddon Addon
{
get
{
TreeStump addon = new TreeStump( m_ItemID );
addon.IsRewardItem = m_IsRewardItem;
addon.Logs = m_Logs;
return addon;
}
}
private int m_ItemID;
private bool m_IsRewardItem;
[CommandProperty( AccessLevel.GameMaster )]
public bool IsRewardItem
{
get{ return m_IsRewardItem; }
set{ m_IsRewardItem = value; InvalidateProperties(); }
}
private int m_Logs;
[CommandProperty( AccessLevel.GameMaster )]
public int Logs
{
get{ return m_Logs; }
set{ m_Logs = value; InvalidateProperties(); }
}
[Constructable]
public TreeStumpDeed() : base()
{
LootType = LootType.Blessed;
}
public TreeStumpDeed( Serial serial ) : base( serial )
{
}
public override void GetProperties( ObjectPropertyList list )
{
base.GetProperties( list );
if ( m_IsRewardItem )
list.Add( 1076223 ); // 7th 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_Logs );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadEncodedInt();
m_IsRewardItem = reader.ReadBool();
m_Logs = reader.ReadInt();
}
public void GetOptions( RewardOptionList list )
{
list.Add( 1, 1080403 ); // Tree Stump with Axe West
list.Add( 2, 1080404 ); // Tree Stump with Axe North
list.Add( 3, 1080401 ); // Tree Stump East
list.Add( 4, 1080402 ); // Tree Stump South
}
public void OnOptionSelected( Mobile from, int option )
{
switch ( option )
{
case 1: m_ItemID = 0xE56; break;
case 2: m_ItemID = 0xE58; break;
case 3: m_ItemID = 0xE57; break;
case 4: m_ItemID = 0xE59; break;
}
if ( !Deleted )
base.OnDoubleClick( from );
}
}
}