Fixes null propogation

This commit is contained in:
Kamron Batman 2018-09-14 13:49:23 -07:00
parent 22ab83ea9e
commit 3c9842ee5a
218 changed files with 799 additions and 1458 deletions

View file

@ -96,8 +96,7 @@ namespace Server.Spells
public void HarmfulSpell( Mobile m )
{
if ( m is BaseCreature )
((BaseCreature)m).OnHarmfulSpell( m_Caster );
(m as BaseCreature)?.OnHarmfulSpell( m_Caster );
}
public Spell( Mobile caster, Item scroll, SpellInfo info )
@ -311,11 +310,9 @@ namespace Server.Spells
scalar *= 2.0; // Double magery damage to monsters/animals if not AOS
}
if ( target is BaseCreature )
((BaseCreature)target).AlterDamageScalarFrom( m_Caster, ref scalar );
(target as BaseCreature)?.AlterDamageScalarFrom( m_Caster, ref scalar );
if ( m_Caster is BaseCreature )
((BaseCreature)m_Caster).AlterDamageScalarTo( target, ref scalar );
(m_Caster as BaseCreature)?.AlterDamageScalarTo( target, ref scalar );
if ( Core.SE )
scalar *= GetSlayerDamageScalar( target );
@ -417,11 +414,9 @@ namespace Server.Spells
OnDisturb( type, true );
if ( m_CastTimer != null )
m_CastTimer.Stop();
m_CastTimer?.Stop();
if ( m_AnimTimer != null )
m_AnimTimer.Stop();
m_AnimTimer?.Stop();
if ( Core.AOS && m_Caster.Player && type == DisturbType.Hurt )
DoHurtFizzle();
@ -908,8 +903,7 @@ namespace Server.Spells
m_Spell.m_State = SpellState.Sequencing;
m_Spell.m_CastTimer = null;
m_Spell.m_Caster.OnSpellCast( m_Spell );
if ( m_Spell.m_Caster.Region != null )
m_Spell.m_Caster.Region.OnSpellCast( m_Spell.m_Caster, m_Spell );
m_Spell.m_Caster.Region?.OnSpellCast( m_Spell.m_Caster, m_Spell );
m_Spell.m_Caster.NextSpellTime = Core.TickCount + (int)m_Spell.GetCastRecovery().TotalMilliseconds; // Spell.NextSpellDelay;
Target originalTarget = m_Spell.m_Caster.Target;

View file

@ -924,8 +924,7 @@ namespace Server.Spells
bool reflect = (target.MagicDamageAbsorb >= 0);
if ( target is BaseCreature )
((BaseCreature)target).CheckReflect( caster, ref reflect );
(target as BaseCreature)?.CheckReflect( caster, ref reflect );
if ( target.MagicDamageAbsorb <= 0 )
{
@ -982,11 +981,9 @@ namespace Server.Spells
if ( delay == TimeSpan.Zero )
{
if ( from is BaseCreature )
((BaseCreature)from).AlterSpellDamageTo( target, ref iDamage );
(@from as BaseCreature)?.AlterSpellDamageTo( target, ref iDamage );
if ( target is BaseCreature )
((BaseCreature)target).AlterSpellDamageFrom( from, ref iDamage );
(target as BaseCreature)?.AlterSpellDamageFrom( @from, ref iDamage );
target.Damage( iDamage, from );
}
@ -1039,11 +1036,9 @@ namespace Server.Spells
if ( delay == TimeSpan.Zero )
{
if ( from is BaseCreature )
((BaseCreature)from).AlterSpellDamageTo( target, ref iDamage );
(@from as BaseCreature)?.AlterSpellDamageTo( target, ref iDamage );
if ( target is BaseCreature )
((BaseCreature)target).AlterSpellDamageFrom( from, ref iDamage );
(target as BaseCreature)?.AlterSpellDamageFrom( @from, ref iDamage );
WeightOverloading.DFA = dfa;
@ -1126,15 +1121,12 @@ namespace Server.Spells
protected override void OnTick()
{
if ( m_From is BaseCreature )
((BaseCreature)m_From).AlterSpellDamageTo( m_Target, ref m_Damage );
(m_From as BaseCreature)?.AlterSpellDamageTo( m_Target, ref m_Damage );
if ( m_Target is BaseCreature )
((BaseCreature)m_Target).AlterSpellDamageFrom( m_From, ref m_Damage );
(m_Target as BaseCreature)?.AlterSpellDamageFrom( m_From, ref m_Damage );
m_Target.Damage( m_Damage );
if ( m_Spell != null )
m_Spell.RemoveDelayedDamageContext( m_Target );
m_Spell?.RemoveDelayedDamageContext( m_Target );
}
}
@ -1192,8 +1184,7 @@ namespace Server.Spells
c.OnDamagedBySpell( m_From );
}
if ( m_Spell != null )
m_Spell.RemoveDelayedDamageContext( m_Target );
m_Spell?.RemoveDelayedDamageContext( m_Target );
}
}

