Screeps API

OBJECTS

arenaInfo

ConstructionSite

Creep

GameObject

OwnedStructure

Resource

Source

Store

Structure

StructureContainer

StructureExtension

StructureRampart

StructureRoad

StructureSpawn

StructureTower

StructureWall

Spawning

CostMatrix

Visual


FUNCTIONS

createConstructionSite

findClosestByPath

findClosestByRange

findInRange

findPath

getCpuTime

getDirection

getHeapStatistics

getObjectById

getObjectsByPrototype

getObjects

getRange

getTerrainAt

getTicks

searchPath


CAPTURE THE FLAG

BodyPart

Flag

StructureTower


SPAWN AND SWAMP

COLLECT AND CONTROL

AreaEffect

ScoreCollector

EFFECT_DAMAGE

EFFECT_FREEZE

EFFECT_HEAL

RESOURCE_SCORE

RESOURCE_SCORE_X

RESOURCE_SCORE_Y

RESOURCE_SCORE_Z


CONSTANTS

ALL

arenaInfoobject

namestring

竞技场的名字

levelnumber

目前处于Basic(基础)竞技场的等级为1,Advance(高级)竞技场的等级为2

seasonstring

赛季,目前等于“alpha”

ticksLimitnumber

游戏tick(时间)限制

cpuTimeLimitnumber

每刻的CPU执行效率时间限制(除了第一刻)

cpuTimeLimitFirstTicknumber

第一刻的CPU执行效率时间限制

import { arenaInfo } from 'game';
export function loop(){
    console.log(arenaInfo.name);
}

ConstructionSiteclass extends GameObject

一个正在建筑中的结构空位,要在该空位上建造一个结构,你需要给附有 WORK 属性的creep一些能量,并且执行build功能。

myboolean

该结构空位目前是你正在建造的

progressnumber

该结构目前建筑的进度

progressTotalnumber

场上要建筑的结构的总进度

structureStructure

建造的结构(当该结构建完成时)

remove()

移除建造的结构

CostMatrixclass

用于自定义导航成本数据的一个类,如果在该类中发现非0值,则将使用该值代替掉默认地形造成的成本。

constructor()

为所有位置创建一个初始值为0的新CostMatrix

set(x, y, cost)

在该CostMatrix中设置来自x, y位置的成本值。

参数 类型 描述
x number 游戏场上的x轴
y number 游戏场上的y轴
cost number 该位置的成本值,必须是一个整数。0的成本将使用该位置的默认成本。大于或等于255的成本将被视作无法使用。

get(x, y)

在该CostMatrix中获取来自x, y位置的成本值。

参数 类型 描述
x number 游戏场上的x轴
y number 游戏场上的y轴

clone()

将该CostMatrix复制到具有着相同数据的一个新的CostMatrix中,并返回一个新的CostMatrix

import { CostMatrix } from 'game/path-finder';

export function loop() {
    let costs = new CostMatrix;
}
import { CostMatrix } from 'game/path-finder';

export function loop() {
    let costs = new CostMatrix;
    costs.set(constructionSite.x, constructionSite.y, 10); // 避免在建筑空位上走过。
}

Creepclass extends GameObject

Creep们是你的工作单位,Creep们可以移动、抓取能量、建造结构、攻击其他人的Creep以及执行很多别的功能。每个Creep最多可以拥有50个bodyPart(属性【下同】)构成,可以有以下几种类型:

属性 花费 属性功能
MOVE 50 每刻减少2点疲劳值
WORK 100 每刻从一个能量源抓取2点能量单元
每刻构建一个可容纳5点能源单元的结构
CARRY 50 最多可以容纳50个资源单元
ATTACK 80 攻击其他的Creep、结构,用短距离每刻攻击30次
RANGED_ATTACK 150 攻击其他的Creep、结构,用3格远长距离每刻攻击10次
攻击3格范围内所有Creep、结构,命中1-4-10次【取决于格数】
HEAL 250 治疗自身或另一个Creep,在短距离内每刻治疗12次,远距离每刻治疗4次
TOUGH 10 没有任何效果,只是对Creep增加了额外的命中点。(ps:就一占位符)

bodyarray

描述Creep的属性列表,每个元素包含以下几个数值:

  • type:string(该Creeps的类型之一)
  • hits:number(该Creeps剩余的血量)

fatiguenumber

疲劳值,如果该值大于0,则该Creep不能移动

hitsnumber

该Creep目前的血量

hitsMaxnumber

该Creep的最大血量

myboolean

属于你自己的Creep

storeStore

一个Store对象,包含目前该Creep所拥有的货物

attack(target)

使用近战攻击邻近的另一个Creep或结构。需要该Creep具有ATTACK属性。如果要攻击的目标位于墙壁内,则会攻击该墙壁。要攻击的目标必须位于Creep的相邻区块中。

参数 类型 描述
target Creep
Structure
要攻击的目标对象

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_INVALID_TARGET -7 目标不属于可被攻击的对象
ERR_NOT_IN_RANGE -9 目标太远啦
ERR_NO_BODYPART -12 这个Creep的属性列表里并没有ATTACK(攻击)属性

build(target)

使用该Creep携带的能量在目标区块建造一个结构。需要该Creep具有WORKCARRY属性。目标区块必须在Creep的3个区块范围以内。

