Missing System Message "Your pet looks happier" (regardless of loyalty)

http://www.runuo.com/community/threads/ready-missing-system-message-your-pet-looks-happier.450209/

Not all powerscrolls do drop - Ninjitsu, Bushido etc.
http://www.runuo.com/community/threads/ready-not-all-powerscrolls-do-drop.459974/

Savage Kin Paint Wrong Skill Requirement + Wrong Success Chance
http://www.runuo.com/community/threads/ready-savage-kin-paint-wrong-skill-requirement-wrong-success-chance.455360/

Hag Quest - Stew, can't eat it
http://www.runuo.com/community/threads/ready-hag-quest-stew.454406/

Giant Blue Beetles shouldn't need beating into submission after being tamed once
http://www.runuo.com/community/threads/ready-giant-blue-beetles.450205/

Greater Dragon Fame/Karma Doesn't Match OSI
http://www.runuo.com/community/threads/ready-greater-dragon-fame-karma-doesnt-match-osi.472206/

Resizing Houses, you can resize a house by using a command under the house sign
http://www.runuo.com/community/threads/ready-resizing-houses.414762/

Crafted Shield Resists are wrong on RunUO
http://www.runuo.com/community/threads/ready-crafted-shield-resists.454186/

Yomotsu Mines, you should not be able to recall out of there.
http://www.runuo.com/community/threads/ready-yomotsu-mines.445486/

Missing Necro Icons in the Buff/Debuff Bar
http://www.runuo.com/community/threads/ready-missing-necro-icons-in-the-buff-debuff-bar.450872/

Chivalry Spells, you are allowed to attempt casting of spells outside of your skill range without a system message
http://www.runuo.com/community/threads/ready-chivalry-spells.450757/

Tinker tools use a different graphic on OSI
http://www.runuo.com/community/threads/ready-tinker-tools.460690/

Tinkering should not be required when crafted a Tetsubo
http://www.runuo.com/community/threads/ready-wrong-skill-requirement-carpentry-wrong-success-chances.455342/

Carpentry-Small+Large Beds -Wrong Success Chance
http://www.runuo.com/community/threads/ready-carpentry-small-large-beds-wrong-success-chance.455794/

Telekinesis, various changes to behaviour with items
http://www.runuo.com/community/threads/ready-telekinesis.455250/

Forensic Evaluation Various issues
http://www.runuo.com/community/threads/ready-forensic-evaluation-various-issues-merged.458700/

Animate Dead Corpses, you cannot carve the corpse after it's used
http://www.runuo.com/community/threads/ready-animate-dead-corpses.453823/

You should be able to use begging skill while riding
http://www.runuo.com/community/threads/ready-begging-while-riding.466174/

Crafting Mod Lower Requirements should only appear on shields
http://www.runuo.com/community/threads/ready-crafting-mod-lower-requirements.452112/

You should be revealed While Taking Poison/Strangle Damage
http://www.runuo.com/community/threads/ready-you-never-reveal-while-taking-poison-strangle-damage.456946/

Insurance messages don't do the math!
http://www.runuo.com/community/threads/ready-insurance-messages-dont-do-the-math.454928/

Slayers should work on area of effect spells
http://www.runuo.com/community/threads/ready-slayers-should-work-on-area-of-effect-spells.448774/

You should not be able to use any travel spell in Heartwood
http://www.runuo.com/community/threads/ready-heartwood.457379/

Welcome Back To The House Friend message does not show post-AoS
http://www.runuo.com/community/threads/ready-welcome-back-to-the-house-friend.415924/

Giant Beetle speed should be very fast when magery spells are cast on it
http://www.runuo.com/community/threads/ready-giant-beetle.417848/
This commit is contained in:
xavier 2011-06-25 18:39:14 +00:00
parent 07e45156e5
commit 5c7774b99a
54 changed files with 682 additions and 130 deletions

View file