View file

@ -56,8 +56,7 @@ namespace Server.Spells.Bushido
{
Timer t = (Timer)m_Table[m];
if ( t != null )
t.Stop();
t?.Stop();
t = new InternalTimer( m );
@ -70,8 +69,7 @@ namespace Server.Spells.Bushido
{
Timer t = (Timer)m_Table[m];
if ( t != null )
t.Stop();
t?.Stop();
m_Table.Remove( m );
@ -106,8 +104,7 @@ namespace Server.Spells.Bushido
{
Timer t = (Timer)m_RegenTable[m];
if ( t != null )
t.Stop();
t?.Stop();
t = new RegenTimer( m );
@ -120,8 +117,7 @@ namespace Server.Spells.Bushido
{
Timer t = (Timer)m_RegenTable[m];
if ( t != null )
t.Stop();
t?.Stop();
m_RegenTable.Remove( m );
}

View file

@ -71,8 +71,7 @@ namespace Server.Spells.Bushido
{
Timer t = (Timer)m_Table[m];
if ( t != null )
t.Stop();
t?.Stop();
t = new InternalTimer( m );
@ -85,8 +84,7 @@ namespace Server.Spells.Bushido
{
Timer t = (Timer)m_Table[m];
if ( t != null )
t.Stop();
t?.Stop();
m_Table.Remove( m );

View file

@ -181,8 +181,7 @@ namespace Server.Spells.Bushido
{
Timer t = (Timer)m_Table[m];
if ( t != null )
t.Stop();
t?.Stop();
t = new InternalTimer( m, GetEvadeDuration( m ) );
@ -195,8 +194,7 @@ namespace Server.Spells.Bushido
{
Timer t = (Timer)m_Table[m];
if ( t != null )
t.Stop();
t?.Stop();
m_Table.Remove( m );

View file

@ -35,8 +35,7 @@ namespace Server.Spells.Bushido
{
info.Clear();
if ( info.m_Timer != null )
info.m_Timer.Stop();
info.m_Timer?.Stop();
}
if ( !defender.Alive )
@ -110,8 +109,7 @@ namespace Server.Spells.Bushido
info.Clear();
if ( info.m_Timer != null )
info.m_Timer.Stop();
info.m_Timer?.Stop();
m_Table.Remove( target );
}

View file

@ -69,8 +69,7 @@ namespace Server.Spells.Chivalry
Timer t = (Timer)m_Table[weapon];
if ( t != null )
t.Stop();
t?.Stop();
weapon.Consecrated = true;

View file

@ -36,8 +36,7 @@ namespace Server.Spells.Chivalry
Timer t = (Timer)m_Table[Caster];
if ( t != null )
t.Stop();
t?.Stop();
int delay = ComputePowerValue( 10 );

View file

@ -35,8 +35,7 @@ namespace Server.Spells.Chivalry
Timer t = (Timer)m_Table[Caster];
if ( t != null )
t.Stop();
t?.Stop();
double delay = (double)ComputePowerValue( 1 ) / 60;

View file

@ -92,8 +92,7 @@ namespace Server.Spells.Eighth
protected override void OnTargetFinish( Mobile from )
{
if ( m_Owner != null )
m_Owner.FinishSequence();
m_Owner?.FinishSequence();
}
}
}

View file

@ -99,8 +99,7 @@ namespace Server.Spells.Fifth
protected override void OnTargetFinish( Mobile from )
{
if ( m_Owner != null )
m_Owner.FinishSequence();
m_Owner?.FinishSequence();
}
}
}

View file

@ -171,8 +171,7 @@ namespace Server.Spells.Fifth
{
if ( !m_Owner.CanBeginAction( typeof( IncognitoSpell ) ) )
{
if ( m_Owner is PlayerMobile )
((PlayerMobile)m_Owner).SetHairMods( -1, -1 );
(m_Owner as PlayerMobile)?.SetHairMods( -1, -1 );
m_Owner.BodyMod = 0;
m_Owner.HueMod = -1;

View file

@ -114,8 +114,7 @@ namespace Server.Spells.Fifth
{
base.OnAfterDelete();
if ( m_Timer != null )
m_Timer.Stop();
m_Timer?.Stop();
}
public InternalItem( Serial serial ) : base( serial )
@ -187,8 +186,7 @@ namespace Server.Spells.Fifth
if ( SpellHelper.CanRevealCaster( m ) )
m_Caster.RevealingAction();
if ( m is BaseCreature )
( (BaseCreature) m ).OnHarmfulSpell( m_Caster );
(m as BaseCreature)?.OnHarmfulSpell( m_Caster );
}
public override bool OnMoveOver( Mobile m )

View file

@ -38,8 +38,7 @@ namespace Server.Spells.First
SpellHelper.AddStatCurse( Caster, m, StatType.Dex );
if ( m.Spell != null )
m.Spell.OnCasterHurt();
m.Spell?.OnCasterHurt();
m.Paralyzed = false;

View file

@ -38,8 +38,7 @@ namespace Server.Spells.First
SpellHelper.AddStatCurse( Caster, m, StatType.Int );
if ( m.Spell != null )
m.Spell.OnCasterHurt();
m.Spell?.OnCasterHurt();
m.Paralyzed = false;

View file

@ -38,8 +38,7 @@ namespace Server.Spells.First
SpellHelper.AddStatCurse( Caster, m, StatType.Str );
if ( m.Spell != null )
m.Spell.OnCasterHurt();
m.Spell?.OnCasterHurt();
m.Paralyzed = false;

View file

@ -67,8 +67,7 @@ namespace Server.Spells.Fourth
m.UpdateResistances();
}
if ( m.Spell != null )
m.Spell.OnCasterHurt();
m.Spell?.OnCasterHurt();
m.Paralyzed = false;

View file

@ -127,8 +127,7 @@ namespace Server.Spells.Fourth
{
base.OnAfterDelete();
if ( m_Timer != null )
m_Timer.Stop();
m_Timer?.Stop();
}
public FireFieldItem( Serial serial ) : base( serial )
@ -201,8 +200,7 @@ 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 );
(m as BaseCreature)?.OnHarmfulSpell( m_Caster );
}
return true;
@ -281,8 +279,7 @@ 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 );
(m as BaseCreature)?.OnHarmfulSpell( caster );
}
}
}

