OP Ballades (#1372)

This commit is contained in:
Red
2025-06-03 12:43:21 +03:00
committed by GitHub
parent d4e9049576
commit 581ca2f5ef
6 changed files with 156 additions and 147 deletions

View File

@@ -0,0 +1,64 @@
using Content.Shared.Whitelist;
using Robust.Shared.Map;
namespace Content.Shared._CP14.MagicSpell.Spells;
public sealed partial class CP14SpellArea : CP14SpellEffect
{
[DataField(required: true)]
public List<CP14SpellEffect> Effects { get; set; } = new();
[DataField]
public EntityWhitelist? Whitelist;
/// <summary>
/// How many entities can be subject to EntityEffect? Leave 0 to remove the restriction.
/// </summary>
[DataField]
public int MaxTargets = 0;
[DataField(required: true)]
public float Range = 1f;
[DataField]
public bool AffectCaster = false;
public override void Effect(EntityManager entManager, CP14SpellEffectBaseArgs args)
{
EntityCoordinates? targetPoint = null;
if (args.Target is not null &&
entManager.TryGetComponent<TransformComponent>(args.Target.Value, out var transformComponent))
targetPoint = transformComponent.Coordinates;
else if (args.Position is not null)
targetPoint = args.Position;
if (targetPoint is null)
return;
var lookup = entManager.System<EntityLookupSystem>();
var whitelist = entManager.System<EntityWhitelistSystem>();
var entitiesAround = lookup.GetEntitiesInRange(targetPoint.Value, Range, LookupFlags.Uncontained);
var count = 0;
foreach (var entity in entitiesAround)
{
if (entity == args.User && !AffectCaster)
continue;
if (Whitelist is not null && !whitelist.IsValid(Whitelist, entity))
continue;
foreach (var effect in Effects)
{
effect.Effect(entManager, new CP14SpellEffectBaseArgs(args.User, null, entity, targetPoint));
}
count++;
if (MaxTargets > 0 && count >= MaxTargets)
break;
}
}
}

View File

@@ -13,9 +13,24 @@
- type: CP14MagicEffect
magicType: Fire
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
- CP14AreaEntityEffectHellBallade
- !type:CP14SpellArea
range: 3
maxTargets: 4
whitelist:
components:
- MobState
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
- CP14ImpactEffectHellBallade
- !type:CP14SpellApplyEntityEffect
effects:
- !type:Jitter
- !type:FlammableReaction
multiplier: 0.5
- !type:AdjustTemperature
amount: 500
- !type:Ignite
- type: CP14MagicEffectRequiredMusicTool
- type: CP14MagicEffectCastingVisual
proto: CP14RuneHellBallade
@@ -32,32 +47,6 @@
castTime: 120
hidden: true
- type: entity
id: CP14AreaEntityEffectHellBallade
categories: [ HideSpawnMenu ]
save: false
components:
- type: TimedDespawn
lifetime: 1.6
- type: CP14AreaEntityEffect
range: 3
maxTargets: 4
whitelist:
components:
- MobState
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
- CP14ImpactEffectHellBallade
- !type:CP14SpellApplyEntityEffect
effects:
- !type:Jitter
- !type:FlammableReaction
multiplier: 0.5
- !type:AdjustTemperature
amount: 500
- !type:Ignite
- type: entity
id: CP14ImpactEffectHellBallade
parent: CP14BaseMagicImpact
@@ -85,4 +74,3 @@
- state: notes_3
color: "#eea911"
shader: unshaded

View File

@@ -13,9 +13,30 @@
- type: CP14MagicEffect
magicType: Life
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
- CP14AreaEntityEffectHealBallade
- !type:CP14SpellArea
range: 3
maxTargets: 4
whitelist:
components:
- MobState
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
- CP14ImpactEffectHealthBallade
- !type:CP14SpellApplyEntityEffect
effects:
- !type:HealthChange
damage:
types:
Slash: -0.70
Blunt: -0.70
Piercing: -0.70
Cold: -0.40
Heat: -0.40
Shock: -0.40
Poison: -0.25
Bloodloss: -0.40
Caustic: -0.30
- type: CP14MagicEffectRequiredMusicTool
- type: CP14MagicEffectCastingVisual
proto: CP14RuneHealBallade
@@ -32,38 +53,6 @@
castTime: 120
hidden: true
- type: entity
id: CP14AreaEntityEffectHealBallade
categories: [ HideSpawnMenu ]
save: false
components:
- type: TimedDespawn
lifetime: 1.6
- type: CP14AreaEntityEffect
range: 3
maxTargets: 4
whitelist:
components:
- MobState
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
- CP14ImpactEffectHealthBallade
- !type:CP14SpellApplyEntityEffect
effects:
- !type:HealthChange
damage:
types:
Slash: -0.70
Blunt: -0.70
Piercing: -0.70
Cold: -0.40
Heat: -0.40
Shock: -0.40
Poison: -0.25
Bloodloss: -0.40
Caustic: -0.30
- type: entity
id: CP14ImpactEffectHealthBallade
parent: CP14BaseMagicImpact

View File

@@ -13,9 +13,23 @@
- type: CP14MagicEffect
magicType: Life
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
- CP14AreaEntityEffectPeaceBallade
- !type:CP14SpellArea
range: 4
maxTargets: 8
whitelist:
components:
- MobState
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
- CP14ImpactEffectPeaceBallade
- !type:CP14SpellApplyEntityEffect
effects:
- !type:GenericStatusEffect
key: Pacified
component: Pacified
type: Add
time: 1.8
- type: CP14MagicEffectRequiredMusicTool
- type: CP14MagicEffectCastingVisual
proto: CP14RunePeaceBallade
@@ -32,31 +46,6 @@
castTime: 120
hidden: true
- type: entity
id: CP14AreaEntityEffectPeaceBallade
categories: [ HideSpawnMenu ]
save: false
components:
- type: TimedDespawn
lifetime: 1.6
- type: CP14AreaEntityEffect
range: 5
maxTargets: 8
whitelist:
components:
- MobState
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
- CP14ImpactEffectPeaceBallade
- !type:CP14SpellApplyEntityEffect
effects:
- !type:GenericStatusEffect
key: Pacified
component: Pacified
type: Add
time: 1.8
- type: entity
id: CP14ImpactEffectPeaceBallade
parent: CP14BaseMagicImpact

View File

@@ -13,9 +13,23 @@
- type: CP14MagicEffect
magicType: Life
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
- CP14AreaEntityEffectSpeedBallade
- !type:CP14SpellArea
affectCaster: true
range: 5
maxTargets: 4
whitelist:
components:
- MobState
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
- CP14ImpactEffectSpeedBallade
- !type:CP14SpellApplyEntityEffect
effects:
- !type:MovespeedModifier
walkSpeedModifier: 1.2
sprintSpeedModifier: 1.2
statusLifetime: 1.8
- type: CP14MagicEffectRequiredMusicTool
- type: CP14MagicEffectCastingVisual
proto: CP14RuneSpeedBallade
@@ -32,30 +46,6 @@
castTime: 120
hidden: true
- type: entity
id: CP14AreaEntityEffectSpeedBallade
categories: [ HideSpawnMenu ]
save: false
components:
- type: TimedDespawn
lifetime: 1.6
- type: CP14AreaEntityEffect
range: 3
maxTargets: 4
whitelist:
components:
- MobState
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
- CP14ImpactEffectSpeedBallade
- !type:CP14SpellApplyEntityEffect
effects:
- !type:MovespeedModifier
walkSpeedModifier: 1.15
sprintSpeedModifier: 1.15
statusLifetime: 1.8
- type: entity
id: CP14ImpactEffectSpeedBallade
parent: CP14BaseMagicImpact

View File

@@ -13,9 +13,22 @@
canModifyManacost: false
- type: CP14MagicEffect
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
- CP14AreaEntityEffectMagicBallade
- !type:CP14SpellArea
range: 5
maxTargets: 5
whitelist:
components:
- CP14MagicEnergyContainer
- CP14MagicEnergyCrystalSlot
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
- CP14ImpactEffectMagicBallade
- !type:CP14SpellApplyEntityEffect
effects:
- !type:CP14ManaChange
manaDelta: 1.2
safe: true
- type: CP14MagicEffectRequiredMusicTool
- type: CP14MagicEffectCastingVisual
proto: CP14RuneMagicBallade
@@ -32,30 +45,6 @@
castTime: 120
hidden: true
- type: entity
id: CP14AreaEntityEffectMagicBallade
categories: [ HideSpawnMenu ]
save: false
components:
- type: TimedDespawn
lifetime: 1.6
- type: CP14AreaEntityEffect
range: 5
maxTargets: 5
whitelist:
components:
- CP14MagicEnergyContainer
- CP14MagicEnergyCrystalSlot
effects:
- !type:CP14SpellSpawnEntityOnTarget
spawns:
- CP14ImpactEffectMagicBallade
- !type:CP14SpellApplyEntityEffect
effects:
- !type:CP14ManaChange
manaDelta: 1.2
safe: true
- type: entity
id: CP14ImpactEffectMagicBallade
parent: CP14BaseMagicImpact