2022-05-27 02:41:18 -05:00
using System.Threading ;
using Content.Server.Administration.Commands ;
using Content.Server.Administration.Components ;
using Content.Server.Atmos.Components ;
using Content.Server.Atmos.EntitySystems ;
using Content.Server.Body.Components ;
using Content.Server.Body.Systems ;
using Content.Server.Electrocution ;
using Content.Server.Explosion.EntitySystems ;
using Content.Server.GhostKick ;
using Content.Server.Medical ;
using Content.Server.Nutrition.EntitySystems ;
using Content.Server.Pointing.Components ;
using Content.Server.Polymorph.Systems ;
using Content.Server.Popups ;
2022-07-21 17:30:00 -05:00
using Content.Server.Speech.Components ;
using Content.Server.Storage.Components ;
using Content.Server.Storage.EntitySystems ;
2022-05-27 02:41:18 -05:00
using Content.Server.Tabletop ;
using Content.Server.Tabletop.Components ;
using Content.Shared.Administration ;
2023-03-13 19:34:26 -04:00
using Content.Shared.Administration.Components ;
2022-05-27 02:41:18 -05:00
using Content.Shared.Body.Components ;
using Content.Shared.Body.Part ;
2022-10-23 11:30:37 +13:00
using Content.Shared.Clothing.Components ;
2023-08-13 15:50:58 -07:00
using Content.Shared.Cluwne ;
2022-05-27 02:41:18 -05:00
using Content.Shared.Damage ;
2023-08-13 15:50:58 -07:00
using Content.Shared.Damage.Systems ;
2022-05-27 02:41:18 -05:00
using Content.Shared.Database ;
using Content.Shared.Electrocution ;
using Content.Shared.Interaction.Components ;
using Content.Shared.Inventory ;
2023-01-13 16:57:10 -08:00
using Content.Shared.Mobs ;
using Content.Shared.Mobs.Components ;
using Content.Shared.Mobs.Systems ;
2022-05-27 02:41:18 -05:00
using Content.Shared.Movement.Components ;
2022-08-23 16:04:17 +02:00
using Content.Shared.Movement.Systems ;
2022-05-27 02:41:18 -05:00
using Content.Shared.Nutrition.Components ;
2022-07-09 02:09:52 -07:00
using Content.Shared.Popups ;
2024-05-11 21:01:58 -05:00
using Content.Shared.Slippery ;
2022-05-27 02:41:18 -05:00
using Content.Shared.Tabletop.Components ;
2023-09-05 00:07:01 +10:00
using Content.Shared.Tools.Systems ;
2022-05-27 02:41:18 -05:00
using Content.Shared.Verbs ;
using Robust.Shared.Map ;
2022-11-22 13:12:04 +11:00
using Robust.Shared.Map.Components ;
2022-05-27 02:41:18 -05:00
using Robust.Shared.Physics ;
2022-09-14 17:26:26 +10:00
using Robust.Shared.Physics.Components ;
2023-01-15 15:38:59 +11:00
using Robust.Shared.Physics.Systems ;
2022-05-27 02:41:18 -05:00
using Robust.Shared.Player ;
using Robust.Shared.Random ;
2023-02-26 18:48:57 +11:00
using Robust.Shared.Utility ;
2022-05-27 02:41:18 -05:00
using Timer = Robust . Shared . Timing . Timer ;
namespace Content.Server.Administration.Systems ;
public sealed partial class AdminVerbSystem
{
[Dependency] private readonly IRobustRandom _random = default ! ;
2022-07-21 17:30:00 -05:00
[Dependency] private readonly BloodstreamSystem _bloodstreamSystem = default ! ;
[Dependency] private readonly BodySystem _bodySystem = default ! ;
2022-05-27 02:41:18 -05:00
[Dependency] private readonly CreamPieSystem _creamPieSystem = default ! ;
2022-07-21 17:30:00 -05:00
[Dependency] private readonly ElectrocutionSystem _electrocutionSystem = default ! ;
[Dependency] private readonly EntityStorageSystem _entityStorageSystem = default ! ;
2022-05-27 02:41:18 -05:00
[Dependency] private readonly ExplosionSystem _explosionSystem = default ! ;
2023-01-15 15:38:59 +11:00
[Dependency] private readonly FixtureSystem _fixtures = default ! ;
2022-05-27 02:41:18 -05:00
[Dependency] private readonly FlammableSystem _flammableSystem = default ! ;
2022-07-21 17:30:00 -05:00
[Dependency] private readonly GhostKickManager _ghostKickManager = default ! ;
2023-08-04 14:53:07 +10:00
[Dependency] private readonly SharedGodmodeSystem _sharedGodmodeSystem = default ! ;
2022-07-21 17:30:00 -05:00
[Dependency] private readonly InventorySystem _inventorySystem = default ! ;
2023-01-15 15:38:59 +11:00
[Dependency] private readonly MovementSpeedModifierSystem _movementSpeedModifierSystem = default ! ;
2023-03-06 12:37:18 -05:00
[Dependency] private readonly PolymorphSystem _polymorphSystem = default ! ;
2023-01-13 16:57:10 -08:00
[Dependency] private readonly MobThresholdSystem _mobThresholdSystem = default ! ;
2022-05-27 02:41:18 -05:00
[Dependency] private readonly PopupSystem _popupSystem = default ! ;
2023-01-15 15:38:59 +11:00
[Dependency] private readonly SharedPhysicsSystem _physics = default ! ;
2022-07-21 17:30:00 -05:00
[Dependency] private readonly TabletopSystem _tabletopSystem = default ! ;
[Dependency] private readonly VomitSystem _vomitSystem = default ! ;
[Dependency] private readonly WeldableSystem _weldableSystem = default ! ;
2023-06-17 02:22:21 +03:00
[Dependency] private readonly SharedContentEyeSystem _eyeSystem = default ! ;
2023-09-21 00:23:02 -07:00
[Dependency] private readonly SharedTransformSystem _transformSystem = default ! ;
2023-12-18 21:39:23 +02:00
[Dependency] private readonly SuperBonkSystem _superBonkSystem = default ! ;
2024-05-11 21:01:58 -05:00
[Dependency] private readonly SlipperySystem _slipperySystem = default ! ;
2022-05-27 02:41:18 -05:00
// All smite verbs have names so invokeverb works.
private void AddSmiteVerbs ( GetVerbsEvent < Verb > args )
{
2023-08-24 03:10:55 -07:00
if ( ! EntityManager . TryGetComponent ( args . User , out ActorComponent ? actor ) )
2022-05-27 02:41:18 -05:00
return ;
var player = actor . PlayerSession ;
if ( ! _adminManager . HasAdminFlag ( player , AdminFlags . Fun ) )
return ;
2022-07-21 17:30:00 -05:00
// 1984.
2022-11-04 10:12:25 +11:00
if ( HasComp < MapComponent > ( args . Target ) | | HasComp < MapGridComponent > ( args . Target ) )
2022-07-21 17:30:00 -05:00
return ;
2024-10-16 18:24:31 -04:00
var explodeName = Loc . GetString ( "admin-smite-explode-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb explode = new ( )
{
2024-10-16 18:24:31 -04:00
Text = explodeName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Texture ( new ( "/Textures/Interface/VerbIcons/smite.svg.192dpi.png" ) ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
2024-05-12 07:31:54 -07:00
var coords = _transformSystem . GetMapCoordinates ( args . Target ) ;
2022-05-27 02:41:18 -05:00
Timer . Spawn ( _gameTiming . TickPeriod ,
( ) = > _explosionSystem . QueueExplosion ( coords , ExplosionSystem . DefaultExplosionPrototypeId ,
2024-08-09 08:24:05 +02:00
4 , 1 , 2 , args . Target , maxTileBreak : 0 ) , // it gibs, damage doesn't need to be high.
2022-05-27 02:41:18 -05:00
CancellationToken . None ) ;
2022-10-23 00:46:28 +02:00
_bodySystem . GibBody ( args . Target ) ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , explodeName , Loc . GetString ( "admin-smite-explode-description" ) ) // we do this so the description tells admins the Text to run it via console.
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( explode ) ;
2024-10-16 18:24:31 -04:00
var chessName = Loc . GetString ( "admin-smite-chess-dimension-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb chess = new ( )
{
2024-10-16 18:24:31 -04:00
Text = chessName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Objects/Fun/Tabletop/chessboard.rsi" ) , "chessboard" ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
2023-08-04 14:53:07 +10:00
_sharedGodmodeSystem . EnableGodmode ( args . Target ) ; // So they don't suffocate.
2022-05-27 02:41:18 -05:00
EnsureComp < TabletopDraggableComponent > ( args . Target ) ;
RemComp < PhysicsComponent > ( args . Target ) ; // So they can be dragged around.
var xform = Transform ( args . Target ) ;
2022-07-09 02:09:52 -07:00
_popupSystem . PopupEntity ( Loc . GetString ( "admin-smite-chess-self" ) , args . Target ,
2022-12-19 10:41:47 +13:00
args . Target , PopupType . LargeCaution ) ;
2022-07-09 02:09:52 -07:00
_popupSystem . PopupCoordinates (
Loc . GetString ( "admin-smite-chess-others" , ( "name" , args . Target ) ) , xform . Coordinates ,
2022-12-19 10:41:47 +13:00
Filter . PvsExcept ( args . Target ) , true , PopupType . MediumCaution ) ;
2022-05-27 02:41:18 -05:00
var board = Spawn ( "ChessBoard" , xform . Coordinates ) ;
var session = _tabletopSystem . EnsureSession ( Comp < TabletopGameComponent > ( board ) ) ;
2024-02-28 00:51:20 +11:00
xform . Coordinates = EntityCoordinates . FromMap ( _mapManager , session . Position ) ;
xform . WorldRotation = Angle . Zero ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , chessName , Loc . GetString ( "admin-smite-chess-dimension-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( chess ) ;
if ( TryComp < FlammableComponent > ( args . Target , out var flammable ) )
{
2024-10-16 18:24:31 -04:00
var flamesName = Loc . GetString ( "admin-smite-set-alight-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb flames = new ( )
{
2024-05-11 21:01:58 -05:00
Text = "admin-smite-set-alight-name" ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Texture ( new ( "/Textures/Interface/Alerts/Fire/fire.png" ) ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
// Fuck you. Burn Forever.
2024-04-23 07:30:01 -04:00
flammable . FireStacks = flammable . MaximumFireStacks ;
2023-08-04 21:18:09 -05:00
_flammableSystem . Ignite ( args . Target , args . User ) ;
2022-05-27 02:41:18 -05:00
var xform = Transform ( args . Target ) ;
2022-07-09 02:09:52 -07:00
_popupSystem . PopupEntity ( Loc . GetString ( "admin-smite-set-alight-self" ) , args . Target ,
2022-12-19 10:41:47 +13:00
args . Target , PopupType . LargeCaution ) ;
2022-07-09 02:09:52 -07:00
_popupSystem . PopupCoordinates ( Loc . GetString ( "admin-smite-set-alight-others" , ( "name" , args . Target ) ) , xform . Coordinates ,
2022-12-19 10:41:47 +13:00
Filter . PvsExcept ( args . Target ) , true , PopupType . MediumCaution ) ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , flamesName , Loc . GetString ( "admin-smite-set-alight-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( flames ) ;
}
2024-10-16 18:24:31 -04:00
var monkeyName = Loc . GetString ( "admin-smite-monkeyify-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb monkey = new ( )
{
2024-10-16 18:24:31 -04:00
Text = monkeyName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-05-14 14:47:32 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Mobs/Animals/monkey.rsi" ) , "monkey" ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
2023-03-06 12:37:18 -05:00
_polymorphSystem . PolymorphEntity ( args . Target , "AdminMonkeySmite" ) ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , monkeyName , Loc . GetString ( "admin-smite-monkeyify-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( monkey ) ;
2024-10-16 18:24:31 -04:00
var disposalBinName = Loc . GetString ( "admin-smite-garbage-can-name" ) . ToLowerInvariant ( ) ;
2022-07-21 17:30:00 -05:00
Verb disposalBin = new ( )
{
2024-10-16 18:24:31 -04:00
Text = disposalBinName ,
2022-07-21 17:30:00 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Structures/Piping/disposal.rsi" ) , "disposal" ) ,
2022-07-21 17:30:00 -05:00
Act = ( ) = >
{
2023-03-06 12:37:18 -05:00
_polymorphSystem . PolymorphEntity ( args . Target , "AdminDisposalsSmite" ) ;
2022-07-21 17:30:00 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , disposalBinName , Loc . GetString ( "admin-smite-garbage-can-description" ) )
2022-07-21 17:30:00 -05:00
} ;
args . Verbs . Add ( disposalBin ) ;
2022-05-27 02:41:18 -05:00
if ( TryComp < DamageableComponent > ( args . Target , out var damageable ) & &
2023-02-26 18:48:57 +11:00
HasComp < MobStateComponent > ( args . Target ) )
2022-05-27 02:41:18 -05:00
{
2024-10-16 18:24:31 -04:00
var hardElectrocuteName = Loc . GetString ( "admin-smite-electrocute-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb hardElectrocute = new ( )
{
2024-10-16 18:24:31 -04:00
Text = hardElectrocuteName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Clothing/Hands/Gloves/Color/yellow.rsi" ) , "icon" ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
int damageToDeal ;
2023-01-13 16:57:10 -08:00
if ( ! _mobThresholdSystem . TryGetThresholdForState ( args . Target , MobState . Critical , out var criticalThreshold ) ) {
2022-05-27 02:41:18 -05:00
// We can't crit them so try killing them.
2023-01-13 16:57:10 -08:00
if ( ! _mobThresholdSystem . TryGetThresholdForState ( args . Target , MobState . Dead ,
out var deadThreshold ) )
return ; // whelp.
damageToDeal = deadThreshold . Value . Int ( ) - ( int ) damageable . TotalDamage ;
2022-05-27 02:41:18 -05:00
}
else
{
2023-01-13 16:57:10 -08:00
damageToDeal = criticalThreshold . Value . Int ( ) - ( int ) damageable . TotalDamage ;
2022-05-27 02:41:18 -05:00
}
if ( damageToDeal < = 0 )
damageToDeal = 100 ; // murder time.
if ( _inventorySystem . TryGetSlots ( args . Target , out var slotDefinitions ) )
{
foreach ( var slot in slotDefinitions )
{
if ( ! _inventorySystem . TryGetSlotEntity ( args . Target , slot . Name , out var slotEnt ) )
continue ;
RemComp < InsulatedComponent > ( slotEnt . Value ) ; // Fry the gloves.
}
}
_electrocutionSystem . TryDoElectrocution ( args . Target , null , damageToDeal ,
2022-09-06 04:48:35 +02:00
TimeSpan . FromSeconds ( 30 ) , refresh : true , ignoreInsulation : true ) ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , hardElectrocuteName , Loc . GetString ( "admin-smite-electrocute-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( hardElectrocute ) ;
}
if ( TryComp < CreamPiedComponent > ( args . Target , out var creamPied ) )
{
2024-10-16 18:24:31 -04:00
var creamPieName = Loc . GetString ( "admin-smite-creampie-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb creamPie = new ( )
{
2024-10-16 18:24:31 -04:00
Text = creamPieName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Objects/Consumable/Food/Baked/pie.rsi" ) , "plain-slice" ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
_creamPieSystem . SetCreamPied ( args . Target , creamPied , true ) ;
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , creamPieName , Loc . GetString ( "admin-smite-creampie-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( creamPie ) ;
}
if ( TryComp < BloodstreamComponent > ( args . Target , out var bloodstream ) )
{
2024-10-16 18:24:31 -04:00
var bloodRemovalName = Loc . GetString ( "admin-smite-remove-blood-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb bloodRemoval = new ( )
{
2024-10-16 18:24:31 -04:00
Text = bloodRemovalName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Fluids/tomato_splat.rsi" ) , "puddle-1" ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
_bloodstreamSystem . SpillAllSolutions ( args . Target , bloodstream ) ;
var xform = Transform ( args . Target ) ;
2022-07-09 02:09:52 -07:00
_popupSystem . PopupEntity ( Loc . GetString ( "admin-smite-remove-blood-self" ) , args . Target ,
2022-12-19 10:41:47 +13:00
args . Target , PopupType . LargeCaution ) ;
2022-07-09 02:09:52 -07:00
_popupSystem . PopupCoordinates ( Loc . GetString ( "admin-smite-remove-blood-others" , ( "name" , args . Target ) ) , xform . Coordinates ,
2022-12-19 10:41:47 +13:00
Filter . PvsExcept ( args . Target ) , true , PopupType . MediumCaution ) ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , bloodRemovalName , Loc . GetString ( "admin-smite-remove-blood-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( bloodRemoval ) ;
}
// bobby...
if ( TryComp < BodyComponent > ( args . Target , out var body ) )
{
2024-10-16 18:24:31 -04:00
var vomitOrgansName = Loc . GetString ( "admin-smite-vomit-organs-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb vomitOrgans = new ( )
{
2024-10-16 18:24:31 -04:00
Text = vomitOrgansName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2024-07-25 05:24:40 -07:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Fluids/vomit_toxin.rsi" ) , "vomit_toxin-1" ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
_vomitSystem . Vomit ( args . Target , - 1000 , - 1000 ) ; // You feel hollow!
2024-07-25 05:24:40 -07:00
var organs = _bodySystem . GetBodyOrganEntityComps < TransformComponent > ( ( args . Target , body ) ) ;
2022-05-27 02:41:18 -05:00
var baseXform = Transform ( args . Target ) ;
2024-07-25 05:24:40 -07:00
foreach ( var organ in organs )
2022-05-27 02:41:18 -05:00
{
2024-07-25 05:24:40 -07:00
if ( HasComp < BrainComponent > ( organ . Owner ) | | HasComp < EyeComponent > ( organ . Owner ) )
2022-05-27 02:41:18 -05:00
continue ;
2024-07-25 05:24:40 -07:00
_transformSystem . PlaceNextTo ( ( organ . Owner , organ . Comp1 ) , ( args . Target , baseXform ) ) ;
2022-05-27 02:41:18 -05:00
}
2022-07-09 02:09:52 -07:00
_popupSystem . PopupEntity ( Loc . GetString ( "admin-smite-vomit-organs-self" ) , args . Target ,
2022-12-19 10:41:47 +13:00
args . Target , PopupType . LargeCaution ) ;
2022-07-09 02:09:52 -07:00
_popupSystem . PopupCoordinates ( Loc . GetString ( "admin-smite-vomit-organs-others" , ( "name" , args . Target ) ) , baseXform . Coordinates ,
2022-12-19 10:41:47 +13:00
Filter . PvsExcept ( args . Target ) , true , PopupType . MediumCaution ) ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , vomitOrgansName , Loc . GetString ( "admin-smite-vomit-organs-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( vomitOrgans ) ;
2024-10-16 18:24:31 -04:00
var handsRemovalName = Loc . GetString ( "admin-smite-remove-hands-name" ) . ToLowerInvariant ( ) ;
2022-07-21 17:30:00 -05:00
Verb handsRemoval = new ( )
{
2024-10-16 18:24:31 -04:00
Text = handsRemovalName ,
2022-07-21 17:30:00 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Texture ( new ( "/Textures/Interface/AdminActions/remove-hands.png" ) ) ,
2022-07-21 17:30:00 -05:00
Act = ( ) = >
{
var baseXform = Transform ( args . Target ) ;
2022-10-23 00:46:28 +02:00
foreach ( var part in _bodySystem . GetBodyChildrenOfType ( args . Target , BodyPartType . Hand ) )
2022-07-21 17:30:00 -05:00
{
2023-09-21 00:23:02 -07:00
_transformSystem . AttachToGridOrMap ( part . Id ) ;
2022-07-21 17:30:00 -05:00
}
_popupSystem . PopupEntity ( Loc . GetString ( "admin-smite-remove-hands-self" ) , args . Target ,
2022-12-19 10:41:47 +13:00
args . Target , PopupType . LargeCaution ) ;
2023-08-13 15:50:58 -07:00
_popupSystem . PopupCoordinates ( Loc . GetString ( "admin-smite-remove-hands-other" , ( "name" , args . Target ) ) , baseXform . Coordinates ,
2022-12-19 10:41:47 +13:00
Filter . PvsExcept ( args . Target ) , true , PopupType . Medium ) ;
2022-07-21 17:30:00 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , handsRemovalName , Loc . GetString ( "admin-smite-remove-hands-description" ) )
2022-07-21 17:30:00 -05:00
} ;
args . Verbs . Add ( handsRemoval ) ;
2024-10-16 18:24:31 -04:00
var handRemovalName = Loc . GetString ( "admin-smite-remove-hand-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb handRemoval = new ( )
{
2024-10-16 18:24:31 -04:00
Text = handRemovalName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Texture ( new ( "/Textures/Interface/AdminActions/remove-hand.png" ) ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
var baseXform = Transform ( args . Target ) ;
2023-10-19 12:34:31 -07:00
foreach ( var part in _bodySystem . GetBodyChildrenOfType ( args . Target , BodyPartType . Hand , body ) )
2022-05-27 02:41:18 -05:00
{
2023-09-21 00:23:02 -07:00
_transformSystem . AttachToGridOrMap ( part . Id ) ;
2022-07-21 17:30:00 -05:00
break ;
2022-05-27 02:41:18 -05:00
}
2022-07-09 02:09:52 -07:00
_popupSystem . PopupEntity ( Loc . GetString ( "admin-smite-remove-hands-self" ) , args . Target ,
2022-12-19 10:41:47 +13:00
args . Target , PopupType . LargeCaution ) ;
2023-08-13 15:50:58 -07:00
_popupSystem . PopupCoordinates ( Loc . GetString ( "admin-smite-remove-hands-other" , ( "name" , args . Target ) ) , baseXform . Coordinates ,
2022-12-19 10:41:47 +13:00
Filter . PvsExcept ( args . Target ) , true , PopupType . Medium ) ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , handRemovalName , Loc . GetString ( "admin-smite-remove-hand-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( handRemoval ) ;
2022-07-21 17:30:00 -05:00
2024-10-16 18:24:31 -04:00
var stomachRemovalName = Loc . GetString ( "admin-smite-stomach-removal-name" ) . ToLowerInvariant ( ) ;
2022-07-21 17:30:00 -05:00
Verb stomachRemoval = new ( )
{
2024-10-16 18:24:31 -04:00
Text = stomachRemovalName ,
2022-07-21 17:30:00 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Mobs/Species/Human/organs.rsi" ) , "stomach" ) ,
2022-07-21 17:30:00 -05:00
Act = ( ) = >
{
2024-07-28 01:25:40 -07:00
foreach ( var entity in _bodySystem . GetBodyOrganEntityComps < StomachComponent > ( ( args . Target , body ) ) )
2022-07-21 17:30:00 -05:00
{
2024-07-28 01:25:40 -07:00
QueueDel ( entity . Owner ) ;
2022-07-21 17:30:00 -05:00
}
_popupSystem . PopupEntity ( Loc . GetString ( "admin-smite-stomach-removal-self" ) , args . Target ,
2022-12-19 10:41:47 +13:00
args . Target , PopupType . LargeCaution ) ;
2022-07-21 17:30:00 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , stomachRemovalName , Loc . GetString ( "admin-smite-stomach-removal-description" ) )
2022-07-21 17:30:00 -05:00
} ;
args . Verbs . Add ( stomachRemoval ) ;
2024-10-16 18:24:31 -04:00
var lungRemovalName = Loc . GetString ( "admin-smite-lung-removal-name" ) . ToLowerInvariant ( ) ;
2022-07-21 17:30:00 -05:00
Verb lungRemoval = new ( )
{
2024-10-16 18:24:31 -04:00
Text = lungRemovalName ,
2022-07-21 17:30:00 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Mobs/Species/Human/organs.rsi" ) , "lung-r" ) ,
2022-07-21 17:30:00 -05:00
Act = ( ) = >
{
2024-07-28 01:25:40 -07:00
foreach ( var entity in _bodySystem . GetBodyOrganEntityComps < LungComponent > ( ( args . Target , body ) ) )
2022-07-21 17:30:00 -05:00
{
2024-07-28 01:25:40 -07:00
QueueDel ( entity . Owner ) ;
2022-07-21 17:30:00 -05:00
}
_popupSystem . PopupEntity ( Loc . GetString ( "admin-smite-lung-removal-self" ) , args . Target ,
2022-12-19 10:41:47 +13:00
args . Target , PopupType . LargeCaution ) ;
2022-07-21 17:30:00 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , lungRemovalName , Loc . GetString ( "admin-smite-lung-removal-description" ) )
2022-07-21 17:30:00 -05:00
} ;
args . Verbs . Add ( lungRemoval ) ;
2022-05-27 02:41:18 -05:00
}
if ( TryComp < PhysicsComponent > ( args . Target , out var physics ) )
{
2024-10-16 18:24:31 -04:00
var pinballName = Loc . GetString ( "admin-smite-pinball-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb pinball = new ( )
{
2024-10-16 18:24:31 -04:00
Text = pinballName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Objects/Fun/toys.rsi" ) , "basketball" ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
var xform = Transform ( args . Target ) ;
var fixtures = Comp < FixturesComponent > ( args . Target ) ;
2024-02-28 00:51:20 +11:00
xform . Anchored = false ; // Just in case.
2023-01-15 15:38:59 +11:00
_physics . SetBodyType ( args . Target , BodyType . Dynamic , manager : fixtures , body : physics ) ;
2024-03-25 02:37:25 -04:00
_physics . SetBodyStatus ( args . Target , physics , BodyStatus . InAir ) ;
2023-01-15 15:38:59 +11:00
_physics . WakeBody ( args . Target , manager : fixtures , body : physics ) ;
foreach ( var fixture in fixtures . Fixtures . Values )
2022-05-27 02:41:18 -05:00
{
if ( ! fixture . Hard )
continue ;
2023-01-15 15:38:59 +11:00
_physics . SetRestitution ( args . Target , fixture , 1.1f , false , fixtures ) ;
2022-05-27 02:41:18 -05:00
}
2023-01-15 15:38:59 +11:00
_fixtures . FixtureUpdate ( args . Target , manager : fixtures , body : physics ) ;
_physics . SetLinearVelocity ( args . Target , _random . NextVector2 ( 1.5f , 1.5f ) , manager : fixtures , body : physics ) ;
_physics . SetAngularVelocity ( args . Target , MathF . PI * 12 , manager : fixtures , body : physics ) ;
2024-03-25 02:37:25 -04:00
_physics . SetLinearDamping ( args . Target , physics , 0f ) ;
_physics . SetAngularDamping ( args . Target , physics , 0f ) ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , pinballName , Loc . GetString ( "admin-smite-pinball-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( pinball ) ;
2024-10-16 18:24:31 -04:00
var yeetName = Loc . GetString ( "admin-smite-yeet-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb yeet = new ( )
{
2024-10-16 18:24:31 -04:00
Text = yeetName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Texture ( new ( "/Textures/Interface/VerbIcons/eject.svg.192dpi.png" ) ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
var xform = Transform ( args . Target ) ;
var fixtures = Comp < FixturesComponent > ( args . Target ) ;
2024-02-28 00:51:20 +11:00
xform . Anchored = false ; // Just in case.
2023-01-15 15:38:59 +11:00
_physics . SetBodyType ( args . Target , BodyType . Dynamic , body : physics ) ;
2024-03-25 02:37:25 -04:00
_physics . SetBodyStatus ( args . Target , physics , BodyStatus . InAir ) ;
2023-01-15 15:38:59 +11:00
_physics . WakeBody ( args . Target , manager : fixtures , body : physics ) ;
foreach ( var fixture in fixtures . Fixtures . Values )
2022-05-27 02:41:18 -05:00
{
2023-01-15 15:38:59 +11:00
_physics . SetHard ( args . Target , fixture , false , manager : fixtures ) ;
2022-05-27 02:41:18 -05:00
}
2023-01-15 15:38:59 +11:00
_physics . SetLinearVelocity ( args . Target , _random . NextVector2 ( 8.0f , 8.0f ) , manager : fixtures , body : physics ) ;
_physics . SetAngularVelocity ( args . Target , MathF . PI * 12 , manager : fixtures , body : physics ) ;
2024-03-25 02:37:25 -04:00
_physics . SetLinearDamping ( args . Target , physics , 0f ) ;
_physics . SetAngularDamping ( args . Target , physics , 0f ) ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , yeetName , Loc . GetString ( "admin-smite-yeet-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( yeet ) ;
}
2024-10-16 18:24:31 -04:00
var breadName = Loc . GetString ( "admin-smite-become-bread-name" ) . ToLowerInvariant ( ) ; // Will I get cancelled for breadName-ing you?
2022-05-27 02:41:18 -05:00
Verb bread = new ( )
{
2024-05-11 21:01:58 -05:00
Text = "admin-smite-kill-sign-name" ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Objects/Consumable/Food/Baked/bread.rsi" ) , "plain" ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
2023-03-06 12:37:18 -05:00
_polymorphSystem . PolymorphEntity ( args . Target , "AdminBreadSmite" ) ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , breadName , Loc . GetString ( "admin-smite-become-bread-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( bread ) ;
2024-10-16 18:24:31 -04:00
var mouseName = Loc . GetString ( "admin-smite-become-mouse-name" ) . ToLowerInvariant ( ) ;
2022-07-21 17:30:00 -05:00
Verb mouse = new ( )
{
2024-05-11 21:01:58 -05:00
Text = "admin-smite-cluwne-name" ,
2022-07-21 17:30:00 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Mobs/Animals/mouse.rsi" ) , "icon-0" ) ,
2022-07-21 17:30:00 -05:00
Act = ( ) = >
{
2023-03-06 12:37:18 -05:00
_polymorphSystem . PolymorphEntity ( args . Target , "AdminMouseSmite" ) ;
2022-07-21 17:30:00 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , mouseName , Loc . GetString ( "admin-smite-become-mouse-description" ) )
2022-07-21 17:30:00 -05:00
} ;
args . Verbs . Add ( mouse ) ;
2022-05-27 02:41:18 -05:00
if ( TryComp < ActorComponent > ( args . Target , out var actorComponent ) )
{
2024-10-16 18:24:31 -04:00
var ghostKickName = Loc . GetString ( "admin-smite-ghostkick-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb ghostKick = new ( )
{
2024-10-16 18:24:31 -04:00
Text = ghostKickName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Texture ( new ( "/Textures/Interface/gavel.svg.192dpi.png" ) ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
2024-01-22 23:14:13 +01:00
_ghostKickManager . DoDisconnect ( actorComponent . PlayerSession . Channel , "Smitten." ) ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , ghostKickName , Loc . GetString ( "admin-smite-ghostkick-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( ghostKick ) ;
}
2024-10-16 18:24:31 -04:00
if ( TryComp < InventoryComponent > ( args . Target , out var inventory ) )
{
var nyanifyName = Loc . GetString ( "admin-smite-nyanify-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb nyanify = new ( )
{
2024-10-16 18:24:31 -04:00
Text = nyanifyName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Clothing/Head/Hats/catears.rsi" ) , "icon" ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
var ears = Spawn ( "ClothingHeadHatCatEars" , Transform ( args . Target ) . Coordinates ) ;
EnsureComp < UnremoveableComponent > ( ears ) ;
_inventorySystem . TryUnequip ( args . Target , "head" , true , true , false , inventory ) ;
_inventorySystem . TryEquip ( args . Target , ears , "head" , true , true , false , inventory ) ;
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , nyanifyName , Loc . GetString ( "admin-smite-nyanify-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( nyanify ) ;
2024-10-16 18:24:31 -04:00
var killSignName = Loc . GetString ( "admin-smite-kill-sign-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb killSign = new ( )
{
2024-10-16 18:24:31 -04:00
Text = killSignName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Objects/Misc/killsign.rsi" ) , "icon" ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
EnsureComp < KillSignComponent > ( args . Target ) ;
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , killSignName , Loc . GetString ( "admin-smite-kill-sign-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( killSign ) ;
2024-10-16 18:24:31 -04:00
var cluwneName = Loc . GetString ( "admin-smite-cluwne-name" ) . ToLowerInvariant ( ) ;
2023-03-06 19:09:24 +00:00
Verb cluwne = new ( )
2022-05-27 02:41:18 -05:00
{
2024-10-16 18:24:31 -04:00
Text = cluwneName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-03-06 19:09:24 +00:00
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Clothing/Mask/cluwne.rsi" ) , "icon" ) ,
2023-03-06 19:09:24 +00:00
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
2023-03-06 19:09:24 +00:00
EnsureComp < CluwneComponent > ( args . Target ) ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , cluwneName , Loc . GetString ( "admin-smite-cluwne-description" ) )
2022-05-27 02:41:18 -05:00
} ;
2023-03-06 19:09:24 +00:00
args . Verbs . Add ( cluwne ) ;
2022-07-21 17:30:00 -05:00
2024-10-16 18:24:31 -04:00
var maidenName = Loc . GetString ( "admin-smite-maid-name" ) . ToLowerInvariant ( ) ;
2022-07-21 17:30:00 -05:00
Verb maiden = new ( )
{
2024-10-16 18:24:31 -04:00
Text = maidenName ,
2022-07-21 17:30:00 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Clothing/Uniforms/Jumpskirt/janimaid.rsi" ) , "icon" ) ,
2022-07-21 17:30:00 -05:00
Act = ( ) = >
{
SetOutfitCommand . SetOutfit ( args . Target , "JanitorMaidGear" , EntityManager , ( _ , clothing ) = >
{
if ( HasComp < ClothingComponent > ( clothing ) )
EnsureComp < UnremoveableComponent > ( clothing ) ;
EnsureComp < ClumsyComponent > ( args . Target ) ;
} ) ;
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , maidenName , Loc . GetString ( "admin-smite-maid-description" ) )
2022-07-21 17:30:00 -05:00
} ;
args . Verbs . Add ( maiden ) ;
2022-05-27 02:41:18 -05:00
}
2024-10-16 18:24:31 -04:00
var angerPointingArrowsName = Loc . GetString ( "admin-smite-anger-pointing-arrows-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb angerPointingArrows = new ( )
{
2024-10-16 18:24:31 -04:00
Text = angerPointingArrowsName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Interface/Misc/pointing.rsi" ) , "pointing" ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
EnsureComp < PointingArrowAngeringComponent > ( args . Target ) ;
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , angerPointingArrowsName , Loc . GetString ( "admin-smite-anger-pointing-arrows-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( angerPointingArrows ) ;
2024-10-16 18:24:31 -04:00
var dustName = Loc . GetString ( "admin-smite-dust-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb dust = new ( )
{
2024-10-16 18:24:31 -04:00
Text = dustName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Objects/Materials/materials.rsi" ) , "ash" ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
EntityManager . QueueDeleteEntity ( args . Target ) ;
Spawn ( "Ash" , Transform ( args . Target ) . Coordinates ) ;
2022-12-19 10:41:47 +13:00
_popupSystem . PopupEntity ( Loc . GetString ( "admin-smite-turned-ash-other" , ( "name" , args . Target ) ) , args . Target , PopupType . LargeCaution ) ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , dustName , Loc . GetString ( "admin-smite-dust-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( dust ) ;
2024-10-16 18:24:31 -04:00
var youtubeVideoSimulationName = Loc . GetString ( "admin-smite-buffering-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb youtubeVideoSimulation = new ( )
{
2024-10-16 18:24:31 -04:00
Text = youtubeVideoSimulationName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Texture ( new ( "/Textures/Interface/Misc/buffering_smite_icon.png" ) ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
EnsureComp < BufferingComponent > ( args . Target ) ;
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , youtubeVideoSimulationName , Loc . GetString ( "admin-smite-buffering-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( youtubeVideoSimulation ) ;
2024-10-16 18:24:31 -04:00
var instrumentationName = Loc . GetString ( "admin-smite-become-instrument-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb instrumentation = new ( )
{
2024-05-11 21:01:58 -05:00
Text = "admin-smite-become-mouse-name" ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Objects/Fun/Instruments/h_synthesizer.rsi" ) , "icon" ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
2023-03-06 12:37:18 -05:00
_polymorphSystem . PolymorphEntity ( args . Target , "AdminInstrumentSmite" ) ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , instrumentationName , Loc . GetString ( "admin-smite-become-instrument-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( instrumentation ) ;
2024-10-16 18:24:31 -04:00
var noGravityName = Loc . GetString ( "admin-smite-remove-gravity-name" ) . ToLowerInvariant ( ) ;
2022-05-27 02:41:18 -05:00
Verb noGravity = new ( )
{
2024-10-16 18:24:31 -04:00
Text = noGravityName ,
2022-05-27 02:41:18 -05:00
Category = VerbCategory . Smite ,
2024-03-19 23:27:02 -04:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Structures/Machines/gravity_generator.rsi" ) , "off" ) ,
2022-05-27 02:41:18 -05:00
Act = ( ) = >
{
var grav = EnsureComp < MovementIgnoreGravityComponent > ( args . Target ) ;
grav . Weightless = true ;
2022-07-21 17:30:00 -05:00
2024-03-19 23:27:02 -04:00
Dirty ( args . Target , grav ) ;
2022-05-27 02:41:18 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , noGravityName , Loc . GetString ( "admin-smite-remove-gravity-description" ) )
2022-05-27 02:41:18 -05:00
} ;
args . Verbs . Add ( noGravity ) ;
2022-07-21 17:30:00 -05:00
2024-10-16 18:24:31 -04:00
var reptilianName = Loc . GetString ( "admin-smite-reptilian-species-swap-name" ) . ToLowerInvariant ( ) ;
2022-07-21 17:30:00 -05:00
Verb reptilian = new ( )
{
2024-10-16 18:24:31 -04:00
Text = reptilianName ,
2022-07-21 17:30:00 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Objects/Fun/toys.rsi" ) , "plushie_lizard" ) ,
2022-07-21 17:30:00 -05:00
Act = ( ) = >
{
2023-03-06 12:37:18 -05:00
_polymorphSystem . PolymorphEntity ( args . Target , "AdminLizardSmite" ) ;
2022-07-21 17:30:00 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , reptilianName , Loc . GetString ( "admin-smite-reptilian-species-swap-description" ) )
2022-07-21 17:30:00 -05:00
} ;
args . Verbs . Add ( reptilian ) ;
2024-10-16 18:24:31 -04:00
var lockerName = Loc . GetString ( "admin-smite-locker-stuff-name" ) . ToLowerInvariant ( ) ;
2022-07-21 17:30:00 -05:00
Verb locker = new ( )
{
2024-10-16 18:24:31 -04:00
Text = lockerName ,
2022-07-21 17:30:00 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Rsi ( new ( "/Textures/Structures/Storage/closet.rsi" ) , "generic" ) ,
2022-07-21 17:30:00 -05:00
Act = ( ) = >
{
var xform = Transform ( args . Target ) ;
var locker = Spawn ( "ClosetMaintenance" , xform . Coordinates ) ;
if ( TryComp < EntityStorageComponent > ( locker , out var storage ) )
{
_entityStorageSystem . ToggleOpen ( args . Target , locker , storage ) ;
_entityStorageSystem . Insert ( args . Target , locker , storage ) ;
_entityStorageSystem . ToggleOpen ( args . Target , locker , storage ) ;
}
2023-09-05 00:07:01 +10:00
_weldableSystem . SetWeldedState ( locker , true ) ;
2022-07-21 17:30:00 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , lockerName , Loc . GetString ( "admin-smite-locker-stuff-description" ) )
2022-07-21 17:30:00 -05:00
} ;
args . Verbs . Add ( locker ) ;
2024-10-16 18:24:31 -04:00
var headstandName = Loc . GetString ( "admin-smite-headstand-name" ) . ToLowerInvariant ( ) ;
2022-07-21 17:30:00 -05:00
Verb headstand = new ( )
{
2024-05-11 21:01:58 -05:00
Text = "admin-smite-run-walk-swap-name" ,
2022-07-21 17:30:00 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Texture ( new ( "/Textures/Interface/VerbIcons/refresh.svg.192dpi.png" ) ) ,
2022-07-21 17:30:00 -05:00
Act = ( ) = >
{
EnsureComp < HeadstandComponent > ( args . Target ) ;
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , headstandName , Loc . GetString ( "admin-smite-headstand-description" ) )
2022-07-21 17:30:00 -05:00
} ;
args . Verbs . Add ( headstand ) ;
2024-10-16 18:24:31 -04:00
var zoomInName = Loc . GetString ( "admin-smite-zoom-in-name" ) . ToLowerInvariant ( ) ;
2022-07-21 17:30:00 -05:00
Verb zoomIn = new ( )
{
2024-10-16 18:24:31 -04:00
Text = zoomInName ,
2022-07-21 17:30:00 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Texture ( new ( "/Textures/Interface/AdminActions/zoom.png" ) ) ,
2022-07-21 17:30:00 -05:00
Act = ( ) = >
{
2023-06-17 02:22:21 +03:00
var eye = EnsureComp < ContentEyeComponent > ( args . Target ) ;
_eyeSystem . SetZoom ( args . Target , eye . TargetZoom * 0.2f , ignoreLimits : true ) ;
2022-07-21 17:30:00 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , zoomInName , Loc . GetString ( "admin-smite-zoom-in-description" ) )
2022-07-21 17:30:00 -05:00
} ;
args . Verbs . Add ( zoomIn ) ;
2024-10-16 18:24:31 -04:00
var flipEyeName = Loc . GetString ( "admin-smite-flip-eye-name" ) . ToLowerInvariant ( ) ;
2022-07-21 17:30:00 -05:00
Verb flipEye = new ( )
{
2024-10-16 18:24:31 -04:00
Text = flipEyeName ,
2022-07-21 17:30:00 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Texture ( new ( "/Textures/Interface/AdminActions/flip.png" ) ) ,
2022-07-21 17:30:00 -05:00
Act = ( ) = >
{
2023-06-17 02:22:21 +03:00
var eye = EnsureComp < ContentEyeComponent > ( args . Target ) ;
_eyeSystem . SetZoom ( args . Target , eye . TargetZoom * - 1 , ignoreLimits : true ) ;
2022-07-21 17:30:00 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , flipEyeName , Loc . GetString ( "admin-smite-flip-eye-description" ) )
2022-07-21 17:30:00 -05:00
} ;
args . Verbs . Add ( flipEye ) ;
2024-10-16 18:24:31 -04:00
var runWalkSwapName = Loc . GetString ( "admin-smite-run-walk-swap-name" ) . ToLowerInvariant ( ) ;
2022-07-21 17:30:00 -05:00
Verb runWalkSwap = new ( )
{
2024-10-16 18:24:31 -04:00
Text = runWalkSwapName ,
2022-07-21 17:30:00 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Texture ( new ( "/Textures/Interface/AdminActions/run-walk-swap.png" ) ) ,
2022-07-21 17:30:00 -05:00
Act = ( ) = >
{
var movementSpeed = EnsureComp < MovementSpeedModifierComponent > ( args . Target ) ;
( movementSpeed . BaseSprintSpeed , movementSpeed . BaseWalkSpeed ) = ( movementSpeed . BaseWalkSpeed , movementSpeed . BaseSprintSpeed ) ;
2024-03-19 23:27:02 -04:00
Dirty ( args . Target , movementSpeed ) ;
2022-07-21 17:30:00 -05:00
_popupSystem . PopupEntity ( Loc . GetString ( "admin-smite-run-walk-swap-prompt" ) , args . Target ,
2022-12-19 10:41:47 +13:00
args . Target , PopupType . LargeCaution ) ;
2022-07-21 17:30:00 -05:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , runWalkSwapName , Loc . GetString ( "admin-smite-run-walk-swap-description" ) )
2022-07-21 17:30:00 -05:00
} ;
args . Verbs . Add ( runWalkSwap ) ;
2024-10-16 18:24:31 -04:00
var backwardsAccentName = Loc . GetString ( "admin-smite-speak-backwards-name" ) . ToLowerInvariant ( ) ;
2022-07-21 17:30:00 -05:00
Verb backwardsAccent = new ( )
{
2024-10-16 18:24:31 -04:00
Text = backwardsAccentName ,
2022-07-21 17:30:00 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Texture ( new ( "/Textures/Interface/AdminActions/help-backwards.png" ) ) ,
2022-07-21 17:30:00 -05:00
Act = ( ) = >
{
EnsureComp < BackwardsAccentComponent > ( args . Target ) ;
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , backwardsAccentName , Loc . GetString ( "admin-smite-speak-backwards-description" ) )
2022-07-21 17:30:00 -05:00
} ;
args . Verbs . Add ( backwardsAccent ) ;
2024-10-16 18:24:31 -04:00
var disarmProneName = Loc . GetString ( "admin-smite-disarm-prone-name" ) . ToLowerInvariant ( ) ;
2022-07-21 17:30:00 -05:00
Verb disarmProne = new ( )
{
2024-10-16 18:24:31 -04:00
Text = disarmProneName ,
2022-07-21 17:30:00 -05:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Texture ( new ( "/Textures/Interface/Actions/disarm.png" ) ) ,
2022-07-21 17:30:00 -05:00
Act = ( ) = >
{
EnsureComp < DisarmProneComponent > ( args . Target ) ;
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , disarmProneName , Loc . GetString ( "admin-smite-disarm-prone-description" ) )
2022-07-21 17:30:00 -05:00
} ;
args . Verbs . Add ( disarmProne ) ;
2022-08-23 16:04:17 +02:00
2024-10-16 18:24:31 -04:00
var superSpeedName = Loc . GetString ( "admin-smite-super-speed-name" ) . ToLowerInvariant ( ) ;
2022-08-23 16:04:17 +02:00
Verb superSpeed = new ( )
{
2024-05-11 21:01:58 -05:00
Text = "admin-smite-garbage-can-name" ,
2022-08-23 16:04:17 +02:00
Category = VerbCategory . Smite ,
2023-04-20 20:16:01 +10:00
Icon = new SpriteSpecifier . Texture ( new ( "/Textures/Interface/AdminActions/super_speed.png" ) ) ,
2022-08-23 16:04:17 +02:00
Act = ( ) = >
{
var movementSpeed = EnsureComp < MovementSpeedModifierComponent > ( args . Target ) ;
_movementSpeedModifierSystem ? . ChangeBaseSpeed ( args . Target , 400 , 8000 , 40 , movementSpeed ) ;
_popupSystem . PopupEntity ( Loc . GetString ( "admin-smite-super-speed-prompt" ) , args . Target ,
2022-12-19 10:41:47 +13:00
args . Target , PopupType . LargeCaution ) ;
2022-08-23 16:04:17 +02:00
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , superSpeedName , Loc . GetString ( "admin-smite-super-speed-description" ) )
2022-08-23 16:04:17 +02:00
} ;
args . Verbs . Add ( superSpeed ) ;
2023-12-25 03:16:56 +00:00
2023-12-18 21:39:23 +02:00
//Bonk
2024-10-16 18:24:31 -04:00
var superBonkLiteName = Loc . GetString ( "admin-smite-super-bonk-lite-name" ) . ToLowerInvariant ( ) ;
2023-12-18 21:39:23 +02:00
Verb superBonkLite = new ( )
{
2024-10-16 18:24:31 -04:00
Text = superBonkLiteName ,
2023-12-18 21:39:23 +02:00
Category = VerbCategory . Smite ,
Icon = new SpriteSpecifier . Rsi ( new ( "Structures/Furniture/Tables/glass.rsi" ) , "full" ) ,
Act = ( ) = >
{
_superBonkSystem . StartSuperBonk ( args . Target , stopWhenDead : true ) ;
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , superBonkLiteName , Loc . GetString ( "admin-smite-super-bonk-lite-description" ) )
2023-12-18 21:39:23 +02:00
} ;
args . Verbs . Add ( superBonkLite ) ;
2024-10-16 18:24:31 -04:00
var superBonkName = Loc . GetString ( "admin-smite-super-bonk-name" ) . ToLowerInvariant ( ) ;
2023-12-18 21:39:23 +02:00
Verb superBonk = new ( )
{
2024-10-16 18:24:31 -04:00
Text = superBonkName ,
2023-12-18 21:39:23 +02:00
Category = VerbCategory . Smite ,
Icon = new SpriteSpecifier . Rsi ( new ( "Structures/Furniture/Tables/generic.rsi" ) , "full" ) ,
Act = ( ) = >
{
_superBonkSystem . StartSuperBonk ( args . Target ) ;
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , superBonkName , Loc . GetString ( "admin-smite-super-bonk-description" ) )
2023-12-18 21:39:23 +02:00
} ;
args . Verbs . Add ( superBonk ) ;
2024-05-11 21:01:58 -05:00
2024-10-16 18:24:31 -04:00
var superslipName = Loc . GetString ( "admin-smite-super-slip-name" ) . ToLowerInvariant ( ) ;
2024-05-11 21:01:58 -05:00
Verb superslip = new ( )
{
2024-10-16 18:24:31 -04:00
Text = superslipName ,
2024-05-11 21:01:58 -05:00
Category = VerbCategory . Smite ,
Icon = new SpriteSpecifier . Rsi ( new ( "Objects/Specific/Janitorial/soap.rsi" ) , "omega-4" ) ,
Act = ( ) = >
{
var hadSlipComponent = EnsureComp ( args . Target , out SlipperyComponent slipComponent ) ;
if ( ! hadSlipComponent )
{
slipComponent . SuperSlippery = true ;
slipComponent . ParalyzeTime = 5 ;
slipComponent . LaunchForwardsMultiplier = 20 ;
}
_slipperySystem . TrySlip ( args . Target , slipComponent , args . Target , requiresContact : false ) ;
if ( ! hadSlipComponent )
{
RemComp ( args . Target , slipComponent ) ;
}
} ,
Impact = LogImpact . Extreme ,
2024-10-16 18:24:31 -04:00
Message = string . Join ( ": " , superslipName , Loc . GetString ( "admin-smite-super-slip-description" ) )
2024-05-11 21:01:58 -05:00
} ;
args . Verbs . Add ( superslip ) ;
2022-05-27 02:41:18 -05:00
}
}