View file

@ -58,8 +58,7 @@ namespace Server.Spells.Fourth
SpellHelper.CheckReflect( (int)Circle, Caster, ref m );
if ( m.Spell != null )
m.Spell.OnCasterHurt();
m.Spell?.OnCasterHurt();
m.Paralyzed = false;

View file

@ -142,9 +142,7 @@ namespace Server.Spells.Mysticism
protected override void OnTarget( Mobile from, object o )
{
var p = o as IPoint3D;
if ( p != null )
if ( o is IPoint3D p )
m_Owner.Target( p );
}

View file

@ -193,8 +193,7 @@ namespace Server.Spells.Mysticism
public void EndPlague( bool restart )
{
if ( m_Timer != null )
m_Timer.Stop();
m_Timer?.Stop();
if ( restart && m_Next != null )
{

View file

@ -153,32 +153,26 @@ namespace Server.Spells.Necromancy
{
MaabusCoffinComponent comp = obj as MaabusCoffinComponent;
if ( comp != null )
MaabusCoffin addon = comp?.Addon as MaabusCoffin;
if ( addon != null )
{
MaabusCoffin addon = comp.Addon as MaabusCoffin;
PlayerMobile pm = Caster as PlayerMobile;
if ( addon != null )
QuestSystem qs = pm?.Quest;
if ( qs is DarkTidesQuest )
{
PlayerMobile pm = Caster as PlayerMobile;
QuestObjective objective = qs.FindObjective( typeof( AnimateMaabusCorpseObjective ) );
if ( pm != null )
if ( objective != null && !objective.Completed )
{
QuestSystem qs = pm.Quest;
if ( qs is DarkTidesQuest )
{
QuestObjective objective = qs.FindObjective( typeof( AnimateMaabusCorpseObjective ) );
if ( objective != null && !objective.Completed )
{
addon.Awake( Caster );
objective.Complete();
}
}
addon.Awake( Caster );
objective.Complete();
}
return;
}
return;
}
Corpse c = obj as Corpse;

View file

@ -58,14 +58,12 @@ namespace Server.Spells.Necromancy
*/
ExpireTimer timer = (ExpireTimer)m_Table[m];
if ( timer != null )
timer.DoExpire();
timer?.DoExpire();
m_OathTable[Caster] = Caster;
m_OathTable[m] = Caster;
if ( m.Spell != null )
m.Spell.OnCasterHurt();
m.Spell?.OnCasterHurt();
Caster.PlaySound( 0x175 );

View file

@ -53,8 +53,7 @@ namespace Server.Spells.Necromancy
else
m.SendLocalizedMessage( 1061689 ); // Your skin turns dry and corpselike.
if ( m.Spell != null )
m.Spell.OnCasterHurt();
m.Spell?.OnCasterHurt();
m.FixedParticles( 0x373A, 1, 15, 9913, 67, 7, EffectLayer.Head );
m.PlaySound( 0x1BB );

View file

@ -52,8 +52,7 @@ namespace Server.Spells.Necromancy
Timer t = (Timer)m_Table[weapon];
if ( t != null )
t.Stop();
t?.Stop();
weapon.Cursed = true;

View file

@ -48,8 +48,7 @@ namespace Server.Spells.Necromancy
* The effect lasts for one harmful event only.
*/
if (m.Spell != null)
m.Spell.OnCasterHurt();
m.Spell?.OnCasterHurt();
m.PlaySound(0xFC);
m.FixedParticles(0x3728, 1, 13, 9912, 1150, 7, EffectLayer.Head);

View file

@ -44,8 +44,7 @@ namespace Server.Spells.Necromancy
* The effect lasts for ((Spirit Speak skill level - target's Resist Magic skill level) / 50 ) + 20 seconds.
*/
if ( m.Spell != null )
m.Spell.OnCasterHurt();
m.Spell?.OnCasterHurt();
m.PlaySound( 0x1FB );
m.PlaySound( 0x258 );

View file

@ -50,8 +50,7 @@ namespace Server.Spells.Necromancy
* for a target at 20% Stamina the damage multiplier is 2.6
*/
if ( m.Spell != null )
m.Spell.OnCasterHurt();
m.Spell?.OnCasterHurt();
m.PlaySound( 0x22F );
m.FixedParticles( 0x36CB, 1, 9, 9911, 67, 5, EffectLayer.Head );

View file

@ -61,8 +61,7 @@ namespace Server.Spells.Ninjitsu
if ( info.m_Steps > 0 )
damageBonus = attacker.Skills[SkillName.Ninjitsu].Fixed / 150;
if ( info.m_Timer != null )
info.m_Timer.Stop();
info.m_Timer?.Stop();
m_Table.Remove( defender );
}
@ -160,8 +159,7 @@ namespace Server.Spells.Ninjitsu
else
AOS.Damage( info.m_Target, info.m_Attacker, damage, true, 100, 0, 0, 0, 0, 0, 0, false, false, true ); // Damage is physical.
if ( info.m_Timer != null )
info.m_Timer.Stop();
info.m_Timer?.Stop();
m_Table.Remove( info.m_Target );
}

View file

@ -90,8 +90,7 @@ namespace Server.Spells.Ninjitsu
if ( info != null )
{
if ( info.m_Timer != null )
info.m_Timer.Stop();
info.m_Timer?.Stop();
m_Table.Remove( info.m_Mobile );
}
@ -134,8 +133,7 @@ namespace Server.Spells.Ninjitsu
{
KiAttackInfo info = (KiAttackInfo)state;
if ( info.m_Timer != null )
info.m_Timer.Stop();
info.m_Timer?.Stop();
ClearCurrentMove( info.m_Mobile );
info.m_Mobile.SendLocalizedMessage( 1063102 ); // You failed to complete your Ki Attack in time.

View file

@ -61,8 +61,7 @@ namespace Server.Spells.Ninjitsu
{
info = (SurpriseAttackInfo)m_Table[defender];
if ( info.m_Timer != null )
info.m_Timer.Stop();
info.m_Timer?.Stop();
m_Table.Remove( defender );
}
@ -119,8 +118,7 @@ namespace Server.Spells.Ninjitsu
{
SurpriseAttackInfo info = (SurpriseAttackInfo)state;
if ( info.m_Timer != null )
info.m_Timer.Stop();
info.m_Timer?.Stop();
info.m_Target.SendLocalizedMessage( 1063131 ); // Your defenses have returned to normal.

View file

@ -162,8 +162,7 @@ namespace Server.Spells.Seventh
{
base.OnAfterDelete();
if ( m_Timer != null )
m_Timer.Stop();
m_Timer?.Stop();
}
private class InternalTimer : Timer

View file

@ -37,8 +37,7 @@ namespace Server.Spells.Seventh
SpellHelper.CheckReflect( (int)Circle, Caster, ref m );
if ( m.Spell != null )
m.Spell.OnCasterHurt();
m.Spell?.OnCasterHurt();
m.Paralyzed = false;

View file

@ -64,8 +64,7 @@ namespace Server.Spells.Sixth
m_Defender = defender;
m_Target = target;
if ( m_Spell != null )
m_Spell.StartDelayedDamageContext( attacker, this );
m_Spell?.StartDelayedDamageContext( attacker, this );
Priority = TimerPriority.FiftyMS;
}
@ -99,8 +98,7 @@ namespace Server.Spells.Sixth
SpellHelper.Damage( m_Spell, m_Target, damage, 0, 100, 0, 0, 0 );
if ( m_Spell != null )
m_Spell.RemoveDelayedDamageContext( m_Attacker );
m_Spell?.RemoveDelayedDamageContext( m_Attacker );
}
}
}

View file

@ -118,8 +118,7 @@ namespace Server.Spells.Sixth
{
base.OnAfterDelete();
if ( m_Timer != null )
m_Timer.Stop();
m_Timer?.Stop();
}
public InternalItem( Serial serial ) : base( serial )
@ -188,8 +187,7 @@ namespace Server.Spells.Sixth
m.PlaySound( 0x204 );
m.FixedEffect( 0x376A, 10, 16 );
if ( m is BaseCreature )
((BaseCreature) m).OnHarmfulSpell( m_Caster );
(m as BaseCreature)?.OnHarmfulSpell( m_Caster );
}
return true;