参数 类型 描述
target ConstructionSite 要建造的目标建筑描述

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_NOT_ENOUGH_RESOURCES -6 该Creep没有足够多的搬运能量
ERR_INVALID_TARGET -7 目标不是可以被建造的单位,或者是你无法在此处建造结构(可能是因为你要建造的区块有障碍物)
ERR_NOT_IN_RANGE -9 目标太远啦
ERR_NO_BODYPART -12 这个Creep的属性列表里并没有WORK(攻击)属性

drop(resourceType, [amount])

将该Creep身上的资源置于当前区块位置(扔掉)

参数 类型 描述
resourceType string RESOURCE_*的常量之一
amount (optional) number 要置于当前区块的资源数量

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_NOT_ENOUGH_RESOURCES -6 该Creep没有该数量那么多的资源要置于地上
ERR_INVALID_ARGS -10 resourceType参数有误,并不是有效的RESOURCE_*常量之一

harvest(target)

从能量源区块获取能量,需要该Creep具有WORK属性,如果该Creep具有CARRY属性,将会把收集的资源置入身体里,否则资源将会掉落在相邻的地面上。目标必须位于该Creep的相邻区块内

参数 类型 描述
target Source 要收集的资源对象

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_NOT_ENOUGH_RESOURCES -6 目标不包含任何可收集的资源
ERR_INVALID_TARGET -7 目标不属于可以被收集资源的对象
ERR_NOT_IN_RANGE -9 目标太远啦
ERR_NO_BODYPART -12 你的Creep属性列表没有包含WORK属性

heal(target)

治疗自己或其他己方的Creep,它将恢复Creep们受到伤害的部分,并恢复血量。需要该Creep具有HEAL属性,目标必须位于该Creep的相邻区块内

参数 类型 描述
target Creep 要治疗的目标对象

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_INVALID_TARGET -7 目标不是有效的Creep对象
ERR_NOT_IN_RANGE -9 目标太远啦
ERR_NO_BODYPART -12 你的Creep属性列表没有包含HEAL属性

move(direction)

将该Creep沿指定方向一直移动,直到撞到墙壁。需要该Creep具有MOVE属性

参数 类型 描述
direction number 支持以下常量之一
TOP TOP_RIGHT RIGHT BOTTOM_RIGHT BOTTOM BOTTOM_LEFT LEFT TOP_LEFT

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_INVALID_ARGS -10 输入的方向常量不正确
ERR_TIRED -11 该Creep的疲劳值大于0,无法移动
ERR_NO_BODYPART -12 你的Creep属性列表没有包含MOVE属性

moveTo(target, opts)

找到到达目标区块的最佳路径,并尝试移动到该目标区块。需要该Creep具有MOVE属性

参数 类型 描述
target object 可以是GameObject或者任何包含了x和y属性的对象
opts object 一个附带着附加属性的对象,这些选项将按照参数传值给game/utils findPath

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_TIRED -11 该Creep的疲劳值大于0,无法移动
ERR_NO_BODYPART -12 你的Creep属性列表没有包含MOVE属性

pickup(target)

捡起该区块的一个物品(一个扔掉的资源),需要该Creep具有CARRY属性。目标必须位于该Creep的相邻区块或位于同一区块内

参数 类型 描述
target Resource 要拾取的目标对象

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_INVALID_TARGET -7 目标不是一个有效的Creep对象
ERR_FULL -8 该Creep已经不能接收更多的资源了(已经满了)
ERR_NOT_IN_RANGE -9 目标太远啦

pull(target)

帮助另一个Creep跟随这个Creep,target(目标)移动所产生的疲劳值将赋给这个Creep。需要该Creep具有MOVE属性。目标必须位于该Creep的相邻区块内,Creep必须移动到其他地方,目标需要向着该Creep移动。

参数 类型 描述
target Creep 目标Creep

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_INVALID_TARGET -7 目标不是一个有效的Creep对象
ERR_NOT_IN_RANGE -9 目标太远啦

rangedAttack(target)

使用远程攻击邻近的另一个Creep或结构。需要该Creep具有RANGED_ATTACK属性。如果要攻击的目标位于墙壁内,则会攻击该墙壁。要攻击的目标必须位于Creep的3格区块内

参数 类型 描述
target Creep
Structure
要攻击的目标对象

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_INVALID_TARGET -7 目标不属于可被攻击的对象
ERR_NOT_IN_RANGE -9 目标太远啦
ERR_NO_BODYPART -12 这个Creep的属性列表里并没有RANGED_ATTACK属性

rangedHeal(target)

治疗自己或远处的其他己方的Creep,它将恢复Creep们受到伤害的部分,并恢复血量。需要该Creep具有HEAL属性,目标必须位于该Creep的3格区块内

参数 类型 描述
target Creep 要治疗的目标Creep对象

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_INVALID_TARGET -7 目标不是有效的Creep对象
ERR_NOT_IN_RANGE -9 目标太远啦
ERR_NO_BODYPART -12 你的Creep属性列表没有包含HEAL属性

rangedMassAttack()

对3格区块以内的所有敌方Creep或建筑进行远程攻击。需要该Creep具有RANGED_ATTACK属性,攻击力取决于该Creep对每个目标的射程,己方单位不受此影响。

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_NO_BODYPART -12 你的Creep属性列表没有包含RANGED_ATTACK属性

