- Code cleaning, consolidation and bugfixing of special scrolls (powerscroll/statscroll/transcendence/alacrity).

--> Fixed a bug preventing SoT not being spawned in Malas champion spawns (i.e. Bedlam Crypt)
(http://www.uodemise.com/discussion/showthread.php?t=135520)

- Added contextual menu entries to add players in party, and kicking them from house (friends can be kicked if in ML environment). Timeout to accept party invite is increased to 30 seconds as per OSI
(http://www.uodemise.com/discussion/showthread.php?t=120724)

- Runebeetles can be angered during taming attempts
(http://www.uodemise.com/discussion/showthread.php?t=137677)

- You can cook near forges
(http://www.uodemise.com/discussion/showthread.php?t=137731)
This commit is contained in:
daedalus 2010-02-20 17:26:57 +00:00
parent bab1490105
commit fe6c18a2d4
14 changed files with 644 additions and 1047 deletions

View file

@ -6,28 +6,39 @@ using Server.Network;
namespace Server.Items
{
public class StatCapScroll : Item
public class StatCapScroll : SpecialScroll
{
private int m_Value;
[CommandProperty( AccessLevel.GameMaster )]
public int Value
public override int Message { get { return 1049469; } } /* Using a scroll increases the maximum amount of a specific skill or your maximum statistics.
* When used, the effect is not immediately seen without a gain of points with that skill or statistics.
* You can view your maximum skill values in your skills window.
* You can view your maximum statistic value in your statistics window. */
public override int Title
{
get
{
return m_Value;
int level = ( (int)Value - 230 ) / 5;
if ( level >= 0 && level <= 4 && Value % 5 == 0 )
return 1049458 + level; /* Wonderous Scroll (+5 Maximum Stats): OR
* Exalted Scroll (+10 Maximum Stats): OR
* Mythical Scroll (+15 Maximum Stats): OR
* Legendary Scroll (+20 Maximum Stats): OR
* Ultimate Scroll (+25 Maximum Stats): */
return 0;
}
}
public override string DefaultTitle { get { return String.Format( "<basefont color=#FFFFFF>Power Scroll ({0}{1} Maximum Stats):</basefont>", ( (int)Value - 225 ) >= 0 ? "+" : "", (int)Value - 225 ); } }
public StatCapScroll() : this( 105 )
{
}
[Constructable]
public StatCapScroll( int value ) : base( 0x14F0 )
public StatCapScroll( int value ) : base( SkillName.Alchemy, value )
{
Hue = 0x481;
Weight = 1.0;
LootType = LootType.Cursed;
m_Value = value;
}
public StatCapScroll( Serial serial ) : base( serial )
@ -36,92 +47,69 @@ namespace Server.Items
public override void AddNameProperty(ObjectPropertyList list)
{
if ( m_Value == 230 )
list.Add( 1049463, "#1049476" ); // a wonderous scroll of ~1_type~ (+5 Maximum Stats)
else if ( m_Value == 235 )
list.Add( 1049464, "#1049476" ); // an exalted scroll of ~1_type~ (+10 Maximum Stats)
else if ( m_Value == 240 )
list.Add( 1049465, "#1049476" ); // a mythical scroll of ~1_type~ (+15 Maximum Stats)
else if ( m_Value == 245 )
list.Add( 1049466, "#1049476" ); // a legendary scroll of ~1_type~ (+20 Maximum Stats)
else if ( m_Value == 250 )
list.Add( 1049467, "#1049476" ); // an ultimate scroll of ~1_type~ (+25 Maximum Stats)
int level = ( (int)Value - 230 ) / 5;
if ( level >= 0 && level <= 4 && (int)Value % 5 == 0 )
list.Add( 1049463 + level, "#1049476" ); /* a wonderous scroll of ~1_type~ (+5 Maximum Stats) OR
* an exalted scroll of ~1_type~ (+10 Maximum Stats) OR
* a mythical scroll of ~1_type~ (+15 Maximum Stats) OR
* a legendary scroll of ~1_type~ (+20 Maximum Stats) OR
* an ultimate scroll of ~1_type~ (+25 Maximum Stats) */
else
list.Add( "a scroll of power ({0}{1} Maximum Stats)", (m_Value - 225) >= 0 ? "+" : "", m_Value - 225 );
list.Add( "a scroll of power ({0}{1} Maximum Stats)", (Value - 225) >= 0 ? "+" : "", Value - 225 );
}
public override void OnSingleClick( Mobile from )
{
if ( m_Value == 230 )
base.LabelTo( from, 1049463, "#1049476" ); // a wonderous scroll of ~1_type~ (+5 Maximum Stats)
else if ( m_Value == 235 )
base.LabelTo( from, 1049464, "#1049476" ); // an exalted scroll of ~1_type~ (+10 Maximum Stats)
else if ( m_Value == 240 )
base.LabelTo( from, 1049465, "#1049476" ); // a mythical scroll of ~1_type~ (+15 Maximum Stats)
else if ( m_Value == 245 )
base.LabelTo( from, 1049466, "#1049476" ); // a legendary scroll of ~1_type~ (+20 Maximum Stats)
else if ( m_Value == 250 )
base.LabelTo( from, 1049467, "#1049476" ); // an ultimate scroll of ~1_type~ (+25 Maximum Stats)
int level = ( (int)Value - 230 ) / 5;
if ( level >= 0 && level <= 4 && (int)Value % 5 == 0 )
base.LabelTo( from, 1049463 + level, "#1049476" );
else
base.LabelTo( from, "a scroll of power ({0}{1} Maximum Stats)", (m_Value - 225) >= 0 ? "+" : "", m_Value - 225 );
base.LabelTo( from, "a scroll of power ({0}{1} Maximum Stats)", (Value - 225) >= 0 ? "+" : "", Value - 225 );
}
public void Use( Mobile from, bool firstStage )
public override bool CanUse( Mobile from )
{
if ( Deleted )
if ( !base.CanUse( from ) )
return false;
int newValue = (int)Value;
if ( from is PlayerMobile && ((PlayerMobile)from).HasStatReward )
newValue += 5;
if ( from.StatCap >= newValue )
{
from.SendLocalizedMessage( 1049510 ); // Your stats are too high for this power scroll.
return false;
}
return true;
}
public override void Use( Mobile from )
{
if ( !CanUse( from ) )
return;
if ( IsChildOf( from.Backpack ) )
{
int NewValue = m_Value;
if ( from is PlayerMobile && ((PlayerMobile)from).HasStatReward )
{
NewValue += 5;
}
from.SendLocalizedMessage( 1049512 ); // You feel a surge of magic as the scroll enhances your powers!
if ( from.StatCap >= NewValue )
{
from.SendLocalizedMessage( 1049510 ); // Your stats are too high for this power scroll.
}
else
{
if ( firstStage )
{
from.CloseGump( typeof( StatCapScroll.InternalGump ) );
from.CloseGump( typeof( PowerScroll.InternalGump ) );
#region Scroll of Alacrity
from.CloseGump(typeof( ScrollofAlacrity.InternalGump ) );
#endregion
from.SendGump( new InternalGump( from, this ) );
}
else
{
from.SendLocalizedMessage( 1049512 ); // You feel a surge of magic as the scroll enhances your powers!
from.StatCap = NewValue;
Effects.SendLocationParticles( EffectItem.Create( from.Location, from.Map, EffectItem.DefaultDuration ), 0, 0, 0, 0, 0, 5060, 0 );
Effects.PlaySound( from.Location, from.Map, 0x243 );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X - 6, from.Y - 6, from.Z + 15 ), from.Map ), from, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X - 4, from.Y - 6, from.Z + 15 ), from.Map ), from, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X - 6, from.Y - 4, from.Z + 15 ), from.Map ), from, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
Effects.SendTargetParticles( from, 0x375A, 35, 90, 0x00, 0x00, 9502, (EffectLayer)255, 0x100 );
Delete();
}
}
}
if ( from is PlayerMobile && ((PlayerMobile)from).HasStatReward )
from.StatCap = (int)Value + 5;
else
{
from.SendLocalizedMessage( 1042001 ); // That must be in your pack for you to use it.
}
}
from.StatCap = (int)Value;
public override void OnDoubleClick( Mobile from )
{
Use( from, true );
Effects.SendLocationParticles( EffectItem.Create( from.Location, from.Map, EffectItem.DefaultDuration ), 0, 0, 0, 0, 0, 5060, 0 );
Effects.PlaySound( from.Location, from.Map, 0x243 );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X - 6, from.Y - 6, from.Z + 15 ), from.Map ), from, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X - 4, from.Y - 6, from.Z + 15 ), from.Map ), from, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
Effects.SendMovingParticles( new Entity( Serial.Zero, new Point3D( from.X - 6, from.Y - 4, from.Z + 15 ), from.Map ), from, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100 );
Effects.SendTargetParticles( from, 0x375A, 35, 90, 0x00, 0x00, 9502, (EffectLayer)255, 0x100 );
Delete();
}
public override void Serialize( GenericWriter writer )
@ -129,86 +117,16 @@ namespace Server.Items
base.Serialize( writer );
writer.Write( (int) 0 ); // version
writer.Write( (int) m_Value );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
int version = ( InheritsItem ? 0 : reader.ReadInt() ); //Required for SpecialScroll insertion
switch ( version )
{
case 0:
{
m_Value = reader.ReadInt();
break;
}
}
if ( LootType != LootType.Cursed )
LootType = LootType.Cursed;
if ( Insured )
Insured = false;
}
public class InternalGump : Gump
{
private Mobile m_Mobile;
private StatCapScroll m_Scroll;
public InternalGump( Mobile mobile, StatCapScroll scroll ) : base( 25, 50 )
{
m_Mobile = mobile;
m_Scroll = scroll;
AddPage( 0 );
AddBackground( 25, 10, 420, 200, 5054 );
AddImageTiled( 33, 20, 401, 181, 2624 );
AddAlphaRegion( 33, 20, 401, 181 );
AddHtmlLocalized( 40, 48, 387, 100, 1049469, true, true ); /* Using a scroll increases the maximum amount of a specific skill or your maximum statistics.
* When used, the effect is not immediately seen without a gain of points with that skill or statistics.
* You can view your maximum skill values in your skills window.
* You can view your maximum statistic value in your statistics window.
*/
AddHtmlLocalized( 125, 148, 200, 20, 1049478, 0xFFFFFF, false, false ); // Do you wish to use this scroll?
AddButton( 100, 172, 4005, 4007, 1, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 135, 172, 120, 20, 1046362, 0xFFFFFF, false, false ); // Yes
AddButton( 275, 172, 4005, 4007, 0, GumpButtonType.Reply, 0 );
AddHtmlLocalized( 310, 172, 120, 20, 1046363, 0xFFFFFF, false, false ); // No
int value = scroll.m_Value;
if ( value == 230 )
AddHtmlLocalized( 40, 20, 260, 20, 1049458, 0xFFFFFF, false, false ); // Wonderous Scroll (+5 Maximum Stats):
else if ( value == 235 )
AddHtmlLocalized( 40, 20, 260, 20, 1049459, 0xFFFFFF, false, false ); // Exalted Scroll (+10 Maximum Stats):
else if ( value == 240 )
AddHtmlLocalized( 40, 20, 260, 20, 1049460, 0xFFFFFF, false, false ); // Mythical Scroll (+15 Maximum Stats):
else if ( value == 245 )
AddHtmlLocalized( 40, 20, 260, 20, 1049461, 0xFFFFFF, false, false ); // Legendary Scroll (+20 Maximum Stats):
else if ( value == 250 )
AddHtmlLocalized( 40, 20, 260, 20, 1049462, 0xFFFFFF, false, false ); // Ultimate Scroll (+25 Maximum Stats):
else
AddHtml( 40, 20, 260, 20, String.Format( "<basefont color=#FFFFFF>Power Scroll ({0}{1} Maximum Stats):</basefont>", (value - 225) >= 0 ? "+" : "", value - 225), false, false );
AddHtmlLocalized( 310, 20, 120, 20, 1038019, 0xFFFFFF, false, false ); // Power
}
public override void OnResponse( NetState state, RelayInfo info )
{
if ( info.ButtonID == 1 )
m_Scroll.Use( m_Mobile, false );
}
LootType = LootType.Cursed;
Insured = false;
}
}
}