public bool TryGetEntity( IConsoleShell shell, IPlayerSession?player, string[] args, bool adding, [NotNullWhen(true)] out IEntity?entity, out DamageFlag flag, [NotNullWhen(true)] out IDamageableComponent?damageable) { entity = null; flag = DamageFlag.None; damageable = null; IEntity? parsedEntity; DamageFlag parsedFlag; IDamageableComponent?parsedDamageable; switch (args.Length) { case 1: { if (player == null) { shell.SendText(player, "An entity needs to be specified when the command isn't used by a player."); return(false); } if (player.AttachedEntity == null) { shell.SendText(player, "An entity needs to be specified when you aren't attached to an entity."); return(false); } if (!Enum.TryParse(args[0], true, out parsedFlag)) { shell.SendText(player, $"{args[0]} is not a valid damage flag."); return(false); } parsedEntity = player.AttachedEntity; flag = parsedFlag; break; } case 2: { if (!EntityUid.TryParse(args[0], out var id)) { shell.SendText(player, $"{args[0]} isn't a valid entity id."); return(false); } var entityManager = IoCManager.Resolve <IEntityManager>(); if (!entityManager.TryGetEntity(id, out parsedEntity)) { shell.SendText(player, $"No entity found with id {id}."); return(false); } if (!Enum.TryParse(args[1], true, out parsedFlag)) { shell.SendText(player, $"{args[1]} is not a valid damage flag."); return(false); } break; } default: shell.SendText(player, Help); return(false); } if (!parsedEntity.TryGetComponent(out parsedDamageable)) { shell.SendText(player, $"Entity {parsedEntity.Name} doesn't have a {nameof(IDamageableComponent)}"); return(false); } if (parsedDamageable.HasFlag(parsedFlag) && adding) { shell.SendText(player, $"Entity {parsedEntity.Name} already has damage flag {parsedFlag}."); return(false); } else if (!parsedDamageable.HasFlag(parsedFlag) && !adding) { shell.SendText(player, $"Entity {parsedEntity.Name} doesn't have damage flag {parsedFlag}."); return(false); } entity = parsedEntity; flag = parsedFlag; damageable = parsedDamageable; return(true); }
public void Execute(IConsoleShell shell, IPlayerSession?player, string[] args) { // Check if we have enough for the dmg types to show if (args.Length > 0 && args[0] == "?") { SendDamageTypes(shell, player); return; } // Not enough args if (args.Length < 2) { shell.SendText(player, Help); return; } var ignoreResistance = false; var entityUid = player != null && player.AttachedEntityUid.HasValue ? player.AttachedEntityUid.Value : EntityUid.Invalid; if (!int.TryParse(args[1], out var amount) || args.Length >= 3 && args[2] != "_" && !EntityUid.TryParse(args[2], out entityUid) || args.Length >= 4 && !bool.TryParse(args[3], out ignoreResistance)) { shell.SendText(player, Help); return; } if (entityUid == EntityUid.Invalid) { shell.SendText(player, "Not a valid entity."); return; } if (!IoCManager.Resolve <IEntityManager>().TryGetEntity(entityUid, out var ent)) { shell.SendText(player, "Entity couldn't be found."); return; } if (!ent.TryGetComponent(out IDamageableComponent? damageable)) { shell.SendText(player, "Entity can't be damaged."); return; } if (Enum.TryParse <DamageClass>(args[0], true, out var dmgClass)) { if (!damageable.ChangeDamage(dmgClass, amount, ignoreResistance)) { shell.SendText(player, "Something went wrong!"); } return; } // Fall back to DamageType else if (Enum.TryParse <DamageType>(args[0], true, out var dmgType)) { if (!damageable.ChangeDamage(dmgType, amount, ignoreResistance)) { shell.SendText(player, "Something went wrong!"); } return; } else { SendDamageTypes(shell, player); } }
public void Execute(IConsoleShell shell, string argStr, string[] args) { var player = shell.Player as IPlayerSession; var entityManager = IoCManager.Resolve <IEntityManager>(); IEntity entity; EntityUid partUid; switch (args.Length) { case 1: if (player == null) { shell.WriteLine($"You need to specify an entity to attach the part to if you aren't a player.\n{Help}"); return; } if (player.AttachedEntity == null) { shell.WriteLine($"You need to specify an entity to attach the part to if you aren't attached to an entity.\n{Help}"); return; } if (!EntityUid.TryParse(args[0], out partUid)) { shell.WriteLine($"{args[0]} is not a valid entity uid."); return; } entity = player.AttachedEntity; break; case 2: if (!EntityUid.TryParse(args[0], out var entityUid)) { shell.WriteLine($"{args[0]} is not a valid entity uid."); return; } if (!EntityUid.TryParse(args[1], out partUid)) { shell.WriteLine($"{args[1]} is not a valid entity uid."); return; } if (!entityManager.TryGetEntity(entityUid, out var tempEntity)) { shell.WriteLine($"{entityUid} is not a valid entity."); return; } entity = tempEntity; break; default: shell.WriteLine(Help); return; } if (!entity.TryGetComponent(out SharedBodyComponent? body)) { shell.WriteLine($"Entity {entity.Name} with uid {entity.Uid} does not have a {nameof(SharedBodyComponent)} component."); return; } if (!entityManager.TryGetEntity(partUid, out var partEntity)) { shell.WriteLine($"{partUid} is not a valid entity."); return; } if (!partEntity.TryGetComponent(out SharedBodyPartComponent? part)) { shell.WriteLine($"Entity {partEntity.Name} with uid {args[0]} does not have a {nameof(SharedBodyPartComponent)} component."); return; } if (body.HasPart(part)) { shell.WriteLine($"Body part {partEntity.Name} with uid {partEntity.Uid} is already attached to entity {entity.Name} with uid {entity.Uid}"); return; } body.SetPart($"{nameof(AttachBodyPartVerb)}-{partEntity.Uid}", part); }
public void Execute(IConsoleShell shell, IPlayerSession?player, string[] args) { if (args.Length > 1) { shell.SendText(player, Help); return; } var entityManager = IoCManager.Resolve <IEntityManager>(); var prototypeManager = IoCManager.Resolve <IPrototypeManager>(); IEntity entity; IEntity hand; switch (args.Length) { case 0: { if (player == null) { shell.SendText(player, "Only a player can run this command without arguments."); return; } if (player.AttachedEntity == null) { shell.SendText(player, "You don't have an entity to add a hand to."); return; } entity = player.AttachedEntity; hand = entityManager.SpawnEntity(DefaultHandPrototype, entity.Transform.Coordinates); break; } case 1: { if (EntityUid.TryParse(args[0], out var uid)) { if (!entityManager.TryGetEntity(uid, out var parsedEntity)) { shell.SendText(player, $"No entity found with uid {uid}"); return; } entity = parsedEntity; hand = entityManager.SpawnEntity(DefaultHandPrototype, entity.Transform.Coordinates); } else { if (player == null) { shell.SendText(player, "You must specify an entity to add a hand to when using this command from the server terminal."); return; } if (player.AttachedEntity == null) { shell.SendText(player, "You don't have an entity to add a hand to."); return; } entity = player.AttachedEntity; hand = entityManager.SpawnEntity(args[0], entity.Transform.Coordinates); } break; } case 2: { if (!EntityUid.TryParse(args[0], out var uid)) { shell.SendText(player, $"{args[0]} is not a valid entity uid."); return; } if (!entityManager.TryGetEntity(uid, out var parsedEntity)) { shell.SendText(player, $"No entity exists with uid {uid}."); return; } entity = parsedEntity; if (!prototypeManager.HasIndex <EntityPrototype>(args[1])) { shell.SendText(player, $"No hand entity exists with id {args[1]}."); return; } hand = entityManager.SpawnEntity(args[1], entity.Transform.Coordinates); break; } default: { shell.SendText(player, Help); return; } } if (!entity.TryGetComponent(out IBody? body)) { var random = IoCManager.Resolve <IRobustRandom>(); var text = $"You have no body{(random.Prob(0.2f) ? " and you must scream." : ".")}"; shell.SendText(player, text); return; } if (!hand.TryGetComponent(out IBodyPart? part)) { shell.SendText(player, $"Hand entity {hand} does not have a {nameof(IBodyPart)} component."); return; } var slot = part.GetHashCode().ToString(); var response = body.TryAddPart(slot, part, true) ? $"Added hand to entity {entity.Name}" : $"Error occurred trying to add a hand to entity {entity.Name}"; shell.SendText(player, response); }
public void Execute(IConsoleShell shell, string argStr, string[] args) { var player = shell.Player as IPlayerSession; EntityUid?gridId; Gas? gas = null; var entMan = IoCManager.Resolve <IEntityManager>(); switch (args.Length) { case 0: { if (player == null) { shell.WriteLine("A grid must be specified when the command isn't used by a player."); return; } if (player.AttachedEntity is not { Valid : true } playerEntity) { shell.WriteLine("You have no entity to get a grid from."); return; } gridId = entMan.GetComponent <TransformComponent>(playerEntity).GridUid; if (gridId == null) { shell.WriteLine("You aren't on a grid to delete gas from."); return; } break; } case 1: { if (!EntityUid.TryParse(args[0], out var number)) { // Argument is a gas if (player == null) { shell.WriteLine("A grid id must be specified if not using this command as a player."); return; } if (player.AttachedEntity is not { Valid : true } playerEntity) { shell.WriteLine("You have no entity from which to get a grid id."); return; } gridId = entMan.GetComponent <TransformComponent>(playerEntity).GridUid; if (gridId == null) { shell.WriteLine("You aren't on a grid to delete gas from."); return; } if (!Enum.TryParse <Gas>(args[0], true, out var parsedGas)) { shell.WriteLine($"{args[0]} is not a valid gas name."); return; } gas = parsedGas; break; } // Argument is a grid gridId = number; break; } case 2: { if (!EntityUid.TryParse(args[0], out var first)) { shell.WriteLine($"{args[0]} is not a valid integer for a grid id."); return; } gridId = first; if (gridId.Value.IsValid()) { shell.WriteLine($"{gridId} is not a valid grid id."); return; } if (!Enum.TryParse <Gas>(args[1], true, out var parsedGas)) { shell.WriteLine($"{args[1]} is not a valid gas."); return; } gas = parsedGas; break; } default: shell.WriteLine(Help); return; } var mapManager = IoCManager.Resolve <IMapManager>(); if (!mapManager.TryGetGrid(gridId, out _)) { shell.WriteLine($"No grid exists with id {gridId}"); return; } var atmosphereSystem = EntitySystem.Get <AtmosphereSystem>(); var tiles = 0; var moles = 0f; if (gas == null) { foreach (var tile in atmosphereSystem.GetAllMixtures(gridId.Value, true)) { if (tile.Immutable) { continue; } tiles++; moles += tile.TotalMoles; tile.Clear(); } } else { foreach (var tile in atmosphereSystem.GetAllMixtures(gridId.Value, true)) { if (tile.Immutable) { continue; } tiles++; moles += tile.TotalMoles; tile.SetMoles(gas.Value, 0); } } if (gas == null) { shell.WriteLine($"Removed {moles} moles from {tiles} tiles."); return; } shell.WriteLine($"Removed {moles} moles of gas {gas} from {tiles} tiles."); }
public void Execute(IConsoleShell shell, string argStr, string[] args) { var player = shell.Player as IPlayerSession; if (args.Length > 1) { shell.WriteLine(Help); return; } var entityManager = IoCManager.Resolve <IEntityManager>(); var prototypeManager = IoCManager.Resolve <IPrototypeManager>(); EntityUid entity; EntityUid hand; switch (args.Length) { case 0: { if (player == null) { shell.WriteLine("Only a player can run this command without arguments."); return; } if (player.AttachedEntity == null) { shell.WriteLine("You don't have an entity to add a hand to."); return; } entity = player.AttachedEntity.Value; hand = entityManager.SpawnEntity(DefaultHandPrototype, entityManager.GetComponent <TransformComponent>(entity).Coordinates); break; } case 1: { if (EntityUid.TryParse(args[0], out var uid)) { if (!entityManager.EntityExists(uid)) { shell.WriteLine($"No entity found with uid {uid}"); return; } entity = uid; hand = entityManager.SpawnEntity(DefaultHandPrototype, entityManager.GetComponent <TransformComponent>(entity).Coordinates); } else { if (player == null) { shell.WriteLine("You must specify an entity to add a hand to when using this command from the server terminal."); return; } if (player.AttachedEntity == null) { shell.WriteLine("You don't have an entity to add a hand to."); return; } entity = player.AttachedEntity.Value; hand = entityManager.SpawnEntity(args[0], entityManager.GetComponent <TransformComponent>(entity).Coordinates); } break; } case 2: { if (!EntityUid.TryParse(args[0], out var uid)) { shell.WriteLine($"{args[0]} is not a valid entity uid."); return; } if (!entityManager.EntityExists(uid)) { shell.WriteLine($"No entity exists with uid {uid}."); return; } entity = uid; if (!prototypeManager.HasIndex <EntityPrototype>(args[1])) { shell.WriteLine($"No hand entity exists with id {args[1]}."); return; } hand = entityManager.SpawnEntity(args[1], entityManager.GetComponent <TransformComponent>(entity).Coordinates); break; } default: { shell.WriteLine(Help); return; } } if (!entityManager.TryGetComponent(entity, out SharedBodyComponent? body)) { var random = IoCManager.Resolve <IRobustRandom>(); var text = $"You have no body{(random.Prob(0.2f) ? " and you must scream." : ".")}"; shell.WriteLine(text); return; } if (!entityManager.TryGetComponent(hand, out SharedBodyPartComponent? part)) { shell.WriteLine($"Hand entity {hand} does not have a {nameof(SharedBodyPartComponent)} component."); return; } var slot = part.GetHashCode().ToString(); body.SetPart(slot, part); shell.WriteLine($"Added hand to entity {entityManager.GetComponent<MetaDataComponent>(entity).EntityName}"); }
public bool Execute(IDebugConsole console, params string[] args) { var vvm = IoCManager.Resolve <IViewVariablesManager>(); // If you don't provide an entity ID, it opens the test class. // Spooky huh. if (args.Length == 0) { vvm.OpenVV(new VVTest()); return(false); } var valArg = args[0]; if (valArg.StartsWith("SI")) { // Server-side IoC selector. var selector = new ViewVariablesIoCSelector(valArg.Substring(1)); vvm.OpenVV(selector); return(false); } if (valArg.StartsWith("I")) { // Client-side IoC selector. var reflection = IoCManager.Resolve <IReflectionManager>(); if (!reflection.TryLooseGetType(valArg, out var type)) { console.AddLine("Unable to find that type."); return(false); } object obj; try { obj = IoCManager.ResolveType(type); } catch (UnregisteredTypeException) { console.AddLine("Unable to find that type."); return(false); } vvm.OpenVV(obj); return(false); } if (valArg.StartsWith("guihover")) { // UI element. var obj = IoCManager.Resolve <IUserInterfaceManager>().CurrentlyHovered; if (obj == null) { console.AddLine("Not currently hovering any control."); return(false); } vvm.OpenVV(obj); return(false); } // Entity. if (!EntityUid.TryParse(args[0], out var uid)) { console.AddLine("Invalid specifier format."); return(false); } var entityManager = IoCManager.Resolve <IEntityManager>(); if (!entityManager.TryGetEntity(uid, out var entity)) { console.AddLine("That entity does not exist."); return(false); } vvm.OpenVV(entity); return(false); }
public void Execute(IConsoleShell shell, string argsOther, string[] args) { var player = shell.Player as IPlayerSession; var entityManager = IoCManager.Resolve <IEntityManager>(); EntityUid?gridId; var xformQuery = entityManager.GetEntityQuery <TransformComponent>(); switch (args.Length) { case 0: if (player?.AttachedEntity is not { Valid : true } playerEntity) { shell.WriteError("Only a player can run this command."); return; } gridId = xformQuery.GetComponent(playerEntity).GridUid; break; case 1: if (!EntityUid.TryParse(args[0], out var id)) { shell.WriteError($"{args[0]} is not a valid entity."); return; } gridId = id; break; default: shell.WriteLine(Help); return; } var mapManager = IoCManager.Resolve <IMapManager>(); if (!mapManager.TryGetGrid(gridId, out var grid)) { shell.WriteError($"No grid exists with id {gridId}"); return; } if (!entityManager.EntityExists(grid.GridEntityId)) { shell.WriteError($"Grid {gridId} doesn't have an associated grid entity."); return; } var changed = 0; var tagSystem = EntitySystem.Get <TagSystem>(); foreach (var child in xformQuery.GetComponent(grid.GridEntityId).ChildEntities) { if (!entityManager.EntityExists(child)) { continue; } var valid = false; // Occluders should only count if the state of it right now is enabled. // This prevents issues with edge firelocks. if (entityManager.TryGetComponent <OccluderComponent>(child, out var occluder)) { valid |= occluder.Enabled; } // low walls & grilles valid |= entityManager.HasComponent <SharedCanBuildWindowOnTopComponent>(child); // cables valid |= entityManager.HasComponent <CableComponent>(child); // anything else that might need this forced valid |= tagSystem.HasTag(child, "ForceFixRotations"); // override valid &= !tagSystem.HasTag(child, "ForceNoFixRotations"); if (!valid) { continue; } var childXform = xformQuery.GetComponent(child); if (childXform.LocalRotation != Angle.Zero) { childXform.LocalRotation = Angle.Zero; changed++; } } shell.WriteLine($"Changed {changed} entities. If things seem wrong, reconnect."); }
public void Execute(IConsoleShell shell, string argStr, string[] args) { if (args.Length < 4) { shell.WriteError("Expected at least 5 arguments."); return; } if (!EntityUid.TryParse(args[0], out var gridId)) { shell.WriteError($"Failed parsing gridId '{args[3]}'."); return; } if (!uint.TryParse(args[1], out var uid)) { shell.WriteError($"Failed parsing uid '{args[1]}'."); return; } if (!IoCManager.Resolve <IMapManager>().GridExists(gridId)) { shell.WriteError($"No grid with gridId {gridId} exists."); return; } var decalSystem = EntitySystem.Get <DecalSystem>(); switch (args[2].ToLower()) { case "position": if (args.Length != 5) { shell.WriteError("Expected 6 arguments."); return; } if (!float.TryParse(args[3], out var x) || !float.TryParse(args[4], out var y)) { shell.WriteError("Failed parsing position."); return; } if (!decalSystem.SetDecalPosition(gridId, uid, gridId, new Vector2(x, y))) { shell.WriteError("Failed changing decalposition."); } break; case "color": if (args.Length != 4) { shell.WriteError("Expected 5 arguments."); return; } if (!Color.TryFromName(args[3], out var color)) { shell.WriteError("Failed parsing color."); return; } if (!decalSystem.SetDecalColor(gridId, uid, color)) { shell.WriteError("Failed changing decal color."); } break; case "id": if (args.Length != 4) { shell.WriteError("Expected 5 arguments."); return; } if (!decalSystem.SetDecalId(gridId, uid, args[3])) { shell.WriteError("Failed changing decal id."); } break; case "rotation": if (args.Length != 4) { shell.WriteError("Expected 5 arguments."); return; } if (!double.TryParse(args[3], out var degrees)) { shell.WriteError("Failed parsing degrees."); return; } if (!decalSystem.SetDecalRotation(gridId, uid, Angle.FromDegrees(degrees))) { shell.WriteError("Failed changing decal rotation."); } break; case "zindex": if (args.Length != 4) { shell.WriteError("Expected 5 arguments."); return; } if (!int.TryParse(args[3], out var zIndex)) { shell.WriteError("Failed parsing zIndex."); return; } if (!decalSystem.SetDecalZIndex(gridId, uid, zIndex)) { shell.WriteError("Failed changing decal zIndex."); } break; case "clean": if (args.Length != 4) { shell.WriteError("Expected 5 arguments."); return; } if (!bool.TryParse(args[3], out var cleanable)) { shell.WriteError("Failed parsing cleanable."); return; } if (!decalSystem.SetDecalCleanable(gridId, uid, cleanable)) { shell.WriteError("Failed changing decal cleanable flag."); } break; default: shell.WriteError("Invalid mode."); return; } }
public void Execute(IConsoleShell shell, string argStr, string[] args) { var player = shell.Player as IPlayerSession; var entityManager = IoCManager.Resolve <IEntityManager>(); EntityUid?gridId; switch (args.Length) { case 0: if (player?.AttachedEntity is not { Valid : true } playerEntity) { shell.WriteLine("Only a player can run this command."); return; } gridId = entityManager.GetComponent <TransformComponent>(playerEntity).GridUid; break; case 1: if (!EntityUid.TryParse(args[0], out var id)) { shell.WriteLine($"{args[0]} is not a valid entity."); return; } gridId = id; break; default: shell.WriteLine(Help); return; } var mapManager = IoCManager.Resolve <IMapManager>(); if (!mapManager.TryGetGrid(gridId, out var grid)) { shell.WriteLine($"No grid exists with id {gridId}"); return; } if (!entityManager.EntityExists(grid.GridEntityId)) { shell.WriteLine($"Grid {gridId} doesn't have an associated grid entity."); return; } var tileDefinitionManager = IoCManager.Resolve <ITileDefinitionManager>(); var tagSystem = EntitySystem.Get <TagSystem>(); var underplating = tileDefinitionManager[TilePrototypeID]; var underplatingTile = new Tile(underplating.TileId); var changed = 0; foreach (var child in entityManager.GetComponent <TransformComponent>(grid.GridEntityId).ChildEntities) { if (!entityManager.EntityExists(child)) { continue; } if (!tagSystem.HasTag(child, WallTag)) { continue; } var childTransform = entityManager.GetComponent <TransformComponent>(child); if (!childTransform.Anchored) { continue; } var tile = grid.GetTileRef(childTransform.Coordinates); var tileDef = (ContentTileDefinition)tileDefinitionManager[tile.Tile.TypeId]; if (tileDef.ID == TilePrototypeID) { continue; } grid.SetTile(childTransform.Coordinates, underplatingTile); changed++; } shell.WriteLine($"Changed {changed} tiles."); }
public void Execute(IConsoleShell shell, string argStr, string[] args) { var player = shell.Player as IPlayerSession; var entityManager = IoCManager.Resolve <IEntityManager>(); EntityUid?gridId; string tileIdA = ""; string tileIdB = ""; switch (args.Length) { case 2: if (player?.AttachedEntity is not { Valid : true } playerEntity) { shell.WriteLine("Only a player can run this command without a grid ID."); return; } gridId = entityManager.GetComponent <TransformComponent>(playerEntity).GridUid; tileIdA = args[0]; tileIdB = args[1]; break; case 3: if (!EntityUid.TryParse(args[0], out var id)) { shell.WriteLine($"{args[0]} is not a valid entity."); return; } gridId = id; tileIdA = args[1]; tileIdB = args[2]; break; default: shell.WriteLine(Help); return; } var tileDefinitionManager = IoCManager.Resolve <ITileDefinitionManager>(); var tileA = tileDefinitionManager[tileIdA]; var tileB = tileDefinitionManager[tileIdB]; var mapManager = IoCManager.Resolve <IMapManager>(); if (!mapManager.TryGetGrid(gridId, out var grid)) { shell.WriteLine($"No grid exists with id {gridId}"); return; } if (!entityManager.EntityExists(grid.GridEntityId)) { shell.WriteLine($"Grid {gridId} doesn't have an associated grid entity."); return; } var changed = 0; foreach (var tile in grid.GetAllTiles()) { var tileContent = tile.Tile; if (tileContent.TypeId == tileA.TileId) { grid.SetTile(tile.GridIndices, new Tile(tileB.TileId)); changed++; } } shell.WriteLine($"Changed {changed} tiles."); }
private void FixGridAtmosCommand(IConsoleShell shell, string argstr, string[] args) { if (args.Length == 0) { shell.WriteError("Not enough arguments."); return; } var mixtures = new GasMixture[6]; for (var i = 0; i < mixtures.Length; i++) { mixtures[i] = new GasMixture(Atmospherics.CellVolume) { Temperature = Atmospherics.T20C } } ; // 0: Air mixtures[0].AdjustMoles(Gas.Oxygen, Atmospherics.OxygenMolesStandard); mixtures[0].AdjustMoles(Gas.Nitrogen, Atmospherics.NitrogenMolesStandard); // 1: Vaccum // 2: Oxygen (GM) mixtures[2].AdjustMoles(Gas.Oxygen, Atmospherics.MolesCellGasMiner); // 3: Nitrogen (GM) mixtures[3].AdjustMoles(Gas.Nitrogen, Atmospherics.MolesCellGasMiner); // 4: Plasma (GM) mixtures[4].AdjustMoles(Gas.Plasma, Atmospherics.MolesCellGasMiner); // 5: Instant Plasmafire (r) mixtures[5].AdjustMoles(Gas.Oxygen, Atmospherics.MolesCellGasMiner); mixtures[5].AdjustMoles(Gas.Plasma, Atmospherics.MolesCellGasMiner); mixtures[5].Temperature = 5000f; foreach (var gid in args) { if (!EntityUid.TryParse(gid, out var euid)) { shell.WriteError($"Failed to parse euid '{gid}'."); return; } if (!TryComp(euid, out IMapGridComponent? gridComp)) { shell.WriteError($"Euid '{euid}' does not exist or is not a grid."); return; } if (!TryComp(euid, out GridAtmosphereComponent? gridAtmosphere)) { shell.WriteError($"Grid \"{euid}\" has no atmosphere component, try addatmos."); continue; } foreach (var(indices, tileMain) in gridAtmosphere.Tiles) { var tile = tileMain.Air; if (tile == null) { continue; } tile.Clear(); var mixtureId = 0; foreach (var entUid in gridComp.Grid.GetAnchoredEntities(indices)) { if (!TryComp(entUid, out AtmosFixMarkerComponent? afm)) { continue; } mixtureId = afm.Mode; break; } var mixture = mixtures[mixtureId]; Merge(tile, mixture); tile.Temperature = mixture.Temperature; InvalidateTile(gridAtmosphere, indices); } } } }
private void FixGridAtmosCommand(IConsoleShell shell, string argstr, string[] args) { if (args.Length == 0) { shell.WriteError("Not enough arguments."); return; } var mixtures = new GasMixture[7]; for (var i = 0; i < mixtures.Length; i++) { mixtures[i] = new GasMixture(Atmospherics.CellVolume) { Temperature = Atmospherics.T20C } } ; // 0: Air mixtures[0].AdjustMoles(Gas.Oxygen, Atmospherics.OxygenMolesStandard); mixtures[0].AdjustMoles(Gas.Nitrogen, Atmospherics.NitrogenMolesStandard); // 1: Vaccum // 2: Oxygen (GM) mixtures[2].AdjustMoles(Gas.Oxygen, Atmospherics.MolesCellGasMiner); // 3: Nitrogen (GM) mixtures[3].AdjustMoles(Gas.Nitrogen, Atmospherics.MolesCellGasMiner); // 4: Plasma (GM) mixtures[4].AdjustMoles(Gas.Plasma, Atmospherics.MolesCellGasMiner); // 5: Instant Plasmafire (r) mixtures[5].AdjustMoles(Gas.Oxygen, Atmospherics.MolesCellGasMiner); mixtures[5].AdjustMoles(Gas.Plasma, Atmospherics.MolesCellGasMiner); mixtures[5].Temperature = 5000f; // 6: (Walk-In) Freezer mixtures[6].AdjustMoles(Gas.Oxygen, Atmospherics.OxygenMolesStandard); mixtures[6].AdjustMoles(Gas.Nitrogen, Atmospherics.NitrogenMolesStandard); mixtures[6].Temperature = 235f; // Little colder than an actual freezer but gives a grace period to get e.g. themomachines set up, should keep warm for a few door openings foreach (var arg in args) { if (!EntityUid.TryParse(arg, out var euid)) { shell.WriteError($"Failed to parse euid '{arg}'."); return; } if (!TryComp(euid, out IMapGridComponent? gridComp)) { shell.WriteError($"Euid '{euid}' does not exist or is not a grid."); return; } if (!TryComp(euid, out GridAtmosphereComponent? gridAtmosphere)) { shell.WriteError($"Grid \"{euid}\" has no atmosphere component, try addatmos."); continue; } var transform = Transform(euid); foreach (var(indices, tileMain) in gridAtmosphere.Tiles) { var tile = tileMain.Air; if (tile == null) { continue; } if (tile.Immutable && !IsTileSpace(euid, transform.MapUid, indices, gridComp)) { tile = new GasMixture(tile.Volume) { Temperature = tile.Temperature }; tileMain.Air = tile; } tile.Clear(); var mixtureId = 0; foreach (var entUid in gridComp.Grid.GetAnchoredEntities(indices)) { if (!TryComp(entUid, out AtmosFixMarkerComponent? afm)) { continue; } mixtureId = afm.Mode; break; } var mixture = mixtures[mixtureId]; Merge(tile, mixture); tile.Temperature = mixture.Temperature; gridAtmosphere.InvalidatedCoords.Add(indices); } } }
public void Execute(IConsoleShell shell, string argStr, string[] args) { var vvm = IoCManager.Resolve <IViewVariablesManager>(); // If you don't provide an entity ID, it opens the test class. // Spooky huh. if (args.Length == 0) { vvm.OpenVV(new VVTest()); return; } var valArg = args[0]; if (valArg.StartsWith("SI")) { if (valArg.StartsWith("SIoC")) { valArg = valArg.Substring(4); } // Server-side IoC selector. var selector = new ViewVariablesIoCSelector(valArg.Substring(1)); vvm.OpenVV(selector); return; } if (valArg.StartsWith("I")) { if (valArg.StartsWith("IoC")) { valArg = valArg.Substring(3); } // Client-side IoC selector. var reflection = IoCManager.Resolve <IReflectionManager>(); if (!reflection.TryLooseGetType(valArg, out var type)) { shell.WriteLine("Unable to find that type."); return; } object obj; try { obj = IoCManager.ResolveType(type); } catch (UnregisteredTypeException) { shell.WriteLine("Unable to find that type."); return; } vvm.OpenVV(obj); return; } // Client side entity system. if (valArg.StartsWith("CE")) { valArg = valArg.Substring(2); var reflection = IoCManager.Resolve <IReflectionManager>(); if (!reflection.TryLooseGetType(valArg, out var type)) { shell.WriteLine("Unable to find that type."); return; } vvm.OpenVV(IoCManager.Resolve <IEntitySystemManager>().GetEntitySystem(type)); } if (valArg.StartsWith("SE")) { // Server-side Entity system selector. var selector = new ViewVariablesEntitySystemSelector(valArg.Substring(2)); vvm.OpenVV(selector); return; } if (valArg.StartsWith("guihover")) { // UI element. var obj = IoCManager.Resolve <IUserInterfaceManager>().CurrentlyHovered; if (obj == null) { shell.WriteLine("Not currently hovering any control."); return; } vvm.OpenVV(obj); return; } // Entity. if (!EntityUid.TryParse(args[0], out var entity)) { shell.WriteLine("Invalid specifier format."); return; } var entityManager = IoCManager.Resolve <IEntityManager>(); if (!entityManager.EntityExists(entity)) { shell.WriteLine("That entity does not exist locally. Attempting to open remote view..."); vvm.OpenVV(new ViewVariablesEntitySelector(entity)); return; } vvm.OpenVV(entity); }
public void Execute(IConsoleShell shell, string argStr, string[] args) { if (args.Length < 4 || args.Length > 7) { shell.WriteError($"Received invalid amount of arguments arguments. Expected 4 to 7, got {args.Length}.\nUsage: {Help}"); return; } if (!IoCManager.Resolve <IPrototypeManager>().HasIndex <DecalPrototype>(args[0])) { shell.WriteError($"Cannot find decalprototype '{args[0]}'."); } if (!float.TryParse(args[1], out var x)) { shell.WriteError($"Failed parsing x-coordinate '{args[1]}'."); return; } if (!float.TryParse(args[2], out var y)) { shell.WriteError($"Failed parsing y-coordinate'{args[2]}'."); return; } var mapManager = IoCManager.Resolve <IMapManager>(); if (!EntityUid.TryParse(args[3], out var gridIdRaw) || !mapManager.TryGetGrid(gridIdRaw, out var grid)) { shell.WriteError($"Failed parsing gridId '{args[3]}'."); return; } var coordinates = new EntityCoordinates(grid.GridEntityId, new Vector2(x, y)); if (grid.GetTileRef(coordinates).IsSpace()) { shell.WriteError($"Cannot create decal on space tile at {coordinates}."); return; } Color?color = null; var zIndex = 0; Angle?rotation = null; if (args.Length > 4) { for (int i = 4; i < args.Length; i++) { var rawValue = args[i].Split('='); if (rawValue.Length != 2) { shell.WriteError($"Failed parsing parameter: '{args[i]}'"); return; } switch (rawValue[0]) { case "angle": if (!double.TryParse(rawValue[1], out var degrees)) { shell.WriteError($"Failed parsing angle '{rawValue[1]}'."); return; } rotation = Angle.FromDegrees(degrees); break; case "zIndex": if (!int.TryParse(rawValue[1], out zIndex)) { shell.WriteError($"Failed parsing zIndex '{rawValue[1]}'."); return; } break; case "color": if (!Color.TryFromName(rawValue[1], out var colorRaw)) { shell.WriteError($"Failed parsing color '{rawValue[1]}'."); return; } color = colorRaw; break; default: shell.WriteError($"Unknown parameter key '{rawValue[0]}'."); return; } } } if (EntitySystem.Get <DecalSystem>().TryAddDecal(args[0], coordinates, out var uid, color, rotation, zIndex)) { shell.WriteLine($"Successfully created decal {uid}."); }
public void Execute(IConsoleShell shell, string argStr, string[] args) { if (args.Length != 2) { shell.WriteError($"Insufficient number of args supplied: expected 2 and received {args.Length}"); return; } if (!EntityUid.TryParse(args[0], out var uid)) { shell.WriteError($"Unable to find entity {args[0]}"); return; } if (!float.TryParse(args[1], out var scale)) { shell.WriteError($"Invalid scale supplied of {args[0]}"); return; } if (scale < 0f) { shell.WriteError($"Invalid scale supplied that is negative!"); return; } // Event for content to use // We'll just set engine stuff here var @event = new ScaleEntityEvent(); var entManager = IoCManager.Resolve <IEntityManager>(); entManager.EventBus.RaiseLocalEvent(uid, ref @event); if (entManager.TryGetComponent(uid, out SpriteComponent? spriteComponent)) { spriteComponent.Scale *= scale; } if (entManager.TryGetComponent(uid, out FixturesComponent? manager)) { foreach (var(_, fixture) in manager.Fixtures) { // TODO: May be worthwhile to swap to density like box2d? Either way mass is unchanged for now. switch (fixture.Shape) { case EdgeShape edge: edge.Vertex0 *= scale; edge.Vertex1 *= scale; edge.Vertex2 *= scale; edge.Vertex3 *= scale; break; case PhysShapeCircle circle: circle.Position *= scale; circle.Radius *= scale; break; case PolygonShape poly: var verts = poly.Vertices; for (var i = 0; i < verts.Length; i++) { verts[i] *= scale; } poly.SetVertices(verts); break; default: throw new NotImplementedException(); } } EntitySystem.Get <FixtureSystem>().FixtureUpdate(manager); } }