Fixes code according to modern code style. Fixes a few expression bugs.

This commit is contained in:
Kamron Batman 2018-09-15 09:58:51 -07:00
parent 89eea25e5f
commit 970fd563b2
3324 changed files with 441118 additions and 433755 deletions

View file

@ -1,264 +1,270 @@
using System;
using System.Collections;
using Server.Items;
using Server.Targeting;
using Server.Mobiles;
using Server.Targeting;
namespace Server.SkillHandlers
{
public class Discordance
{
public static void Initialize()
{
SkillInfo.Table[(int)SkillName.Discordance].Callback = OnUse;
}
public class Discordance
{
private static Hashtable m_Table = new Hashtable();
public static TimeSpan OnUse( Mobile m )
{
m.RevealingAction();
public static void Initialize()
{
SkillInfo.Table[(int)SkillName.Discordance].Callback = OnUse;
}
BaseInstrument.PickInstrument( m, OnPickedInstrument );
public static TimeSpan OnUse(Mobile m)
{
m.RevealingAction();
return TimeSpan.FromSeconds( 1.0 ); // Cannot use another skill for 1 second
}
BaseInstrument.PickInstrument(m, OnPickedInstrument);
public static void OnPickedInstrument( Mobile from, BaseInstrument instrument )
{
from.RevealingAction();
from.SendLocalizedMessage( 1049541 ); // Choose the target for your song of discordance.
from.Target = new DiscordanceTarget( from, instrument );
from.NextSkillTime = Core.TickCount + 6000;
}
return TimeSpan.FromSeconds(1.0); // Cannot use another skill for 1 second
}
private class DiscordanceInfo
{
public Mobile m_From;
public Mobile m_Creature;
public DateTime m_EndTime;
public bool m_Ending;
public Timer m_Timer;
public int m_Effect;
public ArrayList m_Mods;
public static void OnPickedInstrument(Mobile from, BaseInstrument instrument)
{
from.RevealingAction();
from.SendLocalizedMessage(1049541); // Choose the target for your song of discordance.
from.Target = new DiscordanceTarget(from, instrument);
from.NextSkillTime = Core.TickCount + 6000;
}
public DiscordanceInfo( Mobile from, Mobile creature, int effect, ArrayList mods )
{
m_From = from;
m_Creature = creature;
m_EndTime = DateTime.UtcNow;
m_Ending = false;
m_Effect = effect;
m_Mods = mods;
public static bool GetEffect(Mobile targ, ref int effect)
{
DiscordanceInfo info = m_Table[targ] as DiscordanceInfo;
Apply();
}
if (info == null)
return false;
public void Apply()
{
for ( int i = 0; i < m_Mods.Count; ++i )
{
object mod = m_Mods[i];
effect = info.m_Effect;
return true;
}
if ( mod is ResistanceMod )
m_Creature.AddResistanceMod( (ResistanceMod) mod );
else if ( mod is StatMod )
m_Creature.AddStatMod( (StatMod) mod );
else if ( mod is SkillMod )
m_Creature.AddSkillMod( (SkillMod) mod );
}
}
private static void ProcessDiscordance(DiscordanceInfo info)
{
Mobile from = info.m_From;
Mobile targ = info.m_Creature;
bool ends = false;
public void Clear()
{
for ( int i = 0; i < m_Mods.Count; ++i )
{
object mod = m_Mods[i];
// According to uoherald bard must remain alive, visible, and
// within range of the target or the effect ends in 15 seconds.
if (!targ.Alive || targ.Deleted || !from.Alive || from.Hidden)
{
ends = true;
}
else
{
int range = (int)targ.GetDistanceToSqrt(from);
int maxRange = BaseInstrument.GetBardRange(from, SkillName.Discordance);
if ( mod is ResistanceMod )
m_Creature.RemoveResistanceMod( (ResistanceMod) mod );
else if ( mod is StatMod )
m_Creature.RemoveStatMod( ((StatMod) mod).Name );
else if ( mod is SkillMod )
m_Creature.RemoveSkillMod( (SkillMod) mod );
}
}
}
if (from.Map != targ.Map || range > maxRange)
ends = true;
}
private static Hashtable m_Table = new Hashtable();
if (ends && info.m_Ending && info.m_EndTime < DateTime.UtcNow)
{
info.m_Timer?.Stop();
public static bool GetEffect( Mobile targ, ref int effect )
{
DiscordanceInfo info = m_Table[targ] as DiscordanceInfo;
info.Clear();
m_Table.Remove(targ);
}
else
{
if (ends && !info.m_Ending)
{
info.m_Ending = true;
info.m_EndTime = DateTime.UtcNow + TimeSpan.FromSeconds(15);
}
else if (!ends)
{
info.m_Ending = false;
info.m_EndTime = DateTime.UtcNow;
}
if ( info == null )
return false;
targ.FixedEffect(0x376A, 1, 32);
}
}
effect = info.m_Effect;
return true;
}
private class DiscordanceInfo
{
public Mobile m_Creature;
public int m_Effect;
public bool m_Ending;
public DateTime m_EndTime;
public Mobile m_From;
public ArrayList m_Mods;
public Timer m_Timer;
private static void ProcessDiscordance( DiscordanceInfo info )
{
Mobile from = info.m_From;
Mobile targ = info.m_Creature;
bool ends = false;
public DiscordanceInfo(Mobile from, Mobile creature, int effect, ArrayList mods)
{
m_From = from;
m_Creature = creature;
m_EndTime = DateTime.UtcNow;
m_Ending = false;
m_Effect = effect;
m_Mods = mods;
// According to uoherald bard must remain alive, visible, and
// within range of the target or the effect ends in 15 seconds.
if ( !targ.Alive || targ.Deleted || !from.Alive || from.Hidden )
ends = true;
else
{
int range = (int) targ.GetDistanceToSqrt( from );
int maxRange = BaseInstrument.GetBardRange( from, SkillName.Discordance );
Apply();
}
if ( from.Map != targ.Map || range > maxRange )
ends = true;
}
public void Apply()
{
for (int i = 0; i < m_Mods.Count; ++i)
{
object mod = m_Mods[i];
if ( ends && info.m_Ending && info.m_EndTime < DateTime.UtcNow )
{
info.m_Timer?.Stop();
if (mod is ResistanceMod)
m_Creature.AddResistanceMod((ResistanceMod)mod);
else if (mod is StatMod)
m_Creature.AddStatMod((StatMod)mod);
else if (mod is SkillMod)
m_Creature.AddSkillMod((SkillMod)mod);
}
}
info.Clear();
m_Table.Remove( targ );
}
else
{
if ( ends && !info.m_Ending )
{
info.m_Ending = true;
info.m_EndTime = DateTime.UtcNow + TimeSpan.FromSeconds( 15 );
}
else if ( !ends )
{
info.m_Ending = false;
info.m_EndTime = DateTime.UtcNow;
}
public void Clear()
{
for (int i = 0; i < m_Mods.Count; ++i)
{
object mod = m_Mods[i];
targ.FixedEffect( 0x376A, 1, 32 );
}
}
if (mod is ResistanceMod)
m_Creature.RemoveResistanceMod((ResistanceMod)mod);
else if (mod is StatMod)
m_Creature.RemoveStatMod(((StatMod)mod).Name);
else if (mod is SkillMod)
m_Creature.RemoveSkillMod((SkillMod)mod);
}
}
}
public class DiscordanceTarget : Target
{
private BaseInstrument m_Instrument;
public class DiscordanceTarget : Target
{
private BaseInstrument m_Instrument;
public DiscordanceTarget( Mobile from, BaseInstrument inst ) : base( BaseInstrument.GetBardRange( from, SkillName.Discordance ), false, TargetFlags.None )
{
m_Instrument = inst;
}
public DiscordanceTarget(Mobile from, BaseInstrument inst) : base(
BaseInstrument.GetBardRange(from, SkillName.Discordance), false, TargetFlags.None)
{
m_Instrument = inst;
}
protected override void OnTarget( Mobile from, object target )
{
from.RevealingAction();
from.NextSkillTime = Core.TickCount + 1000;
protected override void OnTarget(Mobile from, object target)
{
from.RevealingAction();
from.NextSkillTime = Core.TickCount + 1000;
if ( !m_Instrument.IsChildOf( from.Backpack ) )
{
from.SendLocalizedMessage( 1062488 ); // The instrument you are trying to play is no longer in your backpack!
}
else if ( target is Mobile )
{
Mobile targ = (Mobile)target;
if (!m_Instrument.IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(
1062488); // The instrument you are trying to play is no longer in your backpack!
}
else if (target is Mobile)
{
Mobile targ = (Mobile)target;
if ( targ == from || (targ is BaseCreature && ( ((BaseCreature)targ).BardImmune || !from.CanBeHarmful( targ, false ) ) && ((BaseCreature)targ).ControlMaster != from) )
{
from.SendLocalizedMessage( 1049535 ); // A song of discord would have no effect on that.
}
else if ( m_Table.Contains( targ ) ) //Already discorded
{
from.SendLocalizedMessage( 1049537 );// Your target is already in discord.
}
else if ( !targ.Player )
{
double diff = m_Instrument.GetDifficultyFor( targ ) - 10.0;
double music = from.Skills[SkillName.Musicianship].Value;
if (targ == from || targ is BaseCreature &&
(((BaseCreature)targ).BardImmune || !from.CanBeHarmful(targ, false)) &&
((BaseCreature)targ).ControlMaster != from)
{
from.SendLocalizedMessage(1049535); // A song of discord would have no effect on that.
}
else if (m_Table.Contains(targ)) //Already discorded
{
from.SendLocalizedMessage(1049537); // Your target is already in discord.
}
else if (!targ.Player)
{
double diff = m_Instrument.GetDifficultyFor(targ) - 10.0;
double music = from.Skills[SkillName.Musicianship].Value;
if ( music > 100.0 )
diff -= (music - 100.0) * 0.5;
if (music > 100.0)
diff -= (music - 100.0) * 0.5;
if ( !BaseInstrument.CheckMusicianship( from ) )
{
from.SendLocalizedMessage( 500612 ); // You play poorly, and there is no effect.
m_Instrument.PlayInstrumentBadly( from );
m_Instrument.ConsumeUse( from );
}
else if ( from.CheckTargetSkill( SkillName.Discordance, target, diff-25.0, diff+25.0 ) )
{
from.SendLocalizedMessage( 1049539 ); // You play the song surpressing your targets strength
m_Instrument.PlayInstrumentWell( from );
m_Instrument.ConsumeUse( from );
if (!BaseInstrument.CheckMusicianship(from))
{
from.SendLocalizedMessage(500612); // You play poorly, and there is no effect.
m_Instrument.PlayInstrumentBadly(from);
m_Instrument.ConsumeUse(from);
}
else if (from.CheckTargetSkill(SkillName.Discordance, target, diff - 25.0, diff + 25.0))
{
from.SendLocalizedMessage(1049539); // You play the song surpressing your targets strength
m_Instrument.PlayInstrumentWell(from);
m_Instrument.ConsumeUse(from);
ArrayList mods = new ArrayList();
int effect;
double scalar;
ArrayList mods = new ArrayList();
int effect;
double scalar;
if ( Core.AOS )
{
double discord = from.Skills[SkillName.Discordance].Value;
if (Core.AOS)
{
double discord = from.Skills[SkillName.Discordance].Value;
if ( discord > 100.0 )
effect = -20 + (int)((discord - 100.0) / -2.5);
else
effect = (int)(discord / -5.0);
if (discord > 100.0)
effect = -20 + (int)((discord - 100.0) / -2.5);
else
effect = (int)(discord / -5.0);
if ( Core.SE && BaseInstrument.GetBaseDifficulty( targ ) >= 160.0 )
effect /= 2;
if (Core.SE && BaseInstrument.GetBaseDifficulty(targ) >= 160.0)
effect /= 2;
scalar = effect * 0.01;
scalar = effect * 0.01;
mods.Add( new ResistanceMod( ResistanceType.Physical, effect ) );
mods.Add( new ResistanceMod( ResistanceType.Fire, effect ) );
mods.Add( new ResistanceMod( ResistanceType.Cold, effect ) );
mods.Add( new ResistanceMod( ResistanceType.Poison, effect ) );
mods.Add( new ResistanceMod( ResistanceType.Energy, effect ) );
mods.Add(new ResistanceMod(ResistanceType.Physical, effect));
mods.Add(new ResistanceMod(ResistanceType.Fire, effect));
mods.Add(new ResistanceMod(ResistanceType.Cold, effect));
mods.Add(new ResistanceMod(ResistanceType.Poison, effect));
mods.Add(new ResistanceMod(ResistanceType.Energy, effect));
for ( int i = 0; i < targ.Skills.Length; ++i )
{
if ( targ.Skills[i].Value > 0 )
mods.Add( new DefaultSkillMod( (SkillName)i, true, targ.Skills[i].Value * scalar ) );
}
}
else
{
effect = (int)( from.Skills[SkillName.Discordance].Value / -5.0 );
scalar = effect * 0.01;
for (int i = 0; i < targ.Skills.Length; ++i)
if (targ.Skills[i].Value > 0)
mods.Add(new DefaultSkillMod((SkillName)i, true, targ.Skills[i].Value * scalar));
}
else
{
effect = (int)(from.Skills[SkillName.Discordance].Value / -5.0);
scalar = effect * 0.01;
mods.Add( new StatMod( StatType.Str, "DiscordanceStr", (int)(targ.RawStr * scalar), TimeSpan.Zero ) );
mods.Add( new StatMod( StatType.Int, "DiscordanceInt", (int)(targ.RawInt * scalar), TimeSpan.Zero ) );
mods.Add( new StatMod( StatType.Dex, "DiscordanceDex", (int)(targ.RawDex * scalar), TimeSpan.Zero ) );
mods.Add(new StatMod(StatType.Str, "DiscordanceStr", (int)(targ.RawStr * scalar),
TimeSpan.Zero));
mods.Add(new StatMod(StatType.Int, "DiscordanceInt", (int)(targ.RawInt * scalar),
TimeSpan.Zero));
mods.Add(new StatMod(StatType.Dex, "DiscordanceDex", (int)(targ.RawDex * scalar),
TimeSpan.Zero));
for ( int i = 0; i < targ.Skills.Length; ++i )
{
if ( targ.Skills[i].Value > 0 )
mods.Add( new DefaultSkillMod( (SkillName)i, true, targ.Skills[i].Value * scalar ) );
}
}
for (int i = 0; i < targ.Skills.Length; ++i)
if (targ.Skills[i].Value > 0)
mods.Add(new DefaultSkillMod((SkillName)i, true, targ.Skills[i].Value * scalar));
}
DiscordanceInfo info = new DiscordanceInfo( from, targ, Math.Abs( effect ), mods );
info.m_Timer = Timer.DelayCall<DiscordanceInfo>( TimeSpan.Zero, TimeSpan.FromSeconds( 1.25 ), ProcessDiscordance, info );
DiscordanceInfo info = new DiscordanceInfo(from, targ, Math.Abs(effect), mods);
info.m_Timer = Timer.DelayCall(TimeSpan.Zero, TimeSpan.FromSeconds(1.25), ProcessDiscordance,
info);
m_Table[targ] = info;
}
else
{
from.SendLocalizedMessage( 1049540 );// You fail to disrupt your target
m_Instrument.PlayInstrumentBadly( from );
m_Instrument.ConsumeUse( from );
}
m_Table[targ] = info;
}
else
{
from.SendLocalizedMessage(1049540); // You fail to disrupt your target
m_Instrument.PlayInstrumentBadly(from);
m_Instrument.ConsumeUse(from);
}
from.NextSkillTime = Core.TickCount + 12000;
}
else
{
m_Instrument.PlayInstrumentBadly( from );
}
}
else
{
from.SendLocalizedMessage( 1049535 ); // A song of discord would have no effect on that.
}
}
}
}
from.NextSkillTime = Core.TickCount + 12000;
}
else
{
m_Instrument.PlayInstrumentBadly(from);
}
}
else
{
from.SendLocalizedMessage(1049535); // A song of discord would have no effect on that.
}
}
}
}
}