diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..d923ab5
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# Set end-of-line to LF
+* text eol=lf
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2d59ad9
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,6 @@
+.idea
+node_modules
+npm-debug.log
+*.*~
+.DS_Store
+.vscode/tasks.json
diff --git a/.npmignore b/.npmignore
new file mode 100644
index 0000000..faa58c8
--- /dev/null
+++ b/.npmignore
@@ -0,0 +1,6 @@
+node_modules/
+*.log
+*.tgz
+.gitattributes
+tsconfig.json
+src/
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..235afab
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) justjavac
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..daa914f
--- /dev/null
+++ b/README.md
@@ -0,0 +1,32 @@
+# screeps-types-zh_CN
+
+> Screeps 的 TypeScript 类型定义文件(简体中文版)。
+
+本项目的初衷是为 [screeps-typescript-starter-zh_CN](https://github.com/justjavac/screeps-typescript-starter-zh_CN) 提供中文类型定义文件。
+现在独立发型了 npm 包 [@screepscn/types](https://www.npmjs.com/package/@screepscn/types),可用于任何 nodejs 项目。
+
+## 安装
+
+你可以使用 npm 或者 yarn 安装:
+
+```shell
+# npm
+npm install @screepscn/types
+
+# yarn
+yarn add @screepscn/types
+```
+
+## 使用
+
+在需要使用类型的地方添加 reference:
+
+```ts
+///
+```
+
+或者在源码根目录新建 `types.d.ts` 文件,顶部增加 reference 代码。
+
+## 鸣谢
+
+本项目内容翻译来自: 做了部分修改,感谢翻译者们的贡献。
diff --git a/index.d.ts b/index.d.ts
new file mode 100644
index 0000000..b0d6468
--- /dev/null
+++ b/index.d.ts
@@ -0,0 +1,6375 @@
+// Game Constants
+
+/** 操作已经成功纳入计划 */
+declare const OK: OK;
+declare const ERR_NOT_OWNER: ERR_NOT_OWNER;
+
+/** 无法找到路径。 */
+declare const ERR_NO_PATH: ERR_NO_PATH;
+declare const ERR_NAME_EXISTS: ERR_NAME_EXISTS;
+declare const ERR_BUSY: ERR_BUSY;
+declare const ERR_NOT_FOUND: ERR_NOT_FOUND;
+declare const ERR_NOT_ENOUGH_RESOURCES: ERR_NOT_ENOUGH_RESOURCES;
+declare const ERR_NOT_ENOUGH_ENERGY: ERR_NOT_ENOUGH_ENERGY;
+declare const ERR_INVALID_TARGET: ERR_INVALID_TARGET;
+declare const ERR_FULL: ERR_FULL;
+declare const ERR_NOT_IN_RANGE: ERR_NOT_IN_RANGE;
+declare const ERR_INVALID_ARGS: ERR_INVALID_ARGS;
+declare const ERR_TIRED: ERR_TIRED;
+declare const ERR_NO_BODYPART: ERR_NO_BODYPART;
+declare const ERR_NOT_ENOUGH_EXTENSIONS: ERR_NOT_ENOUGH_EXTENSIONS;
+declare const ERR_RCL_NOT_ENOUGH: ERR_RCL_NOT_ENOUGH;
+declare const ERR_GCL_NOT_ENOUGH: ERR_GCL_NOT_ENOUGH;
+
+/** 位于房间顶部的出口位置。 */
+declare const FIND_EXIT_TOP: FIND_EXIT_TOP;
+
+/** 位于房间右侧的出口位置。 */
+declare const FIND_EXIT_RIGHT: FIND_EXIT_RIGHT;
+
+/** 位于房间底部的出口位置。 */
+declare const FIND_EXIT_BOTTOM: FIND_EXIT_BOTTOM;
+
+/** 位于房间左侧的出口位置。 */
+declare const FIND_EXIT_LEFT: FIND_EXIT_LEFT;
+
+/** 所有出口位置。 */
+declare const FIND_EXIT: FIND_EXIT;
+
+/** 所有 creep。 */
+declare const FIND_CREEPS: FIND_CREEPS;
+
+/** 所有属于您的 creep。 */
+declare const FIND_MY_CREEPS: FIND_MY_CREEPS;
+
+/** 所有不属于您的 creep。 */
+declare const FIND_HOSTILE_CREEPS: FIND_HOSTILE_CREEPS;
+
+/** 仍有能量的 source。 */
+declare const FIND_SOURCES_ACTIVE: FIND_SOURCES_ACTIVE;
+
+/** 所有 source。 */
+declare const FIND_SOURCES: FIND_SOURCES;
+
+/** 所有掉落的资源。 */
+declare const FIND_DROPPED_RESOURCES: FIND_DROPPED_RESOURCES;
+
+/** 所有建筑。 */
+declare const FIND_STRUCTURES: FIND_STRUCTURES;
+
+/** 所有属于您的建筑,不包含中立建筑。 */
+declare const FIND_MY_STRUCTURES: FIND_MY_STRUCTURES;
+
+/** 所有其他玩家的建筑,不包含中立建筑。 */
+declare const FIND_HOSTILE_STRUCTURES: FIND_HOSTILE_STRUCTURES;
+
+/** 所有旗帜。 */
+declare const FIND_FLAGS: FIND_FLAGS;
+
+/** 所有建筑工地。 */
+declare const FIND_CONSTRUCTION_SITES: FIND_CONSTRUCTION_SITES;
+
+/** 所有属于您的 spawn。 */
+declare const FIND_MY_SPAWNS: FIND_MY_SPAWNS;
+
+/** 所有其他玩家的 spawn。 */
+declare const FIND_HOSTILE_SPAWNS: FIND_HOSTILE_SPAWNS;
+
+/** 所有属于您的建筑工地。 */
+declare const FIND_MY_CONSTRUCTION_SITES: FIND_MY_CONSTRUCTION_SITES;
+
+/** 所有其他玩家的建筑工地。 */
+declare const FIND_HOSTILE_CONSTRUCTION_SITES: FIND_HOSTILE_CONSTRUCTION_SITES;
+
+/** 所有矿床。 */
+declare const FIND_MINERALS: FIND_MINERALS;
+
+/** 所有将落地的核弹。 */
+declare const FIND_NUKES: FIND_NUKES;
+
+/** 所有墓碑。 */
+declare const FIND_TOMBSTONES: FIND_TOMBSTONES;
+declare const FIND_POWER_CREEPS: FIND_POWER_CREEPS;
+declare const FIND_MY_POWER_CREEPS: FIND_MY_POWER_CREEPS;
+declare const FIND_HOSTILE_POWER_CREEPS: FIND_HOSTILE_POWER_CREEPS;
+declare const FIND_DEPOSITS: FIND_DEPOSITS;
+declare const FIND_RUINS: FIND_RUINS;
+
+declare const TOP: TOP;
+declare const TOP_RIGHT: TOP_RIGHT;
+declare const RIGHT: RIGHT;
+declare const BOTTOM_RIGHT: BOTTOM_RIGHT;
+declare const BOTTOM: BOTTOM;
+declare const BOTTOM_LEFT: BOTTOM_LEFT;
+declare const LEFT: LEFT;
+declare const TOP_LEFT: TOP_LEFT;
+
+declare const COLOR_RED: COLOR_RED;
+declare const COLOR_PURPLE: COLOR_PURPLE;
+declare const COLOR_BLUE: COLOR_BLUE;
+declare const COLOR_CYAN: COLOR_CYAN;
+declare const COLOR_GREEN: COLOR_GREEN;
+declare const COLOR_YELLOW: COLOR_YELLOW;
+declare const COLOR_ORANGE: COLOR_ORANGE;
+declare const COLOR_BROWN: COLOR_BROWN;
+declare const COLOR_GREY: COLOR_GREY;
+declare const COLOR_WHITE: COLOR_WHITE;
+declare const COLORS_ALL: ColorConstant[];
+
+declare const CREEP_SPAWN_TIME: 3;
+declare const CREEP_LIFE_TIME: 1500;
+declare const CREEP_CLAIM_LIFE_TIME: 600;
+declare const CREEP_CORPSE_RATE: 0.2;
+
+declare const OBSTACLE_OBJECT_TYPES: [
+ "spawn",
+ "creep",
+ "powerCreep",
+ "source",
+ "mineral",
+ "deposit",
+ "controller",
+ "constructedWall",
+ "extension",
+ "link",
+ "storage",
+ "tower",
+ "observer",
+ "powerSpawn",
+ "powerBank",
+ "lab",
+ "terminal",
+ "nuker",
+ "factory",
+ "invaderCore",
+];
+
+declare const ENERGY_REGEN_TIME: 300;
+declare const ENERGY_DECAY: 1000;
+
+declare const REPAIR_COST: 0.01;
+
+declare const RAMPART_DECAY_AMOUNT: 300;
+declare const RAMPART_DECAY_TIME: 100;
+declare const RAMPART_HITS: 1;
+declare const RAMPART_HITS_MAX: {
+ [rcl: number]: number;
+ 2: 300000;
+ 3: 1000000;
+ 4: 3000000;
+ 5: 10000000;
+ 6: 30000000;
+ 7: 100000000;
+ 8: 300000000;
+};
+
+declare const SPAWN_HITS: 5000;
+declare const SPAWN_ENERGY_START: 300;
+declare const SPAWN_ENERGY_CAPACITY: 300;
+
+declare const SOURCE_ENERGY_CAPACITY: 3000;
+declare const SOURCE_ENERGY_NEUTRAL_CAPACITY: 1500;
+declare const SOURCE_ENERGY_KEEPER_CAPACITY: 4000;
+
+declare const WALL_HITS: 1;
+declare const WALL_HITS_MAX: 300000000;
+
+declare const EXTENSION_HITS: 1000;
+declare const EXTENSION_ENERGY_CAPACITY: {
+ [rcl: number]: number;
+ 0: 50;
+ 1: 50;
+ 2: 50;
+ 3: 50;
+ 4: 50;
+ 5: 50;
+ 6: 50;
+ 7: 100;
+ 8: 200;
+};
+
+declare const ROAD_HITS: 5000;
+declare const ROAD_WEAROUT: 1;
+declare const ROAD_WEAROUT_POWER_CREEP: 100;
+declare const ROAD_DECAY_AMOUNT: 100;
+declare const ROAD_DECAY_TIME: 1000;
+
+declare const LINK_HITS: 1000;
+declare const LINK_HITS_MAX: 1000;
+declare const LINK_CAPACITY: 800;
+declare const LINK_COOLDOWN: 1;
+declare const LINK_LOSS_RATIO: 0.03;
+
+declare const STORAGE_CAPACITY: 1000000;
+declare const STORAGE_HITS: 10000;
+
+declare const FACTORY_HITS: 1000;
+declare const FACTORY_CAPACITY: 50000;
+
+declare const BODYPART_COST: Record;
+
+declare const BODYPARTS_ALL: BodyPartConstant[];
+
+declare const CARRY_CAPACITY: 50;
+declare const HARVEST_POWER: 2;
+declare const HARVEST_MINERAL_POWER: 1;
+declare const HARVEST_DEPOSIT_POWER: 1;
+declare const REPAIR_POWER: 100;
+declare const DISMANTLE_POWER: 50;
+declare const BUILD_POWER: 5;
+declare const ATTACK_POWER: 30;
+declare const UPGRADE_CONTROLLER_POWER: 1;
+declare const RANGED_ATTACK_POWER: 10;
+declare const HEAL_POWER: 12;
+declare const RANGED_HEAL_POWER: 4;
+declare const DISMANTLE_COST: 0.005;
+
+declare const MOVE: MOVE;
+declare const WORK: WORK;
+declare const CARRY: CARRY;
+declare const ATTACK: ATTACK;
+declare const RANGED_ATTACK: RANGED_ATTACK;
+declare const TOUGH: TOUGH;
+declare const HEAL: HEAL;
+declare const CLAIM: CLAIM;
+
+declare const CONSTRUCTION_COST: Record;
+
+declare const CONSTRUCTION_COST_ROAD_SWAMP_RATIO: 5;
+declare const CONSTRUCTION_COST_ROAD_WALL_RATIO: 150;
+
+declare const STRUCTURE_EXTENSION: STRUCTURE_EXTENSION;
+declare const STRUCTURE_RAMPART: STRUCTURE_RAMPART;
+declare const STRUCTURE_ROAD: STRUCTURE_ROAD;
+declare const STRUCTURE_SPAWN: STRUCTURE_SPAWN;
+declare const STRUCTURE_LINK: STRUCTURE_LINK;
+declare const STRUCTURE_WALL: STRUCTURE_WALL;
+declare const STRUCTURE_KEEPER_LAIR: STRUCTURE_KEEPER_LAIR;
+declare const STRUCTURE_CONTROLLER: STRUCTURE_CONTROLLER;
+declare const STRUCTURE_STORAGE: STRUCTURE_STORAGE;
+declare const STRUCTURE_TOWER: STRUCTURE_TOWER;
+declare const STRUCTURE_OBSERVER: STRUCTURE_OBSERVER;
+declare const STRUCTURE_POWER_BANK: STRUCTURE_POWER_BANK;
+declare const STRUCTURE_POWER_SPAWN: STRUCTURE_POWER_SPAWN;
+declare const STRUCTURE_EXTRACTOR: STRUCTURE_EXTRACTOR;
+declare const STRUCTURE_LAB: STRUCTURE_LAB;
+declare const STRUCTURE_TERMINAL: STRUCTURE_TERMINAL;
+declare const STRUCTURE_CONTAINER: STRUCTURE_CONTAINER;
+declare const STRUCTURE_NUKER: STRUCTURE_NUKER;
+declare const STRUCTURE_FACTORY: STRUCTURE_FACTORY;
+declare const STRUCTURE_INVADER_CORE: STRUCTURE_INVADER_CORE;
+declare const STRUCTURE_PORTAL: STRUCTURE_PORTAL;
+
+declare const RESOURCE_ENERGY: RESOURCE_ENERGY;
+declare const RESOURCE_POWER: RESOURCE_POWER;
+declare const RESOURCE_OPS: RESOURCE_OPS;
+declare const RESOURCE_UTRIUM: RESOURCE_UTRIUM;
+declare const RESOURCE_LEMERGIUM: RESOURCE_LEMERGIUM;
+declare const RESOURCE_KEANIUM: RESOURCE_KEANIUM;
+declare const RESOURCE_GHODIUM: RESOURCE_GHODIUM;
+declare const RESOURCE_ZYNTHIUM: RESOURCE_ZYNTHIUM;
+declare const RESOURCE_OXYGEN: RESOURCE_OXYGEN;
+declare const RESOURCE_HYDROGEN: RESOURCE_HYDROGEN;
+declare const RESOURCE_CATALYST: RESOURCE_CATALYST;
+declare const RESOURCE_HYDROXIDE: RESOURCE_HYDROXIDE;
+declare const RESOURCE_ZYNTHIUM_KEANITE: RESOURCE_ZYNTHIUM_KEANITE;
+declare const RESOURCE_UTRIUM_LEMERGITE: RESOURCE_UTRIUM_LEMERGITE;
+declare const RESOURCE_UTRIUM_HYDRIDE: RESOURCE_UTRIUM_HYDRIDE;
+declare const RESOURCE_UTRIUM_OXIDE: RESOURCE_UTRIUM_OXIDE;
+declare const RESOURCE_KEANIUM_HYDRIDE: RESOURCE_KEANIUM_HYDRIDE;
+declare const RESOURCE_KEANIUM_OXIDE: RESOURCE_KEANIUM_OXIDE;
+declare const RESOURCE_LEMERGIUM_HYDRIDE: RESOURCE_LEMERGIUM_HYDRIDE;
+declare const RESOURCE_LEMERGIUM_OXIDE: RESOURCE_LEMERGIUM_OXIDE;
+declare const RESOURCE_ZYNTHIUM_HYDRIDE: RESOURCE_ZYNTHIUM_HYDRIDE;
+declare const RESOURCE_ZYNTHIUM_OXIDE: RESOURCE_ZYNTHIUM_OXIDE;
+declare const RESOURCE_GHODIUM_HYDRIDE: RESOURCE_GHODIUM_HYDRIDE;
+declare const RESOURCE_GHODIUM_OXIDE: RESOURCE_GHODIUM_OXIDE;
+declare const RESOURCE_UTRIUM_ACID: RESOURCE_UTRIUM_ACID;
+declare const RESOURCE_UTRIUM_ALKALIDE: RESOURCE_UTRIUM_ALKALIDE;
+declare const RESOURCE_KEANIUM_ACID: RESOURCE_KEANIUM_ACID;
+declare const RESOURCE_KEANIUM_ALKALIDE: RESOURCE_KEANIUM_ALKALIDE;
+declare const RESOURCE_LEMERGIUM_ACID: RESOURCE_LEMERGIUM_ACID;
+declare const RESOURCE_LEMERGIUM_ALKALIDE: RESOURCE_LEMERGIUM_ALKALIDE;
+declare const RESOURCE_ZYNTHIUM_ACID: RESOURCE_ZYNTHIUM_ACID;
+declare const RESOURCE_ZYNTHIUM_ALKALIDE: RESOURCE_ZYNTHIUM_ALKALIDE;
+declare const RESOURCE_GHODIUM_ACID: RESOURCE_GHODIUM_ACID;
+declare const RESOURCE_GHODIUM_ALKALIDE: RESOURCE_GHODIUM_ALKALIDE;
+declare const RESOURCE_CATALYZED_UTRIUM_ACID: RESOURCE_CATALYZED_UTRIUM_ACID;
+declare const RESOURCE_CATALYZED_UTRIUM_ALKALIDE:
+ RESOURCE_CATALYZED_UTRIUM_ALKALIDE;
+declare const RESOURCE_CATALYZED_KEANIUM_ACID: RESOURCE_CATALYZED_KEANIUM_ACID;
+declare const RESOURCE_CATALYZED_KEANIUM_ALKALIDE:
+ RESOURCE_CATALYZED_KEANIUM_ALKALIDE;
+declare const RESOURCE_CATALYZED_LEMERGIUM_ACID:
+ RESOURCE_CATALYZED_LEMERGIUM_ACID;
+declare const RESOURCE_CATALYZED_LEMERGIUM_ALKALIDE:
+ RESOURCE_CATALYZED_LEMERGIUM_ALKALIDE;
+declare const RESOURCE_CATALYZED_ZYNTHIUM_ACID:
+ RESOURCE_CATALYZED_ZYNTHIUM_ACID;
+declare const RESOURCE_CATALYZED_ZYNTHIUM_ALKALIDE:
+ RESOURCE_CATALYZED_ZYNTHIUM_ALKALIDE;
+declare const RESOURCE_CATALYZED_GHODIUM_ACID: RESOURCE_CATALYZED_GHODIUM_ACID;
+declare const RESOURCE_CATALYZED_GHODIUM_ALKALIDE:
+ RESOURCE_CATALYZED_GHODIUM_ALKALIDE;
+
+declare const RESOURCE_BIOMASS: RESOURCE_BIOMASS;
+declare const RESOURCE_METAL: RESOURCE_METAL;
+declare const RESOURCE_MIST: RESOURCE_MIST;
+declare const RESOURCE_SILICON: RESOURCE_SILICON;
+
+declare const RESOURCE_UTRIUM_BAR: RESOURCE_UTRIUM_BAR;
+declare const RESOURCE_LEMERGIUM_BAR: RESOURCE_LEMERGIUM_BAR;
+declare const RESOURCE_ZYNTHIUM_BAR: RESOURCE_ZYNTHIUM_BAR;
+declare const RESOURCE_KEANIUM_BAR: RESOURCE_KEANIUM_BAR;
+declare const RESOURCE_GHODIUM_MELT: RESOURCE_GHODIUM_MELT;
+declare const RESOURCE_OXIDANT: RESOURCE_OXIDANT;
+declare const RESOURCE_REDUCTANT: RESOURCE_REDUCTANT;
+declare const RESOURCE_PURIFIER: RESOURCE_PURIFIER;
+declare const RESOURCE_BATTERY: RESOURCE_BATTERY;
+
+declare const RESOURCE_COMPOSITE: RESOURCE_COMPOSITE;
+declare const RESOURCE_CRYSTAL: RESOURCE_CRYSTAL;
+declare const RESOURCE_LIQUID: RESOURCE_LIQUID;
+
+declare const RESOURCE_WIRE: RESOURCE_WIRE;
+declare const RESOURCE_SWITCH: RESOURCE_SWITCH;
+declare const RESOURCE_TRANSISTOR: RESOURCE_TRANSISTOR;
+declare const RESOURCE_MICROCHIP: RESOURCE_MICROCHIP;
+declare const RESOURCE_CIRCUIT: RESOURCE_CIRCUIT;
+declare const RESOURCE_DEVICE: RESOURCE_DEVICE;
+
+declare const RESOURCE_CELL: RESOURCE_CELL;
+declare const RESOURCE_PHLEGM: RESOURCE_PHLEGM;
+declare const RESOURCE_TISSUE: RESOURCE_TISSUE;
+declare const RESOURCE_MUSCLE: RESOURCE_MUSCLE;
+declare const RESOURCE_ORGANOID: RESOURCE_ORGANOID;
+declare const RESOURCE_ORGANISM: RESOURCE_ORGANISM;
+
+declare const RESOURCE_ALLOY: RESOURCE_ALLOY;
+declare const RESOURCE_TUBE: RESOURCE_TUBE;
+declare const RESOURCE_FIXTURES: RESOURCE_FIXTURES;
+declare const RESOURCE_FRAME: RESOURCE_FRAME;
+declare const RESOURCE_HYDRAULICS: RESOURCE_HYDRAULICS;
+declare const RESOURCE_MACHINE: RESOURCE_MACHINE;
+
+declare const RESOURCE_CONDENSATE: RESOURCE_CONDENSATE;
+declare const RESOURCE_CONCENTRATE: RESOURCE_CONCENTRATE;
+declare const RESOURCE_EXTRACT: RESOURCE_EXTRACT;
+declare const RESOURCE_SPIRIT: RESOURCE_SPIRIT;
+declare const RESOURCE_EMANATION: RESOURCE_EMANATION;
+declare const RESOURCE_ESSENCE: RESOURCE_ESSENCE;
+
+declare const RESOURCES_ALL: ResourceConstant[];
+
+declare const SUBSCRIPTION_TOKEN: SUBSCRIPTION_TOKEN;
+declare const CPU_UNLOCK: CPU_UNLOCK;
+declare const PIXEL: PIXEL;
+declare const ACCESS_KEY: ACCESS_KEY;
+
+declare const PIXEL_CPU_COST: 5000;
+
+declare const CONTROLLER_LEVELS: { [level: number]: number };
+declare const CONTROLLER_STRUCTURES: Record<
+ BuildableStructureConstant,
+ { [level: number]: number }
+>;
+
+declare const CONTROLLER_DOWNGRADE: { [level: number]: number };
+declare const CONTROLLER_DOWNGRADE_RESTORE: number;
+declare const CONTROLLER_DOWNGRADE_SAFEMODE_THRESHOLD: number;
+declare const CONTROLLER_CLAIM_DOWNGRADE: number;
+declare const CONTROLLER_RESERVE: number;
+declare const CONTROLLER_RESERVE_MAX: number;
+declare const CONTROLLER_MAX_UPGRADE_PER_TICK: number;
+declare const CONTROLLER_ATTACK_BLOCKED_UPGRADE: number;
+declare const CONTROLLER_NUKE_BLOCKED_UPGRADE: number;
+
+declare const SAFE_MODE_DURATION: 20000;
+declare const SAFE_MODE_COOLDOWN: 50000;
+declare const SAFE_MODE_COST: 1000;
+
+declare const TOWER_HITS: number;
+declare const TOWER_CAPACITY: number;
+declare const TOWER_ENERGY_COST: number;
+declare const TOWER_POWER_ATTACK: number;
+declare const TOWER_POWER_HEAL: number;
+declare const TOWER_POWER_REPAIR: number;
+declare const TOWER_OPTIMAL_RANGE: number;
+declare const TOWER_FALLOFF_RANGE: number;
+declare const TOWER_FALLOFF: number;
+
+declare const OBSERVER_HITS: number;
+declare const OBSERVER_RANGE: number;
+
+declare const POWER_BANK_HITS: number;
+declare const POWER_BANK_CAPACITY_MAX: number;
+declare const POWER_BANK_CAPACITY_MIN: number;
+declare const POWER_BANK_CAPACITY_CRIT: number;
+declare const POWER_BANK_DECAY: number;
+declare const POWER_BANK_HIT_BACK: number;
+
+declare const POWER_SPAWN_HITS: number;
+declare const POWER_SPAWN_ENERGY_CAPACITY: number;
+declare const POWER_SPAWN_POWER_CAPACITY: number;
+declare const POWER_SPAWN_ENERGY_RATIO: number;
+
+declare const EXTRACTOR_HITS: number;
+declare const EXTRACTOR_COOLDOWN: number;
+
+declare const LAB_HITS: number;
+declare const LAB_MINERAL_CAPACITY: number;
+declare const LAB_ENERGY_CAPACITY: number;
+declare const LAB_BOOST_ENERGY: number;
+declare const LAB_BOOST_MINERAL: number;
+declare const LAB_COOLDOWN: number;
+declare const LAB_REACTION_AMOUNT: number;
+
+declare const GCL_POW: number;
+declare const GCL_MULTIPLY: number;
+declare const GCL_NOVICE: number;
+
+declare const MODE_SIMULATION: string;
+declare const MODE_SURVIVAL: string;
+declare const MODE_WORLD: string;
+declare const MODE_ARENA: string;
+
+declare const TERRAIN_MASK_WALL: TERRAIN_MASK_WALL;
+declare const TERRAIN_MASK_SWAMP: TERRAIN_MASK_SWAMP;
+declare const TERRAIN_MASK_LAVA: TERRAIN_MASK_LAVA;
+
+declare const MAX_CONSTRUCTION_SITES: number;
+declare const MAX_CREEP_SIZE: number;
+
+declare const MINERAL_REGEN_TIME: number;
+declare const MINERAL_MIN_AMOUNT: Record;
+declare const MINERAL_RANDOM_FACTOR: number;
+
+declare const MINERAL_DENSITY: {
+ [level: number]: number;
+ 1: number;
+ 2: number;
+ 3: number;
+ 4: number;
+};
+
+declare const MINERAL_DENSITY_PROBABILITY: {
+ [level: number]: number;
+ 1: number;
+ 2: number;
+ 3: number;
+ 4: number;
+};
+
+declare const MINERAL_DENSITY_CHANGE: number;
+
+declare const DENSITY_LOW: number;
+declare const DENSITY_MODERATE: number;
+declare const DENSITY_HIGH: number;
+declare const DENSITY_ULTRA: number;
+
+declare const DEPOSIT_EXHAUST_MULTIPLY: number;
+declare const DEPOSIT_EXHAUST_POW: number;
+declare const DEPOSIT_DECAY_TIME: number;
+
+declare const TERMINAL_CAPACITY: number;
+declare const TERMINAL_COOLDOWN: number;
+declare const TERMINAL_HITS: number;
+declare const TERMINAL_SEND_COST: number;
+declare const TERMINAL_MIN_SEND: number;
+
+declare const CONTAINER_HITS: number;
+declare const CONTAINER_CAPACITY: number;
+declare const CONTAINER_DECAY: number;
+declare const CONTAINER_DECAY_TIME: number;
+declare const CONTAINER_DECAY_TIME_OWNED: number;
+
+declare const NUKER_HITS: number;
+declare const NUKER_COOLDOWN: number;
+declare const NUKER_ENERGY_CAPACITY: number;
+declare const NUKER_GHODIUM_CAPACITY: number;
+declare const NUKE_LAND_TIME: number;
+declare const NUKE_RANGE: number;
+declare const NUKE_DAMAGE: {
+ [range: number]: number;
+ 0: number;
+ 1: number;
+ 4: number;
+};
+
+declare const REACTIONS: {
+ [resource: string]: { [resource: string]: string };
+ H: {
+ O: "OH";
+ L: "LH";
+ K: "KH";
+ U: "UH";
+ Z: "ZH";
+ G: "GH";
+ };
+ O: {
+ H: "OH";
+ L: "LO";
+ K: "KO";
+ U: "UO";
+ Z: "ZO";
+ G: "GO";
+ };
+ Z: {
+ K: "ZK";
+ H: "ZH";
+ O: "ZO";
+ };
+ L: {
+ U: "UL";
+ H: "LH";
+ O: "LO";
+ };
+ K: {
+ Z: "ZK";
+ H: "KH";
+ O: "KO";
+ };
+ G: {
+ H: "GH";
+ O: "GO";
+ };
+ U: {
+ L: "UL";
+ H: "UH";
+ O: "UO";
+ };
+ OH: {
+ UH: "UH2O";
+ UO: "UHO2";
+ ZH: "ZH2O";
+ ZO: "ZHO2";
+ KH: "KH2O";
+ KO: "KHO2";
+ LH: "LH2O";
+ LO: "LHO2";
+ GH: "GH2O";
+ GO: "GHO2";
+ };
+ X: {
+ UH2O: "XUH2O";
+ UHO2: "XUHO2";
+ LH2O: "XLH2O";
+ LHO2: "XLHO2";
+ KH2O: "XKH2O";
+ KHO2: "XKHO2";
+ ZH2O: "XZH2O";
+ ZHO2: "XZHO2";
+ GH2O: "XGH2O";
+ GHO2: "XGHO2";
+ };
+ ZK: {
+ UL: "G";
+ };
+ UL: {
+ ZK: "G";
+ };
+ LH: {
+ OH: "LH2O";
+ };
+ ZH: {
+ OH: "ZH2O";
+ };
+ GH: {
+ OH: "GH2O";
+ };
+ KH: {
+ OH: "KH2O";
+ };
+ UH: {
+ OH: "UH2O";
+ };
+ LO: {
+ OH: "LHO2";
+ };
+ ZO: {
+ OH: "ZHO2";
+ };
+ KO: {
+ OH: "KHO2";
+ };
+ UO: {
+ OH: "UHO2";
+ };
+ GO: {
+ OH: "GHO2";
+ };
+ LH2O: {
+ X: "XLH2O";
+ };
+ KH2O: {
+ X: "XKH2O";
+ };
+ ZH2O: {
+ X: "XZH2O";
+ };
+ UH2O: {
+ X: "XUH2O";
+ };
+ GH2O: {
+ X: "XGH2O";
+ };
+ LHO2: {
+ X: "XLHO2";
+ };
+ UHO2: {
+ X: "XUHO2";
+ };
+ KHO2: {
+ X: "XKHO2";
+ };
+ ZHO2: {
+ X: "XZHO2";
+ };
+ GHO2: {
+ X: "XGHO2";
+ };
+};
+
+declare const REACTION_TIME: {
+ OH: 20;
+ ZK: 5;
+ UL: 5;
+ G: 5;
+ UH: 10;
+ UH2O: 5;
+ XUH2O: 60;
+ UO: 10;
+ UHO2: 5;
+ XUHO2: 60;
+ KH: 10;
+ KH2O: 5;
+ XKH2O: 60;
+ KO: 10;
+ KHO2: 5;
+ XKHO2: 60;
+ LH: 15;
+ LH2O: 10;
+ XLH2O: 65;
+ LO: 10;
+ LHO2: 5;
+ XLHO2: 60;
+ ZH: 20;
+ ZH2O: 40;
+ XZH2O: 160;
+ ZO: 10;
+ ZHO2: 5;
+ XZHO2: 60;
+ GH: 10;
+ GH2O: 15;
+ XGH2O: 80;
+ GO: 10;
+ GHO2: 30;
+ XGHO2: 150;
+};
+
+declare const BOOSTS: {
+ [part: string]: { [boost: string]: { [action: string]: number } };
+ work: {
+ UO: {
+ harvest: 3;
+ };
+ UHO2: {
+ harvest: 5;
+ };
+ XUHO2: {
+ harvest: 7;
+ };
+ LH: {
+ build: 1.5;
+ repair: 1.5;
+ };
+ LH2O: {
+ build: 1.8;
+ repair: 1.8;
+ };
+ XLH2O: {
+ build: 2;
+ repair: 2;
+ };
+ ZH: {
+ dismantle: 2;
+ };
+ ZH2O: {
+ dismantle: 3;
+ };
+ XZH2O: {
+ dismantle: 4;
+ };
+ GH: {
+ upgradeController: 1.5;
+ };
+ GH2O: {
+ upgradeController: 1.8;
+ };
+ XGH2O: {
+ upgradeController: 2;
+ };
+ };
+ attack: {
+ UH: {
+ attack: 2;
+ };
+ UH2O: {
+ attack: 3;
+ };
+ XUH2O: {
+ attack: 4;
+ };
+ };
+ ranged_attack: {
+ KO: {
+ rangedAttack: 2;
+ rangedMassAttack: 2;
+ };
+ KHO2: {
+ rangedAttack: 3;
+ rangedMassAttack: 3;
+ };
+ XKHO2: {
+ rangedAttack: 4;
+ rangedMassAttack: 4;
+ };
+ };
+ heal: {
+ LO: {
+ heal: 2;
+ rangedHeal: 2;
+ };
+ LHO2: {
+ heal: 3;
+ rangedHeal: 3;
+ };
+ XLHO2: {
+ heal: 4;
+ rangedHeal: 4;
+ };
+ };
+ carry: {
+ KH: {
+ capacity: 2;
+ };
+ KH2O: {
+ capacity: 3;
+ };
+ XKH2O: {
+ capacity: 4;
+ };
+ };
+ move: {
+ ZO: {
+ fatigue: 2;
+ };
+ ZHO2: {
+ fatigue: 3;
+ };
+ XZHO2: {
+ fatigue: 4;
+ };
+ };
+ tough: {
+ GO: {
+ damage: 0.7;
+ };
+ GHO2: {
+ damage: 0.5;
+ };
+ XGHO2: {
+ damage: 0.3;
+ };
+ };
+};
+
+declare const INTERSHARD_RESOURCES: InterShardResourceConstant[];
+
+declare const COMMODITIES: Record<
+ CommodityConstant | MineralConstant | RESOURCE_GHODIUM | RESOURCE_ENERGY,
+ {
+ level?: number;
+ amount: number;
+ cooldown: number;
+ components: Record<
+ | DepositConstant
+ | CommodityConstant
+ | MineralConstant
+ | RESOURCE_ENERGY
+ | RESOURCE_GHODIUM,
+ number
+ >;
+ }
+>;
+
+declare const LOOK_CREEPS: LOOK_CREEPS;
+declare const LOOK_ENERGY: LOOK_ENERGY;
+declare const LOOK_RESOURCES: LOOK_RESOURCES;
+declare const LOOK_SOURCES: LOOK_SOURCES;
+declare const LOOK_MINERALS: LOOK_MINERALS;
+declare const LOOK_DEPOSITS: LOOK_DEPOSITS;
+declare const LOOK_STRUCTURES: LOOK_STRUCTURES;
+declare const LOOK_FLAGS: LOOK_FLAGS;
+declare const LOOK_CONSTRUCTION_SITES: LOOK_CONSTRUCTION_SITES;
+declare const LOOK_NUKES: LOOK_NUKES;
+declare const LOOK_TERRAIN: LOOK_TERRAIN;
+declare const LOOK_TOMBSTONES: LOOK_TOMBSTONES;
+declare const LOOK_POWER_CREEPS: LOOK_POWER_CREEPS;
+declare const LOOK_RUINS: LOOK_RUINS;
+
+declare const ORDER_SELL: ORDER_SELL;
+declare const ORDER_BUY: ORDER_BUY;
+
+declare const MARKET_MAX_ORDERS: 300;
+declare const MARKET_ORDER_LIFE_TIME: 2592000000; // 1000*60*60*24*30
+
+declare const INVADERS_ENERGY_GOAL: number;
+
+declare const SYSTEM_USERNAME: string;
+
+declare const TOMBSTONE_DECAY_PER_PART: 5;
+declare const TOMBSTONE_DECAY_POWER_CREEP: 500;
+
+declare const RUIN_DECAY: 500;
+declare const RUIN_DECAY_STRUCTURES: {
+ powerBank: 10;
+};
+
+declare const EVENT_ATTACK: EVENT_ATTACK;
+declare const EVENT_OBJECT_DESTROYED: EVENT_OBJECT_DESTROYED;
+declare const EVENT_ATTACK_CONTROLLER: EVENT_ATTACK_CONTROLLER;
+declare const EVENT_BUILD: EVENT_BUILD;
+declare const EVENT_HARVEST: EVENT_HARVEST;
+declare const EVENT_HEAL: EVENT_HEAL;
+declare const EVENT_REPAIR: EVENT_REPAIR;
+declare const EVENT_RESERVE_CONTROLLER: EVENT_RESERVE_CONTROLLER;
+declare const EVENT_UPGRADE_CONTROLLER: EVENT_UPGRADE_CONTROLLER;
+declare const EVENT_EXIT: EVENT_EXIT;
+declare const EVENT_POWER: EVENT_POWER;
+declare const EVENT_TRANSFER: EVENT_TRANSFER;
+
+declare const EVENT_ATTACK_TYPE_MELEE: EVENT_ATTACK_TYPE_MELEE;
+declare const EVENT_ATTACK_TYPE_RANGED: EVENT_ATTACK_TYPE_RANGED;
+declare const EVENT_ATTACK_TYPE_RANGED_MASS: EVENT_ATTACK_TYPE_RANGED_MASS;
+declare const EVENT_ATTACK_TYPE_DISMANTLE: EVENT_ATTACK_TYPE_DISMANTLE;
+declare const EVENT_ATTACK_TYPE_HIT_BACK: EVENT_ATTACK_TYPE_HIT_BACK;
+declare const EVENT_ATTACK_TYPE_NUKE: EVENT_ATTACK_TYPE_NUKE;
+
+declare const EVENT_HEAL_TYPE_MELEE: EVENT_HEAL_TYPE_MELEE;
+declare const EVENT_HEAL_TYPE_RANGED: EVENT_HEAL_TYPE_RANGED;
+
+declare const POWER_LEVEL_MULTIPLY: 1000;
+declare const POWER_LEVEL_POW: 2;
+declare const POWER_CREEP_SPAWN_COOLDOWN: 28800000; // 8 * 3600 * 1000
+declare const POWER_CREEP_DELETE_COOLDOWN: 86400000; // 24 * 3600 * 1000
+declare const POWER_CREEP_MAX_LEVEL: 25;
+declare const POWER_CREEP_LIFE_TIME: 5000;
+
+declare const POWER_CLASS: {
+ OPERATOR: "operator";
+};
+
+declare const PWR_GENERATE_OPS: PWR_GENERATE_OPS;
+declare const PWR_OPERATE_SPAWN: PWR_OPERATE_SPAWN;
+declare const PWR_OPERATE_TOWER: PWR_OPERATE_TOWER;
+declare const PWR_OPERATE_STORAGE: PWR_OPERATE_STORAGE;
+declare const PWR_OPERATE_LAB: PWR_OPERATE_LAB;
+declare const PWR_OPERATE_EXTENSION: PWR_OPERATE_EXTENSION;
+declare const PWR_OPERATE_OBSERVER: PWR_OPERATE_OBSERVER;
+declare const PWR_OPERATE_TERMINAL: PWR_OPERATE_TERMINAL;
+declare const PWR_DISRUPT_SPAWN: PWR_DISRUPT_SPAWN;
+declare const PWR_DISRUPT_TOWER: PWR_DISRUPT_TOWER;
+declare const PWR_DISRUPT_SOURCE: PWR_DISRUPT_SOURCE;
+declare const PWR_SHIELD: PWR_SHIELD;
+declare const PWR_REGEN_SOURCE: PWR_REGEN_SOURCE;
+declare const PWR_REGEN_MINERAL: PWR_REGEN_MINERAL;
+declare const PWR_DISRUPT_TERMINAL: PWR_DISRUPT_TERMINAL;
+declare const PWR_OPERATE_POWER: PWR_OPERATE_POWER;
+declare const PWR_FORTIFY: PWR_FORTIFY;
+declare const PWR_OPERATE_CONTROLLER: PWR_OPERATE_CONTROLLER;
+declare const PWR_OPERATE_FACTORY: PWR_OPERATE_FACTORY;
+
+declare const EFFECT_INVULNERABILITY: EFFECT_INVULNERABILITY;
+declare const EFFECT_COLLAPSE_TIMER: EFFECT_COLLAPSE_TIMER;
+
+declare const INVADER_CORE_HITS: 1000000;
+declare const INVADER_CORE_CREEP_SPAWN_TIME: {
+ 0: 0;
+ 1: 0;
+ 2: 6;
+ 3: 3;
+ 4: 2;
+ 5: 1;
+};
+declare const INVADER_CORE_EXPAND_TIME: 15000;
+declare const INVADER_CORE_CONTROLLER_POWER: 100;
+declare const INVADER_CORE_CONTROLLER_DOWNGRADE: 5000;
+declare const STRONGHOLD_RAMPART_HITS: {
+ 0: 0;
+ 1: 50000;
+ 2: 200000;
+ 3: 500000;
+ 4: 1000000;
+ 5: 2000000;
+};
+declare const STRONGHOLD_DECAY_TICKS: 150000;
+
+declare const POWER_INFO: {
+ [powerID: number]: {
+ className: PowerClassConstant;
+ level: number[];
+ cooldown: number;
+ effect?: number[];
+ range?: number;
+ ops?: number | number[];
+ duration?: number | number[];
+ };
+ [PWR_GENERATE_OPS]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [0, 2, 7, 14, 22];
+ cooldown: 50;
+ effect: [1, 2, 4, 6, 8];
+ };
+ [PWR_OPERATE_SPAWN]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [0, 2, 7, 14, 22];
+ cooldown: 300;
+ duration: 1000;
+ range: 3;
+ ops: 100;
+ effect: [0.9, 0.7, 0.5, 0.35, 0.2];
+ };
+ [PWR_OPERATE_TOWER]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [0, 2, 7, 14, 22];
+ cooldown: 10;
+ duration: 100;
+ range: 3;
+ ops: 10;
+ effect: [1.1, 1.2, 1.3, 1.4, 1.5];
+ };
+ [PWR_OPERATE_STORAGE]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [0, 2, 7, 14, 22];
+ cooldown: 800;
+ duration: 1000;
+ range: 3;
+ ops: 100;
+ effect: [500000, 1000000, 2000000, 4000000, 7000000];
+ };
+ [PWR_OPERATE_LAB]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [0, 2, 7, 14, 22];
+ cooldown: 50;
+ duration: 1000;
+ range: 3;
+ ops: 10;
+ effect: [2, 4, 6, 8, 10];
+ };
+ [PWR_OPERATE_EXTENSION]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [0, 2, 7, 14, 22];
+ cooldown: 50;
+ range: 3;
+ ops: 2;
+ effect: [0.2, 0.4, 0.6, 0.8, 1.0];
+ };
+ [PWR_OPERATE_OBSERVER]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [0, 2, 7, 14, 22];
+ cooldown: 400;
+ duration: [200, 400, 600, 800, 1000];
+ range: 3;
+ ops: 10;
+ };
+ [PWR_OPERATE_TERMINAL]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [0, 2, 7, 14, 22];
+ cooldown: 500;
+ duration: 1000;
+ range: 3;
+ ops: 100;
+ effect: [0.9, 0.8, 0.7, 0.6, 0.5];
+ };
+ [PWR_DISRUPT_SPAWN]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [0, 2, 7, 14, 22];
+ cooldown: 5;
+ range: 20;
+ ops: 10;
+ duration: [1, 2, 3, 4, 5];
+ };
+ [PWR_DISRUPT_TOWER]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [0, 2, 7, 14, 22];
+ cooldown: 0;
+ duration: 5;
+ range: 50;
+ ops: 10;
+ effect: [0.9, 0.8, 0.7, 0.6, 0.5];
+ };
+ [PWR_DISRUPT_SOURCE]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [0, 2, 7, 14, 22];
+ cooldown: 100;
+ range: 3;
+ ops: 100;
+ duration: [100, 200, 300, 400, 500];
+ };
+ [PWR_SHIELD]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [0, 2, 7, 14, 22];
+ effect: [5000, 10000, 15000, 20000, 25000];
+ duration: 50;
+ cooldown: 20;
+ energy: 100;
+ };
+ [PWR_REGEN_SOURCE]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [10, 11, 12, 14, 22];
+ cooldown: 100;
+ duration: 300;
+ range: 3;
+ effect: [50, 100, 150, 200, 250];
+ period: 15;
+ };
+ [PWR_REGEN_MINERAL]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [10, 11, 12, 14, 22];
+ cooldown: 100;
+ duration: 100;
+ range: 3;
+ effect: [2, 4, 6, 8, 10];
+ period: 10;
+ };
+ [PWR_DISRUPT_TERMINAL]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [20, 21, 22, 23, 24];
+ cooldown: 8;
+ duration: 10;
+ range: 50;
+ ops: [50, 40, 30, 20, 10];
+ };
+ [PWR_FORTIFY]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [0, 2, 7, 14, 22];
+ cooldown: 5;
+ range: 3;
+ ops: 5;
+ duration: [1, 2, 3, 4, 5];
+ };
+ [PWR_OPERATE_POWER]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [10, 11, 12, 14, 22];
+ cooldown: 800;
+ range: 3;
+ duration: 1000;
+ ops: 200;
+ effect: [1, 2, 3, 4, 5];
+ };
+ [PWR_OPERATE_CONTROLLER]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [20, 21, 22, 23, 24];
+ cooldown: 800;
+ range: 3;
+ duration: 1000;
+ ops: 200;
+ effect: [10, 20, 30, 40, 50];
+ };
+ [PWR_OPERATE_FACTORY]: {
+ className: POWER_CLASS["OPERATOR"];
+ level: [0, 2, 7, 14, 22];
+ cooldown: 1000;
+ range: 3;
+ duration: 1000;
+ ops: 100;
+ };
+};
+/**
+ * 一个正在建设中的工地。可以使用游戏界面右侧的 'Construct' 按钮创建工地或 [Room.createConstructionSite](https://screeps-cn.github.io/api/#Room.createConstructionSite) 方法。
+ *
+ * 要在工地建造一个建筑,需要给工人 creep 一些能量并执行 [Creep.build](https://screeps-cn.github.io/api/#Creep.build) 动作。
+ *
+ * 如果想移除敌人的工地,只需让一个 creep 踩在上面即可。
+ */
+interface ConstructionSite<
+ T extends BuildableStructureConstant = BuildableStructureConstant,
+> extends RoomObject {
+ readonly prototype: ConstructionSite;
+ /**
+ * 全局唯一的对象标识。你可以通过调用 [`Game.getObjectById`](https://screeps-cn.github.io/api/#Game.getObjectById) 方法取得对象实例。
+ */
+ id: Id;
+ /**
+ * 你是否拥有这个工地。
+ */
+ my: boolean;
+ /**
+ * 建筑拥有者信息。
+ */
+ owner: Owner;
+ /**
+ * 当前建造进度。
+ */
+ progress: number;
+ /**
+ * 完成建造所需的建造总进度。
+ */
+ progressTotal: number;
+ /**
+ * `STRUCTURE_*` 常量之一。
+ */
+ structureType: T;
+ /**
+ * 删除这个工地。
+ * @returns 如下错误码之一:
+ *
+ * 常量 | 值 | 描述
+ * :---- | :--- | :-----
+ * `OK` | `0` | 这个操作已经成功纳入计划。
+ * `ERR_NOT_OWNER` | `-1` | 你不是这个工地的拥有者,或者这不是你的房间。
+ */
+ remove(): number;
+}
+
+interface ConstructionSiteConstructor
+ extends _Constructor, _ConstructorById {}
+
+declare const ConstructionSite: ConstructionSiteConstructor;
+/**
+ * creep 是你的单位。
+ *
+ * creep 可以移动、采集能量、建造建筑、攻击其他 creep 以及执行其他动作。
+ *
+ * 每个 creep 都由最多 50 个身体部件构成,身体部件的类型如下:
+ *
+ * ![](https://screeps-cn.github.io/api/img/bodyparts.png)
+ *
+ * 身体部件 | 孵化成本 | 每个部件效果
+ * :---- | :--- | :-----
+ * `MOVE` | `50` | 每 tick 减少 2 点疲惫值
+ * `WORK` | `100` | 每 tick 从能量源采集 2 单位能量。
+ * || 每 tick 从矿区采集 1 单位矿物。
+ * || 每 tick 增加工地建设进度 5 点,花费 5 单位能量。
+ * || 每 tick 增加建筑 100 耐久度,花费 1 单位能量。
+ * || 每 tick 拆减建筑 50 点耐久,并返还 0.25 单位能量。
+ * || 每 tick 提高控制器升级进度 1 点,花费 1 单位能量。
+ * `CARRY` | `50` | 携带最多 50 单位资源。
+ * `ATTACK` | `80` | 对相邻的 creep 或建筑造成 30 点伤害。
+ * `RANGED_ATTACK` | `150` | 单个目标时,每 tick 对 creep 或建筑造成 10 点伤害,范围为 3 格。
+ * || 多个目标时,每 tick 对范围内所有 creep 与建筑造成 1-4-10 点伤害,具体伤害取决于距离,范围为 3 格。
+ * `HEAL` | `250` | 治疗对象可为自己或其它 creep。自愈或治疗相邻 creep 时每 tick 恢复 12 点耐久,一定距离内远程治疗每 tick 恢复 4 点耐久。
+ * `CLAIM` | `600` | 占领一个中立房间的控制器。
+ * || 每部件每 tick 使己方对中立房间控制器的预定时间增加 1 tick,或使其他玩家的预定时间减少 1 tick。
+ * || 每部件每 tick 使其他玩家控制器降级计数器加速 300 tick。
+ * || 注:拥有该部件的 creep 寿命只有 600 tick,且无法被 renew。
+ * `TOUGH` | `10` | 无附加效果,唯一作用是增加 creep 的最大耐久值。可被强化以承受更多伤害。
+ */
+interface Creep extends RoomObject {
+ readonly prototype: Creep;
+
+ /**
+ * 一个描述了该 creep 身体部件的数组,每一个数组元素都拥有如下的属性:
+ *
+ * 参数 | 类型 | 描述
+ * :---- | :--- | :-----
+ * boost | `string` \| `undefined` | 如果该身体部件被强化(boost)了,则该属性指定了强化所用的化合物类型。化合物为 `RESOURCE_*` 常量之一。
+ * type | `string` | 身体部件常量之一。
+ * hits | `number` | 该身体部件剩余的生命值。
+ */
+ body: BodyPartDefinition[];
+ /**
+ * **已废弃**
+ *
+ * 一个包含了该建筑中所存储的货物的 [`Store`](https://screeps-cn.github.io/api/#Store) 对象。
+ * @deprecated [`Creep.store`](https://screeps-cn.github.io/api/#Creep.store) 的别名。
+ */
+ carry: StoreDefinition;
+ /**
+ * **已废弃**
+ *
+ * 返回指定资源的存储容量, 对于通用型 store,当 reource 参数为 `undefined` 则返回总容量。
+ * @deprecated [`Creep.store.getCapacity()`](https://screeps-cn.github.io/api/#Store.getCapacity) 的别名。
+ */
+ carryCapacity: number;
+ /**
+ * 每次移动的疲劳值指示器,当该值大于零时 creep 无法移动。
+ */
+ fatigue: number;
+ /**
+ * 当前的 creep 生命值。
+ */
+ hits: number;
+ /**
+ * 该 creep 的最大生命值。
+ */
+ hitsMax: number;
+ /**
+ * 一个唯一的对象标识。你可以使用 [`Game.getObjectById`](https://screeps-cn.github.io/api/#Game.getObjectById) 方法获取对象实例。
+ */
+ id: Id;
+ /**
+ * 指向 `Memory.creeps[creep.name]` 的链接。你可以用它来快速访问该 creep 的特定内存对象。[点此了解更多关于 memory 的信息](https://screeps-cn.github.io/global-objects.html#Memory-object)
+ */
+ memory: CreepMemory;
+ /**
+ * 该 creep 属于您还是其他人。
+ */
+ my: boolean;
+ /**
+ * creep 的名字。您可以在创建一个新的 creep 时给它取名,名称一旦指定无法更改。此名称是 `Game.creeps` 对象中指向该 creep 对象的哈希键。你可以使用它来快速访问到该 creep。
+ */
+ name: string;
+ /**
+ * 该 creep 的所有者信息。
+ */
+ owner: Owner;
+ /**
+ * Room 对象的链接。如果对象是标志或工地并且放置在你不可见的房间中,则可能为 `undefined`。
+ */
+ room: Room;
+ /**
+ * 该 creep 是否仍在孵化中。
+ */
+ spawning: boolean;
+ /**
+ * creep 所说的最后一句话。
+ */
+ saying: string;
+ /**
+ * 一个包含了该建筑中所存储的货物的 [`Store`](https://screeps-cn.github.io/api/#Store) 对象。
+ */
+ store: StoreDefinition;
+ /**
+ * 该 creep 还有多少 tick 死亡。
+ *
+ * 当 creep 还正在孵化时,值为 `undefined`。
+ */
+ ticksToLive: number | undefined;
+ /**
+ * 使用近战攻击其他 creep、超能(power) creep 或建筑。需要 ATTACK 身体部件。如果目标在 rampart 中,则优先攻击 rampart。
+ *
+ * 目标必须与 creep 相邻,如果目标是一个带有 ATTACK 身体的 creep 并且没有自己没有在 rampart 中,则该目标会自动进行反击。
+ *
+ * @param target 要攻击的目标
+ *
+ * @returns 如下错误码之一:
+ *
+ * 常量 | 值 | 描述
+ * :---- | :--- | :-----
+ * `OK` | `0` | 这个操作已经成功纳入计划。
+ * `ERR_NOT_OWNER` | `-1` | 你不是这个 creep 的拥有者。
+ * `ERR_BUSY` | `-4` | 这个 creep 依然在孵化中。
+ * `ERR_INVALID_TARGET` | `-7` | 这个目标不是一个有效的攻击目标。
+ * `ERR_NOT_IN_RANGE` | `-9` | 目标太远了。
+ * `ERR_NO_BODYPART` | `-12` | 这个 creep 身上没有 `ATTACK` 部件。
+ */
+ attack(target: AnyCreep | Structure): CreepActionReturnCode;
+ /**
+ * 攻击时,每个 `CLAIM` 身体部件都能使得房间控制器的降级计时器降低 300 tick,或者将预定计时器降低 1 tick。
+ *
+ * 如果受到攻击的控制器已经有所属者,则接下来的 1000 tick 将无法升级(upgrade)或再次进行攻击。目标必须与 creep 相邻。
+ *
+ * @param target 目标房间控制器对象。
+ *
+ * @returns 如下错误码之一:
+ *
+ * 常量 | 值 | 描述
+ * :---- | :--- | :-----
+ * `OK` | `0` | 这个操作已经成功纳入计划。
+ * `ERR_NOT_OWNER` | `-1` | 你不是这个 creep 的拥有者。
+ * `ERR_BUSY` | `-4` | 这个 creep 依然在孵化中。
+ * `ERR_INVALID_TARGET` | `-7` | 该目标不存在有效的所属者或者预订者对象。
+ * `ERR_NOT_IN_RANGE` | `-9` | 目标太远了。
+ * `ERR_TIRED` | `-11` | 您必须等待控制器可以被再次攻击。
+ * `ERR_NO_BODYPART` | `-12` | 这个 creep 身上没有 `CLAIM` 部件。
+ */
+ attackController(target: StructureController): CreepActionReturnCode;
+ /**
+ * 使用自己携带的能量来在目标工地上建造一个建筑。需要 `WORK` 和 `CARRY` 身体部件。
+ *
+ * 目标必须位于以 creep 为中心的 7*7 正方形区域内。
+ *
+ * @param target 待建造的目标工地。
+ * @returns 如下错误码之一:
+ *
+ * 常量 | 值 | 描述
+ * :---- | :--- | :-----
+ * `OK` | `0` | 这个操作已经成功纳入计划。
+ * `ERR_NOT_OWNER` | `-1` | 你不是这个 creep 的拥有者。
+ * `ERR_BUSY` | `-4` | 这个 creep 依然在孵化中。
+ * `ERR_NOT_ENOUGH_RESOURCES` | `-6` | 这个 creep 没有携带任何能量。
+ * `ERR_INVALID_TARGET` | `-7` | 该目标不是一个有效的建筑工地(construction site)或者此处无法建造建筑(有可能是 creep 站在该地块上导致的)。
+ * `ERR_NOT_IN_RANGE` | `-9` | 目标太远了。
+ * `ERR_NO_BODYPART` | `-12` | 这个 creep 身上没有 `WORK` 部件。
+ */
+ build(
+ target: ConstructionSite,
+ ): CreepActionReturnCode | ERR_NOT_ENOUGH_RESOURCES | ERR_RCL_NOT_ENOUGH;
+ /**
+ * 取消当前 tick 中给出的某个指令。
+ * @param methodName 需要被取消的 creep 方法名。
+ * @returns 如下错误码之一:
+ *
+ * 常量 | 值 | 描述
+ * :---- | :--- | :-----
+ * `OK` | `0` | 这个操作被成功取消了。
+ * `ERR_NOT_FOUND` | `-5` | 找不到给出的指令名。
+ */
+ cancelOrder(methodName: string): OK | ERR_NOT_FOUND;
+ /**
+ * 占领一个中立的房间。
+ *
+ * 需要 CLAIM 身体部件。
+ *
+ * - 目标必须与 creep 相邻。你需要有对应的全局控制等级(Global Control Level)才能占领新的房间。
+ * - 如果你没有足够的 GCL。请考虑[预定(reserving)](https://screeps-cn.github.io/api/#reserveController) 该房间。
+ *
+ * [点击了解更多](https://screeps-cn.github.io/control.html#Global-Control-Level)
+ *
+ * @param target 目标控制中心对象。
+ * @returns 如下错误码之一:
+ *
+ * 常量 | 值 | 描述
+ * :---- | :--- | :-----
+ * `OK` | `0` | 这个操作已经成功纳入计划。
+ * `ERR_NOT_OWNER` | `-1` | 你不是这个 creep 的拥有者。
+ * `ERR_BUSY` | `-4` | 这个 creep 依然在孵化中。
+ * `ERR_NOT_ENOUGH_RESOURCES` | `-6` | 这个 creep 没有携带任何能量。
+ * `ERR_INVALID_TARGET` | `-7` | 目标不是一个有效的中立控制中心对象。
+ * `ERR_FULL` | `-8` | 你不能在新手区占领超过3个房间。
+ * `ERR_NOT_IN_RANGE` | `-9` | 目标太远了。
+ * `ERR_NO_BODYPART` | `-12` | 这个 creep 身上没有 `CLAIM` 部件。
+ * `ERR_GCL_NOT_ENOUGH` | `-15` | 你的全局控制等级不足。
+ */
+ claimController(
+ target: StructureController,
+ ): CreepActionReturnCode | ERR_FULL | ERR_GCL_NOT_ENOUGH;
+ /**
+ * 拆解任意可以建造的建筑(即使是敌人的)并且返回 50% 其修理所花的能量。
+ *
+ * 需要 `WORK` 身体部件。如果 creep 有空余的 `CARRY` 身体部件,则会直接将能量转移进去;否则能量将掉落在地上。
+ *
+ * 目标必须与 creep 相邻。
+ * @param target 目标建筑。
+ */
+ dismantle(target: Structure): CreepActionReturnCode;
+ /**
+ * 将资源丢弃到地上。
+ * @param resourceType `RESOURCE_*` 常量之一。
+ * @param amount 丢弃资源的数量。如果没有这个参数,丢弃全部资源。
+ */
+ drop(
+ resourceType: ResourceConstant,
+ amount?: number,
+ ): OK | ERR_NOT_OWNER | ERR_BUSY | ERR_NOT_ENOUGH_RESOURCES;
+ /**
+ * 向房间控制器添加一个新的安全模式激活次数。creep 必须与房间控制器相邻并且带有 1000 ghodium 资源。
+ * @param target 目标控制中心。
+ * @returns
+ * 如下错误码之一:
+ *
+ * 常量 | 值 | 描述
+ * :---- | :--- | :-----
+ * `OK` | `0` | 这个操作已经成功纳入计划。
+ * `ERR_NOT_OWNER` | `-1` | 你不是这个 creep 的拥有者。
+ * `ERR_BUSY` | `-4` | 这个 creep 依然在孵化中。
+ * `ERR_NOT_ENOUGH_RESOURCES` | `-6` | 这个 creep 没有足够的 ghodium。
+ * `ERR_INVALID_TARGET` | `-7` | 目标不是一个有效的控制中心对象。
+ * `ERR_NOT_IN_RANGE` | `-9` | 目标太远了。
+ */
+ generateSafeMode(target: StructureController): CreepActionReturnCode;
+ /**
+ * 获取指定类型可用的身体部件数量。完全毁坏的部件不会被计算。
+ * @param type 一个身体部件类型,下列身体部件类型常量之一:`MOVE`, `WORK`, `CARRY`, `ATTACK`, `RANGED_ATTACK`, `HEAL`, `TOUGH`, `CLAIM`
+ */
+ getActiveBodyparts(type: BodyPartConstant): number;
+ /**
+ * 从 source 中采集能量或者从 mineral 或 deposit 中采集资源。
+ *
+ * 需要 `WORK` 身体部件。
+ *
+ * 如果 creep 有空余的 `CARRY` 身体,则会自动将采集到的资源转移进去;否则将会掉落在地上。
+ *
+ * 目标必须与 creep 相邻。
+ * @param target 要采集的对象。
+ * @returns
+ * 如下错误码之一:
+ *
+ * 常量 | 值 | 描述
+ * :---- | :--- | :-----
+ * `OK` | `0` | 这个操作已经成功纳入计划。
+ * `ERR_NOT_OWNER` | `-1` | 你不是该 creep 的所有者,或者其他玩家已经占领或者预定了该房间的控制器。
+ * `ERR_BUSY` | `-4` | 这个 creep 依然在孵化中。
+ * `ERR_NOT_FOUND` | `-5` | 未找到 extractor。你必须建造一个 extractor 来开采矿物。[了解更多](https://screeps-cn.github.io/minerals.html)
+ * `ERR_NOT_ENOUGH_RESOURCES` | `-6` | 目标中已经没有可采集的能量或者矿物。
+ * `ERR_INVALID_TARGET` | `-7` | 目标不是有效的 source 或者 mineral 对象。
+ * `ERR_NOT_IN_RANGE` | `-9` | 目标太远了。
+ * `ERR_TIRED` | `-11` | extractor 仍在冷却中。
+ * `ERR_NO_BODYPART` | `-12` | 这个 creep 身上没有 `WORK` 部件。
+ */
+ harvest(
+ target: Source | Mineral | Deposit,
+ ): CreepActionReturnCode | ERR_NOT_FOUND | ERR_NOT_ENOUGH_RESOURCES;
+ /**
+ * 治疗自己或者其他 creep。这将恢复目标 creep 受损身体部件的功能,并恢复已损失的生命值(hits)。
+ *
+ * 需要 `HEAL` 身体部件。
+ *
+ * 目标必须与 creep 相邻。
+ * @param target 目标 creep 对象。
+ * @returns
+ * 如下错误码之一:
+ *
+ * 常量 | 值 | 描述
+ * :---- | :--- | :-----
+ * `OK` | `0` | 这个操作已经成功纳入计划。
+ * `ERR_NOT_OWNER` | `-1` | 你不是这个 creep 的拥有者。
+ * `ERR_BUSY` | `-4` | 这个 creep 依然在孵化中。
+ * `ERR_INVALID_TARGET` | `-7` | 目标不是有效的 creep 对象。
+ * `ERR_NOT_IN_RANGE` | `-9` | 目标太远了。
+ * `ERR_NO_BODYPART` | `-12` | 这个 creep 身上没有 `HEAL` 部件。
+ */
+ heal(target: AnyCreep): CreepActionReturnCode;
+ /**
+ * 使 creep 朝指定方向移动一个地块。
+ *
+ * 需要 `MOVE` 身体部件,或者其他 creep 在其附近并拉动该 creep。
+ *
+ * 如果你对着一个相邻 creep 调用了 move 方法,将会使本 creep 跳过 `ERR_TIRED` 和 `ERR_NO_BODYPART` 检查; 否则将跳过 `ERR_NOT_IN_RANGE` 检查。
+ * @param direction 一个相邻的 creep 或者下列常量之一:
+ * - `TOP`
+ * - `TOP_LEFT`
+ * - `RIGHT`
+ * - `BOTTOM_RIGHT`
+ * - `BOTTOM`
+ * - `BOTTOM_LEFT`
+ * - `LEFT`
+ * - `TOP_LEFT`
+ * @returns
+ * 如下错误码之一:
+ *
+ * 常量 | 值 | 描述
+ * :---- | :--- | :-----
+ * `OK` | `0` | 这个操作已经成功纳入计划。
+ * `ERR_NOT_OWNER` | `-1` | 你不是这个 creep 的拥有者。
+ * `ERR_BUSY` | `-4` | 这个 creep 依然在孵化中。
+ * `ERR_NOT_IN_RANGE` | `-9` | 目标 creep 距离过远。
+ * `ERR_INVALID_ARGS` | `-10` | 提供的方向不正确。
+ * `ERR_TIRED` | `-11` | 该 creep 的疲劳(fatigue)计数器不为零。
+ * `ERR_NO_BODYPART` | `-12` | 该 creep 没有 `MOVE` 身体部件。
+ */
+ move(direction: DirectionConstant): CreepMoveReturnCode;
+ move(
+ target: Creep,
+ ): OK | ERR_NOT_OWNER | ERR_BUSY | ERR_NOT_IN_RANGE | ERR_INVALID_ARGS;
+ /**
+ * 使用预先定义的路径进行移动。需要 `MOVE` 身体部件。
+ * @param path 从 [`Room.findPath`](https://screeps-cn.github.io/api/#Room.findPath),
+ * [`RoomPosition.findPathTo`](https://screeps-cn.github.io/api/#RoomPosition.findPathTo)
+ * 或 [`PathFinder.search`](https://screeps-cn.github.io/api/#PathFinder.search) 方法返回的路径值,数组或序列字符串形式都可接受。
+ */
+ moveByPath(
+ path: PathStep[] | RoomPosition[] | string,
+ ): CreepMoveReturnCode | ERR_NOT_FOUND | ERR_INVALID_ARGS;
+ /**
+ * 在本房间内查询到目标的最佳路径并向目标移动。
+ * 该方法是 [`pos.findPathTo()`](https://screeps-cn.github.io/api/#RoomPosition.findPathTo) 与 [`move()`](https://screeps-cn.github.io/api/#Creep.move) 的调用简写。
+ * 如果目标在其他房间,则相应的出口将被当做目标(在本房间中)。
+ *
+ * 需要 `MOVE` 身体部件。
+ * @param x 目标在 creep 所在房间中的 x 坐标。
+ * @param y 目标在 creep 所在房间中的 y 坐标。
+ * @param opts 可选的附加对象信息
+ */
+ moveTo(
+ x: number,
+ y: number,
+ opts?: MoveToOpts,
+ ): CreepMoveReturnCode | ERR_NO_PATH | ERR_INVALID_TARGET;
+ /**
+ * 在本房间内查询到目标的最佳路径并向目标移动。
+ * 该方法是 [`pos.findPathTo()`](https://screeps-cn.github.io/api/#RoomPosition.findPathTo) 与 [`move()`](https://screeps-cn.github.io/api/#Creep.move) 的调用简写。
+ * 如果目标在其他房间,则相应的出口将被当做目标(在本房间中)。
+ *
+ * 需要 `MOVE` 身体部件。
+ * @param target 可以是 [`RoomPosition`](https://screeps-cn.github.io/api/#RoomPosition) 对象或者任何包含 `RoomPosition` 属性的对象。该位置不必和 creep 在同一房间。
+ * @param opts 可选的附加对象信息
+ */
+ moveTo(
+ target: RoomPosition | { pos: RoomPosition },
+ opts?: MoveToOpts,
+ ): CreepMoveReturnCode | ERR_NO_PATH | ERR_INVALID_TARGET | ERR_NOT_FOUND;
+ /**
+ * 当 creep 受到攻击时切换自动通知。通知将发送到您的帐户邮箱。默认情况下启用。
+ * @param enabled 是否启用通知。
+ */
+ notifyWhenAttacked(
+ enabled: boolean,
+ ): OK | ERR_NOT_OWNER | ERR_BUSY | ERR_INVALID_ARGS;
+ /**
+ * 捡起一个物品 (如捡起一些能量)。需要 `CARRY` 身体部件。目标必须与 creep 相邻或者和 creep 在相同位置。
+ * @param target 要捡起的目标对象。
+ */
+ pickup(target: Resource): CreepActionReturnCode | ERR_FULL;
+ /**
+ * 帮助其他 creep 跟随该 creep。目标 creep 移动产生的疲劳值将由该 creep 承担。
+ *
+ * 需要 `MOVE` 身体部件。目标必须与 creep 相邻。该 creep 必须[移动](https://screeps-cn.github.io/api/#Creep.move)到其他地方,目标 creep 也必须朝该 creep 移动。
+ * @param target 目标 creep。
+ */
+ pull(
+ target: Creep,
+ ):
+ | OK
+ | ERR_NOT_OWNER
+ | ERR_BUSY
+ | ERR_INVALID_TARGET
+ | ERR_NOT_IN_RANGE
+ | ERR_NO_BODYPART;
+ /**
+ * 远程攻击其他 creep 或者建筑。
+ *
+ * 需要 `RANGED_ATTACK` 身体部件。如果目标在 rampart 中,则 rampart 将被优先攻击。
+ *
+ * 目标必须位于以 creep 为中心的 7*7 正方形区域内。
+ * @param target 要攻击的目标。
+ */
+ rangedAttack(target: AnyCreep | Structure): CreepActionReturnCode;
+ /**
+ * 远程治疗其他 creep。
+ *
+ * 这将恢复目标 creep 受损身体部件的功能,并恢复已损失的生命值(hits)。
+ *
+ * 需要 `HEAL` 身体部件。目标必须位于以 creep 为中心的 7*7 正方形区域内。
+ * @param target 目标 creep 对象。
+ */
+ rangedHeal(target: AnyCreep): CreepActionReturnCode;
+ /**
+ * 对以该 creep 为中心,3 格范围内的所有敌方 creep 和建筑进行攻击。
+ *
+ * 需要 `RANGED_ATTACK` 身体部件。
+ *
+ * 对目标造成的伤害随距离的增加而衰减。友方单位不会受到影响。
+ */
+ rangedMassAttack(): OK | ERR_NOT_OWNER | ERR_BUSY | ERR_NO_BODYPART;
+ /**
+ * 使用携带的能量修复受损建筑。需要 `WORK` 和 `CARRY` 身体部件。目标必须位于以 creep 为中心的 7*7 正方形区域内。
+ * @param target 要修复的目标建筑。
+ */
+ repair(target: Structure): CreepActionReturnCode | ERR_NOT_ENOUGH_RESOURCES;
+ /**
+ * 暂时阻止其他玩家占领该房间控制器并且将 source 的能量上限恢复至正常容量。
+ *
+ * 每 tick 执行该命令都可以让控制器的不可占领时间增加,增加的 tick 等同于 `CLAIM` 身体部件的数量。
+ *
+ * 最大的预定时间为 5,000 tick。
+ *
+ * 目标必须与 creep 相邻。
+ * @param target 要预定的目标控制器对象。
+ */
+ reserveController(target: StructureController): CreepActionReturnCode;
+ /**
+ * 在该 creep 上显示带有指定内容的可视对话气泡。此信息只会显示 1 tick。
+ *
+ * 你可以通过 saying 属性获取说过的最后一条信息。
+ *
+ * 允许使用任何有效的 Unicode 字符。包括 emoji。
+ * @param message 要显示的信息,最长 10 字符。
+ * @param toPublic 设置为 `true` 来让其他玩家也能看到该信息。默认为 `false`。
+ */
+ say(message: string, toPublic?: boolean): OK | ERR_NOT_OWNER | ERR_BUSY;
+ /**
+ * 用对所有玩家可见的任意文本对控制器进行签名。该文本将显示在世界地图的房间 UI 中。并可通过 api 进行访问。你可以签名无主甚至敌对玩家的控制器。目标必须与 creep 相邻。传递一个空字符串来移除签名。
+ * @param target 要签名的目标控制器对象。
+ * @param text 签名文本,最多 100 字符,之后的内容将被截断。
+ */
+ signController(
+ target: StructureController,
+ text: string,
+ ): OK | ERR_BUSY | ERR_INVALID_TARGET | ERR_NOT_IN_RANGE;
+ /**
+ * 立刻杀死该 creep。
+ */
+ suicide(): OK | ERR_NOT_OWNER | ERR_BUSY;
+ /**
+ * 将资源从该 creep 转移至其他对象。目标必须与 creep 相邻。
+ * @param target 目标对象。
+ * @param resourceType `RESOURCE_*` 常量之一。
+ * @param amount 要转移的资源数量。如果省略,将转移携带的全部指定资源。
+ */
+ transfer(
+ target: AnyCreep | Structure,
+ resourceType: ResourceConstant,
+ amount?: number,
+ ): ScreepsReturnCode;
+ /**
+ * 使用携带的能量将您的控制器升级到新的等级。升级控制器将同时提高你的全局控制等级(Global Control Level)。
+ *
+ * 需要 `WORK` 和 `CARRY` 身体部件。目标必须位于以 creep 为中心的 7*7 正方形区域内。
+ *
+ * 一个完全升级的 8 级控制器每 tick 最多接受 15 能量的升级,无论 creep 的能力有没有超过。
+ * 该值限制了当前 tick 所有 creep 执行 `upgradeController` 积累的总能量值。
+ * 可以使用 [ghodium 化合物强化](https://screeps-cn.github.io/resources.html) 来提高此上限。
+ *
+ * 升级控制器会把它的 `ticksToDowngrade` 计时器提高 100 tick。该计时器必须填满才能提升控制器等级。
+ * @param target 要进行升级的目标控制器。
+ */
+ upgradeController(target: StructureController): ScreepsReturnCode;
+ /**
+ * 从建筑(structure)或是墓碑(tombstone)中拿取资源。
+ *
+ * 目标必须与 creep 相邻。
+ *
+ * 多个 creep 可以在同一 tick 里从相同对象中拿取资源。
+ *
+ * 你的 creep 同样也可以从敌对建筑/墓碑中拿取资源,如果它上面没有敌对的 rampart 的话。
+ *
+ * 此方法不应该被用来在 creep 之间转移资源。想要在 creep 之间转移,请对携带资源的 creep 执行 [`transfer`](https://screeps-cn.github.io/api/#Creep.transfer) 方法。
+ * @param target 目标对象。
+ * @param resourceType `RESOURCE_*` 常量之一。
+ * @param amount 被传递资源的数量。如果没有这个参数,传递全部可用数量的资源。
+ */
+ withdraw(
+ target: Structure | Tombstone | Ruin,
+ resourceType: ResourceConstant,
+ amount?: number,
+ ): ScreepsReturnCode;
+}
+
+interface CreepConstructor
+ extends _Constructor, _ConstructorById {}
+
+declare const Creep: CreepConstructor;
+/**
+ * 生产商品所需的稀有资源储备。可以通过带有 `WORK` 身体部位的 creep 来收获。
+ * 每次采集操作都会触发冷却时间,冷却时间会随着时间的流逝而越来越长。
+ *
+ * 点击 [本文](https://screeps-cn.github.io/resources.html) 了解更多关于 deposits 的信息。
+ */
+interface Deposit extends RoomObject {
+ /**
+ * 唯一的对象标识符。
+ *
+ * 您可以使用 [`Game.getObjectById`](https://screeps-cn.github.io/api/#Game.getObjectById) 方法通过其 id 检索对象实例。
+ */
+ id: Id;
+ /**
+ * deposit 类型, 以下常量之一: `RESOURCE_MIST`, `RESOURCE_BIOMASS`, `RESOURCE_METAL`, `RESOURCE_SILICON`
+ */
+ depositType: DepositConstant;
+ /**
+ * 下一次采集前还要冷却多少 tick。
+ */
+ cooldown: number;
+ /**
+ * 该结构上次采集的冷却时间。
+ */
+ lastCooldown: number;
+ /**
+ * 该结构还有多少 tick 就要因老化而消失。
+ */
+ ticksToDecay: number;
+}
+
+interface DepositConstructor
+ extends _Constructor, _ConstructorById {}
+
+declare const Deposit: DepositConstructor;
+/**
+ * 一个旗帜,旗帜可以用来标记房间中的一个特定的地点。旗帜只对其所有者可见。你最多只能拥有 10,000 个旗帜。
+ */
+interface Flag extends RoomObject {
+ readonly prototype: Flag;
+
+ /**
+ * 旗帜的主要颜色。`COLOR_*` 常量之一。
+ */
+ color: ColorConstant;
+ /**
+ * 指向 `Memory.flags[flag.name]` 的链接。你可以使用它来快速访问到该旗帜的内存数据对象。
+ */
+ memory: FlagMemory;
+ /**
+ * 旗帜的名称。
+ *
+ * 你可以在创建新的旗帜时为其指定名字,名字一旦确定无法修改。
+ *
+ * 此名称是 `Game.flags` 对象中指向该旗帜对象的哈希键。你可以使用它来快速访问到该旗帜。名称最长不能超过 `60` 字符。
+ */
+ name: string;
+ /**
+ * 旗帜的次要颜色。`COLOR_*` 常量之一。
+ */
+ secondaryColor: ColorConstant;
+ /**
+ * 移除该旗帜。
+ * @returns 永远返回 `OK`。
+ */
+ remove(): OK;
+ /**
+ * 给旗帜设置一个新颜色
+ * @param color 旗帜的主要颜色。`COLOR_*` 常量之一。
+ * @parma secondaryColor 旗帜的次要颜色。`COLOR_*` 常量之一。
+ * @returns `OK`, `ERR_INVALID_ARGS`
+ */
+ setColor(
+ color: ColorConstant,
+ secondaryColor?: ColorConstant,
+ ): OK | ERR_INVALID_ARGS;
+ /**
+ * 给旗帜设置一个新的位置。
+ * @param x 相同房间内的 x 坐标。
+ * @param y 相同房间内的 y 坐标。
+ * @returns `OK`, `ERR_INVALID_TARGET`
+ */
+ setPosition(x: number, y: number): OK | ERR_INVALID_ARGS;
+ /**
+ * 给旗帜设置一个新的位置。
+ * @param 可以是 `RoomPosition` 对象或者任何包含 `RoomPosition` 属性的对象。
+ * @returns `OK`, `ERR_INVALID_TARGET`
+ */
+ setPosition(pos: RoomPosition | { pos: RoomPosition }): OK | ERR_INVALID_ARGS;
+}
+
+interface FlagConstructor extends _Constructor {
+ new (
+ name: string,
+ color: ColorConstant,
+ secondaryColor: ColorConstant,
+ roomName: string,
+ x: number,
+ y: number,
+ ): Flag;
+ (
+ name: string,
+ color: ColorConstant,
+ secondaryColor: ColorConstant,
+ roomName: string,
+ x: number,
+ y: number,
+ ): Flag;
+}
+
+declare const Flag: FlagConstructor;
+/**
+ * 包含所有游戏信息的主要全局游戏对象。
+ */
+interface Game {
+ /**
+ * 包含有关 CPU 使用率信息的对象:
+ */
+ cpu: CPU;
+ /**
+ * 包含你所有 creep 的 hash,并以 creep 名作为关键字。
+ */
+ creeps: { [creepName: string]: Creep };
+ /**
+ * 包含你所有 flag 的 hash,以 flag 名作为关键字。
+ */
+ flags: { [flagName: string]: Flag };
+ /**
+ * 你的[全局控制等级(Global Control Level)](https://screeps-cn.github.io/control.html#Global-Control-Level)的对象,具有以下属性:
+ *
+ * 参数 | 类型 | 描述
+ * :---- | :--- | :-----
+ * level | `number` | 当前的等级。
+ * progress | `number` | 到下一个等级当前的进展。
+ * progressTotal | `number` | 到下一个等级所需的进展。
+ */
+ gcl: GlobalControlLevel;
+ /**
+ * 你的全局能量等级(Global Power Level)的对象,具有以下属性:
+ *
+ * 参数 | 类型 | 描述
+ * :---- | :--- | :-----
+ * level | `number` | 当前的等级。
+ * progress | `number` | 到下一个等级当前的进展。
+ * progressTotal | `number` | 到下一个等级所需的进展。
+ */
+ gpl: GlobalPowerLevel;
+ /**
+ * 表示世界地图的全局对象。请参照此[文档](https://screeps-cn.github.io/api/#Game-map)。
+ */
+ map: GameMap;
+ /**
+ * 表示游戏内市场的全局对象。请参照此[文档](https://screeps-cn.github.io/api/#Game-market)。
+ */
+ market: Market;
+ /**
+ * 包含你所有超能 creep 的 hash,以 creep 名称为键。从这里也可以访问到未孵化的超能 creep。
+ */
+ powerCreeps: { [creepName: string]: PowerCreep };
+ /**
+ * 表示你账户中全局资源的对象,例如 pixel 或 cpu unlock。每个对象的关键字都是一个资源常量,值是资源量。
+ */
+ resources: { [key: string]: any };
+ /**
+ * 包含所有对你可用的房间的 hash,以房间名作为关键字。一个房间在你有一个 creep 或者自有建筑在其中时可见。
+ */
+ rooms: { [roomName: string]: Room };
+ /**
+ * 包含你所有 spawn 的 hash,以 spawn 名作为关键字。
+ */
+ spawns: { [spawnName: string]: StructureSpawn };
+ /**
+ * 包含你所有 structures 的 hash,以 structures 名作为关键字。
+ */
+ structures: { [structureId: string]: Structure };
+
+ /**
+ * 包含你所有施工工地的 hash,并以 id 作为关键字。
+ */
+ constructionSites: { [constructionSiteId: string]: ConstructionSite };
+
+ /**
+ * 表示当前正在执行脚本的 shard 的对象。
+ */
+ shard: Shard;
+
+ /**
+ * 系统游戏 tick 计数。他在每个 tick 自动递增。点此[了解更多](https://screeps-cn.github.io/game-loop.html)。
+ */
+ time: number;
+
+ /**
+ * 获取具有唯一指定 ID 的对象。 它可以是任何类型的游戏对象。 只能访问您可见的房间内的物体。
+ * @param id The unique identifier.
+ * @returns 返回一个对象实例,若找不到则返回 `null`。
+ */
+ getObjectById(id: Id): T | null;
+
+ /**
+ * 获取具有唯一指定 ID 的对象。 它可以是任何类型的游戏对象。 只能访问您可见的房间内的物体。
+ * @param id The unique identifier.
+ * @returns 返回一个对象实例,若找不到则返回 `null`。
+ * @deprecated Use `Id`, instead of strings, to increase type safety
+ */
+ // eslint-disable-next-line @typescript-eslint/unified-signatures
+ getObjectById(id: string): T | null;
+
+ /**
+ * 向你的个人资料中的邮件发送信息。
+ *
+ * 由此,你可以在游戏中的任何场合为自己设置通知
+ *
+ * 你最多可以安排 20 个通知。在模拟模式中不可用。
+ *
+ * @param 将在消息中发送的自定义文本。最大长度为 `1000` 个字符。
+ * @param 如果被设为 `0` (默认), 通知将被立即安排。否早他将于其他通知编组,并在指定的时间(分钟)寄出。
+ */
+ notify(message: string, groupInterval?: number): undefined;
+}
+
+declare let Game: Game;
+interface _HasId {
+ id: Id;
+}
+
+interface _HasRoomPosition {
+ pos: RoomPosition;
+}
+
+interface GlobalControlLevel {
+ /**
+ * 当前的等级。
+ */
+ level: number;
+ /**
+ * 到下一个等级当前的进展。
+ */
+ progress: number;
+ /**
+ * 到下一个等级所需的进展。
+ */
+ progressTotal: number;
+}
+
+interface GlobalPowerLevel {
+ /**
+ * 当前的等级。
+ */
+ level: number;
+ /**
+ * 到下一个等级当前的进展。
+ */
+ progress: number;
+ /**
+ * 到下一个等级所需的进展。
+ */
+ progressTotal: number;
+}
+
+interface Shard {
+ /**
+ * shard 的名称。
+ */
+ name: string;
+ /**
+ * 目前总是等于 normal.
+ */
+ type: "normal";
+ /**
+ * 这个 shard 是否为 [PTR](https://screeps-cn.github.io/ptr.html).
+ */
+ ptr: boolean;
+}
+
+interface CPU {
+ /**
+ * 你在当前指定 shard 的 CPU 限制。
+ */
+ limit: number;
+ /**
+ * 当前游戏 tick 可用的 CPU 时间。通常它高于 `Game.cpu.limit`.
+ * @see https://screeps-cn.github.io/cpu-limit.html
+ */
+ tickLimit: number;
+ /**
+ * 在你的 bucket 中累积的未使用的 CPU 数量。
+ * @see https://screeps-cn.github.io/cpu-limit.html#Bucket
+ */
+ bucket: number;
+ /**
+ * 包含了每个 shard cpu 上限的对象,以 shard 名称为关键字。你可以使用 `setShardLimits` 方法重设他们。
+ */
+ shardLimits: CPUShardLimits;
+ /**
+ * 您的账户是否已经解锁了完整的 CPU。
+ */
+ unlocked: boolean;
+ /**
+ * 您账户解锁完整 CPU 时的 UNIX 毫秒时间戳。当您账户的完整 CPU 未解锁或未使用 subscription 时该属性未定义。
+ */
+ unlockedTime: number | undefined;
+
+ /**
+ * 获取当前游戏开始时使用的 CPU 时间总量。在模拟模式下始终返回 `0`。
+ */
+ getUsed(): number;
+ /**
+ * 分配 CPU 限制到不同的 shard。CPU 总量应保持等于 `Game.cpu.shardLimits`。此方法每 12 小时只能使用一次。
+ *
+ * @param limits 表示每个 shard 的 CPU 值,与 `Game.cpu.shardLimits` 格式相同。
+ * @returns `OK | ERR_BUSY | ERR_INVALID_ARGS`
+ */
+ setShardLimits(limits: CPUShardLimits): OK | ERR_BUSY | ERR_INVALID_ARGS;
+
+ /**
+ * **这个方法只在虚拟机在你的账户运行时设置中被设为 Isolated 时可用**
+ *
+ * 使用此方法获取虚拟机的堆统计信息。
+ * 返回值几乎与 Node.js 函数 `v8.getHeapStatistics()` 相同。 此函数返回一个附加属性:`externally_allocated_size`,它是当前分配的内存总量,不包含在 v8 堆中,但会计入此隔离的内存限制。
+ * 超过一定大小的 `ArrayBuffer` 实例是外部分配的,将在此计算。
+ */
+ getHeapStatistics?(): HeapStatistics;
+
+ /**
+ * **这个方法只在虚拟机在你的账户运行时设置中被设为 Isolated 时可用**
+ *
+ * 重置你的运行环境并擦除堆内存中的所有数据。
+ */
+ halt?(): never;
+ /**
+ * 从您的 bucket 中取出 5000 CPU 来生成一点 pixel 资源。
+ */
+ generatePixel(): OK | ERR_NOT_ENOUGH_RESOURCES;
+
+ /**
+ * 为您的账户解锁 24 小时的完整 CPU。
+ * 该方法将消耗一个您账户中的 CPU unlock(详见 Game.resources)。
+ * 如果之前尚未激活过完整 CPU。则可能需要一点时间(5 分钟之内)来为您的账户应用解锁。
+ */
+ unlock(): OK | ERR_NOT_ENOUGH_RESOURCES | ERR_FULL;
+}
+
+interface HeapStatistics {
+ total_heap_size: number;
+ total_heap_size_executable: number;
+ total_physical_size: number;
+ total_available_size: number;
+ used_heap_size: number;
+ heap_size_limit: number;
+ malloced_memory: number;
+ peak_malloced_memory: number;
+ does_zap_garbage: 0 | 1;
+ externally_allocated_size: number;
+}
+
+/**
+ * creep 身体部件的描述
+ */
+type BodyPartDefinition =
+ T extends any ? {
+ /**
+ * `RESOURCE_*` 常量之一
+ *
+ * 如果该身体部件被强化(boost)了,则该属性指定了强化所用的化合物类型。[了解更多](https://screeps-cn.github.io/resources.html)。
+ */
+ boost?: keyof typeof BOOSTS[T];
+ /**
+ * 身体部件常量之一。
+ */
+ type: T;
+ /**
+ * 该身体部件剩余的生命值。
+ */
+ hits: number;
+ }
+ : never;
+
+interface Owner {
+ /**
+ * 拥有者姓名。
+ */
+ username: string;
+}
+interface ReservationDefinition {
+ /** 预定了该房间的玩家名称。 */
+ username: string;
+ /** 预定时间还有多少 tick 结束。 */
+ ticksToEnd: number;
+}
+interface SignDefinition {
+ /** 将控制器签名的玩家名称。 */
+ username: string;
+ /** 签名的文本内容。 */
+ text: string;
+ /** 进行签名的游戏 tick 时间。 */
+ time: number;
+ /** 进行签名的现实时间。 */
+ datetime: Date;
+}
+
+interface CPUShardLimits {
+ [shard: string]: number;
+}
+
+/** A general purpose Store, which has a limited capacity */
+type StoreDefinition = Store;
+
+/** A general purpose Store, which has an unlimited capacity */
+type StoreDefinitionUnlimited = Store;
+
+// type SD = {
+// [P in K]: number;
+// energy: number;
+// }
+
+type ExitsInformation = Partial>;
+
+interface AllLookAtTypes {
+ constructionSite: ConstructionSite;
+ creep: Creep;
+ energy: Resource;
+ exit: any; // TODO what type is this?
+ flag: Flag;
+ mineral: Mineral;
+ deposit: Deposit;
+ nuke: Nuke;
+ resource: Resource;
+ source: Source;
+ structure: Structure;
+ terrain: Terrain;
+ tombstone: Tombstone;
+ powerCreep: PowerCreep;
+ ruin: Ruin;
+}
+
+type LookAtTypes = Partial;
+
+type LookAtResult =
+ & Pick
+ & { type: K };
+
+type LookAtResultWithPos =
+ & LookAtResult
+ & {
+ x: number;
+ y: number;
+ };
+
+interface LookAtResultMatrix {
+ [y: number]: {
+ [x: number]: LookAtResult[];
+ };
+}
+
+interface LookForAtAreaResultMatrix<
+ T,
+ K extends keyof LookAtTypes = keyof LookAtTypes,
+> {
+ [y: number]: {
+ [x: number]: LookForAtAreaResult[];
+ };
+}
+
+type LookForAtAreaResult = {
+ type: K;
+} & { [P in K]: T };
+
+type LookForAtAreaResultWithPos<
+ T,
+ K extends keyof LookAtTypes = keyof LookAtTypes,
+> = LookForAtAreaResult & {
+ x: number;
+ y: number;
+};
+
+type LookForAtAreaResultArray<
+ T,
+ K extends keyof LookAtTypes = keyof LookAtTypes,
+> = LookForAtAreaResultWithPos[];
+
+interface FindTypes {
+ [key: number]:
+ | RoomPosition
+ | AnyCreep
+ | Source
+ | Resource
+ | Structure
+ | Flag
+ | ConstructionSite
+ | Mineral
+ | Nuke
+ | Tombstone
+ | Deposit
+ | Ruin;
+ 1: RoomPosition; // FIND_EXIT_TOP
+ 3: RoomPosition; // FIND_EXIT_RIGHT
+ 5: RoomPosition; // FIND_EXIT_BOTTOM
+ 7: RoomPosition; // FIND_EXIT_LEFT
+ 10: RoomPosition; // FIND_EXIT
+ 101: Creep; // FIND_CREEPS
+ 102: Creep; // FIND_MY_CREEPS
+ 103: Creep; // FIND_HOSTILE_CREEPS
+ 104: Source; // FIND_SOURCES_ACTIVE
+ 105: Source; // FIND_SOURCES
+ 106: Resource; // FIND_DROPPED_RESOURCES
+ 107: AnyStructure; // FIND_STRUCTURES
+ 108: AnyOwnedStructure; // FIND_MY_STRUCTURES
+ 109: AnyOwnedStructure; // FIND_HOSTILE_STRUCTURES
+ 110: Flag; // FIND_FLAGS
+ 111: ConstructionSite; // FIND_CONSTRUCTION_SITES
+ 112: StructureSpawn; // FIND_MY_SPAWNS
+ 113: StructureSpawn; // FIND_HOSTILE_SPAWNS
+ 114: ConstructionSite; // FIND_MY_CONSTRUCTION_SITES
+ 115: ConstructionSite; // FIND_HOSTILE_CONSTRUCTION_SITES
+ 116: Mineral; // FIND_MINERALS
+ 117: Nuke; // FIND_NUKES
+ 118: Tombstone; // FIND_TOMBSTONES
+ 119: PowerCreep; // FIND_POWER_CREEPS
+ 120: PowerCreep; // FIND_MY_POWER_CREEPS
+ 121: PowerCreep; // FIND_HOSTILE_POWER_CREEPS
+ 122: Deposit; // FIND_DEPOSITS
+ 123: Ruin; // FIND_RUINS
+}
+
+interface FindPathOpts {
+ /**
+ * 将其他 creep 所处的地块视作可通行的。在附件有大量移动的 creep 或者其他一些情况时会很有用。默认值为 `false`。
+ */
+ ignoreCreeps?: boolean;
+
+ /**
+ * 将可破坏的建筑 (constructed walls, ramparts, spawns, extensions) 所在的地块视作可通行的。默认为 `false`。
+ */
+ ignoreDestructibleStructures?: boolean;
+
+ /**
+ * 无视道路。启用该项将加快搜索速度。默认值为 `false`。仅当新的 [`PathFinder`](https://screeps-cn.github.io/api/#PathFinder) 启用时才可用。
+ */
+ ignoreRoads?: boolean;
+
+ /**
+ * 你可以使用该回调在搜索过程中为任意房间修改 `CostMatrix`。
+ *
+ * 回调接受两个参数,`roomName` 和 `costMatrix`。
+ *
+ * 使用 `costMatrix` 实例来修改地形移动成本。如果你从回调中返回了一个新的 matrix。它将会代替内置的缓存 matrix。
+ *
+ * 仅当新的 `PathFinder` 启用时才可用。
+ * @param roomName 房间名
+ * @param costMatrix 当前的地形移动成本 `CostMatrix`
+ * @returns 修改后的新的地形移动成本 `CostMatrix`
+ */
+ costCallback?(roomName: string, costMatrix: CostMatrix): void | CostMatrix;
+
+ /**
+ * 一个数组,其元素为房间中的对象或者 `RoomPosition` 对象,在搜索时会将该数组中的对象位置视作可通行的地块。当启用新的 `PathFinder` 时无法使用。(请用 `costCallback` 选项代替)。
+ */
+ ignore?: any[] | RoomPosition[];
+
+ /**
+ * 一个数组,其元素为房间中的对象或者 `RoomPosition` 对象,在搜索时会将该数组中的对象位置视作无法通行的地块。当启用新的 `PathFinder` 时无法使用。(请用 `costCallback` 选项代替)。
+ */
+ avoid?: any[] | RoomPosition[];
+
+ /**
+ * 用于寻路的消耗上限。你可以限制在寻路上花费的 CPU 时间,基于 1 op ~ 0.001 CPU 的比例。默认值为 `2000`。
+ */
+ maxOps?: number;
+
+ /**
+ * 应用于 A* 算法 `F = G + weight * H` 中的启发式权重(weight)。在使用该选项之前您最好已经了解了 A* 算法的底层实现!默认值为 `1.2`。
+ */
+ heuristicWeight?: number;
+
+ /**
+ * 如果为 `true`,将会使用 `Room.serializePath` 对结果路径进行序列化。默认值为 `false`。
+ */
+ serialize?: boolean;
+
+ /**
+ * 寻路所允许的最大房间数。默认值为 `16`。仅当新的 [`PathFinder`](https://screeps-cn.github.io/api/#PathFinder) 启用时才可用。
+ */
+ maxRooms?: number;
+
+ /**
+ * 找到到达位于目标指定线性区域内位置的路径。默认值为 `0`.
+ */
+ range?: number;
+
+ /**
+ * 平原地形的移动成本。默认为 `1`。
+ */
+ plainCost?: number;
+
+ /**
+ * 沼泽地形的移动成本。默认为 `5`。
+ */
+ swampCost?: number;
+}
+
+interface MoveToOpts extends FindPathOpts {
+ /**
+ * 此选项将缓存前方多个 tick 将要移动的路径。该操作可以节省 cpu 时间,但是会导致 creep 的反应变慢。
+ * 路径被缓存到 creep 内存中的 `_move` 属性里。`reusePath` 的值定义了要缓存前方多少 tick 的移动路径。默认值为 `5`。
+ * 增加该值来节省更多的 CPU。减少该值来使移动更加连贯。设置为 `0` 来禁用路径重用。
+ */
+ reusePath?: number;
+
+ /**
+ * 如果 `reusePath` 启用并且该值设为 `true`,重用的路径将会使用 [Room.serializePath](https://screeps-cn.github.io/api/#Room.Room-serializePath) 进行序列化并储存在内存中。默认值为 `true`。
+ */
+ serializeMemory?: boolean;
+
+ /**
+ * 如果该选择设为 `true` 并且内存中没有重用路径时,`moveTo` 将会返回 `ERR_NOT_FOUND`。
+ * 在某些情况下,这会节省大量的 CPU 时间。默认值为 `false`。
+ */
+ noPathFinding?: boolean;
+
+ /**
+ * 使用 RoomVisual.poly 来在 creep 的移动路线上画一条线。你可以提供一个空对象或者自定义样式参数。默认的样式如下:
+ *
+ * ```css
+ * {
+ * fill: 'transparent',
+ * stroke: '#fff',
+ * lineStyle: 'dashed',
+ * strokeWidth: .15,
+ * opacity: .1
+ * }
+ * ```
+ */
+ visualizePathStyle?: PolyStyle;
+}
+
+interface PathStep {
+ x: number;
+ dx: number;
+ y: number;
+ dy: number;
+ direction: DirectionConstant;
+}
+
+/**
+ * An object with survival game info
+ */
+interface SurvivalGameInfo {
+ /**
+ * Current score.
+ */
+ score: number;
+ /**
+ * Time to the next wave of invaders.
+ */
+ timeToWave: number;
+ /**
+ * The number of the next wave.
+ */
+ wave: number;
+}
+
+interface _Constructor {
+ readonly prototype: T;
+}
+
+interface _ConstructorById extends _Constructor {
+ new (id: Id): T;
+ (id: Id): T;
+}
+
+declare namespace Tag {
+ const OpaqueTagSymbol: unique symbol;
+
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ class OpaqueTag {
+ private [OpaqueTagSymbol]: T;
+ }
+}
+type Id = string & Tag.OpaqueTag;
+/**
+ * `InterShardMemory` 对象提供了在不同的 shard 之间通信的接口。你的脚本在不同的 shard 内是单独执行的,并且他们的 `Memory` 对象对彼此隔离。
+ * 为了在不同的 shard 之间传递信息,您需要使用 `InterShardMemory`。
+ *
+ * 每个 shard 可以拥有能被其他 shard 访问的数据字符串。每个数据字符串只有其所属的 shard 才有写权限, 而其他的 shard 只有读权限。
+ *
+ * 该数据和 `Memory` 完全不相关,它是一个独立的数据容器。
+ */
+interface InterShardMemory {
+ /**
+ * 返回当前 shard 的数据字符串内容。
+ */
+ getLocal(): string;
+ /**
+ * 将当前 shard 的数据替换为新的值。
+ * @param value 格式化为字符串的新数据。
+ */
+ setLocal(value: string): void;
+ /**
+ * 返回其他 shard 的数据字符串内容。
+ *
+ * @param shard Shard 名称。
+ * @throws Error if shard name is invalid
+ */
+ getRemote(shard: string): string | null;
+}
+
+declare const InterShardMemory: InterShardMemory;
+/*
+ * This file creates literal versions of many of the constants
+ * It should be kept in sync with constants.ts
+ */
+
+// Extras
+
+type Terrain = "plain" | "swamp" | "wall";
+
+type ExitKey = "1" | "3" | "5" | "7";
+
+type AnyCreep = Creep | PowerCreep;
+
+type FindClosestByPathAlgorithm = "astar" | "dijkstra";
+
+// Return Codes
+
+type ScreepsReturnCode =
+ | OK
+ | ERR_NOT_OWNER
+ | ERR_NO_PATH
+ | ERR_BUSY
+ | ERR_NAME_EXISTS
+ | ERR_NOT_FOUND
+ | ERR_NOT_ENOUGH_RESOURCES
+ | ERR_NOT_ENOUGH_ENERGY
+ | ERR_INVALID_TARGET
+ | ERR_FULL
+ | ERR_NOT_IN_RANGE
+ | ERR_INVALID_ARGS
+ | ERR_TIRED
+ | ERR_NO_BODYPART
+ | ERR_NOT_ENOUGH_EXTENSIONS
+ | ERR_RCL_NOT_ENOUGH
+ | ERR_GCL_NOT_ENOUGH;
+
+type OK = 0;
+type ERR_NOT_OWNER = -1;
+type ERR_NO_PATH = -2;
+type ERR_NAME_EXISTS = -3;
+type ERR_BUSY = -4;
+type ERR_NOT_FOUND = -5;
+type ERR_NOT_ENOUGH_RESOURCES = -6;
+type ERR_NOT_ENOUGH_ENERGY = -6;
+type ERR_INVALID_TARGET = -7;
+type ERR_FULL = -8;
+type ERR_NOT_IN_RANGE = -9;
+type ERR_INVALID_ARGS = -10;
+type ERR_TIRED = -11;
+type ERR_NO_BODYPART = -12;
+type ERR_NOT_ENOUGH_EXTENSIONS = -6;
+type ERR_RCL_NOT_ENOUGH = -14;
+type ERR_GCL_NOT_ENOUGH = -15;
+
+type CreepActionReturnCode =
+ | OK
+ | ERR_NOT_OWNER
+ | ERR_BUSY
+ | ERR_INVALID_TARGET
+ | ERR_NOT_IN_RANGE
+ | ERR_NO_BODYPART
+ | ERR_TIRED;
+
+type CreepMoveReturnCode =
+ | OK
+ | ERR_NOT_OWNER
+ | ERR_BUSY
+ | ERR_TIRED
+ | ERR_NO_BODYPART;
+
+// Find Constants
+
+type ExitConstant =
+ | FIND_EXIT_TOP
+ | FIND_EXIT_RIGHT
+ | FIND_EXIT_BOTTOM
+ | FIND_EXIT_LEFT;
+
+type FindConstant =
+ | FIND_EXIT_TOP
+ | FIND_EXIT_RIGHT
+ | FIND_EXIT_BOTTOM
+ | FIND_EXIT_LEFT
+ | FIND_EXIT
+ | FIND_CREEPS
+ | FIND_MY_CREEPS
+ | FIND_HOSTILE_CREEPS
+ | FIND_SOURCES_ACTIVE
+ | FIND_SOURCES
+ | FIND_DROPPED_RESOURCES
+ | FIND_STRUCTURES
+ | FIND_MY_STRUCTURES
+ | FIND_HOSTILE_STRUCTURES
+ | FIND_FLAGS
+ | FIND_CONSTRUCTION_SITES
+ | FIND_MY_SPAWNS
+ | FIND_HOSTILE_SPAWNS
+ | FIND_MY_CONSTRUCTION_SITES
+ | FIND_HOSTILE_CONSTRUCTION_SITES
+ | FIND_MINERALS
+ | FIND_NUKES
+ | FIND_TOMBSTONES
+ | FIND_POWER_CREEPS
+ | FIND_MY_POWER_CREEPS
+ | FIND_HOSTILE_POWER_CREEPS
+ | FIND_DEPOSITS
+ | FIND_RUINS;
+
+type FIND_EXIT_TOP = 1;
+type FIND_EXIT_RIGHT = 3;
+type FIND_EXIT_BOTTOM = 5;
+type FIND_EXIT_LEFT = 7;
+type FIND_EXIT = 10;
+type FIND_CREEPS = 101;
+type FIND_MY_CREEPS = 102;
+type FIND_HOSTILE_CREEPS = 103;
+type FIND_SOURCES_ACTIVE = 104;
+type FIND_SOURCES = 105;
+type FIND_DROPPED_RESOURCES = 106;
+type FIND_STRUCTURES = 107;
+type FIND_MY_STRUCTURES = 108;
+type FIND_HOSTILE_STRUCTURES = 109;
+type FIND_FLAGS = 110;
+type FIND_CONSTRUCTION_SITES = 111;
+type FIND_MY_SPAWNS = 112;
+type FIND_HOSTILE_SPAWNS = 113;
+type FIND_MY_CONSTRUCTION_SITES = 114;
+type FIND_HOSTILE_CONSTRUCTION_SITES = 115;
+type FIND_MINERALS = 116;
+type FIND_NUKES = 117;
+type FIND_TOMBSTONES = 118;
+type FIND_POWER_CREEPS = 119;
+type FIND_MY_POWER_CREEPS = 120;
+type FIND_HOSTILE_POWER_CREEPS = 121;
+type FIND_DEPOSITS = 122;
+type FIND_RUINS = 123;
+
+// Filter Options
+
+interface FilterOptions {
+ filter: FilterFunction | FilterObject | string;
+}
+type FilterFunction = (object: FindTypes[T]) => boolean;
+interface FilterObject {
+ [key: string]: any;
+}
+
+// Body Part Constants
+
+type BodyPartConstant =
+ | MOVE
+ | WORK
+ | CARRY
+ | ATTACK
+ | RANGED_ATTACK
+ | TOUGH
+ | HEAL
+ | CLAIM;
+
+type MOVE = "move";
+type WORK = "work";
+type CARRY = "carry";
+type ATTACK = "attack";
+type RANGED_ATTACK = "ranged_attack";
+type TOUGH = "tough";
+type HEAL = "heal";
+type CLAIM = "claim";
+
+// Look Constants
+
+type LookConstant =
+ | LOOK_CREEPS
+ | LOOK_ENERGY
+ | LOOK_RESOURCES
+ | LOOK_SOURCES
+ | LOOK_MINERALS
+ | LOOK_DEPOSITS
+ | LOOK_STRUCTURES
+ | LOOK_FLAGS
+ | LOOK_CONSTRUCTION_SITES
+ | LOOK_NUKES
+ | LOOK_TERRAIN
+ | LOOK_TOMBSTONES
+ | LOOK_POWER_CREEPS
+ | LOOK_RUINS;
+
+type LOOK_CONSTRUCTION_SITES = "constructionSite";
+type LOOK_CREEPS = "creep";
+type LOOK_ENERGY = "energy";
+type LOOK_FLAGS = "flag";
+type LOOK_MINERALS = "mineral";
+type LOOK_DEPOSITS = "deposit";
+type LOOK_NUKES = "nuke";
+type LOOK_RESOURCES = "resource";
+type LOOK_SOURCES = "source";
+type LOOK_STRUCTURES = "structure";
+type LOOK_TERRAIN = "terrain";
+type LOOK_TOMBSTONES = "tombstone";
+type LOOK_POWER_CREEPS = "powerCreep";
+type LOOK_RUINS = "ruin";
+
+type ORDER_SELL = "sell";
+type ORDER_BUY = "buy";
+
+// Direction Constants
+
+type DirectionConstant =
+ | TOP
+ | TOP_RIGHT
+ | RIGHT
+ | BOTTOM_RIGHT
+ | BOTTOM
+ | BOTTOM_LEFT
+ | LEFT
+ | TOP_LEFT;
+
+type TOP = 1;
+type TOP_RIGHT = 2;
+type RIGHT = 3;
+type BOTTOM_RIGHT = 4;
+type BOTTOM = 5;
+type BOTTOM_LEFT = 6;
+type LEFT = 7;
+type TOP_LEFT = 8;
+
+// Color Constants
+
+type ColorConstant =
+ | COLOR_RED
+ | COLOR_PURPLE
+ | COLOR_BLUE
+ | COLOR_CYAN
+ | COLOR_GREEN
+ | COLOR_YELLOW
+ | COLOR_ORANGE
+ | COLOR_BROWN
+ | COLOR_GREY
+ | COLOR_WHITE;
+
+type COLOR_RED = 1;
+type COLOR_PURPLE = 2;
+type COLOR_BLUE = 3;
+type COLOR_CYAN = 4;
+type COLOR_GREEN = 5;
+type COLOR_YELLOW = 6;
+type COLOR_ORANGE = 7;
+type COLOR_BROWN = 8;
+type COLOR_GREY = 9;
+type COLOR_WHITE = 10;
+
+// Structure Constants
+
+type BuildableStructureConstant =
+ | STRUCTURE_EXTENSION
+ | STRUCTURE_RAMPART
+ | STRUCTURE_ROAD
+ | STRUCTURE_SPAWN
+ | STRUCTURE_LINK
+ | STRUCTURE_WALL
+ | STRUCTURE_STORAGE
+ | STRUCTURE_TOWER
+ | STRUCTURE_OBSERVER
+ | STRUCTURE_POWER_SPAWN
+ | STRUCTURE_EXTRACTOR
+ | STRUCTURE_LAB
+ | STRUCTURE_TERMINAL
+ | STRUCTURE_CONTAINER
+ | STRUCTURE_NUKER
+ | STRUCTURE_FACTORY;
+
+type StructureConstant =
+ | BuildableStructureConstant
+ | STRUCTURE_KEEPER_LAIR
+ | STRUCTURE_CONTROLLER
+ | STRUCTURE_POWER_BANK
+ | STRUCTURE_PORTAL
+ | STRUCTURE_INVADER_CORE;
+
+type STRUCTURE_EXTENSION = "extension";
+type STRUCTURE_RAMPART = "rampart";
+type STRUCTURE_ROAD = "road";
+type STRUCTURE_SPAWN = "spawn";
+type STRUCTURE_LINK = "link";
+type STRUCTURE_WALL = "constructedWall";
+type STRUCTURE_KEEPER_LAIR = "keeperLair";
+type STRUCTURE_CONTROLLER = "controller";
+type STRUCTURE_STORAGE = "storage";
+type STRUCTURE_TOWER = "tower";
+type STRUCTURE_OBSERVER = "observer";
+type STRUCTURE_POWER_BANK = "powerBank";
+type STRUCTURE_POWER_SPAWN = "powerSpawn";
+type STRUCTURE_EXTRACTOR = "extractor";
+type STRUCTURE_LAB = "lab";
+type STRUCTURE_TERMINAL = "terminal";
+type STRUCTURE_CONTAINER = "container";
+type STRUCTURE_NUKER = "nuker";
+type STRUCTURE_FACTORY = "factory";
+type STRUCTURE_INVADER_CORE = "invaderCore";
+type STRUCTURE_PORTAL = "portal";
+
+// Terrain mask constants
+type TERRAIN_MASK_WALL = 1;
+type TERRAIN_MASK_SWAMP = 2;
+type TERRAIN_MASK_LAVA = 4;
+
+// Resource Constants
+
+type ResourceConstant =
+ | RESOURCE_ENERGY
+ | RESOURCE_POWER
+ | RESOURCE_OPS
+ | MineralConstant
+ | MineralCompoundConstant
+ | DepositConstant
+ | CommodityConstant;
+
+type _ResourceConstantSansEnergy = Exclude;
+
+/** The raw harvestable minerals */
+type MineralConstant =
+ | RESOURCE_UTRIUM
+ | RESOURCE_LEMERGIUM
+ | RESOURCE_KEANIUM
+ | RESOURCE_ZYNTHIUM
+ | RESOURCE_OXYGEN
+ | RESOURCE_HYDROGEN
+ | RESOURCE_CATALYST;
+
+/** The compounds which can't boost */
+type MineralBaseCompoundsConstant =
+ | RESOURCE_HYDROXIDE
+ | RESOURCE_ZYNTHIUM_KEANITE
+ | RESOURCE_UTRIUM_LEMERGITE
+ | RESOURCE_GHODIUM;
+
+/** The boosts (from tier 1 to tier 3) */
+type MineralBoostConstant =
+ | RESOURCE_UTRIUM_HYDRIDE
+ | RESOURCE_UTRIUM_OXIDE
+ | RESOURCE_KEANIUM_HYDRIDE
+ | RESOURCE_KEANIUM_OXIDE
+ | RESOURCE_LEMERGIUM_HYDRIDE
+ | RESOURCE_LEMERGIUM_OXIDE
+ | RESOURCE_ZYNTHIUM_HYDRIDE
+ | RESOURCE_ZYNTHIUM_OXIDE
+ | RESOURCE_GHODIUM_HYDRIDE
+ | RESOURCE_GHODIUM_OXIDE
+ | RESOURCE_UTRIUM_ACID
+ | RESOURCE_UTRIUM_ALKALIDE
+ | RESOURCE_KEANIUM_ACID
+ | RESOURCE_KEANIUM_ALKALIDE
+ | RESOURCE_LEMERGIUM_ACID
+ | RESOURCE_LEMERGIUM_ALKALIDE
+ | RESOURCE_ZYNTHIUM_ACID
+ | RESOURCE_ZYNTHIUM_ALKALIDE
+ | RESOURCE_GHODIUM_ACID
+ | RESOURCE_GHODIUM_ALKALIDE
+ | RESOURCE_CATALYZED_UTRIUM_ACID
+ | RESOURCE_CATALYZED_UTRIUM_ALKALIDE
+ | RESOURCE_CATALYZED_KEANIUM_ACID
+ | RESOURCE_CATALYZED_KEANIUM_ALKALIDE
+ | RESOURCE_CATALYZED_LEMERGIUM_ACID
+ | RESOURCE_CATALYZED_LEMERGIUM_ALKALIDE
+ | RESOURCE_CATALYZED_ZYNTHIUM_ACID
+ | RESOURCE_CATALYZED_ZYNTHIUM_ALKALIDE
+ | RESOURCE_CATALYZED_GHODIUM_ACID
+ | RESOURCE_CATALYZED_GHODIUM_ALKALIDE;
+
+/** All the mineral compounds */
+type MineralCompoundConstant =
+ | MineralBaseCompoundsConstant
+ | MineralBoostConstant;
+
+/** The raw deposits */
+type DepositConstant =
+ | RESOURCE_MIST
+ | RESOURCE_BIOMASS
+ | RESOURCE_METAL
+ | RESOURCE_SILICON;
+
+/** The commodities, produced by the Factory */
+type CommodityConstant =
+ | RESOURCE_UTRIUM_BAR
+ | RESOURCE_LEMERGIUM_BAR
+ | RESOURCE_ZYNTHIUM_BAR
+ | RESOURCE_KEANIUM_BAR
+ | RESOURCE_GHODIUM_MELT
+ | RESOURCE_OXIDANT
+ | RESOURCE_REDUCTANT
+ | RESOURCE_PURIFIER
+ | RESOURCE_BATTERY
+ | RESOURCE_COMPOSITE
+ | RESOURCE_CRYSTAL
+ | RESOURCE_LIQUID
+ | RESOURCE_WIRE
+ | RESOURCE_SWITCH
+ | RESOURCE_TRANSISTOR
+ | RESOURCE_MICROCHIP
+ | RESOURCE_CIRCUIT
+ | RESOURCE_DEVICE
+ | RESOURCE_CELL
+ | RESOURCE_PHLEGM
+ | RESOURCE_TISSUE
+ | RESOURCE_MUSCLE
+ | RESOURCE_ORGANOID
+ | RESOURCE_ORGANISM
+ | RESOURCE_ALLOY
+ | RESOURCE_TUBE
+ | RESOURCE_FIXTURES
+ | RESOURCE_FRAME
+ | RESOURCE_HYDRAULICS
+ | RESOURCE_MACHINE
+ | RESOURCE_CONDENSATE
+ | RESOURCE_CONCENTRATE
+ | RESOURCE_EXTRACT
+ | RESOURCE_SPIRIT
+ | RESOURCE_EMANATION
+ | RESOURCE_ESSENCE;
+
+type InterShardResourceConstant =
+ | SUBSCRIPTION_TOKEN
+ | CPU_UNLOCK
+ | PIXEL
+ | ACCESS_KEY;
+type MarketResourceConstant = ResourceConstant | InterShardResourceConstant;
+
+type RESOURCE_ENERGY = "energy";
+type RESOURCE_POWER = "power";
+type RESOURCE_OPS = "ops";
+
+type RESOURCE_BIOMASS = "biomass";
+type RESOURCE_METAL = "metal";
+type RESOURCE_MIST = "mist";
+type RESOURCE_SILICON = "silicon";
+
+type RESOURCE_UTRIUM = "U";
+type RESOURCE_LEMERGIUM = "L";
+type RESOURCE_KEANIUM = "K";
+type RESOURCE_ZYNTHIUM = "Z";
+type RESOURCE_OXYGEN = "O";
+type RESOURCE_HYDROGEN = "H";
+type RESOURCE_CATALYST = "X";
+
+type RESOURCE_HYDROXIDE = "OH";
+type RESOURCE_ZYNTHIUM_KEANITE = "ZK";
+type RESOURCE_UTRIUM_LEMERGITE = "UL";
+type RESOURCE_GHODIUM = "G";
+
+type RESOURCE_UTRIUM_HYDRIDE = "UH";
+type RESOURCE_UTRIUM_OXIDE = "UO";
+type RESOURCE_KEANIUM_HYDRIDE = "KH";
+type RESOURCE_KEANIUM_OXIDE = "KO";
+type RESOURCE_LEMERGIUM_HYDRIDE = "LH";
+type RESOURCE_LEMERGIUM_OXIDE = "LO";
+type RESOURCE_ZYNTHIUM_HYDRIDE = "ZH";
+type RESOURCE_ZYNTHIUM_OXIDE = "ZO";
+type RESOURCE_GHODIUM_HYDRIDE = "GH";
+type RESOURCE_GHODIUM_OXIDE = "GO";
+
+type RESOURCE_UTRIUM_ACID = "UH2O";
+type RESOURCE_UTRIUM_ALKALIDE = "UHO2";
+type RESOURCE_KEANIUM_ACID = "KH2O";
+type RESOURCE_KEANIUM_ALKALIDE = "KHO2";
+type RESOURCE_LEMERGIUM_ACID = "LH2O";
+type RESOURCE_LEMERGIUM_ALKALIDE = "LHO2";
+type RESOURCE_ZYNTHIUM_ACID = "ZH2O";
+type RESOURCE_ZYNTHIUM_ALKALIDE = "ZHO2";
+type RESOURCE_GHODIUM_ACID = "GH2O";
+type RESOURCE_GHODIUM_ALKALIDE = "GHO2";
+
+type RESOURCE_CATALYZED_UTRIUM_ACID = "XUH2O";
+type RESOURCE_CATALYZED_UTRIUM_ALKALIDE = "XUHO2";
+type RESOURCE_CATALYZED_KEANIUM_ACID = "XKH2O";
+type RESOURCE_CATALYZED_KEANIUM_ALKALIDE = "XKHO2";
+type RESOURCE_CATALYZED_LEMERGIUM_ACID = "XLH2O";
+type RESOURCE_CATALYZED_LEMERGIUM_ALKALIDE = "XLHO2";
+type RESOURCE_CATALYZED_ZYNTHIUM_ACID = "XZH2O";
+type RESOURCE_CATALYZED_ZYNTHIUM_ALKALIDE = "XZHO2";
+type RESOURCE_CATALYZED_GHODIUM_ACID = "XGH2O";
+type RESOURCE_CATALYZED_GHODIUM_ALKALIDE = "XGHO2";
+
+type RESOURCE_UTRIUM_BAR = "utrium_bar";
+type RESOURCE_LEMERGIUM_BAR = "lemergium_bar";
+type RESOURCE_ZYNTHIUM_BAR = "zynthium_bar";
+type RESOURCE_KEANIUM_BAR = "keanium_bar";
+type RESOURCE_GHODIUM_MELT = "ghodium_melt";
+type RESOURCE_OXIDANT = "oxidant";
+type RESOURCE_REDUCTANT = "reductant";
+type RESOURCE_PURIFIER = "purifier";
+type RESOURCE_BATTERY = "battery";
+
+type RESOURCE_COMPOSITE = "composite";
+type RESOURCE_CRYSTAL = "crystal";
+type RESOURCE_LIQUID = "liquid";
+
+type RESOURCE_WIRE = "wire";
+type RESOURCE_SWITCH = "switch";
+type RESOURCE_TRANSISTOR = "transistor";
+type RESOURCE_MICROCHIP = "microchip";
+type RESOURCE_CIRCUIT = "circuit";
+type RESOURCE_DEVICE = "device";
+
+type RESOURCE_CELL = "cell";
+type RESOURCE_PHLEGM = "phlegm";
+type RESOURCE_TISSUE = "tissue";
+type RESOURCE_MUSCLE = "muscle";
+type RESOURCE_ORGANOID = "organoid";
+type RESOURCE_ORGANISM = "organism";
+
+type RESOURCE_ALLOY = "alloy";
+type RESOURCE_TUBE = "tube";
+type RESOURCE_FIXTURES = "fixtures";
+type RESOURCE_FRAME = "frame";
+type RESOURCE_HYDRAULICS = "hydraulics";
+type RESOURCE_MACHINE = "machine";
+
+type RESOURCE_CONDENSATE = "condensate";
+type RESOURCE_CONCENTRATE = "concentrate";
+type RESOURCE_EXTRACT = "extract";
+type RESOURCE_SPIRIT = "spirit";
+type RESOURCE_EMANATION = "emanation";
+type RESOURCE_ESSENCE = "essence";
+
+type SUBSCRIPTION_TOKEN = "token";
+type CPU_UNLOCK = "cpuUnlock";
+type PIXEL = "pixel";
+type ACCESS_KEY = "accessKey";
+
+type TOMBSTONE_DECAY_PER_PART = 5;
+
+type EventConstant =
+ | EVENT_ATTACK
+ | EVENT_OBJECT_DESTROYED
+ | EVENT_ATTACK_CONTROLLER
+ | EVENT_BUILD
+ | EVENT_HARVEST
+ | EVENT_HEAL
+ | EVENT_REPAIR
+ | EVENT_RESERVE_CONTROLLER
+ | EVENT_UPGRADE_CONTROLLER
+ | EVENT_EXIT
+ | EVENT_POWER
+ | EVENT_TRANSFER;
+
+type EVENT_ATTACK = 1;
+type EVENT_OBJECT_DESTROYED = 2;
+type EVENT_ATTACK_CONTROLLER = 3;
+type EVENT_BUILD = 4;
+type EVENT_HARVEST = 5;
+type EVENT_HEAL = 6;
+type EVENT_REPAIR = 7;
+type EVENT_RESERVE_CONTROLLER = 8;
+type EVENT_UPGRADE_CONTROLLER = 9;
+type EVENT_EXIT = 10;
+type EVENT_POWER = 11;
+type EVENT_TRANSFER = 12;
+
+type EventAttackType =
+ | EVENT_ATTACK_TYPE_MELEE
+ | EVENT_ATTACK_TYPE_RANGED
+ | EVENT_ATTACK_TYPE_RANGED_MASS
+ | EVENT_ATTACK_TYPE_DISMANTLE
+ | EVENT_ATTACK_TYPE_HIT_BACK
+ | EVENT_ATTACK_TYPE_NUKE;
+
+type EVENT_ATTACK_TYPE_MELEE = 1;
+type EVENT_ATTACK_TYPE_RANGED = 2;
+type EVENT_ATTACK_TYPE_RANGED_MASS = 3;
+type EVENT_ATTACK_TYPE_DISMANTLE = 4;
+type EVENT_ATTACK_TYPE_HIT_BACK = 5;
+type EVENT_ATTACK_TYPE_NUKE = 6;
+
+type EventHealType = EVENT_HEAL_TYPE_MELEE | EVENT_HEAL_TYPE_RANGED;
+
+type EVENT_HEAL_TYPE_MELEE = 1;
+type EVENT_HEAL_TYPE_RANGED = 2;
+
+type EventDestroyType = "creep" | StructureConstant;
+
+type EventItem =
+ | {
+ event: EVENT_ATTACK;
+ objectId: string;
+ data: EventData[EVENT_ATTACK];
+ }
+ | {
+ event: EVENT_OBJECT_DESTROYED;
+ objectId: string;
+ data: EventData[EVENT_OBJECT_DESTROYED];
+ }
+ | {
+ event: EVENT_ATTACK_CONTROLLER;
+ objectId: string;
+ data: EventData[EVENT_ATTACK_CONTROLLER];
+ }
+ | {
+ event: EVENT_BUILD;
+ objectId: string;
+ data: EventData[EVENT_BUILD];
+ }
+ | {
+ event: EVENT_HARVEST;
+ objectId: string;
+ data: EventData[EVENT_HARVEST];
+ }
+ | {
+ event: EVENT_HEAL;
+ objectId: string;
+ data: EventData[EVENT_HEAL];
+ }
+ | {
+ event: EVENT_REPAIR;
+ objectId: string;
+ data: EventData[EVENT_REPAIR];
+ }
+ | {
+ event: EVENT_RESERVE_CONTROLLER;
+ objectId: string;
+ data: EventData[EVENT_RESERVE_CONTROLLER];
+ }
+ | {
+ event: EVENT_UPGRADE_CONTROLLER;
+ objectId: string;
+ data: EventData[EVENT_UPGRADE_CONTROLLER];
+ }
+ | {
+ event: EVENT_EXIT;
+ objectId: string;
+ data: EventData[EVENT_EXIT];
+ }
+ | {
+ event: EVENT_POWER;
+ objectId: string;
+ data: EventData[EVENT_POWER];
+ }
+ | {
+ event: EVENT_TRANSFER;
+ objectId: string;
+ data: EventData[EVENT_TRANSFER];
+ };
+
+interface EventData {
+ [EVENT_ATTACK]: {
+ targetId: string;
+ damage: number;
+ attackType: EventAttackType;
+ };
+ [EVENT_OBJECT_DESTROYED]: {
+ type: EventDestroyType;
+ };
+ [EVENT_ATTACK_CONTROLLER]: null;
+ [EVENT_BUILD]: {
+ targetId: string;
+ amount: number;
+ energySpent: number;
+ };
+ [EVENT_HARVEST]: {
+ targetId: string;
+ amount: number;
+ };
+ [EVENT_HEAL]: {
+ targetId: string;
+ amount: number;
+ healType: EventHealType;
+ };
+ [EVENT_REPAIR]: {
+ targetId: string;
+ amount: number;
+ energySpent: number;
+ };
+ [EVENT_RESERVE_CONTROLLER]: {
+ amount: number;
+ };
+ [EVENT_UPGRADE_CONTROLLER]: {
+ amount: number;
+ energySpent: number;
+ };
+ [EVENT_EXIT]: {
+ room: string;
+ x: number;
+ y: number;
+ };
+ [EVENT_POWER]: {
+ targetId: string;
+ power: PowerConstant;
+ };
+ [EVENT_TRANSFER]: {
+ targetId: string;
+ resourceType: ResourceConstant;
+ amount: number;
+ };
+}
+
+type PowerClassConstant = POWER_CLASS["OPERATOR"];
+
+interface POWER_CLASS {
+ OPERATOR: "operator";
+}
+
+type PowerConstant =
+ | PWR_GENERATE_OPS
+ | PWR_OPERATE_SPAWN
+ | PWR_OPERATE_TOWER
+ | PWR_OPERATE_STORAGE
+ | PWR_OPERATE_LAB
+ | PWR_OPERATE_EXTENSION
+ | PWR_OPERATE_OBSERVER
+ | PWR_OPERATE_TERMINAL
+ | PWR_OPERATE_SPAWN
+ | PWR_OPERATE_TOWER
+ | PWR_DISRUPT_SPAWN
+ | PWR_DISRUPT_TOWER
+ | PWR_DISRUPT_SOURCE
+ | PWR_SHIELD
+ | PWR_REGEN_SOURCE
+ | PWR_REGEN_MINERAL
+ | PWR_DISRUPT_TERMINAL
+ | PWR_OPERATE_POWER
+ | PWR_FORTIFY
+ | PWR_OPERATE_CONTROLLER
+ | PWR_OPERATE_FACTORY;
+
+type PWR_GENERATE_OPS = 1;
+type PWR_OPERATE_SPAWN = 2;
+type PWR_OPERATE_TOWER = 3;
+type PWR_OPERATE_STORAGE = 4;
+type PWR_OPERATE_LAB = 5;
+type PWR_OPERATE_EXTENSION = 6;
+type PWR_OPERATE_OBSERVER = 7;
+type PWR_OPERATE_TERMINAL = 8;
+type PWR_DISRUPT_SPAWN = 9;
+type PWR_DISRUPT_TOWER = 10;
+type PWR_DISRUPT_SOURCE = 11;
+type PWR_SHIELD = 12;
+type PWR_REGEN_SOURCE = 13;
+type PWR_REGEN_MINERAL = 14;
+type PWR_DISRUPT_TERMINAL = 15;
+type PWR_OPERATE_POWER = 16;
+type PWR_FORTIFY = 17;
+type PWR_OPERATE_CONTROLLER = 18;
+type PWR_OPERATE_FACTORY = 19;
+
+type EffectConstant = EFFECT_INVULNERABILITY | EFFECT_COLLAPSE_TIMER;
+
+type EFFECT_INVULNERABILITY = 1001;
+type EFFECT_COLLAPSE_TIMER = 1002;
+/**
+ * The options that can be accepted by `findRoute()` and friends.
+ */
+interface RouteOptions {
+ /**
+ * 它可以用来计算进入一个房间的开销。你可以用它实现优先进入自己的房间或者回避某些房间等功能。你应该返回一个浮点数开销,或者返回 `Infinity` 代表不可进入。
+ * @param roomName
+ * @param fromRoomName
+ */
+ routeCallback: (roomName: string, fromRoomName: string) => any;
+}
+
+interface RoomStatusPermanent {
+ status: "normal" | "closed";
+ timestamp: null;
+}
+
+interface RoomStatusTemporary {
+ status: "novice" | "respawn";
+ timestamp: number;
+}
+
+type RoomStatus = RoomStatusPermanent | RoomStatusTemporary;
+
+/**
+ * 世界地图对象,用于在房间之间导航。
+ */
+interface GameMap {
+ /**
+ * 根据给定的房间名列出所有可用的出口。
+ * @param roomName 房间名。
+ * @returns 出口信息按照以下格式给出,在房间不存在时返回null。
+ *
+ * ```json
+ * {
+ * "1": "W8N4", // TOP
+ * "3": "W7N3", // RIGHT
+ * "5": "W8N2", // BOTTOM
+ * "7": "W9N3" // LEFT
+ * }
+ * ```
+ */
+ describeExits(roomName: string): ExitsInformation;
+ /**
+ * 查找从给定房间到另一个房间的出口方向。
+ * @param fromRoom 起点房间名或房间对象。
+ * @param toRoom 终点房间名或房间对象。
+ * @param opts (可选) 包含寻路选项的对象。参见 [`findRoute`](https://screeps-cn.github.io/api/#findRoute)。
+ * @returns 房间方向常量,下列之一:
+ * `FIND_EXIT_TOP`, `FIND_EXIT_RIGHT`, `FIND_EXIT_BOTTOM`, `FIND_EXIT_LEFT`
+ *
+ * 或下列错误码:
+ * `ERR_NO_PATH`, `ERR_INVALID_ARGS`
+ */
+ findExit(
+ fromRoom: string | Room,
+ toRoom: string | Room,
+ opts?: RouteOptions,
+ ): ExitConstant | ERR_NO_PATH | ERR_INVALID_ARGS;
+ /**
+ * 查找从给定房间到另一个房间的路径。
+ * @param fromRoom 起点房间名或房间对象。
+ * @param toRoom 终点房间名或房间对象。
+ * @param opts (可选) 包含下列选项的对象:
+ *
+ * - `routeCallback` 这个回调函数接受两个参数:`function(roomName, fromRoomName)`。
+ * 它可以用来计算进入一个房间的开销。你可以用它实现优先进入自己的房间或者回避某些房间等功能。
+ * 你应该返回一个浮点数开销,或者返回 `Infinity` 代表不可进入。
+ * @returns 如下格式的路径数组:
+ *
+ * ```json
+ * [
+ * { exit: FIND_EXIT_RIGHT, room: 'arena21' },
+ * { exit: FIND_EXIT_BOTTOM, room: 'arena22' },
+ * ...
+ * ]
+ * ```
+ *
+ * 或如下错误码之一:`ERR_NO_PATH`
+ */
+ findRoute(
+ fromRoom: string | Room,
+ toRoom: string | Room,
+ opts?: RouteOptions,
+ ):
+ | {
+ exit: ExitConstant;
+ room: string;
+ }[]
+ | ERR_NO_PATH;
+ /**
+ * 获取两个房间之间直线距离(房间数)。你可以使用这个函数估算使用终端发送资源的能源开销,或用于使用观察者和核武器。
+ * @param roomName1 第一个房间名。
+ * @param roomName2 第二个房间名。
+ * @param continuous 是否视世界地图为在边界连续。如果要计算交易或终端发送开销,请设置为 `true`。 默认值为 `false`。
+ */
+ getRoomLinearDistance(
+ roomName1: string,
+ roomName2: string,
+ continuous?: boolean,
+ ): number;
+ /**
+ * 此方法已被弃用,不久将被删除。
+ * @deprecated 请使用更高效的方法 [`Game.map.getRoomTerrain`](https://screeps-cn.github.io/api/#Game.map.getRoomTerrain) 替代.
+ */
+ getTerrainAt(x: number, y: number, roomName: string): Terrain;
+ /**
+ * 此方法已被弃用,不久将被删除。
+ * @deprecated 请使用更高效的方法 [`Game.map.getRoomTerrain`](https://screeps-cn.github.io/api/#Game.map.getRoomTerrain) 替代.
+ */
+ getTerrainAt(pos: RoomPosition): Terrain;
+ /**
+ * 获取 `Room.Terrain` 对象,快捷访问静态地形数据。此方法适用于所有房间,哪怕是无法访问的房间。
+ * @param roomName 房间名。
+ */
+ getRoomTerrain(roomName: string): RoomTerrain;
+ /**
+ * 返回世界尺寸,即世界对角之间的房间数。例如对于一个从 W50N50 至 E50S50 的世界这个方法返回 `102`。
+ */
+ getWorldSize(): number;
+
+ /**
+ * 此方法已被弃用,不久将被删除。
+ * @deprecated 请使用方法 [`Game.map.getRoomStatus`](https://screeps-cn.github.io/api/#Game.map.getRoomStatus) 替代.
+ */
+ isRoomAvailable(roomName: string): boolean;
+
+ /**
+ * 获取指定房间的开放状态。
+ * @param roomName 房间名
+ * @returns 包含如下属性的对象:
+ *
+ * ```json
+ * {
+ * status: "normal" | "closed" | "novice" | "respawn",
+ * timestamp: number
+ * }
+ * ```
+ * @see https://screeps-cn.github.io/start-areas.html
+ */
+ getRoomStatus(roomName: string): RoomStatus;
+
+ /**
+ * 地图可视化(Map visual)提供了一种途径来在游戏地图上显示各种可视化的调试信息。您可以使用 `Game.map.visual` 对象来绘制一些仅对您可见的简单图形。
+ *
+ * 地图可视化不会被存储在游戏数据库中,它们唯一的作用就是在您的浏览器上显示一些信息。所有的绘制效果只会被保留一个 tick,并且如果下个 tick 没有更新的话它们就会消失。
+ * 所有的 `Game.map.visual` 调用都不会产生 CPU 消耗(只会产生一些代码执行的自然成本,并且大多与简单的 `JSON.serialize` 调用有关)。
+ * 然而,这里有一条使用限制:您最多只能为每个房间发布 1000 KB 的序列化数据。
+ *
+ * 所有绘制坐标均等同于全局游戏坐标 ([`RoomPosition`](https://screeps-cn.github.io/api/#RoomPosition))。
+ */
+ visual: MapVisual;
+}
+
+// No static is available
+
+interface MapVisual {
+ /**
+ * 绘制一条线。
+ * @param pos1 起始点位置对象。
+ * @param pos2 结束点位置对象。
+ * @param style 样式
+ * @returns `MapVisual` 对象本身,以便进行链式调用。
+ */
+ line(pos1: RoomPosition, pos2: RoomPosition, style?: MapLineStyle): MapVisual;
+
+ /**
+ * 绘制一个圆。
+ * @param pos 中心点位置对象。
+ * @param style 样式
+ * @returns `MapVisual` 对象本身,以便进行链式调用。
+ */
+ circle(pos: RoomPosition, style?: MapCircleStyle): MapVisual;
+
+ /**
+ * 绘制一个矩形。
+ * @param topLeftPos 左上角的位置对象。
+ * @param width 矩形的宽。
+ * @param height 矩形的高。
+ * @param style 样式
+ * @returns `MapVisual` 对象本身,以便进行链式调用。
+ */
+ rect(
+ topLeftPos: RoomPosition,
+ width: number,
+ height: number,
+ style?: MapPolyStyle,
+ ): MapVisual;
+
+ /**
+ * 绘制一段折线.
+ * @param points 包含了所有拐点的数组。每个数组元素都应是一个 `RoomPosition` 对象。
+ * @param style 样式
+ * @returns `MapVisual` 对象本身,以便进行链式调用。
+ */
+ poly(points: RoomPosition[], style?: MapPolyStyle): MapVisual;
+
+ /**
+ * 绘制一个文本标签。你可以使用任何有效的 Unicode 字符,包括 emoji。
+ * @param text 文本信息
+ * @param pos 文本基线(baseline)起始点的位置对象。
+ * @param style 样式
+ * @returns `MapVisual` 对象本身,以便进行链式调用。
+ */
+ text(text: string, pos: RoomPosition, style?: MapTextStyle): MapVisual;
+
+ /**
+ * 移除该房间的所有可视化效果。
+ * @returns `MapVisual` 对象本身,以便进行链式调用。
+ */
+ clear(): MapVisual;
+
+ /**
+ * 获取本 tick 所有可视化效果的存储大小。最多不能超过 1024,000(1000 KB)。
+ * @returns The size of the visuals in bytes.
+ */
+ getSize(): number;
+
+ /**
+ * 返回当前 tick 中添加到地图中的所有可视化效果的紧凑格式。
+ * @returns 代表了可视化数据的字符串。除了将其存储以备后续使用外,您不应该对其进行其他操作。
+ */
+ export(): string;
+
+ /**
+ * 将先前导出(使用 `Game.map.visual.export`)的地图可视化效果添加到当前 tick。
+ * @param data 从 `Game.map.visual.export` 返回的字符串。
+ * @returns `MapVisual` 对象本身,以便进行链式调用。
+ */
+ import(data: string): MapVisual;
+}
+
+interface MapLineStyle {
+ /**
+ * 线条的宽度,默认值为 `0.1`。
+ */
+ width?: number;
+ /**
+ * 线条颜色,使用以下格式:`#ffffff`(十六进制颜色),默认为 `#ffffff`。
+ */
+ color?: string;
+ /**
+ * 透明度,默认值为 `0.5`。
+ */
+ opacity?: number;
+ /**
+ * `undefined` (实线),`dashed` (虚线) 或者 `dotted` (点线) 之一。默认值为 `undefined`。
+ */
+ lineStyle?: "dashed" | "dotted" | "solid";
+}
+
+interface MapPolyStyle {
+ /**
+ * 线条颜色,使用以下格式:`#ffffff`(十六进制颜色),默认为 `#ffffff`。
+ */
+ fill?: string;
+ /**
+ * 透明度,默认值为 `0.5`。
+ */
+ opacity?: number;
+ /**
+ * 轮廓颜色,使用以下格式:`#ffffff`(十六进制颜色),默认为 `undefined`(无轮廓)。
+ */
+ stroke?: string | undefined;
+ /**
+ * 轮廓宽度,默认值为 `0.5`。
+ */
+ strokeWidth?: number;
+ /**
+ * `undefined` (实线),`dashed` (虚线) 或者 `dotted` (点线) 之一。默认值为 `undefined`。
+ */
+ lineStyle?: "dashed" | "dotted" | "solid";
+}
+
+interface MapCircleStyle extends MapPolyStyle {
+ /**
+ * 圆的半径,默认值为 `10`。
+ */
+ radius?: number;
+}
+
+interface MapTextStyle {
+ /**
+ * 文本颜色,使用以下格式:`#ffffff`(十六进制颜色),默认为 `#ffffff`。
+ */
+ color?: string;
+ /**
+ * 文本字体,默认为 sans-serif
+ */
+ fontFamily?: string;
+ /**
+ * 字体大小,基于游戏坐标,默认为 `10`
+ */
+ fontSize?: number;
+ /**
+ * 字体风格(`'normal'`, `'italic'` 或者 `'oblique'`)
+ */
+ fontStyle?: string;
+ /**
+ * 字体变种(`'normal'` 或者 `'small-caps'`)
+ */
+ fontVariant?: string;
+ /**
+ * 轮廓颜色,使用以下格式:`#ffffff`(十六进制颜色),默认为 `undefined`(无轮廓)。
+ */
+ stroke?: string;
+ /**
+ * 轮廓宽带,默认为 `0.15`。
+ */
+ strokeWidth?: number;
+ /**
+ * 背景颜色,使用以下格式:`#ffffff`(十六进制颜色),默认为 `undefined`(无背景色)。
+ * 当启用背景色时,文本的垂直对齐模式将被设置为居中(默认为 `baseline`)。
+ */
+ backgroundColor?: string;
+ /**
+ * 背景矩形的内边距(padding),默认为 `2`。
+ */
+ backgroundPadding?: number;
+ /**
+ * 文本对齐,`center`、`left`、`right` 之一。默认为 `center`。
+ */
+ align?: "center" | "left" | "right";
+ /**
+ * 透明度,默认值为 `0.5`。
+ */
+ opacity?: number;
+}
+/**
+ * 描述游戏内市场的全局变量。您可以使用该对象追踪从您的终端接收/发送的资源交易,以及您的购买/出售订单。
+ * @see https://screeps-cn.github.io/market.html
+ */
+interface Market {
+ /**
+ * 您当前的 credit 余额。
+ */
+ credits: number;
+ /**
+ * 一个数组,内容为您终端接收的最近 100 笔交易
+ */
+ incomingTransactions: Transaction[];
+ /**
+ * 一个对象,包含了您在市场中活跃 (activated) 和非活跃 (deactivated) 的购买/出售订单。
+ */
+ orders: { [key: string]: Order };
+ /**
+ * 一个数组,内容为您终端发送的最近 100 笔交易
+ */
+ outgoingTransactions: Transaction[];
+ /**
+ * 估算 `StructureTerminal.send` 和 `Game.market.deal` 方法的能量交易成本。 算法:
+ *
+ * ```js
+ * Math.ceil( amount * (Math.log(0.1*linearDistanceBetweenRooms + 0.9) + 0.1) )
+ * ```
+ *
+ * @param amount 要发送的资源数量。
+ * @param roomName1 第一个房间的名称。
+ * @param roomName2 第二个房间的名称。
+ * @returns 进行交易所需的能量。
+ */
+ calcTransactionCost(
+ amount: number,
+ roomName1: string,
+ roomName2: string,
+ ): number;
+ /**
+ * 取消先前创建的订单。5% 的费用将不予退还。
+ * @param orderId `Game.market.orders` 中提供的订单 ID。
+ * @returns `OK`, `ERR_INVALID_ARGS`
+ */
+ cancelOrder(orderId: string): ScreepsReturnCode;
+ /**
+ * 修改一个已存在订单的单价。如果 `newPrice` 大于之前的单价,将向您收取 `(newPrice - oldPrice) * remainingAmount * 0.05` credit 的费用。
+ * @param orderId `Game.market.orders` 提供的订单 ID。
+ * @param newPrice 新的订单单价。
+ * @returns `OK`, `ERR_NOT_OWNER`, `ERR_NOT_ENOUGH_RESOURCES`, `ERR_INVALID_ARGS`
+ */
+ changeOrderPrice(orderId: string, newPrice: number): ScreepsReturnCode;
+ /**
+ * 从您的终端创建一个市场订单。下单时将向您收取 `price * amount * 0.05` credit 的费用。
+ *
+ * 每个玩家最多可以拥有 300 个订单。您可以在任意时刻使用任意数量创建一个订单。之后会自动根据其可用资源量和 credit 来将其状态设置为活跃和非活跃。
+ *
+ * An order expires in 30 days after its creation, and the remaining market fee is returned.
+ */
+ createOrder(params: {
+ type: ORDER_BUY | ORDER_SELL;
+ resourceType: MarketResourceConstant;
+ price: number;
+ totalAmount: number;
+ roomName?: string;
+ }): ScreepsReturnCode;
+ /**
+ * 使用 `yourRoomName` 房间中的终端处理一个贸易订单,根据订单类型(购入/卖出)来和其他玩家的终端进行交易。
+ *
+ * 无论订单类型如何,您的终端都将承担本次资源交易所产生的能量消耗。您可以使用 `Game.market.calcTransactionCost` 方法估算运输成本。
+ * 当多个玩家尝试处理同一个订单时,距离更近的玩家优先。您每 tick 不能处理超过 10 笔交易。
+ * @param orderId 来自 `Game.market.getAllOrders` 的订单 ID。
+ * @param amount 要转移的资源数量。
+ * @param targetRoomName 您的某个房间名称,该房间应该存在有包含足够能量的可用终端。当订单的资源类型为 `SUBSCRIPTION_TOKEN` 时无需填写该参数。
+ */
+ deal(
+ orderId: string,
+ amount: number,
+ targetRoomName?: string,
+ ): ScreepsReturnCode;
+ /**
+ * 为一个已存在的订单添加容量。它将影响 `remainingAmount` 和 `totalAmount` 属性。您将要为此支付 `price * addAmount * 0.05` credit 的手续费。
+ * @param orderId `Game.market.orders` 中提供的订单 ID。
+ * @param addAmount 要增加多少容量。不能为负数。
+ * @returns `OK`, `ERR_NOT_ENOUGH_RESOURCES`, `ERR_INVALID_ARGS`
+ */
+ extendOrder(orderId: string, addAmount: number): ScreepsReturnCode;
+ /**
+ * 获取当前市场上其他玩家活跃的订单。该方法支持 `resourceType` 内置索引。
+ * @param filter (optional) 一个对象或者函数,将使用 `_.filter` 方法对结果列表进行筛选。
+ */
+ getAllOrders(filter?: OrderFilter | ((o: Order) => boolean)): Order[];
+ /**
+ * 获取最近 14 天以来市场中指定资源的每日价格记录。
+ * @param resource `RESOURCE_*` 常量之一。如果为 `undefined`,则返回所有资源的历史数据。
+ */
+ getHistory(resource?: MarketResourceConstant): PriceHistory[];
+ /**
+ * 检索指定的市场订单。
+ * @param orderId 订单 ID。
+ */
+ getOrderById(id: string): Order | null;
+}
+
+// No static is available
+
+interface Transaction {
+ transactionId: string;
+ time: number;
+ sender?: { username: string };
+ recipient?: { username: string };
+ resourceType: MarketResourceConstant;
+ amount: number;
+ from: string;
+ to: string;
+ description: string;
+ order?: TransactionOrder;
+}
+
+interface Order {
+ /** 唯一的订单 ID。 */
+ id: string;
+ /** 订单创建时的游戏 tick。inter-shard 市场中的订单不存在该属性。 */
+ created: number;
+ active?: boolean;
+ /** `ORDER_SELL` 或 `ORDER_BUY`。 */
+ type: string;
+ /** ` RESOURCE_*` 常量之一或者 `SUBSCRIPTION_TOKEN`。 */
+ resourceType: MarketResourceConstant;
+ /** 下订单的房间。 */
+ roomName?: string;
+ /** 当前可用的交易量。 */
+ amount: number;
+ /** 该订单还可以交易多少资源。 */
+ remainingAmount: number;
+ totalAmount?: number;
+ /** 当前的交易单价。 */
+ price: number;
+}
+
+interface TransactionOrder {
+ id: string;
+ type: string;
+ price: number;
+}
+
+interface OrderFilter {
+ id?: string;
+ created?: number;
+ type?: string;
+ resourceType?: MarketResourceConstant;
+ roomName?: string;
+ amount?: number;
+ remainingAmount?: number;
+ price?: number;
+}
+
+interface PriceHistory {
+ resourceType: MarketResourceConstant;
+ date: string;
+ transactions: number;
+ volume: number;
+ avgPrice: number;
+ stddevPrice: number;
+}
+interface Memory {
+ creeps: { [name: string]: CreepMemory };
+ powerCreeps: { [name: string]: PowerCreepMemory };
+ flags: { [name: string]: FlagMemory };
+ rooms: { [name: string]: RoomMemory };
+ spawns: { [name: string]: SpawnMemory };
+}
+
+interface CreepMemory {}
+interface FlagMemory {}
+interface PowerCreepMemory {}
+interface RoomMemory {}
+interface SpawnMemory {}
+
+declare const Memory: Memory;
+/**
+ * 矿床。在建有 extractor 建筑时可以通过带有 `WORK` 身体部件的 creep 采集。
+ * @see https://screeps-cn.github.io/resources.html
+ */
+interface Mineral
+ extends RoomObject {
+ /**
+ * The prototype is stored in the Mineral.prototype global object. You can use it to extend game objects behaviour globally.
+ */
+ readonly prototype: Mineral;
+ /**
+ * 矿床丰度。丰度越高其容量越大。一旦再生时间 (ticksToRegeneration) 降为 `0`,该矿床的丰度将被重置为 `DENSITY_*` 常量之一。
+ */
+ density: number;
+ /**
+ * 资源的剩余容量。
+ */
+ mineralAmount: number;
+ /**
+ * 资源类型,`RESOURCE_*` 常量之一。
+ */
+ mineralType: T;
+ /**
+ * 一个唯一的对象标识。你可以使用 `Game.getObjectById` 方法获取对象实例。
+ */
+ id: Id;
+ /**
+ * 矿床容量将要恢复满额的剩余时间。
+ */
+ ticksToRegeneration: number;
+}
+
+interface MineralConstructor
+ extends _Constructor, _ConstructorById {}
+
+declare const Mineral: MineralConstructor;
+/**
+ * 核弹原爆点,此对象无法被更改或移除。但可以用常数 `FIND_NUKES` 查找即将抵达房间的核弹。核弹只能由 [核弹发射井](https://screeps-cn.github.io/api/#StructureNuker) 发射
+ */
+interface Nuke extends RoomObject {
+ readonly prototype: Nuke;
+
+ /**
+ * 全局唯一的对象标识。你可以通过调用 `Game.getObjectById` 方法取得对象实例。
+ */
+ id: Id;
+ /**
+ * 发射此核弹的房间名。
+ */
+ launchRoomName: string;
+ /**
+ * 着落倒计时。
+ */
+ timeToLand: number;
+}
+
+interface NukeConstructor extends _Constructor, _ConstructorById {}
+
+declare const Nuke: NukeConstructor;
+/**
+ * 包含了在游戏中进行寻路的强大方法。
+ * 这个模块使用原生的高性能 C++ 代码实现,并支持跨越多个房间的自定义寻路成本及路径。
+ */
+interface PathFinder {
+ /**
+ * Container for custom navigation cost data.
+ */
+ CostMatrix: CostMatrix;
+
+ /**
+ * 在 `origin` 和 `goal` 之间查找最佳路径。
+ *
+ * @param origin 起始位置。
+ * @param goal 一个或一组目标。如果提供了多个目标,则返回所有目标中移动成本最低的路径。
+ * **重要:** 请注意,如果您的目标是无法行走的(例如,一个 `source`),请至少将 `range` 设置成至少为 `1`。否则您将浪费很多 CPU 资源来查找一个无法到达的目标。
+ * @param opts 一个包含其他寻路选项的对象。
+ */
+ search(
+ origin: RoomPosition,
+ goal:
+ | RoomPosition
+ | { pos: RoomPosition; range: number }
+ | (RoomPosition | { pos: RoomPosition; range: number })[],
+ opts?: PathFinderOpts,
+ ): PathFinderPath;
+ /**
+ * 指定是否在游戏中使用新的实验性 pathfinder
+ * 该方法应在每个 tick 调用。它将影响以下方法的行为:
+ * * `Room.findPath`
+ * * `RoomPosition.findPathTo`
+ * * `RoomPosition.findClosestByPath`
+ * * `Creep.moveTo`
+ *
+ * @deprecated 此方法已被弃用,不久将被删除。
+ * @param 是否要激活新的 pathfinder。默认值为 `true`。
+ */
+ use(isEnabled: boolean): undefined;
+}
+
+/**
+ * 包含以下属性的对象:
+ * - path - RoomPosition` 对象数组。
+ * - ops - 寻路完成时的 operation 总消耗。
+ * - cost - 从 `plainCost`,`swampCost` 和任何给定的 `CostMatrix` 实例推导出的移动总成本。
+ * - incomplete - 如果 `pathfinder` 找不到完整的路径的话,该值将为 `true`。
+ * 注意,`path` 中依旧会有部分路径,其中的不完整路径代表在当前搜索限制下所能找到的最接近的路径。
+ */
+interface PathFinderPath {
+ /**
+ * `RoomPosition` 对象数组。
+ */
+ path: RoomPosition[];
+ /**
+ * 寻路完成时的 operation 总消耗。
+ */
+ ops: number;
+ /**
+ * 从 `plainCost`,`swampCost` 和任何给定的 `CostMatrix` 实例推导出的移动总成本。
+ */
+ cost: number;
+ /**
+ * 如果 `pathfinder` 找不到完整的路径的话,该值将为 `true`。
+ * 注意,`path` 中依旧会有部分路径,其中的不完整路径代表在当前搜索限制下所能找到的最接近的路径。
+ */
+ incomplete: boolean;
+}
+
+/**
+ * 一个包含其他寻路选项的对象。
+ */
+interface PathFinderOpts {
+ /**
+ * 平原上的移动成本,默认为 `1`。
+ */
+ plainCost?: number;
+ /**
+ * 沼泽上的移动成本,默认为 `5`。
+ */
+ swampCost?: number;
+ /**
+ * 与其寻找前往目标的道路,不如寻找远离目标的道路。
+ * 返回远离每个目标 `range` 的移动成本最低的路径。默认为 `false`。
+ */
+ flee?: boolean;
+ /**
+ * 寻路所允许的最大消耗。你可以限制用于搜索路径的 CPU 时间,基于 1 op ~ 0.001 CPU 的比例。默认值为 `2000`。
+ */
+ maxOps?: number;
+ /**
+ * 寻路所允许的最大房间数。默认值(最大值)为 `16`。
+ */
+ maxRooms?: number;
+ /**
+ * 寻路所允许的最大移动成本。如果 `pathfinder` 发现无论如何都找不到移动成本小于等于 `maxCost` 的路径时,它将立即停止搜索。默认值为无穷大(`Infinity`)。
+ */
+ maxCost?: number;
+ /**
+ * 应用于 A* 算法 `F = G + weight * H` 中的启发式权重(weight)。在使用该选项之前您最好已经了解了 A* 算法的底层实现!默认值为 `1.2`。
+ */
+ heuristicWeight?: number;
+
+ /**
+ * 该回调可以用来生成某些房间的 [`CostMatrix`](https://screeps-cn.github.io/api/#PathFinder-CostMatrix),并提供给 `pathfinder` 来增强寻路效果。该回调拥有一个 `roomName` 参数。
+ * 在寻路搜索中,每个房间只会被执行一次回调。
+ * 如果您要在 1 tick 内为单个房间执行多次寻路操作,可以考虑缓存您的 `CostMatrix` 来提高代码运行效率。
+ * 请阅读 [`CostMatrix`](https://screeps-cn.github.io/api/#PathFinder-CostMatrix) 文档来了解更多关于 `CostMatrix` 的信息。如果该回调返回 `false`,则对应的房间不会被搜索,并且该房间也不会加入到 `maxRooms` 里。
+ *
+ * @param roomName The name of the room the pathfinder needs a cost matrix for.
+ */
+ roomCallback?(roomName: string): boolean | CostMatrix;
+}
+
+/**
+ * 存放自定义导航寻路成本的对象。
+ *
+ * 默认情况下,`PathFinder` 在寻路时只考虑地形 (平原、沼泽、墙壁) —— 如果您需要绕过建筑或者 creep,就需要把他们放进一个 `CostMatrix` 里。
+ * 通常情况下,您将在 `roomCallback` 内部创建 `CostMatrix`。如果在房间的 `CostMatrix` 里找到了一个非零值,那么它将替代默认的地形移动成本。
+ * 您应该避免在 `CostMatrix` 和地形移动成本标志里使用较大值。例如,使用 `{ plainCost: 1, swampCost: 5 }` 的 `PathFinder.search` 将比使用 `{plainCost: 2, swampCost: 10 }` 的运行的更快,并且他们将会寻路出相同的路径。
+ */
+interface CostMatrix {
+ /**
+ * Creates a new CostMatrix containing 0's for all positions.
+ */
+ // eslint-disable-next-line @typescript-eslint/no-misused-new
+ new (): CostMatrix;
+ /**
+ * 在 `CostMatrix` 中设置指定位置的移动成本。
+ * @param x 位置在房间中的 x 坐标。
+ * @param y 位置在房间中的 y 坐标。
+ * @param cost 该位置的移动成本,必须是整数。值为 `0` 时将使用该地块默认的地形移动成本。大于或等于 `255` 的移动成本将视为无法通过。
+ */
+ set(x: number, y: number, cost: number): undefined;
+ /**
+ * 获取该 CostMatrix 中指定位置的移动成本。
+ * @param x 位置在房间中的 x 坐标。
+ * @param y 位置在房间中的 y 坐标。
+ */
+ get(x: number, y: number): number;
+ /**
+ * 使用当前 `CostMatrix` 中的相同数据创建一个新的 `CostMatrix`。
+ */
+ clone(): CostMatrix;
+ /**
+ * 返回该 `CostMatrix` 的紧凑形式,使其可以使用 `JSON.stringify` 进行存储。
+ */
+ serialize(): number[];
+ /**
+ * 静态方法,可以将 serialize 方法返回的值反序列化为一个新的 `CostMatrix`。
+ * @param val 任何 serialize 的返回值。
+ */
+ deserialize(val: number[]): CostMatrix;
+}
+
+declare const PathFinder: PathFinder;
+/**
+ * Power Creeps are immortal "heroes" that are tied to your account and can be respawned in any PowerSpawn after death.
+ * You can upgrade their abilities ("powers") up to your account Global Power Level (see `Game.gpl`).
+ */
+interface PowerCreep extends RoomObject {
+ /**
+ * An object with the creep's cargo contents.
+ * @deprecated An alias for Creep.store.
+ */
+ carry: StoreDefinition;
+ /**
+ * The total amount of resources the creep can carry.
+ * @deprecated An alias for Creep.store.getCapacity().
+ */
+ carryCapacity: number;
+ /**
+ * The power creep's class, one of the `POWER_CLASS` constants.
+ */
+ className: PowerClassConstant;
+ /**
+ * A timestamp when this creeep is marked to be permanently deleted from the account, or undefined otherwise.
+ */
+ deleteTime: number | undefined;
+ /**
+ * The current amount of hit points of the creep.
+ */
+ hits: number;
+ /**
+ * The maximum amount of hit points of the creep.
+ */
+ hitsMax: number;
+ /**
+ * A unique identifier. You can use `Game.getObjectById` method to retrieve an object instance by its id.
+ */
+ id: Id;
+ /**
+ * The power creep's level.
+ */
+ level: number;
+ /**
+ * A shorthand to `Memory.powerCreeps[creep.name]`. You can use it for quick access to the creep's specific memory data object.
+ */
+ memory: PowerCreepMemory;
+ /**
+ * Whether it is your creep or foe.
+ */
+ my: boolean;
+ /**
+ * Power creep name. You can choose the name while creating a new power creep, and `rename` it while unspawned. This name is a hash key to access the creep via the `Game.powerCreeps` object.
+ */
+ name: string;
+ /**
+ * An object with the creep's owner information.
+ */
+ owner: Owner;
+ /**
+ * A Store object that contains cargo of this creep.
+ */
+ store: StoreDefinition;
+ /**
+ * An object with the creep's available powers.
+ */
+ powers: PowerCreepPowers;
+ /**
+ * The text message that the creep was saying at the last tick.
+ */
+ saying: string;
+ /**
+ * The name of the shard where the power creeps is spawned, or undefined.
+ */
+ shard: string | undefined;
+ /**
+ * The timestamp when spawning or deleting this creep will become available. Undefined if the power creep is spawned in the world.
+ * Note: This is a timestamp, not ticks as powerCreeps are not shard dependent.
+ */
+ spawnCooldownTime: number | undefined;
+ /**
+ * The remaining amount of game ticks after which the creep will die and become unspawned. Undefined if the creep is not spawned in the world.
+ */
+ ticksToLive: number | undefined;
+ /**
+ *
+ * @param methodName Cancel the order given during the current game tick.
+ */
+ cancelOrder(
+ methodName: string,
+ ): OK | ERR_NOT_OWNER | ERR_BUSY | ERR_NOT_FOUND;
+ /**
+ * Delete the power creep permanently from your account.
+ * It should NOT be spawned in the world. The creep is not deleted immediately, but a 24-hour delete time is started (see `deleteTime`).
+ * You can cancel deletion by calling `delete(true)`.
+ */
+ delete(cancel?: boolean): OK | ERR_NOT_OWNER | ERR_BUSY;
+ /**
+ * Drop this resource on the ground.
+ * @param resourceType One of the RESOURCE_* constants.
+ * @param amount The amount of resource units to be dropped. If omitted, all the available carried amount is used.
+ */
+ drop(
+ resourceType: ResourceConstant,
+ amount?: number,
+ ): OK | ERR_NOT_OWNER | ERR_BUSY | ERR_NOT_ENOUGH_RESOURCES;
+ /**
+ * Enable power usage in this room. The room controller should be at adjacent tile.
+ * @param controller The room controller
+ */
+ enableRoom(
+ controller: StructureController,
+ ): OK | ERR_NOT_OWNER | ERR_INVALID_TARGET | ERR_NOT_IN_RANGE;
+ /**
+ * Move the creep one square in the specified direction or towards a creep that is pulling it.
+ *
+ * Requires the MOVE body part if not being pulled.
+ * @param direction The direction to move in (`TOP`, `TOP_LEFT`...)
+ */
+ move(direction: DirectionConstant): CreepMoveReturnCode;
+ move(
+ target: Creep,
+ ): OK | ERR_NOT_OWNER | ERR_BUSY | ERR_NOT_IN_RANGE | ERR_INVALID_ARGS;
+ /**
+ * Move the creep using the specified predefined path. Needs the MOVE body part.
+ * @param path A path value as returned from Room.findPath or RoomPosition.findPathTo methods. Both array form and serialized string form are accepted.
+ */
+ moveByPath(
+ path: PathStep[] | RoomPosition[] | string,
+ ): CreepMoveReturnCode | ERR_NOT_FOUND | ERR_INVALID_ARGS;
+ /**
+ * Find the optimal path to the target within the same room and move to it.
+ * A shorthand to consequent calls of pos.findPathTo() and move() methods.
+ * If the target is in another room, then the corresponding exit will be used as a target.
+ *
+ * Needs the MOVE body part.
+ * @param x X position of the target in the room.
+ * @param y Y position of the target in the room.
+ * @param opts An object containing pathfinding options flags (see Room.findPath for more info) or one of the following: reusePath, serializeMemory, noPathFinding
+ */
+ moveTo(
+ x: number,
+ y: number,
+ opts?: MoveToOpts,
+ ): CreepMoveReturnCode | ERR_NO_PATH | ERR_INVALID_TARGET;
+ /**
+ * Find the optimal path to the target within the same room and move to it.
+ * A shorthand to consequent calls of pos.findPathTo() and move() methods.
+ * If the target is in another room, then the corresponding exit will be used as a target.
+ *
+ * Needs the MOVE body part.
+ * @param target Can be a RoomPosition object or any object containing RoomPosition.
+ * @param opts An object containing pathfinding options flags (see Room.findPath for more info) or one of the following: reusePath, serializeMemory, noPathFinding
+ */
+ moveTo(
+ target: RoomPosition | { pos: RoomPosition },
+ opts?: MoveToOpts,
+ ): CreepMoveReturnCode | ERR_NO_PATH | ERR_INVALID_TARGET | ERR_NOT_FOUND;
+ /**
+ * Toggle auto notification when the creep is under attack. The notification will be sent to your account email. Turned on by default.
+ * @param enabled Whether to enable notification or disable.
+ */
+ notifyWhenAttacked(
+ enabled: boolean,
+ ): OK | ERR_NOT_OWNER | ERR_BUSY | ERR_INVALID_ARGS;
+ /**
+ * Pick up an item (a dropped piece of energy). Needs the CARRY body part. The target has to be at adjacent square to the creep or at the same square.
+ * @param target The target object to be picked up.
+ */
+ pickup(target: Resource): CreepActionReturnCode | ERR_FULL;
+ /**
+ * Rename the power creep. It must not be spawned in the world.
+ */
+ rename(name: string): OK | ERR_NOT_OWNER | ERR_NAME_EXISTS | ERR_BUSY;
+ /**
+ * Instantly restore time to live to the maximum using a Power Spawn or a Power Bank nearby. It has to be at adjacent tile.
+ * @param target The target structure
+ */
+ renew(
+ target: StructurePowerBank | StructurePowerSpawn,
+ ): OK | ERR_NOT_OWNER | ERR_BUSY | ERR_INVALID_TARGET | ERR_NOT_IN_RANGE;
+ /**
+ * Display a visual speech balloon above the creep with the specified message.
+ *
+ * The message will disappear after a few seconds. Useful for debugging purposes.
+ *
+ * Only the creep's owner can see the speech message unless toPublic is true.
+ * @param message The message to be displayed. Maximum length is 10 characters.
+ * @param set to 'true' to allow other players to see this message. Default is 'false'.
+ */
+ say(message: string, toPublic?: boolean): OK | ERR_NOT_OWNER | ERR_BUSY;
+ /**
+ * Spawn this power creep in the specified Power Spawn.
+ * @param powerSpawn Your Power Spawn structure
+ */
+ spawn(
+ powerSpawn: StructurePowerSpawn,
+ ):
+ | OK
+ | ERR_NOT_OWNER
+ | ERR_BUSY
+ | ERR_INVALID_TARGET
+ | ERR_TIRED
+ | ERR_RCL_NOT_ENOUGH;
+ /**
+ * Kill the power creep immediately. It will not be destroyed permanently, but will become unspawned, so that you can `spawn` it again.
+ */
+ suicide(): OK | ERR_NOT_OWNER | ERR_BUSY;
+ /**
+ * Transfer resource from the creep to another object. The target has to be at adjacent square to the creep.
+ * @param target The target object.
+ * @param resourceType One of the RESOURCE_* constants
+ * @param amount The amount of resources to be transferred. If omitted, all the available carried amount is used.
+ */
+ transfer(
+ target: AnyCreep | Structure,
+ resourceType: ResourceConstant,
+ amount?: number,
+ ): ScreepsReturnCode;
+ /**
+ * Upgrade the creep, adding a new power ability to it or increasing the level of the existing power. You need one free Power Level in your account to perform this action.
+ */
+ upgrade(
+ power: PowerConstant,
+ ):
+ | OK
+ | ERR_NOT_OWNER
+ | ERR_NOT_ENOUGH_RESOURCES
+ | ERR_FULL
+ | ERR_INVALID_ARGS;
+ /**
+ * Apply one of the creep's powers on the specified target.
+ */
+ usePower(power: PowerConstant, target?: RoomObject): ScreepsReturnCode;
+ /**
+ * Withdraw resources from a structure, tombstone, or ruin.
+ *
+ * The target has to be at adjacent square to the creep.
+ *
+ * Multiple creeps can withdraw from the same structure in the same tick.
+ *
+ * Your creeps can withdraw resources from hostile structures as well, in case if there is no hostile rampart on top of it.
+ * @param target The target object.
+ * @param resourceType The target One of the RESOURCE_* constants..
+ * @param amount The amount of resources to be transferred. If omitted, all the available amount is used.
+ */
+ withdraw(
+ target: Structure | Tombstone | Ruin,
+ resourceType: ResourceConstant,
+ amount?: number,
+ ): ScreepsReturnCode;
+}
+
+interface PowerCreepConstructor
+ extends _Constructor, _ConstructorById {
+ /**
+ * A static method to create new Power Creep instance in your account. It will be added in an unspawned state,
+ * use spawn method to spawn it in the world.
+ *
+ * You need one free Power Level in your account to perform this action.
+ *
+ * @param name The name of the power creep.
+ * @param className The class of the new power creep, one of the `POWER_CLASS` constants
+ */
+ create(
+ name: string,
+ className: PowerClassConstant,
+ ): OK | ERR_NAME_EXISTS | ERR_NOT_ENOUGH_RESOURCES;
+}
+
+declare const PowerCreep: PowerCreepConstructor;
+
+/**
+ * Available powers, an object with power ID as a key, and the following properties
+ */
+interface PowerCreepPowers {
+ [powerID: number]: {
+ /**
+ * Current level of the power
+ */
+ level: number;
+ /**
+ * Cooldown ticks remaining, or undefined if the power creep is not spawned in the world.
+ */
+ cooldown: number | undefined;
+ };
+}
+/**
+ * RawMemory object allows to implement your own memory stringifier instead of built-in serializer based on JSON.stringify.
+ */
+interface RawMemory {
+ /**
+ * An object with asynchronous memory segments available on this tick. Each object key is the segment ID with data in string values.
+ * Use RawMemory.setActiveSegments to fetch segments on the next tick. Segments data is saved automatically in the end of the tick.
+ */
+ segments: { [segmentId: number]: string };
+
+ /**
+ * An object with a memory segment of another player available on this tick. Use `setActiveForeignSegment` to fetch segments on the next tick.
+ */
+ foreignSegment: {
+ username: string;
+ id: number;
+ data: string;
+ };
+
+ /**
+ * @deprecated Use `InterShardMemory` instead.
+ *
+ * A string with a shared memory segment available on every world shard. Maximum string length is 100 KB.
+ *
+ * **Warning:** this segment is not safe for concurrent usage! All shards have shared access to the same instance of
+ * data. When the segment contents is changed by two shards simultaneously, you may lose some data, since the segment
+ * string value is written all at once atomically. You must implement your own system to determine when each shard is
+ * allowed to rewrite the inter-shard memory, e.g. based on mutual exclusions.
+ *
+ */
+ interShardSegment: string;
+
+ /**
+ * Get a raw string representation of the Memory object.
+ */
+ get(): string;
+ /**
+ * Set new memory value.
+ * @param value New memory value as a string.
+ */
+ set(value: string): undefined;
+ /**
+ * Request memory segments using the list of their IDs. Memory segments will become available on the next tick in RawMemory.segments object.
+ * @param ids An array of segment IDs. Each ID should be a number from 0 to 99. Maximum 10 segments can be active at the same time. Subsequent calls of setActiveSegments override previous ones.
+ */
+ setActiveSegments(ids: number[]): undefined;
+ /**
+ * Request a memory segment of another user.
+ *
+ * The segment should be marked by its owner as public using `setPublicSegments`.
+ *
+ * The segment data will become available on the next tick in `foreignSegment` object.
+ *
+ * You can only have access to one foreign segment at the same time.
+ *
+ * @param username The name of another user. Pass `null` to clear the foreign segment.
+ * @param id The ID of the requested segment from 0 to 99. If undefined, the user's default public segment is requested as set by `setDefaultPublicSegment`.
+ */
+ setActiveForeignSegment(username: string | null, id?: number): undefined;
+ /**
+ * Set the specified segment as your default public segment. It will be returned if no id parameter is passed to `setActiveForeignSegment` by another user.
+ *
+ * @param id The ID of the requested segment from 0 to 99. Pass `null` to clear the foreign segment.
+ */
+ setDefaultPublicSegment(id: number | null): undefined;
+ /**
+ * Set specified segments as public. Other users will be able to request access to them using `setActiveForeignSegment`.
+ *
+ * @param ids An array of segment IDs. Each ID should be a number from 0 to 99. Subsequent calls of `setPublicSegments` override previous ones.
+ */
+ setPublicSegments(ids: number[]): undefined;
+}
+
+declare const RawMemory: RawMemory;
+/**
+ * 掉落的资源。 如果没有拿起,它会在一段时间后消失。 掉落的资源以每 tick `ceil(amount/1000)` 的速度消失。
+ */
+interface Resource
+ extends RoomObject {
+ readonly prototype: Resource;
+
+ /**
+ * 资源数量。
+ */
+ amount: number;
+ /**
+ * 一个唯一的对象标识。你可以使用 [`Game.getObjectById`](https://screeps-cn.github.io/api/#Game.getObjectById) 方法获取对象实例。
+ */
+ id: Id;
+ /**
+ * `RESOURCE_*` 常量之一。
+ */
+ resourceType: T;
+}
+
+interface ResourceConstructor
+ extends _Constructor, _ConstructorById {}
+
+declare const Resource: ResourceConstructor;
+/**
+ * 房间中所有具有坐标的对象。几乎所有的游戏对象原型都是从 `RoomObject` 派生出来的。
+ */
+interface RoomObject {
+ readonly prototype: RoomObject;
+ /**
+ * 附加的效果,一个包含如下属性的对象数组:
+ *
+ * - power `number` - 被应用的效果id。可以是自然效果或者超能效果。
+ * - level `number` - 被应用的效果等级。如果不是超能效果的话则不存在。
+ * - ticksRemaining number - 多长时间之后会失去这个效果。
+ */
+ effects: RoomObjectEffect[];
+ /**
+ * 表示该对象在房间中的坐标的对象。
+ */
+ pos: RoomPosition;
+ /**
+ * Room 对象的链接。如果对象是标志或工地并且放置在你不可见的房间中,则可能为 `undefined`。
+ */
+ room: Room | undefined;
+}
+
+interface RoomObjectConstructor extends _Constructor {
+ new (x: number, y: number, roomName: string): RoomObject;
+ (x: number, y: number, roomName: string): RoomObject;
+}
+
+declare const RoomObject: RoomObjectConstructor;
+
+/**
+ * Discriminated union of possible effects on `effect`
+ */
+type RoomObjectEffect = NaturalEffect | PowerEffect;
+
+/**
+ * Natural effect applied to room object
+ */
+interface NaturalEffect {
+ /**
+ * Effect ID of the applied effect. `EFFECT_*` constant.
+ */
+ effect: EffectConstant;
+ /**
+ * How many ticks will the effect last.
+ */
+ ticksRemaining: number;
+}
+
+/**
+ * Effect applied to room object as result of a `PowerCreep.usePower`.
+ */
+interface PowerEffect {
+ /**
+ * Power level of the applied effect.
+ */
+ level: number;
+ /**
+ * Effect ID of the applied effect. `PWR_*` constant.
+ */
+ effect: PowerConstant;
+ /**
+ * @deprecated Power ID of the applied effect. `PWR_*` constant. No longer documented, will be removed.
+ */
+ power: PowerConstant;
+ /**
+ * How many ticks will the effect last.
+ */
+ ticksRemaining: number;
+}
+/**
+ * 表示房间中指定位置的对象。
+ *
+ * 房间中的每个 `RoomObject` 都通过其 `pos` 属性链接到对应的 `RoomPosition` 上。
+ *
+ * 可以使用 `Room.getPositionAt` 或者构造函数创建自定义地点的位置对象。
+ */
+interface RoomPosition {
+ readonly prototype: RoomPosition;
+
+ /**
+ * 所处房间的名称。
+ */
+ roomName: string;
+ /**
+ * 所处房间的 X 坐标。
+ */
+ x: number;
+ /**
+ * 所处房间的 Y 坐标。
+ */
+ y: number;
+ /**
+ * 在指定位置创建新的 `ConstructionSite`。
+ * @param structureType `STRUCTURE_*` 常量之一:
+ * * `STRUCTURE_EXTENSION`
+ * * `STRUCTURE_RAMPART`
+ * * `STRUCTURE_ROAD`
+ * * `STRUCTURE_SPAWN`
+ * * `STRUCTURE_WALL`
+ * * `STRUCTURE_LINK`
+ */
+ createConstructionSite(
+ structureType: BuildableStructureConstant,
+ ): ScreepsReturnCode;
+ /**
+ * 在指定位置创建新的 `ConstructionSite`。
+ * @param structureType `STRUCTURE_*` 常量之一:
+ * * `STRUCTURE_EXTENSION`
+ * * `STRUCTURE_RAMPART`
+ * * `STRUCTURE_ROAD`
+ * * `STRUCTURE_SPAWN`
+ * * `STRUCTURE_WALL`
+ * * `STRUCTURE_LINK`
+ * @param name 建筑的名称,该建筑必须支持设置名字(当前仅有 spawn)。
+ */
+ createConstructionSite(
+ structureType: STRUCTURE_SPAWN,
+ name?: string,
+ ): ScreepsReturnCode;
+ /**
+ * 在指定位置创建一个新的 `Flag`。
+ * @param name 新旗帜的名称。
+ * 它应该是唯一的,即 `Game.flags` 不应该包含拥有相同名称(哈希键)的不同旗帜。
+ * 如果未定义,则会生成随机名称。
+ * @param color 新旗帜的颜色。应为 `COLOR_*` 常量之一。默认值为 `COLOR_WHITE`。
+ * @param secondaryColor 新旗帜的次要颜色。应为 `COLOR_*` 常量之一。默认值等于 `color` 属性值。
+ * @returns 新旗帜的名称,或者下列错误码之一: `ERR_NAME_EXISTS`, `ERR_INVALID_ARGS`
+ */
+ createFlag(
+ name?: string,
+ color?: ColorConstant,
+ secondaryColor?: ColorConstant,
+ ): ERR_NAME_EXISTS | ERR_INVALID_ARGS | string;
+ /**
+ * 查找到该位置路径最短的对象。使用跳点搜索(Jump Point Search)算法和 Dijkstra's 算法进行搜索。
+ * @param type `FIND_*` 常量之一。
+ * @param opts 一个对象,包含了寻路选项(详见 `Room.findPath`),或下列属性:
+ *
+ * - filter, 只有通过筛选器的对象才会被使用,由 `_.filter` 执行筛选。
+ *
+ * - algorithm 下列常量之一:
+ *
+ * - `astar` 当可能存在的目标相对较少时运行速度更快;
+ * - `dijkstra` 当可能存在的目标较多或者附近就有最近的目标时,速度会更快。
+ *
+ * 默认算法是使用启发法自行决定的。
+ * @returns 返回找到的最近对象,没找到则返回 null。
+ */
+ findClosestByPath(
+ type: K,
+ opts?: FindPathOpts & Partial> & {
+ algorithm?: FindClosestByPathAlgorithm;
+ },
+ ): FindTypes[K] | null;
+ findClosestByPath(
+ type: FIND_STRUCTURES | FIND_MY_STRUCTURES | FIND_HOSTILE_STRUCTURES,
+ opts?: FindPathOpts & Partial> & {
+ algorithm?: FindClosestByPathAlgorithm;
+ },
+ ): T | null;
+ /**
+ * 查找到该位置路径最短的对象。使用跳点搜索(Jump Point Search)算法和 Dijkstra's 算法进行搜索。
+ * @param objects 要执行搜索的房间对象数组或者 `RoomPosition` 对象数组。
+ * @param opts 一个对象,包含了寻路选项(详见 `Room.findPath`),或下列属性:
+ *
+ * - filter, 只有通过筛选器的对象才会被使用,由 `_.filter` 执行筛选。
+ *
+ * - algorithm 下列常量之一:
+ *
+ * - `astar` 当可能存在的目标相对较少时运行速度更快;
+ * - `dijkstra` 当可能存在的目标较多或者附近就有最近的目标时,速度会更快。
+ *
+ * 默认算法是使用启发法自行决定的。
+ * @returns 返回找到的最近对象,没找到则返回 null。
+ */
+ findClosestByPath(
+ objects: T[],
+ opts?: FindPathOpts & {
+ filter?: ((object: T) => boolean) | FilterObject | string;
+ algorithm?: FindClosestByPathAlgorithm;
+ },
+ ): T | null;
+ /**
+ * 查找到该位置线性距离最短的对象。
+ * @param type `FIND_*` 常量之一。
+ * @param opts 可选对象
+ */
+ findClosestByRange(
+ type: K,
+ opts?: FilterOptions,
+ ): FindTypes[K] | null;
+ findClosestByRange(
+ type: FIND_STRUCTURES | FIND_MY_STRUCTURES | FIND_HOSTILE_STRUCTURES,
+ opts?: FilterOptions,
+ ): T | null;
+ /**
+ * 查找到该位置线性距离最短的对象。
+ * @param objects 要执行搜索的房间对象数组或者 `RoomPosition` 对象数组。
+ * @param opts 可选对象
+ */
+ findClosestByRange(
+ objects: T[],
+ opts?: { filter: any | string },
+ ): T | null;
+ /**
+ * 查找在指定线性范围中的所有对象。
+ * @param type `FIND_*` 常量之一。
+ * @param range T范围距离(半径)。
+ * @param opts 详见 `Room.find`.
+ */
+ findInRange(
+ type: K,
+ range: number,
+ opts?: FilterOptions,
+ ): FindTypes[K][];
+ findInRange(
+ type: FIND_STRUCTURES | FIND_MY_STRUCTURES | FIND_HOSTILE_STRUCTURES,
+ range: number,
+ opts?: FilterOptions,
+ ): T[];
+ /**
+ * 查找在指定线性范围中的所有对象。
+ * @param objects 要执行搜索的房间对象数组或者 `RoomPosition` 对象数组。
+ * @param range 范围距离(半径)。
+ * @param opts 详见 `Room.find`.
+ */
+ findInRange(
+ objects: T[],
+ range: number,
+ opts?: { filter?: any | string },
+ ): T[];
+ /**
+ * 使用 A* 算法查找到指定位置的最佳路径。
+ *
+ * 该方法是 `Room.findPath` 的简写。如果目标在其他房间,则相应的出口将被作为目标。
+ * @param x 该房间中的 X 坐标。
+ * @param y 该房间中的 Y 坐标。
+ * @param opts 一个对象,包含了寻路相关的选项标识 (查看 `Room.findPath` 来获得更多信息)。
+ */
+ findPathTo(x: number, y: number, opts?: FindPathOpts): PathStep[];
+ /**
+ * 使用 A* 算法查找到指定位置的最佳路径。
+ *
+ * 该方法是 `Room.findPath` 的简写。如果目标在其他房间,则相应的出口将被作为目标。
+ * @param target 可以是 `RoomPosition` 对象或者任何包含 `RoomPosition` 属性的对象。
+ * @param opts 一个对象,包含了寻路相关的选项标识 (查看 `Room.findPath` 来获得更多信息)。
+ */
+ findPathTo(
+ target: RoomPosition | _HasRoomPosition,
+ opts?: FindPathOpts,
+ ): PathStep[];
+ /**
+ * 获取到指定位置的直线方向。
+ * @param x 该房间中的 X 坐标。
+ * @param y 该房间中的 Y 坐标。
+ */
+ getDirectionTo(x: number, y: number): DirectionConstant;
+ /**
+ * 获取到指定位置的直线方向。
+ * @param target 可以是 RoomPosition 对象或者任何包含 RoomPosition 属性的对象。
+ */
+ getDirectionTo(target: RoomPosition | _HasRoomPosition): DirectionConstant;
+ /**
+ * 获取到指定位置的线性范围。
+ * @param x 该房间中的 X 坐标。
+ * @param y 该房间中的 Y 坐标。
+ */
+ getRangeTo(x: number, y: number): number;
+ /**
+ * 获取到指定位置的线性范围。
+ * @param target 可以是 RoomPosition 对象或者任何包含 RoomPosition 属性的对象。
+ */
+ getRangeTo(target: RoomPosition | { pos: RoomPosition }): number;
+ /**
+ * 检查该位置是否在其他位置的指定范围内。
+ * @param x 该房间中的 X 坐标。
+ * @param y 该房间中的 Y 坐标。
+ * @param range 范围距离(半径)。
+ */
+ inRangeTo(x: number, y: number, range: number): boolean;
+ /**
+ * 检查该位置是否在其他位置的指定范围内。
+ * @param toPos 目标位置
+ * @param range 范围距离(半径)。
+ */
+ inRangeTo(
+ target: RoomPosition | { pos: RoomPosition },
+ range: number,
+ ): boolean;
+ /**
+ * 检查该位置是否和指定位置相同。
+ * @param x 该房间中的 X 坐标。
+ * @param y 该房间中的 Y 坐标。
+ */
+ isEqualTo(x: number, y: number): boolean;
+ /**
+ * 检查该位置是否和指定位置相同。
+ * @param target 可以是 `RoomPosition` 对象或者任何包含 `RoomPosition` 属性的对象。
+ */
+ isEqualTo(target: RoomPosition | { pos: RoomPosition }): boolean;
+ /**
+ * 检查该位置是否在紧邻指定位置的正方形区域内。类似于 `inRangeTo(target, 1)`。
+ * @param x 该房间中的 X 坐标。
+ * @param y 该房间中的 Y 坐标。
+ */
+ isNearTo(x: number, y: number): boolean;
+ /**
+ * 检查该位置是否在紧邻指定位置的正方形区域内。类似于 `inRangeTo(target, 1)`。
+ * @param target 可以是 RoomPosition 对象或者任何包含 RoomPosition 属性的对象。
+ */
+ isNearTo(target: RoomPosition | { pos: RoomPosition }): boolean;
+ /**
+ * 获取位于该位置的对象列表。
+ */
+ look(): LookAtResult[];
+ /**
+ * 获取该位置上给定类型的对象列表。
+ * @param type `LOOK_*` 常量之一。
+ */
+ lookFor(type: T): AllLookAtTypes[T][];
+}
+
+interface RoomPositionConstructor extends _Constructor {
+ /**
+ * 你可以使用其构造函数创建一个新的 RoomPosition 对象。
+ * @param x 房间中的 X 坐标。
+ * @param y 房间中的 Y 坐标。
+ * @param roomName 房间名称。
+ */
+ new (x: number, y: number, roomName: string): RoomPosition;
+ (x: number, y: number, roomName: string): RoomPosition;
+}
+
+declare const RoomPosition: RoomPositionConstructor;
+/**
+ * 提供快速访问房间地形数据的对象。您可以为游戏世界中的任何房间构造这些对象,即使没有该房间的视野。
+ * 从技术上讲,每个 `Room.Terrain` 对象都是一个非常轻量级的适配器,用于提供具有最小访问权限的静态地形缓冲区。
+ */
+interface RoomTerrain {
+ /**
+ * 通过 (x,y) 坐标获取指定房间位置处的地形。和 [`Game.map.getTerrainAt(...)`](https://screeps-cn.github.io/api/#Game.map.getTerrainAt) 方法不同,此方法不执行任何字符串操作,并返回整数 terrain 类型值。
+ * @param x 该房间中的 X 坐标。
+ * @param y 该房间中的 Y 坐标。
+ */
+ get(x: number, y: number): 0 | TERRAIN_MASK_WALL | TERRAIN_MASK_SWAMP;
+}
+
+interface RoomTerrainConstructor extends _Constructor {
+ /**
+ * 通过房间名称创建一个新的 `Terrain`。`Terrain` 对象可以从游戏世界中的任何房间构造,即使没有该房间的视野。
+ * @param roomName String name of the room.
+ */
+ new (roomName: string): RoomTerrain;
+}
+/* eslint-disable @typescript-eslint/explicit-member-accessibility */
+declare class RoomVisual {
+ /**
+ * You can create new RoomVisual object using its constructor.
+ * @param roomName The room name. If undefined, visuals will be posted to all rooms simultaneously.
+ */
+ constructor(roomName?: string);
+
+ /**
+ * The name of the room.
+ */
+ roomName: string;
+
+ /**
+ * Draw a line.
+ * @param x1 The start X coordinate.
+ * @param y1 The start Y coordinate.
+ * @param x2 The finish X coordinate.
+ * @param y2 The finish Y coordinate.
+ * @param style The (optional) style.
+ * @returns The RoomVisual object, for chaining.
+ */
+ line(
+ x1: number,
+ y1: number,
+ x2: number,
+ y2: number,
+ style?: LineStyle,
+ ): RoomVisual;
+
+ /**
+ * Draw a line.
+ * @param pos1 The start position object.
+ * @param pos2 The finish position object.
+ * @param style The (optional) style.
+ * @returns The RoomVisual object, for chaining.
+ */
+ line(pos1: RoomPosition, pos2: RoomPosition, style?: LineStyle): RoomVisual;
+
+ /**
+ * Draw a circle.
+ * @param x The X coordinate of the center.
+ * @param y The Y coordinate of the center.
+ * @param style The (optional) style.
+ * @returns The RoomVisual object, for chaining.
+ */
+ circle(x: number, y: number, style?: CircleStyle): RoomVisual;
+
+ /**
+ * Draw a circle.
+ * @param pos The position object of the center.
+ * @param style An object describing the style.
+ * @returns The RoomVisual object itself, so that you can chain calls.
+ */
+ circle(pos: RoomPosition, style?: CircleStyle): RoomVisual;
+
+ /**
+ * Draw a rectangle.
+ * @param x The X coordinate of the top-left corner.
+ * @param y The Y coordinate of the top-left corner.
+ * @param w The width of the rectangle.
+ * @param h The height of the rectangle.
+ * @param style The (optional) style.
+ * @returns The RoomVisual object, for chaining.
+ */
+ rect(
+ x: number,
+ y: number,
+ w: number,
+ h: number,
+ style?: PolyStyle,
+ ): RoomVisual;
+
+ /**
+ * Draw a line.
+ * @param topLeftPos The position object of the top-left corner.
+ * @param width The width of the rectangle.
+ * @param height The height of the rectangle.
+ * @param style An object describing the style.
+ * @returns The RoomVisual object itself, so that you can chain calls.
+ */
+ rect(
+ topLeftPos: RoomPosition,
+ width: number,
+ height: number,
+ style?: PolyStyle,
+ ): RoomVisual;
+ /**
+ * Draw a polygon.
+ * @param points An array of points. Every array item should be either an array with 2 numbers (i.e. [10,15]), or a RoomPosition object.
+ * @param style The (optional) style.
+ * @returns The RoomVisual object, for chaining.
+ */
+ poly(
+ points: ([number, number] | RoomPosition)[],
+ style?: PolyStyle,
+ ): RoomVisual;
+
+ /**
+ * Draw a text label.
+ * @param text The text message.
+ * @param x The X coordinate of the label baseline center point.
+ * @param y The Y coordinate of the label baseline center point.
+ * @param style The (optional) text style.
+ * @returns The RoomVisual object, for chaining.
+ */
+ text(text: string, x: number, y: number, style?: TextStyle): RoomVisual;
+
+ /**
+ * Draw a text label. You can use any valid Unicode characters, including emoji.
+ * @param text The text message.
+ * @param pos The position object of the center.
+ * @param style An object describing the style.
+ * @returns The RoomVisual object itself, so that you can chain calls.
+ */
+ text(text: string, pos: RoomPosition, style?: TextStyle): RoomVisual;
+
+ /**
+ * Remove all visuals from the room.
+ * @returns The RoomVisual object, for chaining.
+ */
+ clear(): RoomVisual;
+
+ /**
+ * Get the stored size of all visuals added in the room in the current tick.
+ * It must not exceed 512,000 (500 KB).
+ * @returns The size of the visuals in bytes.
+ */
+ getSize(): number;
+
+ /**
+ * Returns a compact representation of all visuals added in the room in the current tick.
+ * @returns A string with visuals data. There's not much you can do with the string besides store them for later.
+ */
+ export(): string;
+
+ /**
+ * Add previously exported (with `RoomVisual.export`) room visuals to the room visual data of the current tick.
+ * @param data The string returned from `RoomVisual.export`.
+ * @returns The RoomVisual object itself, so that you can chain calls.
+ */
+ import(data: string): RoomVisual;
+}
+
+interface LineStyle {
+ /**
+ * Line width, default is 0.1.
+ */
+ width?: number;
+ /**
+ * Line color in any web format, default is #ffffff(white).
+ */
+ color?: string;
+ /**
+ * Opacity value, default is 0.5.
+ */
+ opacity?: number;
+ /**
+ * Either undefined (solid line), dashed, or dotted.Default is undefined.
+ */
+ lineStyle?: "dashed" | "dotted" | "solid";
+}
+
+interface PolyStyle {
+ /**
+ * 填充颜色,允许使用任何 web 格式颜色,默认值为 `#ffffff` (白色)。
+ */
+ fill?: string;
+ /**
+ * 透明度,默认值为 `0.5`。
+ */
+ opacity?: number;
+ /**
+ * 轮廓颜色,允许使用任何 web 格式颜色,默认 `undefined`(没有轮廓)。
+ */
+ stroke?: string | undefined;
+ /**
+ * 轮廓宽度,默认值为 `0.1`。
+ */
+ strokeWidth?: number;
+ /**
+ * `undefined`(实线),`solid`(实线),`dashed` (虚线) 或者 `dotted` (点线) 之一。默认值为 `undefined`。
+ */
+ lineStyle?: "dashed" | "dotted" | "solid";
+}
+
+interface CircleStyle extends PolyStyle {
+ /**
+ * 圆的半径,默认值为 `0.15`。
+ */
+ radius?: number;
+}
+
+interface TextStyle {
+ /**
+ * Font color in any web format, default is #ffffff(white).
+ */
+ color?: string;
+ /**
+ * Either a number or a string in one of the following forms:
+ * 0.7 - relative size in game coordinates
+ * 20px - absolute size in pixels
+ * 0.7 serif
+ * bold italic 1.5 Times New Roman
+ */
+ font?: number | string;
+ /**
+ * Stroke color in any web format, default is undefined (no stroke).
+ */
+ stroke?: string;
+ /**
+ * Stroke width, default is 0.15.
+ */
+ strokeWidth?: number;
+ /**
+ * Background color in any web format, default is undefined (no background).When background is enabled, text vertical align is set to middle (default is baseline).
+ */
+ backgroundColor?: string;
+
+ /**
+ * Background rectangle padding, default is 0.3.
+ */
+ backgroundPadding?: number;
+ align?: "center" | "left" | "right";
+ /**
+ * Opacity value, default is 1.0.
+ */
+ opacity?: number;
+}
+/**
+ * 一个代表了你的单位和建筑所在房间的对象。
+ *
+ * 它可以被用来“环顾四周”,查找路径等。
+ *
+ * 所有 `RoomObject` 都有一个链接到其所在房间 `Room` 实例的属性 `room`。
+ */
+interface Room {
+ readonly prototype: Room;
+
+ /**
+ * 该房间中的控制器(Controller)建筑,如果其不存在则返回 `undefined`。
+ */
+ controller?: StructureController;
+ /**
+ * 本房间中所有 spawn 和 extension 中的可用能量总额。
+ */
+ energyAvailable: number;
+ /**
+ * 本房间中所有 spawn 和 extension 的容量上限 `energyCapacity` 总额。
+ */
+ energyCapacityAvailable: number;
+ /**
+ * 返回该房间中前一个 tick 发生的事件数组。
+ * @param raw 如果该参数为 false 或者未定义,则本方法将会返回使用 `JSON.parse` 解析后的对象,在首次访问时可能会造成一些 CPU 消耗(返回值会被缓存以方便后续调用)。如果 raw 为 `true`。则原始的 JSON 字符串将会被返回。
+ */
+ getEventLog(raw?: boolean): EventItem[];
+ /**
+ * `Memory.rooms[room.name]` 的简写。你可以用它来快速访问到该房间特定的内存数据对象。[点此了解有关内存的更多信息](https://screeps-cn.github.io/global-objects.html#Memory-object)。
+ */
+ memory: RoomMemory;
+ /**
+ * One of the `MODE_*` constants.
+ */
+ mode: string;
+ /**
+ * 房间名称。
+ */
+ readonly name: string;
+ /**
+ * 该房间中的 `Storage` 建筑,如果其不存在则返回 `undefined`。
+ */
+ storage?: StructureStorage;
+ /**
+ * 该房间中的 `Terminal` 建筑,如果其不存在则返回 `undefined`。
+ */
+ terminal?: StructureTerminal;
+ /**
+ * 该房间的 `RoomVisual` 对象。您可以使用该对象在房间中绘制简单的形状 (线条,圆,文本标签)。
+ */
+ visual: RoomVisual;
+ /**
+ * 在指定位置创建一个新的 `ConstructionSite`。
+ * @param x X 坐标。
+ * @param y Y 坐标。
+ * @param structureType `STRUCTURE_*` 常量之一: STRUCTURE_EXTENSION, STRUCTURE_RAMPART, STRUCTURE_ROAD, STRUCTURE_SPAWN, STRUCTURE_WALL, STRUCTURE_LINK
+ * @returns Result Code: OK, ERR_INVALID_TARGET, ERR_INVALID_ARGS, ERR_RCL_NOT_ENOUGH
+ */
+ createConstructionSite(
+ x: number,
+ y: number,
+ structureType: BuildableStructureConstant,
+ ): ScreepsReturnCode;
+ /**
+ * 在指定位置创建一个新的 `ConstructionSite`。
+ * @param pos 可以为 [`RoomPosition`](https://screeps-cn.github.io/api/#RoomPosition) 对象或任何包含 `RoomPosition` 的对象。
+ * @param structureType `STRUCTURE_*` 常量之一: STRUCTURE_EXTENSION, STRUCTURE_RAMPART, STRUCTURE_ROAD, STRUCTURE_SPAWN, STRUCTURE_WALL, STRUCTURE_LINK
+ * @returns Result Code: OK, ERR_INVALID_TARGET, ERR_INVALID_ARGS, ERR_RCL_NOT_ENOUGH
+ */
+ createConstructionSite(
+ pos: RoomPosition | _HasRoomPosition,
+ structureType: StructureConstant,
+ ): ScreepsReturnCode;
+ /**
+ * 在指定位置创建一个新的 `ConstructionSite`。
+ * @param x X 坐标。
+ * @param y Y 坐标。
+ * @param structureType `STRUCTURE_*` 常量之一: STRUCTURE_EXTENSION, STRUCTURE_RAMPART, STRUCTURE_ROAD, STRUCTURE_SPAWN, STRUCTURE_WALL, STRUCTURE_LINK
+ * @param name 建筑的名称,该建筑必须支持设置名字(当前仅有 spawn)。
+ * @returns Result Code: OK, ERR_INVALID_TARGET, ERR_INVALID_ARGS, ERR_RCL_NOT_ENOUGH
+ */
+ createConstructionSite(
+ x: number,
+ y: number,
+ structureType: STRUCTURE_SPAWN,
+ name?: string,
+ ): ScreepsReturnCode;
+ /**
+ * 在指定位置创建一个新的 `ConstructionSite`。
+ * @param pos 可以为 [`RoomPosition`](https://screeps-cn.github.io/api/#RoomPosition) 对象或任何包含 `RoomPosition` 的对象。
+ * @param structureType `STRUCTURE_*` 常量之一: STRUCTURE_EXTENSION, STRUCTURE_RAMPART, STRUCTURE_ROAD, STRUCTURE_SPAWN, STRUCTURE_WALL, STRUCTURE_LINK
+ * @param name 建筑的名称,该建筑必须支持设置名字(当前仅有 spawn)。
+ * @returns Result Code: OK, ERR_INVALID_TARGET, ERR_INVALID_ARGS, ERR_RCL_NOT_ENOUGH
+ */
+ createConstructionSite(
+ pos: RoomPosition | _HasRoomPosition,
+ structureType: STRUCTURE_SPAWN,
+ name?: string,
+ ): ScreepsReturnCode;
+ /**
+ * 在指定位置创建一个新的 [Flag](https://screeps-cn.github.io/api/#Flag)。
+ * @param x X 坐标。
+ * @param y Y 坐标。
+ * @param name (可选) 新旗帜的名称。
+ *
+ * 它应该是唯一的,即 `Game.flags` 不应该包含拥有相同名称(哈希键)的不同旗帜。
+ *
+ * 如果未定义,则会生成随机名称。
+ *
+ * 最长不得超过 60 字符。
+ * @param color (可选) 新旗帜的颜色。应为 `COLOR_*` 常量之一。默认值为 `COLOR_WHITE`。
+ * @param secondaryColor (可选) 新旗帜的次要颜色。应为 `COLOR_*` 常量之一。默认值等于 color 属性值。
+ * @returns 新旗帜的名称,或者下列错误码之一: `ERR_NAME_EXISTS`, `ERR_INVALID_ARGS`
+ */
+ createFlag(
+ x: number,
+ y: number,
+ name?: string,
+ color?: ColorConstant,
+ secondaryColor?: ColorConstant,
+ ): ERR_NAME_EXISTS | ERR_INVALID_ARGS | string;
+ /**
+ * 在指定位置创建一个新的 [Flag](https://screeps-cn.github.io/api/#Flag)。
+ * @param pos 可以为 [`RoomPosition`](https://screeps-cn.github.io/api/#RoomPosition) 对象或任何包含 `RoomPosition` 的对象。
+ * @param name (可选) 新旗帜的名称。
+ *
+ * 它应该是唯一的,即 `Game.flags` 不应该包含拥有相同名称(哈希键)的不同旗帜。
+ *
+ * 如果未定义,则会生成随机名称。
+ *
+ * 最长不得超过 60 字符。
+ * @param color (可选) 新旗帜的颜色。应为 `COLOR_*` 常量之一。默认值为 `COLOR_WHITE`。
+ * @param secondaryColor (可选) 新旗帜的次要颜色。应为 `COLOR_*` 常量之一。默认值等于 color 属性值。
+ * @returns 新旗帜的名称,或者下列错误码之一: `ERR_NAME_EXISTS`, `ERR_INVALID_ARGS`
+ */
+ createFlag(
+ pos: RoomPosition | { pos: RoomPosition },
+ name?: string,
+ color?: ColorConstant,
+ secondaryColor?: ColorConstant,
+ ): ERR_NAME_EXISTS | ERR_INVALID_ARGS | string;
+ /**
+ * 查找房间中指定类型的所有对象。在应用自定义的 `filter` 之前,搜索结果会被自动缓存到指定的房间和类型,自动缓存将持续到本 tick 结束。
+ * @param type `FIND_*` 常量之一
+ * @param opts 可选项对象,用户刷选。
+ * @returns 找到的对象数组
+ */
+ find(
+ type: K,
+ opts?: FilterOptions,
+ ): FindTypes[K][];
+ find(
+ type: FIND_STRUCTURES | FIND_MY_STRUCTURES | FIND_HOSTILE_STRUCTURES,
+ opts?: FilterOptions,
+ ): T[];
+ /**
+ * 找到通往另一个房间的出口方向。请注意,房间之间的移动不需要此方法,您只需将另一个房间中的目标传递给 `Creep.moveTo` 方法即可。
+ * @param room 其他房间的名称或者房间对象。
+ * @returns 出口方向常量: `FIND_EXIT_TOP`, `FIND_EXIT_RIGHT`, `FIND_EXIT_BOTTOM`, `FIND_EXIT_LEFT`
+ * 或者下列错误码之一: `ERR_NO_PATH`, `ERR_INVALID_ARGS`
+ */
+ findExitTo(
+ room: string | Room,
+ ): ExitConstant | ERR_NO_PATH | ERR_INVALID_ARGS;
+ /**
+ * 使用优化的 A* 搜索算法 [Jump Point Search](http://en.wikipedia.org/wiki/Jump_point_search) 在 `fromPos` 和 `toPos` 之间找到房间内的最佳路径。
+ * @param fromPos 起始位置。
+ * @param toPos 结束位置。
+ * @param opts (可选) 包含寻路可选项的对象
+ * @returns 一个数组,其元素为如下形式的路径步骤:
+ *
+ * ```json
+ * [
+ * { x: 10, y: 5, dx: 1, dy: 0, direction: RIGHT },
+ * { x: 10, y: 6, dx: 0, dy: 1, direction: BOTTOM },
+ * { x: 9, y: 7, dx: -1, dy: 1, direction: BOTTOM_LEFT },
+ * ...
+ * ]
+ * ```
+ */
+ findPath(
+ fromPos: RoomPosition,
+ toPos: RoomPosition,
+ opts?: FindPathOpts,
+ ): PathStep[];
+ /**
+ * 获取指定位置的 `RoomPosition` 对象。
+ * @param x X 坐标。
+ * @param y Y 坐标。
+ * @returns 一个 RoomPosition 对象,如果无法获取则返回 null。
+ */
+ getPositionAt(x: number, y: number): RoomPosition | null;
+ /**
+ * 获取一个 [`Room.Terrain`](https://screeps-cn.github.io/api/#Room-Terrain) 对象,可以用它来快速访问房间内的静态地形数据。
+ * 即使没有指定房间的视野,您依旧可以使用该方法访问它的地形数据,该方法适用于游戏世界中的所有房间。
+ */
+ getTerrain(): RoomTerrain;
+ /**
+ * 获取指定房间位置的对象数组。
+ * @param x 该房间中的 X 坐标。
+ * @param y 该房间中的 Y 坐标。
+ * @returns 一个位于指定位置的对象数组,格式如下:
+ *
+ * ```json
+ * [
+ * { type: 'creep', creep: {...} },
+ * { type: 'structure', structure: {...} },
+ * ..
+ * { type: 'terrain', terrain: 'swamp' }
+ * ]
+ * ```
+ */
+ lookAt(x: number, y: number): LookAtResult[];
+ /**
+ * 获取指定房间位置的对象数组。
+ * @param target 可以是 `RoomPosition` 对象或者任何包含 RoomPosition 属性的对象。
+ * @returns 一个位于指定位置的对象数组,格式如下:
+ *
+ * ```json
+ * [
+ * { type: 'creep', creep: {...} },
+ * { type: 'structure', structure: {...} },
+ * ..
+ * { type: 'terrain', terrain: 'swamp' }
+ * ]
+ * ```
+ */
+ lookAt(target: RoomPosition | { pos: RoomPosition }): LookAtResult[];
+ /**
+ * 获取指定房间区域内的对象列表。
+ * @param top 区域顶部边界的 Y 坐标。
+ * @param left 区域左侧边界的 X 坐标。
+ * @param bottom 区域底部边界的 Y 坐标。
+ * @param right 区域右侧边界的 X 坐标。
+ * @param asArray 设为 `true` 来获得纯数组形式。
+ * @returns `asArray` 值为 `false` 或者未定义,则该方法以如下格式返回指定区域内的对象。
+ */
+ lookAtArea(
+ top: number,
+ left: number,
+ bottom: number,
+ right: number,
+ asArray?: false,
+ ): LookAtResultMatrix;
+ /**
+ * 获取指定房间区域内的对象列表。
+ * @param top 区域顶部边界的 Y 坐标。
+ * @param left 区域左侧边界的 X 坐标。
+ * @param bottom 区域底部边界的 Y 坐标。
+ * @param right 区域右侧边界的 X 坐标。
+ * @param asArray 设为 `true` 来获得纯数组形式。
+ * @returns 如果 `asArray` 值为 `true`,则该方法以如下格式返回指定区域内的对象数组:
+ */
+ lookAtArea(
+ top: number,
+ left: number,
+ bottom: number,
+ right: number,
+ asArray: true,
+ ): LookAtResultWithPos[];
+ /**
+ * 在指定位置查找指定类型的对象。
+ * @param type `LOOK_*` 常量之一。
+ * @param x 该房间中的 X 坐标。
+ * @param y 该房间中的 Y 坐标。
+ * @returns 在指定位置找到的指定类型的对象数组。
+ */
+ lookForAt(
+ type: T,
+ x: number,
+ y: number,
+ ): AllLookAtTypes[T][];
+ /**
+ * 在指定位置查找指定类型的对象。
+ * @param type `LOOK_*` 常量之一。
+ * @param target 可以是 `RoomPosition` 对象或者任何包含 `RoomPosition` 属性的对象。
+ * @returns 在指定位置找到的指定类型的对象数组。
+ */
+ lookForAt(
+ type: T,
+ target: RoomPosition | _HasRoomPosition,
+ ): AllLookAtTypes[T][];
+ /**
+ * 在指定房间区域查找指定类型的对象列表。
+ * @param type `LOOK_*` 常量之一。
+ * @param top 区域顶部边界的 Y 坐标。
+ * @param left 区域左侧边界的 X 坐标。
+ * @param bottom 区域底部边界的 Y 坐标。
+ * @param right 区域右侧边界的 X 坐标。
+ * @param asArray 设为 `true` 来获得纯数组形式。
+ * @returns 如果 `asArray` 值为 `false` 或者未定义,则该方法以如下格式返回指定区域内的对象
+ */
+ lookForAtArea(
+ type: T,
+ top: number,
+ left: number,
+ bottom: number,
+ right: number,
+ asArray?: false,
+ ): LookForAtAreaResultMatrix;
+ /**
+ * 在指定房间区域查找指定类型的对象列表。
+ * @param type `LOOK_*` 常量之一。
+ * @param top 区域顶部边界的 Y 坐标。
+ * @param left 区域左侧边界的 X 坐标。
+ * @param bottom 区域底部边界的 Y 坐标。
+ * @param right 区域右侧边界的 X 坐标。
+ * @param asArray 设为 `true` 来获得纯数组形式。
+ * @returns 如果 `asArray` 值为 `true`,则该方法以如下格式返回指定区域内的对象数组
+ */
+ lookForAtArea(
+ type: T,
+ top: number,
+ left: number,
+ bottom: number,
+ right: number,
+ asArray: true,
+ ): LookForAtAreaResultArray;
+
+ /**
+ * Serialize a path array into a short string representation, which is suitable to store in memory.
+ * @param path A path array retrieved from Room.findPath.
+ * @returns A serialized string form of the given path.
+ */
+
+ /**
+ * Deserialize a short string path representation into an array form.
+ * @param path A serialized path string.
+ * @returns A path array.
+ */
+}
+
+interface RoomConstructor extends _Constructor {
+ new (id: string): Room;
+
+ Terrain: RoomTerrainConstructor;
+
+ /**
+ * 将路径数组序列化为适合存储在内存中的短字符串形式。
+ * @param path [`Room.findPath`](https://screeps-cn.github.io/api/#Room.findPath) 返回的路径数组。
+ * @returns 参数路径的序列化字符串。
+ */
+ serializePath(path: PathStep[]): string;
+ /**
+ * 将短字符串形式的路径反序列化为路径数组。
+ * @param path 序列化的路径字符串。
+ * @returns 路径数组
+ */
+ deserializePath(path: string): PathStep[];
+}
+
+declare const Room: RoomConstructor;
+/**
+ * A destroyed structure. This is a walkable object.
+ *
+ * - Decay: 500 ticks except some special cases
+ *
+ */
+interface Ruin extends RoomObject {
+ /**
+ * A unique object identificator.
+ * You can use {@link Game.getObjectById} method to retrieve an object instance by its id.
+ */
+ id: Id;
+ /**
+ * Time of destruction.
+ */
+ destroyTime: number;
+ /**
+ * An object with the ruin contents.
+ */
+ store: StoreDefinitionUnlimited;
+ /**
+ * The amount of game ticks before this ruin decays.
+ */
+ ticksToDecay: number;
+ /**
+ * An object containing the destroyed structure.
+ */
+ structure: AnyStructure;
+}
+
+interface RuinConstructor extends _Constructor, _ConstructorById {}
+
+declare const Ruin: RuinConstructor;
+/**
+ * 一个能量源对象。可以被拥有 `WORK` 身体部件的 creep 采集。
+ */
+interface Source extends RoomObject {
+ /**
+ * The prototype is stored in the Source.prototype global object. You can use it to extend game objects behaviour globally:
+ */
+ readonly prototype: Source;
+ /**
+ * 能量的剩余容量。
+ */
+ energy: number;
+ /**
+ * 该 source 的总能量容量。
+ */
+ energyCapacity: number;
+ /**
+ * 一个唯一的对象标识。你可以使用 [`Game.getObjectById`](https://screeps-cn.github.io/api/#Game.getObjectById) 方法获取对象实例。
+ */
+ id: Id;
+ /**
+ * 如果你可以获得一个 Source 的实例,那么你就可以看到这个实例。
+ * 如果你能看到某个 Source,那么你就可以看到它所在的 room。
+ */
+ room: Room;
+ /**
+ * 该 source 还有多少 tick 将会再生。
+ */
+ ticksToRegeneration: number;
+}
+
+interface SourceConstructor
+ extends _Constructor