@ -97,6 +97,12 @@ namespace Server.Spells
contexts.Remove( m );
}
public void HarmfulSpell( Mobile m )
{
if ( m is BaseCreature )
((BaseCreature)m).OnHarmfulSpell( m_Caster );
}
public Spell( Mobile caster, Item scroll, SpellInfo info )
{
m_Caster = caster;

View file

@ -555,18 +555,19 @@ namespace Server.Spells
new TravelValidator( IsTokunoDungeon ),
new TravelValidator( IsLampRoom ),
new TravelValidator( IsGuardianRoom ),
new TravelValidator( IsHeartwood ),
};
private static bool[,] m_Rules = new bool[,]
{
/*T2A(Fel) Ilshenar Wind(Tram), Wind(Fel), Dungeons(Fel), Solen(Tram), Solen(Fel), CrystalCave(Malas), Gauntlet(Malas), Gauntlet(Ferry), Stronghold, ChampionSpawn, Dungeons(Tokuno[Malas]), LampRoom(Doom), GuardianRoom(Doom) */
/* Recall From */ { false, true, true, false, false, true, false, false, false, false, true, false, true, false, false },
/* Recall To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Gate From */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Gate To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Mark In */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Tele From */ { true, true, true, true, true, true, true, false, true, true, false, true, true, true, true },
/* Tele To */ { true, true, true, true, true, true, true, false, true, false, false, true, true, true, true },
/*T2A(Fel) Ilshenar Wind(Tram), Wind(Fel), Dungeons(Fel), Solen(Tram), Solen(Fel), CrystalCave(Malas), Gauntlet(Malas), Gauntlet(Ferry), Stronghold, ChampionSpawn, Dungeons(Tokuno[Malas]), LampRoom(Doom), GuardianRoom(Doom), Heartwood */
/* Recall From */ { false, true, true, false, false, true, false, false, false, false, true, false, true, false, false, false },
/* Recall To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Gate From */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Gate To */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Mark In */ { false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false },
/* Tele From */ { true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, false },
/* Tele To */ { true, true, true, true, true, true, true, false, true, false, false, true, true, true, true, false },
};
public static bool CheckTravel( Mobile caster, TravelCheckType type )
@ -778,6 +779,13 @@ namespace Server.Spells
return ( x >= 356 && y >= 5 && x < 375 && y < 25 );
}
public static bool IsHeartwood( Map map, Point3D loc )
{
int x = loc.X, y = loc.Y;
return (map == Map.Trammel || map == Map.Felucca) && (x >= 6911 && y >= 254 && x < 7167 && y < 511);
}
public static bool IsInvalid( Map map, Point3D loc )
{
if( map == null || map == Map.Internal )
@ -918,7 +926,12 @@ namespace Server.Spells
}
if( target is BaseCreature && from != null && delay == TimeSpan.Zero )
((BaseCreature)target).OnDamagedBySpell( from );
{
BaseCreature c = (BaseCreature) target;
c.OnHarmfulSpell( from );
c.OnDamagedBySpell( from );
}
}
public static void Damage( Spell spell, Mobile target, double damage, int phys, int fire, int cold, int pois, int nrgy )
@ -979,7 +992,12 @@ namespace Server.Spells
}
if( target is BaseCreature && from != null && delay == TimeSpan.Zero )
((BaseCreature)target).OnDamagedBySpell( from );
{
BaseCreature c = (BaseCreature) target;
c.OnHarmfulSpell( from );
c.OnDamagedBySpell( from );
}
}
public static void DoLeech( int damageGiven, Mobile from, Mobile target )
@ -1097,7 +1115,12 @@ namespace Server.Spells
WeightOverloading.DFA = DFAlgorithm.Standard;
if( m_Target is BaseCreature && m_From != null )
((BaseCreature)m_Target).OnDamagedBySpell( m_From );
{
BaseCreature c = (BaseCreature) m_Target;
c.OnHarmfulSpell( m_From );
c.OnDamagedBySpell( m_From );
}
if( m_Spell != null )
m_Spell.RemoveDelayedDamageContext( m_Target );