transfer(target, resourceType, [amount])

将资源从Creep身上转到另一个【对象】上。目标必须位于该Creep的相邻区块内

参数 类型 描述
target Creep
Structure
要转移的目标对象
resourceType string RESOURCE_*的常量之一
amount (optional) number 要转移的资源数量,如果省略该值,则默认转移所有可用的资源。

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_NOT_ENOUGH_RESOURCES -6 该Creep目前没有指定数量的资源可供转移
ERR_INVALID_TARGET -7 要转移的目标对象不属于可以包含指定资源的有效对象
ERR_FULL -8 目标已经不能接收更多的资源了(已经满了)
ERR_NOT_IN_RANGE -9 目标太远啦
ERR_INVALID_ARGS -10 resourceType参数填写不属于RESOURCE_*常量之一,或者填写的数量不正确。

withdraw(target, resourceType, [amount])

从结构中抓取资源。目标必须位于该Creep的相邻区块内。多个Creep可以在同一个tick里对同一个对象进行抓取。你的Creep也可以从敌人的结构中抓取资源,以防止你的领地里没有敌人的结构。

参数 类型 描述
target Structure 要抓取的目标结构
resourceType string RESOURCE_*的常量之一
amount (optional) number 要抓取的资源数量,如果省略该值,则默认抓取所有可用的资源。

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_NOT_ENOUGH_RESOURCES -6 目标结构目前没有指定数量的资源可供转移
ERR_INVALID_TARGET -7 要抓取的目标对象不属于可以包含指定资源的有效对象
ERR_FULL -8 该Creep已经不能接收更多的资源了(已经满了)
ERR_NOT_IN_RANGE -9 目标太远啦
ERR_INVALID_ARGS -10 resourceType参数填写不属于RESOURCE_*常量之一,或者填写的数量不正确。
let hostileCreeps = getObjectsByPrototype(Creep).filter(i => !i.my);
let target = creep.findClosestByRange(hostileCreeps);
if (target){
    creep.move(target);
    creep.attack(target);
}
let myConstructionSites = getObjectsByPrototype(ConstructionSite).filter(i => i.my);
let target = creep.findClosestByRange(myConstructionSites);
if (target) {
    if (creep.build(target) == ERR_NOT_IN_RANGE) {
        creep.move(target);
    }
}
creep.drop(RESOURCE_ENERGY);
let activeSources = getObjectsByPrototype(Source).filter(i => i.energy > 0);
let source = creep.findClosestByRange(activeSources);
if(source){
    if (creep.harvest(source) == ERR_NOT_IN_RANGE) {
        creep.move(source);
    }
}
let creeps = getObjectsByPrototype(Creep);
let myDamagedCreeps = creeps.filter(i => i.my && i.hits < i.hitsMax);
let target = tower.findClosestByRange(myDamagedCreeps);
if (creep.heal(target) == ERR_NOT_IN_RANGE) {
    creep.moveTo(target);
}
creep.move(RIGHT);
creep1.moveTo(creep2);
creep2.moveTo({x: 50, y: 50});
let resources = getObjectsByPrototype(Resource);
let target = creep.findClosestByRange(resources);
if (target) {
    if (creep.pickup(target) == ERR_NOT_IN_RANGE) {
        creep.moveTo(target);
    }
}
creep1.move(TOP);
creep1.pull(creep2);
creep2.moveTo(creep1);
let hostileCreeps = getObjectsByPrototype(Creep).filter(i => !i.my);
let targets = creep.findInRange(hostileCreeps);
if (targets.length) {
    creep.rangedAttack(targets[0]);
}
let creeps = getObjectsByPrototype(Creep);
let myDamagedCreeps = creeps.filter(i => i.my && i.hits < i.hitsMax);
let targets = creep.findInRange(myDamagedCreeps);
if (targets.length) {
    creep.rangedHeal(targets[0]);
}
if (creep.transfer(tower, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
    creep.moveTo(tower);
}
if (creep.withdraw(container, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
    creep.moveTo(container);
}

GameObjectclass

游戏对象的基类,所有的对象和类都继承自这个类

existsboolean

如果当前对象存在于游戏中,则返回true。在游戏刷新缓存时或创建新对象时可以检查该属性【ps:比如new了一个Creep的时候】

idstring

可以通过game/utils getObjectById函数找到该对象的唯一ID

ticksToDecaynumber

如果该对象已被定义,则该对象将在该数量的tick后被销毁。

xnumber

该对象目前处于房间区块的x坐标

ynumber

该对象目前处于房间区块的y坐标

findClosestByPath(position, [opts])

找到给定参数中路径与该GameObject最短的那一个对象的位置。(请参阅game/utils findClosestByPath

参数 类型 描述
positions array 要搜索的对象数组,内容须是GameObject或任何包含x和y属性的对象数组。
opts (optional) object 包含了searchPath函数支持的其他寻路标志的对象。

返回路径最短的那个对象位置,如果找不到或没有有效位置,则返回null。

findClosestByRange(position)

找到给定参数中直线距离与该GameObject最短的那一个对象的位置。(请参阅game/utils findClosestByRange

参数 类型 描述
positions array 要搜索的对象数组,内容须是GameObject或任何包含x和y属性的对象数组。

返回直线距离最短的那个对象位置

findInRange(position, range)

查找指定线性范围内的所有对象。(请参阅game/utils findInRange

参数 类型 描述
positions array 要搜索的对象数组,内容须是GameObject或任何包含x和y属性的对象数组。
range number 距离范围

返回一个范围内找到的所有对象的数组。

findPathTo(pos, [opts])

找到从该GameObject到指定参数对象的路径(请参阅game/utils findPathTo

参数 类型 描述
pos object 一个包含了x和y属性的对象
opts (optional) object 一个附带着附加属性的对象,这些选项将按照参数传值给game/utils findPath

返回一个包含x和y属性的对象数组找到的路径

getRangeTo(pos)

请参阅game/utils getRange

参数 类型 描述
pos object 一个包含了x和y属性的对象。
let path = creep.findPathTo(spawn);
console.log(path.length);

OwnedStructureclass extends Structure

一个具有所属玩家的结构的基类。

myboolean

对于属于你的结构将返回true,对于敌方的结构返回false,对于双方都可以使用的结构返回undefined

import { getObjectsByPrototype } from 'game/utils';
import { Creep, StructureSpawn } from 'game/prototypes';

export function loop() {
    let target = getObjectsByPrototype(StructureSpawn).find(i => !i.my);
}

Resourceclass extends GameObject

一个被丢弃的资源,如果迟迟不捡起来,过一段时间则会消失。丢弃的资源每刻减少的资源数计算公式为:向上取整(数量/1000)

amountnumber

丢弃资源目前的剩余数量

resourceTypestring

RESOURCE_*的常量之一

Sourceclass extends GameObject

一种能量源,可以使用具有WORK属性的Creep进行采集。

能量数量 1000
能量恢复 每刻10能量

energynumber

当前能量源中的能量

energyCapacitynumber

该能量源的最大存储能量

Spawningobject

当前正在生成的Creep详情,可以通过StructureSpawn.spawning属性获取并进行处理。

needTimenumber

生成Creep所需要的总时间

remainingTimenumber

余下的时间

creepCreep

要生成的Creep

cancel()

立刻取消生成Creep,但是生成的能量不会返还。

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你

Storeobject

在其货物中包含资源的一个类对象。

在游戏中共有两种存储器类型,分别是:通用存储器和限制存储器。

  • 通用存储器:可以容纳其容量范围内的任意资源(例如Creep或容器)
  • 限制存储器:只能容纳特定对象所需要的几种资源(如生成器、扩展装置、防御塔)

你可以通过寻址他们作为对象属性,可以从存储器获取特定资源

getCapacity([resource])

返回此存储器对于指定资源的容量,如果是通用存储,并且参数resource是undefined,则返回该存储器的总容量。

参数 类型 描述
resource (optional) RESOURCE_ENERGY

getFreeCapacity([resource])

返回该存储器的可用容量,对于限制存储器,如果传了参数并且该存储器可以存储该资源(有效),则返回该存储器对于参数资源可用容量。

参数 类型 描述
resource (optional) RESOURCE_ENERGY

getUsedCapacity([resource])

返回此存储器对于指定资源已使用的容量,如果是通用存储,并且参数resource是undefined,则返回该存储器已使用的的总容量。

参数 类型 描述
resource (optional) RESOURCE_ENERGY
console.log(creep.store[RESOURCE_ENERGY]);
if (creep.store[RESOURCE_ENERGY] < creep.store.getCapacity()) {
    creep.harvest(source);
}
if (tower.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
    creep.transfer(tower, RESOURCE_ENERGY);
}
if (container.store.getUsedCapacity() == 0) {
    // 该存储器是空的
}

Structureclass extends GameObject

所有结构对象类的基类。

hitsnumber

该结构的当前血量。

hitsMaxnumber

该结构的最大血量。

import { getObjectsByPrototype } from 'game/utils';
import { Structure } from 'game/prototypes';

export function loop() {
    let structures = getObjectsByPrototype(Structure).filter(i => i.hits < i.hitsMax);
    console.log(structures.length);
}

StructureContainerclass extends OwnedStructure

一个可以用于存储资源的小型容器,这是一个可移动的结构,所有丢弃/掉落的资源都会自动转移到同一部分的容器中。

容量 2000
花费 100
血量 300

storeStore

一个Store对象,包含目前该结构所拥有的货物

StructureExtensionclass extends OwnedStructure

一个包含了可用于生成更高级的Creep所需要的能量。扩展结构可以放置在任何地方,无论距离远近,任何生成器都可以使用它们。

花费 200
血量 100
容量 100

storeStore

一个Store对象,包含目前该结构所拥有的货物

let allExtensions = getObjectsByPrototype(StructureExtension);
let myEmptyExtensions = allExtensions.filter(e => e.my && e.store.getUsedCapacity(RESOURCE_ENERGY) == 0)
let closestEmptyExtension = creep.findClosestByRange(myEmptyExtensions);
creep.moveTo(closestEmptyExtension);

StructureRampartclass extends OwnedStructure

可以阻挡敌方Creep的移动,并保护同一位置的己方Creep和结构。

花费 200
血量 10000

StructureRoadclass extends Structure

将移动花费降低至1,使用道路结构可以创建更少MOVE属性的Creep。

花费
  • 平原上10
  • 沼泽上50
血量
  • 平原上500
  • 沼泽上2500

StructureSpawnclass extends OwnedStructure

该结构会生成Creep,并且会在每刻生成少量的能量。

花费 3000
血量 3000
容量 1000
生成时间 每个属性生成3刻

storeStore

一个Store对象,包含目前该结构所拥有的货物

spawningSpawning

如果该生成器正在生成Creep,则该函数将返回一个Spawning对象,否则为null。

spawnCreep(body)

如果该生成器正在生成Creep,则该函数将返回一个Spawning对象,否则为null。

参数 类型 描述
body array<string> 描述Creep属性的数组,应该包含1-50个具有以下常量之一的元素:
WORK MOVE CARRY ATTACK RANGED_ATTACK HEAL TOUGH

返回一个具有以下属性之一的对象:

error number ERR_*的常量之一
object Creep 正在生成的Creep对象

可能的错误代码:

ERR_NOT_OWNER -1 该Creep不属于你
ERR_BUSY -4 该生成器已经在生成另一个Creep了
ERR_NOT_ENOUGH_ENERGY -6 该生成器以及其扩展结构所包含的能量不足以生成给定属性的Creep
ERR_INVALID_ARGS -10 属性参数不正确
import { getObjectsByPrototype } from 'game/utils';
import { StructureSpawn } from 'game/prototypes';

export function loop() {
    const mySpawn = getObjectsByPrototype(StructureSpawn).find(s => s.my);
    const creep = mySpawn.spawnCreep([WORK, CARRY, MOVE]).object;
}

StructureTowerclass extends OwnedStructure

远程攻击范围内的游戏对象或者治疗己方Creep。其效果与距离成线性关系。每次行动都会消耗能量。

花费 1250
血量 3000
容量 50
冷却 10刻
行动最大距离 50
行动一次的能量 10
攻击效果 距离≤5时150血直到距离≥20时37血
治疗效果 距离≤5时100血直到距离≥20时25血

cooldownnumber

该塔结构正在处于冷却状态的剩余刻时间。

storeStore

一个Store对象,包含目前该结构所拥有的货物

attack(target)

远程攻击范围内的任何Creep或结构。

参数 类型 描述
target Creep
Structure
要攻击的目标对象

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_NOT_ENOUGH_ENERGY -6 该塔结构没有足够的能量
ERR_INVALID_TARGET -7 提供的参数不正确
ERR_TIRED -11 该塔目前正在冷却

heal(target)

远程治疗范围内的任何Creep。

参数 类型 描述
target Creep 要治疗的目标Creep对象

返回以下代码之一:

OK 0 操作已成功执行
ERR_NOT_OWNER -1 该Creep不属于你
ERR_NOT_ENOUGH_ENERGY -6 该塔结构没有足够的能量
ERR_INVALID_TARGET -7 提供的参数不正确
ERR_TIRED -11 该塔目前正在冷却
import { getObjectsByPrototype } from 'game/utils';
import { Creep } from 'game/prototypes';
import { TOWER_RANGE } from 'game/constants';

export function loop() {
    let target = tower.findClosestByRange(getObjectsByPrototype(Creep).filter(i => !i.my));
    if (tower.getRangeTo(target) <= TOWER_RANGE) {
        tower.attack(target);
    }
}
let creeps = getObjectsByPrototype(Creep);
let myDamagedCreeps = creeps.filter(i => i.my && i.hits < i.hitsMax);
let target = tower.findClosestByRange(myDamagedCreeps);
if (creep.heal(target) == ERR_NOT_IN_RANGE) {
    creep.moveTo(target);
}

StructureWallclass extends Structure

阻挡所有的Creep的移动。

花费 100
血量 10000

Visualclass

可视化操作提供了一种在游戏中显示各种可视化调试信息的方法。所有绘制的坐标均以游戏坐标为单位,并且以场地中心为中心。例如(10,10)将指向x:10; y:10的Creep中心。允许使用分数的坐标。

layernumber

对象的视觉层。

persistentboolean

此对象的视觉效果是否持续。

constructor([layer], persistent)

创建一个新的可视化空实例。

参数 类型 描述
layer (optional) number 该对象的视觉效果层。上层的视觉效果与下层的视觉效果重叠。默认值为0。
persistent boolean 此对象中的视觉效果是否持久。非持久视觉效果仅在当前刻期间可见。

circle(pos, [style])

绘制一个圆。

参数 类型 描述
pos object 对象的位置中心,可以是来自GameObject或任何包含了x和y的对象。
style (optional) object 一个具有以下属性的对象:
  • radius (number) 圆的半径,默认为0.15。
  • fill (string) 填充颜色,格式如下:#ffffff(十六进制三位数),默认为#ffffff。
  • opacity (number) 不透明度,默认为0.5。
  • stroke (string) 描边颜色,格式如下:#ffffff(十六进制三位数),默认为#ffffff。
  • strokeWidth (number) 描边线宽,默认为0.1。
  • lineStyle (string) undefined【solid line(实线)】、dashed(虚线)、dotted(点划线)三者中的一个,默认为undefined。

返回Visual对象本身,以便进行链式调用。

clear()

从对象中删除所有视觉效果。

返回Visual对象本身,以便可以链接调用。

line(pos1, pos2, [style])

绘制一条线。

参数 类型 描述
pos object 对象的起始位置,可以是来自GameObject或任何包含了x和y的对象。
pos object 对象的结束位置,可以是来自GameObject或任何包含了x和y的对象。
style (optional) object 一个具有以下属性的对象:
  • width (number) 线条宽度,默认为0.1。
  • color (string) 线条颜色,格式如下:#ffffff(十六进制三位数),默认为#ffffff。
  • opacity (number) 不透明度,默认为0.5。
  • lineStyle (string) undefined【solid line(实线)】、dashed(虚线)、dotted(点划线)三者中的一个,默认为undefined。

返回Visual对象本身,以便进行链式调用。

poly(points, [style])

绘制一条折线。

参数 类型 描述
points array 一个点的数组,每个元素都可以是来自GameObject或任何包含了x和y的对象。
style (optional) object 一个具有以下属性的对象:
  • fill (string) 填充颜色,格式如下:#ffffff(十六进制三位数),默认为#ffffff。
  • opacity (number) 不透明度,默认为0.5。
  • stroke (string) 描边颜色,格式如下:#ffffff(十六进制三位数),默认为#ffffff。
  • strokeWidth (number) 描边线宽,默认为0.1。
  • lineStyle (string) undefined【solid line(实线)】、dashed(虚线)、dotted(点划线)三者中的一个,默认为undefined。

返回Visual对象本身,以便进行链式调用。

rect(pos, w, h, [style])

绘制一条矩形。

参数 类型 描述
pos object 对象的位置左上角,可以是来自GameObject或任何包含了x和y的对象。
w number 矩形的宽度。
h number 矩形的高度。
style (optional) object 一个具有以下属性的对象:
  • fill (string) 填充颜色,格式如下:#ffffff(十六进制三位数),默认为#ffffff。
  • opacity (number) 不透明度,默认为0.5。
  • stroke (string) 描边颜色,格式如下:#ffffff(十六进制三位数),默认为#ffffff。
  • strokeWidth (number) 描边线宽,默认为0.1。
  • lineStyle (string) undefined【solid line(实线)】、dashed(虚线)、dotted(点划线)三者中的一个,默认为undefined。

返回Visual对象本身,以便进行链式调用。

text(text, pos, [style])

绘制一个文本,你可以使用任何有效的Unicode字符,包括emoji。

参数 类型 描述
text string 文本信息。
pos object 对象标签基线的位置,可以是来自GameObject或任何包含了x和y的对象。
style (optional) object 一个具有以下属性的对象:
  • color (string) 字体颜色,格式如下:#ffffff(十六进制三位数),默认为#ffffff。
  • font (number|string) 以下格式之一的数字或字符串:"0.7"(以游戏坐标表示的相对大小)、"20px"(以像素表示的绝对大小)、"0.7 serif"或"bold italic 1.5 Times New Roman"。
  • stroke (string) 描边颜色,格式如下:#ffffff(十六进制三位数),默认为#ffffff。
  • strokeWidth (number) 描边线宽,默认为0.15。
  • backgroundColor (string) 背景色,格式如下:#ffffff(十六进制三位数),默认为undefined。当使用了背景色后,文本垂直对齐将设置在中间(默认为基线)。
  • backgroundPadding (number) 背景矩形填充,默认为0.3。
  • aling (string) 文本对其方式,center(居中)、left(居左)、right(居右)三者中的一个。默认为center。
  • opacity (number) 不透明度,默认为1。

返回Visual对象本身,以便进行链式调用。

size()

获取对象中存储的所有视觉效果的大小。

返回以字节为单位的视觉效果的大小。

for(const creep of creeps) {
    if(!creep.hitsVisual) {
        creep.hitsVisual = new Visual(10, true);
    }
    creep.hitsVisual.clear().text(
        creep.hits,
        { x: creep.x, y: creep.y - 0.5 }, // 在Creep的上方
        {
            font: '0.5',
            opacity: 0.7,
            backgroundColor: '#808080',
            backgroundPadding: '0.03'
        });
}
new Visual().line({x: 1, y: 99}, {x: 99, y: 1}, {color: '#ff0000'});
new Visual().line(creep, tower, {lineStyle: 'dashed'});

createConstructionSite(position, prototype)

在指定的位置建造一个新的ConstructionSite

参数 类型 描述
position object 一个包含了x和y属性的对象
prototype class 一个继承了GameObject的原型。

返回一个具有以下属性的对象:

可能的错误代码:

ERR_INVALID_ARGS -10 位置或结构原型不正确
ERR_INVALID_TARGET -7 结构无法放置在指定位置
ERR_FULL -8 你有太多的结构空位啦。每名玩家最多拥有10个结构空位。

findClosestByPath(fromPos, positions, [opts])

从给定位置数组中找到与搜索位置路径最短的位置。

参数 类型 描述
fromPos object 要搜索的位置。可以是GameObject或任何包含x和y属性的对象。
position array 要搜索的位置。一个包含GameObjects或任何包含x和y属性对象的数组。
opts (optional) object 包含searchPath函数支持的其他寻路标志的对象。

如果从位置数组中找到距离该位置最接近的一个对象,则返回这个对象,否则为空。

let targets = getObjectsByPrototype(Creep).filter(c => !c.my);
let closestTarget = findClosestByPath(creep, targets);
creep.moveTo(closestTarget);
creep.attack(closestTarget);

findClosestByRange(fromPos, positions)

找出与给定位置直线距离最短的位置。

参数 类型 描述
fromPos object 要搜索的位置。可以是GameObject或任何包含x和y属性的对象。
position array 要搜索的位置。一个包含GameObjects或任何包含x和y属性对象的数组。

返回给定位置数组中找到距离给定位置最近的对象,如果没有有效位置,则返回空值。

let targets = getObjectsByPrototype(Creep).filter(c => !c.my);
let closestTarget = findClosestByRange(tower, targets);
tower.attack(closestTarget);

findInRange(fromPos, positions, range)

查找指定线性范围内的所有基本游戏对象。

参数 类型 描述
fromPos object 要搜索的位置。可以是GameObject或任何包含x和y属性的对象。
position array 要搜索的位置。一个包含GameObjects或任何包含x和y属性对象的数组。
range number 距离范围。

返回一个数组,其中包含了在指定范围内找到的所有对象。

let targets = getObjectsByPrototype(Creep).filter(c => !c.my);
let targetsInRange = findInRange(creep, targets, 3);
if (targetsInRange.length >= 3) {
    creep.rangedMassAttack();
} else if (targetsInRange.length > 0) {
    creep.rangedAttack(targetsInRange[0]);
}

findPath(fromPos, toPos, [opts])

查询从fromPos到toPos之间的最佳路径。与searchPath不同,findPath默认会避开所有的障碍物,(除非指定了CostMatrix)

参数 类型 描述
fromPos object 要搜索的起始位置。可以是GameObject或任何包含x和y属性的对象。
toPos object 要搜索的目标位置。可以是GameObject或任何包含x和y属性的对象。
opts (optional) object 包含附加寻路标志的对象:
  • ignore: array(在搜索过程中不应被视为障碍物的对象)
  • searchPath 函数支持的任何选项

以包含x和y属性的对象数组形式返回找到的路径。

let targets = getObjectsByPrototype(Creep).filter(c => !c.my);
let targetsInRange = findInRange(creep, targets, 3);
if (targetsInRange.length >= 3) {
    creep.rangedMassAttack();
} else if (targetsInRange.length > 0) {
    creep.rangedAttack(targetsInRange[0]);
}

getCpuTime()

获取当前刻度中经过的CPU停滞时间(以纳秒为单位)。

import { getCpuTime } from 'game/utils';
import { arenaInfo } from 'game';
export function loop() {
    if( arenaInfo.cpuTimeLimit - getCpuTime() < 1000000) {
        // 超时前剩余时间不足 1 毫秒!
    }
}

getDirection(dx, dy)

通过x和y的差值获取线性方向。

参数 类型 描述
dx number x坐标的差值。
dy number y坐标的差值。

返回代表一个方向常量的数字。

let pos = path.findIndex(p => p.x == creep.x && p.y == creep.y);
let direction = getDirection(path[pos+1].x-path[pos].x, path[pos+1].y-path[pos].y);
creep.move(direction);

getHeapStatistics()

使用该方法获取虚拟机的堆统计数据。其返回值与 Node.js 函数 v8.getHeapStatistics()[nodejs.org] 几乎相同。该函数返回一个额外的属性:externally_allocated_size(外部分配的内存大小),这是当前分配的内存总量,不包含在 v8 堆中,但计入了此隔离区的内存限制。超过一定大小的 ArrayBuffer 实例是外部分配的,并将计入此处。

警告:由于该函数不常用,因此我没认真看英文,所以该处使用了DeepL机翻,请见谅!

import { getHeapStatistics } from 'game/utils';

export function loop() {
    let heap = getHeapStatistics();
    console.log(`Used ${heap.total_heap_size} / ${heap.heap_size_limit}`);
}

getObjectById(id)

获取具有指定ID的唯一对象。

参数 类型 描述
id string 所需对象的id属性。请参阅GameObject原型。
import { getObjectById } from 'game/utils';
export function loop() {
    runCreep(myCreep.id);
}
function runCreep(id) {
    let creep = getObjectById(id);
    creep.move(RIGHT);
}

getObjects()

获取场地中的所有游戏对象。

getObjectsByPrototype(prototype)

获取游戏中所有具有指定原型的对象,例如所有Creep。

参数 类型 描述
prototype class 继承自GameObject的原型。
import { getObjectsByPrototype } from 'game/utils';
import { Creep } from 'game/prototypes';

export function loop() {
    const creeps = getObjectsByPrototype(Creep);

    creeps.forEach(function(myCreep) {
        runCreep(myCreep);
    });
}

function runCreep(creep) {
    if(creep.my) {
        creep.move(RIGHT);
    }
}

getRange(a, b)

获取两个对象之间的线性范围。a和b可以是包含x和y属性的任何对象。

参数 类型 描述
a object 两个对象中的第一个。可以是GameObject或任何包含x和y属性的对象。
a object 两个对象中的第二个。可以是GameObject或任何包含x和y属性的对象。

返回两个对象之间的格子数。

import { getObjectsByPrototype } from 'game/utils';
import { Creep } from 'game/prototypes';

export function loop() {
    const creeps = getObjectsByPrototype(Creep);

    creeps.forEach(function(myCreep) {
        runCreep(myCreep);
    });
}

function runCreep(creep) {
    if(creep.my) {
        creep.move(RIGHT);
    }
}

getTerrainAt(pos)

获取给定位置处地形的整数表示。

参数 类型 描述
pos object 位置是一个包含x和y属性的对象。

返回TERRAIN_WALLTERRAIN_SWAMPTERRAIN_PLAIN三者之一。

ilet matrix = new CostMatrix;
// 在 CostMatrix 中填入全速地形成本,以便进行分析:
for(let y = 0; y < 100; y++) {
    for(let x = 0; x < 100; x++) {
        let tile = getTerrainAt({x: x, y: y});
        let weight =
            tile === TERRAIN_WALL  ? 255 : // wall  => unwalkable
            tile === TERRAIN_SWAMP ?   5 : // swamp => weight:  5
                                            1 ; // plain => weight:  1
        matrix.set(x, y, weight);
    }
}

getTicks()

从当前一局游戏开始到结束的时间。

import { getTicks } from 'game';
export function loop() {
    console.log(getTicks());
}

searchPath(origin, goal, [opts])

查找起始位置与目标位置之间的最佳路径。请注意,如果未指定成本矩阵的searchPath(见下文)将只使用地形数据。

参数 类型 描述
origin object 见下文。
goal object 见下文。
opts (optional) object 见下文。

目标可以是包含x和y属性的对象,也可以是有着下面定义的对象。.
如果提供的目标不止一个(作为目标数组),那么将返回所有目标中成本最少的路径。

属性 类型 描述
pos object 一个包含x和y属性的对象
range number 当被认为达到目标之前的位置范围,默认是0

opts是一个包含额外寻路标志的对象:

属性 类型 描述
costMatrix CostMatrix 自定义导航成本数据
plainCost number 在平原位置移动的成本。默认为2
swampCost number 在沼泽位置移动的成本。默认为10
flee boolean 这种方法不是搜索通往目标的路径,而是搜索远离目标的路径。将返回超出每个目标范围成本最少的路径。默认值为false
maxOps number 允许的最大寻路搜索操作次数。默认值为50000
maxCost number 返回的路径允许的最大成本。默认为Infinity(无限)
heuristicWeight number 从1到9的权重,用于 A * 公式F = G + 权重 * H 中的启发式。默认值为1.2

返回一个包含以下属性的对象

属性 类型 描述
path array 以包含x和y属性形式找到的路径对象数组
ops number 计算该路径前执行的搜索操作总数
cost number 根据plainCost、swampCost和给定的成本矩阵实例得出的路径总成本
incomplete boolean 如果寻路程序未能找到完整的路径,则此值为true
import { searchPath } from 'game/path-finder';
import { getObjectsByPrototype } from 'game/utils';

export function loop() {
    let target = getObjectsByPrototype(StructureSpawn).find(i => !i.my);
    let creep = getObjectsByPrototype(Creep).find(i => i.my);

    let ret = searchPath(creep, target);
    console.log(ret.cost); // 总体成本
    console.log(ret.path.length); // 格子数
}

BodyPartclass extends GameObject

Creep的独立属性。
通过Creep赋予该属性以增加Creep的属性

typestring

属性类型,是以下常量之一:
WORK MOVE CARRY ATTACK RANGED_ATTACK HEAL TOUGH

ticksToDecaynumber

该物品消失前的刻数。

Flagclass extends GameObject

旗帜是这个游戏模式的关键游戏对象,当Creep到达旗帜上方即可夺得该旗帜,并且控制旗帜旁边的塔。当夺下场上所有的旗帜就算胜利!

myboolean

己方为true,敌方为false。如果不属于双方,则返回undefined。

StructureTowerclass extends OwnedStructure

在夺取旗帜游戏模式中,塔结构是经过改装的,它们每回合都可以开火,并能自我获取能量。此外,还可以让Creep走到其相邻的旗帜上以夺得它们。

冷却 0
能量再生 每刻1能量

AreaEffectclass extends GameObject

一个可同时对所有Creep应用指定类型效果的对象

effectstring

来自以下常量之一:EFFECT_FREEZEEFFECT_DAMAGEEFFECT_HEAL

EFFECT_DAMAGEdamage

EFFECT_FREEZEfreeze

EFFECT_HEALheal

RESOURCE_SCOREscore

RESOURCE_SCORE_Xscore_x

RESOURCE_SCORE_Yscore_y

RESOURCE_SCORE_Zscore_z

ScoreCollectorclass extends GameObject

得分收集器是该游戏模式得关键游戏对象,将相应得资源转移到收集器上,夺取资源并获得胜利。

myboolean

你是否可以控制该收集器。

resourceTypestring

该收集器可以接收的资源类型。

scorenumber

该收集器隶属的玩家当前收集的分数。

scoreTotalnumber

立刻获胜所需要的总分数。

OK0

MOVEmove

RANGED_ATTACKranged_attack

HEALheal

ATTACKattack

CARRYcarry

TOUGHtough

WORKwork

TOP1

LEFT7

RANGED_ATTACK_DISTANCE_RATE{0: 1, 1: 1, 2: 0.4, 3: 0.1}

OBSTACLE_OBJECT_TYPES
['creep','tower','constructedWall','spawn','extension','link']

BODYPART_COST

RESOURCES_ALL[RESOURCE_ENERGY]

WALL_HITS10000