Flash buff (#25730)
* flash buff * oops! * bool * 3 -> 1.5 seconds * okay fix * sluth
This commit is contained in:
@@ -65,7 +65,7 @@ namespace Content.Server.Flash
|
||||
args.Handled = true;
|
||||
foreach (var e in args.HitEntities)
|
||||
{
|
||||
Flash(e, args.User, uid, comp.FlashDuration, comp.SlowTo, melee: true);
|
||||
Flash(e, args.User, uid, comp.FlashDuration, comp.SlowTo, melee: true, stunDuration: comp.MeleeStunDuration);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,7 +115,8 @@ namespace Content.Server.Flash
|
||||
float slowTo,
|
||||
bool displayPopup = true,
|
||||
FlashableComponent? flashable = null,
|
||||
bool melee = false)
|
||||
bool melee = false,
|
||||
TimeSpan? stunDuration = null)
|
||||
{
|
||||
if (!Resolve(target, ref flashable, false))
|
||||
return;
|
||||
@@ -139,43 +140,46 @@ namespace Content.Server.Flash
|
||||
flashable.Duration = flashDuration / 1000f; // TODO: Make this sane...
|
||||
Dirty(target, flashable);
|
||||
|
||||
_stun.TrySlowdown(target, TimeSpan.FromSeconds(flashDuration/1000f), true,
|
||||
if (stunDuration != null)
|
||||
{
|
||||
_stun.TryParalyze(target, stunDuration.Value, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
_stun.TrySlowdown(target, TimeSpan.FromSeconds(flashDuration/1000f), true,
|
||||
slowTo, slowTo);
|
||||
}
|
||||
|
||||
if (displayPopup && user != null && target != user && Exists(user.Value))
|
||||
{
|
||||
_popup.PopupEntity(Loc.GetString("flash-component-user-blinds-you",
|
||||
("user", Identity.Entity(user.Value, EntityManager))), target, target);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void FlashArea(EntityUid source, EntityUid? user, float range, float duration, float slowTo = 0.8f, bool displayPopup = false, float probability = 1f, SoundSpecifier? sound = null)
|
||||
public void FlashArea(Entity<FlashComponent?> source, EntityUid? user, float range, float duration, float slowTo = 0.8f, bool displayPopup = false, float probability = 1f, SoundSpecifier? sound = null)
|
||||
{
|
||||
var transform = EntityManager.GetComponent<TransformComponent>(source);
|
||||
var transform = Transform(source);
|
||||
var mapPosition = _transform.GetMapCoordinates(transform);
|
||||
var flashableQuery = GetEntityQuery<FlashableComponent>();
|
||||
|
||||
foreach (var entity in _entityLookup.GetEntitiesInRange(transform.Coordinates, range))
|
||||
{
|
||||
if (!flashableQuery.TryGetComponent(entity, out var flashable))
|
||||
continue;
|
||||
|
||||
if (!_random.Prob(probability))
|
||||
continue;
|
||||
|
||||
if (!flashableQuery.TryGetComponent(entity, out var flashable))
|
||||
continue;
|
||||
|
||||
// Check for unobstructed entities while ignoring the mobs with flashable components.
|
||||
if (!_interaction.InRangeUnobstructed(entity, mapPosition, range, flashable.CollisionGroup, (e) => e == source))
|
||||
if (!_interaction.InRangeUnobstructed(entity, mapPosition, range, flashable.CollisionGroup, predicate: (e) => flashableQuery.HasComponent(e) || e == source.Owner))
|
||||
continue;
|
||||
|
||||
// They shouldn't have flash removed in between right?
|
||||
Flash(entity, user, source, duration, slowTo, displayPopup, flashableQuery.GetComponent(entity));
|
||||
}
|
||||
|
||||
if (sound != null)
|
||||
{
|
||||
_audio.PlayPvs(sound, source, AudioParams.Default.WithVolume(1f).WithMaxDistance(3f));
|
||||
}
|
||||
_audio.PlayPvs(sound, source, AudioParams.Default.WithVolume(1f).WithMaxDistance(3f));
|
||||
}
|
||||
|
||||
private void OnInventoryFlashAttempt(EntityUid uid, InventoryComponent component, FlashAttemptEvent args)
|
||||
|
||||
@@ -217,7 +217,6 @@ public sealed class RevolutionaryRuleSystem : GameRuleSystem<RevolutionaryRuleCo
|
||||
|
||||
_npcFaction.AddFaction(ev.Target, RevolutionaryNpcFaction);
|
||||
var revComp = EnsureComp<RevolutionaryComponent>(ev.Target);
|
||||
_stun.TryParalyze(ev.Target, comp.StunTime, true);
|
||||
|
||||
if (ev.User != null)
|
||||
{
|
||||
|
||||
@@ -12,6 +12,13 @@ namespace Content.Shared.Flash.Components
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public int FlashDuration { get; set; } = 5000;
|
||||
|
||||
/// <summary>
|
||||
/// How long a target is stunned when a melee flash is used.
|
||||
/// If null, melee flashes will not stun at all
|
||||
/// </summary>
|
||||
[DataField]
|
||||
public TimeSpan? MeleeStunDuration = TimeSpan.FromSeconds(1.5);
|
||||
|
||||
[DataField("range")]
|
||||
[ViewVariables(VVAccess.ReadWrite)]
|
||||
public float Range { get; set; } = 7f;
|
||||
|
||||
Reference in New Issue
Block a user