View file

@ -32,12 +32,7 @@ namespace Server.Spells.Chivalry
if ( !base.CheckCast() )
return false;
if ( Caster.Skills[SkillName.Chivalry].Value < RequiredSkill )
{
Caster.SendLocalizedMessage( 1060172, RequiredSkill.ToString( "F1" ) ); // You must have at least ~1_SKILL_REQUIREMENT~ Chivalry to use this ability,
return false;
}
else if ( Caster.TithingPoints < RequiredTithing )
if ( Caster.TithingPoints < RequiredTithing )
{
Caster.SendLocalizedMessage( 1060173, RequiredTithing.ToString() ); // You must have at least ~1_TITHE_REQUIREMENT~ Tithing Points to use this ability,
return false;
@ -60,12 +55,7 @@ namespace Server.Spells.Chivalry
int mana = ScaleMana( RequiredMana );
if ( Caster.Skills[SkillName.Chivalry].Value < RequiredSkill )
{
Caster.SendLocalizedMessage( 1060172, RequiredSkill.ToString( "F1" ) ); // You must have at least ~1_SKILL_REQUIREMENT~ Chivalry to use this ability,
return false;
}
else if ( Caster.TithingPoints < requiredTithing )
if ( Caster.TithingPoints < requiredTithing )
{
Caster.SendLocalizedMessage( 1060173, RequiredTithing.ToString() ); // You must have at least ~1_TITHE_REQUIREMENT~ Tithing Points to use this ability,
return false;

View file

@ -65,7 +65,7 @@ namespace Server.Spells.Fifth
SpellHelper.CheckReflect( (int)this.Circle, ref from, ref target );
int damage = (int)((Caster.Skills[SkillName.Magery].Value + Caster.Int) / 5);
if ( damage > 60 )
damage = 60;
@ -104,8 +104,8 @@ namespace Server.Spells.Fifth
if ( lowestStat > 150 )
lowestStat = 150;
int damage = (highestStat - lowestStat) / 4;//less damage
double damage = GetDamageScalar(m)*(highestStat - lowestStat) / 4;//less damage
if ( damage > 45 )
damage = 45;

View file

@ -78,9 +78,11 @@ namespace Server.Spells.Fifth
}
m.Paralyze( TimeSpan.FromSeconds( duration ) );
m.PlaySound( 0x204 );
m.FixedEffect( 0x376A, 6, 1 );
HarmfulSpell( m );
}
FinishSequence();

View file

@ -187,6 +187,9 @@ namespace Server.Spells.Fifth
if ( m.ApplyPoison( m_Caster, p ) == ApplyPoisonResult.Poisoned )
if ( SpellHelper.CanRevealCaster( m ) )
m_Caster.RevealingAction();
if ( m is BaseCreature )
( (BaseCreature) m ).OnHarmfulSpell( m_Caster );
}
public override bool OnMoveOver( Mobile m )

View file

@ -51,6 +51,8 @@ namespace Server.Spells.First
TimeSpan length = SpellHelper.GetDuration( Caster, m );
BuffInfo.AddBuff( m, new BuffInfo( BuffIcon.Clumsy, 1075831, length, m, percentage.ToString() ) );
HarmfulSpell( m );
}
FinishSequence();

View file

@ -51,6 +51,8 @@ namespace Server.Spells.First
TimeSpan length = SpellHelper.GetDuration( Caster, m );
BuffInfo.AddBuff( m, new BuffInfo( BuffIcon.FeebleMind, 1075833, length, m, percentage.ToString() ) );
HarmfulSpell( m );
}
FinishSequence();

View file

@ -51,6 +51,8 @@ namespace Server.Spells.First
TimeSpan length = SpellHelper.GetDuration( Caster, m );
BuffInfo.AddBuff( m, new BuffInfo( BuffIcon.Weaken, 1075837, length, m, percentage.ToString() ) );
HarmfulSpell( m );
}
FinishSequence();