View file

@ -94,8 +94,7 @@ namespace Server.Spells.Spellweaving
{
if (m_WeaponDamageTable.TryGetValue( weapon, out ImmolatingWeaponEntry entry ))
{
if ( entry.m_Caster != null )
entry.m_Caster.PlaySound( 0x27 );
entry.m_Caster?.PlaySound( 0x27 );
entry.m_Timer.Stop();

View file

@ -38,8 +38,7 @@ namespace Server.Items
public virtual void Expire( Mobile parent )
{
if ( parent != null )
parent.SendLocalizedMessage( 1072515, (Name == null ? $"#{LabelNumber}" : Name) ); // The ~1_name~ expired...
parent?.SendLocalizedMessage( 1072515, (Name == null ? $"#{LabelNumber}" : Name) ); // The ~1_name~ expired...
Effects.PlaySound( GetWorldLocation(), Map, 0x201 );

View file

@ -90,8 +90,7 @@ namespace Server.Spells.Spellweaving
protected override void OnTargetFinish( Mobile from )
{
if ( m_Owner != null )
m_Owner.FinishSequence();
m_Owner?.FinishSequence();
}
}

View file

@ -34,8 +34,7 @@ namespace Server.Spells.Third
SpellHelper.CheckReflect( (int)Circle, Caster, ref m );
if ( m.Spell != null )
m.Spell.OnCasterHurt();
m.Spell?.OnCasterHurt();
m.Paralyzed = false;

View file

@ -179,8 +179,7 @@ namespace Server.Spells.Third
{
base.OnAfterDelete();
if ( m_Timer != null )
m_Timer.Stop();
m_Timer?.Stop();
}
private class InternalTimer : Timer