From: Ed <96445749+TheShuEd@users.noreply.github.com>
Date: Sat, 18 May 2024 16:17:46 +0000 (+0300)
Subject: Nuke spaceshroom ore (#28110)
X-Git-Url: https://git.smokeofanarchy.ru/gitweb.cgi?a=commitdiff_plain;h=225a05ecdb2823efeb448188ce369c577976fe4c;p=space-station-14.git
Nuke spaceshroom ore (#28110)
nuke spaceshroom ore
---
diff --git a/Content.Server/Gatherable/Components/GatherableComponent.cs b/Content.Server/Gatherable/Components/GatherableComponent.cs
index f1d0c6ef74..5480f4404f 100644
--- a/Content.Server/Gatherable/Components/GatherableComponent.cs
+++ b/Content.Server/Gatherable/Components/GatherableComponent.cs
@@ -1,4 +1,6 @@
+using Content.Shared.EntityList;
using Content.Shared.Whitelist;
+using Robust.Shared.Prototypes;
namespace Content.Server.Gatherable.Components;
@@ -10,7 +12,7 @@ public sealed partial class GatherableComponent : Component
/// Whitelist for specifying the kind of tools can be used on a resource
/// Supports multiple tags.
///
- [DataField("whitelist", required: true)]
+ [DataField(required: true)]
public EntityWhitelist? ToolWhitelist;
///
@@ -18,14 +20,20 @@ public sealed partial class GatherableComponent : Component
/// (Tag1, Tag2, LootTableID1, LootTableID2 are placeholders for example)
/// --------------------
/// useMappedLoot: true
- /// whitelist:
+ /// toolWhitelist:
/// tags:
/// - Tag1
/// - Tag2
- /// mappedLoot:
+ /// loot:
/// Tag1: LootTableID1
/// Tag2: LootTableID2
///
- [DataField("loot")]
- public Dictionary? MappedLoot = new();
+ [DataField]
+ public Dictionary>? Loot = new();
+
+ ///
+ /// Random shift of the appearing entity during gathering
+ ///
+ [DataField]
+ public float GatherOffset = 0.3f;
}
diff --git a/Content.Server/Gatherable/GatherableSystem.Projectile.cs b/Content.Server/Gatherable/GatherableSystem.Projectile.cs
index f773ca2dbb..3ab8872fd7 100644
--- a/Content.Server/Gatherable/GatherableSystem.Projectile.cs
+++ b/Content.Server/Gatherable/GatherableSystem.Projectile.cs
@@ -1,7 +1,5 @@
using Content.Server.Gatherable.Components;
-using Content.Server.Projectiles;
using Content.Shared.Projectiles;
-using Content.Shared.Weapons.Ranged.Systems;
using Robust.Shared.Physics.Events;
namespace Content.Server.Gatherable;
@@ -13,20 +11,20 @@ public sealed partial class GatherableSystem
SubscribeLocalEvent(OnProjectileCollide);
}
- private void OnProjectileCollide(EntityUid uid, GatheringProjectileComponent component, ref StartCollideEvent args)
+ private void OnProjectileCollide(Entity gathering, ref StartCollideEvent args)
{
if (!args.OtherFixture.Hard ||
args.OurFixtureId != SharedProjectileSystem.ProjectileFixture ||
- component.Amount <= 0 ||
+ gathering.Comp.Amount <= 0 ||
!TryComp(args.OtherEntity, out var gatherable))
{
return;
}
- Gather(args.OtherEntity, uid, gatherable);
- component.Amount--;
+ Gather(args.OtherEntity, gathering, gatherable);
+ gathering.Comp.Amount--;
- if (component.Amount <= 0)
- QueueDel(uid);
+ if (gathering.Comp.Amount <= 0)
+ QueueDel(gathering);
}
}
diff --git a/Content.Server/Gatherable/GatherableSystem.cs b/Content.Server/Gatherable/GatherableSystem.cs
index 11295bb3a3..44e60cb102 100644
--- a/Content.Server/Gatherable/GatherableSystem.cs
+++ b/Content.Server/Gatherable/GatherableSystem.cs
@@ -1,11 +1,9 @@
using Content.Server.Destructible;
using Content.Server.Gatherable.Components;
-using Content.Shared.EntityList;
using Content.Shared.Interaction;
using Content.Shared.Tag;
using Content.Shared.Weapons.Melee.Events;
using Robust.Server.GameObjects;
-using Robust.Shared.Audio;
using Robust.Shared.Audio.Systems;
using Robust.Shared.Prototypes;
using Robust.Shared.Random;
@@ -14,7 +12,7 @@ namespace Content.Server.Gatherable;
public sealed partial class GatherableSystem : EntitySystem
{
- [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly IPrototypeManager _proto = default!;
[Dependency] private readonly IRobustRandom _random = default!;
[Dependency] private readonly DestructibleSystem _destructible = default!;
[Dependency] private readonly SharedAudioSystem _audio = default!;
@@ -30,20 +28,20 @@ public sealed partial class GatherableSystem : EntitySystem
InitializeProjectile();
}
- private void OnAttacked(EntityUid uid, GatherableComponent component, AttackedEvent args)
+ private void OnAttacked(Entity gatherable, ref AttackedEvent args)
{
- if (component.ToolWhitelist?.IsValid(args.Used, EntityManager) != true)
+ if (gatherable.Comp.ToolWhitelist?.IsValid(args.Used, EntityManager) != true)
return;
- Gather(uid, args.User, component);
+ Gather(gatherable, args.User);
}
- private void OnActivate(EntityUid uid, GatherableComponent component, ActivateInWorldEvent args)
+ private void OnActivate(Entity gatherable, ref ActivateInWorldEvent args)
{
- if (component.ToolWhitelist?.IsValid(args.User, EntityManager) != true)
+ if (gatherable.Comp.ToolWhitelist?.IsValid(args.User, EntityManager) != true)
return;
- Gather(uid, args.User, component);
+ Gather(gatherable, args.User);
}
public void Gather(EntityUid gatheredUid, EntityUid? gatherer = null, GatherableComponent? component = null)
@@ -60,25 +58,22 @@ public sealed partial class GatherableSystem : EntitySystem
_destructible.DestroyEntity(gatheredUid);
// Spawn the loot!
- if (component.MappedLoot == null)
+ if (component.Loot == null)
return;
var pos = _transform.GetMapCoordinates(gatheredUid);
- foreach (var (tag, table) in component.MappedLoot)
+ foreach (var (tag, table) in component.Loot)
{
if (tag != "All")
{
if (gatherer != null && !_tagSystem.HasTag(gatherer.Value, tag))
continue;
}
- var getLoot = _prototypeManager.Index(table);
+ var getLoot = _proto.Index(table);
var spawnLoot = getLoot.GetSpawns(_random);
- var spawnPos = pos.Offset(_random.NextVector2(0.3f));
+ var spawnPos = pos.Offset(_random.NextVector2(component.GatherOffset));
Spawn(spawnLoot[0], spawnPos);
}
}
}
-
-
-
diff --git a/Resources/Prototypes/Entities/Objects/Misc/spaceshroom.yml b/Resources/Prototypes/Entities/Objects/Misc/spaceshroom.yml
index 9ec6ce0ed1..1571787715 100644
--- a/Resources/Prototypes/Entities/Objects/Misc/spaceshroom.yml
+++ b/Resources/Prototypes/Entities/Objects/Misc/spaceshroom.yml
@@ -19,14 +19,12 @@
!type:PhysShapeCircle
radius: 0.2
- type: InteractionOutline
- # TODO: Nuke this shit
- - type: OreVein
- oreChance: 1.0
- currentOre: SpaceShrooms
- type: Gatherable
- whitelist:
+ toolWhitelist:
components:
- Hands
+ loot:
+ All: SpaceshroomGather
- type: Damageable
damageContainer: Inorganic
damageModifierSet: Wood
@@ -39,6 +37,13 @@
- !type:DoActsBehavior
acts: [ "Destruction" ]
+- type: entityLootTable
+ id: SpaceshroomGather
+ entries:
+ - id: FoodSpaceshroom
+ amount: 1
+ maxAmount: 1
+
- type: entity
name: spaceshroom
parent: FoodProduceBase
diff --git a/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml b/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml
index a8cb0b1cb8..c6c3692e59 100644
--- a/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml
+++ b/Resources/Prototypes/Entities/Structures/Walls/asteroid.yml
@@ -375,7 +375,7 @@
noRot: true
- type: SoundOnGather
- type: Gatherable
- whitelist:
+ toolWhitelist:
tags:
- Pickaxe
- type: Damageable
diff --git a/Resources/Prototypes/ore.yml b/Resources/Prototypes/ore.yml
index dde1516c85..84d1c66736 100644
--- a/Resources/Prototypes/ore.yml
+++ b/Resources/Prototypes/ore.yml
@@ -1,9 +1,5 @@
# TODO: Kill ore veins
# Split it into 2 components, 1 for "spawn XYZ on destruction" and 1 for "randomly select one of these for spawn on destruction"
-# You could even just use an entityspawncollection instead.
-- type: ore
- id: SpaceShrooms
- oreEntity: FoodSpaceshroom
# High yields
- type: ore