Difference between revisions of "Private Server Common Tasks"
(→Server CLI: -> Added setTickDuration & getTickDuration) |
(Fix and improve docs on portals) |
||
(15 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
[[Category:Private Server|Common Tasks]] |
[[Category:Private Server|Common Tasks]] |
||
− | = Server CLI = |
||
+ | This page provides a list of common tasks that can be performed on a Screeps [[Private Server|Private Server]] using the CLI server. |
||
− | == Changing & Checking Tick-Rate == |
||
+ | |||
− | In server CLI |
||
+ | The CLI server is accessed through the terminal or command prompt and can be used to control the server and modify server settings. |
||
+ | |||
+ | == CLI Server Commands == |
||
+ | |||
+ | === Commands List === |
||
+ | |||
+ | Get a list of available commands. |
||
+ | <code>help()</code> |
||
+ | |||
+ | Additional commands may be available depending on the server configuration and installed mods. |
||
+ | |||
+ | == Server Config == |
||
+ | |||
+ | === System Commands === |
||
+ | |||
+ | Get the commands for managing the server. |
||
+ | <code>help(system)</code> |
||
+ | |||
+ | === Pause Server Ticks === |
||
+ | |||
+ | Pause the server to prevent ticks from running. |
||
+ | <code>system.pauseSimulation()</code> |
||
+ | |||
+ | === Resume Server Ticks === |
||
+ | |||
+ | Resume the server to allow ticks to run. |
||
+ | <code>system.resumeSimulation()</code> |
||
+ | |||
+ | === Tick Rate === |
||
+ | |||
+ | Get the current tick duration. |
||
+ | <code>system.getTickDuration()</code> |
||
+ | |||
+ | === Change Tick Rate === |
||
+ | |||
+ | Set the server tick duration to 1000 milliseconds per tick, default is 1000. |
||
<code>system.setTickDuration(1000)</code> |
<code>system.setTickDuration(1000)</code> |
||
− | <code>// Would set tick rate 1 t/s</code> |
||
− | // Default is 1000 |
||
+ | == Users == |
||
− | <code>system.getTickDuration()</code> |
||
+ | |||
− | <code>//prints current tick duration value</code> |
||
+ | === Global Control Level === |
||
+ | |||
+ | Change the GCL of a user. |
||
+ | <code>storage.db.users.update({ username: 'username' },{ $set: { gcl: 38000000 } })</code> |
||
+ | |||
+ | === Global Power Level === |
||
+ | |||
+ | Change the GPL of a user. |
||
+ | <code>storage.db.users.update({ username: 'username' },{ $set: { power: 540000 } })</code> |
||
+ | |||
+ | === Market Credits === |
||
+ | |||
+ | Change the credits of a user. |
||
+ | <code>storage.db.users.update({ username: 'username' },{ $set: { money: 2000000 } })</code> |
||
+ | |||
+ | === CPU Limit === |
||
+ | |||
+ | Change the CPU limit of a user. |
||
+ | <code>storage.db.users.update({ username: 'username' },{ $set: { cpu: 500 } })</code> |
||
+ | |||
+ | == Rooms == |
||
+ | |||
+ | === Controller Level === |
||
+ | |||
+ | Change the room's controller level (RCL). |
||
+ | <code>storage.db['rooms.objects'].update({ _id: 'idOfController' },{ $set: { level: 8 } })</code> |
||
+ | |||
+ | === Controller Progress === |
||
+ | |||
+ | Change the progress amount of a controller. |
||
+ | <code>storage.db['rooms.objects'].update({ room: 'W7N3', type: 'controller' },{ $set: { progress: 10899000 } })</code> |
||
+ | |||
+ | === Remove Objects === |
||
+ | |||
+ | Remove all [https://docs.screeps.com/api/#Ruin Ruins] from a room. This can be used to remove other game object types as well. |
||
+ | <code>storage.db['rooms.objects'].removeWhere({ type: 'ruin' })</code> |
||
+ | |||
+ | == Resources == |
||
+ | |||
+ | === Mineral Amount === |
||
+ | |||
+ | Change the available amount of a mineral. |
||
+ | <code>storage.db['rooms.objects'].update({ type: 'mineral', room: 'W7N3' },{ $set: { mineralAmount: 250000 } })</code> |
||
+ | |||
+ | === Mineral Regeneration Time === |
||
+ | |||
+ | Reset the mineral regeneration time. |
||
+ | <code>storage.db['rooms.objects'].update({ type: 'mineral' },{ $set: { nextRegenerationTime: 1000000 } })</code> |
||
+ | |||
+ | === Add Energy to Storage === |
||
+ | |||
+ | Add energy to a storage structure. |
||
+ | <code>storage.db['rooms.objects'].update({ type: 'storage', room: 'W7N3' },{ $set: { store: { energy: 100000 } } })</code> |
||
+ | |||
+ | === Add Minerals to Storage === |
||
+ | |||
+ | Add minerals to a storage structure. |
||
+ | <code>storage.db['rooms.objects'].update({ type: 'storage', room: 'W7N3' },{ $set: { store: { H: 25000, O: 25000, U: 25000, L: 25000, K: 25000, Z: 25000, X: 25000 } } })</code> |
||
+ | |||
+ | == Construction Sites == |
||
+ | |||
+ | === Max Construction Progress === |
||
+ | |||
+ | Set max progress on all construction sites. As soon as a creep does any construction the structure will be built. |
||
+ | <code>storage.db['rooms.objects'].update({ type: 'constructionSite' },{ $set: { progress: 99999 } })</code> |
||
+ | |||
+ | == Repair == |
||
+ | |||
+ | === Repair Ramparts === |
||
+ | |||
+ | Repair all rampart structures. The type can be modified to repair other structure types as well. |
||
+ | <code>storage.db['rooms.objects'].update({ type: 'rampart' },{ $set: { hits: 1000000 } })</code> |
||
+ | |||
+ | === Repair Structure === |
||
+ | |||
+ | Repair a structure by id. |
||
+ | <code>storage.db['rooms.objects'].update({ _id: 'idOfStructure' },{ $set: { hits: 1000000 } })</code> |
||
+ | |||
+ | == Map == |
||
+ | |||
+ | === Map Commands === |
||
+ | |||
+ | Get the commands for managing the world map. |
||
+ | <code>help(map)</code> |
||
+ | |||
+ | === Insert New Room === |
||
+ | |||
+ | Generate a new room and add it to the world. |
||
+ | <code>map.generateRoom('W11N11', { sources: 2 })</code> |
||
+ | |||
+ | === Open Room === |
||
+ | |||
+ | Make a room available for use. |
||
+ | <code>map.openRoom('W5N1')</code> |
||
+ | |||
+ | Open a room in 5 minutes. |
||
+ | <code>map.openRoom('W5N1', Date.now() + 300 * 1000)</code> |
||
+ | |||
+ | === Close Room === |
||
+ | |||
+ | Make a room not available. |
||
+ | <code>map.closeRoom('W5N1')</code> |
||
+ | |||
+ | === Update terrain data === |
||
+ | |||
+ | Update the cached world terrain data. Use this whenever there's a chance the terrain data has been modified so that the server reloads it from the database. |
||
+ | <code>map.updateTerrainData()</code> |
||
+ | |||
+ | === Refresh image assets === |
||
+ | |||
+ | Refresh every room's image assets. Use this whenever the map images do not match the terrain. |
||
+ | |||
+ | <code>storage.db.rooms.find().then(rooms => Promise.all(rooms.map(({ _id }) => map.updateRoomImageAssets(_id))));</code> |
||
+ | |||
+ | === Add NPC Terminals === |
||
+ | |||
+ | Add a [https://docs.screeps.com/market.html#NPC-Terminals NPC Terminal] to a room. Repeat as many times as desired changing rooms (Use highway rooms or SK rooms). NPC orders should appear on the market automatically after a little while. |
||
+ | <code>storage.db['rooms.objects'].insert({ room: 'W0N0', x: 0, y: 0, type: 'terminal' })</code> |
||
+ | |||
+ | === Add Power Banks === |
||
+ | |||
+ | Add a [https://docs.screeps.com/power.html#Power-Banks Power Bank] to a room. |
||
+ | <code>storage.db['rooms.objects'].insert({ room: 'W4N10', x: 25, y: 25, type: 'powerBank', store: { power: 4000 }, hits: 10000, hitsMax: 10000, decayTime: 1000000 })</code> |
||
+ | |||
+ | === Add Deposits === |
||
+ | |||
+ | Add a [https://docs.screeps.com/api/#Deposit Deposit] to a room, change the depositType to change type of the deposit. |
||
+ | <code>storage.db['rooms.objects'].insert({ room: 'W0N9', x: 16, y:26, type: 'deposit', depositType: 'mist' })</code> |
||
+ | |||
+ | === Add Portals === |
||
+ | |||
+ | Add a [https://docs.screeps.com/api/#StructurePortal Portal] to a room. Run this command twice and create portals going both directions for the best result. |
||
+ | You can alternatively set <code>unstableDate</code> as a timestamp (think <code>Date.now()</code>) instead of <code>decayTime</code>, in which case the portal will be stable up until the time expires, at which point the game will set <code>decayTime</code> to <code>PORTAL_DECAY</code>. |
||
+ | <code>storage.db['rooms.objects'].insert({ room: 'W5N5', x: 25, y: 25, type: 'portal', destination: { x: 25, y: 25, room: 'E5N5' }, decayTime: 100000 })</code> |
||
+ | |||
+ | == Bots == |
||
+ | |||
+ | === Bot Commands === |
||
+ | |||
+ | Get the commands for managing bots. |
||
+ | <code>help(bots)</code> |
||
+ | |||
+ | == Strongholds == |
||
+ | |||
+ | === Stronghold Commands === |
||
+ | |||
+ | Get the commands for managing strongholds. |
||
+ | <code>help(strongholds)</code> |
||
+ | |||
+ | === Add Invader Core === |
||
+ | |||
+ | Add an [https://docs.screeps.com/api/#StructureInvaderCore Invader Core] to a room. The number in the templateName is the stronghold level. |
||
+ | <code>strongholds.spawn('W4N5', { templateName: 'bunker3' })</code> |
||
+ | |||
+ | === Remove Invader Cores === |
||
+ | |||
+ | Remove Invader Cores from all rooms. |
||
+ | <code>storage.db['rooms.objects'].removeWhere({ type: 'invaderCore' })</code> |
||
− | == |
+ | === Add Invader Core Ruin === |
+ | Add an Invader Core Ruin to a room. This can be used to prevent new invader cores from spawning. |
||
− | In server CLI |
||
+ | <code>storage.db['rooms.objects'].insert({ room: 'W6N4', x: 25, y: 32, type: 'ruin', structure: { id: '652eb0d77373ad0040d22421', type: 'invaderCore', hits: 0, hitsMax: 100000, user: '2'}, user: '2', store: {}, destroyTime: 1, decayTime: 5000000 })</code> |
||
− | <code>storage.db['users'].update({ username: 'username' },{ $set: { gcl: 65000000000 }})</code> |
||
− | == |
+ | == NPC Invaders == |
+ | === Spawn NPC Invader === |
||
− | In server CLI |
||
− | <code>storage.db['rooms.objects'].update({ _id: 'idOfController' },{ $set: { level: 8 }})</code> |
||
+ | Add a ranged attack NPC invader to a room. |
||
− | == Setting Credits == |
||
+ | <code>storage.db['rooms.objects'].insert({ room: 'W6N3', x: 0, y: 11, type: 'creep', user: '2', name: 'invader_small_ranged', body: [{ type: 'tough', hits: 100 },{ type: 'tough', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'ranged_attack', hits: 100 },{ type: 'ranged_attack', hits: 100 },{ type: 'ranged_attack', hits: 100 },{ type: 'move', hits: 100 } ], hits: 1000, hitsMax: 1000, ticksToLive: 1500, fatigue: 0, store: {}, storeCapacity: 0 })</code> |
||
+ | Add a melee NPC invader to a room. |
||
− | In server CLI |
||
+ | <code>storage.db['rooms.objects'].insert({ room: 'W6N3', x: 1, y: 40, type: 'creep', user: '2', name: 'invader_small_melee', body: [{ type: 'tough', hits: 100 },{ type: 'tough', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'attack', hits: 100 },{ type: 'attack', hits: 100 },{ type: 'attack', hits: 100 },{ type: 'move', hits: 100 } ], hits: 1000, hitsMax: 1000, ticksToLive: 1500, fatigue: 0, store: {}, storeCapacity: 0 })</code> |
||
− | <code>storage.db['users'].update({ username: 'username' },{ $set: { money: 2000000 }})</code> |
||
+ | Add a healer NPC invader to a room. |
||
− | == Setting Power == |
||
+ | <code>storage.db['rooms.objects'].insert({ room: 'W6N3', x: 1, y: 41, type: 'creep', user: '2', name: 'invader_small_healer', body: [{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'heal', hits: 100 },{ type: 'heal', hits: 100 },{ type: 'heal', hits: 100 },{ type: 'heal', hits: 100 },{ type: 'heal', hits: 100 },{ type: 'move', hits: 100 } ], hits: 1000, hitsMax: 1000, ticksToLive: 1500, fatigue: 0, store: {}, storeCapacity: 0 })</code> |
||
− | <code>storage.db['users'].update({ username: 'username' },{ $set: { power: 540000 }})</code> |
||
− | == |
+ | == Find == |
+ | === Find Users === |
||
− | In server CLI |
||
− | <code>storage.db['users'].update({ username: 'username' },{ $set: { cpu: 500 }})</code> |
||
+ | Find all users. |
||
− | == Adding a new room == |
||
+ | <code>storage.db.users.find()</code> |
||
+ | === Find a User === |
||
− | In server CLI |
||
− | <code>map.generateRoom(roomName, options)</code> |
||
+ | Find a user by their username to get data such as the user id. |
||
− | for options use "help(map)" this will display the help data for map editing stuff |
||
+ | <code>storage.db.users.findOne({ username: 'username' })</code> |
||
+ | === Find Objects === |
||
− | <code>map.generateRoom("W11N11", {sources: 13, controller: false})</code> |
||
− | The above code for example will generate a room with 13 sources & no controller. |
||
+ | Find all room objects of a certain type. |
||
− | == Opening / closing a room == |
||
+ | <code>storage.db['rooms.objects'].find({ room: 'W7N3', type: 'constructionSite' })</code> |
||
+ | == Memory == |
||
− | In server CLI |
||
− | <code>map.openRoom("W5N1", [timestamp])</code> |
||
+ | === Get User Memory === |
||
− | timestamp is optional<br> |
||
− | e.g. on timestamp usage is to add: Date.now() + (300*1000)<br> |
||
− | This will mean that the room will open in 5 minutes. |
||
+ | Get the memory of a user by their user id. |
||
− | <code>map.closeRoom("W5N1")</code> |
||
+ | <code>storage.env.get('memory:41dbd8207f1bf62')</code> |
||
+ | Alternatively you can find the user by their username and chain together the commands to get the memory. |
||
− | == Adding NPC Terminals == |
||
+ | <code>storage.db.users.find({ username: 'username' }).then(([first]) => storage.env.get(storage.env.keys.MEMORY + first._id ))</code> |
||
+ | == Wipe Server == |
||
− | In server CLI |
||
− | <code>storage.db['rooms.objects'].insert({ type: 'terminal', room: 'W0N0', x: 0, y:0 })</code> |
||
+ | === Reset Server Data === |
||
− | Repeat as many times as desired changing rooms (Use highway rooms or SK rooms) |
||
− | NPC orders should appear on the market automatically after a little while |
||
+ | Wipe the map and reset all user data, rooms, GCL, GPL, server settings, etc. |
||
− | == Manipulating Memory == |
||
+ | <code>system.resetAllData()</code> |
||
+ | == Server Fixes == |
||
− | In server CLI (you need the user id first) |
||
− | <code>storage.env.get(storage.env.keys.MEMORY + '41dbd8207f1bf62');</code> |
||
− | <code>storage.env.get('memory:41dbd8207f1bf62');</code> |
||
− | == |
+ | === Reset Room Activity === |
+ | Occasionally, a server may encounter an issue where all rooms are set to active for processing, even those without player objects. The cause of this issue is unknown, but it can result in the server running slowly. By setting rooms to inactive, you can resolve this issue and improve server performance. |
||
− | Although it isn't required, it is likely that you will want to run this command at least twice to create a portal in each direction. |
||
− | <code>storage.db |
+ | <code>storage.db.rooms.update({ active: true }, { $set: { active: false } })</code> |
− | == |
+ | === Reset Map Images === |
+ | Regenerate room images for the world map. |
||
− | This fills up the progress of all construction sites. As soon as a creep does any construction on them, they'll be done. |
||
− | <code>storage.db |
+ | <code>storage.db.rooms.find().then(rooms => rooms.map(r => map.updateRoomImageAssets(r._id)))</code> |
Latest revision as of 12:56, 9 August 2024
This page provides a list of common tasks that can be performed on a Screeps Private Server using the CLI server.
The CLI server is accessed through the terminal or command prompt and can be used to control the server and modify server settings.
CLI Server Commands[edit | edit source]
Commands List[edit | edit source]
Get a list of available commands.
help()
Additional commands may be available depending on the server configuration and installed mods.
Server Config[edit | edit source]
System Commands[edit | edit source]
Get the commands for managing the server.
help(system)
Pause Server Ticks[edit | edit source]
Pause the server to prevent ticks from running.
system.pauseSimulation()
Resume Server Ticks[edit | edit source]
Resume the server to allow ticks to run.
system.resumeSimulation()
Tick Rate[edit | edit source]
Get the current tick duration.
system.getTickDuration()
Change Tick Rate[edit | edit source]
Set the server tick duration to 1000 milliseconds per tick, default is 1000.
system.setTickDuration(1000)
Users[edit | edit source]
Global Control Level[edit | edit source]
Change the GCL of a user.
storage.db.users.update({ username: 'username' },{ $set: { gcl: 38000000 } })
Global Power Level[edit | edit source]
Change the GPL of a user.
storage.db.users.update({ username: 'username' },{ $set: { power: 540000 } })
Market Credits[edit | edit source]
Change the credits of a user.
storage.db.users.update({ username: 'username' },{ $set: { money: 2000000 } })
CPU Limit[edit | edit source]
Change the CPU limit of a user.
storage.db.users.update({ username: 'username' },{ $set: { cpu: 500 } })
Rooms[edit | edit source]
Controller Level[edit | edit source]
Change the room's controller level (RCL).
storage.db['rooms.objects'].update({ _id: 'idOfController' },{ $set: { level: 8 } })
Controller Progress[edit | edit source]
Change the progress amount of a controller.
storage.db['rooms.objects'].update({ room: 'W7N3', type: 'controller' },{ $set: { progress: 10899000 } })
Remove Objects[edit | edit source]
Remove all Ruins from a room. This can be used to remove other game object types as well.
storage.db['rooms.objects'].removeWhere({ type: 'ruin' })
Resources[edit | edit source]
Mineral Amount[edit | edit source]
Change the available amount of a mineral.
storage.db['rooms.objects'].update({ type: 'mineral', room: 'W7N3' },{ $set: { mineralAmount: 250000 } })
Mineral Regeneration Time[edit | edit source]
Reset the mineral regeneration time.
storage.db['rooms.objects'].update({ type: 'mineral' },{ $set: { nextRegenerationTime: 1000000 } })
Add Energy to Storage[edit | edit source]
Add energy to a storage structure.
storage.db['rooms.objects'].update({ type: 'storage', room: 'W7N3' },{ $set: { store: { energy: 100000 } } })
Add Minerals to Storage[edit | edit source]
Add minerals to a storage structure.
storage.db['rooms.objects'].update({ type: 'storage', room: 'W7N3' },{ $set: { store: { H: 25000, O: 25000, U: 25000, L: 25000, K: 25000, Z: 25000, X: 25000 } } })
Construction Sites[edit | edit source]
Max Construction Progress[edit | edit source]
Set max progress on all construction sites. As soon as a creep does any construction the structure will be built.
storage.db['rooms.objects'].update({ type: 'constructionSite' },{ $set: { progress: 99999 } })
Repair[edit | edit source]
Repair Ramparts[edit | edit source]
Repair all rampart structures. The type can be modified to repair other structure types as well.
storage.db['rooms.objects'].update({ type: 'rampart' },{ $set: { hits: 1000000 } })
Repair Structure[edit | edit source]
Repair a structure by id.
storage.db['rooms.objects'].update({ _id: 'idOfStructure' },{ $set: { hits: 1000000 } })
Map[edit | edit source]
Map Commands[edit | edit source]
Get the commands for managing the world map.
help(map)
Insert New Room[edit | edit source]
Generate a new room and add it to the world.
map.generateRoom('W11N11', { sources: 2 })
Open Room[edit | edit source]
Make a room available for use.
map.openRoom('W5N1')
Open a room in 5 minutes.
map.openRoom('W5N1', Date.now() + 300 * 1000)
Close Room[edit | edit source]
Make a room not available.
map.closeRoom('W5N1')
Update terrain data[edit | edit source]
Update the cached world terrain data. Use this whenever there's a chance the terrain data has been modified so that the server reloads it from the database.
map.updateTerrainData()
Refresh image assets[edit | edit source]
Refresh every room's image assets. Use this whenever the map images do not match the terrain.
storage.db.rooms.find().then(rooms => Promise.all(rooms.map(({ _id }) => map.updateRoomImageAssets(_id))));
Add NPC Terminals[edit | edit source]
Add a NPC Terminal to a room. Repeat as many times as desired changing rooms (Use highway rooms or SK rooms). NPC orders should appear on the market automatically after a little while.
storage.db['rooms.objects'].insert({ room: 'W0N0', x: 0, y: 0, type: 'terminal' })
Add Power Banks[edit | edit source]
Add a Power Bank to a room.
storage.db['rooms.objects'].insert({ room: 'W4N10', x: 25, y: 25, type: 'powerBank', store: { power: 4000 }, hits: 10000, hitsMax: 10000, decayTime: 1000000 })
Add Deposits[edit | edit source]
Add a Deposit to a room, change the depositType to change type of the deposit.
storage.db['rooms.objects'].insert({ room: 'W0N9', x: 16, y:26, type: 'deposit', depositType: 'mist' })
Add Portals[edit | edit source]
Add a Portal to a room. Run this command twice and create portals going both directions for the best result.
You can alternatively set unstableDate
as a timestamp (think Date.now()
) instead of decayTime
, in which case the portal will be stable up until the time expires, at which point the game will set decayTime
to PORTAL_DECAY
.
storage.db['rooms.objects'].insert({ room: 'W5N5', x: 25, y: 25, type: 'portal', destination: { x: 25, y: 25, room: 'E5N5' }, decayTime: 100000 })
Bots[edit | edit source]
Bot Commands[edit | edit source]
Get the commands for managing bots.
help(bots)
Strongholds[edit | edit source]
Stronghold Commands[edit | edit source]
Get the commands for managing strongholds.
help(strongholds)
Add Invader Core[edit | edit source]
Add an Invader Core to a room. The number in the templateName is the stronghold level.
strongholds.spawn('W4N5', { templateName: 'bunker3' })
Remove Invader Cores[edit | edit source]
Remove Invader Cores from all rooms.
storage.db['rooms.objects'].removeWhere({ type: 'invaderCore' })
Add Invader Core Ruin[edit | edit source]
Add an Invader Core Ruin to a room. This can be used to prevent new invader cores from spawning.
storage.db['rooms.objects'].insert({ room: 'W6N4', x: 25, y: 32, type: 'ruin', structure: { id: '652eb0d77373ad0040d22421', type: 'invaderCore', hits: 0, hitsMax: 100000, user: '2'}, user: '2', store: {}, destroyTime: 1, decayTime: 5000000 })
NPC Invaders[edit | edit source]
Spawn NPC Invader[edit | edit source]
Add a ranged attack NPC invader to a room.
storage.db['rooms.objects'].insert({ room: 'W6N3', x: 0, y: 11, type: 'creep', user: '2', name: 'invader_small_ranged', body: [{ type: 'tough', hits: 100 },{ type: 'tough', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'ranged_attack', hits: 100 },{ type: 'ranged_attack', hits: 100 },{ type: 'ranged_attack', hits: 100 },{ type: 'move', hits: 100 } ], hits: 1000, hitsMax: 1000, ticksToLive: 1500, fatigue: 0, store: {}, storeCapacity: 0 })
Add a melee NPC invader to a room.
storage.db['rooms.objects'].insert({ room: 'W6N3', x: 1, y: 40, type: 'creep', user: '2', name: 'invader_small_melee', body: [{ type: 'tough', hits: 100 },{ type: 'tough', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'attack', hits: 100 },{ type: 'attack', hits: 100 },{ type: 'attack', hits: 100 },{ type: 'move', hits: 100 } ], hits: 1000, hitsMax: 1000, ticksToLive: 1500, fatigue: 0, store: {}, storeCapacity: 0 })
Add a healer NPC invader to a room.
storage.db['rooms.objects'].insert({ room: 'W6N3', x: 1, y: 41, type: 'creep', user: '2', name: 'invader_small_healer', body: [{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'move', hits: 100 },{ type: 'heal', hits: 100 },{ type: 'heal', hits: 100 },{ type: 'heal', hits: 100 },{ type: 'heal', hits: 100 },{ type: 'heal', hits: 100 },{ type: 'move', hits: 100 } ], hits: 1000, hitsMax: 1000, ticksToLive: 1500, fatigue: 0, store: {}, storeCapacity: 0 })
Find[edit | edit source]
Find Users[edit | edit source]
Find all users.
storage.db.users.find()
Find a User[edit | edit source]
Find a user by their username to get data such as the user id.
storage.db.users.findOne({ username: 'username' })
Find Objects[edit | edit source]
Find all room objects of a certain type.
storage.db['rooms.objects'].find({ room: 'W7N3', type: 'constructionSite' })
Memory[edit | edit source]
Get User Memory[edit | edit source]
Get the memory of a user by their user id.
storage.env.get('memory:41dbd8207f1bf62')
Alternatively you can find the user by their username and chain together the commands to get the memory.
storage.db.users.find({ username: 'username' }).then(([first]) => storage.env.get(storage.env.keys.MEMORY + first._id ))
Wipe Server[edit | edit source]
Reset Server Data[edit | edit source]
Wipe the map and reset all user data, rooms, GCL, GPL, server settings, etc.
system.resetAllData()
Server Fixes[edit | edit source]
Reset Room Activity[edit | edit source]
Occasionally, a server may encounter an issue where all rooms are set to active for processing, even those without player objects. The cause of this issue is unknown, but it can result in the server running slowly. By setting rooms to inactive, you can resolve this issue and improve server performance.
storage.db.rooms.update({ active: true }, { $set: { active: false } })
Reset Map Images[edit | edit source]
Regenerate room images for the world map.
storage.db.rooms.find().then(rooms => rooms.map(r => map.updateRoomImageAssets(r._id)))