View file

@ -81,7 +81,9 @@ namespace Server.Spells.Fourth
string args = String.Format("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}", percentage, percentage, percentage, 10, 10, 10, 10);
BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.Curse, 1075835, 1075836, length, m, args.ToString()));
BuffInfo.AddBuff( m, new BuffInfo( BuffIcon.Curse, 1075835, 1075836, length, m, args.ToString() ) );
HarmfulSpell( m );
}
FinishSequence();

View file

@ -201,6 +201,9 @@ namespace Server.Spells.Fourth
AOS.Damage( m, m_Caster, damage, 0, 100, 0, 0, 0 );
m.PlaySound( 0x208 );
if ( m is BaseCreature )
((BaseCreature) m).OnHarmfulSpell( m_Caster );
}
return true;
@ -278,6 +281,9 @@ namespace Server.Spells.Fourth
AOS.Damage( m, caster, damage, 0, 100, 0, 0, 0 );
m.PlaySound( 0x208 );
if ( m is BaseCreature )
((BaseCreature) m).OnHarmfulSpell( caster );
}
}
}

View file

@ -98,6 +98,8 @@ namespace Server.Spells.Fourth
m.FixedParticles( 0x374A, 10, 15, 5032, EffectLayer.Head );
m.PlaySound( 0x1F8 );
}
HarmfulSpell( m );
}
FinishSequence();

View file

@ -380,6 +380,7 @@ namespace Server.Spells.Necromancy
corpse.ItemID = Utility.Random( 0xECA, 9 ); // bone graphic
corpse.Hue = 0;
corpse.ProcessDelta();
corpse.Animated = true;
Register( caster, summoned );
}

View file

@ -86,7 +86,7 @@ namespace Server.Spells.Necromancy
BuffInfo.AddBuff ( m, new BuffInfo ( BuffIcon.BloodOathCurse, 1075661, duration, m, Caster.Name.ToString () ) );
m_Table[m] = timer;
HarmfulSpell( m );
}
FinishSequence();

View file

@ -84,6 +84,8 @@ namespace Server.Spells.Necromancy
for ( int i = 0; i < mods.Length; ++i )
m.AddResistanceMod( mods[i] );
HarmfulSpell( m );
}
FinishSequence();

View file

@ -68,6 +68,11 @@ namespace Server.Spells.Necromancy
TimeSpan duration = TimeSpan.FromSeconds((Caster.Skills[SkillName.SpiritSpeak].Value / 12) + 1.0);
Timer.DelayCall(duration, new TimerStateCallback(EffectExpire_Callback), m);
HarmfulSpell( m );
BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.EvilOmen, 1075647, 1075648, duration, m));
}
FinishSequence();

View file

@ -60,6 +60,8 @@ namespace Server.Spells.Necromancy
SetMindRotScalar( Caster, m, 1.25, duration );
else
SetMindRotScalar( Caster, m, 2.00, duration );
HarmfulSpell( m );
}
FinishSequence();

View file

@ -82,6 +82,7 @@ namespace Server.Spells.Necromancy
Misc.WeightOverloading.DFA = Misc.DFAlgorithm.Standard;
//SpellHelper.Damage( this, m, damage, 100, 0, 0, 0, 0, Misc.DFAlgorithm.PainSpike );
HarmfulSpell( m );
}
FinishSequence();

View file

@ -66,8 +66,47 @@ namespace Server.Spells.Necromancy
m_Table[m] = t;
}
HarmfulSpell( m );
}
//Calculations for the buff bar
double spiritlevel = Caster.Skills[SkillName.SpiritSpeak].Value / 10;
if (spiritlevel < 4)
spiritlevel = 4;
int d_MinDamage = 4;
int d_MaxDamage = ((int)spiritlevel + 1) * 3;
string args = String.Format("{0}\t{1}", d_MinDamage, d_MaxDamage);
int i_Count = (int)spiritlevel;
int i_MaxCount = i_Count;
int i_HitDelay = 5;
int i_Length = i_HitDelay;
while (i_Count > 1)
{
--i_Count;
if (i_HitDelay > 1)
{
if (i_MaxCount < 5)
{
--i_HitDelay;
}
else
{
int delay = (int)(Math.Ceiling((1.0 + (5 * i_Count)) / i_MaxCount));
if (delay <= 5)
i_HitDelay = delay;
else
i_HitDelay = 5;
}
}
i_Length += i_HitDelay;
}
TimeSpan t_Duration = TimeSpan.FromSeconds(i_Length);
BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.Strangle, 1075794, 1075795, t_Duration, m, args.ToString()));
FinishSequence();
}
@ -171,6 +210,9 @@ namespace Server.Spells.Necromancy
damage *= 1.75;
AOS.Damage( m_Target, m_From, (int)damage, 0, 0, 0, 100, 0 );
if ( 0.60 <= Utility.RandomDouble() ) // OSI: randomly revealed between first and third damage tick, guessing 60% chance
m_Target.RevealingAction();
}
}
}

View file

@ -89,19 +89,19 @@ namespace Server.Spells.Seventh
else if ( !Core.AOS )
damage /= targets.Count;
double toDeal;
for ( int i = 0; i < targets.Count; ++i )
{
toDeal = damage;
Mobile m = targets[i];
double toDeal = damage;
if ( !Core.AOS && CheckResisted( m ) )
{
toDeal *= 0.5;
m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy.
}
toDeal *= GetDamageScalar( m );
Caster.DoHarmful( m );
SpellHelper.Damage( this, m, toDeal, 0, 0, 0, 0, 100 );

View file

@ -84,6 +84,8 @@ namespace Server.Spells.Seventh
m.FixedParticles( 0x374A, 10, 15, 5054, EffectLayer.Head );
m.PlaySound( 0x1F9 );
}
HarmfulSpell( m );
}
FinishSequence();

View file

@ -87,20 +87,21 @@ namespace Server.Spells.Seventh
damage = (damage * 2) / targets.Count;
else if ( !Core.AOS )
damage /= targets.Count;
double toDeal;
for ( int i = 0; i < targets.Count; ++i )
{
Mobile m = targets[i];
double toDeal = damage;
toDeal = damage;
if ( !Core.AOS && CheckResisted( m ) )
{
toDeal *= 0.5;
damage *= 0.5;
m.SendLocalizedMessage( 501783 ); // You feel yourself resisting magical energy.
}
toDeal *= GetDamageScalar( m );
Caster.DoHarmful( m );
SpellHelper.Damage( this, m, toDeal, 0, 100, 0, 0, 0 );

View file

@ -75,6 +75,8 @@ namespace Server.Spells.Sixth
m.FixedParticles( 0x374A, 10, 15, 5028, EffectLayer.Waist );
m.PlaySound( 0x1FB );
HarmfulSpell( m );
}
}

View file

@ -188,6 +188,9 @@ namespace Server.Spells.Sixth
m.PlaySound( 0x204 );
m.FixedEffect( 0x376A, 10, 16 );
if ( m is BaseCreature )
((BaseCreature) m).OnHarmfulSpell( m_Caster );
}
return true;

View file

@ -93,6 +93,8 @@ namespace Server.Spells.Third
m.FixedParticles( 0x374A, 10, 15, 5021, EffectLayer.Waist );
m.PlaySound( 0x205 );
HarmfulSpell( m );
}
FinishSequence();

View file

@ -66,7 +66,6 @@ namespace Server.Spells.Third
Effects.SendLocationParticles( EffectItem.Create( item.Location, item.Map, EffectItem.DefaultDuration ), 0x376A, 9, 32, 5022 );
Effects.PlaySound( item.Location, item.Map, 0x1F5 );
item.DisplayTo( Caster );
item.OnItemUsed( Caster, item );
}
}