So, I've spent a lot of time scripting and brainstorming for the LvD server, and I now have a quest engine up and running. Players can run a command, see their available quests for the day, and then start an instanced quest. I also have spontaneous events planned, random encounters with various AI factions, script guided admin events, ect. But there are a few things I really wish I could do, and it's limiting my ability to make these quests and events as enjoyable as they could be. So, in the interest of producing cool content for StarMade, here is my humble scripter's wishlist.
Briefly:
Right now, there is no admin command or way to script finding a home base or the systems claimed by a faction. There's also no way for admins to see a player's inventory. Being able to see a person's inventory is pretty important to a lot of modding ideas. There are also a ton of commands that can only be run in game, by selecting an entity or by running the command as a player, which makes them unusable through scripting or console commands. But if they could be used though a script, it would open a lot of doors to modding. Sandbox games like StarMade really do benefit a lot when the modding community has the ability to create content for the game. This kind of modding also doesn't inhibit the development of the game. I love all the other things the devs are doing with the game, but when a few extra commands would make a big difference, why not?
The long explanation, with specific implementation ideas and reasoning:
Well, I know that was a long read if you read through my proposed uses of commands for idea #4. So thank you for your time.
Briefly:
Right now, there is no admin command or way to script finding a home base or the systems claimed by a faction. There's also no way for admins to see a player's inventory. Being able to see a person's inventory is pretty important to a lot of modding ideas. There are also a ton of commands that can only be run in game, by selecting an entity or by running the command as a player, which makes them unusable through scripting or console commands. But if they could be used though a script, it would open a lot of doors to modding. Sandbox games like StarMade really do benefit a lot when the modding community has the ability to create content for the game. This kind of modding also doesn't inhibit the development of the game. I love all the other things the devs are doing with the game, but when a few extra commands would make a big difference, why not?
The long explanation, with specific implementation ideas and reasoning:
- Inventory control (I went over this in a different thread, but with a different idea in mind, so I'll post this here since it fits into the other ideas here, which are very different):
A. Give a new command, /player_inventory [PlayerName], that would list all the blocks in a player's inventory. Might look similar to the output of the /sector_info command, but would have blocks and their ID's instead of entities.
B. "/store_player_inventory [PlayerName] [Inventory Name - optional]", "/restore_player_inventory [PlayerName] [Inventory Name - optional]", "/merge_player_inventory [PlayerName] [Inventory Name - optional]". This would allow a player's current inventory to be saved to a virtual inventory. If no name is specified, then it would only use one. If a name is specified, then multiple inventories could be saved for a player. This would be useful for things like allowing players to have alternate realities. The "merge" command would simply add the items from one inventory to the current. One use of this would be for a script that allows players to pop into a "creative mode sector" and build some stuff, and then pop out of the sector to return to survival gameplay. - /faction_info [faction ID] - I don't know why this isn't in there already. This would give a faction's home base coordinates (if it has one), and whatever systems are claimed by the faction, alongside the coordinates the systems are claimed from, perhaps even giving the UID's of the bases. I really want to be able to get a faction's home base coordinates for a lot of mods, which would include admin commands, server maintenance, spontaneous events, like attacks or distress calls, or other creative projects I am currently working on (which I don't want to divulge publicly at this time - but it is crucial to be able to obtain this information!).
- Allow "/sector_info" to display whether a sector is in a claimed system or not and who has claim to that sector.
- I wish I wish.. For a few extended uses of StarNet.jar can run.
A. Allow StarNet to run in a mode similar to the console, but it can use a configuration file to only show certain events. Such as player joins, deaths, ect. This would allow for faster wrappers that don't have to parse through an enormous amount of info. or console screens for admins, which only shows certain events, like errors. Is it possible to parse the existing console? Sure, but when it's running at 50,000 lines a second (which I have seen on our server many times), this can be problematic for scripts that are running grep or other parsing on possibly hundreds of combinations of things.
B. If I could have a run mode where it would keep the connection open, perhaps with a "-keepalive" argument specified, that would be good. It could run just like a console, but would only show the results of each command given. All typing would be hidden though, since it is likely that the output would be parsed by a wrapper. This would allow me to send isolated command streams much faster, rather than it having to run StarNet.jar for each command or using the console screen, which might have collisions if multiple groups of text are sent at a time. When comparing the speed between sending commands directly to the console window and starting individual StarNet.jar instances, the difference in speed was enormous when doing a LOT with scripting (such as removing hundreds of entities individually). This feature would also be 100% necessary for the next suggestion item on the list and is the main why I would like it. - This is a big one - Give the ability for a console or starnet.jar connection to simulate being a player, at a certain location, and/or selecting a specific entity. I will explain in just a second why this will be tremendously useful. But there could be 3 sets of commands:
Sets the selection, as though selected from the Nav screen:
"/select_uid true/false [Full_Entity_UID]"
"/select_ship true/false [Ship Name]"
"/select_player true/false [PlayerName]"
Sets what player entity's perspective the command is run from (including location), but with the privileges of the console:
"/run_command_as [PlayerName] true/false" command.
Sets the location the script should occur in. If a player is already being simulated, it keeps simulating the player, but instead using this location:
"/run_command_at_location true/false [SectorX] [SectorY] [SectorZ] [PosX] [PosY] [PosZ]"
Now, this might seem kind of strange at first, and you are probably really wondering why the "true/false" options.. but I will explain. This would open up all kinds of new functionality and would also simplify scripting AND would be backwards compatible to how things are done now. To demonstrate what it would open up, here are some current commands that we cannot use at all for scripting, because it requires an entity to be selected in-game, to be run from a player account, or run from a specific location. I've broken it down into sub-groups for different purposes. "Build accounts" are accounts that are locked into a far away sector, given creative mode, and will have certain bot commands that will assist them with building.
Simple Spontaneous events:
/spawn_mobs
/spawn_mobs_line
Quests and events:
/save <-- This might be useful for creating a temporary copy of a ship the player is currently in, and then spawning it somewhere. Perhaps a "dueling" even, where you duel your current ship.
/jump <-- Would be an interesting way to have players leave or enter a quest, with effects. Or other creative uses.
/start_ship_AI <-- this I really want to use for quests to make an individual ship become hostile to a quest participant if they choose wrong dialogue options.
/stop_ship_AI <-- same as above
/spawn_item <-- This would be useful to drop items as quest rewards in a more inventive way than it mysteriously, and silently, appearing in their inventory.
/clear_system_ship_spawns <-- this would be useful for quests, spontaneous quests, and admin commands. Run the command from the perspectie of a player.. And all spawned ships near them disappear. Nice and easy. No need for the script to keep track of a bunch of UID's and remove them all with separate commands.. using for loops, while loops, or whatever loops.. building arrays.. This would be so simple and easy to script.
/decay <-- This could be an effect that occurs within an event or quest.
/explode_planet_sector <-- cool effect to happen during a quest or event, right?
/explode_planet_sector_not_core <-- same as above
/faction_set_entity <-- This would allow my events and quest entities to be changed to a player's faction easily. Perhaps it would be for a race event. Or maybe a base becomes the player's, and so the turrets start working for them in some "king of the hill" type of battle event. There are a few possibilities for this.
/initiate_wave <-- This would allow me to easily script in some spontaneous pirate attacks on players.
For the following, I'd like to use them during quests to simulate a failing ship and add some realistic storyline:
/power_outage
/power_regen
/shield_damage
/shield_outage
/shield_regen
This is 100% necessary for events and quests where the player needs to be able to respawn during the quest/event and continue:
/set_spawn <-- This I really want to use for scripted quests and admin events so that players do not return to their spawn point, but rather one I designate. To do this, I'd use the "/run_command_as player" command, then "/run_command_at_location true X Y Z" command, then run the "/set_spawn". This would set the player's spawn point to the coordinates I specify.
Custom shop scripts:
/shop_restock
/shop_restock_full
/create_trade_party <-- I could use a "/select_uid true ENTITY_SPACESTATION_whatever" and then have a trading party actually go to a shop to restock it, via scripts. On our server, we have players purchase shops from the trade guild for credits. This would allow some pretty cool restocking features that uses actual ships and would help with the immersion.
Build Accounts:
/destroy_entity <-- For "build accounts" on our server, which are creative-mode players that are locked in far away sectors, it would allow me to give them specific access to delete ships that they can select. If the console has nothing selected, but has a "/run_command_as" command activated for a player.. then it would use the entity the player has selected when a command is run from the starnet console.
/clear_overheating <-- though the bug where it crashes when multiple nearby entities are overheating would need to be fixed before I'd want to use this. But it would be useful in certain quest scenarios.
/teleport_selected_to <-- Might be useful to allow build accounts to teleport entities close to them since they don't have the admin ability to F1 + F8 into the item (old TAB + F8)
/despawn_sector <-- This would me to more easily script a way for build accounts to remove entities from their current sector.
/destroy_entity <-- this would allow our build accounts to easily destroy an entity they have selected, without needing admin powers.
/destroy_entity_dock <-- same as above
/structure_set_minable <-- This would be useful for build accounts to turn this feature on and off for a structure to simulate block decay or to "paint" patterns into an entity using salvage beams.
/structure_set_vulnerable <-- This would be useful for build accounts so that they could set their base or a ship as invulnerable, and then use other scripts to test combat vs pirates.
/last_changed <-- I'd use this to allow founders of factions to have the ability to see who last edited their base (maybe) but also would be useful for players that have a shared build sector.
Admin commands:
/set_spawn_player <-- This would be useful for an admin to run a command and our friendly bot, Melvin would reassign the spawn point for a specific player to be where the admin is now.
/teleport_self_home <-- This would make it possible to teleport someone to their spawn area without killing them.
NPC Manipulation:
These would be useful for having a player select different NPC's and the NPC's will become animated as they select different ones (though being able to get the UID of an NPC would be nice too):
/spawn_creature
/creature_animation_start
/creature_animation_stop
/creature_enter_gravity
/creature_goto
/creature_idle
/creature_rename
/creature_roam
/creature_script
/creature_sit
/creature_stand_up
Other:
/ship_info_selected <-- this would allow me to create a variety of admin commands, build account, or other uses on an entity that a player/admin selects. It would essentially give my scripts the ability to see what a player is selecting and then react on it. - There were a few other requests listed in another thread, here. These include "/giveid" command returning success or not when using negative numbers, /force_exit and /force_enter commands (which force a player into or out of an entity's core). I thought I'd create a new thread because this post goes above and beyond the other and has unique ideas in it regarding scripting for StarMade.
Well, I know that was a long read if you read through my proposed uses of commands for idea #4. So thank you for your time.
Last edited: