
게임플레이에 관한 모든 정보를 담고 있는 주요 전역 게임 객체입니다.
ID를 해시 키로 하여, 내 모든 건설 현장을 담고 있는 해시입니다.
CPU 사용량 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
limit | number | 현재 샤드에 할당된 CPU 한도입니다. |
tickLimit | number | 현재 게임 틱에서 사용할 수 있는 CPU 시간의 양입니다. |
bucket | number | 버킷에 누적된 미사용 CPU의 양입니다. |
shardLimits | object <string,number> | 샤드 이름을 키로 하여 각 샤드의 한도를 담고 있는 객체입니다. |
unlocked | boolean | 현재 계정에서 전체 CPU가 잠금 해제되어 있는지 여부입니다. |
unlockedTime | number | 계정의 전체 CPU 잠금 해제가 유지되는 시각으로, UNIX epoch 이후 밀리초로 표현됩니다. 계정에서 전체 CPU가 잠금 해제되어 있지 않거나, 구독으로 잠금 해제된 경우 이 속성은 정의되지 않습니다. |
for(const i in Game.creeps) {
Game.creeps[i].moveTo(flag);
}크립 이름을 해시 키로 하여, 내 모든 크립을 담고 있는 해시입니다.
creep.moveTo(Game.flags.Flag1);플래그 이름을 해시 키로 하여, 내 모든 플래그를 담고 있는 해시입니다.
내 글로벌 컨트롤 레벨이며, 다음 속성을 가진 객체입니다:
| parameter | type | description |
|---|---|---|
level | number | 현재 레벨입니다. |
progress | number | 다음 레벨까지의 현재 진행도입니다. |
progressTotal | number | 다음 레벨에 도달하는 데 필요한 진행도입니다. |
내 글로벌 파워 레벨이며, 다음 속성을 가진 객체입니다:
| parameter | type | description |
|---|---|---|
level | number | 현재 레벨입니다. |
progress | number | 다음 레벨까지의 현재 진행도입니다. |
progressTotal | number | 다음 레벨에 도달하는 데 필요한 진행도입니다. |
월드 맵을 나타내는 전역 객체입니다. 아래의 문서를 참고하세요.
게임 내 마켓을 나타내는 전역 객체입니다. 아래의 문서를 참고하세요.
Game.powerCreeps['PC1'].moveTo(flag);이름을 해시 키로 하여 내 모든 파워 크립을 담고 있는 해시입니다. 월드에 아직 스폰되지 않은 파워 크립도 여기에서 접근할 수 있습니다.
픽셀이나 CPU 언락 같은, 계정에 귀속된 전역 리소스를 담는 객체입니다. 각 키는 리소스 상수이며, 값은 해당 리소스의 보유량입니다.
방 이름을 해시 키로 하여, 내가 접근 가능한 모든 방을 담고 있는 해시입니다. 해당 방에 내 크립이 있거나 내가 소유한 구조물이 있으면 방은 “보이는” 상태가 됩니다.
현재 스크립트가 실행 중인 월드 샤드 정보를 설명하는 객체입니다.
| parameter | type | description |
|---|---|---|
name | string | 샤드 이름입니다. |
type | string | 현재는 항상 |
ptr | boolean | 이 샤드가 PTR에 속하는지 여부입니다. |
for(const i in Game.spawns) {
Game.spawns[i].createCreep(body);
}스폰 이름을 해시 키로 하여, 내 모든 스폰을 담고 있는 해시입니다.
구조물 ID를 해시 키로 하여, 내 모든 구조물을 담고 있는 해시입니다.
console.log(Game.time);시스템 게임 틱 카운터입니다. 매 틱마다 자동으로 1씩 증가합니다. 자세히 보기
let heap = Game.cpu.getHeapStatistics();
console.log(`Used ${heap.total_heap_size} / ${heap.heap_size_limit}`);이 메서드는 계정 런타임 설정에서 Virtual machine이 Isolated로 설정된 경우에만 사용할 수 있습니다.
이 메서드를 사용하면 가상 머신의 힙 통계를 얻을 수 있습니다. 반환 값은 Node.js 함수 v8.getHeapStatistics()와 거의 동일합니다. 다만 이 함수는 추가 속성 하나를 더 반환합니다: externally_allocated_size는 v8 힙에는 포함되지 않지만 이 isolate의 메모리 한도에 포함되는, 현재 할당된 메모리의 총량입니다. 일정 크기 이상의 ArrayBuffer 인스턴스는 외부 할당(externally allocated)되며, 이 값에 포함됩니다.
아래 형식의 힙 통계 객체를 반환합니다:
{
"total_heap_size": 29085696,
"total_heap_size_executable": 3670016,
"total_physical_size": 26447928,
"total_available_size": 319649520,
"used_heap_size": 17493824,
"heap_size_limit": 343932928,
"malloced_memory": 8192,
"peak_malloced_memory": 1060096,
"does_zap_garbage": 0,
"externally_allocated_size": 38430000
}if(Game.cpu.getUsed() > Game.cpu.tickLimit / 2) {
console.log("Used half of CPU already!");
}for(const name in Game.creeps) {
const startCpu = Game.cpu.getUsed();
// creep logic goes here
const elapsed = Game.cpu.getUsed() - startCpu;
console.log('Creep '+name+' has used '+elapsed+' CPU time');
}
현재 게임 틱의 시작부터 지금까지 사용한 CPU 시간의 양을 가져옵니다. 시뮬레이션 모드에서는 항상 0을 반환합니다.
현재까지 사용한 CPU 시간을 부동소수점 수로 반환합니다.
Game.cpu.halt();이 메서드는 계정 런타임 설정에서 Virtual machine이 Isolated로 설정된 경우에만 사용할 수 있습니다.
런타임 환경을 리셋하고 힙 메모리의 모든 데이터를 삭제합니다.
Game.cpu.setShardLimits({shard0: 20, shard1: 10});샤드별 CPU 한도를 할당합니다. CPU 총량은
Game.cpu.shardLimits와 동일하게 유지되어야 합니다. 이 메서드는 12시간에 한 번만 사용할 수 있습니다.
| parameter | type | description |
|---|---|---|
limits | object<string, number> |
|
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_BUSY | -4 | 12시간 쿨다운이 아직 끝나지 않았습니다. |
ERR_INVALID_ARGS | -10 | 인자가 올바른 샤드 한도 객체가 아닙니다. |
if(Game.cpu.unlockedTime && ((Game.cpu.unlockedTime - Date.now()) < 1000*60*60*24)) {
Game.cpu.unlock();
}계정의 전체 CPU를 추가로 24시간 동안 잠금 해제합니다. 이 메서드는 계정에 귀속된 CPU 언락 리소스 1개를 소비합니다(참고: Game.resources).
현재 계정에서 전체 CPU가 잠금 해제되어 있지 않다면, 실제로 잠금 해제가 적용되기까지 시간이 조금 걸릴 수 있습니다(최대 5분).
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 계정에 |
ERR_FULL | -8 | 구독으로 CPU가 잠금 해제되어 있습니다. |
if(Game.cpu.bucket == 10000) {
Game.cpu.generatePixel();
}버킷에서 CPU 10000을 사용해 픽셀 리소스 1개를 생성합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 버킷에 CPU가 충분하지 않습니다. |
creep.memory.sourceId = creep.pos.findClosestByRange(FIND_SOURCES).id;
const source = Game.getObjectById(creep.memory.sourceId);지정한 고유 ID를 가진 객체를 가져옵니다. 어떤 타입의 게임 객체든 될 수 있습니다. 내가 볼 수 있는 방에 있는 객체만 접근할 수 있습니다.
| parameter | type | description |
|---|---|---|
id | string | 고유 식별자입니다. |
객체 인스턴스를 반환하며, 찾을 수 없으면 null을 반환합니다.
if(creep.hits < creep.memory.lastHits) {
Game.notify('Creep '+creep+' has been attacked at '+creep.pos+'!');
}
creep.memory.lastHits = creep.hits;if(Game.spawns['Spawn1'].energy == 0) {
Game.notify(
'Spawn1 is out of energy',
180 // group these notifications for 3 hours
);
}
프로필에 등록된 이메일로 사용자 정의 메시지를 보냅니다. 이를 이용해 게임 내 어떤 상황에서도 스스로에게 알림을 설정할 수 있습니다. 한 게임 틱 동안 최대 20개의 알림을 예약할 수 있습니다. 시뮬레이션 룸에서는 사용할 수 없습니다.
| parameter | type | description |
|---|---|---|
message | string | 메시지로 보낼 사용자 정의 텍스트입니다. 최대 길이는 1000자입니다. |
groupInterval | number | 0(기본값)으로 설정하면 알림이 즉시 예약됩니다. 0이 아니면, 다른 알림들과 함께 그룹화되어 나중에 발송되며, 이 값은 분 단위 시간입니다. |
InterShardMemory 오브젝트는 샤드 간 통신을 위한 인터페이스를 제공합니다. 스크립트는 각 샤드에서 서로 분리되어 실행되며,
각 샤드의 Memory 오브젝트도 서로 격리되어 있습니다. 샤드 사이에 메시지/데이터를 전달하려면 InterShardMemory를 사용해야 합니다.
각 샤드는 문자열 형식의 데이터를 최대 100KB까지 가질 수 있으며, 다른 모든 샤드에서 접근할 수 있습니다. 다만 샤드는 자기 자신의 데이터에만 쓸 수 있고, 다른 샤드의 데이터는 읽기 전용입니다.
이 데이터는 Memory 내용과 무관하며, 별도의 데이터 컨테이너입니다.
현재 샤드 데이터의 문자열 내용을 반환합니다.
var data = JSON.parse(InterShardMemory.getLocal() || "{}");
data.message = "hello from another shard!";
InterShardMemory.setLocal(JSON.stringify(data));현재 샤드 데이터를 새 값으로 교체합니다.
| parameter | type | description |
|---|---|---|
value | string | 문자열 형식의 새 데이터 값. |
var data = JSON.parse(InterShardMemory.getRemote('shard0') || "{}");
console.log(data.message);다른 샤드 데이터의 문자열 내용을 반환합니다.
| parameter | type | description |
|---|---|---|
shard | string | 샤드 이름. |
월드 맵을 나타내는 전역 객체입니다. 방 사이를 이동/탐색할 때 사용합니다.
const exits = Game.map.describeExits('W8N3');지정한 이름의 방에서 이용 가능한 모든 출구를 나열합니다.
| parameter | type | description |
|---|---|---|
roomName | string | 방 이름입니다. |
아래 형식의 출구 정보이며, 방을 찾을 수 없으면 null을 반환합니다.
{
"1": "W8N4", // TOP
"3": "W7N3", // RIGHT
"5": "W8N2", // BOTTOM
"7": "W9N3" // LEFT
}if(creep.room != anotherRoomName) {
const exitDir = Game.map.findExit(creep.room, anotherRoomName);
const exit = creep.pos.findClosestByRange(exitDir);
creep.moveTo(exit);
}
else {
// go to some place in another room
}creep.moveTo(new RoomPosition(25, 25, anotherRoomName));지정한 방에서 다른 방으로 가는 경로 상에서, 나가야 할 출구 방향을 찾습니다.
| parameter | type | description |
|---|---|---|
fromRoom | string, Room | 시작 방 이름 또는 Room 객체입니다. |
toRoom | string, Room | 도착 방 이름 또는 Room 객체입니다. |
optsoptional | object | 경로 탐색 옵션 객체입니다. |
아래 중 하나의 방 방향 상수를 반환합니다:
FIND_EXIT_TOPFIND_EXIT_RIGHTFIND_EXIT_BOTTOMFIND_EXIT_LEFT또는 아래 오류 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
ERR_NO_PATH | -2 | 경로를 찾을 수 없습니다. |
ERR_INVALID_ARGS | -10 | 위치 정보가 올바르지 않습니다. |
const route = Game.map.findRoute(creep.room, anotherRoomName);
if(route.length > 0) {
console.log('Now heading to room '+route[0].room);
const exit = creep.pos.findClosestByRange(route[0].exit);
creep.moveTo(exit);
}const route = Game.map.findRoute(creep.room, anotherRoomName, {
routeCallback(roomName, fromRoomName) {
if(roomName == 'W10S10') { // avoid this room
return Infinity;
}
return 1;
}});let from = new RoomPosition(25, 25, 'E1N1');
let to = new RoomPosition(25, 25, 'E4N1');
// Use `findRoute` to calculate a high-level plan for this path,
// prioritizing highways and owned rooms
let allowedRooms = { [ from.roomName ]: true };
Game.map.findRoute(from.roomName, to.roomName, {
routeCallback(roomName) {
let parsed = /^[WE]([0-9]+)[NS]([0-9]+)$/.exec(roomName);
let isHighway = (parsed[1] % 10 === 0) ||
(parsed[2] % 10 === 0);
let isMyRoom = Game.rooms[roomName] &&
Game.rooms[roomName].controller &&
Game.rooms[roomName].controller.my;
if (isHighway || isMyRoom) {
return 1;
} else {
return 2.5;
}
}
}).forEach(function(info) {
allowedRooms[info.room] = true;
});
// Invoke PathFinder, allowing access only to rooms from `findRoute`
let ret = PathFinder.search(from, to, {
roomCallback(roomName) {
if (allowedRooms[roomName] === undefined) {
return false;
}
}
});
console.log(ret.path);지정한 방에서 다른 방까지의 라우트를 찾습니다.
| parameter | type | description |
|---|---|---|
fromRoom | string, Room | 시작 방 이름 또는 Room 객체입니다. |
toRoom | string, Room | 도착 방 이름 또는 Room 객체입니다. |
optsoptional | object | 다음 옵션을 가질 수 있는 객체입니다:
|
아래 형식의 라우트 배열을 반환합니다:
[
{ exit: FIND_EXIT_RIGHT, room: 'arena21' },
{ exit: FIND_EXIT_BOTTOM, room: 'arena22' },
...
]또는 아래 오류 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
ERR_NO_PATH | -2 | 경로를 찾을 수 없습니다. |
Game.map.getRoomLinearDistance('W1N1', 'W4N2'); // 3
Game.map.getRoomLinearDistance('E65S55','W65S55', false) // 131
Game.map.getRoomLinearDistance('E65S55','W65S55', true) // 11두 방 사이의 직선 거리(방 단위)를 구합니다. 이 함수로 터미널을 통한 자원 전송 비용을 대략 추정하거나, 옵저버/핵 사용 거리를 가늠할 수 있습니다.
| parameter | type | description |
|---|---|---|
roomName1 | string | 첫 번째 방의 이름입니다. |
roomName2 | string | 두 번째 방의 이름입니다. |
continuousoptional | boolean | 월드 맵의 경계를 이어진(continuous) 것으로 취급할지 여부입니다. 거래나 터미널 전송 비용을 계산하고 싶다면 true로 설정하세요. 기본값은 false입니다. |
두 방 사이의 방 개수(거리)를 숫자로 반환합니다.
const terrain = Game.map.getRoomTerrain("E2S7");
switch(terrain.get(10,15)) {
case TERRAIN_MASK_WALL:
break;
case TERRAIN_MASK_SWAMP:
break;
case 0:
break;
}정적 지형 데이터에 빠르게 접근할 수 있는 Room.Terrain 객체를 가져옵니다. 이 메서드는 내가 접근할 수 없는 방을 포함해, 월드의 어떤 방에도 동작합니다.
| parameter | type | description |
|---|---|---|
roomName | string | 방 이름입니다. |
새 Room.Terrain 객체를 반환합니다.
This method is deprecated and will be removed soon. Please use a faster method Game.map.getRoomTerrain instead.
console.log(Game.map.getTerrainAt(25,20,'W10N10'));console.log(Game.map.getTerrainAt(new RoomPosition(25,20,'W10N10'));지정한 방 좌표에서의 지형 타입을 가져옵니다. 이 메서드는 내가 접근할 수 없는 방을 포함해, 월드의 어떤 방에도 동작합니다.
| parameter | type | description |
|---|---|---|
x | number | 방 내부의 X 좌표입니다. |
y | number | 방 내부의 Y 좌표입니다. |
roomName | string | 방 이름입니다. |
pos | RoomPosition | 위치 객체입니다. |
아래 문자열 값 중 하나를 반환합니다:
plainswampwall월드 모서리 사이의 방 개수로 월드 크기를 반환합니다. 예를 들어 W50N50부터 E50S50까지의 방이 있는 월드에서는 이 메서드가 102를 반환합니다.
This method is deprecated and will be removed soon. Please use Game.map.getRoomStatus instead.
if(Game.map.isRoomAvailable(room.name)) {
creep.moveTo(room.getPositionAt(25,25));
}해당 방으로 이동이 가능한지 확인합니다.
| parameter | type | description |
|---|---|---|
roomName | string | 방 이름입니다. |
불리언 값을 반환합니다.
if(Game.map.getRoomStatus(room.name).status == 'normal') {
nuker.launchNuke(room.getPositionAt(25,25));
}지정한 이름의 방에 대한 “가용 상태”를 가져옵니다. 시작 구역에 대해 더 알아보려면 이 문서를 참고하세요.
| parameter | type | description |
|---|---|---|
roomName | string | 방 이름입니다. |
다음 속성을 포함하는 객체를 반환합니다:
| property | type | description |
|---|---|---|
status |
string | 아래 문자열 값 중 하나입니다:
|
timestamp |
number | 상태 만료 시각으로, UNIX epoch 이후 밀리초로 표현됩니다. 상태가 영구적이라면 이 속성은 null입니다. |
맵 비주얼(Map visuals)은 게임 맵 위에 다양한 시각적 디버그 정보를 표시하는 방법을 제공합니다. Game.map.visual 객체를 사용해 본인에게만 보이는 간단한 도형을 그릴 수 있습니다.
맵 비주얼은 데이터베이스에 저장되지 않으며, 오직 브라우저에 표시하는 것이 목적입니다. 모든 그림은 1틱 동안만 유지되며, 다음 틱에서 업데이트하지 않으면 사라집니다. 모든 Game.map.visual 호출은 추가 CPU 비용이 없습니다(비용은 자연 비용이며, 주로 간단한 JSON.serialize 호출과 관련됩니다). 다만 사용량 제한이 있습니다: 직렬화된 데이터는 1000 KB를 초과하여 게시할 수 없습니다.
모든 좌표는 전역 게임 좌표(RoomPosition)로 측정합니다.
Game.map.visual.line(creep.pos, target.pos,
{color: '#ff0000', lineStyle: 'dashed'});선을 그립니다.
| parameter | type | description |
|---|---|---|
pos1 | RoomPosition | 시작 위치 객체입니다. |
pos2 | RoomPosition | 끝 위치 객체입니다. |
styleoptional | object | 다음 속성을 가진 객체입니다:
|
메서드 체이닝을 할 수 있도록 MapVisual 객체 자기 자신을 반환합니다.
Game.map.visual.circle(new RoomPosition(25,25,'E2S7'));Game.map.visual.circle(nuker.pos, {fill: 'transparent', radius: NUKE_RANGE*50, stroke: '#ff0000'});원을 그립니다.
| parameter | type | description |
|---|---|---|
pos | RoomPosition | 중심의 위치 객체입니다. |
styleoptional | object | 다음 속성을 가진 객체입니다:
|
메서드 체이닝을 할 수 있도록 MapVisual 객체 자기 자신을 반환합니다.
// the max efficiency area of the tower
Game.map.visual.rect(new RoomPosition(tower.pos.x - 5, tower.pos.y - 5, tower.pos.roomName),
11, 11,
{fill: 'transparent', stroke: '#ff0000'});사각형을 그립니다.
| parameter | type | description |
|---|---|---|
topLeftPos | RoomPosition | 좌상단 모서리의 위치 객체입니다. |
width | number | 사각형의 너비입니다. |
height | number | 사각형의 높이입니다. |
styleoptional | object | 다음 속성을 가진 객체입니다:
|
메서드 체이닝을 할 수 있도록 MapVisual 객체 자기 자신을 반환합니다.
const points = [];
points.push(creep1.pos);
points.push(Game.rooms.E2S7.storage.pos);
points.push(new RoomPosition(20,21,'W1N1'));
Game.map.visual.poly(points, {fill: 'aqua'}); // visualize the path
const path = PathFinder.search(creep.pos, creep.room.storage.pos).path;
Game.map.visual.poly(path, {stroke: '#ffffff', strokeWidth: .8, opacity: .2, lineStyle: 'dashed'});폴리라인을 그립니다.
| parameter | type | description |
|---|---|---|
points | array | 점들의 배열입니다. 각 요소는 |
styleoptional | object | 다음 속성을 가진 객체입니다:
|
메서드 체이닝을 할 수 있도록 MapVisual 객체 자기 자신을 반환합니다.
Game.map.visual.text("Target💥", new RoomPosition(11,14,'E2S7'), {color: '#FF0000', fontSize: 10}); 텍스트 라벨을 그립니다. 이모지를 포함해, 유효한 모든 유니코드 문자를 사용할 수 있습니다.
| parameter | type | description |
|---|---|---|
text | string | 텍스트 메시지입니다. |
pos | RoomPosition | 라벨 기준선(baseline)의 위치 객체입니다. |
styleoptional | object | 다음 속성을 가진 객체입니다:
|
메서드 체이닝을 할 수 있도록 MapVisual 객체 자기 자신을 반환합니다.
Game.map.visual.clear();맵에서 모든 비주얼을 제거합니다.
메서드 체이닝을 할 수 있도록 MapVisual 객체 자기 자신을 반환합니다.
if(Game.map.visual.getSize() >= 1024000) {
// cannot add more visuals in this tick
}현재 틱에서 맵에 추가된 모든 비주얼 데이터의 저장 크기를 가져옵니다. 이 값은 1024,000(1000 KB)을 초과하면 안 됩니다.
비주얼의 크기를 바이트 단위로 반환합니다.
Memory.MapVisualData = Game.map.visual.export();현재 틱에서 맵에 추가된 모든 비주얼을 압축된 형태로 반환합니다.
비주얼 데이터가 담긴 문자열입니다. 이 문자열로 할 수 있는 일은 많지 않으며, 보통 나중을 위해 저장하는 용도로 사용합니다.
Game.map.visual.import(Memory.MapVisualData);이전에(Game.map.visual.export로) 내보낸 맵 비주얼을 현재 틱의 맵 비주얼 데이터에 추가합니다.
| parameter | type | description |
|---|---|---|
val | string | Game.map.visual.export에서 반환된 문자열입니다. |
메서드 체이닝을 할 수 있도록 MapVisual 객체 자기 자신을 반환합니다.
게임 내 마켓을 나타내는 전역 객체입니다. 이 객체를 사용해 터미널로 들어오고 나가는 자원 거래 내역과, 내 매수/매도 주문을 추적할 수 있습니다.
마켓 시스템에 대해 더 알아보려면 이 문서를 참고하세요.
현재 크레딧 잔액입니다.
[{
transactionId : "56dec546a180ce641dd65960",
time : 10390687,
sender : {username: "Sender"},
recipient : {username: "Me"},
resourceType : "U",
amount : 100,
from : "W0N0",
to : "W10N10",
description : "trade contract #1",
order: { // optional
id : "55c34a6b5be41a0a6e80c68b",
type : "sell",
price : 2.95
}
}]터미널로 들어온 최근 100개의 거래를 담은 배열이며, 형식은 위와 같습니다.
[{
transactionId : "56dec546a180ce641dd65960",
time : 10390687,
sender : {username: "Me"},
recipient : {username: "Recipient"},
resourceType : "U",
amount : 100,
from : "W0N0",
to : "W10N10",
description : "trade contract #1",
order: { // optional
id : "55c34a6b5be41a0a6e80c68b",
type : "sell",
price : 2.95
}
}]터미널에서 나간 최근 100개의 거래를 담은 배열이며, 형식은 위와 같습니다.
{
"55c34a6b5be41a0a6e80c68b": {
id : "55c34a6b5be41a0a6e80c68b",
created : 13131117,
active: true,
type : "sell"
resourceType : "OH",
roomName : "W1N1",
amount : 15821,
remainingAmount : 30000,
totalAmount : 50000,
price : 2.95
},
"55c34a6b52411a0a6e80693a": {
id : "55c34a6b52411a0a6e80693a",
created : 13134122,
active: true,
type : "buy"
resourceType : "energy",
roomName : "W1N1",
amount : 94000,
remainingAmount : 94000,
totalAmount : 94000
price : 0.45
},
"55c34a6b5be41a0a6e80c123": {
id : "55c34a6b5be41a0a6e80c123",
created : 13105123,
active: false,
type : "sell"
resourceType : "token",
amount : 0,
remainingAmount : 10,
totalAmount : 10,
price : 50000
}
}마켓에 등록된 내 활성/비활성 매수/매도 주문을 담고 있는 객체입니다.
속성 설명은
getAllOrders
를 참고하세요.
const cost = Game.market.calcTransactionCost(1000, 'W0N0', 'W10N5');
// -> 284 energy unitsStructureTerminal.send 및 Game.market.deal 메서드에서의 에너지 전송 비용을 추정합니다.
공식은 다음과 같습니다:
Math.ceil( amount * ( 1 - Math.exp(-distanceBetweenRooms/30) ) )| parameter | type | description |
|---|---|---|
amount | number | 전송할 자원량입니다. |
roomName1 | string | 첫 번째 방의 이름입니다. |
roomName2 | string | 두 번째 방의 이름입니다. |
거래를 수행하는 데 필요한 에너지량입니다.
for(const id in Game.market.orders) {
Game.market.cancelOrder(id);
}이전에 생성한 주문을 취소합니다. 5% 수수료는 반환되지 않습니다.
| parameter | type | description |
|---|---|---|
orderId | string |
|
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_INVALID_ARGS | -10 | 주문 ID가 올바르지 않습니다. |
Game.market.changeOrderPrice('57bec1bf77f4d17c4c011960', 9.95);기존 주문의 가격을 변경합니다. newPrice가 기존 가격보다 크면 (newPrice-oldPrice)*remainingAmount*0.05 크레딧이 수수료로 청구됩니다.
| parameter | type | description |
|---|---|---|
orderId | string |
|
newPrice | number | 새 주문 가격입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 해당 방의 터미널 소유자가 아니거나 터미널이 없습니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 수수료를 낼 크레딧이 부족합니다. |
ERR_INVALID_ARGS | -10 | 제공된 인자가 올바르지 않습니다. |
Game.market.createOrder({
type: ORDER_SELL,
resourceType: RESOURCE_GHODIUM,
price: 9.95,
totalAmount: 10000,
roomName: "W1N1"
});터미널에 마켓 주문을 생성합니다. 주문을 등록할 때 price*amount*0.05 크레딧이 수수료로 청구됩니다. 플레이어당 최대 주문 수는 300개입니다. 주문은 언제든 어떤 수량으로든 만들 수 있으며, 자원/크레딧 가용성에 따라 자동으로 활성/비활성 상태가 전환됩니다.
| parameter | type | description |
|---|---|---|
params | object | 다음 파라미터를 가진 객체입니다:
|
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 해당 방의 터미널 소유자가 아니거나 터미널이 없습니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 수수료를 낼 크레딧이 부족합니다. |
ERR_FULL | -8 | 50개를 초과하여 주문을 생성할 수 없습니다. |
ERR_INVALID_ARGS | -10 | 제공된 인자가 올바르지 않습니다. |
Game.market.deal('57cd2b12cda69a004ae223a3', 1000, "W1N1");const amountToBuy = 2000, maxTransferEnergyCost = 500;
const orders = Game.market.getAllOrders({type: ORDER_SELL, resourceType: RESOURCE_GHODIUM});
for(let i=0; i<orders.length; i++) {
const transferEnergyCost = Game.market.calcTransactionCost(
amountToBuy, 'W1N1', orders[i].roomName);
if(transferEnergyCost < maxTransferEnergyCost) {
Game.market.deal(orders[i].id, amountToBuy, "W1N1");
break;
}
}지정한 매수/매도 주문을 사용해, yourRoomName에 있는 내 터미널에서 다른 플레이어의 터미널로 거래(deal)를 실행합니다. 주문의 자원 타입과 무관하게, 내 터미널은 전송 비용만큼의 에너지를 소비합니다. 이 값은 Game.market.calcTransactionCost로 추정할 수 있습니다. 여러 플레이어가 같은 거래를 동시에 실행하려 하면, 거리(방 간 거리)가 가장 짧은 쪽이 우선합니다. 한 틱에 10건을 초과하여 deal을 실행할 수 없습니다.
| parameter | type | description |
|---|---|---|
orderId | string |
|
amount | number | 전송할 자원량입니다. |
yourRoomNameoptional | string | 활성화된 터미널이 존재하고 에너지가 충분한 내 방의 이름입니다. 주문의 자원 타입이 계정 귀속 리소스( |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 대상 방에 내 터미널이 없습니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 크레딧 또는 자원 수량이 부족합니다. |
ERR_FULL | -8 | 한 틱에 10건을 초과하여 deal을 실행할 수 없습니다. |
ERR_INVALID_ARGS | -10 | 제공된 인자가 올바르지 않습니다. |
ERR_TIRED | -11 | 대상 터미널이 아직 쿨다운 중입니다. |
Game.market.extendOrder('57bec1bf77f4d17c4c011960', 10000);기존 주문의 용량을 늘립니다. 이는 remainingAmount 및 totalAmount 속성에 영향을 줍니다. price*addAmount*0.05 크레딧이 수수료로 청구됩니다.
| parameter | type | description |
|---|---|---|
orderId | string |
|
addAmount | number | 추가할 용량입니다. 음수일 수 없습니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 수수료를 낼 크레딧이 부족합니다. |
ERR_INVALID_ARGS | -10 | 제공된 인자가 올바르지 않습니다. |
Game.market.getAllOrders(); // slowGame.market.getAllOrders({type: ORDER_SELL, resourceType: RESOURCE_GHODIUM}); // fastconst targetRoom = "W1N1";
Game.market.getAllOrders(order => order.resourceType == RESOURCE_GHODIUM &&
order.type == ORDER_SELL &&
Game.market.calcTransactionCost(1000, targetRoom, order.roomName) < 500); // slow// Output:
[{
id : "55c34a6b5be41a0a6e80c68b",
created : 13131117,
type : "sell",
resourceType : "OH",
roomName : "W1N1",
amount : 15821,
remainingAmount : 30000,
price : 2.95
}, {
createdTimestamp: 1543253147522,
type: "sell",
amount: 1000,
remainingAmount: 1000,
resourceType: "O",
price: 1,
roomName: "E2S7",
created: 12010056,
id: "5bfc2c9bd719fb605037c06d"
}, {
id : "55c34a6b5be41a0a6e80c123",
createdTimestamp: 1543253155580,
type : "sell",
resourceType : "token",
amount : 3,
remainingAmount : 10,
price : 50000
}]현재 마켓에 활성화되어 있는 다른 플레이어의 주문을 가져옵니다. 이 메서드는 resourceType에 대한 내부 인덱싱을 지원합니다.
| parameter | type | description |
|---|---|---|
filteroptional | object, function |
|
아래 형태의 주문 배열을 반환합니다:
| property | description |
|---|---|
id |
고유한 주문 ID입니다. |
created |
게임 틱 기준 주문 생성 시각입니다. 인터샤드 마켓 주문에는 이 속성이 없습니다. |
createdTimestamp |
주문 생성 시각으로, UNIX epoch 이후 밀리초로 표현됩니다. 오래된 주문에는 이 속성이 없을 수 있습니다. |
type |
ORDER_SELL 또는 ORDER_BUY입니다. |
resourceType |
RESOURCE_* 상수 중 하나이거나, 계정 귀속 리소스 중 하나입니다(INTERSHARD_RESOURCES 상수 참고). |
roomName |
이 주문이 등록된 방입니다. |
amount |
현재 거래 가능한 수량입니다. |
remainingAmount |
이 주문으로 앞으로 더 거래할 수 있는 자원량입니다. |
price |
현재 단가입니다. |
최근 14일 동안, 지정한 리소스의 일별 가격 히스토리를 가져옵니다.
| parameter | type | description |
|---|---|---|
resourceTypeoptional | string |
|
아래 형식의 객체 배열을 반환합니다:
[{
"resourceType": "L",
"date": "2019-06-24",
"transactions": 4,
"volume": 400,
"avgPrice": 3.63,
"stddevPrice": 0.27
}] const order = Game.market.getOrderById('55c34a6b5be41a0a6e80c123');특정 마켓 주문의 정보를 가져옵니다.
| parameter | type | description |
|---|---|---|
id | string | 주문 ID입니다. |
주문 정보가 담긴 객체입니다. 속성 설명은
getAllOrders
를 참고하세요.
임의의 데이터를 담을 수 있는 전역 평범한 오브젝트입니다. API와 게임 에디터의 Memory UI 양쪽에서 접근할 수 있습니다. Memory 사용 방법은 이 문서를 참고하세요.
게임 월드에서 경로 탐색(pathfinding)을 위한 강력한 메서드들을 제공합니다. 이 모듈은 빠른 네이티브 C++ 코드로 작성되었으며, 커스텀 이동 비용과 여러 룸에 걸친 경로를 지원합니다.
let creep = Game.creeps.John;
let goals = _.map(creep.room.find(FIND_SOURCES), function(source) {
// We can't actually walk on sources-- set `range` to 1
// so we path next to it.
return { pos: source.pos, range: 1 };
});
let ret = PathFinder.search(
creep.pos, goals,
{
// We need to set the defaults costs higher so that we
// can set the road cost lower in `roomCallback`
plainCost: 2,
swampCost: 10,
roomCallback: function(roomName) {
let room = Game.rooms[roomName];
// In this example `room` will always exist, but since
// PathFinder supports searches which span multiple rooms
// you should be careful!
if (!room) return;
let costs = new PathFinder.CostMatrix;
room.find(FIND_STRUCTURES).forEach(function(struct) {
if (struct.structureType === STRUCTURE_ROAD) {
// Favor roads over plain tiles
costs.set(struct.pos.x, struct.pos.y, 1);
} else if (struct.structureType !== STRUCTURE_CONTAINER &&
(struct.structureType !== STRUCTURE_RAMPART ||
!struct.my)) {
// Can't walk through non-walkable buildings
costs.set(struct.pos.x, struct.pos.y, 0xff);
}
});
// Avoid creeps in the room
room.find(FIND_CREEPS).forEach(function(creep) {
costs.set(creep.pos.x, creep.pos.y, 0xff);
});
return costs;
},
}
);
let pos = ret.path[0];
creep.move(creep.pos.getDirectionTo(pos));origin과 goal 사이의 최적 경로를 찾습니다.
| parameter | type | description |
|---|---|---|
origin | RoomPosition | 시작 위치. |
goal | object | goal 하나 또는 goal 배열입니다. goal이 여러 개라면, 그 중에서 가장 저렴한(비용이 낮은) 경로가 반환됩니다. goal은 RoomPosition이거나 아래에 정의된 오브젝트입니다. 중요: 목표가 걸을 수 없는 대상(예: source)이라면,
|
optsoptional | object | 추가 경로 탐색 플래그를 담은 오브젝트입니다.
|
다음 프로퍼티를 가진 오브젝트:
| property | description |
|---|---|
path |
RoomPosition 오브젝트 배열. |
ops |
이 경로를 계산하기 전까지 수행된 총 연산 수. |
cost |
plainCost, swampCost, 그리고 제공된 CostMatrix 인스턴스들로부터 계산된 총 비용. |
incomplete |
경로 탐색기가 완전한 경로를 찾지 못하면 true입니다. 이 경우에도 path에는 부분 경로가 들어 있으며, 검색 파라미터를 기준으로 찾을 수 있었던 “가장 가까운” 경로를 나타냅니다. |
This method is deprecated and will be removed soon.
PathFinder.use(true);
Game.creeps.John.moveTo(Game.spawns['Spawn1']);게임 오브젝트 메서드에서 이 새 실험적 pathfinder를 사용할지 여부를 지정합니다. 이 메서드는 매 틱 호출되어야 합니다. 다음 메서드의 동작에 영향을 줍니다: Room.findPath, RoomPosition.findPathTo, RoomPosition.findClosestByPath, Creep.moveTo.
| parameter | type | description |
|---|---|---|
isEnabled | boolean | 새 pathfinder를 활성화할지 비활성화할지. 기본값은 |
RawMemory 오브젝트는 JSON.stringify 기반의 내장 serializer 대신, 여러분만의 메모리 문자열화(stringifier)를 구현할 수 있게 해줍니다.
또한 비동기 메모리 세그먼트(asynchronous memory segments) 기능을 사용해 최대 10MB의 추가 메모리를 요청할 수 있게 해줍니다.
아래 메서드로 다른 플레이어의 메모리 세그먼트에도 접근할 수 있습니다.
RawMemory.setActiveSegments([0,3]);
// on the next tick
console.log(RawMemory.segments[0]);
console.log(RawMemory.segments[3]);
RawMemory.segments[3] = '{"foo": "bar", "counter": 15}';이 틱에 사용할 수 있는 비동기 메모리 세그먼트를 담은 오브젝트입니다. 각 키는 세그먼트 ID이고 값은 문자열 데이터입니다. 다음 틱에 세그먼트를 가져오려면 setActiveSegments를 사용하세요. 세그먼트 데이터는 틱 종료 시 자동으로 저장됩니다. 세그먼트당 최대 크기는 100KB입니다.
RawMemory.setActiveForeignSegment('player');
// on the next tick
console.log(RawMemory.foreignSegment);
// --> {"username": "player", "id": 40, "data": "Hello!"}
이 틱에 사용할 수 있는 다른 플레이어의 메모리 세그먼트 오브젝트입니다. 다음 틱에 세그먼트를 가져오려면 setActiveForeignSegment를 사용하세요.
이 오브젝트는 다음 프로퍼티로 구성됩니다:
| parameter | type | description |
|---|---|---|
username | string | 다른 플레이어 이름. |
id | number | 요청한 메모리 세그먼트 ID. |
data | string | 세그먼트 내용. |
This property is deprecated and will be removed soon. Please use InterShardMemory instead.
RawMemory.interShardSegment = JSON.stringify({
creeps: {
Bob: {role: 'claimer'}
}
});
// on another shard
var interShardData = JSON.parse(RawMemory.interShardSegment);
if(interShardData.creeps[creep.name]) {
creep.memory = interShardData[creep.name];
delete interShardData.creeps[creep.name];
}
RawMemory.interShardSegment = JSON.stringify(interShardData);모든 월드 샤드에서 사용 가능한 공유 메모리 세그먼트 문자열입니다. 최대 길이는 100KB입니다.
경고: 이 세그먼트는 동시성(concurrent) 사용에 안전하지 않습니다! 모든 샤드는 같은 데이터 인스턴스에 대해 공유 접근을 가집니다. 두 샤드가 동시에 내용을 변경하면, 세그먼트 문자열 값이 한 번에 원자적으로(atomic) 쓰이기 때문에 일부 데이터가 유실될 수 있습니다. 샤드가 언제 inter-shard 메모리를 덮어쓸 수 있는지 결정하는 자체 시스템을 구현해야 합니다(예: 상호 배제(mutual exclusions) 기반).
const myMemory = JSON.parse(RawMemory.get());Memory 오브젝트의 원시 문자열 표현(raw string representation)을 가져옵니다.
문자열 값을 반환합니다.
RawMemory.set(JSON.stringify(myMemory));새 Memory 값을 설정합니다.
| parameter | type | description |
|---|---|---|
value | string | 문자열 형태의 새 메모리 값. |
RawMemory.setActiveSegments([0,3]);ID 목록으로 메모리 세그먼트를 요청합니다. 세그먼트는 다음 틱에 segments 오브젝트에서 사용할 수 있게 됩니다.
| parameter | type | description |
|---|---|---|
ids | array | 세그먼트 ID 배열입니다. 각 ID는 0~99의 숫자여야 합니다. 동시에 최대 10개 세그먼트만 활성화할 수 있습니다. |
RawMemory.setActiveForeignSegment('player');RawMemory.setActiveForeignSegment('player', 10);RawMemory.setActiveForeignSegment(null);다른 유저의 메모리 세그먼트를 요청합니다. 해당 세그먼트는 소유자가 setPublicSegments로 public으로 표시해야 합니다.
세그먼트 데이터는 다음 틱에 foreignSegment 오브젝트에서 사용할 수 있습니다.
동시에 하나의 foreign segment만 접근할 수 있습니다.
| parameter | type | description |
|---|---|---|
username | string | null | 다른 유저 이름. foreign segment를 지우려면 |
idoptional | number | 0~99 범위의 요청 세그먼트 ID. undefined이면, |
RawMemory.setPublicSegments([5,20,21]);
RawMemory.setDefaultPublicSegment(5);RawMemory.setDefaultPublicSegment(null);지정한 세그먼트를 여러분의 기본 public segment로 설정합니다. 다른 유저가 setActiveForeignSegment에서 id 파라미터를 전달하지 않으면 이 세그먼트가 반환됩니다.
| parameter | type | description |
|---|---|---|
id | number | null | 0~99 범위의 메모리 세그먼트 ID. 기본 public segment를 제거하려면 |
RawMemory.setPublicSegments([5,3]);RawMemory.setPublicSegments([]);지정한 세그먼트를 public으로 설정합니다. 다른 유저가 setActiveForeignSegment로 접근을 요청할 수 있게 됩니다.
| parameter | type | description |
|---|---|---|
ids | array | 세그먼트 ID 배열입니다. 각 ID는 0~99의 숫자여야 합니다. |
아래의 모든 상수 이름은 전역 스코프에서 사용할 수 있습니다:
Object.assign(exports, {
OK: 0,
ERR_NOT_OWNER: -1,
ERR_NO_PATH: -2,
ERR_NAME_EXISTS: -3,
ERR_BUSY: -4,
ERR_NOT_FOUND: -5,
ERR_NOT_ENOUGH_ENERGY: -6,
ERR_NOT_ENOUGH_RESOURCES: -6,
ERR_INVALID_TARGET: -7,
ERR_FULL: -8,
ERR_NOT_IN_RANGE: -9,
ERR_INVALID_ARGS: -10,
ERR_TIRED: -11,
ERR_NO_BODYPART: -12,
ERR_NOT_ENOUGH_EXTENSIONS: -6,
ERR_RCL_NOT_ENOUGH: -14,
ERR_GCL_NOT_ENOUGH: -15,
FIND_EXIT_TOP: 1,
FIND_EXIT_RIGHT: 3,
FIND_EXIT_BOTTOM: 5,
FIND_EXIT_LEFT: 7,
FIND_EXIT: 10,
FIND_CREEPS: 101,
FIND_MY_CREEPS: 102,
FIND_HOSTILE_CREEPS: 103,
FIND_SOURCES_ACTIVE: 104,
FIND_SOURCES: 105,
FIND_DROPPED_RESOURCES: 106,
FIND_STRUCTURES: 107,
FIND_MY_STRUCTURES: 108,
FIND_HOSTILE_STRUCTURES: 109,
FIND_FLAGS: 110,
FIND_CONSTRUCTION_SITES: 111,
FIND_MY_SPAWNS: 112,
FIND_HOSTILE_SPAWNS: 113,
FIND_MY_CONSTRUCTION_SITES: 114,
FIND_HOSTILE_CONSTRUCTION_SITES: 115,
FIND_MINERALS: 116,
FIND_NUKES: 117,
FIND_TOMBSTONES: 118,
FIND_POWER_CREEPS: 119,
FIND_MY_POWER_CREEPS: 120,
FIND_HOSTILE_POWER_CREEPS: 121,
FIND_DEPOSITS: 122,
FIND_RUINS: 123,
TOP: 1,
TOP_RIGHT: 2,
RIGHT: 3,
BOTTOM_RIGHT: 4,
BOTTOM: 5,
BOTTOM_LEFT: 6,
LEFT: 7,
TOP_LEFT: 8,
COLOR_RED: 1,
COLOR_PURPLE: 2,
COLOR_BLUE: 3,
COLOR_CYAN: 4,
COLOR_GREEN: 5,
COLOR_YELLOW: 6,
COLOR_ORANGE: 7,
COLOR_BROWN: 8,
COLOR_GREY: 9,
COLOR_WHITE: 10,
LOOK_CREEPS: "creep",
LOOK_ENERGY: "energy",
LOOK_RESOURCES: "resource",
LOOK_SOURCES: "source",
LOOK_MINERALS: "mineral",
LOOK_DEPOSITS: "deposit",
LOOK_STRUCTURES: "structure",
LOOK_FLAGS: "flag",
LOOK_CONSTRUCTION_SITES: "constructionSite",
LOOK_NUKES: "nuke",
LOOK_TERRAIN: "terrain",
LOOK_TOMBSTONES: "tombstone",
LOOK_POWER_CREEPS: "powerCreep",
LOOK_RUINS: "ruin",
OBSTACLE_OBJECT_TYPES: ["spawn", "creep", "powerCreep", "source", "mineral", "deposit", "controller", "constructedWall", "extension", "link", "storage", "tower", "observer", "powerSpawn", "powerBank", "lab", "terminal", "nuker", "factory", "invaderCore"],
MOVE: "move",
WORK: "work",
CARRY: "carry",
ATTACK: "attack",
RANGED_ATTACK: "ranged_attack",
TOUGH: "tough",
HEAL: "heal",
CLAIM: "claim",
BODYPART_COST: {
"move": 50,
"work": 100,
"attack": 80,
"carry": 50,
"heal": 250,
"ranged_attack": 150,
"tough": 10,
"claim": 600
},
// WORLD_WIDTH and WORLD_HEIGHT constants are deprecated, please use Game.map.getWorldSize() instead
WORLD_WIDTH: 202,
WORLD_HEIGHT: 202,
CREEP_LIFE_TIME: 1500,
CREEP_CLAIM_LIFE_TIME: 600,
CREEP_CORPSE_RATE: 0.2,
CREEP_PART_MAX_ENERGY: 125,
CARRY_CAPACITY: 50,
HARVEST_POWER: 2,
HARVEST_MINERAL_POWER: 1,
HARVEST_DEPOSIT_POWER: 1,
REPAIR_POWER: 100,
DISMANTLE_POWER: 50,
BUILD_POWER: 5,
ATTACK_POWER: 30,
UPGRADE_CONTROLLER_POWER: 1,
RANGED_ATTACK_POWER: 10,
HEAL_POWER: 12,
RANGED_HEAL_POWER: 4,
REPAIR_COST: 0.01,
DISMANTLE_COST: 0.005,
RAMPART_DECAY_AMOUNT: 300,
RAMPART_DECAY_TIME: 100,
RAMPART_HITS: 1,
RAMPART_HITS_MAX: {2: 300000, 3: 1000000, 4: 3000000, 5: 10000000, 6: 30000000, 7: 100000000, 8: 300000000},
ENERGY_REGEN_TIME: 300,
ENERGY_DECAY: 1000,
SPAWN_HITS: 5000,
SPAWN_ENERGY_START: 300,
SPAWN_ENERGY_CAPACITY: 300,
CREEP_SPAWN_TIME: 3,
SPAWN_RENEW_RATIO: 1.2,
SOURCE_ENERGY_CAPACITY: 3000,
SOURCE_ENERGY_NEUTRAL_CAPACITY: 1500,
SOURCE_ENERGY_KEEPER_CAPACITY: 4000,
WALL_HITS: 1,
WALL_HITS_MAX: 300000000,
EXTENSION_HITS: 1000,
EXTENSION_ENERGY_CAPACITY: {0: 50, 1: 50, 2: 50, 3: 50, 4: 50, 5: 50, 6: 50, 7: 100, 8: 200},
ROAD_HITS: 5000,
ROAD_WEAROUT: 1,
ROAD_WEAROUT_POWER_CREEP: 100,
ROAD_DECAY_AMOUNT: 100,
ROAD_DECAY_TIME: 1000,
LINK_HITS: 1000,
LINK_HITS_MAX: 1000,
LINK_CAPACITY: 800,
LINK_COOLDOWN: 1,
LINK_LOSS_RATIO: 0.03,
STORAGE_CAPACITY: 1000000,
STORAGE_HITS: 10000,
STRUCTURE_SPAWN: "spawn",
STRUCTURE_EXTENSION: "extension",
STRUCTURE_ROAD: "road",
STRUCTURE_WALL: "constructedWall",
STRUCTURE_RAMPART: "rampart",
STRUCTURE_KEEPER_LAIR: "keeperLair",
STRUCTURE_PORTAL: "portal",
STRUCTURE_CONTROLLER: "controller",
STRUCTURE_LINK: "link",
STRUCTURE_STORAGE: "storage",
STRUCTURE_TOWER: "tower",
STRUCTURE_OBSERVER: "observer",
STRUCTURE_POWER_BANK: "powerBank",
STRUCTURE_POWER_SPAWN: "powerSpawn",
STRUCTURE_EXTRACTOR: "extractor",
STRUCTURE_LAB: "lab",
STRUCTURE_TERMINAL: "terminal",
STRUCTURE_CONTAINER: "container",
STRUCTURE_NUKER: "nuker",
STRUCTURE_FACTORY: "factory",
STRUCTURE_INVADER_CORE: "invaderCore",
CONSTRUCTION_COST: {
"spawn": 15000,
"extension": 3000,
"road": 300,
"constructedWall": 1,
"rampart": 1,
"link": 5000,
"storage": 30000,
"tower": 5000,
"observer": 8000,
"powerSpawn": 100000,
"extractor": 5000,
"lab": 50000,
"terminal": 100000,
"container": 5000,
"nuker": 100000,
"factory": 100000
},
CONSTRUCTION_COST_ROAD_SWAMP_RATIO: 5,
CONSTRUCTION_COST_ROAD_WALL_RATIO: 150,
CONTROLLER_LEVELS: {1: 200, 2: 45000, 3: 135000, 4: 405000, 5: 1215000, 6: 3645000, 7: 10935000},
CONTROLLER_STRUCTURES: {
"spawn": {0: 0, 1: 1, 2: 1, 3: 1, 4: 1, 5: 1, 6: 1, 7: 2, 8: 3},
"extension": {0: 0, 1: 0, 2: 5, 3: 10, 4: 20, 5: 30, 6: 40, 7: 50, 8: 60},
"link": {1: 0, 2: 0, 3: 0, 4: 0, 5: 2, 6: 3, 7: 4, 8: 6},
"road": {0: 2500, 1: 2500, 2: 2500, 3: 2500, 4: 2500, 5: 2500, 6: 2500, 7: 2500, 8: 2500},
"constructedWall": {1: 0, 2: 2500, 3: 2500, 4: 2500, 5: 2500, 6: 2500, 7: 2500, 8: 2500},
"rampart": {1: 0, 2: 2500, 3: 2500, 4: 2500, 5: 2500, 6: 2500, 7: 2500, 8: 2500},
"storage": {1: 0, 2: 0, 3: 0, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1},
"tower": {1: 0, 2: 0, 3: 1, 4: 1, 5: 2, 6: 2, 7: 3, 8: 6},
"observer": {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 1},
"powerSpawn": {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 1},
"extractor": {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 1, 7: 1, 8: 1},
"terminal": {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 1, 7: 1, 8: 1},
"lab": {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 3, 7: 6, 8: 10},
"container": {0: 5, 1: 5, 2: 5, 3: 5, 4: 5, 5: 5, 6: 5, 7: 5, 8: 5},
"nuker": {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 0, 8: 1},
"factory": {1: 0, 2: 0, 3: 0, 4: 0, 5: 0, 6: 0, 7: 1, 8: 1}
},
CONTROLLER_DOWNGRADE: {1: 20000, 2: 10000, 3: 20000, 4: 40000, 5: 80000, 6: 120000, 7: 150000, 8: 200000},
CONTROLLER_DOWNGRADE_RESTORE: 100,
CONTROLLER_DOWNGRADE_SAFEMODE_THRESHOLD: 5000,
CONTROLLER_CLAIM_DOWNGRADE: 300,
CONTROLLER_RESERVE: 1,
CONTROLLER_RESERVE_MAX: 5000,
CONTROLLER_MAX_UPGRADE_PER_TICK: 15,
CONTROLLER_ATTACK_BLOCKED_UPGRADE: 1000,
CONTROLLER_NUKE_BLOCKED_UPGRADE: 200,
SAFE_MODE_DURATION: 20000,
SAFE_MODE_COOLDOWN: 50000,
SAFE_MODE_COST: 1000,
TOWER_HITS: 3000,
TOWER_CAPACITY: 1000,
TOWER_ENERGY_COST: 10,
TOWER_POWER_ATTACK: 600,
TOWER_POWER_HEAL: 400,
TOWER_POWER_REPAIR: 800,
TOWER_OPTIMAL_RANGE: 5,
TOWER_FALLOFF_RANGE: 20,
TOWER_FALLOFF: 0.75,
OBSERVER_HITS: 500,
OBSERVER_RANGE: 10,
POWER_BANK_HITS: 2000000,
POWER_BANK_CAPACITY_MAX: 5000,
POWER_BANK_CAPACITY_MIN: 500,
POWER_BANK_CAPACITY_CRIT: 0.3,
POWER_BANK_DECAY: 5000,
POWER_BANK_HIT_BACK: 0.5,
POWER_SPAWN_HITS: 5000,
POWER_SPAWN_ENERGY_CAPACITY: 5000,
POWER_SPAWN_POWER_CAPACITY: 100,
POWER_SPAWN_ENERGY_RATIO: 50,
EXTRACTOR_HITS: 500,
EXTRACTOR_COOLDOWN: 5,
LAB_HITS: 500,
LAB_MINERAL_CAPACITY: 3000,
LAB_ENERGY_CAPACITY: 2000,
LAB_BOOST_ENERGY: 20,
LAB_BOOST_MINERAL: 30,
LAB_COOLDOWN: 10, // not used
LAB_REACTION_AMOUNT: 5,
LAB_UNBOOST_ENERGY: 0,
LAB_UNBOOST_MINERAL: 15,
GCL_POW: 2.4,
GCL_MULTIPLY: 1000000,
GCL_NOVICE: 3,
MODE_SIMULATION: null,
MODE_WORLD: null,
TERRAIN_MASK_WALL: 1,
TERRAIN_MASK_SWAMP: 2,
TERRAIN_MASK_LAVA: 4,
MAX_CONSTRUCTION_SITES: 100,
MAX_CREEP_SIZE: 50,
MINERAL_REGEN_TIME: 50000,
MINERAL_MIN_AMOUNT: {
"H": 35000,
"O": 35000,
"L": 35000,
"K": 35000,
"Z": 35000,
"U": 35000,
"X": 35000
},
MINERAL_RANDOM_FACTOR: 2,
MINERAL_DENSITY: {
1: 15000,
2: 35000,
3: 70000,
4: 100000
},
MINERAL_DENSITY_PROBABILITY : {
1: 0.1,
2: 0.5,
3: 0.9,
4: 1.0
},
MINERAL_DENSITY_CHANGE: 0.05,
DENSITY_LOW: 1,
DENSITY_MODERATE: 2,
DENSITY_HIGH: 3,
DENSITY_ULTRA: 4,
DEPOSIT_EXHAUST_MULTIPLY: 0.001,
DEPOSIT_EXHAUST_POW: 1.2,
DEPOSIT_DECAY_TIME: 50000,
TERMINAL_CAPACITY: 300000,
TERMINAL_HITS: 3000,
TERMINAL_SEND_COST: 0.1,
TERMINAL_MIN_SEND: 100,
TERMINAL_COOLDOWN: 10,
CONTAINER_HITS: 250000,
CONTAINER_CAPACITY: 2000,
CONTAINER_DECAY: 5000,
CONTAINER_DECAY_TIME: 100,
CONTAINER_DECAY_TIME_OWNED: 500,
NUKER_HITS: 1000,
NUKER_COOLDOWN: 100000,
NUKER_ENERGY_CAPACITY: 300000,
NUKER_GHODIUM_CAPACITY: 5000,
NUKE_LAND_TIME: 50000,
NUKE_RANGE: 10,
NUKE_DAMAGE: {
0: 10000000,
2: 5000000
},
FACTORY_HITS: 1000,
FACTORY_CAPACITY: 50000,
TOMBSTONE_DECAY_PER_PART: 5,
TOMBSTONE_DECAY_POWER_CREEP: 500,
RUIN_DECAY: 500,
RUIN_DECAY_STRUCTURES: {
'powerBank': 10
},
PORTAL_DECAY: 30000,
ORDER_SELL: "sell",
ORDER_BUY: "buy",
MARKET_FEE: 0.05,
MARKET_MAX_ORDERS: 300,
MARKET_ORDER_LIFE_TIME: 1000*60*60*24*30,
FLAGS_LIMIT: 10000,
SUBSCRIPTION_TOKEN: "token",
CPU_UNLOCK: "cpuUnlock",
PIXEL: "pixel",
ACCESS_KEY: "accessKey",
PIXEL_CPU_COST: 10000,
RESOURCE_ENERGY: "energy",
RESOURCE_POWER: "power",
RESOURCE_HYDROGEN: "H",
RESOURCE_OXYGEN: "O",
RESOURCE_UTRIUM: "U",
RESOURCE_LEMERGIUM: "L",
RESOURCE_KEANIUM: "K",
RESOURCE_ZYNTHIUM: "Z",
RESOURCE_CATALYST: "X",
RESOURCE_GHODIUM: "G",
RESOURCE_SILICON: 'silicon',
RESOURCE_METAL: 'metal',
RESOURCE_BIOMASS: 'biomass',
RESOURCE_MIST: 'mist',
RESOURCE_HYDROXIDE: "OH",
RESOURCE_ZYNTHIUM_KEANITE: "ZK",
RESOURCE_UTRIUM_LEMERGITE: "UL",
RESOURCE_UTRIUM_HYDRIDE: "UH",
RESOURCE_UTRIUM_OXIDE: "UO",
RESOURCE_KEANIUM_HYDRIDE: "KH",
RESOURCE_KEANIUM_OXIDE: "KO",
RESOURCE_LEMERGIUM_HYDRIDE: "LH",
RESOURCE_LEMERGIUM_OXIDE: "LO",
RESOURCE_ZYNTHIUM_HYDRIDE: "ZH",
RESOURCE_ZYNTHIUM_OXIDE: "ZO",
RESOURCE_GHODIUM_HYDRIDE: "GH",
RESOURCE_GHODIUM_OXIDE: "GO",
RESOURCE_UTRIUM_ACID: "UH2O",
RESOURCE_UTRIUM_ALKALIDE: "UHO2",
RESOURCE_KEANIUM_ACID: "KH2O",
RESOURCE_KEANIUM_ALKALIDE: "KHO2",
RESOURCE_LEMERGIUM_ACID: "LH2O",
RESOURCE_LEMERGIUM_ALKALIDE: "LHO2",
RESOURCE_ZYNTHIUM_ACID: "ZH2O",
RESOURCE_ZYNTHIUM_ALKALIDE: "ZHO2",
RESOURCE_GHODIUM_ACID: "GH2O",
RESOURCE_GHODIUM_ALKALIDE: "GHO2",
RESOURCE_CATALYZED_UTRIUM_ACID: "XUH2O",
RESOURCE_CATALYZED_UTRIUM_ALKALIDE: "XUHO2",
RESOURCE_CATALYZED_KEANIUM_ACID: "XKH2O",
RESOURCE_CATALYZED_KEANIUM_ALKALIDE: "XKHO2",
RESOURCE_CATALYZED_LEMERGIUM_ACID: "XLH2O",
RESOURCE_CATALYZED_LEMERGIUM_ALKALIDE: "XLHO2",
RESOURCE_CATALYZED_ZYNTHIUM_ACID: "XZH2O",
RESOURCE_CATALYZED_ZYNTHIUM_ALKALIDE: "XZHO2",
RESOURCE_CATALYZED_GHODIUM_ACID: "XGH2O",
RESOURCE_CATALYZED_GHODIUM_ALKALIDE: "XGHO2",
RESOURCE_OPS: "ops",
RESOURCE_UTRIUM_BAR: 'utrium_bar',
RESOURCE_LEMERGIUM_BAR: 'lemergium_bar',
RESOURCE_ZYNTHIUM_BAR: 'zynthium_bar',
RESOURCE_KEANIUM_BAR: 'keanium_bar',
RESOURCE_GHODIUM_MELT: 'ghodium_melt',
RESOURCE_OXIDANT: 'oxidant',
RESOURCE_REDUCTANT: 'reductant',
RESOURCE_PURIFIER: 'purifier',
RESOURCE_BATTERY: 'battery',
RESOURCE_COMPOSITE: 'composite',
RESOURCE_CRYSTAL: 'crystal',
RESOURCE_LIQUID: 'liquid',
RESOURCE_WIRE: 'wire',
RESOURCE_SWITCH: 'switch',
RESOURCE_TRANSISTOR: 'transistor',
RESOURCE_MICROCHIP: 'microchip',
RESOURCE_CIRCUIT: 'circuit',
RESOURCE_DEVICE: 'device',
RESOURCE_CELL: 'cell',
RESOURCE_PHLEGM: 'phlegm',
RESOURCE_TISSUE: 'tissue',
RESOURCE_MUSCLE: 'muscle',
RESOURCE_ORGANOID: 'organoid',
RESOURCE_ORGANISM: 'organism',
RESOURCE_ALLOY: 'alloy',
RESOURCE_TUBE: 'tube',
RESOURCE_FIXTURES: 'fixtures',
RESOURCE_FRAME: 'frame',
RESOURCE_HYDRAULICS: 'hydraulics',
RESOURCE_MACHINE: 'machine',
RESOURCE_CONDENSATE: 'condensate',
RESOURCE_CONCENTRATE: 'concentrate',
RESOURCE_EXTRACT: 'extract',
RESOURCE_SPIRIT: 'spirit',
RESOURCE_EMANATION: 'emanation',
RESOURCE_ESSENCE: 'essence',
REACTIONS: {
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"
}
},
BOOSTS: {
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: .7
},
GHO2: {
damage: .5
},
XGHO2: {
damage: .3
}
}
},
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,
},
PORTAL_UNSTABLE: 10*24*3600*1000,
PORTAL_MIN_TIMEOUT: 12*24*3600*1000,
PORTAL_MAX_TIMEOUT: 22*24*3600*1000,
POWER_BANK_RESPAWN_TIME: 50000,
INVADERS_ENERGY_GOAL: 100000,
SYSTEM_USERNAME: 'Screeps',
// SIGN_NOVICE_AREA and SIGN_RESPAWN_AREA constants are deprecated, please use SIGN_PLANNED_AREA instead
SIGN_NOVICE_AREA: 'A new Novice or Respawn Area is being planned somewhere in this sector. Please make sure all important rooms are reserved.',
SIGN_RESPAWN_AREA: 'A new Novice or Respawn Area is being planned somewhere in this sector. Please make sure all important rooms are reserved.',
SIGN_PLANNED_AREA: 'A new Novice or Respawn Area is being planned somewhere in this sector. Please make sure all important rooms are reserved.',
EVENT_ATTACK: 1,
EVENT_OBJECT_DESTROYED: 2,
EVENT_ATTACK_CONTROLLER: 3,
EVENT_BUILD: 4,
EVENT_HARVEST: 5,
EVENT_HEAL: 6,
EVENT_REPAIR: 7,
EVENT_RESERVE_CONTROLLER: 8,
EVENT_UPGRADE_CONTROLLER: 9,
EVENT_EXIT: 10,
EVENT_POWER: 11,
EVENT_TRANSFER: 12,
EVENT_ATTACK_TYPE_MELEE: 1,
EVENT_ATTACK_TYPE_RANGED: 2,
EVENT_ATTACK_TYPE_RANGED_MASS: 3,
EVENT_ATTACK_TYPE_DISMANTLE: 4,
EVENT_ATTACK_TYPE_HIT_BACK: 5,
EVENT_ATTACK_TYPE_NUKE: 6,
EVENT_HEAL_TYPE_MELEE: 1,
EVENT_HEAL_TYPE_RANGED: 2,
POWER_LEVEL_MULTIPLY: 1000,
POWER_LEVEL_POW: 2,
POWER_CREEP_SPAWN_COOLDOWN: 8*3600*1000,
POWER_CREEP_DELETE_COOLDOWN: 24*3600*1000,
POWER_CREEP_MAX_LEVEL: 25,
POWER_CREEP_LIFE_TIME: 5000,
POWER_CLASS: {
OPERATOR: 'operator'
},
PWR_GENERATE_OPS: 1,
PWR_OPERATE_SPAWN: 2,
PWR_OPERATE_TOWER: 3,
PWR_OPERATE_STORAGE: 4,
PWR_OPERATE_LAB: 5,
PWR_OPERATE_EXTENSION: 6,
PWR_OPERATE_OBSERVER: 7,
PWR_OPERATE_TERMINAL: 8,
PWR_DISRUPT_SPAWN: 9,
PWR_DISRUPT_TOWER: 10,
PWR_DISRUPT_SOURCE: 11,
PWR_SHIELD: 12,
PWR_REGEN_SOURCE: 13,
PWR_REGEN_MINERAL: 14,
PWR_DISRUPT_TERMINAL: 15,
PWR_OPERATE_POWER: 16,
PWR_FORTIFY: 17,
PWR_OPERATE_CONTROLLER: 18,
PWR_OPERATE_FACTORY: 19,
EFFECT_INVULNERABILITY: 1001,
EFFECT_COLLAPSE_TIMER: 1002,
INVADER_CORE_HITS: 100000,
INVADER_CORE_CREEP_SPAWN_TIME: {
0: 0, 1: 0, 2: 6, 3: 3, 4: 2, 5: 1
},
INVADER_CORE_EXPAND_TIME: { 1: 4000, 2: 3500, 3: 3000, 4: 2500, 5: 2000 },
INVADER_CORE_CONTROLLER_POWER: 2,
INVADER_CORE_CONTROLLER_DOWNGRADE: 5000,
STRONGHOLD_RAMPART_HITS: { 0: 0, 1: 100000, 2: 200000, 3: 500000, 4: 1000000, 5: 2000000 },
STRONGHOLD_DECAY_TICKS: 75000
});
Object.assign(exports, {
POWER_INFO: {
[exports.PWR_GENERATE_OPS]: {
className: exports.POWER_CLASS.OPERATOR,
level: [0, 2, 7, 14, 22],
cooldown: 50,
effect: [1, 2, 4, 6, 8]
},
[exports.PWR_OPERATE_SPAWN]: {
className: exports.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]
},
[exports.PWR_OPERATE_TOWER]: {
className: exports.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]
},
[exports.PWR_OPERATE_STORAGE]: {
className: exports.POWER_CLASS.OPERATOR,
level: [0, 2, 7, 14, 22],
cooldown: 800,
duration: 1000,
range: 3,
ops: 100,
effect: [500000,1000000,2000000,4000000,7000000]
},
[exports.PWR_OPERATE_LAB]: {
className: exports.POWER_CLASS.OPERATOR,
level: [0, 2, 7, 14, 22],
cooldown: 50,
duration: 1000,
range: 3,
ops: 10,
effect: [2,4,6,8,10]
},
[exports.PWR_OPERATE_EXTENSION]: {
className: exports.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]
},
[exports.PWR_OPERATE_OBSERVER]: {
className: exports.POWER_CLASS.OPERATOR,
level: [0, 2, 7, 14, 22],
cooldown: 400,
duration: [200,400,600,800,1000],
range: 3,
ops: 10,
},
[exports.PWR_OPERATE_TERMINAL]: {
className: exports.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]
},
[exports.PWR_DISRUPT_SPAWN]: {
className: exports.POWER_CLASS.OPERATOR,
level: [0, 2, 7, 14, 22],
cooldown: 5,
range: 20,
ops: 10,
duration: [1,2,3,4,5]
},
[exports.PWR_DISRUPT_TOWER]: {
className: exports.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],
},
[exports.PWR_DISRUPT_SOURCE]: {
className: exports.POWER_CLASS.OPERATOR,
level: [0, 2, 7, 14, 22],
cooldown: 100,
range: 3,
ops: 100,
duration: [100, 200, 300, 400, 500]
},
[exports.PWR_SHIELD]: {
className: exports.POWER_CLASS.OPERATOR,
level: [0, 2, 7, 14, 22],
effect: [5000, 10000, 15000, 20000, 25000],
duration: 50,
cooldown: 20,
energy: 100,
},
[exports.PWR_REGEN_SOURCE]: {
className: exports.POWER_CLASS.OPERATOR,
level: [10, 11, 12, 14, 22],
cooldown: 100,
duration: 300,
range: 3,
effect: [50,100,150,200,250],
period: 15
},
[exports.PWR_REGEN_MINERAL]: {
className: exports.POWER_CLASS.OPERATOR,
level: [10, 11, 12, 14, 22],
cooldown: 100,
duration: 100,
range: 3,
effect: [2,4,6,8,10],
period: 10
},
[exports.PWR_DISRUPT_TERMINAL]: {
className: exports.POWER_CLASS.OPERATOR,
level: [20, 21, 22, 23, 24],
cooldown: 8,
duration: 10,
range: 50,
ops: [50,40,30,20,10]
},
[exports.PWR_FORTIFY]: {
className: exports.POWER_CLASS.OPERATOR,
level: [0, 2, 7, 14, 22],
cooldown: 5,
range: 3,
ops: 5,
duration: [1, 2, 3, 4, 5]
},
[exports.PWR_OPERATE_POWER]: {
className: exports.POWER_CLASS.OPERATOR,
level: [10, 11, 12, 14, 22],
cooldown: 800,
range: 3,
duration: 1000,
ops: 200,
effect: [1, 2, 3, 4, 5]
},
[exports.PWR_OPERATE_CONTROLLER]: {
className: exports.POWER_CLASS.OPERATOR,
level: [20, 21, 22, 23, 24],
cooldown: 800,
range: 3,
duration: 1000,
ops: 200,
effect: [10, 20, 30, 40, 50]
},
[exports.PWR_OPERATE_FACTORY]: {
className: exports.POWER_CLASS.OPERATOR,
level: [0, 2, 7, 14, 22],
cooldown: 800,
range: 3,
duration: 1000,
ops: 100
},
},
BODYPARTS_ALL: [
exports.MOVE,
exports.WORK,
exports.CARRY,
exports.ATTACK,
exports.RANGED_ATTACK,
exports.TOUGH,
exports.HEAL,
exports.CLAIM
],
RESOURCES_ALL: [
exports.RESOURCE_ENERGY,
exports.RESOURCE_POWER,
exports.RESOURCE_HYDROGEN,
exports.RESOURCE_OXYGEN,
exports.RESOURCE_UTRIUM,
exports.RESOURCE_KEANIUM,
exports.RESOURCE_LEMERGIUM,
exports.RESOURCE_ZYNTHIUM,
exports.RESOURCE_CATALYST,
exports.RESOURCE_GHODIUM,
exports.RESOURCE_HYDROXIDE,
exports.RESOURCE_ZYNTHIUM_KEANITE,
exports.RESOURCE_UTRIUM_LEMERGITE,
exports.RESOURCE_UTRIUM_HYDRIDE,
exports.RESOURCE_UTRIUM_OXIDE,
exports.RESOURCE_KEANIUM_HYDRIDE,
exports.RESOURCE_KEANIUM_OXIDE,
exports.RESOURCE_LEMERGIUM_HYDRIDE,
exports.RESOURCE_LEMERGIUM_OXIDE,
exports.RESOURCE_ZYNTHIUM_HYDRIDE,
exports.RESOURCE_ZYNTHIUM_OXIDE,
exports.RESOURCE_GHODIUM_HYDRIDE,
exports.RESOURCE_GHODIUM_OXIDE,
exports.RESOURCE_UTRIUM_ACID,
exports.RESOURCE_UTRIUM_ALKALIDE,
exports.RESOURCE_KEANIUM_ACID,
exports.RESOURCE_KEANIUM_ALKALIDE,
exports.RESOURCE_LEMERGIUM_ACID,
exports.RESOURCE_LEMERGIUM_ALKALIDE,
exports.RESOURCE_ZYNTHIUM_ACID,
exports.RESOURCE_ZYNTHIUM_ALKALIDE,
exports.RESOURCE_GHODIUM_ACID,
exports.RESOURCE_GHODIUM_ALKALIDE,
exports.RESOURCE_CATALYZED_UTRIUM_ACID,
exports.RESOURCE_CATALYZED_UTRIUM_ALKALIDE,
exports.RESOURCE_CATALYZED_KEANIUM_ACID,
exports.RESOURCE_CATALYZED_KEANIUM_ALKALIDE,
exports.RESOURCE_CATALYZED_LEMERGIUM_ACID,
exports.RESOURCE_CATALYZED_LEMERGIUM_ALKALIDE,
exports.RESOURCE_CATALYZED_ZYNTHIUM_ACID,
exports.RESOURCE_CATALYZED_ZYNTHIUM_ALKALIDE,
exports.RESOURCE_CATALYZED_GHODIUM_ACID,
exports.RESOURCE_CATALYZED_GHODIUM_ALKALIDE,
exports.RESOURCE_OPS,
exports.RESOURCE_SILICON,
exports.RESOURCE_METAL,
exports.RESOURCE_BIOMASS,
exports.RESOURCE_MIST,
exports.RESOURCE_UTRIUM_BAR,
exports.RESOURCE_LEMERGIUM_BAR,
exports.RESOURCE_ZYNTHIUM_BAR,
exports.RESOURCE_KEANIUM_BAR,
exports.RESOURCE_GHODIUM_MELT,
exports.RESOURCE_OXIDANT,
exports.RESOURCE_REDUCTANT,
exports.RESOURCE_PURIFIER,
exports.RESOURCE_BATTERY,
exports.RESOURCE_COMPOSITE,
exports.RESOURCE_CRYSTAL,
exports.RESOURCE_LIQUID,
exports.RESOURCE_WIRE,
exports.RESOURCE_SWITCH,
exports.RESOURCE_TRANSISTOR,
exports.RESOURCE_MICROCHIP,
exports.RESOURCE_CIRCUIT,
exports.RESOURCE_DEVICE,
exports.RESOURCE_CELL,
exports.RESOURCE_PHLEGM,
exports.RESOURCE_TISSUE,
exports.RESOURCE_MUSCLE,
exports.RESOURCE_ORGANOID,
exports.RESOURCE_ORGANISM,
exports.RESOURCE_ALLOY,
exports.RESOURCE_TUBE,
exports.RESOURCE_FIXTURES,
exports.RESOURCE_FRAME,
exports.RESOURCE_HYDRAULICS,
exports.RESOURCE_MACHINE,
exports.RESOURCE_CONDENSATE,
exports.RESOURCE_CONCENTRATE,
exports.RESOURCE_EXTRACT,
exports.RESOURCE_SPIRIT,
exports.RESOURCE_EMANATION,
exports.RESOURCE_ESSENCE
],
COLORS_ALL: [
exports.COLOR_RED,
exports.COLOR_PURPLE,
exports.COLOR_BLUE,
exports.COLOR_CYAN,
exports.COLOR_GREEN,
exports.COLOR_YELLOW,
exports.COLOR_ORANGE,
exports.COLOR_BROWN,
exports.COLOR_GREY,
exports.COLOR_WHITE
],
INTERSHARD_RESOURCES: [
exports.SUBSCRIPTION_TOKEN,
exports.CPU_UNLOCK,
exports.PIXEL,
exports.ACCESS_KEY
],
COMMODITIES: {
[exports.RESOURCE_UTRIUM_BAR]: {
amount: 100,
cooldown: 20,
components: {
[exports.RESOURCE_UTRIUM]: 500,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_UTRIUM]: {
amount: 500,
cooldown: 20,
components: {
[exports.RESOURCE_UTRIUM_BAR]: 100,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_LEMERGIUM_BAR]: {
amount: 100,
cooldown: 20,
components: {
[exports.RESOURCE_LEMERGIUM]: 500,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_LEMERGIUM]: {
amount: 500,
cooldown: 20,
components: {
[exports.RESOURCE_LEMERGIUM_BAR]: 100,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_ZYNTHIUM_BAR]: {
amount: 100,
cooldown: 20,
components: {
[exports.RESOURCE_ZYNTHIUM]: 500,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_ZYNTHIUM]: {
amount: 500,
cooldown: 20,
components: {
[exports.RESOURCE_ZYNTHIUM_BAR]: 100,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_KEANIUM_BAR]: {
amount: 100,
cooldown: 20,
components: {
[exports.RESOURCE_KEANIUM]: 500,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_KEANIUM]: {
amount: 500,
cooldown: 20,
components: {
[exports.RESOURCE_KEANIUM_BAR]: 100,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_GHODIUM_MELT]: {
amount: 100,
cooldown: 20,
components: {
[exports.RESOURCE_GHODIUM]: 500,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_GHODIUM]: {
amount: 500,
cooldown: 20,
components: {
[exports.RESOURCE_GHODIUM_MELT]: 100,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_OXIDANT]: {
amount: 100,
cooldown: 20,
components: {
[exports.RESOURCE_OXYGEN]: 500,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_OXYGEN]: {
amount: 500,
cooldown: 20,
components: {
[exports.RESOURCE_OXIDANT]: 100,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_REDUCTANT]: {
amount: 100,
cooldown: 20,
components: {
[exports.RESOURCE_HYDROGEN]: 500,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_HYDROGEN]: {
amount: 500,
cooldown: 20,
components: {
[exports.RESOURCE_REDUCTANT]: 100,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_PURIFIER]: {
amount: 100,
cooldown: 20,
components: {
[exports.RESOURCE_CATALYST]: 500,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_CATALYST]: {
amount: 500,
cooldown: 20,
components: {
[exports.RESOURCE_PURIFIER]: 100,
[exports.RESOURCE_ENERGY]: 200
}
},
[exports.RESOURCE_BATTERY]: {
amount: 50,
cooldown: 10,
components: {
[exports.RESOURCE_ENERGY]: 600
}
},
[exports.RESOURCE_ENERGY]: {
amount: 500,
cooldown: 10,
components: {
[exports.RESOURCE_BATTERY]: 50
}
},
[exports.RESOURCE_COMPOSITE]: {
level: 1,
amount: 20,
cooldown: 50,
components: {
[exports.RESOURCE_UTRIUM_BAR]: 20,
[exports.RESOURCE_ZYNTHIUM_BAR]: 20,
[exports.RESOURCE_ENERGY]: 20
}
},
[exports.RESOURCE_CRYSTAL]: {
level: 2,
amount: 6,
cooldown: 21,
components: {
[exports.RESOURCE_LEMERGIUM_BAR]: 6,
[exports.RESOURCE_KEANIUM_BAR]: 6,
[exports.RESOURCE_PURIFIER]: 6,
[exports.RESOURCE_ENERGY]: 45
}
},
[exports.RESOURCE_LIQUID]: {
level: 3,
amount: 12,
cooldown: 60,
components: {
[exports.RESOURCE_OXIDANT]: 12,
[exports.RESOURCE_REDUCTANT]: 12,
[exports.RESOURCE_GHODIUM_MELT]: 12,
[exports.RESOURCE_ENERGY]: 90
}
},
[exports.RESOURCE_WIRE]: {
amount: 20,
cooldown: 8,
components: {
[exports.RESOURCE_UTRIUM_BAR]: 20,
[exports.RESOURCE_SILICON]: 100,
[exports.RESOURCE_ENERGY]: 40
}
},
[exports.RESOURCE_SWITCH]: {
level: 1,
amount: 5,
cooldown: 70,
components: {
[exports.RESOURCE_WIRE]: 40,
[exports.RESOURCE_OXIDANT]: 95,
[exports.RESOURCE_UTRIUM_BAR]: 35,
[exports.RESOURCE_ENERGY]: 20
}
},
[exports.RESOURCE_TRANSISTOR]: {
level: 2,
amount: 1,
cooldown: 59,
components: {
[exports.RESOURCE_SWITCH]: 4,
[exports.RESOURCE_WIRE]: 15,
[exports.RESOURCE_REDUCTANT]: 85,
[exports.RESOURCE_ENERGY]: 8
}
},
[exports.RESOURCE_MICROCHIP]: {
level: 3,
amount: 1,
cooldown: 250,
components: {
[exports.RESOURCE_TRANSISTOR]: 2,
[exports.RESOURCE_COMPOSITE]: 50,
[exports.RESOURCE_WIRE]: 117,
[exports.RESOURCE_PURIFIER]: 25,
[exports.RESOURCE_ENERGY]: 16
}
},
[exports.RESOURCE_CIRCUIT]: {
level: 4,
amount: 1,
cooldown: 800,
components: {
[exports.RESOURCE_MICROCHIP]: 1,
[exports.RESOURCE_TRANSISTOR]: 5,
[exports.RESOURCE_SWITCH]: 4,
[exports.RESOURCE_OXIDANT]: 115,
[exports.RESOURCE_ENERGY]: 32
}
},
[exports.RESOURCE_DEVICE]: {
level: 5,
amount: 1,
cooldown: 600,
components: {
[exports.RESOURCE_CIRCUIT]: 1,
[exports.RESOURCE_MICROCHIP]: 3,
[exports.RESOURCE_CRYSTAL]: 110,
[exports.RESOURCE_GHODIUM_MELT]: 150,
[exports.RESOURCE_ENERGY]: 64
}
},
[exports.RESOURCE_CELL]: {
amount: 20,
cooldown: 8,
components: {
[exports.RESOURCE_LEMERGIUM_BAR]: 20,
[exports.RESOURCE_BIOMASS]: 100,
[exports.RESOURCE_ENERGY]: 40
}
},
[exports.RESOURCE_PHLEGM]: {
level: 1,
amount: 2,
cooldown: 35,
components: {
[exports.RESOURCE_CELL]: 20,
[exports.RESOURCE_OXIDANT]: 36,
[exports.RESOURCE_LEMERGIUM_BAR]: 16,
[exports.RESOURCE_ENERGY]: 8
}
},
[exports.RESOURCE_TISSUE]: {
level: 2,
amount: 2,
cooldown: 164,
components: {
[exports.RESOURCE_PHLEGM]: 10,
[exports.RESOURCE_CELL]: 10,
[exports.RESOURCE_REDUCTANT]: 110,
[exports.RESOURCE_ENERGY]: 16
}
},
[exports.RESOURCE_MUSCLE]: {
level: 3,
amount: 1,
cooldown: 250,
components: {
[exports.RESOURCE_TISSUE]: 3,
[exports.RESOURCE_PHLEGM]: 3,
[exports.RESOURCE_ZYNTHIUM_BAR]: 50,
[exports.RESOURCE_REDUCTANT]: 50,
[exports.RESOURCE_ENERGY]: 16
}
},
[exports.RESOURCE_ORGANOID]: {
level: 4,
amount: 1,
cooldown: 800,
components: {
[exports.RESOURCE_MUSCLE]: 1,
[exports.RESOURCE_TISSUE]: 5,
[exports.RESOURCE_PURIFIER]: 208,
[exports.RESOURCE_OXIDANT]: 256,
[exports.RESOURCE_ENERGY]: 32
}
},
[exports.RESOURCE_ORGANISM]: {
level: 5,
amount: 1,
cooldown: 600,
components: {
[exports.RESOURCE_ORGANOID]: 1,
[exports.RESOURCE_LIQUID]: 150,
[exports.RESOURCE_TISSUE]: 6,
[exports.RESOURCE_CELL]: 310,
[exports.RESOURCE_ENERGY]: 64
}
},
[exports.RESOURCE_ALLOY]: {
amount: 20,
cooldown: 8,
components: {
[exports.RESOURCE_ZYNTHIUM_BAR]: 20,
[exports.RESOURCE_METAL]: 100,
[exports.RESOURCE_ENERGY]: 40
}
},
[exports.RESOURCE_TUBE]: {
level: 1,
amount: 2,
cooldown: 45,
components: {
[exports.RESOURCE_ALLOY]: 40,
[exports.RESOURCE_ZYNTHIUM_BAR]: 16,
[exports.RESOURCE_ENERGY]: 8
}
},
[exports.RESOURCE_FIXTURES]: {
level: 2,
amount: 1,
cooldown: 115,
components: {
[exports.RESOURCE_COMPOSITE]: 20,
[exports.RESOURCE_ALLOY]: 41,
[exports.RESOURCE_OXIDANT]: 161,
[exports.RESOURCE_ENERGY]: 8
}
},
[exports.RESOURCE_FRAME]: {
level: 3,
amount: 1,
cooldown: 125,
components: {
[exports.RESOURCE_FIXTURES]: 2,
[exports.RESOURCE_TUBE]: 4,
[exports.RESOURCE_REDUCTANT]: 330,
[exports.RESOURCE_ZYNTHIUM_BAR]: 31,
[exports.RESOURCE_ENERGY]: 16
}
},
[exports.RESOURCE_HYDRAULICS]: {
level: 4,
amount: 1,
cooldown: 800,
components: {
[exports.RESOURCE_LIQUID]: 150,
[exports.RESOURCE_FIXTURES]: 3,
[exports.RESOURCE_TUBE]: 15,
[exports.RESOURCE_PURIFIER]: 208,
[exports.RESOURCE_ENERGY]: 32
}
},
[exports.RESOURCE_MACHINE]: {
level: 5,
amount: 1,
cooldown: 600,
components: {
[exports.RESOURCE_HYDRAULICS]: 1,
[exports.RESOURCE_FRAME]: 2,
[exports.RESOURCE_FIXTURES]: 3,
[exports.RESOURCE_TUBE]: 12,
[exports.RESOURCE_ENERGY]: 64
}
},
[exports.RESOURCE_CONDENSATE]: {
amount: 20,
cooldown: 8,
components: {
[exports.RESOURCE_KEANIUM_BAR]: 20,
[exports.RESOURCE_MIST]: 100,
[exports.RESOURCE_ENERGY]: 40
}
},
[exports.RESOURCE_CONCENTRATE]: {
level: 1,
amount: 3,
cooldown: 41,
components: {
[exports.RESOURCE_CONDENSATE]: 30,
[exports.RESOURCE_KEANIUM_BAR]: 15,
[exports.RESOURCE_REDUCTANT]: 54,
[exports.RESOURCE_ENERGY]: 12
}
},
[exports.RESOURCE_EXTRACT]: {
level: 2,
amount: 2,
cooldown: 128,
components: {
[exports.RESOURCE_CONCENTRATE]: 10,
[exports.RESOURCE_CONDENSATE]: 30,
[exports.RESOURCE_OXIDANT]: 60,
[exports.RESOURCE_ENERGY]: 16
}
},
[exports.RESOURCE_SPIRIT]: {
level: 3,
amount: 1,
cooldown: 200,
components: {
[exports.RESOURCE_EXTRACT]: 2,
[exports.RESOURCE_CONCENTRATE]: 6,
[exports.RESOURCE_REDUCTANT]: 90,
[exports.RESOURCE_PURIFIER]: 20,
[exports.RESOURCE_ENERGY]: 16
}
},
[exports.RESOURCE_EMANATION]: {
level: 4,
amount: 1,
cooldown: 800,
components: {
[exports.RESOURCE_SPIRIT]: 2,
[exports.RESOURCE_EXTRACT]: 2,
[exports.RESOURCE_CONCENTRATE]: 3,
[exports.RESOURCE_KEANIUM_BAR]: 112,
[exports.RESOURCE_ENERGY]: 32
}
},
[exports.RESOURCE_ESSENCE]: {
level: 5,
amount: 1,
cooldown: 600,
components: {
[exports.RESOURCE_EMANATION]: 1,
[exports.RESOURCE_SPIRIT]: 3,
[exports.RESOURCE_CRYSTAL]: 110,
[exports.RESOURCE_GHODIUM_MELT]: 150,
[exports.RESOURCE_ENERGY]: 64
}
},
}
});
현재 건설 중인 구조물의 건설 사이트입니다. 건설 사이트는 게임 화면 왼쪽의 'Construct' 버튼 또는 Room.createConstructionSite 메서드로 만들 수 있습니다.
건설 사이트에 구조물을 짓기 위해서는, 워커 크립에게 에너지를 주고 Creep.build 액션을 수행하세요.
적의 건설 사이트는 크립을 그 위로 이동시키면 제거할 수 있습니다.
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.
이 건설 사이트가 여러분의 것인지 여부입니다.
구조물 소유자 정보를 담은 오브젝트입니다. 다음 프로퍼티를 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름. |
현재 건설 진행도입니다.
구조물을 완성하기 위해 필요한 총 건설 진행도입니다.
STRUCTURE_* 상수 중 하나입니다.
건설 사이트를 제거합니다.
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 건설 사이트의 소유자가 아니며, 여러분의 룸에도 있지 않습니다. |
크립(Creep)은 당신의 유닛입니다. 크립은 이동, 에너지 채집, 구조물 건설, 다른 크립 공격 등 다양한 행동을 수행할 수 있습니다. 각 크립은 최대 50개의 바디 파트로 구성되며, 가능한 타입은 다음과 같습니다:
| 바디 파트 | 제작 비용 | 바디 파트 1개당 효과 |
|---|---|---|
MOVE |
50 | 피로도(fatigue)를 매 틱 2만큼 감소시킵니다. |
WORK |
100 |
소스(source)에서 매 틱 에너지 2를 채집합니다. 미네랄 또는 디포짓에서 매 틱 자원 1을 채집합니다. 매 틱 에너지 5를 사용해 구조물을 건설합니다. 매 틱 에너지 1을 소비해 구조물을 100 hits만큼 수리합니다. 매 틱 구조물을 50 hits만큼 해체(dismantle)하고, 매 틱 에너지 0.25를 반환합니다. 매 틱 에너지 1을 사용해 컨트롤러를 업그레이드합니다. |
CARRY |
50 | 최대 50 유닛의 자원을 담을 수 있습니다. |
ATTACK |
80 | 근접 공격으로 다른 크립/구조물을 매 틱 30 hits만큼 공격합니다. |
RANGED_ATTACK |
150 |
최대 3칸 거리의 원거리 공격으로 단일 크립/구조물을 매 틱 10 hits만큼 공격합니다. 반경 3칸 내의 모든 적 크립/구조물을 거리(범위)에 따라 1-4-10 hits만큼 공격합니다. |
HEAL |
250 | 자기 자신 또는 다른 크립을 치유합니다. 근접에서는 매 틱 12 hits, 거리에서는 매 틱 4 hits를 회복합니다. |
CLAIM |
600 |
중립 방의 컨트롤러를 점유(claim)합니다. 중립 방의 컨트롤러를 바디 파트당 1틱씩 예약(reserve)합니다. 적 방의 컨트롤러를 공격하여 바디 파트당 300틱씩 다운그레이드 타이머를 감소시킵니다. 중립 방의 컨트롤러 예약 타이머를 바디 파트당 1틱씩 공격하여 감소시킵니다. 이 바디 파트를 가진 크립은 수명이 600틱으로 줄어들며 갱신(renew)할 수 없습니다. |
TOUGH |
10 | 효과는 없고, 크립 바디에 추가 체력만 제공합니다. 부스트로 피해 저항을 올릴 수 있습니다. |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
크립의 바디를 설명하는 배열입니다. 각 요소는 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
boost | string | undefined | 바디 파트가 부스트되어 있다면, 이 속성은 부스트에 사용된 미네랄 타입을 지정합니다. |
type | string | 바디 파트 타입 상수 중 하나입니다. |
hits | number | 이 바디 파트의 남은 체력(hits)입니다. |
This property is deprecated and will be removed soon.
Creep.store의 별칭입니다.
This property is deprecated and will be removed soon.
Creep.store.getCapacity()의 별칭입니다.
이동 피로도(fatigue) 지표입니다. 0보다 크면 크립은 이동할 수 없습니다.
크립의 현재 체력입니다.
크립의 최대 체력입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
creep.memory.task = 'building';Memory.creeps[creep.name]의 단축 접근자입니다. 크립별 메모리 데이터 객체에 빠르게 접근할 때 사용할 수 있습니다. 메모리에 대해 더 알아보기
내 크립인지, 적(상대) 크립인지 여부입니다.
크립의 이름입니다. 새 크립을 생성할 때 이름을 정하며, 이후에는 변경할 수 없습니다. 이 이름은 Game.creeps 객체에서 크립에 접근하기 위한 해시 키입니다.
크립 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
마지막 틱에 크립이 말한 텍스트입니다.
이 크립이 아직 생성(spawning) 중인지 여부입니다.
if(creep.store[RESOURCE_ENERGY] < creep.store.getCapacity()) {
goHarvest(creep);
}이 크립의 화물(저장량)을 담고 있는 Store 객체입니다.
이 크립이 죽기까지 남은 게임 틱 수입니다.
const target = creep.pos.findClosestByRange(FIND_HOSTILE_CREEPS);
if(target) {
if(creep.attack(target) == ERR_NOT_IN_RANGE) {
creep.moveTo(target);
}
}
근접 공격으로 다른 크립/파워 크립/구조물을 공격합니다. ATTACK 바디 파트가 필요합니다. 대상이 램파트 안에 있으면, 대신 램파트가 공격됩니다. 대상은 크립과 인접한 칸에 있어야 합니다. 대상이 ATTACK 바디 파트를 가진 크립이며 램파트 안에 있지 않다면, 공격을 받으면 자동으로 반격합니다.
| parameter | type | description |
|---|---|---|
target | Creep, PowerCreep, Structure | 공격할 대상 객체입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_INVALID_TARGET | -7 | 대상이 공격 가능한 올바른 객체가 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 |
if(creep.room.controller && !creep.room.controller.my) {
if(creep.attackController(creep.room.controller) == ERR_NOT_IN_RANGE) {
creep.moveTo(creep.room.controller);
}
}
컨트롤러의 다운그레이드 타이머를 CLAIM 바디 파트당 300틱 감소시키거나, 예약(reservation) 타이머를 CLAIM 바디 파트당 1틱 감소시킵니다. 공격 대상 컨트롤러가 이미 소유(owned) 상태라면, 이후 1,000틱 동안 업그레이드하거나 다시 공격할 수 없습니다. 대상은 크립과 인접한 칸에 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | StructureController | 대상 컨트롤러 객체입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_INVALID_TARGET | -7 | 대상이 올바른 점유/예약 컨트롤러 객체가 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_TIRED | -11 | 다음 공격이 가능해질 때까지 기다려야 합니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 |
const target = creep.pos.findClosestByRange(FIND_CONSTRUCTION_SITES);
if(target) {
if(creep.build(target) == ERR_NOT_IN_RANGE) {
creep.moveTo(target);
}
}
운반 중인 에너지를 사용해 대상 건설 현장(construction site)에서 구조물을 건설합니다. WORK 및 CARRY 바디 파트가 필요합니다. 대상은 크립으로부터 3칸 이내에 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | ConstructionSite | 건설할 대상 건설 현장입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 크립이 운반 중인 에너지가 없습니다. |
ERR_INVALID_TARGET | -7 | 대상이 올바른 건설 현장 객체가 아니거나, 여기에 구조물을 지을 수 없습니다(아마 같은 칸에 크립이 있기 때문일 수 있습니다). |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 |
creep.move(LEFT);
creep.cancelOrder('move');
//The creep will not move in this game tick현재 게임 틱에서 내린 명령(order)을 취소합니다.
| parameter | type | description |
|---|---|---|
methodName | string | 취소할 크립 메서드의 이름입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 취소되었습니다. |
ERR_NOT_FOUND | -5 | 지정한 이름의 명령(order)을 찾을 수 없습니다. |
if(creep.room.controller) {
if(creep.claimController(creep.room.controller) == ERR_NOT_IN_RANGE) {
creep.moveTo(creep.room.controller);
}
}
중립 컨트롤러를 점유(claim)하여 내 통제하에 둡니다. CLAIM 바디 파트가 필요합니다. 대상은 크립과 인접한 칸에 있어야 합니다. 새 방을 점유하려면 해당하는 글로벌 컨트롤 레벨(GCL)이 필요합니다. GCL이 부족하다면, 대신 이 방을 예약(reserve)하는 것을 고려하세요. 자세히 보기
| parameter | type | description |
|---|---|---|
target | StructureController | 대상 컨트롤러 객체입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_INVALID_TARGET | -7 | 대상이 올바른 중립 컨트롤러 객체가 아닙니다. |
ERR_FULL | -8 | 초보 구역(Novice Area)에서는 3개를 초과하여 방을 점유할 수 없습니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 |
ERR_GCL_NOT_ENOUGH | -15 | 글로벌 컨트롤 레벨(GCL)이 충분하지 않습니다. |
const target = creep.pos.findClosestByRange(FIND_STRUCTURES,
{filter: {structureType: STRUCTURE_WALL}});
if(target) {
if(creep.dismantle(target) == ERR_NOT_IN_RANGE) {
creep.moveTo(target);
}
}
건설 가능한 어떤 구조물(적 구조물 포함)이든 해체(dismantle)하며, 수리에 사용된 에너지의 50%를 돌려줍니다. WORK 바디 파트가 필요합니다. 크립에 비어 있는 CARRY 바디 파트가 있으면 에너지가 그 안에 들어가고, 그렇지 않으면 바닥에 드롭됩니다. 대상은 크립과 인접한 칸에 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | Structure | 대상 구조물입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_INVALID_TARGET | -7 | 대상이 올바른 구조물 객체가 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 |
creep.drop(RESOURCE_ENERGY);// drop all resources
for(const resourceType in creep.carry) {
creep.drop(resourceType);
}이 자원을 바닥에 떨어뜨립니다.
| parameter | type | description |
|---|---|---|
resourceType | string |
|
amountoptional | number | 떨어뜨릴 자원 수량입니다. 생략하면 들고 있는 모든 수량을 사용합니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 크립에 지정한 양의 자원이 없습니다. |
ERR_INVALID_ARGS | -10 | resourceType이 올바른 |
if(creep.generateSafeMode(creep.room.controller) == ERR_NOT_IN_RANGE) {
creep.moveTo(creep.room.controller);
}
방 컨트롤러에 “사용 가능한 세이프 모드 발동 횟수”를 1회 추가합니다. 크립은 대상 컨트롤러와 인접한 칸에 있어야 하며, ghodium 자원 1000을 보유하고 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | StructureController | 대상 방 컨트롤러입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 크립에 ghodium이 충분하지 않습니다. |
ERR_INVALID_TARGET | -7 | 대상이 올바른 컨트롤러 객체가 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
const target = creep.pos.findClosestByRange(FIND_HOSTILE_CREEPS, {
filter: function(object) {
return object.getActiveBodyparts(ATTACK) == 0;
}
});
if(target) {
creep.moveTo(target);
}지정한 타입의 “살아있는(live)” 바디 파트 수를 가져옵니다. 완전히 파괴된 파트는 포함되지 않습니다.
| parameter | type | description |
|---|---|---|
type | string | 바디 파트 타입이며, 아래 상수 중 하나입니다:
|
바디 파트 개수를 나타내는 숫자입니다.
const target = creep.pos.findClosestByRange(FIND_SOURCES_ACTIVE);
if(target) {
if(creep.harvest(target) == ERR_NOT_IN_RANGE) {
creep.moveTo(target);
}
}
소스에서 에너지를 채집하거나, 미네랄/디포짓에서 자원을 채집합니다. WORK 바디 파트가 필요합니다. 크립에 비어 있는 CARRY 바디 파트가 있으면 채집한 자원이 그 안에 들어가고, 그렇지 않으면 바닥에 드롭됩니다. 대상은 크립과 인접한 칸에 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | Source, Mineral, Deposit | 채집 대상 객체입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아니거나, 방 컨트롤러가 다른 플레이어에게 점유/예약되어 있습니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_NOT_FOUND | -5 | 익스트랙터(Extractor)를 찾을 수 없습니다. 미네랄을 채집하려면 익스트랙터 구조물을 건설해야 합니다. 자세히 보기 |
ERR_NOT_ENOUGH_RESOURCES | -6 | 대상에 채집 가능한 에너지 또는 미네랄이 없습니다. |
ERR_INVALID_TARGET | -7 | 대상이 올바른 소스/미네랄 객체가 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_TIRED | -11 | 익스트랙터 또는 디포짓이 아직 쿨다운 중입니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 |
const target = creep.pos.findClosestByRange(FIND_MY_CREEPS, {
filter: function(object) {
return object.hits < object.hitsMax;
}
});
if(target) {
if(creep.heal(target) == ERR_NOT_IN_RANGE) {
creep.moveTo(target);
}
}
자기 자신 또는 다른 크립을 치유합니다. 대상 크립의 손상된 바디 파트 기능을 복구하고 hits 카운터를 증가시킵니다. HEAL 바디 파트가 필요합니다. 대상은 크립과 인접한 칸에 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | Creep, PowerCreep | 대상 크립 객체입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_INVALID_TARGET | -7 | 대상이 올바른 크립 객체가 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 |
creep.move(RIGHT);const path = creep.pos.findPathTo(Game.flags.Flag1);
if(path.length > 0) {
creep.move(path[0].direction);
}creep1.move(TOP);
creep1.pull(creep2);
creep2.move(creep1);지정한 방향으로 크립을 1칸 이동시킵니다. MOVE 바디 파트가 필요하며, 또는 근처의 다른 크립이 이 크립을 끌어당기며(pull) 이동시켜야 합니다. 근처 크립을 대상으로 move를 호출하는 경우에는 ERR_TIRED 및 ERR_NO_BODYPART 검사가 생략되고, 그렇지 않으면 ERR_NOT_IN_RANGE 검사가 생략됩니다.
| parameter | type | description |
|---|---|---|
direction | Creep|number | 근처의 크립이거나, 아래 상수 중 하나입니다:
|
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_NOT_IN_RANGE | -9 | 대상 크립이 너무 멀리 있습니다 |
ERR_INVALID_ARGS | -10 | 제공된 방향이 올바르지 않습니다. |
ERR_TIRED | -11 | 크립의 피로도(fatigue) 값이 0이 아닙니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 MOVE 바디 파트가 없습니다. |
const path = spawn.room.findPath(spawn, source);
creep.moveByPath(path);if(!creep.memory.path) {
creep.memory.path = creep.pos.findPathTo(target);
}
creep.moveByPath(creep.memory.path);지정한 미리 계산된 경로를 사용해 크립을 이동시킵니다. MOVE 바디 파트가 필요합니다.
| parameter | type | description |
|---|---|---|
path | array|string |
|
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_NOT_FOUND | -5 | 지정한 경로가 크립의 현재 위치와 맞지 않습니다. |
ERR_INVALID_ARGS | -10 |
|
ERR_TIRED | -11 | 크립의 피로도(fatigue) 값이 0이 아닙니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 |
creep.moveTo(10, 20);creep.moveTo(Game.flags.Flag1);creep.moveTo(new RoomPosition(25, 20, 'W10N5'));creep.moveTo(pos, {reusePath: 50});// Execute moves by cached paths at first
for(const name in Game.creeps) {
Game.creeps[name].moveTo(target, {noPathFinding: true});
}
// Perform pathfinding only if we have enough CPU
if(Game.cpu.tickLimit - Game.cpu.getUsed() > 20) {
for(const name in Game.creeps) {
Game.creeps[name].moveTo(target);
}
}같은 방 안에서 대상까지의 최적 경로를 찾아 이동합니다. pos.findPathTo()와 move()를 연속으로 호출하는 단축형입니다. 대상이 다른 방에 있다면, 해당 방으로 향하는 적절한 출구가 목표로 사용됩니다. MOVE 바디 파트가 필요합니다.
| parameter | type | description |
|---|---|---|
x | number | 같은 방 내에서의 목표 X 좌표입니다. |
y | number | 같은 방 내에서의 목표 Y 좌표입니다. |
target | object | RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다. 위치는 크립과 같은 방에 있을 필요가 없습니다. |
optsoptional | object | 다음 추가 옵션을 포함하는 객체입니다:
|
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_NO_PATH | -2 | 대상까지의 경로를 찾을 수 없습니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_NOT_FOUND | -5 | 크립에 재사용할 메모리 경로가 없습니다. |
ERR_INVALID_TARGET | -7 | 제공된 대상이 올바르지 않습니다. |
ERR_TIRED | -11 | 크립의 피로도(fatigue) 값이 0이 아닙니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 MOVE 바디 파트가 없습니다. |
if(creep.memory.role == 'scout') {
creep.notifyWhenAttacked(false);
}
else {
creep.notifyWhenAttacked(true);
}크립이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_INVALID_ARGS | -10 |
|
const target = creep.pos.findClosestByRange(FIND_DROPPED_RESOURCES);
if(target) {
if(creep.pickup(target) == ERR_NOT_IN_RANGE) {
creep.moveTo(target);
}
}
아이템(바닥에 떨어진 에너지 조각)을 줍습니다. CARRY 바디 파트가 필요합니다. 대상은 크립과 같은 칸 또는 인접한 칸에 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | Resource | 줍는 대상 객체입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_INVALID_TARGET | -7 | 대상이 줍기 가능한 올바른 객체가 아닙니다. |
ERR_FULL | -8 | 크립이 더 이상 자원을 받을 수 없습니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
creep1.move(TOP);
creep1.pull(creep2);
creep2.move(creep1);const target = creep.pos.findClosestByRange(FIND_MY_CREEPS, {
filter: function(object) {
return (object.getActiveBodyparts(MOVE) == 0) &&
object.memory.destinationId &&
!object.pos.isNearTo(Game.getObjectById(object.memory.destinationId));
}
});
if(target) {
if(creep.pull(target) == ERR_NOT_IN_RANGE) {
creep.moveTo(target);
} else {
target.move(creep);
if(creep.pos.isNearTo(Game.getObjectById(target.memory.destinationId))) {
creep.move(creep.pos.getDirectionTo(target));
} else {
creep.moveTo(Game.getObjectById(target.memory.destinationId));
}
}
}다른 크립이 이 크립을 따라오도록 도와줍니다. 대상 크립의 이동으로 생성되는 피로도는 대상이 아니라 이 크립에 추가됩니다. MOVE 바디 파트가 필요합니다. 대상은 크립과 인접한 칸에 있어야 합니다. 이 크립은 다른 곳으로 이동해야 하고, 대상은 이 크립을 향해 이동해야 합니다.
| parameter | type | description |
|---|---|---|
target | Creep | 대상 크립입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_INVALID_TARGET | -7 | 제공된 대상이 올바르지 않습니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
const targets = creep.pos.findInRange(FIND_HOSTILE_CREEPS, 3);
if(targets.length > 0) {
creep.rangedAttack(targets[0]);
}
다른 크립 또는 구조물에 원거리 공격을 수행합니다. RANGED_ATTACK 바디 파트가 필요합니다. 대상이 램파트 안에 있으면, 대신 램파트가 공격됩니다. 대상은 크립으로부터 3칸 이내에 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | Creep, PowerCreep, Structure | 공격할 대상 객체입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_INVALID_TARGET | -7 | 대상이 공격 가능한 올바른 객체가 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 |
const target = creep.pos.findClosestByRange(FIND_MY_CREEPS, {
filter: function(object) {
return object.hits < object.hitsMax;
}
});
if(target) {
creep.moveTo(target);
if(creep.pos.isNearTo(target)) {
creep.heal(target);
}
else {
creep.rangedHeal(target);
}
}거리에서 다른 크립을 치유합니다. 대상 크립의 손상된 바디 파트 기능을 복구하고 hits 카운터를 증가시킵니다. HEAL 바디 파트가 필요합니다. 대상은 크립으로부터 3칸 이내에 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | Creep, PowerCreep | 대상 크립 객체입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_INVALID_TARGET | -7 | 대상이 올바른 크립 객체가 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 |
const targets = creep.pos.findInRange(FIND_HOSTILE_CREEPS, 3);
if(targets.length > 0) {
creep.rangedMassAttack();
}반경 3칸 내의 모든 적 크립 또는 구조물을 원거리 광역 공격합니다. RANGED_ATTACK 바디 파트가 필요합니다. 공격력은 각 대상까지의 거리에 따라 달라집니다. 아군 유닛은 영향을 받지 않습니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 |
const targets = creep.room.find(FIND_STRUCTURES, {
filter: object => object.hits < object.hitsMax
});
targets.sort((a,b) => a.hits - b.hits);
if(targets.length > 0) {
if(creep.repair(targets[0]) == ERR_NOT_IN_RANGE) {
creep.moveTo(targets[0]);
}
}운반 중인 에너지를 사용해 손상된 구조물을 수리합니다. WORK 및 CARRY 바디 파트가 필요합니다. 대상은 크립으로부터 3칸 이내에 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | Structure | 수리할 대상 구조물입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 크립이 운반 중인 에너지가 없습니다. |
ERR_INVALID_TARGET | -7 | 대상이 올바른 구조물 객체가 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 |
if(creep.room.controller) {
if(creep.reserveController(creep.room.controller) == ERR_NOT_IN_RANGE) {
creep.moveTo(creep.room.controller);
}
}
다른 플레이어가 중립 컨트롤러를 점유(claim)하지 못하도록 일시적으로 차단하고, 에너지 소스를 최대 용량으로 복구합니다. 매 틱마다 이 명령은 컨트롤러가 사용 불가(점유 불가)한 기간 카운터를 CLAIM 바디 파트당 1틱씩 증가시킵니다. 유지할 수 있는 최대 예약 기간은 5,000틱입니다. 대상은 크립과 인접한 칸에 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | StructureController | 예약할 대상 컨트롤러 객체입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_INVALID_TARGET | -7 | 대상이 올바른 중립 컨트롤러 객체가 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 |
const hostiles = creep.pos.findInRange(FIND_HOSTILE_CREEPS, 10);
if(hostiles.length > 0) {
creep.say('OMG!😨');
creep.moveTo(Game.spawns['Spawn1']);
}
else {
doWork(creep);
}지정한 메시지를 크립 위에 말풍선으로 표시합니다. 메시지는 1틱 동안만 유지됩니다. 마지막 메시지는 saying 속성으로 읽을 수 있습니다. 이모지를 포함해, 유효한 모든 유니코드 문자를 사용할 수 있습니다.
| parameter | type | description |
|---|---|---|
message | string | 표시할 메시지입니다. 최대 길이는 10자입니다. |
publicoptional | boolean | true로 설정하면 다른 플레이어도 이 메시지를 볼 수 있습니다. 기본값은 false입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
if(creep.room.controller) {
if(creep.signController(creep.room.controller, "I'm going to claim this room in a few days. I warned ya!") == ERR_NOT_IN_RANGE) {
creep.moveTo(creep.room.controller);
}
}
모든 플레이어에게 보이는 임의의 텍스트로 컨트롤러에 서명(sign)합니다. 이 텍스트는 방 UI와 월드 맵에 표시되며, API로도 접근할 수 있습니다. 소유되지 않은 컨트롤러와 적 컨트롤러에도 서명할 수 있습니다. 대상은 크립과 인접한 칸에 있어야 합니다. 빈 문자열을 전달하면 서명을 제거합니다.
| parameter | type | description |
|---|---|---|
target | StructureController | 서명할 대상 컨트롤러 객체입니다. |
text | string | 서명 텍스트입니다. 문자열은 100자 이후 잘립니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_INVALID_TARGET | -7 | 대상이 올바른 컨트롤러 객체가 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
크립을 즉시 자살시킵니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
if(creep.transfer(storage, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
creep.moveTo(storage);
}// transfer all resources
for(const resourceType in creep.carry) {
creep.transfer(storage, resourceType);
}크립에서 다른 객체로 자원을 옮깁니다. 대상은 크립과 인접한 칸에 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | Creep, PowerCreep, Structure | 대상 객체입니다. |
resourceType | string |
|
amountoptional | number | 옮길 자원 수량입니다. 생략하면 들고 있는 모든 수량을 사용합니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 크립에 지정한 양의 자원이 없습니다. |
ERR_INVALID_TARGET | -7 | 대상이 해당 자원을 담을 수 있는 올바른 객체가 아닙니다. |
ERR_FULL | -8 | 대상이 더 이상 자원을 받을 수 없습니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_INVALID_ARGS | -10 | resourceType이 |
if(creep.room.controller) {
if(creep.upgradeController(creep.room.controller) == ERR_NOT_IN_RANGE) {
creep.moveTo(creep.room.controller);
}
}
운반 중인 에너지를 사용해 내 컨트롤러를 다음 레벨로 업그레이드합니다. 컨트롤러 업그레이드는 동시에 글로벌 컨트롤 레벨(GCL)도 증가시킵니다. WORK 및 CARRY 바디 파트가 필요합니다. 대상은 크립으로부터 3칸 이내에 있어야 합니다.
완전히 업그레이드된 레벨 8 컨트롤러는, 크립 능력과 무관하게 틱당 15 에너지 유닛을 초과하여 업그레이드할 수 없습니다. 현재 틱에 upgradeController를 수행한 모든 크립의 누적 효과가 고려됩니다. 이 제한은 ghodium 미네랄 부스트를 사용해 늘릴 수 있습니다.
컨트롤러를 업그레이드하면 ticksToDowngrade 타이머가 100 증가합니다. 컨트롤러가 레벨업하려면 이 타이머가 가득 차 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | StructureController | 업그레이드할 대상 컨트롤러 객체입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립 또는 대상 컨트롤러의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 크립이 운반 중인 에너지가 없습니다. |
ERR_INVALID_TARGET | -7 | 대상이 올바른 컨트롤러 객체가 아니거나, 컨트롤러 업그레이드가 차단되어 있습니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_NO_BODYPART | -12 | 이 크립의 바디에 |
if(creep.withdraw(storage, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
creep.moveTo(storage);
}구조물 또는 톰스톤에서 자원을 꺼냅니다. 대상은 크립과 인접한 칸에 있어야 합니다. 같은 틱에 여러 크립이 같은 객체에서 withdraw할 수 있습니다. 또한 대상 위에 적 램파트가 없는 경우, 내 크립은 적 구조물/톰스톤에서도 자원을 꺼낼 수 있습니다.
이 메서드는 크립 사이의 자원 이동에 사용하면 안 됩니다. 크립 간 이동은 원래 크립에서 transfer 메서드를 사용하세요.
| parameter | type | description |
|---|---|---|
target | Structure, Tombstone, Ruin | 대상 객체입니다. |
resourceType | string |
|
amountoptional | number | 옮길 자원 수량입니다. 생략하면 가능한 모든 수량을 사용합니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아니거나, 대상 위에 적 램파트가 있습니다. |
ERR_BUSY | -4 | 크립이 아직 생성(spawning) 중입니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 대상에 지정한 양의 자원이 없습니다. |
ERR_INVALID_TARGET | -7 | 대상이 해당 자원을 담을 수 있는 올바른 객체가 아닙니다. |
ERR_FULL | -8 | 크립의 적재량이 가득 찼습니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_INVALID_ARGS | -10 | resourceType이 |

상품(commodities) 생산에 필요한 희귀 자원 매장지입니다. WORK 바디 파트를 가진 크립이 채집할 수 있습니다.
각 채집은 쿨다운을 발생시키며, 시간이 지날수록 쿨다운이 점점 길어집니다.
Deposit에 대해서는 이 문서에서 더 알아보세요.
| Cooldown | 0.001 * totalHarvested ^ 1.2 | |
| Decay | 등장 또는 마지막 채집 이후 50,000틱 |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
다음 harvest 액션이 가능해질 때까지 남은 게임 틱 수입니다.
Deposit 타입입니다. 아래 상수 중 하나입니다:
RESOURCE_MIST
RESOURCE_BIOMASS
RESOURCE_METAL
RESOURCE_SILICON고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.
이 Deposit에 대한 마지막 채집의 쿨다운입니다.
이 Deposit이 사라질 때까지 남은 게임 틱 수입니다.
깃발입니다. 깃발은 룸 안의 특정 지점을 표시(mark)하는 데 사용할 수 있습니다. 깃발은 소유자에게만 보입니다. 깃발은 최대 10,000개까지 가질 수 있습니다.
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
깃발의 기본(Primary) 색상입니다. COLOR_* 상수 중 하나입니다.
Memory.flags[flag.name]의 축약(shorthand)입니다. 깃발별 메모리 데이터 오브젝트에 빠르게 접근하는 데 사용할 수 있습니다.
깃발의 이름입니다. 새 깃발을 만들 때 이름을 정할 수 있으며, 이후 변경할 수 없습니다. 이 이름은 Game.flags 오브젝트를 통해 깃발에 접근하기 위한 해시 키입니다. 최대 길이는 100자입니다.
깃발의 보조(Secondary) 색상입니다. COLOR_* 상수 중 하나입니다.
깃발을 제거합니다.
항상 OK를 반환합니다.
Game.flags.Flag1.setColor(COLOR_GREEN, COLOR_WHITE);깃발의 새 색상을 설정합니다.
| parameter | type | description |
|---|---|---|
color | number | 깃발의 기본 색상. |
secondaryColoroptional | number | 깃발의 보조 색상. |
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_INVALID_ARGS | -10 |
|
Game.flags.Flag1.setPosition(10,20);Game.flags.Flag1.setPosition( new RoomPosition(10, 20, 'W3S5') );깃발의 새 위치를 설정합니다.
| parameter | type | description |
|---|---|---|
x | number | 룸 내 X 좌표. |
y | number | 룸 내 Y 좌표. |
pos | object | RoomPosition 오브젝트 또는 RoomPosition을 포함하는 어떤 오브젝트. |
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_INVALID_TARGET | -7 | 제공한 대상이 유효하지 않습니다. |
미네랄 매장지입니다. extractor 구조물을 사용해 WORK 바디 파트를 가진 크립이 채굴할 수 있습니다.
미네랄에 대해서는 이 문서에서 더 알아보세요.
| Regeneration amount | DENSITY_LOW: 15,000 DENSITY_MODERATE: 35,000DENSITY_HIGH: 70,000 DENSITY_ULTRA: 100,000 |
| Regeneration time | 50,000 ticks |
| Density change probability | DENSITY_LOW: 100% chance DENSITY_MODERATE: 5% chanceDENSITY_HIGH: 5% chance DENSITY_ULTRA: 100% chance |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
ticksToRegeneration이 0이 되었을 때 이 미네랄 매장지가 어느 density로 리필될지 나타냅니다. DENSITY_* 상수 중 하나입니다.
남아 있는 자원 양입니다.
자원 타입입니다. RESOURCE_* 상수 중 하나입니다.
고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.
매장지가 다시 리필될 때까지 남은 시간입니다.
핵이 착탄하는 위치입니다. 이 오브젝트는 제거하거나 수정할 수 없습니다. FIND_NUKES 상수로 룸에서 들어오는 핵을 찾을 수 있습니다.
| Landing time | 50,000 ticks |
| Effect | 룸 내의 모든 크립, 건설 사이트, 드랍된 자원이 즉시 제거됩니다(램파트 내부도 포함). 구조물 피해:
서로 다른 룸에서 여러 핵을 같은 목표 위치에 겹쳐 발사하여 피해를 늘릴 수 있다는 점에 유의하세요. 핵 착탄은 tombstone과 ruin을 생성하지 않으며, 룸에 존재하는 모든 tombstone과 ruin을 파괴합니다. 룸이 세이프 모드인 경우, 세이프 모드는 즉시 해제되며 세이프 모드 쿨다운은 0으로 리셋됩니다. 룸 컨트롤러는 |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.
이 핵이 발사된 룸 이름입니다.
남은 착탄 시간입니다.
소유자(owner)가 있는 구조물의 기본 프로토타입입니다.
이런 구조물은 FIND_MY_STRUCTURES 및 FIND_HOSTILE_STRUCTURES 상수로 찾을 수 있습니다.
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 여러분의 구조물인지 여부입니다.
구조물 소유자 정보를 담은 오브젝트입니다. 다음 프로퍼티를 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름. |
커스텀 네비게이션 비용 데이터를 담는 컨테이너입니다. 기본적으로 PathFinder는
지형 정보(plain, swamp, wall)만 고려합니다. 건물이나 크립 같은 장애물을 피해서 경로를 잡고 싶다면
그 정보를 CostMatrix에 넣어야 합니다. 일반적으로 roomCallback 안에서 CostMatrix를 생성합니다.
룸의 CostMatrix에서 0이 아닌 값이 발견되면, 기본 지형 비용 대신 그 값이 사용됩니다.
CostMatrix와 지형 비용 플래그에는 너무 큰 값을 사용하는 것을 피하세요. 예를 들어
{ plainCost: 1, swampCost: 5 }로 PathFinder.search를 실행하는 것이,
경로가 동일하더라도 {plainCost: 2, swampCost: 10 }으로 실행하는 것보다 더 빠릅니다.
let costs = new PathFinder.CostMatrix;모든 좌표가 0인 새 CostMatrix를 생성합니다.
let costs = new PathFinder.CostMatrix;
let pos = Game.spawns['Spawn1'].pos;
costs.set(pos.x, pos.y, 255); // Can't walk over a building이 CostMatrix에서 특정 좌표의 비용을 설정합니다.
| parameter | type | description |
|---|---|---|
x | number | 룸 내 X 좌표. |
y | number | 룸 내 Y 좌표. |
cost | number | 이 좌표의 비용. 정수여야 합니다. 0이면 해당 타일의 지형 비용을 사용합니다. 255 이상이면 통행 불가(unwalkable)로 취급됩니다. |
이 CostMatrix에서 특정 좌표의 비용을 가져옵니다.
| parameter | type | description |
|---|---|---|
x | number | 룸 내 X 좌표. |
y | number | 룸 내 Y 좌표. |
이 CostMatrix를 동일한 데이터로 새 CostMatrix에 복사합니다.
새 CostMatrix 인스턴스.
let costs = new PathFinder.CostMatrix;
Memory.savedMatrix = costs.serialize();JSON.stringify로 저장할 수 있는, 이 CostMatrix의 컴팩트 표현을 반환합니다.
숫자 배열입니다. 보통은 나중에 사용하기 위해 저장하는 것 외에는 할 수 있는 일이 많지 않습니다.
let costs = PathFinder.CostMatrix.deserialize(Memory.savedMatrix)serialize의 반환값을 사용해 새 CostMatrix를 역직렬화(deserialize)하는 정적 메서드입니다.
| parameter | type | description |
|---|---|---|
val | object |
|
새 CostMatrix 인스턴스를 반환합니다.
파워 크립(Power Creeps)은 계정에 귀속된 불멸의 “영웅” 유닛이며, 죽은 뒤에도 어떤 PowerSpawn에서든 다시 리스폰할 수 있습니다.
능력(“powers”)은 계정의 글로벌 파워 레벨까지 업그레이드할 수 있습니다(Game.gpl 참고).
| 수명(Time to live) | 5,000 |
| 체력(Hits) | 레벨당 1,000 |
| 용량(Capacity) | 레벨당 100 |
PowerCreep.create('PowerCreep1', POWER_CLASS.OPERATOR);계정에 새 파워 크립 인스턴스를 생성하는 정적(static) 메서드입니다. 생성된 파워 크립은 스폰되지 않은 상태로 추가되며,
월드에 배치하려면 spawn 메서드를 사용하세요.
이 작업을 수행하려면 계정에 사용 가능한 Power Level이 1개 있어야 합니다.
| parameter | type | description |
|---|---|---|
name | string | 새 파워 크립의 이름입니다. 이름 길이 제한은 100자입니다. |
className | string | 새 파워 크립의 클래스이며, |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NAME_EXISTS | -3 | 지정한 이름의 파워 크립이 이미 존재합니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 계정에 사용 가능한 Power Level이 없습니다. |
ERR_INVALID_ARGS | -10 | 제공된 파워 크립 이름이 제한을 초과했거나, 파워 크립 클래스가 올바르지 않습니다. |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
This property is deprecated and will be removed soon.
PowerCreep.store의 별칭입니다.
This property is deprecated and will be removed soon.
PowerCreep.store.getCapacity()의 별칭입니다.
파워 크립의 클래스이며, POWER_CLASS 상수 중 하나입니다.
이 크립이 계정에서 영구 삭제 대상으로 표시된 시각(타임스탬프)입니다. 그렇지 않으면 undefined입니다.
크립의 현재 체력입니다.
크립의 최대 체력입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
파워 크립의 레벨입니다.
creep.memory.task = 'building';Memory.powerCreeps[creep.name]의 단축 접근자입니다. 크립별 메모리 데이터 객체에 빠르게 접근할 때 사용할 수 있습니다. 메모리에 대해 더 알아보기
내 크립인지, 적(상대) 크립인지 여부입니다.
파워 크립의 이름입니다. 새 파워 크립을 생성할 때 이름을 정하며, 이후에는 변경할 수 없습니다. 이 이름은 Game.powerCreeps 객체에서 크립에 접근하기 위한 해시 키입니다.
크립 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
if(creep.store[RESOURCE_ENERGY] < creep.store.getCapacity()) {
goHarvest(creep);
}이 크립의 화물(저장량)을 담고 있는 Store 객체입니다.
사용 가능한 파워 목록입니다. 파워 ID를 키로 하는 객체이며, 각 항목은 다음 속성을 가집니다:
| parameter | type | description |
|---|---|---|
level | number | 파워의 현재 레벨입니다. |
cooldown | number | 남은 쿨다운 틱 수이며, 파워 크립이 월드에 스폰되어 있지 않으면 undefined입니다. |
마지막 틱에 크립이 말한 텍스트입니다.
파워 크립이 스폰된 샤드의 이름이며, 스폰되어 있지 않으면 undefined입니다.
if(!(Game.powerCreeps['PowerCreep1'].spawnCooldownTime > Date.now())) {
Game.powerCreeps['PowerCreep1'].spawn(powerSpawn);
}이 크립을 스폰하거나 삭제할 수 있게 되는 시각(타임스탬프)입니다. 파워 크립이 월드에 스폰되어 있으면 undefined입니다.
크립이 죽고 스폰되지 않은 상태가 되기까지 남은 게임 틱 수입니다. 크립이 월드에 스폰되어 있지 않으면 undefined입니다.
creep.move(LEFT);
creep.cancelOrder('move');
//The creep will not move in this game tick현재 게임 틱에서 내린 명령(order)을 취소합니다.
| parameter | type | description |
|---|---|---|
methodName | string | 취소할 크립 메서드의 이름입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 취소되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 파워 크립이 월드에 스폰되어 있지 않습니다. |
ERR_NOT_FOUND | -5 | 지정한 이름의 명령(order)을 찾을 수 없습니다. |
Game.powerCreeps['PowerCreep1'].delete();계정에서 파워 크립을 영구적으로 삭제합니다. 크립은 월드에 스폰되어 있으면 안 됩니다. 삭제는 즉시 이루어지지 않고,
대신 24시간 삭제 타이머가 시작됩니다(deleteTime 참고). delete(true)를 호출하면 삭제를 취소할 수 있습니다.
| parameter | type | description |
|---|---|---|
cancel | boolean | true로 설정하면 이전에 예약된 삭제를 취소합니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 파워 크립이 월드에 스폰되어 있습니다. |
creep.drop(RESOURCE_ENERGY);// drop all resources
for(const resourceType in creep.carry) {
creep.drop(resourceType);
}이 자원을 바닥에 떨어뜨립니다.
| parameter | type | description |
|---|---|---|
resourceType | string |
|
amountoptional | number | 떨어뜨릴 자원 수량입니다. 생략하면 들고 있는 모든 수량을 사용합니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 파워 크립이 월드에 스폰되어 있지 않습니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 크립에 지정한 양의 에너지가 없습니다. |
ERR_INVALID_ARGS | -10 | resourceType이 올바른 |
Game.powerCreeps['PowerCreep1'].usePower(PWR_GENERATE_OPS);powerCreep.enableRoom(powerCreep.room.controller);이 방에서 파워 사용을 활성화합니다. 방 컨트롤러는 인접 타일에 있어야 합니다.
| parameter | type | description |
|---|---|---|
controller | StructureController | 방 컨트롤러입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_INVALID_TARGET | -7 | 대상이 컨트롤러 구조물이 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
creep.move(RIGHT);const path = creep.pos.findPathTo(Game.flags.Flag1);
if(path.length > 0) {
creep.move(path[0].direction);
}creep1.move(TOP);
creep1.pull(creep2);
creep2.move(creep1);지정한 방향으로 크립을 1칸 이동시킵니다.
| parameter | type | description |
|---|---|---|
direction | Creep|number | 근처의 크립이거나, 아래 상수 중 하나입니다:
|
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 파워 크립이 월드에 스폰되어 있지 않습니다. |
ERR_NOT_IN_RANGE | -9 | 대상 크립이 너무 멀리 있습니다 |
ERR_INVALID_ARGS | -10 | 제공된 방향이 올바르지 않습니다. |
ERR_TIRED | -11 | 크립의 피로도(fatigue) 값이 0이 아닙니다. |
const path = spawn.room.findPath(spawn, source);
creep.moveByPath(path);if(!creep.memory.path) {
creep.memory.path = creep.pos.findPathTo(target);
}
creep.moveByPath(creep.memory.path);지정한 미리 계산된 경로를 사용해 크립을 이동시킵니다.
| parameter | type | description |
|---|---|---|
path | array|string |
|
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 파워 크립이 월드에 스폰되어 있지 않습니다. |
ERR_NOT_FOUND | -5 | 지정한 경로가 크립의 현재 위치와 맞지 않습니다. |
ERR_INVALID_ARGS | -10 |
|
ERR_TIRED | -11 | 크립의 피로도(fatigue) 값이 0이 아닙니다. |
creep.moveTo(10, 20);creep.moveTo(Game.flags.Flag1);creep.moveTo(new RoomPosition(25, 20, 'W10N5'));creep.moveTo(pos, {reusePath: 50});// Execute moves by cached paths at first
for(const name in Game.creeps) {
Game.creeps[name].moveTo(target, {noPathFinding: true});
}
// Perform pathfinding only if we have enough CPU
if(Game.cpu.tickLimit - Game.cpu.getUsed() > 20) {
for(const name in Game.creeps) {
Game.creeps[name].moveTo(target);
}
}같은 방 안에서 대상까지의 최적 경로를 찾아 이동합니다. pos.findPathTo()와 move()를 연속으로 호출하는 단축형입니다. 대상이 다른 방에 있다면, 해당 방으로 향하는 적절한 출구가 목표로 사용됩니다.
| parameter | type | description |
|---|---|---|
x | number | 같은 방 내에서의 목표 X 좌표입니다. |
y | number | 같은 방 내에서의 목표 Y 좌표입니다. |
target | object | RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다. 위치는 크립과 같은 방에 있을 필요가 없습니다. |
optsoptional | object | 다음 추가 옵션을 포함하는 객체입니다:
|
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_NO_PATH | -2 | 대상까지의 경로를 찾을 수 없습니다. |
ERR_BUSY | -4 | 파워 크립이 월드에 스폰되어 있지 않습니다. |
ERR_NOT_FOUND | -5 | 재사용할 메모리 경로가 없습니다. |
ERR_INVALID_TARGET | -7 | 제공된 대상이 올바르지 않습니다. |
ERR_TIRED | -11 | 크립의 피로도(fatigue) 값이 0이 아닙니다. |
Game.powerCreeps['PC1'].notifyWhenAttacked(true);크립이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 파워 크립이 월드에 스폰되어 있지 않습니다. |
ERR_INVALID_ARGS | -10 |
|
const target = creep.pos.findClosestByRange(FIND_DROPPED_RESOURCES);
if(target) {
if(creep.pickup(target) == ERR_NOT_IN_RANGE) {
creep.moveTo(target);
}
}
아이템(바닥에 떨어진 에너지 조각)을 줍습니다. 대상은 크립과 같은 칸 또는 인접한 칸에 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | Resource | 줍는 대상 객체입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 파워 크립이 월드에 스폰되어 있지 않습니다. |
ERR_INVALID_TARGET | -7 | 대상이 줍기 가능한 올바른 객체가 아닙니다. |
ERR_FULL | -8 | 크립이 더 이상 자원을 받을 수 없습니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
Game.powerCreeps['PC1'].rename('PC1X');파워 크립의 이름을 변경합니다. 크립은 월드에 스폰되어 있으면 안 됩니다.
| parameter | type | description |
|---|---|---|
name | string | 파워 크립의 새 이름입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_NAME_EXISTS | -3 | 지정한 이름의 파워 크립이 이미 존재합니다. |
ERR_BUSY | -4 | 파워 크립이 월드에 스폰되어 있습니다. |
let powerBank = Game.getObjectById('XXX');
Game.powerCreeps['PowerCreep1'].renew(powerBank);
근처의 파워 스폰 또는 파워 뱅크를 사용해 수명(Time to live)을 즉시 최대치로 복구합니다. 대상은 인접 타일에 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | StructurePowerBank | StructurePowerSpawn | 대상 구조물입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 파워 크립이 월드에 스폰되어 있지 않습니다. |
ERR_INVALID_TARGET | -7 | 대상이 올바른 파워 뱅크/파워 스폰 객체가 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
const hostiles = creep.pos.findInRange(FIND_HOSTILE_CREEPS, 10);
if(hostiles.length > 0) {
creep.say('OMG!😨');
creep.moveTo(Game.spawns['Spawn1']);
}
else {
doWork(creep);
}지정한 메시지를 크립 위에 말풍선으로 표시합니다. 메시지는 1틱 동안만 유지됩니다. 마지막 메시지는 saying 속성으로 읽을 수 있습니다. 이모지를 포함해, 유효한 모든 유니코드 문자를 사용할 수 있습니다.
| parameter | type | description |
|---|---|---|
message | string | 표시할 메시지입니다. 최대 길이는 10자입니다. |
publicoptional | boolean | true로 설정하면 다른 플레이어도 이 메시지를 볼 수 있습니다. 기본값은 false입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 파워 크립이 월드에 스폰되어 있지 않습니다. |
Game.powerCreeps['PowerCreep1'].spawn(Game.getObjectById('XXX'));지정한 파워 스폰(Power Spawn)에 이 파워 크립을 스폰합니다.
| parameter | type | description |
|---|---|---|
powerSpawn | StructurePowerSpawn | 내 Power Spawn 구조물입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 크립 또는 스폰의 소유자가 아닙니다. |
ERR_BUSY | -4 | 파워 크립이 이미 월드에 스폰되어 있습니다. |
ERR_INVALID_TARGET | -7 | 지정한 객체가 Power Spawn이 아닙니다. |
ERR_TIRED | -11 | 쿨다운 때문에 파워 크립을 스폰할 수 없습니다. |
ERR_RCL_NOT_ENOUGH | -14 | 스폰을 사용하기에 방 컨트롤러 레벨이 부족합니다. |
파워 크립을 즉시 자살시킵니다. 영구적으로 파괴되지는 않으며, 스폰되지 않은 상태가 되어
다시 spawn할 수 있습니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 파워 크립이 월드에 스폰되어 있지 않습니다. |
if(creep.transfer(storage, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
creep.moveTo(storage);
}// transfer all resources
for(const resourceType in creep.carry) {
creep.transfer(storage, resourceType);
}크립에서 다른 객체로 자원을 옮깁니다. 대상은 크립과 인접한 칸에 있어야 합니다.
| parameter | type | description |
|---|---|---|
target | Creep, PowerCreep, Structure | 대상 객체입니다. |
resourceType | string |
|
amountoptional | number | 옮길 자원 수량입니다. 생략하면 들고 있는 모든 수량을 사용합니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 파워 크립이 월드에 스폰되어 있지 않습니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 크립에 지정한 양의 자원이 없습니다. |
ERR_INVALID_TARGET | -7 | 대상이 해당 자원을 담을 수 있는 올바른 객체가 아닙니다. |
ERR_FULL | -8 | 대상이 더 이상 자원을 받을 수 없습니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_INVALID_ARGS | -10 | resourceType이 |
Game.powerCreeps['PowerCreep1'].upgrade(PWR_GENERATE_OPS);크립을 업그레이드하여 새 파워 능력을 추가하거나 기존 파워의 레벨을 올립니다. 이 작업을 수행하려면 계정에 사용 가능한 Power Level이 1개 있어야 합니다.
| parameter | type | description |
|---|---|---|
power | number | 업그레이드할 파워 능력이며, |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 계정의 Power Level이 충분하지 않습니다. |
ERR_FULL | -8 | 이 크립 레벨에서는 지정한 파워를 업그레이드할 수 없거나, 크립이 최대 레벨에 도달했습니다. |
ERR_INVALID_ARGS | -10 | 지정한 파워 ID가 올바르지 않습니다. |
Game.powerCreeps['PowerCreep1'].usePower(PWR_GENERATE_OPS);Game.powerCreeps['PowerCreep1'].usePower(PWR_OPERATE_SPAWN, Game.spawns['Spawn1']);지정한 대상에 크립의 파워 중 하나를 적용합니다.
파워는 컨트롤러가 없거나, 컨트롤러가 파워 활성화된 방에서만 사용할 수 있습니다.
같은 틱에는 한 번에 하나의 파워만 사용할 수 있으며, usePower를 여러 번 호출하면 마지막 호출이 이전 호출을 덮어씁니다.
대상에 더 낮거나 같은 레벨의 동일 효과가 있으면 덮어쓰며, 기존 효과 레벨이 더 높으면 오류를 반환합니다.
| parameter | type | description |
|---|---|---|
power | number | 사용할 파워 능력이며, |
targetoptional | RoomObject | 방 안의 대상 객체입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 크립이 월드에 스폰되어 있지 않습니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 파워를 사용하기 위한 자원이 부족합니다. |
ERR_INVALID_TARGET | -7 | 지정한 대상이 올바르지 않습니다. |
ERR_FULL | -8 | 대상에 더 높은 레벨의 동일 효과가 이미 활성화되어 있습니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_INVALID_ARGS | -10 | 방 컨트롤러에서 파워 사용이 활성화되어 있지 않습니다. |
ERR_TIRED | -11 | 파워가 아직 쿨다운 중입니다. |
ERR_NO_BODYPART | -12 | 크립이 지정한 파워 능력을 가지고 있지 않습니다. |
if(creep.withdraw(storage, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
creep.moveTo(storage);
}구조물 또는 톰스톤에서 자원을 꺼냅니다. 대상은 크립과 인접한 칸에 있어야 합니다. 같은 틱에 여러 크립이 같은 객체에서 withdraw할 수 있습니다. 또한 대상 위에 적 램파트가 없는 경우, 내 크립은 적 구조물/톰스톤에서도 자원을 꺼낼 수 있습니다.
이 메서드는 크립 사이의 자원 이동에 사용하면 안 됩니다. 크립 간 이동은 원래 크립에서 transfer 메서드를 사용하세요.
| parameter | type | description |
|---|---|---|
target | Structure, Tombstone, Ruin | 대상 객체입니다. |
resourceType | string |
|
amountoptional | number | 옮길 자원 수량입니다. 생략하면 가능한 모든 수량을 사용합니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 크립의 소유자가 아니거나, 대상 위에 적 램파트가 있습니다. |
ERR_BUSY | -4 | 파워 크립이 월드에 스폰되어 있지 않습니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 대상에 지정한 양의 자원이 없습니다. |
ERR_INVALID_TARGET | -7 | 대상이 해당 자원을 담을 수 있는 올바른 객체가 아닙니다. |
ERR_FULL | -8 | 크립의 적재량이 가득 찼습니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멀리 있습니다. |
ERR_INVALID_ARGS | -10 | resourceType이 |
드랍된 자원 조각입니다. 줍지 않으면 시간이 지나 붕괴(decay)합니다.
드랍된 자원 더미는 틱마다 ceil(amount/1000)만큼 붕괴합니다.
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
담고 있는 자원 유닛 수입니다.
고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.
RESOURCE_* 상수 중 하나입니다.
내 유닛과 구조물이 존재하는 “방(Room)”을 나타내는 객체입니다.
주변을 살펴보고, 경로를 찾는 등 다양한 작업에 사용할 수 있습니다. 방 안의 모든 RoomObject는 room 속성으로
연결된 Room 인스턴스를 포함합니다.
이 방의 컨트롤러 구조물입니다. 존재하지 않으면 undefined입니다.
이 방의 모든 스폰과 익스텐션에 현재 사용 가능한 에너지 총량입니다.
이 방의 모든 스폰과 익스텐션의 energyCapacity 총합입니다.
room.memory.stage = 2;Memory.rooms[room.name]의 단축 접근자입니다. 방별 메모리 데이터 객체에 빠르게 접근할 때 사용할 수 있습니다. 메모리에 대해 더 알아보기
방 이름입니다.
이 방의 스토리지 구조물입니다. 존재하지 않으면 undefined입니다.
이 방의 터미널 구조물입니다. 존재하지 않으면 undefined입니다.
이 방에 대한 RoomVisual 객체입니다. 이 객체를 사용해 방 안에 간단한 도형(선, 원, 텍스트 라벨)을 그릴 수 있습니다.
const path = spawn.pos.findPathTo(source);
Memory.path = Room.serializePath(path);
creep.moveByPath(Memory.path);경로 배열을 메모리에 저장하기 적합한 짧은 문자열 표현으로 직렬화합니다.
| parameter | type | description |
|---|---|---|
path | array |
|
주어진 경로의 직렬화된 문자열 형태입니다.
const path = Room.deserializePath(Memory.path);
creep.moveByPath(path);짧은 문자열 경로 표현을 배열 형태로 역직렬화합니다.
| parameter | type | description |
|---|---|---|
path | string | 직렬화된 경로 문자열입니다. |
경로 배열입니다.
Game.rooms.sim.createConstructionSite(10, 15, STRUCTURE_ROAD);Game.rooms.sim.createConstructionSite(10, 15, STRUCTURE_SPAWN,
'MySpawn2');지정한 위치에 새 ConstructionSite를 생성합니다.
| parameter | type | description |
|---|---|---|
x | number | X 좌표입니다. |
y | number | Y 좌표입니다. |
pos | object | RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다. |
structureType | string |
|
nameoptional | string | 이름을 지원하는 구조물의 이름입니다(현재는 스폰만 해당). 이름 길이 제한은 100자입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 방이 적 플레이어에게 점유(claim) 또는 예약(reserve)되어 있습니다. |
ERR_INVALID_TARGET | -7 | 지정한 위치에 구조물을 배치할 수 없습니다. |
ERR_FULL | -8 | 건설 현장이 너무 많습니다. 플레이어당 최대 건설 현장 수는 100개입니다. |
ERR_INVALID_ARGS | -10 | 위치가 올바르지 않습니다. |
ERR_RCL_NOT_ENOUGH | -14 | 방 컨트롤러 레벨이 부족합니다. 자세히 보기 |
Game.rooms.sim.createFlag(5, 12, 'Flag1');지정한 위치에 새 Flag를 생성합니다.
| parameter | type | description |
|---|---|---|
x | number | X 좌표입니다. |
y | number | Y 좌표입니다. |
pos | object | RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다. |
nameoptional | string | 새 플래그의 이름입니다. 유일해야 하며, 즉 |
coloroptional | number | 새 플래그의 색상입니다. |
secondaryColoroptional | string | 새 플래그의 보조 색상입니다. |
새 플래그의 이름 또는 다음 오류 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
ERR_NAME_EXISTS | -3 | 같은 이름의 플래그가 이미 존재합니다. |
ERR_FULL | -8 | 플래그가 너무 많습니다. 플레이어당 최대 플래그 수는 10000개입니다. |
ERR_INVALID_ARGS | -10 | 위치 또는 이름 또는 색상 상수가 올바르지 않습니다. |
const targets = creep.room.find(FIND_DROPPED_RESOURCES);
if(targets.length) {
creep.moveTo(targets[0]);
creep.pickup(targets[0]);
}const extensions = Game.spawns['Spawn1'].room.find(FIND_MY_STRUCTURES, {
filter: { structureType: STRUCTURE_EXTENSION }
});
console.log('Spawn has '+extensions.length+' extensions available');const targets = creep.room.find(FIND_HOSTILE_CREEPS, {
filter: function(object) {
return object.getActiveBodyparts(ATTACK) == 0;
}
});방에서 지정한 타입의 모든 객체를 찾습니다. 사용자 정의 필터를 적용하기 전에, 해당 방과 타입에 대해 결과가 자동으로 캐시됩니다. 이 자동 캐시는 틱이 끝날 때까지 유지됩니다.
| parameter | type | description |
|---|---|---|
type | number |
|
optsoptional | object | 추가 옵션을 포함하는 객체입니다:
|
찾은 객체의 배열입니다.
| constant | type | description |
|---|---|---|
FIND_EXIT_TOP |
RoomPosition | 방의 위쪽에 있는 출구 위치만. |
FIND_EXIT_RIGHT |
RoomPosition | 방의 오른쪽에 있는 출구 위치만. |
FIND_EXIT_BOTTOM |
RoomPosition | 방의 아래쪽에 있는 출구 위치만. |
FIND_EXIT_LEFT |
RoomPosition | 방의 왼쪽에 있는 출구 위치만. |
FIND_EXIT |
RoomPosition | 모든 출구 위치. |
FIND_CREEPS |
Creep | 모든 크립. |
FIND_MY_CREEPS |
Creep | 내 소유의 크립만. |
FIND_HOSTILE_CREEPS |
Creep | 내 소유가 아닌 크립만. |
FIND_POWER_CREEPS |
PowerCreep | 모든 파워 크립. |
FIND_MY_POWER_CREEPS |
PowerCreep | 내 소유의 파워 크립만. |
FIND_HOSTILE_POWER_CREEPS |
PowerCreep | 내 소유가 아닌 파워 크립만. |
FIND_SOURCES_ACTIVE |
Source | 에너지가 남아있는 소스만. |
FIND_SOURCES |
Source | 모든 소스. |
FIND_DROPPED_RESOURCES |
Resource | 바닥에 떨어진 모든 자원. |
FIND_STRUCTURES |
Structure | 모든 구조물. |
FIND_MY_STRUCTURES |
Structure | 내 소유의 구조물만(중립 구조물은 포함하지 않음). |
FIND_HOSTILE_STRUCTURES |
Structure | 내 소유가 아닌 구조물만(중립 구조물은 포함하지 않음). |
FIND_FLAGS |
Flag | 모든 플래그 |
FIND_MY_SPAWNS |
StructureSpawn | 내 소유의 스폰만. |
FIND_HOSTILE_SPAWNS |
StructureSpawn | 내 소유가 아닌 스폰. |
FIND_CONSTRUCTION_SITES |
ConstructionSite | 모든 건설 현장. |
FIND_MY_CONSTRUCTION_SITES |
ConstructionSite | 내 소유의 건설 현장만. |
FIND_HOSTILE_CONSTRUCTION_SITES |
ConstructionSite | 내 소유가 아닌 건설 현장만. |
FIND_MINERALS |
Mineral | 모든 미네랄 매장지. |
FIND_NUKES |
Nuke | 발사된 모든 핵. |
FIND_TOMBSTONES |
Tombstone | 모든 톰스톤. |
FIND_RUINS |
Ruin | 모든 유적(ruin) |
const exitDir = creep.room.findExitTo(anotherCreep.room);
const exit = creep.pos.findClosestByRange(exitDir);
creep.moveTo(exit);
// or simply:
creep.moveTo(anotherCreep);
creep.moveTo(new RoomPosition(25,25, anotherCreep.pos.roomName));다른 방으로 가는 경로 상에서 출구 방향을 찾습니다. 다만 방 사이 이동을 위해 이 메서드가 반드시 필요한 것은 아닙니다. 다른 방에 있는 대상을 Creep.moveTo에 그대로 넘기면 됩니다.
| parameter | type | description |
|---|---|---|
room | string, Room | 다른 방의 이름 또는 Room 객체입니다. |
아래 방향 상수 중 하나를 반환합니다:
FIND_EXIT_TOPFIND_EXIT_RIGHTFIND_EXIT_BOTTOMFIND_EXIT_LEFT또는 아래 오류 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
ERR_NO_PATH | -2 | 경로를 찾을 수 없습니다. |
ERR_INVALID_ARGS | -10 | 위치 정보가 올바르지 않습니다. |
const path = creep.room.findPath(creep.pos, targetPos);
creep.move(path[0].direction);PathFinder.use(true);
const path = creep.room.findPath(creep.pos, targetPos, {
costCallback: function(roomName, costMatrix) {
if(roomName == 'W1N5') {
// set anotherCreep's location as walkable
costMatrix.set(anotherCreep.pos.x, anotherCreep.pos.y, 0);
// set flag location as an obstacle
costMatrix.set(flag.pos.x, flag.pos.y, 255);
// increase cost for (25,20) location to 50
costMatrix.set(25, 20, 50);
}
}
});
let path = creep.room.findPath(creep.pos, targetPos, {maxOps: 200});
if( !path.length || !targetPos.isEqualTo(path[path.length - 1]) ) {
path = creep.room.findPath(creep.pos, targetPos, {
maxOps: 1000, ignoreDestructibleStructures: true
});
}
if( path.length ) {
creep.move(path[0].direction);
}Jump Point Search 알고리즘을 사용해 방 안에서 fromPos부터 toPos까지의 최적 경로를 찾습니다.
| parameter | type | description |
|---|---|---|
fromPos | RoomPosition | 시작 위치입니다. |
toPos | RoomPosition | 끝 위치입니다. |
optsoptional | object | 추가 경로 탐색 플래그를 담고 있는 객체입니다:
|
아래 형식의 경로 스텝 배열을 반환합니다:
[
{ 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 },
...
]// track events performed by a particular creep
_.filter(creep.room.getEventLog(), {objectId: creep.id});// Find all hostile actions against your creeps and structures
_.forEach(Game.rooms, room => {
let eventLog = room.getEventLog();
let attackEvents = _.filter(eventLog, {event: EVENT_ATTACK});
attackEvents.forEach(event => {
let target = Game.getObjectById(event.data.targetId);
if(target && target.my) {
console.log(event);
}
});
});이 방에서 “이전 틱”에 발생한 이벤트 배열을 반환합니다.
| parameter | type | description |
|---|---|---|
rawoptional | boolean | 이 파라미터가 false 또는 undefined이면, 이 메서드는 |
이벤트 배열입니다. 각 이벤트는 아래 형식의 어떤 게임 액션을 나타냅니다:
{
event: EVENT_ATTACK,
objectId: '54bff72ab32a10f73a57d017',
data: { /* ... */ }
}data 속성은 아래 표에 따라 이벤트 타입별로 다릅니다:
| event | description |
|---|---|
EVENT_ATTACK |
크립 또는 구조물이 다른 객체를 공격했습니다.
|
EVENT_OBJECT_DESTROYED |
게임 오브젝트가 파괴되거나 사망했습니다.
|
EVENT_ATTACK_CONTROLLER |
크립이 이 방에서 attackController를 수행했습니다. |
EVENT_BUILD |
크립이 이 방에서 build를 수행했습니다.
|
EVENT_HARVEST |
크립이 이 방에서 harvest를 수행했습니다.
|
EVENT_HEAL |
크립 또는 타워가 크립을 치유했습니다.
|
EVENT_REPAIR |
크립 또는 타워가 구조물을 수리했습니다.
|
EVENT_RESERVE_CONTROLLER |
크립이 이 방에서 reserveController를 수행했습니다.
|
EVENT_UPGRADE_CONTROLLER |
크립이 이 방에서 upgradeController를 수행했습니다.
|
EVENT_EXIT |
크립이 다른 방으로 이동했습니다.
|
EVENT_TRANSFER |
링크가 transferEnergy를 수행했거나, 크립이 transfer 또는 withdraw를 수행했습니다.
|
EVENT_POWER |
크립의 파워 중 하나를 지정한 대상에 적용했습니다.
|
const pos = Game.rooms.sim.getPositionAt(5,12);
const source = pos.findClosestByRange(FIND_SOURCES_ACTIVE);지정한 위치에 RoomPosition 객체를 생성합니다.
| parameter | type | description |
|---|---|---|
x | number | X 좌표입니다. |
y | number | Y 좌표입니다. |
RoomPosition 객체를 반환하며, 얻을 수 없으면 null을 반환합니다.
const terrain = Game.rooms['W1N1'].getTerrain();
switch(terrain.get(10,15)) {
case TERRAIN_MASK_WALL:
break;
case TERRAIN_MASK_SWAMP:
break;
case 0:
break;
}정적 지형 데이터에 빠르게 접근할 수 있는 Room.Terrain 객체를 가져옵니다. 이 메서드는 내가 접근할 수 없는 방을 포함해, 월드의 어떤 방에도 동작합니다.
새 Room.Terrain 객체를 반환합니다.
const look = creep.room.lookAt(target);
look.forEach(function(lookObject) {
if(lookObject.type == LOOK_CREEPS &&
lookObject[LOOK_CREEPS].getActiveBodyparts(ATTACK) == 0) {
creep.moveTo(lookObject.creep);
}
});지정한 방 위치에 있는 객체 목록을 가져옵니다.
| parameter | type | description |
|---|---|---|
x | number | 방 내부의 X 좌표입니다. |
y | number | 방 내부의 Y 좌표입니다. |
target | object | RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다. |
아래 형식의, 해당 위치에 있는 객체 배열을 반환합니다:
[
{ type: 'creep', creep: {...} },
{ type: 'structure', structure: {...} },
...
{ type: 'terrain', terrain: 'swamp' }
]const look = creep.room.lookAtArea(10,5,11,7);지정한 방 영역(area)에 있는 객체 목록을 가져옵니다.
| parameter | type | description |
|---|---|---|
top | number | 영역의 위쪽 Y 경계입니다. |
left | number | 영역의 왼쪽 X 경계입니다. |
bottom | number | 영역의 아래쪽 Y 경계입니다. |
right | number | 영역의 오른쪽 X 경계입니다. |
asArrayoptional | boolean | true로 설정하면 결과를 평범한 배열 형태로 받습니다. |
asArray가 false 또는 undefined이면, 이 메서드는 아래 형식의 객체를 반환합니다(지정한 영역의 모든 객체 포함):
// 10,5,11,7
{
10: {
5: [{ type: 'creep', creep: {...} },
{ type: 'terrain', terrain: 'swamp' }],
6: [{ type: 'terrain', terrain: 'swamp' }],
7: [{ type: 'terrain', terrain: 'swamp' }]
},
11: {
5: [{ type: 'terrain', terrain: 'plain' }],
6: [{ type: 'structure', structure: {...} },
{ type: 'terrain', terrain: 'swamp' }],
7: [{ type: 'terrain', terrain: 'wall' }]
}
}asArray가 true이면, 아래 형식의 배열을 반환합니다:
[
{x: 5, y: 10, type: 'creep', creep: {...}},
{x: 5, y: 10, type: 'terrain', terrain: 'swamp'},
{x: 6, y: 10, type: 'terrain', terrain: 'swamp'},
{x: 7, y: 10, type: 'terrain', terrain: 'swamp'},
{x: 5, y: 11, type: 'terrain', terrain: 'plain'},
{x: 6, y: 11, type: 'structure', structure: {...}},
{x: 6, y: 11, type: 'terrain', terrain: 'swamp'},
{x: 7, y: 11, type: 'terrain', terrain: 'wall'}
]const found = creep.room.lookForAt(LOOK_CREEPS, target);
if(found.length && found[0].getActiveBodyparts(ATTACK) == 0) {
creep.moveTo(found[0]);
}지정한 방 위치에서, 주어진 타입의 객체를 가져옵니다.
| parameter | type | description |
|---|---|---|
type | string |
|
x | number | 방 내부의 X 좌표입니다. |
y | number | 방 내부의 Y 좌표입니다. |
target | object | RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다. |
찾았다면 지정한 타입의 객체 배열을 반환합니다.
const look = creep.room.lookForAtArea(LOOK_STRUCTURES,10,5,11,7);지정한 방 영역(area)에서, 주어진 타입의 객체 목록을 가져옵니다.
| parameter | type | description |
|---|---|---|
type | string |
|
top | number | 영역의 위쪽 Y 경계입니다. |
left | number | 영역의 왼쪽 X 경계입니다. |
bottom | number | 영역의 아래쪽 Y 경계입니다. |
right | number | 영역의 오른쪽 X 경계입니다. |
asArrayoptional | boolean | true로 설정하면 결과를 평범한 배열 형태로 받습니다. |
asArray가 false 또는 undefined이면, 이 메서드는 아래 형식의 객체를 반환합니다(지정한 영역의 주어진 타입 객체 포함):
// 10,5,11,7
{
10: {
5: [{...}],
6: undefined,
7: undefined
},
11: {
5: undefined,
6: [{...}, {...}],
7: undefined
}
}asArray가 true이면, 아래 형식의 배열을 반환합니다:
[
{x: 5, y: 10, structure: {...}},
{x: 6, y: 11, structure: {...}},
{x: 6, y: 11, structure: {...}}
]룸 지형 데이터에 빠르게 접근할 수 있게 해주는 오브젝트입니다. 이 오브젝트는 여러분이 접근 권한이 없는 룸에 대해서도 월드의 어떤 룸이든 생성할 수 있습니다.
기술적으로 모든 Room.Terrain 오브젝트는, 대응되는 최소 접근자(accessors)를 가진 정적 지형 버퍼 위에 있는 매우 가벼운 어댑터(adapter)입니다.
const terrain = new Room.Terrain("E2S7");const terrain = new Room.Terrain(Game.creeps.John.room.name);룸 이름으로 새 Terrain을 생성합니다. Terrain 오브젝트는 접근 권한이 없더라도 월드의 어떤 룸이든 생성할 수 있습니다.
| parameter | type | description |
|---|---|---|
roomName | string | 룸 이름. |
switch(terrain.get(10,15)) {
case TERRAIN_MASK_WALL:
break;
case TERRAIN_MASK_SWAMP:
break;
case 0:
break;
}const roomName = "E2S7";
const terrain = new Room.Terrain(roomName);
const matrix = new PathFinder.CostMatrix;
const visual = new RoomVisual(roomName);
// Fill CostMatrix with default terrain costs for future analysis:
for(let y = 0; y < 50; y++) {
for(let x = 0; x < 50; x++) {
const tile = terrain.get(x, y);
const weight =
tile === TERRAIN_MASK_WALL ? 255 : // wall => unwalkable
tile === TERRAIN_MASK_SWAMP ? 5 : // swamp => weight: 5
1 ; // plain => weight: 1
matrix.set(x, y, weight);
visual.text(weight, x, y);
}
}// bound to WASM module heap
const heapView = new Uint8Array(wasmModule.HEAPU8.buffer, ...);
const terrain = new Room.Terrain("E2S7");
// Copy terrain data to binary WASM module heap:
for(let y = 0; y < 50; y++) {
for(let x = 0; x < 50; x++) {
heapView[y * 50 + x] = terrain.get(x, y);
}
}(x,y) 좌표로 지정한 룸 위치의 지형 타입을 가져옵니다. Game.map.getTerrainAt(...)과 달리, 이 메서드는 문자열 연산을 수행하지 않으며 정수 지형 타입 값을 반환합니다(아래 참고).
| parameter | type | description |
|---|---|---|
x | number | 룸 내 X 좌표. |
y | number | 룸 내 Y 좌표. |
다음 정수 값 중 하나:
| value | constant (if exists) | description |
|---|---|---|
| 0 | doesn't exist | terrain is plain |
| 1 | TERRAIN_MASK_WALL |
terrain is wall |
| 2 | TERRAIN_MASK_SWAMP |
terrain is swamp |
function myPrintRawTerain(raw) {
const visual = new RoomVisual();
for(let y = 0; y < 50; y++) {
for(let x = 0; x < 50; x++) {
const code = raw[y * 50 + x];
const color =
(code & TERRAIN_MASK_WALL ) ? "gray" :
(code & TERRAIN_MASK_SWAMP) ? "green" : "white" ;
visual.circle(x, y, {fill: color, radius: 0.5});
}
}
}
const raw = (new Room.Terrain("E2S7")).getRawBuffer();
myPrintRawTerain(raw);// bound to WASM module heap
const heapView = new Uint8Array(wasmModule.HEAPU8.buffer, ...);
const terrain = new Room.Terrain("E2S7");
// Fast direct copy terrain data to binary WASM module heap:
const t = Game.cpu.getUsed();
const result = terrain.getRawBuffer(heapView);
if(result !== ERR_INVALID_ARGS) {
// Copy succeeded, call WASM functions here:
// wasmModule.myFunc(...); // modifies raw memory of "heapView"
console.log("Distance transform done in", Game.cpu.getUsed() - t);
myPrintRawTerain(heapView);
}// Somewhere inside binary module source code...
void myFunc(void* ptr) {
auto u8ptr = static_cast<uint8_t*>(ptr);
// computations here...
}기저의 정적 지형 버퍼 복사본을 가져옵니다. 현재 기저 표현은 Uint8Array입니다.
| parameter | type | description |
|---|---|---|
destinationArrayoptional | Uint8Array | 지형이 복사될 typed array view. |
경고: 이 메서드는 지형 데이터의 기저 표현에 의존합니다. 룸 전체(2500 타일)의 지형 데이터를 얻는 가장 빠른 방법이지만, 향후 언제든 deprecated될 수 있거나 반환 타입이 바뀔 수 있음을 염두에 두세요.
사용 예시를 참고하세요. 바이너리 모듈에 대해서도 참고할 수 있습니다.
크기 2500의 새 Uint8Array typed array로, 룸 지형 표현의 복사본을 반환합니다.
각 원소는 정수이며, 적절한 TERRAIN_MASK_* 상수로 비트 AND(&)를 적용해 지형 타입을 얻을 수 있습니다. 룸 타일은 행(row) 단위로 저장됩니다.
destinationArray가 지정되면, 복사에 성공했을 때는 채워진 destinationArray 레퍼런스를 반환하고, 실패하면 에러 코드를 반환합니다:
| constant | value | description |
|---|---|---|
ERR_INVALID_ARGS | -10 |
|
룸 안에서 좌표(position)를 가지는 모든 오브젝트입니다. 거의 모든 게임 오브젝트 프로토타입은 RoomObject에서 파생됩니다.
적용 중인 효과 목록. 다음 프로퍼티를 가진 오브젝트의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 파워의 레벨. 파워 효과가 아닌 경우에는 존재하지 않습니다. |
ticksRemaining | number | 효과가 앞으로 몇 틱 동안 지속되는지. |
이 오브젝트의 룸 내 위치를 나타내는 오브젝트입니다.
Room 오브젝트에 대한 링크입니다. 오브젝트가 깃발(flag) 또는 건설 사이트(construction site)이고, 해당 오브젝트가 여러분에게 보이지 않는 룸에 배치되어 있는 경우에는 undefined일 수 있습니다.
방 안의 특정 위치를 나타내는 객체입니다. 방 안의 모든 RoomObject는 pos 속성으로 RoomPosition을 포함합니다.
사용자 정의 위치의 RoomPosition 객체는 Room.getPositionAt 메서드 또는 생성자(constructor)를 통해 얻을 수 있습니다.
const pos = new RoomPosition(10, 25, 'sim');
생성자를 사용해 새 RoomPosition 객체를 만들 수 있습니다.
| parameter | type | description |
|---|---|---|
x | number | 방 내부의 X 좌표입니다. |
y | number | 방 내부의 Y 좌표입니다. |
roomName | string | 방 이름입니다. |
방 이름입니다.
방 내부의 X 좌표입니다.
방 내부의 Y 좌표입니다.
Game.flags['Flag1'].pos.createConstructionSite(STRUCTURE_ROAD);Game.flags['Flag1'].pos.createConstructionSite(STRUCTURE_SPAWN, 'MySpawn2');지정한 위치에 새 ConstructionSite를 생성합니다.
| parameter | type | description |
|---|---|---|
structureType | string |
|
nameoptional | string | 이름을 지원하는 구조물의 이름입니다(현재는 스폰만 해당). |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_INVALID_TARGET | -7 | 지정한 위치에 구조물을 배치할 수 없습니다. |
ERR_FULL | -8 | 건설 현장이 너무 많습니다. 플레이어당 최대 건설 현장 수는 100개입니다. |
ERR_INVALID_ARGS | -10 | 위치가 올바르지 않습니다. |
ERR_RCL_NOT_ENOUGH | -14 | 방 컨트롤러 레벨이 부족합니다. 자세히 보기 |
creep.pos.createFlag('Flag1');지정한 위치에 새 Flag를 생성합니다.
| parameter | type | description |
|---|---|---|
nameoptional | string | 새 플래그의 이름입니다. 유일해야 하며, 즉 |
coloroptional | string | 새 플래그의 색상입니다. |
secondaryColoroptional | string | 새 플래그의 보조 색상입니다. |
새 플래그의 이름 또는 아래 오류 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
ERR_NAME_EXISTS | -3 | 같은 이름의 플래그가 이미 존재합니다. |
ERR_INVALID_ARGS | -10 | 위치 또는 색상 상수가 올바르지 않습니다. |
const target = creep.pos.findClosestByPath(FIND_MY_SPAWNS);
creep.moveTo(target);const target = creep.pos.findClosestByPath(FIND_MY_SPAWNS, {maxOps: 500});
creep.moveTo(target);const target = creep.pos.findClosestByPath(FIND_HOSTILE_CREEPS, {
filter: function(object) {
return object.getActiveBodyparts(ATTACK) == 0;
}
});const target = creep.pos.findClosestByPath(FIND_HOSTILE_CREEPS, {
filter: { owner: { username: 'Invader' } }
});const targets = [
Game.creeps.John,
Game.creeps.Mike,
room.getPositionAt(10,10)
];
const closest = creep.pos.findClosestByPath(targets);주어진 위치에서 “경로 길이”가 가장 짧은 객체를 찾습니다. Jump Point Search 알고리즘과 Dijkstra 알고리즘을 사용합니다.
| parameter | type | description |
|---|---|---|
type | number | Room.find를 참고하세요. |
objects | array | 검색 대상이 될 방의 객체 또는 RoomPosition 객체 배열입니다. |
optsoptional | object | 경로 탐색 옵션 객체(Room.findPath 참고) 또는 아래 옵션들 중 하나를 포함하는 객체입니다:
|
가장 가까운 객체를 찾으면 그 객체를, 찾지 못하면 null을 반환합니다.
const target = creep.pos.findClosestByRange(FIND_MY_SPAWNS);
creep.moveTo(target);const target = creep.pos.findClosestByRange(FIND_HOSTILE_CREEPS, {
filter: function(object) {
return object.getActiveBodyparts(ATTACK) == 0;
}
});const target = creep.pos.findClosestByRange(FIND_HOSTILE_CREEPS, {
filter: { owner: { username: 'Invader' } }
});const targets = [
Game.creeps.John,
Game.creeps.Mike,
room.getPositionAt(10,10)
];
const closest = creep.pos.findClosestByRange(targets);주어진 위치에서 “직선 거리”가 가장 짧은 객체를 찾습니다.
| parameter | type | description |
|---|---|---|
type | number | Room.find를 참고하세요. |
objects | array | 검색 대상이 될 방의 객체 또는 RoomPosition 객체 배열입니다. |
optsoptional | object | 아래 옵션 중 하나를 포함하는 객체입니다:
|
가장 가까운 객체를 찾으면 그 객체를, 찾지 못하면 null을 반환합니다.
const targets = creep.pos.findInRange(FIND_HOSTILE_CREEPS, 3);
if(targets.length > 0) {
creep.rangedAttack(targets[0]);
}const targets = [
Game.creeps.John,
Game.creeps.Mike,
room.getPositionAt(10,10)
];
const inRangeTargets = creep.pos.findInRange(targets, 3);지정한 직선 거리(range) 안의 모든 객체를 찾습니다.
| parameter | type | description |
|---|---|---|
type | number | Room.find를 참고하세요. |
objects | array | 검색 대상이 될 방의 객체 또는 RoomPosition 객체 배열입니다. |
range | number | 거리(range) 값입니다. |
optsoptional | object | Room.find를 참고하세요. |
찾은 객체의 배열입니다.
const path = creep.pos.findPathTo(target);
creep.move(path[0].direction);let path = creep.pos.findPathTo(target, {maxOps: 200});
if( !path.length || !target.equalsTo(path[path.length - 1]) ) {
path = creep.pos.findPathTo(target,
{maxOps: 1000, ignoreDestructibleStructures: true});
}
if( path.length ) {
creep.move(path[0].direction);
}Jump Point Search 알고리즘을 사용해 지정한 위치까지의 최적 경로를 찾습니다. 이 메서드는 Room.findPath의 단축형입니다. 대상이 다른 방에 있다면, 해당 방으로 향하는 적절한 출구가 목표로 사용됩니다.
| parameter | type | description |
|---|---|---|
x | number | 방 내부의 X 좌표입니다. |
y | number | 방 내부의 Y 좌표입니다. |
target | object | RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다. |
optsoptional | object | 경로 탐색 옵션 플래그를 담은 객체입니다(자세한 내용은 Room.findPath 참고). |
아래 형식의 경로 스텝 배열을 반환합니다:
[
{ 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 },
...
] const direction = creep.pos.getDirectionTo(target);
creep.move(direction);지정한 위치까지의 직선 방향을 구합니다.
| parameter | type | description |
|---|---|---|
x | number | 방 내부의 X 좌표입니다. |
y | number | 방 내부의 Y 좌표입니다. |
target | object | RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다. |
방향 상수 중 하나를 나타내는 숫자입니다.
const range = creep.pos.getRangeTo(target);
if(range <= 3) {
creep.rangedAttack(target);
}지정한 위치까지의 직선 거리(range)를 구합니다.
| parameter | type | description |
|---|---|---|
x | number | 방 내부의 X 좌표입니다. |
y | number | 방 내부의 Y 좌표입니다. |
target | object | RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다. |
지정한 위치까지의 칸 수(거리)입니다.
if(creep.pos.inRangeTo(target, 3)) {
creep.rangedAttack(target);
}이 위치가 다른 위치로부터 지정한 거리(range) 안에 있는지 확인합니다.
| parameter | type | description |
|---|---|---|
x | number | 같은 방에서의 X 좌표입니다. |
y | number | 같은 방에서의 Y 좌표입니다. |
target | RoomPosition | 대상 위치입니다. |
range | number | 거리(range) 값입니다. |
불리언 값을 반환합니다.
if(creep.pos.isEqualTo(10,25)) {
creep.move(RIGHT);
}if(creep.pos.isEqualTo(Game.flags.Flag1)) {
creep.move(RIGHT);
}이 위치가 지정한 위치와 동일한지 확인합니다.
| parameter | type | description |
|---|---|---|
x | number | 방 내부의 X 좌표입니다. |
y | number | 방 내부의 Y 좌표입니다. |
target | object | RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다. |
불리언 값을 반환합니다.
if(creep.pos.isNearTo(target)) {
creep.transfer(target, RESOURCE_ENERGY);
}이 위치가 지정한 위치의 인접 칸에 있는지 확인합니다. inRangeTo(target, 1)과 동일합니다.
| parameter | type | description |
|---|---|---|
x | number | 방 내부의 X 좌표입니다. |
y | number | 방 내부의 Y 좌표입니다. |
target | object | RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다. |
불리언 값을 반환합니다.
const look = Game.flags.Flag1.pos.look();
look.forEach(function(lookObject) {
if(lookObject.type == LOOK_CREEPS &&
lookObject[LOOK_CREEPS].getActiveBodyparts(ATTACK) == 0) {
creep.moveTo(lookObject.creep);
}
});지정한 방 위치에 있는 객체 목록을 가져옵니다.
아래 형식의, 해당 위치에 있는 객체 배열을 반환합니다:
[
{ type: 'creep', creep: {...} },
{ type: 'structure', structure: {...} },
...
{ type: 'terrain', terrain: 'swamp' }
]const found = Game.flags.Flag1.pos.lookFor(LOOK_CREEPS);
if(found.length && found[0].getActiveBodyparts(ATTACK) == 0) {
creep.moveTo(found[0]);
}지정한 방 위치에서, 주어진 타입의 객체를 가져옵니다.
| parameter | type | description |
|---|---|---|
type | string |
|
찾았다면 지정한 타입의 객체 배열을 반환합니다.

룸 비주얼(Room visuals)은 게임 룸 안에 다양한 시각적 디버그 정보를 표시하는 방법을 제공합니다.
RoomVisual 객체를 사용해 본인에게만 보이는 간단한 도형을 그릴 수 있습니다.
모든 Room 객체에는 이미 visual 속성이 있지만,
생성자를 사용하면 (시야가 없어도) 어떤 방에 대해서든 새 RoomVisual 객체를 만들 수도 있습니다.
룸 비주얼은 데이터베이스에 저장되지 않으며, 오직 브라우저에 표시하는 것이 목적입니다. 모든 그림은 1틱 동안만 유지되며, 업데이트하지 않으면 사라집니다.
모든 RoomVisual API 호출은 추가 CPU 비용이 없습니다(비용은 자연 비용이며, 주로 간단한 JSON.serialize 호출과 관련됩니다).
다만 사용량 제한이 있습니다: 방 하나당 직렬화된 데이터는 500 KB를 초과하여 게시할 수 없습니다(getSize 메서드 참고).
모든 좌표는 게임 좌표로 측정되며 타일의 중앙을 기준으로 합니다. 즉 (10,10)은 x:10; y:10 위치에 있는 크립의 중앙을 가리킵니다. 소수 좌표도 사용할 수 있습니다.
Game.rooms['W10N10'].visual.circle(10,20).line(0,0,10,20);
// the same as:
new RoomVisual('W10N10').circle(10,20).line(0,0,10,20);// this text will be displayed in all rooms
new RoomVisual().text('Some text', 1, 1, {align: 'left'}); 스크립트에서 보이지 않는 방이라도, 어떤 방이든 새 RoomVisual 객체를 직접 생성할 수 있습니다.
| parameter | type | description |
|---|---|---|
roomNameoptional | string | 방 이름입니다. undefined이면 비주얼이 모든 방에 동시에 게시됩니다. |
방 이름입니다.
new RoomVisual('W1N1').line(10,15, 20,20);creep.room.visual.line(creep.pos, target.pos,
{color: 'red', lineStyle: 'dashed'});선을 그립니다.
| parameter | type | description |
|---|---|---|
x1 | number | 시작 X 좌표입니다. |
y1 | number | 시작 Y 좌표입니다. |
x2 | number | 끝 X 좌표입니다. |
y2 | number | 끝 Y 좌표입니다. |
pos1 | RoomPosition | 시작 위치 객체입니다. |
pos2 | RoomPosition | 끝 위치 객체입니다. |
styleoptional | object | 다음 속성을 가진 객체입니다:
|
메서드 체이닝을 할 수 있도록 RoomVisual 객체 자기 자신을 반환합니다.
new RoomVisual('W1N1').circle(10,15);creep.room.visual.circle(creep.pos,
{fill: 'transparent', radius: 0.55, stroke: 'red'});원을 그립니다.
| parameter | type | description |
|---|---|---|
x | number | 중심의 X 좌표입니다. |
y | number | 중심의 Y 좌표입니다. |
pos | RoomPosition | 중심의 위치 객체입니다. |
styleoptional | object | 다음 속성을 가진 객체입니다:
|
메서드 체이닝을 할 수 있도록 RoomVisual 객체 자기 자신을 반환합니다.
// 9x9 area from (2,2) to (10,10)
new RoomVisual('W1N1').rect(1.5, 1.5, 9, 9); // a rectangle border on creep
creep.room.visual.rect(creep.pos.x - 0.6, creep.pos.y - 0.6,
1.2, 1.2,
{fill: 'transparent', stroke: '#f00'});사각형을 그립니다.
| parameter | type | description |
|---|---|---|
x | number | 좌상단 모서리의 X 좌표입니다. |
y | number | 좌상단 모서리의 Y 좌표입니다. |
topLeftPos | RoomPosition | 좌상단 모서리의 위치 객체입니다. |
width | number | 사각형의 너비입니다. |
height | number | 사각형의 높이입니다. |
styleoptional | object | 다음 속성을 가진 객체입니다:
|
메서드 체이닝을 할 수 있도록 RoomVisual 객체 자기 자신을 반환합니다.
const points = [];
points.push(creep1.pos);
points.push([10,15]);
points.push(new RoomPosition(20,21,'W1N1'));
new RoomVisual('W1N1').poly(points, {fill: 'aqua'}); // visualize the path
const path = Game.rooms['W1N1'].findPath(from, to);
new RoomVisual('W1N1').poly(path, {stroke: '#fff', strokeWidth: .15,
opacity: .2, lineStyle: 'dashed'}); 폴리라인을 그립니다.
| parameter | type | description |
|---|---|---|
points | array | 점들의 배열입니다. 각 요소는 숫자 2개로 이루어진 배열(예: |
styleoptional | object | 다음 속성을 가진 객체입니다:
|
메서드 체이닝을 할 수 있도록 RoomVisual 객체 자기 자신을 반환합니다.
new RoomVisual('W1N1').text("Target💥", 10, 15, {color: 'green', font: 0.8}); 텍스트 라벨을 그립니다. 이모지를 포함해, 유효한 모든 유니코드 문자를 사용할 수 있습니다.
| parameter | type | description |
|---|---|---|
text | string | 텍스트 메시지입니다. |
x | number | 라벨 기준선(baseline) 지점의 X 좌표입니다. |
y | number | 라벨 기준선(baseline) 지점의 Y 좌표입니다. |
pos | RoomPosition | 라벨 기준선(baseline)의 위치 객체입니다. |
styleoptional | object | 다음 속성을 가진 객체입니다:
|
메서드 체이닝을 할 수 있도록 RoomVisual 객체 자기 자신을 반환합니다.
new RoomVisual('W1N1').clear();방에서 모든 비주얼을 제거합니다.
메서드 체이닝을 할 수 있도록 RoomVisual 객체 자기 자신을 반환합니다.
if(creep.room.visual.getSize() >= 512000) {
// cannot add more visuals in this tick
}현재 틱에서 방에 추가된 모든 비주얼 데이터의 저장 크기를 가져옵니다. 이 값은 512,000(500 KB)을 초과하면 안 됩니다.
비주얼의 크기를 바이트 단위로 반환합니다.
Memory.RoomVisualData['E2S7'] = Game.rooms.E2S7.visual.export();현재 틱에서 방에 추가된 모든 비주얼을 압축된 형태로 반환합니다.
비주얼 데이터가 담긴 문자열입니다. 이 문자열로 할 수 있는 일은 많지 않으며, 보통 나중을 위해 저장하는 용도로 사용합니다.
if(Memory.RoomVisualData['E2S7']) {
Game.rooms.E2S7.visual.import(Memory.RoomVisualData['E2S7']);
}이전에(RoomVisual.export로) 내보낸 룸 비주얼을 현재 틱의 룸 비주얼 데이터에 추가합니다.
| parameter | type | description |
|---|---|---|
val | string | RoomVisual.export에서 반환된 문자열입니다. |
메서드 체이닝을 할 수 있도록 RoomVisual 객체 자기 자신을 반환합니다.

파괴된 구조물입니다. 이동 가능한(walkable) 오브젝트입니다.
| Decay | 일부 특수 케이스를 제외하면 500틱 |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물이 파괴된 시각입니다.
고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.
이 구조물의 자원을 담고 있는 Store 오브젝트입니다.
파괴된 구조물의 기본 데이터를 담는 오브젝트입니다.
이 폐허가 붕괴(decay)되기까지 남은 게임 틱 수입니다.
에너지 소스 오브젝트입니다. WORK 바디 파트를 가진 크립이 채집할 수 있습니다.
| Energy amount | 중앙 룸: 4000 소유/예약된 룸: 3000 예약되지 않은 룸: 1500 |
| Energy regeneration | 매 300 게임 틱 |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
남아 있는 에너지 양입니다.
소스의 총 에너지 양입니다.
고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.
소스가 다시 채워질 때까지 남은 시간입니다.
적재물(cargo)로 자원을 담을 수 있는 오브젝트입니다.
게임에는 두 종류의 store가 있습니다: 범용 store와 제한 store.
Store 프로토타입은 두 종류 모두 동일하지만, 메서드에서 resource 인자에 따라 동작이 달라집니다.
store에서 특정 자원을 얻으려면 오브젝트 프로퍼티로 접근하면 됩니다:
console.log(creep.store[RESOURCE_ENERGY]);if(creep.store[RESOURCE_ENERGY] < creep.store.getCapacity()) {
goHarvest(creep);
}지정한 자원에 대한 store의 용량을 반환합니다. 범용 store에서는 resource가 undefined이면 총 용량을 반환합니다.
| parameter | type | description |
|---|---|---|
resourceoptional | string | 자원 타입. |
용량 숫자를 반환하거나, 이 store 타입에 대해 resource가 유효하지 않으면 null을 반환합니다.
if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
creep.transfer(structure, RESOURCE_ENERGY);
}store의 남은 용량을 반환합니다. 제한 store에서는 resource가 정의되어 있고 이 store에 유효한 경우, 해당 자원에 대해 사용 가능한 용량을 반환합니다.
| parameter | type | description |
|---|---|---|
resourceoptional | string | 자원 타입. |
사용 가능한 용량 숫자를 반환하거나, 이 store 타입에 대해 resource가 유효하지 않으면 null을 반환합니다.
if(Game.rooms['W1N1'].terminal.store.getUsedCapacity() == 0) {
// terminal is empty
}지정한 자원이 사용 중인 용량을 반환합니다. 범용 store에서는 resource가 undefined이면 총 사용 용량을 반환합니다.
| parameter | type | description |
|---|---|---|
resourceoptional | string | 자원 타입. |
사용 중인 용량 숫자를 반환하거나, 이 store 타입에 대해 resource가 유효하지 않으면 null을 반환합니다.
모든 구조물의 기본 프로토타입 오브젝트입니다.
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 hit points입니다.
구조물의 총 hit points입니다.
고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아니며, 여러분의 룸에도 있지 않습니다. |
ERR_BUSY | -4 | 룸에 적대 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 룸 컨트롤러 레벨이 부족하면 false를 반환하며, 게임에서는 해당 구조물이 빨간색으로 하이라이트됩니다.
불리언 값입니다.
구조물이 공격받을 때 자동 알림을 켜거나 끕니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지 끌지 여부. |
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|

자원을 저장할 수 있는 작은 컨테이너입니다. 이동 가능한(walkable) 구조물입니다. 같은 타일에 있는 모든 드랍 자원은 자동으로 컨테이너로 들어갑니다.
| Controller level | Any (including neutral rooms) |
| Available per room | 5 |
| Capacity | 2,000 |
| Cost | 5,000 |
| Hits | 250,000 |
| Decay | 소유 룸에서는 500틱마다 5,000 hits를 잃고, 비소유 룸에서는 100틱마다 5,000 hits를 잃습니다. |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
const containersWithEnergy = room.find(FIND_STRUCTURES, {
filter: (i) => i.structureType == STRUCTURE_CONTAINER &&
i.store[RESOURCE_ENERGY] > 0
});이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.
This property is deprecated and will be removed soon.
.store.getCapacity()에 대한 별칭(alias)입니다.
이 컨테이너가 일부 hit points를 잃기까지 남은 게임 틱 수입니다.

이 구조물을 claim하면 룸을 컨트롤할 수 있습니다. 컨트롤러 구조물은 피해를 받거나 파괴될 수 없습니다.
Room.controller 프로퍼티로 접근할 수 있습니다.
| Level | Upgrade to next level | Downgrade timer |
|---|---|---|
| 1 | 200 energy | 20,000 ticks |
| 2 | 45,000 energy | 10,000 ticks |
| 3 | 135,000 energy | 20,000 ticks |
| 4 | 405,000 energy | 40,000 ticks |
| 5 | 1,215,000 energy | 80,000 ticks |
| 6 | 3,645,000 energy | 120,000 ticks |
| 7 | 10,935,000 energy | 150,000 ticks |
| 8 | — | 200,000 ticks |
| Effect | 룸 안의 모든 적대 크립의 attack, rangedAttack, rangedMassAttack, dismantle, heal, rangedHeal, attackController, withdraw 메서드와, 적대 Power Creep의 enableRoom, usePower 메서드를 차단합니다. 동시에 오직 1개의 룸만 세이프 모드일 수 있습니다.세이프 모드가 활성화되면 모든 적대 크립은 시각적으로 반투명해지고 통과 가능한 상태가 되어, 여러분의 크립은 자유롭게 통과할 수 있습니다(반대로 적이 여러분을 통과하는 것은 불가). |
| Duration | 20,000 ticks |
| Cooldown | 50,000 ticks (Novice Areas에서는 쿨다운이 없으며, 첫 룸의 초기 Safe Mode도 쿨다운이 없습니다) |
| Generation |
|
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
이 룸에서 power 사용이 활성화되어 있는지 여부입니다. 파워를 켜려면 PowerCreep.enableRoom을 사용하세요.
현재 컨트롤러 레벨(0~8).
다음 레벨로 업그레이드하기 위한 현재 진행도입니다.
다음 레벨에 도달하기 위해 필요한 진행도입니다.
컨트롤러가 예약(reservation)되어 있다면 예약 정보 오브젝트입니다:
| parameter | type | description |
|---|---|---|
username | string | 이 컨트롤러를 예약한 플레이어 이름. |
ticksToEnd | number | 예약이 종료될 게임 틱 시각. |
남은 세이프 모드 틱 수 또는 undefined.
사용 가능한 세이프 모드 활성화 수입니다.
이 기간(틱) 동안에는 새 세이프 모드 활성화가 차단됩니다. 쿨다운이 비활성일 때는 undefined입니다.
컨트롤러에 사인(sign)이 있다면 사인 정보 오브젝트입니다:
| parameter | type | description |
|---|---|---|
username | string | 사인한 플레이어 이름. |
text | string | 사인 텍스트. |
time | number | 게임 틱 기준 사인 시간. |
datetime | Date | 실제 날짜 기준 사인 시간. |
이 컨트롤러가 레벨을 1 잃게 되는 게임 틱 시각입니다. 이 타이머는 레벨 업/다운 시 50%로 설정되며, Creep.upgradeController로 증가시킬 수 있습니다. 다음 레벨로 업그레이드하려면 이 값이 꽉 차 있어야 합니다.
공격으로 인해 이 컨트롤러를 업그레이드할 수 없는 기간(틱)입니다. 이 기간 동안 세이프 모드도 사용할 수 없습니다.
room.controller.activateSafeMode();가능하다면 세이프 모드를 활성화합니다.
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 컨트롤러의 소유자가 아닙니다. |
ERR_BUSY | -4 | 이미 세이프 모드인 다른 룸이 있습니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 사용 가능한 세이프 모드 활성화가 없습니다. |
ERR_TIRED | -11 | 이전 세이프 모드가 아직 쿨다운 중이거나, 컨트롤러가 |
room.controller.unclaim();점령(claim)한 컨트롤러를 다시 중립 상태로 만듭니다.
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 컨트롤러의 소유자가 아닙니다. |

에너지를 담고 있으며, 더 큰 크립을 스폰하는 데 사용할 수 있습니다. 익스텐션은 룸 안 어디에나 배치할 수 있고, 거리에 상관없이 어떤 스폰이든 사용할 수 있습니다.
| Controller level | |
| 1 | — |
| 2 | 5 extensions (50 capacity) |
| 3 | 10 extensions (50 capacity) |
| 4 | 20 extensions (50 capacity) |
| 5 | 30 extensions (50 capacity) |
| 6 | 40 extensions (50 capacity) |
| 7 | 50 extensions (100 capacity) |
| 8 | 60 extensions (200 capacity) |
| Cost | 3,000 |
| Hits | 1,000 |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
This property is deprecated and will be removed soon.
.store[RESOURCE_ENERGY]에 대한 별칭(alias)입니다.
This property is deprecated and will be removed soon.
.store.getCapacity(RESOURCE_ENERGY)에 대한 별칭(alias)입니다.
익스텐션이 담을 수 있는 총 에너지 양입니다.
if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
creep.transfer(structure, RESOURCE_ENERGY);
}이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.

미네랄 매장지를 채굴할 수 있게 해줍니다. 미네랄에 대해서는 이 문서에서 더 알아보세요.
| Controller level | 6 |
| Cost | 5,000 |
| Hits | 500 |
| Cooldown | 각 harvest 액션마다 5틱 |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
다음 harvest 액션이 가능해질 때까지 남은 게임 틱 수입니다.

기본 미네랄과 다른 상품으로부터 거래용 상품(commodities)을 생산합니다. 상품에 대해서는 이 문서에서 더 알아보세요.
| Controller level | |
| 1-6 | — |
| 7-8 | 1 factory |
| Cost | 100,000 |
| Hits | 1000 |
| Capacity | 50,000 |
| Production cooldown | 자원에 따라 다름 |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
다음 생산이 가능해질 때까지 팩토리가 기다려야 하는 게임 틱 수입니다.
if(!factory.level) {
Game.powerCreeps['MyOperator1'].usePower(PWR_OPERATE_FACTORY, factory);
}팩토리 레벨입니다. 새로 건설된 팩토리에 PWR_OPERATE_FACTORY 파워를 적용해 설정할 수 있습니다.
한 번 설정되면 레벨은 변경할 수 없습니다.
이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.
This property is deprecated and will be removed soon.
.store.getCapacity()에 대한 별칭(alias)입니다.
factory.produce(RESOURCE_UTRIUM_BAR);지정한 상품을 생산합니다. 필요한 모든 재료는 팩토리 store에 있어야 합니다.
| parameter | type | description |
|---|---|---|
resourceType | string |
|
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 팩토리가 |
ERR_NOT_ENOUGH_RESOURCES | -6 | 구조물에 필요한 자원이 충분하지 않습니다. |
ERR_INVALID_TARGET | -7 | 팩토리가 이 레벨의 상품을 생산할 수 없습니다. |
ERR_FULL | -8 | 팩토리에 생산물을 담을 수 없습니다. |
ERR_INVALID_ARGS | -10 | 제공한 인자가 올바르지 않습니다. |
ERR_TIRED | -11 | 팩토리가 아직 쿨다운 중입니다. |
ERR_RCL_NOT_ENOUGH | -14 | 팩토리를 사용하기에 Room Controller 레벨이 부족합니다. |

이 NPC 구조물은 NPC Strongholds의 컨트롤 센터이며, 섹터 내 모든 침략자(invaders)를 지휘합니다. Stronghold의 NPC 방어자를 스폰하고, 타워를 리필하고, 구조물을 수리합니다. 이 구조물이 살아 있는 동안, 같은 섹터의 모든 룸에서 침략자를 스폰합니다. 또한 내부에 가치 있는 자원이 들어 있으며, 구조물을 파괴하면 남는 ruin에서 루팅할 수 있습니다.
Invader Core의 수명은 두 단계로 나뉩니다: deploy 단계와 active 단계. 섹터의 임의의 룸에 나타날 때, ticksToDeploy 프로퍼티를 가지며
주변에는 public ramparts가 있고, 아무 행동도 하지 않습니다. 이 단계에서는 공격에 무적이며(EFFECT_INVULNERABILITY가 활성화되어 있음) 피해를 받지 않습니다. ticksToDeploy 타이머가 끝나면,
주변에 구조물을 스폰하고 크립 스폰을 시작하며, 취약해지고, EFFECT_COLLAPSE_TIMER를 받습니다. 이 타이머가 끝나면 stronghold는 제거됩니다.
활성 상태의 Invader Core는 섹터 내의 인접한 중립 룸들에 레벨 0 Invader Core를 스폰합니다. 이런 하위 코어(lesser Invader Cores)는 룸 컨트롤러 근처에 생성되며, 컨트롤러를 reserve/attack 하는 것 외에는 활동하지 않습니다. Invader Core 하나는 수명 동안 최대 42개의 하위 코어를 스폰할 수 있습니다.
| Hits | 100,000 |
| Deploy time | 5,000 ticks |
| Active time | 75,000 ticks with 10% random variation |
| Lesser cores spawn interval |
Stronghold level 1: 4000 ticks Stronghold level 2: 3500 ticks Stronghold level 3: 3000 ticks Stronghold level 4: 2500 ticks Stronghold level 5: 2000 ticks |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
Stronghold 레벨입니다. 전리품의 양과 품질은 레벨에 따라 달라집니다.
아직 deploy되지 않은 stronghold의 타이머를 나타냅니다. 그 외에는 undefined입니다.
코어가 새 크립을 스폰하는 중이라면, 이 오브젝트는 StructureSpawn.Spawning 오브젝트를 담습니다. 그렇지 않으면 null입니다.

비플레이어 구조물입니다. 일부 룸에서 에너지 소스와 미네랄을 지키는 NPC Source Keeper를 스폰합니다. 이 구조물은 파괴할 수 없습니다.
| Spawning time | 300 |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
다음 Source Keeper가 스폰되기까지 남은 시간입니다.

기본 미네랄로부터 미네랄 화합물을 생산하고, 크립을 부스트/언부스트합니다. 미네랄에 대해서는 이 문서에서 더 알아보세요.
| Controller level | |
| 1-5 | — |
| 6 | 3 labs |
| 7 | 6 labs |
| 8 | 10 labs |
| Cost | 50,000 |
| Hits | 500 |
| Capacity | 3000 mineral units, 2000 energy units |
| Produce | 반응(reaction)당 미네랄 화합물 5 |
| Reaction cooldown | 반응에 따라 다름(이 문서 참고) |
| Distance to input labs | 2 squares |
| Boost cost | 바디 파트 1개당 미네랄 30, 에너지 20 |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
다음 반응 또는 언부스트 작업이 가능해질 때까지 랩이 기다려야 하는 게임 틱 수입니다.
This property is deprecated and will be removed soon.
.store[RESOURCE_ENERGY]에 대한 별칭(alias)입니다.
This property is deprecated and will be removed soon.
.store.getCapacity(RESOURCE_ENERGY)에 대한 별칭(alias)입니다.
This property is deprecated and will be removed soon.
lab.store[lab.mineralType]에 대한 별칭(alias)입니다.
랩에 들어 있는 미네랄 타입입니다. 랩은 동시에 한 종류의 미네랄만 담을 수 있습니다.
This property is deprecated and will be removed soon.
lab.store.getCapacity(lab.mineralType || yourMineral)에 대한 별칭(alias)입니다.
if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
creep.transfer(structure, RESOURCE_ENERGY);
}이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.
담고 있는 미네랄 화합물로 크립의 바디 파트를 부스트합니다. 크립은 랩에 인접한 칸에 있어야 합니다.
| parameter | type | description |
|---|---|---|
creep | Creep | 대상 크립. |
bodyPartsCountoptional | number | 부스트할 해당 타입 바디 파트 개수. 바디 파트는 |
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 랩의 소유자가 아닙니다. |
ERR_NOT_FOUND | -5 | 랩에 있는 미네랄이 크립의 어떤 바디 파트도 부스트할 수 없습니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 랩에 에너지 또는 미네랄이 충분하지 않습니다. |
ERR_INVALID_TARGET | -7 | 대상이 유효한 creep 오브젝트가 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멉니다. |
ERR_RCL_NOT_ENOUGH | -14 | 이 구조물을 사용하기에 Room Controller Level이 부족합니다. |
미네랄 화합물을 다시 시약(reagents)으로 분해합니다. 같은 출력 랩(output labs)은 여러 소스 랩(source labs)이 함께 사용할 수 있습니다.
| parameter | type | description |
|---|---|---|
lab1 | StructureLab | 첫 번째 결과 랩(result lab). |
lab2 | StructureLab | 두 번째 결과 랩(result lab). |
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 랩의 소유자가 아닙니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 소스 랩에 자원이 충분하지 않습니다. |
ERR_INVALID_TARGET | -7 | 대상이 유효한 랩 오브젝트가 아닙니다. |
ERR_FULL | -8 | 대상 중 하나가 더 이상 자원을 받을 수 없습니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멉니다. |
ERR_INVALID_ARGS | -10 | 이 자원으로 반응을 되돌릴 수 없습니다. |
ERR_TIRED | -11 | 랩이 아직 쿨다운 중입니다. |
ERR_RCL_NOT_ENOUGH | -14 | 이 구조물을 사용하기에 Room Controller Level이 부족합니다. |
다른 두 랩의 시약(reagents)으로 미네랄 화합물을 생산합니다. 같은 입력 랩(input labs)은 여러 출력 랩(output labs)이 함께 사용할 수 있습니다.
| parameter | type | description |
|---|---|---|
lab1 | StructureLab (lab) | 첫 번째 소스 랩. |
lab2 | StructureLab (lab) | 두 번째 소스 랩. |
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 랩의 소유자가 아닙니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 소스 랩에 자원이 충분하지 않습니다. |
ERR_INVALID_TARGET | -7 | 대상이 유효한 랩 오브젝트가 아닙니다. |
ERR_FULL | -8 | 대상이 더 이상 자원을 받을 수 없습니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멉니다. |
ERR_INVALID_ARGS | -10 | 이 자원으로 반응을 실행할 수 없습니다. |
ERR_TIRED | -11 | 랩이 아직 쿨다운 중입니다. |
ERR_RCL_NOT_ENOUGH | -14 | 이 구조물을 사용하기에 Room Controller Level이 부족합니다. |
크립의 부스트를 즉시 제거하고, 크립의 남은 수명과 무관하게, 부스트에 사용된 미네랄 화합물의 50%를 바닥에 드랍합니다. 크립은 랩에 인접한 칸에 있어야 합니다. 언부스트(unboost)는 크립에 적용된 모든 화합물을 생산하기 위해 필요한 반응 시간의 총합만큼 쿨다운을 요구합니다.
| parameter | type | description |
|---|---|---|
creep | Creep | 대상 크립. |
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 랩 또는 대상 크립의 소유자가 아닙니다. |
ERR_NOT_FOUND | -5 | 대상에 부스트된 파트가 없습니다. |
ERR_INVALID_TARGET | -7 | 대상이 유효한 Creep 오브젝트가 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멉니다. |
ERR_TIRED | -11 | 랩이 아직 쿨다운 중입니다. |
ERR_RCL_NOT_ENOUGH | -14 | 이 구조물을 사용하기에 Room Controller Level이 부족합니다. |
같은 룸 안의 다른 Link로 에너지를 원격 전송합니다.
| Controller level | |
| 1-4 | — |
| 5 | 2 links |
| 6 | 3 links |
| 7 | 4 links |
| 8 | 6 links |
| Cost | 5,000 |
| Hits | 1,000 |
| Capacity | 800 |
| Cooldown time | 대상까지의 직선 거리(타일) 1칸당 1틱 |
| Energy loss | 3% |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
다음 전송이 가능해질 때까지 링크가 기다려야 하는 게임 틱 수입니다.
This property is deprecated and will be removed soon.
.store[RESOURCE_ENERGY]에 대한 별칭(alias)입니다.
This property is deprecated and will be removed soon.
.store.getCapacity(RESOURCE_ENERGY)에 대한 별칭(alias)입니다.
if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
creep.transfer(structure, RESOURCE_ENERGY);
}이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.
const linkFrom = Game.rooms['W1N1'].lookForAt('structure', 10, 25)[0];
const linkTo = linkFrom.pos.findInRange(FIND_MY_STRUCTURES, 2,
{filter: {structureType: STRUCTURE_LINK}})[0];
linkFrom.transferEnergy(linkTo);같은 룸 안의 어떤 위치든 있는 다른 링크로 에너지를 원격 전송합니다.
| parameter | type | description |
|---|---|---|
target | StructureLink | 대상 오브젝트. |
amountoptional | number | 전송할 에너지 양. 생략하면 사용 가능한 에너지를 전부 사용합니다. |
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 링크의 소유자가 아닙니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 구조물에 지정한 양의 에너지가 없습니다. |
ERR_INVALID_TARGET | -7 | 대상이 유효한 StructureLink 오브젝트가 아닙니다. |
ERR_FULL | -8 | 대상이 더 이상 에너지를 받을 수 없습니다. |
ERR_NOT_IN_RANGE | -9 | 대상이 너무 멉니다. |
ERR_INVALID_ARGS | -10 | 에너지 양이 올바르지 않습니다. |
ERR_TIRED | -11 | 링크가 아직 쿨다운 중입니다. |
ERR_RCL_NOT_ENOUGH | -14 | 이 링크를 사용하기에 Room Controller Level이 부족합니다. |

다른 룸으로 핵을 발사해 착탄 지역에 막대한 피해를 줍니다. 각 발사는 쿨다운이 있으며 에너지와 ghodium 자원이 필요합니다. 발사하면 대상 룸 좌표에 Nuke 오브젝트가 생성되며, 착탄할 때까지 모든 플레이어에게 보입니다. 들어오는 핵은 이동하거나 취소할 수 없습니다. 초보자 룸에서는 발사하거나 발사 대상이 될 수 없습니다. StructureNuker에 넣은 자원은 꺼낼 수 없습니다.
| Controller level | |
| 1-7 | — |
| 8 | 1 nuke |
| Cost | 100,000 |
| Hits | 1,000 |
| Range | 10 rooms |
| Launch cost | 300,000 energy 5,000 ghodium |
| Launch cooldown | 100,000 ticks |
| Landing time | 50,000 ticks |
| Effect | 룸 내의 모든 크립, 건설 사이트, 드랍된 자원이 즉시 제거됩니다(램파트 내부도 포함). 구조물 피해:
서로 다른 룸에서 여러 핵을 같은 목표 위치에 겹쳐 발사하여 피해를 늘릴 수 있다는 점에 유의하세요. 핵 착탄은 tombstone과 ruin을 생성하지 않으며, 룸에 존재하는 모든 tombstone과 ruin을 파괴합니다. 룸이 세이프 모드인 경우, 세이프 모드는 즉시 해제되며 세이프 모드 쿨다운은 0으로 리셋됩니다. 룸 컨트롤러는 |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
This property is deprecated and will be removed soon.
.store[RESOURCE_ENERGY]에 대한 별칭(alias)입니다.
This property is deprecated and will be removed soon.
.store.getCapacity(RESOURCE_ENERGY)에 대한 별칭(alias)입니다.
This property is deprecated and will be removed soon.
.store[RESOURCE_GHODIUM]에 대한 별칭(alias)입니다.
This property is deprecated and will be removed soon.
.store.getCapacity(RESOURCE_GHODIUM)에 대한 별칭(alias)입니다.
다음 발사가 가능해질 때까지 남은 게임 틱 수입니다.
if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
creep.transfer(structure, RESOURCE_ENERGY);
}이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.
nuker.launchNuke(new RoomPosition(20,30, 'W1N1'));지정한 위치로 핵을 발사합니다.
| parameter | type | description |
|---|---|---|
pos | RoomPosition | 대상 룸 좌표. |
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 구조물에 에너지 및/또는 ghodium이 충분하지 않습니다. |
ERR_INVALID_TARGET | -7 | 지정한 RoomPosition으로 핵을 발사할 수 없습니다(Start Areas 참고). |
ERR_NOT_IN_RANGE | -9 | 대상 룸이 사거리 밖입니다. |
ERR_INVALID_ARGS | -10 | 대상이 유효한 RoomPosition이 아닙니다. |
ERR_TIRED | -11 | 구조물이 아직 쿨다운 중입니다. |
ERR_RCL_NOT_ENOUGH | -14 | 이 구조물을 사용하기에 Room Controller Level이 부족합니다. |
스크립트로 먼 룸을 관측(시야 확보)할 수 있게 해줍니다.
| Controller level | |
| 1-7 | — |
| 8 | 1 observer |
| Cost | 8,000 |
| Hits | 500 |
| Range | 10 rooms |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
스크립트로 먼 룸을 관측할 수 있게 합니다. 대상 룸 오브젝트는 다음 틱에 사용할 수 있습니다.
| parameter | type | description |
|---|---|---|
roomName | string | 대상 룸 이름. |
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_NOT_IN_RANGE | -9 |
|
ERR_INVALID_ARGS | -10 |
|
ERR_RCL_NOT_ENOUGH | -14 | 이 구조물을 사용하기에 Room Controller Level이 부족합니다. |

비플레이어 구조물입니다. 구조물을 파괴하면 획득할 수 있는 power 자원을 담고 있습니다. 공격할 때마다 공격한 크립에게 피해를 반사합니다. power에 대한 자세한 내용은 이 문서를 참고하세요.
| Hits | 2,000,000 |
| Return damage | 50% |
| Capacity | 500 — 10,000 |
| Decay | 5,000 ticks |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
담고 있는 power 양입니다.
이 구조물이 사라질 때까지 남은 게임 틱 수입니다.

power를 계정으로 처리(process)하고, 특수 고유 파워를 가진 power creep을 스폰합니다(개발 중). power에 대해서는 이 문서에서 더 알아보세요.
| Controller level | |
| 1-7 | — |
| 8 | 1 power spawn |
| Cost | 100,000 |
| Hits | 5,000 |
| Capacity | 5,000 energy units, 100 power units |
| Processing cost | power 1당 에너지 50 |
| Processing speed | 틱당 power 1 |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
This property is deprecated and will be removed soon.
.store[RESOURCE_ENERGY]에 대한 별칭(alias)입니다.
This property is deprecated and will be removed soon.
.store.getCapacity(RESOURCE_ENERGY)에 대한 별칭(alias)입니다.
This property is deprecated and will be removed soon.
.store[RESOURCE_POWER]에 대한 별칭(alias)입니다.
This property is deprecated and will be removed soon.
.store.getCapacity(RESOURCE_POWER)에 대한 별칭(alias)입니다.
if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
creep.transfer(structure, RESOURCE_ENERGY);
}이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.
power 자원 유닛을 계정에 등록합니다. 등록된 power는 power creep 스킬을 성장시키는 데 사용됩니다.
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 구조물에 에너지 또는 power 자원이 충분하지 않습니다. |
ERR_RCL_NOT_ENOUGH | -14 | 이 구조물을 사용하기에 Room Controller Level이 부족합니다. |

비플레이어 구조물입니다. 룸 출구 타일처럼 동작하며, 크립을 먼 룸으로 즉시 텔레포트합니다. 포털은 각 섹터의 중앙 룸에 무작위로 생성됩니다.
| Stable time | 10 days |
| Decay time | 30,000 ticks |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
룸 간(inter-room) 포털인 경우, 이 프로퍼티는 목적지 룸의 지점을 가리키는 RoomPosition 오브젝트를 담습니다.
샤드 간(inter-shard) 포털인 경우, 이 프로퍼티는 shard 및 room 문자열 프로퍼티를 가진 오브젝트를 담습니다.
정확한 좌표는 결정되지 않으며, 크립은 목적지 룸의 어떤 빈 칸에든 나타납니다.
포털이 사라지기까지 남은 게임 틱 수입니다. 포털이 안정 상태(stable)인 경우에는 undefined입니다.

적대 크립의 이동을 막고, 같은 타일 위의 여러분의 크립과 구조물을 방어합니다. 조작 가능한 게이트처럼 사용할 수 있습니다.
| Controller level | |
| 1 | — |
| 2 | 300,000 max hits |
| 3 | 1,000,000 max hits |
| 4 | 3,000,000 max hits |
| 5 | 10,000,000 max hits |
| 6 | 30,000,000 max hits |
| 7 | 100,000,000 max hits |
| 8 | 300,000,000 max hits |
| Cost | 1 |
| Hits when constructed | 1 |
| Decay | 100틱마다 300 hits를 잃습니다. |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
false(기본값)라면 여러분의 크립만 같은 칸에 설 수 있습니다. true라면 적대 크립도 통과할 수 있습니다.
이 램파트가 일부 hit points를 잃기까지 남은 게임 틱 수입니다.
이 램파트를 public으로 설정해 다른 플레이어의 크립이 통과할 수 있게 합니다.
| parameter | type | description |
|---|---|---|
isPublic | boolean | 이 램파트를 public으로 할지 non-public으로 할지. |
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |

이동 비용을 1로 줄입니다. 도로를 사용하면 MOVE 바디 파트가 더 적은 크립을 설계할 수 있습니다. 또한 원래는 지나갈 수 없는 자연 지형 벽 위에도 도로를 건설할 수 있습니다.
| Controller level | Any (including neutral rooms) |
| Cost |
|
| Hits |
|
| Decay |
|
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 도로가 일부 hit points를 잃기까지 남은 게임 틱 수입니다.
스폰은 콜로니의 중심입니다. 이 구조물은 크립을 생성(spawn)하고, 수명 연장(renew)하며, 재활용(recycle)할 수 있습니다.
모든 스폰은 Game.spawns 해시 목록을 통해 접근할 수 있습니다.
또한 스폰은 매 틱 소량의 에너지를 자동으로 재생성하므로, 모든 크립이 죽었더라도 비교적 쉽게 회복할 수 있습니다.
| 컨트롤러 레벨 | |
| 1-6 | 스폰 1개 |
| 7 | 스폰 2개 |
| 8 | 스폰 3개 |
| 비용 | 15,000 |
| 체력(Hits) | 5,000 |
| 용량(Capacity) | 300 |
| 스폰 시간 | 바디 파트 1개당 3틱 |
| 에너지 자동 재생 | 방 안에서 사용 가능한 에너지(모든 스폰과 익스텐션 합계)가 300 미만인 동안, 매 틱 에너지 1을 재생성 |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
This property is deprecated and will be removed soon.
.store[RESOURCE_ENERGY]의 별칭입니다.
This property is deprecated and will be removed soon.
.store.getCapacity(RESOURCE_ENERGY)의 별칭입니다.
spawn.memory.queue = [];Memory.spawns[spawn.name]의 단축 접근자입니다. 스폰별 메모리 데이터 객체에 빠르게 접근할 때 사용할 수 있습니다. 메모리에 대해 더 알아보기
스폰의 이름입니다. 새 스폰을 만들 때 이름을 정하며, 이후에는 변경할 수 없습니다. 이 이름은 Game.spawns 객체에서 스폰에 접근하기 위한 해시 키입니다.
스폰이 새 크립을 생성 중이라면 이 속성은 StructureSpawn.Spawning 객체를 가지며, 그렇지 않으면 null입니다.
if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
creep.transfer(structure, RESOURCE_ENERGY);
}이 구조물의 화물(저장량)을 담고 있는 Store 객체입니다.
This method is deprecated and will be removed soon. Please use StructureSpawn.spawnCreep with dryRun flag instead.
if(spawn.canCreateCreep(body, name) == OK) {
spawn.createCreep(body, name);
}크립을 생성할 수 있는지 확인합니다.
| parameter | type | description |
|---|---|---|
body | array<string> | 새 크립의 바디를 설명하는 배열입니다. 1~50개의 요소를 가지며, 아래 상수 중 하나여야 합니다:
|
nameoptional | string | 새 크립의 이름입니다. 이름 길이 제한은 100자입니다. 유일한 크립 이름이어야 하며, 즉 |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 지정한 바디와 이름으로 크립을 생성할 수 있습니다. |
ERR_NOT_OWNER | -1 | 이 스폰의 소유자가 아닙니다. |
ERR_NAME_EXISTS | -3 | 같은 이름의 크립이 이미 존재합니다. |
ERR_BUSY | -4 | 스폰이 이미 다른 크립을 생성 중입니다. |
ERR_NOT_ENOUGH_ENERGY | -6 | 지정한 바디로 크립을 만들 만큼 스폰 및 익스텐션에 에너지가 충분하지 않습니다. |
ERR_INVALID_ARGS | -10 | 바디가 올바르게 작성되지 않았습니다. |
ERR_RCL_NOT_ENOUGH | -14 | 이 스폰을 사용하기에 방 컨트롤러 레벨이 부족합니다. |
This method is deprecated and will be removed soon. Please use StructureSpawn.spawnCreep instead.
Game.spawns['Spawn1'].createCreep([WORK, CARRY, MOVE], 'Worker1');Game.spawns['Spawn1'].createCreep([WORK, CARRY, MOVE], null,
{role: 'harvester'});const result = Game.spawns['Spawn1'].createCreep([WORK, CARRY, MOVE]);
if(_.isString(result)) {
console.log('The name is: '+result);
}
else {
console.log('Spawn error: '+result);
}크립 생성 과정을 시작합니다. 필요한 에너지는 해당 방의 모든 스폰과 익스텐션에서 인출될 수 있습니다.
| parameter | type | description |
|---|---|---|
body | array<string> | 새 크립의 바디를 설명하는 배열입니다. 1~50개의 요소를 가지며, 아래 상수 중 하나여야 합니다:
|
nameoptional | string | 새 크립의 이름입니다. 이름 길이 제한은 100자입니다. 유일한 크립 이름이어야 하며, 즉 |
memoryoptional | any | 새 크립의 메모리입니다. 제공하면 즉시 |
새 크립의 이름 또는 아래 오류 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
ERR_NOT_OWNER | -1 | 이 스폰의 소유자가 아닙니다. |
ERR_NAME_EXISTS | -3 | 같은 이름의 크립이 이미 존재합니다. |
ERR_BUSY | -4 | 스폰이 이미 다른 크립을 생성 중입니다. |
ERR_NOT_ENOUGH_ENERGY | -6 | 지정한 바디로 크립을 만들 만큼 스폰 및 익스텐션에 에너지가 충분하지 않습니다. |
ERR_INVALID_ARGS | -10 | 바디가 올바르게 작성되지 않았습니다. |
ERR_RCL_NOT_ENOUGH | -14 | 이 스폰을 사용하기에 방 컨트롤러 레벨이 부족합니다. |
Game.spawns['Spawn1'].spawnCreep([WORK, CARRY, MOVE], 'Worker1');Game.spawns['Spawn1'].spawnCreep([WORK, CARRY, MOVE], 'Worker1', {
memory: {role: 'harvester'}
});Game.spawns['Spawn1'].spawnCreep([WORK, CARRY, MOVE], 'Worker1', {
energyStructures: [
Game.spawns['Spawn1'],
Game.getObjectById('anExtensionId')
]
});var testIfCanSpawn = Game.spawns['Spawn1'].spawnCreep([WORK, CARRY, MOVE],
'Worker1', { dryRun: true });크립 생성 과정을 시작합니다. 필요한 에너지는 해당 방의 모든 스폰과 익스텐션에서 인출될 수 있습니다.
| parameter | type | description |
|---|---|---|
body | array<string> | 새 크립의 바디를 설명하는 배열입니다. 1~50개의 요소를 가지며, 아래 상수 중 하나여야 합니다:
|
name | string | 새 크립의 이름입니다. 이름 길이 제한은 100자입니다. 유일한 크립 이름이어야 하며, 즉 |
optsoptional | object | 스폰 과정에 대한 추가 옵션 객체입니다.
|
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 스폰의 소유자가 아닙니다. |
ERR_NAME_EXISTS | -3 | 같은 이름의 크립이 이미 존재합니다. |
ERR_BUSY | -4 | 스폰이 이미 다른 크립을 생성 중입니다. |
ERR_NOT_ENOUGH_ENERGY | -6 | 지정한 바디로 크립을 만들 만큼 스폰 및 익스텐션에 에너지가 충분하지 않습니다. |
ERR_INVALID_ARGS | -10 | 바디가 올바르게 작성되지 않았거나 이름이 제공되지 않았습니다. |
ERR_RCL_NOT_ENOUGH | -14 | 이 스폰을 사용하기에 방 컨트롤러 레벨이 부족합니다. |
크립을 처치하고, 남은 수명에 따라 스폰 및 부스트에 사용된 자원을 최대 100%까지 반환(드롭)합니다. 대상은 인접한 칸에 있어야 합니다. 에너지 반환은 바디 파트 1개당 최대 125로 제한됩니다.
| parameter | type | description |
|---|---|---|
target | Creep | 대상 크립 객체입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 스폰 또는 대상 크립의 소유자가 아닙니다. |
ERR_INVALID_TARGET | -7 | 지정한 대상 객체가 크립이 아닙니다. |
ERR_NOT_IN_RANGE | -9 | 대상 크립이 너무 멀리 있습니다. |
ERR_RCL_NOT_ENOUGH | -14 | 이 스폰을 사용하기에 방 컨트롤러 레벨이 부족합니다. |
대상 크립의 남은 수명(Time to live)을 증가시킵니다. 대상은 인접한 칸에 있어야 합니다. 대상은 CLAIM 바디 파트를 가지면 안 됩니다. 스폰은 생성 중 상태가 아니어야 합니다. 실행 1회마다 크립 타이머는 아래 공식에 따라 틱 수만큼 증가합니다:
floor(600/body_size)각 실행에 필요한 에너지는 아래 공식으로 결정됩니다:
ceil(creep_cost/2.5/body_size)크립을 갱신하면 해당 크립의 모든 부스트가 제거됩니다.
| parameter | type | description |
|---|---|---|
target | Creep | 대상 크립 객체입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 스폰 또는 크립의 소유자가 아닙니다. |
ERR_BUSY | -4 | 스폰이 다른 크립을 생성 중입니다. |
ERR_NOT_ENOUGH_ENERGY | -6 | 스폰에 에너지가 충분하지 않습니다. |
ERR_INVALID_TARGET | -7 | 지정한 대상이 크립이 아니거나, 크립이 CLAIM 바디 파트를 가지고 있습니다. |
ERR_FULL | -8 | 대상 크립의 수명 타이머가 이미 최대입니다. |
ERR_NOT_IN_RANGE | -9 | 대상 크립이 너무 멀리 있습니다. |
ERR_RCL_NOT_ENOUGH | -14 | 이 스폰을 사용하기에 방 컨트롤러 레벨이 부족합니다. |
StructureSpawn.spawning 프로퍼티로 접근할 수 있는, 현재 스폰 중인 크립의 상세 정보입니다.
스폰 방향 배열입니다. StructureSpawn.Spawning.setDirections를 참고하세요.
새 크립의 이름입니다.
스폰 완료에 필요한 총 시간입니다.
남은 시간입니다.
스폰 구조물에 대한 링크입니다.
Game.spawns['Spawn1'].spawning.cancel();스폰을 즉시 취소합니다. 스폰에 사용한 에너지는 반환되지 않습니다.
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 스폰의 소유자가 아닙니다. |
Game.spawns['Spawn1'].spawning.setDirections([RIGHT, TOP_RIGHT]);크립이 스폰된 후 이동해야 하는 방향을 설정합니다.
| parameter | type | description |
|---|---|---|
directions | array<number> | 방향 상수 배열:
|
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 스폰의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 | directions 배열이 유효하지 않습니다. |

대량의 자원 유닛을 저장할 수 있는 구조물입니다. 룸당 1개만 건설할 수 있으며,
Room.storage 프로퍼티로 접근할 수 있습니다.
| Controller level | |
| 1-3 | — |
| 4-8 | 1 storage |
| Cost | 30,000 |
| Hits | 10,000 |
| Capacity | 1,000,000 |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.
This property is deprecated and will be removed soon.
.store.getCapacity()에 대한 별칭(alias)입니다.

다른 룸의 Terminal로 어떤 자원이든 보낼 수 있습니다. 목적지 Terminal은 어떤 플레이어의 것이어도 됩니다.
각 트랜잭션은(전송하는 자원 타입과 무관하게) 추가 에너지를 필요로 하며, Game.market.calcTransactionCost 메서드로 계산할 수 있습니다.
예를 들어 W0N0에서 W10N5로 미네랄 1000을 보내면 에너지 742를 소비합니다.
Game.market 오브젝트로 들어오고 나가는 트랜잭션을 추적할 수 있습니다.
룸당 Terminal은 하나만 허용되며 Room.terminal 프로퍼티로 접근할 수 있습니다.
Terminal은 마켓 시스템에서 사용됩니다.
| Controller level | |
| 1-5 | — |
| 6-8 | 1 terminal |
| Cost | 100,000 |
| Hits | 3,000 |
| Capacity | 300,000 |
| Cooldown on send | 10 ticks |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
이 터미널이 StructureTerminal.send 또는 Game.market.deal을 호출해 사용할 수 없게 남아 있는 틱 수입니다.
이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.
This property is deprecated and will be removed soon.
.store.getCapacity()에 대한 별칭(alias)입니다.
Game.rooms['W1N1'].terminal.send(RESOURCE_UTRIUM, 100, 'W2N3',
'trade contract #1');지정한 이름의 다른 룸 Terminal로 자원을 보냅니다.
| parameter | type | description |
|---|---|---|
resourceType | string |
|
amount | number | 보낼 자원 양. |
destination | string | 대상 룸 이름. 이 룸을 볼 필요는 없습니다. |
descriptionoptional | string | 트랜잭션 설명. 수신자에게 보입니다. 최대 길이는 100자입니다. |
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_NOT_ENOUGH_RESOURCES | -6 | 구조물에 필요한 자원이 충분하지 않습니다. |
ERR_INVALID_ARGS | -10 | 제공한 인자가 올바르지 않습니다. |
ERR_TIRED | -11 | 터미널이 아직 쿨다운 중입니다. |

원격으로 크립을 공격하거나 치료하거나, 구조물을 수리합니다. 룸 내 어떤 오브젝트든 대상으로 지정할 수 있습니다. 다만 효율은 거리와 선형적으로(linearly) 비례합니다. 각 액션은 에너지를 소비합니다.
| Controller level | |
| 1-2 | — |
| 3-4 | 1 tower |
| 5-6 | 2 towers |
| 7 | 3 towers |
| 8 | 6 towers |
| Cost | 5,000 |
| Hits | 3,000 |
| Capacity | 1,000 |
| Energy per action | 10 |
| Attack effectiveness | 사거리 ≤5: 600 hits, 사거리 ≥20: 150 hits |
| Heal effectiveness | 사거리 ≤5: 400 hits, 사거리 ≥20: 100 hits |
| Repair effectiveness | 사거리 ≤5: 800 hits, 사거리 ≥20: 200 hits |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|
이 구조물이 내 소유인지 여부입니다.
구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:
| parameter | type | description |
|---|---|---|
username | string | 소유자 유저 이름입니다. |
This property is deprecated and will be removed soon.
.store[RESOURCE_ENERGY]에 대한 별칭(alias)입니다.
This property is deprecated and will be removed soon.
.store.getCapacity(RESOURCE_ENERGY)에 대한 별칭(alias)입니다.
if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
creep.transfer(structure, RESOURCE_ENERGY);
}이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.
룸 안의 어떤 creep / power creep / structure든 원격 공격합니다.
| parameter | type | description |
|---|---|---|
target | Creep, PowerCreep, Structure | 대상 오브젝트. |
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_NOT_ENOUGH_ENERGY | -6 | 타워에 에너지가 충분하지 않습니다. |
ERR_INVALID_TARGET | -7 | 대상이 유효한 공격 대상 오브젝트가 아닙니다. |
ERR_RCL_NOT_ENOUGH | -14 | 이 구조물을 사용하기에 Room Controller Level이 부족합니다. |
룸 안의 어떤 creep 또는 power creep이든 원격 치료합니다.
| parameter | type | description |
|---|---|---|
target | Creep, PowerCreep | 대상 오브젝트. |
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_NOT_ENOUGH_ENERGY | -6 | 타워에 에너지가 충분하지 않습니다. |
ERR_INVALID_TARGET | -7 | 대상이 유효한 creep 오브젝트가 아닙니다. |
ERR_RCL_NOT_ENOUGH | -14 | 이 구조물을 사용하기에 Room Controller Level이 부족합니다. |
룸 안의 어떤 구조물이든 원격 수리합니다.
| parameter | type | description |
|---|---|---|
target | Structure | 대상 구조물. |
다음 코드 중 하나:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_NOT_ENOUGH_ENERGY | -6 | 타워에 에너지가 충분하지 않습니다. |
ERR_INVALID_TARGET | -7 | 대상이 유효한 수리 대상 오브젝트가 아닙니다. |
ERR_RCL_NOT_ENOUGH | -14 | 이 구조물을 사용하기에 Room Controller Level이 부족합니다. |

모든 크립의 이동을 막습니다.
플레이어는 컨트롤 중인 룸에 파괴 가능한 벽을 건설할 수 있습니다.
일부 룸에는 초보자/리스폰 지역을 나머지 월드로부터 분리하거나, 초보자/리스폰 지역을 더 작은 구역으로 나누는 파괴 불가능한 벽도 존재합니다. 파괴 불가능한 벽에는 hits 프로퍼티가 없습니다.
| Controller level | 2 |
| Cost | 1 |
| Hits when constructed | 1 |
| Max hits | 300,000,000 |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
구조물의 현재 체력(hits)입니다.
구조물의 총 체력(hits)입니다.
고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.
STRUCTURE_* 상수 중 하나입니다.
이 구조물을 즉시 파괴합니다.
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_BUSY | -4 | 방 안에 적 크립이 있습니다. |
이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.
불리언 값을 반환합니다.
구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.
| parameter | type | description |
|---|---|---|
enabled | boolean | 알림을 켤지/끌지 여부입니다. |
다음 코드 중 하나를 반환합니다:
| constant | value | description |
|---|---|---|
OK | 0 | 작업이 성공적으로 예약되었습니다. |
ERR_NOT_OWNER | -1 | 이 구조물의 소유자가 아닙니다. |
ERR_INVALID_ARGS | -10 |
|

죽은 크립의 흔적입니다. 이동 가능한(walkable) 오브젝트입니다.
| Decay | 사망한 크립의 바디 파트 1개당 5틱 |
적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:
| parameter | type | description |
|---|---|---|
effect | number | 적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다. |
leveloptional | number | 적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다. |
ticksRemaining | number | 효과가 지속될 남은 틱 수입니다. |
이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.
Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.
room.find(FIND_TOMBSTONES).forEach(tombstone => {
if(tombstone.creep.my) {
console.log(`My creep died with ID=${tombstone.creep.id} ` +
`and role=${Memory.creeps[tombstone.creep.name].role}`);
}
});room.find(FIND_TOMBSTONES).forEach(tombstone => {
if(tombstone.creep instanceof PowerCreep) {
console.log(`Power creep died here`);
}
});
`사망한 creep 또는 power creep을 담고 있는 오브젝트입니다.
사망 시각입니다.
고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.
이 구조물의 적재물을 담는 Store 오브젝트입니다.
이 tombstone이 붕괴(decay)되기까지 남은 게임 틱 수입니다.