mirror of
https://github.com/DeltaV-Station/Delta-v.git
synced 2026-09-29 23:57:29 +00:00
+27









deltanedas
slarticodefast
Nemanja
Vasilis
plykiya
deltanedas
Killerqu00
Brandon Hu
Zachary Yona
Zachary Yona
Plykiya
PJBot
Alzore
Kara
EmoGarbage404
Ubaser
Token
Cojoke
LeoSantich
nikthechampiongr
pigeonpeas
Ed
PoorMansDreams
IgorAnt028
NotSoDamn
Errant
DrSmugleaf
Velcroboy
Jeff
themias
Eris
FATFSAAM2
to4no_fix
Mervill
Nim
IProduceWidgets
SlamBamActionman
f941121384
* uncomment grappling gun * Remove rest of Geras files (#30912) remove remaining geras stuff * tweak(AgeRequirement): Make the requiredAge more sensible (#30913) * chrore(ageRequirement): fix grammar. atleast -> at least (#30914) * Minor sprite fix to inhand med hardsuits and HoS turtleneck jumpsuit (#30918) * Fixes inhand hardsuit cross color from https://github.com/space-wizards/space-station-14/issues/26516#issue-2213917971 * Fixed HoS Turtle not covering all butt pixels --------- Co-authored-by: Zachary Yona <magicalusf@gmail.com> * Add execution component to all energy sword weapons (#30909) Co-authored-by: plykiya <plykiya@protonmail.com> * Automatic changelog update * chore(grammar): correct some mistakes (#30916) * Add diamond mining drills, buff regular mining drills (#30814) * why do I have to change so much just to add drills * diamon * Automatic changelog update * give trash a reusable entity table (#30921) * Contraband marking & examining (#28688) * System & loc strings * pass over syndie contraband * fixes * grand theft pass * contrabandexamine -> contraband * examine text generation update * all composition parents necessary * bring back minor contra so it has a less confusing message * minor * weapon pass * jumpsuit pass * feet pass * AUUUUUUUUUGHHHHHHHHHHHHHHHHHH * head * AUUUUGH * ear * belt * back * fix * bro * rename for more clarity * do da review * add cvar for contraband examine --------- Co-authored-by: EmoGarbage404 <retron404@gmail.com> Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> * Automatic changelog update * Automatic changelog update * Removes variant cube migration (#30934) add * First Review Pass Contraband Fixes (#30930) * First pass contra fix * bam * More * Security crates are now marked as security restricted * Syndicate raid suit is contra * damn I forgot gatfruit * Add conducting gloves to the maintenance loot table (#30904) * add * lower weight * Fix DoDrop to DropNextTo in container cases (#30911) * Fix DoDrop to DropNextTo in container cases DoDrop is too heavy to calculation. In any other case we should use alternatives, for example DropNextTo helper method * codestyle change * Fix Reagent Fire Stacks (#30766) * Fix Reagent Fire Stacks * Comments on code * little nicer wording? * Lines 88 and 89, updated 'narsie' and 'ratvar' to 'Nar'Sie' and Ratva… (#30954) Lines 88 and 89, updated 'narsie' and 'ratvar' to 'Nar'Sie' and Ratvar, per issue #30719. * Automatic changelog update * Fix permission check for whitelists in player panel (#30948) * Automatic changelog update * Grey mantle in winterdrobe (#29774) * add the mantle * fix a few things * fix merge conflict stuff, remove from winterdrobe and lathe. * Add mantle to loadouts (20 hour requirement) * Automatic changelog update * Sliceable doAfter (#30824) * init * wtf git * Automatic changelog update * Add capfruit, a gatfruit mutation. (#30850) * add base * add fake suffix and flavor fix * address some reviews * parent it * fix test fail * add FoodSequence support and address small review * Automatic changelog update * Fixes the grey mantle (#30971) add the thing i missed * Add keybinds for rotating and flipping objects (#30540) * add keybinds for rotating and flipping objects * no popup for verbs * Automatic changelog update * tweak(Shuttle_honki): Remove DeviceQuantumSpinInverter from honki shuttle. (#30618) * Make the Borgs Names Appear When they Make an Announcement (#30107) * Make the Borgs Names Appear When they Make an Announcement * bwomp * re-order * Use Name instead of metadata * goiup * Automatic changelog update * disable contraband examine * rename our SliceFoodEvent * Throngler Plushie Sprite (#30969) Throngonkler Plush sprite * Fix bug with rotating shelves (#30978) * Main * Update shelfs.yml * Little bug fix * No weather on concrete tiles (#30952) * concrete weather * miss * development build ghostrole lottery changes (#30980) debug ghostrole lottery changes * Automatic changelog update * Add a saline syringe to the combat medical kit (#29954) saline * Automatic changelog update * fix the admin verbs trying to kill players by filling their lungs with plasma (#30991) fix the admin tools trying to kill players by filling their lungs with plasma * Custom Taco & Kebabs - FoodSequence 2 (#30905) * control layer ordering * sprite update * taco! * taco naming gen * fix separator naming * some proto fixes * default naming separation * fix taco naming * rat update * hamsterburger * organs taco * remove from spawners * fixes * fix separators and lemons * Update food-sequence.ftl * randomization offset * fix * kebabs refactor * fix * skewer weapon * Update food_single.yml * Update migration.yml * suppermatter * hamlet centered * hamsburger * Update dead-0.png * 20 -> 4 burger layers max * Update burger.yml * canReact: false * capfruit update * Update burger.yml * Update burger.yml * Update produce.yml * some fixes * Update Resources/Textures/Objects/Consumable/Food/taco.rsi/meta.json Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Update Content.Shared/Nutrition/Components/FoodSequenceStartPointComponent.cs Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Update Content.Shared/Nutrition/Components/FoodSequenceStartPointComponent.cs Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * chicken * Update food-sequence.ftl * documentation * fixes * Update meat.yml * Update meat.yml --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Automatic changelog update * Fix popups not working properly with an eye offset (#30990) * Adds a random smokable spawner (#30870) * Textures to make lamps mappable to East/West. * Adds a random smokable spawner * remove double derma * Increase chance for just basic cig * Update to enitity tables * Tweak values * Remove space --------- Co-authored-by: Jeff <velcroboy333@hotmail.com> * Fix lizards being unable to eat custom burgers (#31005) * Fix lizards being unable to eat custom burgers * ensure tag comp * Automatic changelog update * Sedin (#27110) * Sedin * almost forgot this. * what * Did a few fixes, tried to readd popup * Fix popup, ready for merge * minor change * Generalize seed removal/destruction system, add popups in general. * fix * fix (again) * deadcode is no more * Sedin buff (nerfing the recipe soon) * godont * webedit moment ok listen I had to nuke my setup because my computer was being Dumb As Shit so let me do this ONE webedit * CRIKEY * Revert "CRIKEY" This reverts commit 1c6959ffd9ba8bb1e97ccf2eb0b37b3ff4ec82ee. I was not supposed to commit that >:/ * Alright, it should be good now but I havent tested it * ready for merge/review * prob -> probability * Requested changes nodoc * Review nodoc * documento * thumb up emoji * Automatic changelog update * Adds a Dinky Star Sticker for security officers (#29767) * Sec-Star-TASTIC * fix license * now counts as trash * Sticks to people + wearable * no more sticky * no more sticky * mystery-space * Update Loadout Yaml * Automatic changelog update * tweak(hospital): Reduce diamond stack from 30 to 1 (#31027) * tweak(experiment): Reduce diamond stack from 30 to 1 (#31025) * replace mapped diamond stacks with single * Figurine voicelines (#30865) * initial commit * tweaks to the new voice lines capitalizations of I's and the Y on hos 3 voice lines also changed the captain figuring voice line 2 to something completely different * capitalized one letter man i really suck at capitalization * more capitalization i never thought this pr would need so many changes * changed one comma to a dot * Update Resources/Locale/en-US/datasets/figurines.ftl Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> * Automatic changelog update * Adding shock collar and electropack (#30529) * Adding shock collar with the new ShockOnTrigger * Cleaning and updating the shock collar * Add StripDelay datafield to ClothingComponent * Adding SelfUnremovableClothingComponent * ShockCollar Update * Correction of the shock collar * Correction of the shock collar 2 * Renaming the DamageSpecifier DataField to Damage * Fixing the damage field in ShockCollar * Cleaning the ShockCollar * Renaming ShockCollar to ClothingNeckShockCollar * Adding ClothingNeckShockCollar as a stealTarget to a thief * Fixing a typo of the sprite path in ClothingNeckShockCollar * Cleaning the ShockOnTriggerComponent * Revision of SelfUnremovableClothing * Adding a ClothingBackpackElectropack * Sprite fix * Code review * Shock Collar sprite update * add commit hash --------- Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> * Automatic changelog update * Greatly improve the usability of the Gas Analyzer. (#30763) * greatly improve how the gas analyzer behaves * don't close the analyzer when the object goes out of range * cleanup * always switch to the device tab when a new device is analyzed * modern api part one * modern api part 2 * modern api part three * file scope namespace * Automatic changelog update * Fix false and true in player-panel.ftl (#31043) Fix false and true in player-panel Add a new True string * Contra Review Passs - Round 2 (#30942) * Contra pass round two * command too * Stamps * oopsied a bracket * Namespace cleanup around Mind Roles (#30965) * namespaces * Comment does not need a semicolon --------- Co-authored-by: Vasilis <vascreeper@yahoo.com> * Contraband Review Pass - The Threequel (#30970) Contraband pass number three * Golden toilet (#31049) * golden toilet * Destructible * sprite * fix * copyright * Automatic changelog update * Salvage Spawners (#31020) * treasure entities and spawners * no more smiles * remove nyano shock collar code * Event scheduler setting tweaks (#31018) tweaks * Automatic changelog update * remove meteor swarms rule for a moment * Revamped Meteor Swarm (#28974) * meteor code and balanced values * Meteor Swarms * Update meteors.yml * Update meteors.yml * HOO! (fix overkill bug and buff space dust) * undo BloodstreamComponent.cs changes * DamageDistribution -> DamageTypes * part 2. * Missing meteor presets (#29044) * add meteors into missing game presets * changes for real * implement code * this too * Meteors now leave behind a bit of ore (#30419) * Meteors that leave behind asteroid ore * bigger offset * Bit more generic * Better defaults * hrm? * I HATE CUSTOM SERIALIZERS * More comments * renamed a variable --------- Co-authored-by: plykiya <plykiya@protonmail.com> * refactor event schedulers to use explicit game rules (#29320) * works, still has testing values, im sure I did stupid shit. * shitvent crapfactor * snap extra word out of existence * shit I died of old * remove useless inaccurate design comments * Oopsie, handle requirement params in RandomRuleSystem too * I'm a slash slinging hasher * Address reviews, add admin alerts I forgor * EntityMan saves the day * address reviews 1 * eh, I actually don't care about the cargo gifts thing. * started * Do reviews * you actually meant 1.2 lmao * dependency inheritance is a fickle bitch * I have no idea. * Threads are for sheets not computers. * fix traitor rule test * fix round type tattling * break things * It worky * Toolshed makes we want to drink depresso. * Finished? * remove debug values * timings * use defaults * alphabetize * bobby drop tables * Float required fr fr * continue * more continence * uno mas * obsolution * cleanup and documentations * Yell at self * use the right value defaults * housekeeping * Event scheduler setting tweaks (#31018) tweaks * Automatic changelog update * remove(NukeopsRuleComponent): Remove a trap from the component file (#31029) ah * Fix bug with holding objects (#31009) Main * Automatic changelog update * Replace obsolete map functions in IconSmoothSystem (#30958) * first part * second part * Automatic changelog update * Fix reagents with ReagentData being duplicated (#30983) Initial commit * :trollface: * :trollface: * actually untroll * a * 50 burger * add back old meteor code * fix * use some live config options in dev * remove old shock collar icon * make ammo more consistent and work more * clean up lathes diff to upstream * a * move rubber bullets to deltav folder * a * untroll * more untrolls * more untrolls * untroll * :trollface: * a * b * remove it for real * add missing lathe recipes * replace cvars with component field * remove taco from roboisseur * migrate cardboard box with smg mags * remove kebabs * a --------- Co-authored-by: deltanedas <@deltanedas:kde.org> Co-authored-by: Killerqu00 <47712032+Killerqu00@users.noreply.github.com> Co-authored-by: Brandon Hu <103440971+Brandon-Huu@users.noreply.github.com> Co-authored-by: Zachary Yona <58833995+Magicalus@users.noreply.github.com> Co-authored-by: Zachary Yona <magicalusf@gmail.com> Co-authored-by: Plykiya <58439124+Plykiya@users.noreply.github.com> Co-authored-by: plykiya <plykiya@protonmail.com> Co-authored-by: PJBot <pieterjan.briers+bot@gmail.com> Co-authored-by: Alzore <140123969+Blackern5000@users.noreply.github.com> Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com> Co-authored-by: Kara <lunarautomaton6@gmail.com> Co-authored-by: EmoGarbage404 <retron404@gmail.com> Co-authored-by: Ubaser <134914314+UbaserB@users.noreply.github.com> Co-authored-by: Token <esil.bektay@yandex.com> Co-authored-by: Cojoke <83733158+Cojoke-dot@users.noreply.github.com> Co-authored-by: LeoSantich <108027402+LeoSantich@users.noreply.github.com> Co-authored-by: nikthechampiongr <32041239+nikthechampiongr@users.noreply.github.com> Co-authored-by: pigeonpeas <147350443+pigeonpeas@users.noreply.github.com> Co-authored-by: Ed <96445749+TheShuEd@users.noreply.github.com> Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com> Co-authored-by: PoorMansDreams <150595537+PoorMansDreams@users.noreply.github.com> Co-authored-by: IgorAnt028 <118114530+IgorAnt028@users.noreply.github.com> Co-authored-by: NotSoDamn <75203942+NotSoDana@users.noreply.github.com> Co-authored-by: Errant <35878406+Errant-4@users.noreply.github.com> Co-authored-by: DrSmugleaf <10968691+DrSmugleaf@users.noreply.github.com> Co-authored-by: Velcroboy <107660393+IamVelcroboy@users.noreply.github.com> Co-authored-by: Jeff <velcroboy333@hotmail.com> Co-authored-by: themias <89101928+themias@users.noreply.github.com> Co-authored-by: Eris <eris@erisws.com> Co-authored-by: FATFSAAM2 <saamboroujerdi@gmail.com> Co-authored-by: to4no_fix <156101927+chavonadelal@users.noreply.github.com> Co-authored-by: Mervill <mervills.email@gmail.com> Co-authored-by: Vasilis <vascreeper@yahoo.com> Co-authored-by: Nim <128169402+Nimfar11@users.noreply.github.com> Co-authored-by: IProduceWidgets <107586145+IProduceWidgets@users.noreply.github.com> Co-authored-by: SlamBamActionman <83650252+SlamBamActionman@users.noreply.github.com>
884 lines
36 KiB
C#
884 lines
36 KiB
C#
using System.Diagnostics.CodeAnalysis;
|
|
using System.Linq;
|
|
using System.Numerics;
|
|
using Content.Server.Administration.Components;
|
|
using Content.Server.Atmos;
|
|
using Content.Server.Atmos.Components;
|
|
using Content.Server.Cargo.Components;
|
|
using Content.Server.Doors.Systems;
|
|
using Content.Server.Hands.Systems;
|
|
using Content.Server.Power.Components;
|
|
using Content.Server.Power.EntitySystems;
|
|
using Content.Server.Stack;
|
|
using Content.Server.Station.Components;
|
|
using Content.Server.Station.Systems;
|
|
using Content.Server.Weapons.Ranged.Systems;
|
|
using Content.Shared.Access;
|
|
using Content.Shared.Access.Components;
|
|
using Content.Shared.Access.Systems;
|
|
using Content.Shared.Administration;
|
|
using Content.Shared.Atmos;
|
|
using Content.Shared.Construction.Components;
|
|
using Content.Shared.Damage;
|
|
using Content.Shared.Damage.Components;
|
|
using Content.Shared.Database;
|
|
using Content.Shared.Doors.Components;
|
|
using Content.Shared.Hands.Components;
|
|
using Content.Shared.Inventory;
|
|
using Content.Shared.PDA;
|
|
using Content.Shared.Stacks;
|
|
using Content.Shared.Verbs;
|
|
using Content.Shared.Weapons.Ranged.Components;
|
|
using Robust.Server.Physics;
|
|
using Robust.Shared.Map;
|
|
using Robust.Shared.Map.Components;
|
|
using Robust.Shared.Physics;
|
|
using Robust.Shared.Physics.Components;
|
|
using Robust.Shared.Player;
|
|
using Robust.Shared.Prototypes;
|
|
using Robust.Shared.Utility;
|
|
|
|
namespace Content.Server.Administration.Systems;
|
|
|
|
public sealed partial class AdminVerbSystem
|
|
{
|
|
[Dependency] private readonly DoorSystem _door = default!;
|
|
[Dependency] private readonly AirlockSystem _airlockSystem = default!;
|
|
[Dependency] private readonly StackSystem _stackSystem = default!;
|
|
[Dependency] private readonly SharedAccessSystem _accessSystem = default!;
|
|
[Dependency] private readonly HandsSystem _handsSystem = default!;
|
|
[Dependency] private readonly QuickDialogSystem _quickDialog = default!;
|
|
[Dependency] private readonly AdminTestArenaSystem _adminTestArenaSystem = default!;
|
|
[Dependency] private readonly StationJobsSystem _stationJobsSystem = default!;
|
|
[Dependency] private readonly JointSystem _jointSystem = default!;
|
|
[Dependency] private readonly BatterySystem _batterySystem = default!;
|
|
[Dependency] private readonly SharedTransformSystem _xformSystem = default!;
|
|
[Dependency] private readonly MetaDataSystem _metaSystem = default!;
|
|
[Dependency] private readonly GunSystem _gun = default!;
|
|
|
|
private void AddTricksVerbs(GetVerbsEvent<Verb> args)
|
|
{
|
|
if (!EntityManager.TryGetComponent(args.User, out ActorComponent? actor))
|
|
return;
|
|
|
|
var player = actor.PlayerSession;
|
|
|
|
if (!_adminManager.HasAdminFlag(player, AdminFlags.Admin))
|
|
return;
|
|
|
|
if (_adminManager.HasAdminFlag(player, AdminFlags.Admin))
|
|
{
|
|
if (TryComp<DoorBoltComponent>(args.Target, out var bolts))
|
|
{
|
|
Verb bolt = new()
|
|
{
|
|
Text = bolts.BoltsDown ? "Unbolt" : "Bolt",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = bolts.BoltsDown
|
|
? new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/unbolt.png"))
|
|
: new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/bolt.png")),
|
|
Act = () =>
|
|
{
|
|
_door.SetBoltsDown((args.Target, bolts), !bolts.BoltsDown);
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString(bolts.BoltsDown
|
|
? "admin-trick-unbolt-description"
|
|
: "admin-trick-bolt-description"),
|
|
Priority = (int) (bolts.BoltsDown ? TricksVerbPriorities.Unbolt : TricksVerbPriorities.Bolt),
|
|
};
|
|
args.Verbs.Add(bolt);
|
|
}
|
|
|
|
if (TryComp<AirlockComponent>(args.Target, out var airlock))
|
|
{
|
|
Verb emergencyAccess = new()
|
|
{
|
|
Text = airlock.EmergencyAccess ? "Emergency Access Off" : "Emergency Access On",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/emergency_access.png")),
|
|
Act = () =>
|
|
{
|
|
_airlockSystem.ToggleEmergencyAccess(args.Target, airlock);
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString(airlock.EmergencyAccess
|
|
? "admin-trick-emergency-access-off-description"
|
|
: "admin-trick-emergency-access-on-description"),
|
|
Priority = (int) (airlock.EmergencyAccess ? TricksVerbPriorities.EmergencyAccessOff : TricksVerbPriorities.EmergencyAccessOn),
|
|
};
|
|
args.Verbs.Add(emergencyAccess);
|
|
}
|
|
|
|
if (HasComp<DamageableComponent>(args.Target))
|
|
{
|
|
Verb rejuvenate = new()
|
|
{
|
|
Text = "Rejuvenate",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/rejuvenate.png")),
|
|
Act = () =>
|
|
{
|
|
_rejuvenate.PerformRejuvenate(args.Target);
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-rejuvenate-description"),
|
|
Priority = (int) TricksVerbPriorities.Rejuvenate,
|
|
};
|
|
args.Verbs.Add(rejuvenate);
|
|
}
|
|
|
|
if (!HasComp<GodmodeComponent>(args.Target))
|
|
{
|
|
Verb makeIndestructible = new()
|
|
{
|
|
Text = "Make Indestructible",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/plus.svg.192dpi.png")),
|
|
Act = () =>
|
|
{
|
|
_sharedGodmodeSystem.EnableGodmode(args.Target);
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-make-indestructible-description"),
|
|
Priority = (int) TricksVerbPriorities.MakeIndestructible,
|
|
};
|
|
args.Verbs.Add(makeIndestructible);
|
|
}
|
|
else
|
|
{
|
|
Verb makeVulnerable = new()
|
|
{
|
|
Text = "Make Vulnerable",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/plus.svg.192dpi.png")),
|
|
Act = () =>
|
|
{
|
|
_sharedGodmodeSystem.DisableGodmode(args.Target);
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-make-vulnerable-description"),
|
|
Priority = (int) TricksVerbPriorities.MakeVulnerable,
|
|
};
|
|
args.Verbs.Add(makeVulnerable);
|
|
}
|
|
|
|
if (TryComp<BatteryComponent>(args.Target, out var battery))
|
|
{
|
|
Verb refillBattery = new()
|
|
{
|
|
Text = "Refill Battery",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/fill_battery.png")),
|
|
Act = () =>
|
|
{
|
|
_batterySystem.SetCharge(args.Target, battery.MaxCharge, battery);
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString("admin-trick-refill-battery-description"),
|
|
Priority = (int) TricksVerbPriorities.RefillBattery,
|
|
};
|
|
args.Verbs.Add(refillBattery);
|
|
|
|
Verb drainBattery = new()
|
|
{
|
|
Text = "Drain Battery",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/drain_battery.png")),
|
|
Act = () =>
|
|
{
|
|
_batterySystem.SetCharge(args.Target, 0, battery);
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString("admin-trick-drain-battery-description"),
|
|
Priority = (int) TricksVerbPriorities.DrainBattery,
|
|
};
|
|
args.Verbs.Add(drainBattery);
|
|
|
|
Verb infiniteBattery = new()
|
|
{
|
|
Text = "Infinite Battery",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/infinite_battery.png")),
|
|
Act = () =>
|
|
{
|
|
var recharger = EnsureComp<BatterySelfRechargerComponent>(args.Target);
|
|
recharger.AutoRecharge = true;
|
|
recharger.AutoRechargeRate = battery.MaxCharge; // Instant refill.
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString("admin-trick-infinite-battery-object-description"),
|
|
Priority = (int) TricksVerbPriorities.InfiniteBattery,
|
|
};
|
|
args.Verbs.Add(infiniteBattery);
|
|
}
|
|
|
|
if (TryComp<AnchorableComponent>(args.Target, out var anchor))
|
|
{
|
|
Verb blockUnanchor = new()
|
|
{
|
|
Text = "Block Unanchoring",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/anchor.svg.192dpi.png")),
|
|
Act = () =>
|
|
{
|
|
RemComp(args.Target, anchor);
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString("admin-trick-block-unanchoring-description"),
|
|
Priority = (int) TricksVerbPriorities.BlockUnanchoring,
|
|
};
|
|
args.Verbs.Add(blockUnanchor);
|
|
}
|
|
|
|
if (TryComp<GasTankComponent>(args.Target, out var tank))
|
|
{
|
|
Verb refillInternalsO2 = new()
|
|
{
|
|
Text = "Refill Internals Oxygen",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Tanks/oxygen.rsi"), "icon"),
|
|
Act = () =>
|
|
{
|
|
RefillGasTank(args.Target, Gas.Oxygen, tank);
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-internals-refill-oxygen-description"),
|
|
Priority = (int) TricksVerbPriorities.RefillOxygen,
|
|
};
|
|
args.Verbs.Add(refillInternalsO2);
|
|
|
|
Verb refillInternalsN2 = new()
|
|
{
|
|
Text = "Refill Internals Nitrogen",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Tanks/red.rsi"), "icon"),
|
|
Act = () =>
|
|
{
|
|
RefillGasTank(args.Target, Gas.Nitrogen, tank);
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-internals-refill-nitrogen-description"),
|
|
Priority = (int) TricksVerbPriorities.RefillNitrogen,
|
|
};
|
|
args.Verbs.Add(refillInternalsN2);
|
|
|
|
Verb refillInternalsPlasma = new()
|
|
{
|
|
Text = "Refill Internals Plasma",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Tanks/plasma.rsi"), "icon"),
|
|
Act = () =>
|
|
{
|
|
RefillGasTank(args.Target, Gas.Plasma, tank);
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-internals-refill-plasma-description"),
|
|
Priority = (int) TricksVerbPriorities.RefillPlasma,
|
|
};
|
|
args.Verbs.Add(refillInternalsPlasma);
|
|
}
|
|
|
|
if (HasComp<InventoryComponent>(args.Target))
|
|
{
|
|
Verb refillInternalsO2 = new()
|
|
{
|
|
Text = "Refill Internals Oxygen",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Tanks/oxygen.rsi"), "icon"),
|
|
Act = () => RefillEquippedTanks(args.User, Gas.Oxygen),
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-internals-refill-oxygen-description"),
|
|
Priority = (int) TricksVerbPriorities.RefillOxygen,
|
|
};
|
|
args.Verbs.Add(refillInternalsO2);
|
|
|
|
Verb refillInternalsN2 = new()
|
|
{
|
|
Text = "Refill Internals Nitrogen",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Tanks/red.rsi"), "icon"),
|
|
Act = () =>RefillEquippedTanks(args.User, Gas.Nitrogen),
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-internals-refill-nitrogen-description"),
|
|
Priority = (int) TricksVerbPriorities.RefillNitrogen,
|
|
};
|
|
args.Verbs.Add(refillInternalsN2);
|
|
|
|
Verb refillInternalsPlasma = new()
|
|
{
|
|
Text = "Refill Internals Plasma",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Tanks/plasma.rsi"), "icon"),
|
|
Act = () => RefillEquippedTanks(args.User, Gas.Plasma),
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-internals-refill-plasma-description"),
|
|
Priority = (int) TricksVerbPriorities.RefillPlasma,
|
|
};
|
|
args.Verbs.Add(refillInternalsPlasma);
|
|
}
|
|
|
|
Verb sendToTestArena = new()
|
|
{
|
|
Text = "Send to test arena",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/VerbIcons/eject.svg.192dpi.png")),
|
|
|
|
Act = () =>
|
|
{
|
|
var (mapUid, gridUid) = _adminTestArenaSystem.AssertArenaLoaded(player);
|
|
_xformSystem.SetCoordinates(args.Target, new EntityCoordinates(gridUid ?? mapUid, Vector2.One));
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString("admin-trick-send-to-test-arena-description"),
|
|
Priority = (int) TricksVerbPriorities.SendToTestArena,
|
|
};
|
|
args.Verbs.Add(sendToTestArena);
|
|
|
|
var activeId = FindActiveId(args.Target);
|
|
|
|
if (activeId is not null)
|
|
{
|
|
Verb grantAllAccess = new()
|
|
{
|
|
Text = "Grant All Access",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Misc/id_cards.rsi"), "centcom"),
|
|
Act = () =>
|
|
{
|
|
GiveAllAccess(activeId.Value);
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-grant-all-access-description"),
|
|
Priority = (int) TricksVerbPriorities.GrantAllAccess,
|
|
};
|
|
args.Verbs.Add(grantAllAccess);
|
|
|
|
Verb revokeAllAccess = new()
|
|
{
|
|
Text = "Revoke All Access",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Misc/id_cards.rsi"), "default"),
|
|
Act = () =>
|
|
{
|
|
RevokeAllAccess(activeId.Value);
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-revoke-all-access-description"),
|
|
Priority = (int) TricksVerbPriorities.RevokeAllAccess,
|
|
};
|
|
args.Verbs.Add(revokeAllAccess);
|
|
}
|
|
|
|
if (HasComp<AccessComponent>(args.Target))
|
|
{
|
|
Verb grantAllAccess = new()
|
|
{
|
|
Text = "Grant All Access",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Misc/id_cards.rsi"), "centcom"),
|
|
Act = () =>
|
|
{
|
|
GiveAllAccess(args.Target);
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-grant-all-access-description"),
|
|
Priority = (int) TricksVerbPriorities.GrantAllAccess,
|
|
};
|
|
args.Verbs.Add(grantAllAccess);
|
|
|
|
Verb revokeAllAccess = new()
|
|
{
|
|
Text = "Revoke All Access",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Misc/id_cards.rsi"), "default"),
|
|
Act = () =>
|
|
{
|
|
RevokeAllAccess(args.Target);
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-revoke-all-access-description"),
|
|
Priority = (int) TricksVerbPriorities.RevokeAllAccess,
|
|
};
|
|
args.Verbs.Add(revokeAllAccess);
|
|
}
|
|
}
|
|
|
|
if (TryComp<StackComponent>(args.Target, out var stack))
|
|
{
|
|
Verb adjustStack = new()
|
|
{
|
|
Text = "Adjust Stack",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/adjust-stack.png")),
|
|
Act = () =>
|
|
{
|
|
// Unbounded intentionally.
|
|
_quickDialog.OpenDialog(player, "Adjust stack", $"Amount (max {_stackSystem.GetMaxCount(stack)})", (int newAmount) =>
|
|
{
|
|
_stackSystem.SetCount(args.Target, newAmount, stack);
|
|
});
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString("admin-trick-adjust-stack-description"),
|
|
Priority = (int) TricksVerbPriorities.AdjustStack,
|
|
};
|
|
args.Verbs.Add(adjustStack);
|
|
|
|
Verb fillStack = new()
|
|
{
|
|
Text = "Fill Stack",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/fill-stack.png")),
|
|
Act = () =>
|
|
{
|
|
_stackSystem.SetCount(args.Target, _stackSystem.GetMaxCount(stack), stack);
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString("admin-trick-fill-stack-description"),
|
|
Priority = (int) TricksVerbPriorities.FillStack,
|
|
};
|
|
args.Verbs.Add(fillStack);
|
|
}
|
|
|
|
Verb rename = new()
|
|
{
|
|
Text = "Rename",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/rename.png")),
|
|
Act = () =>
|
|
{
|
|
_quickDialog.OpenDialog(player, "Rename", "Name", (string newName) =>
|
|
{
|
|
_metaSystem.SetEntityName(args.Target, newName);
|
|
});
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString("admin-trick-rename-description"),
|
|
Priority = (int) TricksVerbPriorities.Rename,
|
|
};
|
|
args.Verbs.Add(rename);
|
|
|
|
Verb redescribe = new()
|
|
{
|
|
Text = "Redescribe",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/redescribe.png")),
|
|
Act = () =>
|
|
{
|
|
_quickDialog.OpenDialog(player, "Redescribe", "Description", (LongString newDescription) =>
|
|
{
|
|
_metaSystem.SetEntityDescription(args.Target, newDescription.String);
|
|
});
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString("admin-trick-redescribe-description"),
|
|
Priority = (int) TricksVerbPriorities.Redescribe,
|
|
};
|
|
args.Verbs.Add(redescribe);
|
|
|
|
Verb renameAndRedescribe = new()
|
|
{
|
|
Text = "Redescribe",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/rename_and_redescribe.png")),
|
|
Act = () =>
|
|
{
|
|
_quickDialog.OpenDialog(player, "Rename & Redescribe", "Name", "Description",
|
|
(string newName, LongString newDescription) =>
|
|
{
|
|
var meta = MetaData(args.Target);
|
|
_metaSystem.SetEntityName(args.Target, newName, meta);
|
|
_metaSystem.SetEntityDescription(args.Target, newDescription.String, meta);
|
|
});
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString("admin-trick-rename-and-redescribe-description"),
|
|
Priority = (int) TricksVerbPriorities.RenameAndRedescribe,
|
|
};
|
|
args.Verbs.Add(renameAndRedescribe);
|
|
|
|
if (TryComp<StationDataComponent>(args.Target, out var stationData))
|
|
{
|
|
if (_adminManager.HasAdminFlag(player, AdminFlags.Round))
|
|
{
|
|
Verb barJobSlots = new()
|
|
{
|
|
Text = "Bar job slots",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/bar_jobslots.png")),
|
|
Act = () =>
|
|
{
|
|
foreach (var (job, _) in _stationJobsSystem.GetJobs(args.Target))
|
|
{
|
|
_stationJobsSystem.TrySetJobSlot(args.Target, job, 0, true);
|
|
}
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-bar-job-slots-description"),
|
|
Priority = (int) TricksVerbPriorities.BarJobSlots,
|
|
};
|
|
args.Verbs.Add(barJobSlots);
|
|
}
|
|
|
|
Verb locateCargoShuttle = new()
|
|
{
|
|
Text = "Locate Cargo Shuttle",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Rsi(new("/Textures/Clothing/Head/Soft/cargosoft.rsi"), "icon"),
|
|
Act = () =>
|
|
{
|
|
var shuttle = Comp<StationCargoOrderDatabaseComponent>(args.Target).Shuttle;
|
|
|
|
if (shuttle is null)
|
|
return;
|
|
|
|
_xformSystem.SetCoordinates(args.User, new EntityCoordinates(shuttle.Value, Vector2.Zero));
|
|
},
|
|
Impact = LogImpact.Low,
|
|
Message = Loc.GetString("admin-trick-locate-cargo-shuttle-description"),
|
|
Priority = (int) TricksVerbPriorities.LocateCargoShuttle,
|
|
};
|
|
args.Verbs.Add(locateCargoShuttle);
|
|
}
|
|
|
|
if (TryGetGridChildren(args.Target, out var childEnum))
|
|
{
|
|
Verb refillBattery = new()
|
|
{
|
|
Text = "Refill Battery",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/fill_battery.png")),
|
|
Act = () =>
|
|
{
|
|
foreach (var ent in childEnum)
|
|
{
|
|
if (!HasComp<StationInfiniteBatteryTargetComponent>(ent))
|
|
continue;
|
|
var battery = EnsureComp<BatteryComponent>(ent);
|
|
_batterySystem.SetCharge(ent, battery.MaxCharge, battery);
|
|
}
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-refill-battery-description"),
|
|
Priority = (int) TricksVerbPriorities.RefillBattery,
|
|
};
|
|
args.Verbs.Add(refillBattery);
|
|
|
|
Verb drainBattery = new()
|
|
{
|
|
Text = "Drain Battery",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/drain_battery.png")),
|
|
Act = () =>
|
|
{
|
|
foreach (var ent in childEnum)
|
|
{
|
|
if (!HasComp<StationInfiniteBatteryTargetComponent>(ent))
|
|
continue;
|
|
var battery = EnsureComp<BatteryComponent>(ent);
|
|
_batterySystem.SetCharge(ent, 0, battery);
|
|
}
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-drain-battery-description"),
|
|
Priority = (int) TricksVerbPriorities.DrainBattery,
|
|
};
|
|
args.Verbs.Add(drainBattery);
|
|
|
|
Verb infiniteBattery = new()
|
|
{
|
|
Text = "Infinite Battery",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/infinite_battery.png")),
|
|
Act = () =>
|
|
{
|
|
// this kills the sloth
|
|
foreach (var ent in childEnum)
|
|
{
|
|
if (!HasComp<StationInfiniteBatteryTargetComponent>(ent))
|
|
continue;
|
|
|
|
var recharger = EnsureComp<BatterySelfRechargerComponent>(ent);
|
|
var battery = EnsureComp<BatteryComponent>(ent);
|
|
|
|
recharger.AutoRecharge = true;
|
|
recharger.AutoRechargeRate = battery.MaxCharge; // Instant refill.
|
|
}
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-infinite-battery-description"),
|
|
Priority = (int) TricksVerbPriorities.InfiniteBattery,
|
|
};
|
|
args.Verbs.Add(infiniteBattery);
|
|
}
|
|
|
|
if (TryComp<PhysicsComponent>(args.Target, out var physics))
|
|
{
|
|
Verb haltMovement = new()
|
|
{
|
|
Text = "Halt Movement",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/halt.png")),
|
|
Act = () =>
|
|
{
|
|
_physics.SetLinearVelocity(args.Target, Vector2.Zero, body: physics);
|
|
_physics.SetAngularVelocity(args.Target, 0f, body: physics);
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString("admin-trick-halt-movement-description"),
|
|
Priority = (int) TricksVerbPriorities.HaltMovement,
|
|
};
|
|
args.Verbs.Add(haltMovement);
|
|
}
|
|
|
|
if (TryComp<MapComponent>(args.Target, out var map))
|
|
{
|
|
if (_adminManager.HasAdminFlag(player, AdminFlags.Mapping))
|
|
{
|
|
if (_mapManager.IsMapPaused(map.MapId))
|
|
{
|
|
Verb unpauseMap = new()
|
|
{
|
|
Text = "Unpause Map",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/play.png")),
|
|
Act = () =>
|
|
{
|
|
_mapManager.SetMapPaused(map.MapId, false);
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-unpause-map-description"),
|
|
Priority = (int) TricksVerbPriorities.Unpause,
|
|
};
|
|
args.Verbs.Add(unpauseMap);
|
|
}
|
|
else
|
|
{
|
|
Verb pauseMap = new()
|
|
{
|
|
Text = "Pause Map",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/pause.png")),
|
|
Act = () =>
|
|
{
|
|
_mapManager.SetMapPaused(map.MapId, true);
|
|
},
|
|
Impact = LogImpact.Extreme,
|
|
Message = Loc.GetString("admin-trick-pause-map-description"),
|
|
Priority = (int) TricksVerbPriorities.Pause,
|
|
};
|
|
args.Verbs.Add(pauseMap);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (TryComp<JointComponent>(args.Target, out var joints))
|
|
{
|
|
Verb snapJoints = new()
|
|
{
|
|
Text = "Snap Joints",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Texture(new("/Textures/Interface/AdminActions/snap_joints.png")),
|
|
Act = () =>
|
|
{
|
|
_jointSystem.ClearJoints(args.Target, joints);
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString("admin-trick-snap-joints-description"),
|
|
Priority = (int) TricksVerbPriorities.SnapJoints,
|
|
};
|
|
args.Verbs.Add(snapJoints);
|
|
}
|
|
|
|
if (TryComp<GunComponent>(args.Target, out var gun))
|
|
{
|
|
Verb minigunFire = new()
|
|
{
|
|
Text = "Make Minigun",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Weapons/Guns/HMGs/minigun.rsi"), "icon"),
|
|
Act = () =>
|
|
{
|
|
EnsureComp<AdminMinigunComponent>(args.Target);
|
|
_gun.RefreshModifiers((args.Target, gun));
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString("admin-trick-minigun-fire-description"),
|
|
Priority = (int) TricksVerbPriorities.MakeMinigun,
|
|
};
|
|
args.Verbs.Add(minigunFire);
|
|
}
|
|
|
|
if (TryComp<BallisticAmmoProviderComponent>(args.Target, out var ballisticAmmo))
|
|
{
|
|
Verb setCapacity = new()
|
|
{
|
|
Text = "Set Bullet Amount",
|
|
Category = VerbCategory.Tricks,
|
|
Icon = new SpriteSpecifier.Rsi(new("/Textures/Objects/Fun/caps.rsi"), "mag-6"),
|
|
Act = () =>
|
|
{
|
|
_quickDialog.OpenDialog(player, "Set Bullet Amount", $"Amount (standard {ballisticAmmo.Capacity}):", (string amount) =>
|
|
{
|
|
if (!int.TryParse(amount, out var result))
|
|
return;
|
|
|
|
_gun.SetBallisticUnspawned((args.Target, ballisticAmmo), result);
|
|
_gun.UpdateBallisticAppearance(args.Target, ballisticAmmo);
|
|
});
|
|
},
|
|
Impact = LogImpact.Medium,
|
|
Message = Loc.GetString("admin-trick-set-bullet-amount-description"),
|
|
Priority = (int) TricksVerbPriorities.SetBulletAmount,
|
|
};
|
|
args.Verbs.Add(setCapacity);
|
|
}
|
|
}
|
|
|
|
private void RefillEquippedTanks(EntityUid target, Gas gasType)
|
|
{
|
|
foreach (var held in _inventorySystem.GetHandOrInventoryEntities(target))
|
|
{
|
|
RefillGasTank(held, gasType);
|
|
}
|
|
}
|
|
|
|
private void RefillGasTank(EntityUid tank, Gas gasType, GasTankComponent? tankComponent = null)
|
|
{
|
|
if (!Resolve(tank, ref tankComponent, false))
|
|
return;
|
|
|
|
var mixSize = tankComponent.Air.Volume;
|
|
var newMix = new GasMixture(mixSize);
|
|
newMix.SetMoles(gasType, (1000.0f * mixSize) / (Atmospherics.R * Atmospherics.T20C)); // Fill the tank to 1000KPA.
|
|
newMix.Temperature = Atmospherics.T20C;
|
|
tankComponent.Air = newMix;
|
|
}
|
|
|
|
private bool TryGetGridChildren(EntityUid target, [NotNullWhen(true)] out IEnumerable<EntityUid>? enumerator)
|
|
{
|
|
if (!HasComp<MapComponent>(target) && !HasComp<MapGridComponent>(target) &&
|
|
!HasComp<StationDataComponent>(target))
|
|
{
|
|
enumerator = null;
|
|
return false;
|
|
}
|
|
|
|
enumerator = GetGridChildrenInner(target);
|
|
return true;
|
|
}
|
|
|
|
// ew. This finds everything supposedly on a grid.
|
|
private IEnumerable<EntityUid> GetGridChildrenInner(EntityUid target)
|
|
{
|
|
if (TryComp<StationDataComponent>(target, out var station))
|
|
{
|
|
foreach (var grid in station.Grids)
|
|
{
|
|
var enumerator = Transform(grid).ChildEnumerator;
|
|
while (enumerator.MoveNext(out var ent))
|
|
{
|
|
yield return ent;
|
|
}
|
|
}
|
|
}
|
|
else if (HasComp<MapComponent>(target))
|
|
{
|
|
var enumerator = Transform(target).ChildEnumerator;
|
|
while (enumerator.MoveNext(out var possibleGrid))
|
|
{
|
|
var enumerator2 = Transform(possibleGrid).ChildEnumerator;
|
|
while (enumerator2.MoveNext(out var ent))
|
|
{
|
|
yield return ent;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var enumerator = Transform(target).ChildEnumerator;
|
|
while (enumerator.MoveNext(out var ent))
|
|
{
|
|
yield return ent;
|
|
}
|
|
}
|
|
}
|
|
|
|
private EntityUid? FindActiveId(EntityUid target)
|
|
{
|
|
if (_inventorySystem.TryGetSlotEntity(target, "id", out var slotEntity))
|
|
{
|
|
if (HasComp<AccessComponent>(slotEntity))
|
|
{
|
|
return slotEntity.Value;
|
|
}
|
|
else if (TryComp<PdaComponent>(slotEntity, out var pda)
|
|
&& HasComp<IdCardComponent>(pda.ContainedId))
|
|
{
|
|
return pda.ContainedId;
|
|
}
|
|
}
|
|
else if (TryComp<HandsComponent>(target, out var hands))
|
|
{
|
|
foreach (var held in _handsSystem.EnumerateHeld(target, hands))
|
|
{
|
|
if (HasComp<AccessComponent>(held))
|
|
{
|
|
return held;
|
|
}
|
|
}
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private void GiveAllAccess(EntityUid entity)
|
|
{
|
|
var allAccess = _prototypeManager
|
|
.EnumeratePrototypes<AccessLevelPrototype>()
|
|
.Select(p => new ProtoId<AccessLevelPrototype>(p.ID)).ToArray();
|
|
|
|
_accessSystem.TrySetTags(entity, allAccess);
|
|
}
|
|
|
|
private void RevokeAllAccess(EntityUid entity)
|
|
{
|
|
_accessSystem.TrySetTags(entity, new List<ProtoId<AccessLevelPrototype>>());
|
|
}
|
|
|
|
public enum TricksVerbPriorities
|
|
{
|
|
Bolt = 0,
|
|
Unbolt = -1,
|
|
EmergencyAccessOn = -2,
|
|
EmergencyAccessOff = -3,
|
|
MakeIndestructible = -4,
|
|
MakeVulnerable = -5,
|
|
BlockUnanchoring = -6,
|
|
RefillBattery = -7,
|
|
DrainBattery = -8,
|
|
RefillOxygen = -9,
|
|
RefillNitrogen = -10,
|
|
RefillPlasma = -11,
|
|
SendToTestArena = -12,
|
|
GrantAllAccess = -13,
|
|
RevokeAllAccess = -14,
|
|
Rejuvenate = -15,
|
|
AdjustStack = -16,
|
|
FillStack = -17,
|
|
Rename = -18,
|
|
Redescribe = -19,
|
|
RenameAndRedescribe = -20,
|
|
BarJobSlots = -21,
|
|
LocateCargoShuttle = -22,
|
|
InfiniteBattery = -23,
|
|
HaltMovement = -24,
|
|
Unpause = -25,
|
|
Pause = -26,
|
|
SnapJoints = -27,
|
|
MakeMinigun = -28,
|
|
SetBulletAmount = -29,
|
|
}
|
|
}
|