Files
ClassicAssist.Avalonia/ClassicAssist.Shared/Data/Macros/Commands/SpellCommands.cs
T
Beyhan Oğur d5f52cc3d3 first commit
2026-09-03 04:45:36 +03:00

84 lines
2.4 KiB
C#

using System.Diagnostics;
using ClassicAssist.Data.Spells;
using ClassicAssist.Shared.Resources;
using UOC = ClassicAssist.Shared.UO.Commands;
namespace ClassicAssist.Data.Macros.Commands
{
public static class SpellCommands
{
private static readonly SpellManager _manager = SpellManager.GetInstance();
[CommandsDisplay( Category = nameof( Strings.Spells ),
Parameters = new[] { nameof( ParameterType.SpellName ) } )]
public static void Cast( string name )
{
_manager?.CastSpell( name );
}
[CommandsDisplay( Category = nameof( Strings.Spells ),
Parameters = new[] { nameof( ParameterType.SpellName ), nameof( ParameterType.SerialOrAlias ) } )]
public static bool Cast( string name, object obj )
{
int serial = AliasCommands.ResolveSerial( obj );
if ( serial == 0 )
{
UOC.SystemMessage( Strings.Invalid_or_unknown_object_id );
return false;
}
SpellData sd = _manager.GetSpellData( name ) ?? _manager.GetMasteryData( name );
if ( sd == null )
{
UOC.SystemMessage( Strings.Unknown_spell___ );
return false;
}
// Debugging only
Stopwatch sw = new Stopwatch();
sw.Start();
//
_manager.CastSpell( sd.ID );
int index = 0;
bool result;
if ( Options.CurrentOptions.UseExperimentalFizzleDetection )
{
( index, result ) = UOC.WaitForTargetOrFizzle( sd.Timeout + 1000 );
}
else
{
result = TargetCommands.WaitForTarget( sd.Timeout + 500 );
}
if ( index == 0 && !result )
{
UOC.SystemMessage( Strings.Timeout___ );
return false;
}
if ( !result )
{
return false;
}
// Debugging only
sw.Stop();
if ( Options.CurrentOptions.Debug )
{
UOC.SystemMessage(
$"Target received in {sw.ElapsedMilliseconds}ms, Spell data timeout: {sd.Timeout}ms" );
}
//
TargetCommands.Target( serial );
return true;
}
}
}