private void TurnOn(StunbatonComponent comp, EntityUid user) { if (comp.Activated) { return; } if (!EntityManager.TryGetComponent <SpriteComponent?>(comp.Owner, out var sprite) || !EntityManager.TryGetComponent <SharedItemComponent?>(comp.Owner, out var item)) { return; } var playerFilter = Filter.Pvs(comp.Owner); if (!TryComp <BatteryComponent>(comp.Owner, out var battery) || battery.CurrentCharge < comp.EnergyPerUse) { SoundSystem.Play(comp.TurnOnFailSound.GetSound(), playerFilter, comp.Owner, AudioHelpers.WithVariation(0.25f)); user.PopupMessage(Loc.GetString("stunbaton-component-low-charge")); return; } SoundSystem.Play(comp.SparksSound.GetSound(), playerFilter, comp.Owner, AudioHelpers.WithVariation(0.25f)); item.EquippedPrefix = "on"; sprite.LayerSetState(0, "stunbaton_on"); comp.Activated = true; }
private void TurnOn(StunbatonComponent comp, EntityUid user) { if (comp.Activated) { return; } var playerFilter = Filter.Pvs(comp.Owner, entityManager: EntityManager); if (!TryComp <BatteryComponent>(comp.Owner, out var battery) || battery.CurrentCharge < comp.EnergyPerUse) { SoundSystem.Play(comp.TurnOnFailSound.GetSound(), playerFilter, comp.Owner, AudioHelpers.WithVariation(0.25f)); user.PopupMessage(Loc.GetString("stunbaton-component-low-charge")); return; } if (EntityManager.TryGetComponent <AppearanceComponent>(comp.Owner, out var appearance) && EntityManager.TryGetComponent <ItemComponent>(comp.Owner, out var item)) { _item.SetHeldPrefix(comp.Owner, "on", item); appearance.SetData(ToggleVisuals.Toggled, true); } SoundSystem.Play(comp.SparksSound.GetSound(), playerFilter, comp.Owner, AudioHelpers.WithVariation(0.25f)); comp.Activated = true; }
private void OnPowerCellChanged(EntityUid uid, StunbatonComponent comp, PowerCellChangedEvent args) { if (args.Ejected) { TurnOff(comp); } }
private void OnExamined(EntityUid uid, StunbatonComponent comp, ExaminedEvent args) { var msg = comp.Activated ? Loc.GetString("comp-stunbaton-examined-on") : Loc.GetString("comp-stunbaton-examined-off"); args.PushMarkup(msg); }
private void OnExamined(EntityUid uid, StunbatonComponent comp, ExaminedEvent args) { args.Message.AddText("\n"); var msg = comp.Activated ? Loc.GetString("comp-stunbaton-examined-on") : Loc.GetString("comp-stunbaton-examined-off"); args.Message.AddMarkup(msg); }
private void OnMeleeHit(EntityUid uid, StunbatonComponent component, MeleeHitEvent args) { if (!component.Activated) { return; } // Don't apply damage if it's activated; just do stamina damage. args.BonusDamage -= args.BaseDamage; }
private void OnUseInHand(EntityUid uid, StunbatonComponent comp, UseInHandEvent args) { if (comp.Activated) { TurnOff(comp); } else { TurnOn(comp, args.User); } }
private void OnInteractUsing(EntityUid uid, StunbatonComponent comp, InteractUsingEvent args) { if (!ActionBlockerSystem.CanInteract(args.User)) { return; } if (ComponentManager.TryGetComponent <PowerCellSlotComponent>(uid, out var cellslot)) { cellslot.InsertCell(args.Used); } }
private void OnExamined(EntityUid uid, StunbatonComponent comp, ExaminedEvent args) { var msg = comp.Activated ? Loc.GetString("comp-stunbaton-examined-on") : Loc.GetString("comp-stunbaton-examined-off"); args.PushMarkup(msg); if (TryComp <BatteryComponent>(uid, out var battery)) { args.PushMarkup(Loc.GetString("stunbaton-component-on-examine-charge", ("charge", (int)((battery.CurrentCharge / battery.MaxCharge) * 100)))); } }
private void OnThrowCollide(EntityUid uid, StunbatonComponent comp, ThrowDoHitEvent args) { if (!EntityManager.TryGetComponent <PowerCellSlotComponent>(uid, out var slot)) { return; } if (!comp.Activated || slot.Cell == null || !slot.Cell.TryUseCharge(comp.EnergyPerUse)) { return; } StunEntity(args.Target, comp); }
private void OnPowerCellChanged(EntityUid uid, StunbatonComponent comp, PowerCellChangedEvent args) { if (!comp.Activated) { return; } if (args.Ejected || !_cellSystem.TryGetBatteryFromSlot(comp.Owner, out var battery) || battery.CurrentCharge < comp.EnergyPerUse) { TurnOff(comp); } }
private void OnThrowCollide(EntityUid uid, StunbatonComponent comp, ThrowDoHitEvent args) { if (!comp.Activated) { return; } if (!_cellSystem.TryGetBatteryFromSlot(uid, out var battery) || !battery.TryUseCharge(comp.EnergyPerUse)) { return; } StunEntity(args.Target, comp); }
private void OnMeleeInteract(EntityUid uid, StunbatonComponent comp, MeleeInteractEvent args) { if (!comp.Activated) { return; } if (!_cellSystem.TryGetBatteryFromSlot(uid, out var battery) || !battery.TryUseCharge(comp.EnergyPerUse)) { return; } args.CanInteract = true; StunEntity(args.Entity, comp); }
private void OnMeleeInteract(EntityUid uid, StunbatonComponent comp, MeleeInteractEvent args) { if (!comp.Activated) { return; } if (!EntityManager.TryGetComponent <PowerCellSlotComponent>(uid, out var slot) || slot.Cell == null || !slot.Cell.TryUseCharge(comp.EnergyPerUse)) { return; } args.CanInteract = true; StunEntity(args.Entity, comp); }
private void OnUseInHand(EntityUid uid, StunbatonComponent comp, UseInHandEvent args) { if (!ActionBlockerSystem.CanUse(args.User)) { return; } if (comp.Activated) { TurnOff(comp); } else { TurnOn(comp, args.User); } }
private void OnMeleeHit(EntityUid uid, StunbatonComponent comp, MeleeHitEvent args) { if (!comp.Activated || !args.HitEntities.Any()) { return; } if (!_cellSystem.TryGetBatteryFromSlot(uid, out var battery) || !battery.TryUseCharge(comp.EnergyPerUse)) { return; } foreach (EntityUid entity in args.HitEntities) { StunEntity(entity, comp); } }
private void OnStaminaHitAttempt(EntityUid uid, StunbatonComponent component, ref StaminaDamageOnHitAttemptEvent args) { if (!component.Activated || !TryComp <BatteryComponent>(uid, out var battery) || !battery.TryUseCharge(component.EnergyPerUse)) { args.Cancelled = true; return; } args.HitSoundOverride = component.StunSound; if (battery.CurrentCharge < component.EnergyPerUse) { SoundSystem.Play(component.SparksSound.GetSound(), Filter.Pvs(component.Owner, entityManager: EntityManager), uid, AudioHelpers.WithVariation(0.25f)); TurnOff(component); } }
private void StunEntity(IEntity entity, StunbatonComponent comp) { if (!entity.TryGetComponent(out StatusEffectsComponent? status) || !comp.Activated) { return; } // TODO: Make slowdown inflicted customizable. SoundSystem.Play(Filter.Pvs(comp.Owner), comp.StunSound.GetSound(), comp.Owner, AudioHelpers.WithVariation(0.25f)); if (!EntityManager.HasComponent <SlowedDownComponent>(entity.Uid)) { if (_robustRandom.Prob(comp.ParalyzeChanceNoSlowdown)) { _stunSystem.TryParalyze(entity.Uid, TimeSpan.FromSeconds(comp.ParalyzeTime), status); } else { _stunSystem.TrySlowdown(entity.Uid, TimeSpan.FromSeconds(comp.SlowdownTime), 0.5f, 0.5f, status); } } else { if (_robustRandom.Prob(comp.ParalyzeChanceWithSlowdown)) { _stunSystem.TryParalyze(entity.Uid, TimeSpan.FromSeconds(comp.ParalyzeTime), status); } else { _stunSystem.TrySlowdown(entity.Uid, TimeSpan.FromSeconds(comp.SlowdownTime), 0.5f, 0.5f, status); } } var slowdownTime = TimeSpan.FromSeconds(comp.SlowdownTime); _jitterSystem.DoJitter(entity.Uid, slowdownTime, status: status); _stutteringSystem.DoStutter(entity.Uid, slowdownTime, status); if (!comp.Owner.TryGetComponent <PowerCellSlotComponent>(out var slot) || slot.Cell == null || !(slot.Cell.CurrentCharge < comp.EnergyPerUse)) { return; } SoundSystem.Play(Filter.Pvs(comp.Owner), comp.SparksSound.GetSound(), comp.Owner, AudioHelpers.WithVariation(0.25f)); TurnOff(comp); }
private void OnMeleeHit(EntityUid uid, StunbatonComponent comp, MeleeHitEvent args) { if (!comp.Activated || !args.HitEntities.Any()) { return; } if (!EntityManager.TryGetComponent <PowerCellSlotComponent>(uid, out var slot) || slot.Cell == null || !slot.Cell.TryUseCharge(comp.EnergyPerUse)) { return; } foreach (IEntity entity in args.HitEntities) { StunEntity(entity, comp); } }
private void TurnOff(StunbatonComponent comp) { if (!comp.Activated) { return; } if (TryComp <AppearanceComponent>(comp.Owner, out var appearance) && TryComp <ItemComponent>(comp.Owner, out var item)) { _item.SetHeldPrefix(comp.Owner, "off", item); appearance.SetData(ToggleVisuals.Toggled, false); } SoundSystem.Play(comp.SparksSound.GetSound(), Filter.Pvs(comp.Owner), comp.Owner, AudioHelpers.WithVariation(0.25f)); comp.Activated = false; }
private void OnThrowCollide(EntityUid uid, StunbatonComponent comp, ThrowDoHitEvent args) { if (!comp.Activated) { return; } if (!TryComp <BatteryComponent>(uid, out var battery)) { return; } if (_robustRandom.Prob(comp.OnThrowStunChance) && battery.TryUseCharge(comp.EnergyPerUse)) { SendPowerPulse(args.Target, args.User, uid); StunEntity(args.Target, comp); } }
private void TurnOff(StunbatonComponent comp) { if (!comp.Activated) { return; } if (!comp.Owner.TryGetComponent <SpriteComponent>(out var sprite) || !comp.Owner.TryGetComponent <ItemComponent>(out var item)) { return; } SoundSystem.Play(Filter.Pvs(comp.Owner), comp.SparksSound.GetSound(), comp.Owner, AudioHelpers.WithVariation(0.25f)); item.EquippedPrefix = "off"; // TODO stunbaton visualizer sprite.LayerSetState(0, "stunbaton_off"); comp.Activated = false; }
private void OnMeleeHit(EntityUid uid, StunbatonComponent comp, MeleeHitEvent args) { if (!comp.Activated || !args.HitEntities.Any() || args.Handled) { return; } if (!TryComp <BatteryComponent>(uid, out var battery) || !battery.TryUseCharge(comp.EnergyPerUse)) { return; } foreach (EntityUid entity in args.HitEntities) { StunEntity(entity, comp); SendPowerPulse(entity, args.User, uid); } // No combat should occur if we successfully stunned. args.Handled = true; }
private void StunEntity(IEntity entity, StunbatonComponent comp) { if (!entity.TryGetComponent(out StunnableComponent? stunnable) || !comp.Activated) { return; } SoundSystem.Play(Filter.Pvs(comp.Owner), "/Audio/Weapons/egloves.ogg", comp.Owner.Transform.Coordinates, AudioHelpers.WithVariation(0.25f)); if (!stunnable.SlowedDown) { if (_robustRandom.Prob(comp.ParalyzeChanceNoSlowdown)) { stunnable.Paralyze(comp.ParalyzeTime); } else { stunnable.Slowdown(comp.SlowdownTime); } } else { if (_robustRandom.Prob(comp.ParalyzeChanceWithSlowdown)) { stunnable.Paralyze(comp.ParalyzeTime); } else { stunnable.Slowdown(comp.SlowdownTime); } } if (!comp.Owner.TryGetComponent <PowerCellSlotComponent>(out var slot) || slot.Cell == null || !(slot.Cell.CurrentCharge < comp.EnergyPerUse)) { return; } SoundSystem.Play(Filter.Pvs(comp.Owner), AudioHelpers.GetRandomFileFromSoundCollection("sparks"), comp.Owner.Transform.Coordinates, AudioHelpers.WithVariation(0.25f)); TurnOff(comp); }
private void TurnOn(StunbatonComponent comp, IEntity user) { if (comp.Activated) { return; } if (!comp.Owner.TryGetComponent <SpriteComponent>(out var sprite) || !comp.Owner.TryGetComponent <ItemComponent>(out var item)) { return; } var playerFilter = Filter.Pvs(comp.Owner); if (!comp.Owner.TryGetComponent <PowerCellSlotComponent>(out var slot)) { return; } if (slot.Cell == null) { SoundSystem.Play(playerFilter, comp.TurnOnFailSound.GetSound(), comp.Owner, AudioHelpers.WithVariation(0.25f)); user.PopupMessage(Loc.GetString("comp-stunbaton-activated-missing-cell")); return; } if (slot.Cell != null && slot.Cell.CurrentCharge < comp.EnergyPerUse) { SoundSystem.Play(playerFilter, comp.TurnOnFailSound.GetSound(), comp.Owner, AudioHelpers.WithVariation(0.25f)); user.PopupMessage(Loc.GetString("comp-stunbaton-activated-dead-cell")); return; } SoundSystem.Play(playerFilter, comp.SparksSound.GetSound(), comp.Owner, AudioHelpers.WithVariation(0.25f)); item.EquippedPrefix = "on"; sprite.LayerSetState(0, "stunbaton_on"); comp.Activated = true; }
private void StunEntity(IEntity entity, StunbatonComponent comp) { if (!entity.TryGetComponent(out StunnableComponent? stunnable) || !comp.Activated) { return; } SoundSystem.Play(Filter.Pvs(comp.Owner), comp.StunSound.GetSound(), comp.Owner, AudioHelpers.WithVariation(0.25f)); if (!stunnable.SlowedDown) { if (_robustRandom.Prob(comp.ParalyzeChanceNoSlowdown)) { stunnable.Paralyze(comp.ParalyzeTime); } else { stunnable.Slowdown(comp.SlowdownTime); } } else { if (_robustRandom.Prob(comp.ParalyzeChanceWithSlowdown)) { stunnable.Paralyze(comp.ParalyzeTime); } else { stunnable.Slowdown(comp.SlowdownTime); } } if (!comp.Owner.TryGetComponent <PowerCellSlotComponent>(out var slot) || slot.Cell == null || !(slot.Cell.CurrentCharge < comp.EnergyPerUse)) { return; } SoundSystem.Play(Filter.Pvs(comp.Owner), comp.SparksSound.GetSound(), comp.Owner, AudioHelpers.WithVariation(0.25f)); TurnOff(comp); }