Refactor antag rule code (#23445)
* Initial Pass, Rev, Thief * Zombie initial pass * Rebase, Traitor * Nukeops, More overloads * Revert RevolutionaryRuleComponent * Use TryRoundStartAttempt, Rewrite nukie spawning * Comments, Add task scheduler to GameRuleSystem * Zombie initial testing done * Sort methods, rework GameRuleTask * Add CCVar, Initial testing continues * Might as well get rid of the obsolete logging * Oops, i dont know how to log apparently * Suggested formatting fixes * Suggested changes * Fix merge issues * Minor optimisation * Allowed thief to choose other antags * Review changes * Spawn items on floor first, then inserting * minor tweaks * Shift as much as possible to ProtoId<> * Remove unneeded * Add exclusive antag attribute * Fix merge issues * Minor formatting fix * Convert to struct * Cleanup * Review cleanup (need to test a lot) * Some fixes, (mostly) tested * oop * Pass tests (for real) --------- Co-authored-by: Rainfall <rainfey0+git@gmail.com> Co-authored-by: AJCM <AJCM@tutanota.com>
This commit is contained in:
@@ -1,12 +1,16 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using Content.Shared.Hands.Components;
|
||||
using Content.Shared.Storage.EntitySystems;
|
||||
using Robust.Shared.Containers;
|
||||
using Robust.Shared.Prototypes;
|
||||
|
||||
namespace Content.Shared.Inventory;
|
||||
|
||||
public partial class InventorySystem
|
||||
{
|
||||
[Dependency] private readonly SharedStorageSystem _storageSystem = default!;
|
||||
|
||||
/// <summary>
|
||||
/// Yields all entities in hands or inventory slots with the specific flags.
|
||||
/// </summary>
|
||||
@@ -86,4 +90,55 @@ public partial class InventorySystem
|
||||
// We finally try to equip the item, otherwise we delete it.
|
||||
return TryEquip(uid, item, slot, silent, force) || DeleteItem();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Will attempt to spawn a list of items inside of an entities bag, pockets, hands or nearby
|
||||
/// </summary>
|
||||
/// <param name="entity">The entity that you want to spawn an item on</param>
|
||||
/// <param name="items">A list of prototype IDs that you want to spawn in the bag.</param>
|
||||
public void SpawnItemsOnEntity(EntityUid entity, List<EntProtoId> items)
|
||||
{
|
||||
foreach (var item in items)
|
||||
{
|
||||
SpawnItemOnEntity(entity, item);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Will attempt to spawn an item inside of an entities bag, pockets, hands or nearby
|
||||
/// </summary>
|
||||
/// <param name="entity">The entity that you want to spawn an item on</param>
|
||||
/// <param name="item">The prototype ID that you want to spawn in the bag.</param>
|
||||
public void SpawnItemOnEntity(EntityUid entity, EntProtoId item)
|
||||
{
|
||||
//Transform() throws error if TransformComponent doesnt exist
|
||||
if (!HasComp<TransformComponent>(entity))
|
||||
return;
|
||||
|
||||
var xform = Transform(entity);
|
||||
var mapCoords = _transform.GetMapCoordinates(xform);
|
||||
|
||||
var itemToSpawn = Spawn(item, mapCoords);
|
||||
|
||||
//Try insert into the backpack
|
||||
if (TryGetSlotContainer(entity, "back", out var backSlot, out _)
|
||||
&& backSlot.ContainedEntity.HasValue
|
||||
&& _storageSystem.Insert(backSlot.ContainedEntity.Value, itemToSpawn, out _)
|
||||
)
|
||||
return;
|
||||
|
||||
//Try insert into pockets
|
||||
if (TryGetSlotContainer(entity, "pocket1", out var pocket1, out _)
|
||||
&& _containerSystem.Insert(itemToSpawn, pocket1)
|
||||
)
|
||||
return;
|
||||
|
||||
if (TryGetSlotContainer(entity, "pocket2", out var pocket2, out _)
|
||||
&& _containerSystem.Insert(itemToSpawn, pocket2)
|
||||
)
|
||||
return;
|
||||
|
||||
//Try insert into hands, or drop on the floor
|
||||
_handsSystem.PickupOrDrop(entity, itemToSpawn, false);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user