Runes stuff

This commit is contained in:
Aviu00
2024-01-28 09:18:18 +03:00
parent cff24101b0
commit b5c91e2f37
4 changed files with 71 additions and 12 deletions

View File

@@ -0,0 +1,6 @@
namespace Content.Server.White.Cult.Items.Components;
[RegisterComponent]
public sealed partial class BloodBoilProjectileComponent : Component
{
}

View File

@@ -0,0 +1,26 @@
using Content.Server.White.Cult.Items.Components;
using Content.Server.White.Cult.TimedProduction;
using Content.Shared.White.Cult;
using Content.Shared.White.Cult.Pylon;
using Robust.Shared.Physics.Events;
namespace Content.Server.White.Cult.Items.Systems;
public sealed class BloodBoilProjectileSystem : EntitySystem
{
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<BloodBoilProjectileComponent, PreventCollideEvent>(PreventCollision);
}
private void PreventCollision(EntityUid uid, BloodBoilProjectileComponent component, ref PreventCollideEvent args)
{
if (HasComp<CultistComponent>(args.OtherEntity) || HasComp<ConstructComponent>(args.OtherEntity) ||
HasComp<CultistFactoryComponent>(args.OtherEntity) || HasComp<SharedPylonComponent>(args.OtherEntity))
{
args.Cancelled = true;
}
}
}

View File

@@ -997,6 +997,8 @@ public sealed partial class CultSystem : EntitySystem
float severity,
CultRuneBloodBoilComponent component)
{
cultists = cultists.Where(HasComp<CultistComponent>).ToHashSet(); // Prevent constructs from using the rune
if (cultists.Count < component.SummonMinCount)
{
_popupSystem.PopupEntity(Loc.GetString("cult-blood-boil-rune-need-minimum"), user, user);
@@ -1006,17 +1008,6 @@ public sealed partial class CultSystem : EntitySystem
var xformQuery = GetEntityQuery<TransformComponent>();
var xform = xformQuery.GetComponent(rune);
foreach (var cultist in cultists)
{
if (!TryComp<BloodstreamComponent>(cultist, out var bloodstreamComponent))
return false;
_bloodstreamSystem.TryModifyBloodLevel(cultist, -40, bloodstreamComponent, createPuddle: false);
}
var projectileCount =
(int) MathF.Round(MathHelper.Lerp(component.MinProjectiles, component.MaxProjectiles, severity));
var inRange = _lookup.GetEntitiesInRange(rune, component.ProjectileRange * severity, LookupFlags.Dynamic);
inRange.RemoveWhere(x =>
!_entityManager.HasComponent<HumanoidAppearanceComponent>(x) ||
@@ -1032,6 +1023,20 @@ public sealed partial class CultSystem : EntitySystem
_random.Shuffle(list);
var bloodCost = -120 / cultists.Count;
foreach (var cultist in cultists)
{
if (!TryComp<BloodstreamComponent>(cultist, out var bloodstreamComponent))
return false;
_bloodstreamSystem.TryModifyBloodLevel(cultist, bloodCost, bloodstreamComponent);
}
var projectileCount =
(int) MathF.Round(MathHelper.Lerp(component.MinProjectiles, component.MaxProjectiles, severity));
while (projectileCount > 0)
{
var target = _random.Pick(list);
@@ -1206,6 +1211,7 @@ public sealed partial class CultSystem : EntitySystem
if (teleportRune)
{
var teleportRuneEntity = _entityManager.SpawnEntity(rune, transform.Value);
_xform.AttachToGridOrMap(teleportRuneEntity);
_entityManager.TryGetComponent<CultRuneTeleportComponent>(teleportRuneEntity, out var sex);
{
@@ -1243,7 +1249,7 @@ public sealed partial class CultSystem : EntitySystem
var damageSpecifier = new DamageSpecifier(_prototypeManager.Index<DamageTypePrototype>("Slash"), 10);
_damageableSystem.TryChangeDamage(uid, damageSpecifier, true, false);
_entityManager.SpawnEntity(rune, transform.Value);
_xform.AttachToGridOrMap(_entityManager.SpawnEntity(rune, transform.Value));
}
private bool SpawnShard(EntityUid target)

View File

@@ -153,3 +153,24 @@
whitelist:
components:
- Body
- type: entity
id: ProjectileCult
parent: BaseBulletHighVelocity
name: Blood
description: FUCK.
noSpawn: true
components:
- type: Sprite
sprite: White/Cult/suka.rsi
- type: Projectile
damage:
groups:
Burn: 10
Brute: 10
- type: PointLight
enabled: true
color: "#ff4300"
radius: 2.0
energy: 7.0
- type: BloodBoilProjectile