메뉴
문서로 돌아가기

Game

게임플레이에 관한 모든 정보를 담고 있는 주요 전역 게임 객체입니다.

Game.constructionSitesobject<string, ConstructionSite>

ID를 해시 키로 하여, 내 모든 건설 현장을 담고 있는 해시입니다.

Game.cpuobject

CPU 사용량 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
limitnumber

현재 샤드에 할당된 CPU 한도입니다.

tickLimitnumber

현재 게임 틱에서 사용할 수 있는 CPU 시간의 양입니다.
보통 Game.cpu.limit보다 큽니다. 자세히 보기

bucketnumber

버킷에 누적된 미사용 CPU의 양입니다.

shardLimitsobject
<string,number>

샤드 이름을 키로 하여 각 샤드의 한도를 담고 있는 객체입니다. setShardLimits 메서드를 사용해 다시 할당할 수 있습니다.

unlockedboolean

현재 계정에서 전체 CPU가 잠금 해제되어 있는지 여부입니다.

unlockedTimenumber

계정의 전체 CPU 잠금 해제가 유지되는 시각으로, UNIX epoch 이후 밀리초로 표현됩니다. 계정에서 전체 CPU가 잠금 해제되어 있지 않거나, 구독으로 잠금 해제된 경우 이 속성은 정의되지 않습니다.

Game.creepsobject<string, Creep>

for(const i in Game.creeps) {
    Game.creeps[i].moveTo(flag);
}

크립 이름을 해시 키로 하여, 내 모든 크립을 담고 있는 해시입니다.

Game.flagsobject<string, Flag>

creep.moveTo(Game.flags.Flag1);

플래그 이름을 해시 키로 하여, 내 모든 플래그를 담고 있는 해시입니다.

Game.gclobject

글로벌 컨트롤 레벨이며, 다음 속성을 가진 객체입니다:

parametertypedescription
levelnumber

현재 레벨입니다.

progressnumber

다음 레벨까지의 현재 진행도입니다.

progressTotalnumber

다음 레벨에 도달하는 데 필요한 진행도입니다.

Game.gplobject

내 글로벌 파워 레벨이며, 다음 속성을 가진 객체입니다:

parametertypedescription
levelnumber

현재 레벨입니다.

progressnumber

다음 레벨까지의 현재 진행도입니다.

progressTotalnumber

다음 레벨에 도달하는 데 필요한 진행도입니다.

Game.mapobject

월드 맵을 나타내는 전역 객체입니다. 아래의 문서를 참고하세요.

Game.marketobject

게임 내 마켓을 나타내는 전역 객체입니다. 아래의 문서를 참고하세요.

Game.powerCreepsobject<string, PowerCreep>

Game.powerCreeps['PC1'].moveTo(flag);

이름을 해시 키로 하여 내 모든 파워 크립을 담고 있는 해시입니다. 월드에 아직 스폰되지 않은 파워 크립도 여기에서 접근할 수 있습니다.

Game.resourcesobject

픽셀이나 CPU 언락 같은, 계정에 귀속된 전역 리소스를 담는 객체입니다. 각 키는 리소스 상수이며, 값은 해당 리소스의 보유량입니다.

Game.roomsobject<string, Room>

방 이름을 해시 키로 하여, 내가 접근 가능한 모든 방을 담고 있는 해시입니다. 해당 방에 내 크립이 있거나 내가 소유한 구조물이 있으면 방은 “보이는” 상태가 됩니다.

Game.shardobject

현재 스크립트가 실행 중인 월드 샤드 정보를 설명하는 객체입니다.

parametertypedescription
namestring

샤드 이름입니다.

typestring

현재는 항상 normal입니다.

ptrboolean

이 샤드가 PTR에 속하는지 여부입니다.

Game.spawnsobject<string, StructureSpawn>

for(const i in Game.spawns) {
    Game.spawns[i].createCreep(body);
}

스폰 이름을 해시 키로 하여, 내 모든 스폰을 담고 있는 해시입니다.

Game.structuresobject<string, Structure>

구조물 ID를 해시 키로 하여, 내 모든 구조물을 담고 있는 해시입니다.

Game.timenumber

console.log(Game.time);

시스템 게임 틱 카운터입니다. 매 틱마다 자동으로 1씩 증가합니다. 자세히 보기

Game.cpu.getHeapStatistics()

let heap = Game.cpu.getHeapStatistics();
console.log(`Used ${heap.total_heap_size} / ${heap.heap_size_limit}`);

이 메서드는 계정 런타임 설정에서 Virtual machineIsolated로 설정된 경우에만 사용할 수 있습니다.

이 메서드를 사용하면 가상 머신의 힙 통계를 얻을 수 있습니다. 반환 값은 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
}

Game.cpu.getUsed()

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()

Game.cpu.halt();

이 메서드는 계정 런타임 설정에서 Virtual machineIsolated로 설정된 경우에만 사용할 수 있습니다.

런타임 환경을 리셋하고 힙 메모리의 모든 데이터를 삭제합니다.

Game.cpu.setShardLimits(limits)

Game.cpu.setShardLimits({shard0: 20, shard1: 10});

샤드별 CPU 한도를 할당합니다. CPU 총량은 Game.cpu.shardLimits와 동일하게 유지되어야 합니다. 이 메서드는 12시간에 한 번만 사용할 수 있습니다.

parametertypedescription
limitsobject<string, number>

Game.cpu.shardLimits와 같은 형식으로, 각 샤드의 CPU 값을 담은 객체입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_BUSY-4

12시간 쿨다운이 아직 끝나지 않았습니다.

ERR_INVALID_ARGS-10

인자가 올바른 샤드 한도 객체가 아닙니다.

Game.cpu.unlock()

if(Game.cpu.unlockedTime && ((Game.cpu.unlockedTime - Date.now()) < 1000*60*60*24)) {
    Game.cpu.unlock();
}

계정의 전체 CPU를 추가로 24시간 동안 잠금 해제합니다. 이 메서드는 계정에 귀속된 CPU 언락 리소스 1개를 소비합니다(참고: Game.resources). 현재 계정에서 전체 CPU가 잠금 해제되어 있지 않다면, 실제로 잠금 해제가 적용되기까지 시간이 조금 걸릴 수 있습니다(최대 5분).

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_ENOUGH_RESOURCES-6

계정에 cpuUnlock 리소스가 충분하지 않습니다.

ERR_FULL-8

구독으로 CPU가 잠금 해제되어 있습니다.

Game.cpu.generatePixel()

if(Game.cpu.bucket == 10000) {
    Game.cpu.generatePixel();
}

버킷에서 CPU 10000을 사용해 픽셀 리소스 1개를 생성합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_ENOUGH_RESOURCES-6

버킷에 CPU가 충분하지 않습니다.

Game.getObjectById(id)

creep.memory.sourceId = creep.pos.findClosestByRange(FIND_SOURCES).id;
const source = Game.getObjectById(creep.memory.sourceId);

지정한 고유 ID를 가진 객체를 가져옵니다. 어떤 타입의 게임 객체든 될 수 있습니다. 내가 볼 수 있는 방에 있는 객체만 접근할 수 있습니다.

parametertypedescription
idstring

고유 식별자입니다.

반환 값

객체 인스턴스를 반환하며, 찾을 수 없으면 null을 반환합니다.

Game.notify(message, [groupInterval])

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개의 알림을 예약할 수 있습니다. 시뮬레이션 룸에서는 사용할 수 없습니다.

parametertypedescription
messagestring

메시지로 보낼 사용자 정의 텍스트입니다. 최대 길이는 1000자입니다.

groupIntervalnumber

0(기본값)으로 설정하면 알림이 즉시 예약됩니다. 0이 아니면, 다른 알림들과 함께 그룹화되어 나중에 발송되며, 이 값은 분 단위 시간입니다.

InterShardMemory

InterShardMemory 오브젝트는 샤드 간 통신을 위한 인터페이스를 제공합니다. 스크립트는 각 샤드에서 서로 분리되어 실행되며, 각 샤드의 Memory 오브젝트도 서로 격리되어 있습니다. 샤드 사이에 메시지/데이터를 전달하려면 InterShardMemory를 사용해야 합니다.

각 샤드는 문자열 형식의 데이터를 최대 100KB까지 가질 수 있으며, 다른 모든 샤드에서 접근할 수 있습니다. 다만 샤드는 자기 자신의 데이터에만 쓸 수 있고, 다른 샤드의 데이터는 읽기 전용입니다.

이 데이터는 Memory 내용과 무관하며, 별도의 데이터 컨테이너입니다.

InterShardMemory.getLocal()

현재 샤드 데이터의 문자열 내용을 반환합니다.

InterShardMemory.setLocal(value)

var data = JSON.parse(InterShardMemory.getLocal() || "{}");
data.message = "hello from another shard!";
InterShardMemory.setLocal(JSON.stringify(data));

현재 샤드 데이터를 새 값으로 교체합니다.

parametertypedescription
valuestring

문자열 형식의 새 데이터 값.

InterShardMemory.getRemote(shard)

var data = JSON.parse(InterShardMemory.getRemote('shard0') || "{}");
console.log(data.message);

다른 샤드 데이터의 문자열 내용을 반환합니다.

parametertypedescription
shardstring

샤드 이름.

Game.map

월드 맵을 나타내는 전역 객체입니다. 방 사이를 이동/탐색할 때 사용합니다.

Game.map.describeExits(roomName)

const exits = Game.map.describeExits('W8N3');

지정한 이름의 방에서 이용 가능한 모든 출구를 나열합니다.

parametertypedescription
roomNamestring

방 이름입니다.

반환 값

아래 형식의 출구 정보이며, 방을 찾을 수 없으면 null을 반환합니다.

{
    "1": "W8N4",    // TOP
    "3": "W7N3",    // RIGHT
    "5": "W8N2",    // BOTTOM
    "7": "W9N3"     // LEFT
}

Game.map.findExit(fromRoom, toRoom, [opts])

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));

지정한 방에서 다른 방으로 가는 경로 상에서, 나가야 할 출구 방향을 찾습니다.

parametertypedescription
fromRoomstring, Room

시작 방 이름 또는 Room 객체입니다.

toRoomstring, Room

도착 방 이름 또는 Room 객체입니다.

opts
optional
object

경로 탐색 옵션 객체입니다. findRoute를 참고하세요.

반환 값

아래 중 하나의 방 방향 상수를 반환합니다:

또는 아래 오류 코드 중 하나를 반환합니다:

constantvaluedescription
ERR_NO_PATH-2

경로를 찾을 수 없습니다.

ERR_INVALID_ARGS-10

위치 정보가 올바르지 않습니다.

Game.map.findRoute(fromRoom, toRoom, [opts])

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);

지정한 방에서 다른 방까지의 라우트를 찾습니다.

parametertypedescription
fromRoomstring, Room

시작 방 이름 또는 Room 객체입니다.

toRoomstring, Room

도착 방 이름 또는 Room 객체입니다.

opts
optional
object

다음 옵션을 가질 수 있는 객체입니다:

  • routeCallback
    function
    이 콜백은 function(roomName, fromRoomName) 형태로 두 인자를 받습니다. 해당 방으로 “진입”하는 비용을 계산하는 데 사용할 수 있습니다. 예를 들어 내 방을 우선시하거나 특정 방을 회피할 수 있습니다. 부동소수점 비용을 반환하거나, Infinity를 반환해 해당 방을 차단할 수 있습니다.

반환 값

아래 형식의 라우트 배열을 반환합니다:

[
    { exit: FIND_EXIT_RIGHT, room: 'arena21' },
    { exit: FIND_EXIT_BOTTOM, room: 'arena22' },
    ...
]

또는 아래 오류 코드 중 하나를 반환합니다:

constantvaluedescription
ERR_NO_PATH-2

경로를 찾을 수 없습니다.

Game.map.getRoomLinearDistance(roomName1, roomName2, [continuous])

Game.map.getRoomLinearDistance('W1N1', 'W4N2'); // 3
Game.map.getRoomLinearDistance('E65S55','W65S55', false) // 131
Game.map.getRoomLinearDistance('E65S55','W65S55', true) // 11

두 방 사이의 직선 거리(방 단위)를 구합니다. 이 함수로 터미널을 통한 자원 전송 비용을 대략 추정하거나, 옵저버/핵 사용 거리를 가늠할 수 있습니다.

parametertypedescription
roomName1string

첫 번째 방의 이름입니다.

roomName2string

두 번째 방의 이름입니다.

continuous
optional
boolean

월드 맵의 경계를 이어진(continuous) 것으로 취급할지 여부입니다. 거래나 터미널 전송 비용을 계산하고 싶다면 true로 설정하세요. 기본값은 false입니다.

반환 값

두 방 사이의 방 개수(거리)를 숫자로 반환합니다.

Game.map.getRoomTerrain(roomName)

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 객체를 가져옵니다. 이 메서드는 내가 접근할 수 없는 방을 포함해, 월드의 어떤 방에도 동작합니다.

parametertypedescription
roomNamestring

방 이름입니다.

반환 값

Room.Terrain 객체를 반환합니다.

Game.map.getTerrainAt(x, y, roomName)
(pos)

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'));

지정한 방 좌표에서의 지형 타입을 가져옵니다. 이 메서드는 내가 접근할 수 없는 방을 포함해, 월드의 어떤 방에도 동작합니다.

parametertypedescription
xnumber

방 내부의 X 좌표입니다.

ynumber

방 내부의 Y 좌표입니다.

roomNamestring

방 이름입니다.

posRoomPosition

위치 객체입니다.

반환 값

아래 문자열 값 중 하나를 반환합니다:

Game.map.getWorldSize()

월드 모서리 사이의 방 개수로 월드 크기를 반환합니다. 예를 들어 W50N50부터 E50S50까지의 방이 있는 월드에서는 이 메서드가 102를 반환합니다.

Game.map.isRoomAvailable(roomName)

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));
}

해당 방으로 이동이 가능한지 확인합니다.

parametertypedescription
roomNamestring

방 이름입니다.

반환 값

불리언 값을 반환합니다.

Game.map.getRoomStatus(roomName)

if(Game.map.getRoomStatus(room.name).status == 'normal') {
    nuker.launchNuke(room.getPositionAt(25,25));
}

지정한 이름의 방에 대한 “가용 상태”를 가져옵니다. 시작 구역에 대해 더 알아보려면 이 문서를 참고하세요.

parametertypedescription
roomNamestring

방 이름입니다.

반환 값

다음 속성을 포함하는 객체를 반환합니다:

property type description
status string 아래 문자열 값 중 하나입니다:
  • normal – 제한이 없는 방
  • closed – 이용할 수 없는 방
  • novice – 초보 구역(novice area)의 일부인 방
  • respawn – 리스폰 구역(respawn area)의 일부인 방
timestamp number 상태 만료 시각으로, UNIX epoch 이후 밀리초로 표현됩니다. 상태가 영구적이라면 이 속성은 null입니다.

Game.map.visual

맵 비주얼(Map visuals)은 게임 맵 위에 다양한 시각적 디버그 정보를 표시하는 방법을 제공합니다. Game.map.visual 객체를 사용해 본인에게만 보이는 간단한 도형을 그릴 수 있습니다.

맵 비주얼은 데이터베이스에 저장되지 않으며, 오직 브라우저에 표시하는 것이 목적입니다. 모든 그림은 1틱 동안만 유지되며, 다음 틱에서 업데이트하지 않으면 사라집니다. 모든 Game.map.visual 호출은 추가 CPU 비용이 없습니다(비용은 자연 비용이며, 주로 간단한 JSON.serialize 호출과 관련됩니다). 다만 사용량 제한이 있습니다: 직렬화된 데이터는 1000 KB를 초과하여 게시할 수 없습니다.

모든 좌표는 전역 게임 좌표(RoomPosition)로 측정합니다.

line(pos1, pos2, [style])

Game.map.visual.line(creep.pos, target.pos,
    {color: '#ff0000', lineStyle: 'dashed'});

선을 그립니다.

parametertypedescription
pos1RoomPosition

시작 위치 객체입니다.

pos2RoomPosition

끝 위치 객체입니다.

style
optional
object

다음 속성을 가진 객체입니다:

  • width
    number
    선 두께이며 기본값은 0.1입니다.
  • color
    string
    선 색상입니다. #ffffff(16진수 트리플릿) 형식입니다. 기본값은 #ffffff입니다.
  • opacity
    number
    불투명도 값이며 기본값은 0.5입니다.
  • lineStyle
    string
    undefined(실선), dashed, dotted 중 하나입니다. 기본값은 undefined입니다.

반환 값

메서드 체이닝을 할 수 있도록 MapVisual 객체 자기 자신을 반환합니다.

circle(pos, [style])

Game.map.visual.circle(new RoomPosition(25,25,'E2S7'));
Game.map.visual.circle(nuker.pos, {fill: 'transparent', radius: NUKE_RANGE*50, stroke: '#ff0000'});

원을 그립니다.

parametertypedescription
posRoomPosition

중심의 위치 객체입니다.

style
optional
object

다음 속성을 가진 객체입니다:

  • radius
    number
    원의 반지름이며 기본값은 10입니다.
  • fill
    string
    채우기 색상입니다. #ffffff(16진수 트리플릿) 형식입니다. 기본값은 #ffffff입니다.
  • opacity
    number
    불투명도 값이며 기본값은 0.5입니다.
  • stroke
    string
    외곽선 색상입니다. #ffffff(16진수 트리플릿) 형식입니다. 기본값은 undefined(외곽선 없음)입니다.
  • strokeWidth
    number
    외곽선 두께이며 기본값은 0.5입니다.
  • lineStyle
    string
    undefined(실선), dashed, dotted 중 하나입니다. 기본값은 undefined입니다.

반환 값

메서드 체이닝을 할 수 있도록 MapVisual 객체 자기 자신을 반환합니다.

rect(topLeftPos, width, height, [style])

// 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'});

사각형을 그립니다.

parametertypedescription
topLeftPosRoomPosition

좌상단 모서리의 위치 객체입니다.

widthnumber

사각형의 너비입니다.

heightnumber

사각형의 높이입니다.

style
optional
object

다음 속성을 가진 객체입니다:

  • fill
    string
    채우기 색상입니다. #ffffff(16진수 트리플릿) 형식입니다. 기본값은 #ffffff입니다.
  • opacity
    number
    불투명도 값이며 기본값은 0.5입니다.
  • stroke
    string
    외곽선 색상입니다. #ffffff(16진수 트리플릿) 형식입니다. 기본값은 undefined(외곽선 없음)입니다.
  • strokeWidth
    number
    외곽선 두께이며 기본값은 0.5입니다.
  • lineStyle
    string
    undefined(실선), dashed, dotted 중 하나입니다. 기본값은 undefined입니다.

반환 값

메서드 체이닝을 할 수 있도록 MapVisual 객체 자기 자신을 반환합니다.

poly(points, [style])

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'});

폴리라인을 그립니다.

parametertypedescription
pointsarray

점들의 배열입니다. 각 요소는 RoomPosition 객체여야 합니다.

style
optional
object

다음 속성을 가진 객체입니다:

  • fill
    string
    채우기 색상입니다. #ffffff(16진수 트리플릿) 형식입니다. 기본값은 undefined(채우기 없음)입니다.
  • opacity
    number
    불투명도 값이며 기본값은 0.5입니다.
  • stroke
    string
    외곽선 색상입니다. #ffffff(16진수 트리플릿) 형식입니다. 기본값은 #ffffff입니다.
  • strokeWidth
    number
    외곽선 두께이며 기본값은 0.5입니다.
  • lineStyle
    string
    undefined(실선), dashed, dotted 중 하나입니다. 기본값은 undefined입니다.

반환 값

메서드 체이닝을 할 수 있도록 MapVisual 객체 자기 자신을 반환합니다.

text(text, pos, [style])

Game.map.visual.text("Target💥", new RoomPosition(11,14,'E2S7'), {color: '#FF0000', fontSize: 10}); 

텍스트 라벨을 그립니다. 이모지를 포함해, 유효한 모든 유니코드 문자를 사용할 수 있습니다.

parametertypedescription
textstring

텍스트 메시지입니다.

posRoomPosition

라벨 기준선(baseline)의 위치 객체입니다.

style
optional
object

다음 속성을 가진 객체입니다:

  • color
    string
    글꼴 색상입니다. #ffffff(16진수 트리플릿) 형식입니다. 기본값은 #ffffff입니다.
  • fontFamily
    string
    글꼴 패밀리이며 기본값은 sans-serif입니다.
  • fontSize
    number
    게임 좌표 기준 글꼴 크기이며 기본값은 10입니다.
  • fontStyle
    string
    글꼴 스타일입니다(normal, italic, oblique).
  • fontVariant
    string
    글꼴 변형입니다(normal 또는 small-caps).
  • stroke
    string
    외곽선 색상입니다. #ffffff(16진수 트리플릿) 형식입니다. 기본값은 undefined(외곽선 없음)입니다.
  • strokeWidth
    number
    외곽선 두께이며 기본값은 0.15입니다.
  • backgroundColor
    string
    배경색입니다. #ffffff(16진수 트리플릿) 형식입니다. 기본값은 undefined(배경 없음)입니다. 배경을 켜면 텍스트 세로 정렬이 middle로 설정됩니다(기본은 baseline).
  • backgroundPadding
    number
    배경 사각형의 여백(padding)이며 기본값은 2입니다.
  • align
    string
    텍스트 정렬입니다. center, left, right 중 하나이며 기본값은 center입니다.
  • opacity
    number
    불투명도 값이며 기본값은 0.5입니다.

반환 값

메서드 체이닝을 할 수 있도록 MapVisual 객체 자기 자신을 반환합니다.

clear()

Game.map.visual.clear();

맵에서 모든 비주얼을 제거합니다.

반환 값

메서드 체이닝을 할 수 있도록 MapVisual 객체 자기 자신을 반환합니다.

getSize()

if(Game.map.visual.getSize() >= 1024000) {
    // cannot add more visuals in this tick
}

현재 틱에서 맵에 추가된 모든 비주얼 데이터의 저장 크기를 가져옵니다. 이 값은 1024,000(1000 KB)을 초과하면 안 됩니다.

반환 값

비주얼의 크기를 바이트 단위로 반환합니다.

export()

Memory.MapVisualData = Game.map.visual.export();

현재 틱에서 맵에 추가된 모든 비주얼을 압축된 형태로 반환합니다.

반환 값

비주얼 데이터가 담긴 문자열입니다. 이 문자열로 할 수 있는 일은 많지 않으며, 보통 나중을 위해 저장하는 용도로 사용합니다.

import(val)

Game.map.visual.import(Memory.MapVisualData);

이전에(Game.map.visual.export로) 내보낸 맵 비주얼을 현재 틱의 맵 비주얼 데이터에 추가합니다.

parametertypedescription
valstring

Game.map.visual.export에서 반환된 문자열입니다.

반환 값

메서드 체이닝을 할 수 있도록 MapVisual 객체 자기 자신을 반환합니다.

Game.market

게임 내 마켓을 나타내는 전역 객체입니다. 이 객체를 사용해 터미널로 들어오고 나가는 자원 거래 내역과, 내 매수/매도 주문을 추적할 수 있습니다.

마켓 시스템에 대해 더 알아보려면 이 문서를 참고하세요.

Game.market.creditsnumber

현재 크레딧 잔액입니다.

Game.market.incomingTransactionsarray

[{
    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개의 거래를 담은 배열이며, 형식은 위와 같습니다.

Game.market.outgoingTransactionsarray

[{
    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개의 거래를 담은 배열이며, 형식은 위와 같습니다.

Game.market.ordersobject

{
    "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 를 참고하세요.

Game.market.calcTransactionCost(amount, roomName1, roomName2)

const cost = Game.market.calcTransactionCost(1000, 'W0N0', 'W10N5');
// -> 284 energy units

StructureTerminal.sendGame.market.deal 메서드에서의 에너지 전송 비용을 추정합니다. 공식은 다음과 같습니다:

Math.ceil( amount * ( 1 - Math.exp(-distanceBetweenRooms/30) ) )
parametertypedescription
amountnumber

전송할 자원량입니다.

roomName1string

첫 번째 방의 이름입니다.

roomName2string

두 번째 방의 이름입니다.

반환 값

거래를 수행하는 데 필요한 에너지량입니다.

Game.market.cancelOrder(orderId)

for(const id in Game.market.orders) {
    Game.market.cancelOrder(id);
}

이전에 생성한 주문을 취소합니다. 5% 수수료는 반환되지 않습니다.

parametertypedescription
orderIdstring

Game.market.orders에 제공되는 주문 ID입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_INVALID_ARGS-10

주문 ID가 올바르지 않습니다.

Game.market.changeOrderPrice(orderId, newPrice)

Game.market.changeOrderPrice('57bec1bf77f4d17c4c011960', 9.95);

기존 주문의 가격을 변경합니다. newPrice가 기존 가격보다 크면 (newPrice-oldPrice)*remainingAmount*0.05 크레딧이 수수료로 청구됩니다.

parametertypedescription
orderIdstring

Game.market.orders에 제공되는 주문 ID입니다.

newPricenumber

새 주문 가격입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

해당 방의 터미널 소유자가 아니거나 터미널이 없습니다.

ERR_NOT_ENOUGH_RESOURCES-6

수수료를 낼 크레딧이 부족합니다.

ERR_INVALID_ARGS-10

제공된 인자가 올바르지 않습니다.

Game.market.createOrder(params)

Game.market.createOrder({
    type: ORDER_SELL,
    resourceType: RESOURCE_GHODIUM,
    price: 9.95,
    totalAmount: 10000,
    roomName: "W1N1"   
});

터미널에 마켓 주문을 생성합니다. 주문을 등록할 때 price*amount*0.05 크레딧이 수수료로 청구됩니다. 플레이어당 최대 주문 수는 300개입니다. 주문은 언제든 어떤 수량으로든 만들 수 있으며, 자원/크레딧 가용성에 따라 자동으로 활성/비활성 상태가 전환됩니다.

parametertypedescription
paramsobject

다음 파라미터를 가진 객체입니다:

  • type
    string
    주문 타입이며 ORDER_SELL 또는 ORDER_BUY입니다.
  • resourceType
    string
    RESOURCE_* 상수 중 하나이거나, 계정 귀속 리소스 중 하나입니다(INTERSHARD_RESOURCES 상수 참고). 터미널에 해당 리소스가 없으면 주문은 일시적으로 비활성 상태가 됩니다.
  • price
    number
    자원 1개당 가격(크레딧)입니다. 소수 값을 사용할 수 있습니다.
  • totalAmount
    number
    총 거래할 자원량입니다.
  • roomName (optional)
    string
    주문을 생성할 방입니다. 이 방에는 내 터미널 구조물이 있어야 하며, 그렇지 않으면 생성된 주문은 일시적으로 비활성 상태가 됩니다. resourceType이 계정 귀속 리소스(INTERSHARD_RESOURCES 참고)인 경우에는 이 인자를 사용하지 않습니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

해당 방의 터미널 소유자가 아니거나 터미널이 없습니다.

ERR_NOT_ENOUGH_RESOURCES-6

수수료를 낼 크레딧이 부족합니다.

ERR_FULL-8

50개를 초과하여 주문을 생성할 수 없습니다.

ERR_INVALID_ARGS-10

제공된 인자가 올바르지 않습니다.

Game.market.deal(orderId, amount, [yourRoomName])

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을 실행할 수 없습니다.

parametertypedescription
orderIdstring

Game.market.getAllOrders에서 제공되는 주문 ID입니다.

amountnumber

전송할 자원량입니다.

yourRoomName
optional
string

활성화된 터미널이 존재하고 에너지가 충분한 내 방의 이름입니다. 주문의 자원 타입이 계정 귀속 리소스(INTERSHARD_RESOURCES 참고)인 경우에는 이 인자를 사용하지 않습니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

대상 방에 내 터미널이 없습니다.

ERR_NOT_ENOUGH_RESOURCES-6

크레딧 또는 자원 수량이 부족합니다.

ERR_FULL-8

한 틱에 10건을 초과하여 deal을 실행할 수 없습니다.

ERR_INVALID_ARGS-10

제공된 인자가 올바르지 않습니다.

ERR_TIRED-11

대상 터미널이 아직 쿨다운 중입니다.

Game.market.extendOrder(orderId, addAmount)

Game.market.extendOrder('57bec1bf77f4d17c4c011960', 10000);

기존 주문의 용량을 늘립니다. 이는 remainingAmounttotalAmount 속성에 영향을 줍니다. price*addAmount*0.05 크레딧이 수수료로 청구됩니다.

parametertypedescription
orderIdstring

Game.market.orders에 제공되는 주문 ID입니다.

addAmountnumber

추가할 용량입니다. 음수일 수 없습니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_ENOUGH_RESOURCES-6

수수료를 낼 크레딧이 부족합니다.

ERR_INVALID_ARGS-10

제공된 인자가 올바르지 않습니다.

Game.market.getAllOrders([filter])

Game.market.getAllOrders(); // slow
Game.market.getAllOrders({type: ORDER_SELL, resourceType: RESOURCE_GHODIUM}); // fast
const 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에 대한 내부 인덱싱을 지원합니다.

parametertypedescription
filter
optional
object, function

lodash.filter 메서드를 사용해 결과 목록을 필터링할 객체 또는 함수입니다.

반환 값

아래 형태의 주문 배열을 반환합니다:

property description
id 고유한 주문 ID입니다.
created 게임 틱 기준 주문 생성 시각입니다. 인터샤드 마켓 주문에는 이 속성이 없습니다.
createdTimestamp 주문 생성 시각으로, UNIX epoch 이후 밀리초로 표현됩니다. 오래된 주문에는 이 속성이 없을 수 있습니다.
type ORDER_SELL 또는 ORDER_BUY입니다.
resourceType RESOURCE_* 상수 중 하나이거나, 계정 귀속 리소스 중 하나입니다(INTERSHARD_RESOURCES 상수 참고).
roomName 이 주문이 등록된 방입니다.
amount 현재 거래 가능한 수량입니다.
remainingAmount 이 주문으로 앞으로 더 거래할 수 있는 자원량입니다.
price 현재 단가입니다.

Game.market.getHistory([resourceType])

최근 14일 동안, 지정한 리소스의 일별 가격 히스토리를 가져옵니다.

parametertypedescription
resourceType
optional
string

RESOURCE_* 상수 중 하나입니다. undefined이면 모든 리소스에 대한 히스토리를 반환합니다.

반환 값

아래 형식의 객체 배열을 반환합니다:

[{
    "resourceType": "L",
    "date": "2019-06-24",
    "transactions": 4,
    "volume": 400,
    "avgPrice": 3.63,
    "stddevPrice": 0.27
}]    

Game.market.getOrderById(id)

const order = Game.market.getOrderById('55c34a6b5be41a0a6e80c123');

특정 마켓 주문의 정보를 가져옵니다.

parametertypedescription
idstring

주문 ID입니다.

반환 값

주문 정보가 담긴 객체입니다. 속성 설명은 getAllOrders 를 참고하세요.

Memory

임의의 데이터를 담을 수 있는 전역 평범한 오브젝트입니다. API와 게임 에디터의 Memory UI 양쪽에서 접근할 수 있습니다. Memory 사용 방법은 이 문서를 참고하세요.

PathFinder

게임 월드에서 경로 탐색(pathfinding)을 위한 강력한 메서드들을 제공합니다. 이 모듈은 빠른 네이티브 C++ 코드로 작성되었으며, 커스텀 이동 비용과 여러 룸에 걸친 경로를 지원합니다.

PathFinder.search(origin, goal, [opts])

  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));

origingoal 사이의 최적 경로를 찾습니다.

parametertypedescription
originRoomPosition

시작 위치.

goalobject

goal 하나 또는 goal 배열입니다. goal이 여러 개라면, 그 중에서 가장 저렴한(비용이 낮은) 경로가 반환됩니다. goal은 RoomPosition이거나 아래에 정의된 오브젝트입니다.

중요: 목표가 걸을 수 없는 대상(예: source)이라면, range를 최소 1로 설정해야 합니다. 그렇지 않으면 걸어갈 수 없는 타깃을 찾느라 많은 CPU를 낭비할 수 있습니다.

  • pos
    대상.
  • range
    number
    goal로 간주되기 전까지 pos에 도달해야 하는 거리. 기본값은 0입니다.

opts
optional
object

추가 경로 탐색 플래그를 담은 오브젝트입니다.

  • roomCallback
    function
    경로 탐색기가 특정 룸에 대한 CostMatrix 생성을 요청할 때 호출됩니다. 콜백은 roomName 인자 하나를 받습니다. 이 콜백은 검색(search)당 룸별로 한 번만 호출됩니다. 같은 룸에서 같은 틱에 여러 경로 탐색을 실행한다면, CostMatrix를 캐싱해 속도를 높이는 것을 고려할 수 있습니다. CostMatrix에 대한 더 자세한 내용은 아래 문서를 참고하세요. 콜백에서 false를 반환하면 해당 룸은 탐색되지 않으며, maxRooms에도 포함되지 않습니다.
  • plainCost
    number
    평지(plain) 이동 비용. 기본값은 1입니다.
  • swampCost
    number
    늪지(swamp) 이동 비용. 기본값은 5입니다.
  • flee
    boolean
    goal로 향하는 경로 대신, goal로부터 멀어지는 경로를 찾습니다. 모든 goal의 range 밖에 있는 가장 저렴한 경로가 반환됩니다. 기본값은 false입니다.
  • maxOps
    number
    허용되는 최대 경로 탐색 연산 수. 대략 1 op ~ 0.001 CPU 비율로 검색에 사용되는 CPU 시간을 제한할 수 있습니다. 기본값은 2000입니다.
  • maxRooms
    number
    탐색할 최대 룸 수. 기본값은 16이며, 최대값은 64입니다.
  • maxCost
    number
    반환될 경로의 최대 비용. 어느 시점에서든 경로 탐색기가 maxCost 이하 비용으로 경로를 찾을 수 없다고 판단하면 즉시 탐색을 중단합니다. 기본값은 Infinity입니다.
  • heuristicWeight
    number
    A* 공식 F = G + weight * H에서 휴리스틱에 적용할 가중치입니다. A* 알고리즘 메커니즘을 이해하는 경우에만 사용하세요! 기본값은 1.2입니다.

반환 값

다음 프로퍼티를 가진 오브젝트:

property description
path RoomPosition 오브젝트 배열.
ops 이 경로를 계산하기 전까지 수행된 총 연산 수.
cost plainCost, swampCost, 그리고 제공된 CostMatrix 인스턴스들로부터 계산된 총 비용.
incomplete 경로 탐색기가 완전한 경로를 찾지 못하면 true입니다. 이 경우에도 path에는 부분 경로가 들어 있으며, 검색 파라미터를 기준으로 찾을 수 있었던 “가장 가까운” 경로를 나타냅니다.

PathFinder.use(isEnabled)

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.

parametertypedescription
isEnabledboolean

새 pathfinder를 활성화할지 비활성화할지. 기본값은 true입니다.

RawMemory

RawMemory 오브젝트는 JSON.stringify 기반의 내장 serializer 대신, 여러분만의 메모리 문자열화(stringifier)를 구현할 수 있게 해줍니다. 또한 비동기 메모리 세그먼트(asynchronous memory segments) 기능을 사용해 최대 10MB의 추가 메모리를 요청할 수 있게 해줍니다.

아래 메서드로 다른 플레이어의 메모리 세그먼트에도 접근할 수 있습니다.

RawMemory.segmentsobject

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.foreignSegmentobject

RawMemory.setActiveForeignSegment('player');
// on the next tick
console.log(RawMemory.foreignSegment); 
// --> {"username": "player", "id": 40, "data": "Hello!"} 

이 틱에 사용할 수 있는 다른 플레이어의 메모리 세그먼트 오브젝트입니다. 다음 틱에 세그먼트를 가져오려면 setActiveForeignSegment를 사용하세요. 이 오브젝트는 다음 프로퍼티로 구성됩니다:

parametertypedescription
usernamestring

다른 플레이어 이름.

idnumber

요청한 메모리 세그먼트 ID.

datastring

세그먼트 내용.

RawMemory.interShardSegmentstring

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) 기반).

RawMemory.get()

const myMemory = JSON.parse(RawMemory.get());

Memory 오브젝트의 원시 문자열 표현(raw string representation)을 가져옵니다.

반환 값

문자열 값을 반환합니다.

RawMemory.set(value)

RawMemory.set(JSON.stringify(myMemory));

Memory 값을 설정합니다.

parametertypedescription
valuestring

문자열 형태의 새 메모리 값.

RawMemory.setActiveSegments(ids)

RawMemory.setActiveSegments([0,3]);

ID 목록으로 메모리 세그먼트를 요청합니다. 세그먼트는 다음 틱에 segments 오브젝트에서 사용할 수 있게 됩니다.

parametertypedescription
idsarray

세그먼트 ID 배열입니다. 각 ID는 0~99의 숫자여야 합니다. 동시에 최대 10개 세그먼트만 활성화할 수 있습니다. setActiveSegments를 다시 호출하면 이전 설정을 덮어씁니다.

RawMemory.setActiveForeignSegment(username, [id])

RawMemory.setActiveForeignSegment('player');
RawMemory.setActiveForeignSegment('player', 10);
RawMemory.setActiveForeignSegment(null);

다른 유저의 메모리 세그먼트를 요청합니다. 해당 세그먼트는 소유자가 setPublicSegments로 public으로 표시해야 합니다. 세그먼트 데이터는 다음 틱에 foreignSegment 오브젝트에서 사용할 수 있습니다. 동시에 하나의 foreign segment만 접근할 수 있습니다.

parametertypedescription
usernamestring | null

다른 유저 이름. foreign segment를 지우려면 null을 전달하세요.

id
optional
number

0~99 범위의 요청 세그먼트 ID. undefined이면, setDefaultPublicSegment로 설정된 유저의 기본 public segment를 요청합니다.

RawMemory.setDefaultPublicSegment(id)

RawMemory.setPublicSegments([5,20,21]);
RawMemory.setDefaultPublicSegment(5);
RawMemory.setDefaultPublicSegment(null);

지정한 세그먼트를 여러분의 기본 public segment로 설정합니다. 다른 유저가 setActiveForeignSegment에서 id 파라미터를 전달하지 않으면 이 세그먼트가 반환됩니다.

parametertypedescription
idnumber | null

0~99 범위의 메모리 세그먼트 ID. 기본 public segment를 제거하려면 null을 전달하세요.

RawMemory.setPublicSegments(ids)

RawMemory.setPublicSegments([5,3]);
RawMemory.setPublicSegments([]);

지정한 세그먼트를 public으로 설정합니다. 다른 유저가 setActiveForeignSegment로 접근을 요청할 수 있게 됩니다.

parametertypedescription
idsarray

세그먼트 ID 배열입니다. 각 ID는 0~99의 숫자여야 합니다. setPublicSegments를 다시 호출하면 이전 설정을 덮어씁니다.

Constants

아래의 모든 상수 이름은 전역 스코프에서 사용할 수 있습니다:

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
            }
        },
    }
});

ConstructionSite

현재 건설 중인 구조물의 건설 사이트입니다. 건설 사이트는 게임 화면 왼쪽의 'Construct' 버튼 또는 Room.createConstructionSite 메서드로 만들 수 있습니다.

건설 사이트에 구조물을 짓기 위해서는, 워커 크립에게 에너지를 주고 Creep.build 액션을 수행하세요.

적의 건설 사이트는 크립을 그 위로 이동시키면 제거할 수 있습니다.

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

idstring

고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.

myboolean

이 건설 사이트가 여러분의 것인지 여부입니다.

ownerobject

구조물 소유자 정보를 담은 오브젝트입니다. 다음 프로퍼티를 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름.

progressnumber

현재 건설 진행도입니다.

progressTotalnumber

구조물을 완성하기 위해 필요한 총 건설 진행도입니다.

structureTypestring

STRUCTURE_* 상수 중 하나입니다.

remove()

건설 사이트를 제거합니다.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 건설 사이트의 소유자가 아니며, 여러분의 룸에도 있지 않습니다.

Creep

크립(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 효과는 없고, 크립 바디에 추가 체력만 제공합니다. 부스트로 피해 저항을 올릴 수 있습니다.

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

bodyarray

크립의 바디를 설명하는 배열입니다. 각 요소는 다음 속성을 포함합니다:

parametertypedescription
booststring | undefined

바디 파트가 부스트되어 있다면, 이 속성은 부스트에 사용된 미네랄 타입을 지정합니다. RESOURCE_* 상수 중 하나입니다. 자세히 보기

typestring

바디 파트 타입 상수 중 하나입니다.

hitsnumber

이 바디 파트의 남은 체력(hits)입니다.

carryobject

This property is deprecated and will be removed soon.

Creep.store의 별칭입니다.

carryCapacitynumber

This property is deprecated and will be removed soon.

Creep.store.getCapacity()의 별칭입니다.

fatiguenumber

이동 피로도(fatigue) 지표입니다. 0보다 크면 크립은 이동할 수 없습니다.

hitsnumber

크립의 현재 체력입니다.

hitsMaxnumber

크립의 최대 체력입니다.

idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

memoryany

creep.memory.task = 'building';

Memory.creeps[creep.name]의 단축 접근자입니다. 크립별 메모리 데이터 객체에 빠르게 접근할 때 사용할 수 있습니다. 메모리에 대해 더 알아보기

myboolean

내 크립인지, 적(상대) 크립인지 여부입니다.

namestring

크립의 이름입니다. 새 크립을 생성할 때 이름을 정하며, 이후에는 변경할 수 없습니다. 이 이름은 Game.creeps 객체에서 크립에 접근하기 위한 해시 키입니다.

ownerobject

크립 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

sayingstring

마지막 틱에 크립이 말한 텍스트입니다.

spawningboolean

이 크립이 아직 생성(spawning) 중인지 여부입니다.

storeStore

if(creep.store[RESOURCE_ENERGY] < creep.store.getCapacity()) {
    goHarvest(creep);
}

이 크립의 화물(저장량)을 담고 있는 Store 객체입니다.

ticksToLivenumber

이 크립이 죽기까지 남은 게임 틱 수입니다.

attack(target)

const target = creep.pos.findClosestByRange(FIND_HOSTILE_CREEPS);
if(target) {
    if(creep.attack(target) == ERR_NOT_IN_RANGE) {
        creep.moveTo(target);
    }
}

근접 공격으로 다른 크립/파워 크립/구조물을 공격합니다. ATTACK 바디 파트가 필요합니다. 대상이 램파트 안에 있으면, 대신 램파트가 공격됩니다. 대상은 크립과 인접한 칸에 있어야 합니다. 대상이 ATTACK 바디 파트를 가진 크립이며 램파트 안에 있지 않다면, 공격을 받으면 자동으로 반격합니다.

parametertypedescription
targetCreep, PowerCreep, Structure

공격할 대상 객체입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

ERR_INVALID_TARGET-7

대상이 공격 가능한 올바른 객체가 아닙니다.

ERR_NOT_IN_RANGE-9

대상이 너무 멀리 있습니다.

ERR_NO_BODYPART-12

이 크립의 바디에 ATTACK 바디 파트가 없습니다.

attackController(target)

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틱 동안 업그레이드하거나 다시 공격할 수 없습니다. 대상은 크립과 인접한 칸에 있어야 합니다.

parametertypedescription
targetStructureController

대상 컨트롤러 객체입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

ERR_INVALID_TARGET-7

대상이 올바른 점유/예약 컨트롤러 객체가 아닙니다.

ERR_NOT_IN_RANGE-9

대상이 너무 멀리 있습니다.

ERR_TIRED-11

다음 공격이 가능해질 때까지 기다려야 합니다.

ERR_NO_BODYPART-12

이 크립의 바디에 CLAIM 바디 파트가 충분하지 않습니다.

build(target)

const target = creep.pos.findClosestByRange(FIND_CONSTRUCTION_SITES);
if(target) {
    if(creep.build(target) == ERR_NOT_IN_RANGE) {
        creep.moveTo(target);
    }
}

운반 중인 에너지를 사용해 대상 건설 현장(construction site)에서 구조물을 건설합니다. WORKCARRY 바디 파트가 필요합니다. 대상은 크립으로부터 3칸 이내에 있어야 합니다.

parametertypedescription
targetConstructionSite

건설할 대상 건설 현장입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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

이 크립의 바디에 WORK 바디 파트가 없습니다.

cancelOrder(methodName)

creep.move(LEFT);
creep.cancelOrder('move');
//The creep will not move in this game tick

현재 게임 틱에서 내린 명령(order)을 취소합니다.

parametertypedescription
methodNamestring

취소할 크립 메서드의 이름입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 취소되었습니다.

ERR_NOT_FOUND-5

지정한 이름의 명령(order)을 찾을 수 없습니다.

claimController(target)

if(creep.room.controller) {
    if(creep.claimController(creep.room.controller) == ERR_NOT_IN_RANGE) {
        creep.moveTo(creep.room.controller);
    }
}

중립 컨트롤러를 점유(claim)하여 내 통제하에 둡니다. CLAIM 바디 파트가 필요합니다. 대상은 크립과 인접한 칸에 있어야 합니다. 새 방을 점유하려면 해당하는 글로벌 컨트롤 레벨(GCL)이 필요합니다. GCL이 부족하다면, 대신 이 방을 예약(reserve)하는 것을 고려하세요. 자세히 보기

parametertypedescription
targetStructureController

대상 컨트롤러 객체입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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

이 크립의 바디에 CLAIM 바디 파트가 없습니다.

ERR_GCL_NOT_ENOUGH-15

글로벌 컨트롤 레벨(GCL)이 충분하지 않습니다.

dismantle(target)

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 바디 파트가 있으면 에너지가 그 안에 들어가고, 그렇지 않으면 바닥에 드롭됩니다. 대상은 크립과 인접한 칸에 있어야 합니다.

parametertypedescription
targetStructure

대상 구조물입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

ERR_INVALID_TARGET-7

대상이 올바른 구조물 객체가 아닙니다.

ERR_NOT_IN_RANGE-9

대상이 너무 멀리 있습니다.

ERR_NO_BODYPART-12

이 크립의 바디에 WORK 바디 파트가 없습니다.

drop(resourceType, [amount])

creep.drop(RESOURCE_ENERGY);
// drop all resources
for(const resourceType in creep.carry) {
    creep.drop(resourceType);
}

이 자원을 바닥에 떨어뜨립니다.

parametertypedescription
resourceTypestring

RESOURCE_* 상수 중 하나입니다.

amount
optional
number

떨어뜨릴 자원 수량입니다. 생략하면 들고 있는 모든 수량을 사용합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

ERR_NOT_ENOUGH_RESOURCES-6

크립에 지정한 양의 자원이 없습니다.

ERR_INVALID_ARGS-10

resourceType이 올바른 RESOURCE_* 상수가 아닙니다.

generateSafeMode(target)

if(creep.generateSafeMode(creep.room.controller) == ERR_NOT_IN_RANGE) {
    creep.moveTo(creep.room.controller);
}

방 컨트롤러에 “사용 가능한 세이프 모드 발동 횟수”를 1회 추가합니다. 크립은 대상 컨트롤러와 인접한 칸에 있어야 하며, ghodium 자원 1000을 보유하고 있어야 합니다.

parametertypedescription
targetStructureController

대상 방 컨트롤러입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

ERR_NOT_ENOUGH_RESOURCES-6

크립에 ghodium이 충분하지 않습니다.

ERR_INVALID_TARGET-7

대상이 올바른 컨트롤러 객체가 아닙니다.

ERR_NOT_IN_RANGE-9

대상이 너무 멀리 있습니다.

getActiveBodyparts(type)

const target = creep.pos.findClosestByRange(FIND_HOSTILE_CREEPS, {
    filter: function(object) {
        return object.getActiveBodyparts(ATTACK) == 0;
    }
});
if(target) {
    creep.moveTo(target);
}

지정한 타입의 “살아있는(live)” 바디 파트 수를 가져옵니다. 완전히 파괴된 파트는 포함되지 않습니다.

parametertypedescription
typestring

바디 파트 타입이며, 아래 상수 중 하나입니다:

  • MOVE
  • WORK
  • CARRY
  • ATTACK
  • RANGED_ATTACK
  • HEAL
  • TOUGH

반환 값

바디 파트 개수를 나타내는 숫자입니다.

harvest(target)

const target = creep.pos.findClosestByRange(FIND_SOURCES_ACTIVE);
if(target) {
    if(creep.harvest(target) == ERR_NOT_IN_RANGE) {
        creep.moveTo(target);
    }
}

소스에서 에너지를 채집하거나, 미네랄/디포짓에서 자원을 채집합니다. WORK 바디 파트가 필요합니다. 크립에 비어 있는 CARRY 바디 파트가 있으면 채집한 자원이 그 안에 들어가고, 그렇지 않으면 바닥에 드롭됩니다. 대상은 크립과 인접한 칸에 있어야 합니다.

parametertypedescription
targetSource, Mineral, Deposit

채집 대상 객체입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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

이 크립의 바디에 WORK 바디 파트가 없습니다.

heal(target)

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 바디 파트가 필요합니다. 대상은 크립과 인접한 칸에 있어야 합니다.

parametertypedescription
targetCreep, PowerCreep

대상 크립 객체입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

ERR_INVALID_TARGET-7

대상이 올바른 크립 객체가 아닙니다.

ERR_NOT_IN_RANGE-9

대상이 너무 멀리 있습니다.

ERR_NO_BODYPART-12

이 크립의 바디에 HEAL 바디 파트가 없습니다.

move(direction)

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_TIREDERR_NO_BODYPART 검사가 생략되고, 그렇지 않으면 ERR_NOT_IN_RANGE 검사가 생략됩니다.

parametertypedescription
directionCreep|number

근처의 크립이거나, 아래 상수 중 하나입니다:

  • TOP
  • TOP_RIGHT
  • RIGHT
  • BOTTOM_RIGHT
  • BOTTOM
  • BOTTOM_LEFT
  • LEFT
  • TOP_LEFT

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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 바디 파트가 없습니다.

moveByPath(path)

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 바디 파트가 필요합니다.

parametertypedescription
patharray|string

Room.findPath, RoomPosition.findPathTo, PathFinder.search 메서드가 반환한 경로 값입니다. 배열 형태와 직렬화된 문자열 형태를 모두 지원합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

ERR_NOT_FOUND-5

지정한 경로가 크립의 현재 위치와 맞지 않습니다.

ERR_INVALID_ARGS-10

path가 올바른 경로 배열이 아닙니다.

ERR_TIRED-11

크립의 피로도(fatigue) 값이 0이 아닙니다.

ERR_NO_BODYPART-12

이 크립의 바디에 MOVE 바디 파트가 없습니다.

moveTo(x, y, [opts])
(target, [opts])

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 바디 파트가 필요합니다.

parametertypedescription
xnumber

같은 방 내에서의 목표 X 좌표입니다.

ynumber

같은 방 내에서의 목표 Y 좌표입니다.

targetobject

RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다. 위치는 크립과 같은 방에 있을 필요가 없습니다.

opts
optional
object

다음 추가 옵션을 포함하는 객체입니다:

  • reusePath
    number
    여러 게임 틱에 걸쳐 찾은 경로를 재사용하도록 합니다. CPU 시간을 절약할 수 있지만, 크립의 반응이 약간 느려질 수 있습니다. 경로는 크립 메모리의 _move 속성에 저장됩니다. reusePath 값은 경로를 재사용할 틱 수를 정의합니다. 기본값은 5입니다. 값을 늘리면 CPU를 더 절약할 수 있고, 줄이면 이동이 더 일관되게 됩니다. 0으로 설정하면 경로 재사용을 비활성화합니다.
  • serializeMemory
    boolean
    reusePath가 활성화되어 있고 이 옵션이 true이면, 경로를 Room.serializePath를 사용한 짧은 직렬화 형태로 메모리에 저장합니다. 기본값은 true입니다.
  • noPathFinding
    boolean
    true로 설정하면, 재사용할 메모리 경로가 없을 때 moveToERR_NOT_FOUND를 반환합니다. 경우에 따라 CPU 시간을 크게 절약할 수 있습니다. 기본값은 false입니다.
  • visualizePathStyle
    object
    RoomVisual.poly로 크립의 경로를 따라 선을 그립니다. 빈 객체 또는 사용자 지정 스타일 파라미터를 제공할 수 있습니다. 기본 스타일은 아래와 동일합니다:
    {
        fill: 'transparent',
        stroke: '#fff',
        lineStyle: 'dashed',
        strokeWidth: .15,
        opacity: .1
    }
  • Room.findPath 메서드가 지원하는 모든 옵션.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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 바디 파트가 없습니다.

notifyWhenAttacked(enabled)

if(creep.memory.role == 'scout') {
    creep.notifyWhenAttacked(false);
}
else {
    creep.notifyWhenAttacked(true);
}

크립이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

pickup(target)

const target = creep.pos.findClosestByRange(FIND_DROPPED_RESOURCES);
if(target) {
    if(creep.pickup(target) == ERR_NOT_IN_RANGE) {
        creep.moveTo(target);
    }
}

아이템(바닥에 떨어진 에너지 조각)을 줍습니다. CARRY 바디 파트가 필요합니다. 대상은 크립과 같은 칸 또는 인접한 칸에 있어야 합니다.

parametertypedescription
targetResource

줍는 대상 객체입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

ERR_INVALID_TARGET-7

대상이 줍기 가능한 올바른 객체가 아닙니다.

ERR_FULL-8

크립이 더 이상 자원을 받을 수 없습니다.

ERR_NOT_IN_RANGE-9

대상이 너무 멀리 있습니다.

pull(target)

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 바디 파트가 필요합니다. 대상은 크립과 인접한 칸에 있어야 합니다. 이 크립은 다른 곳으로 이동해야 하고, 대상은 이 크립을 향해 이동해야 합니다.

parametertypedescription
targetCreep

대상 크립입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

ERR_INVALID_TARGET-7

제공된 대상이 올바르지 않습니다.

ERR_NOT_IN_RANGE-9

대상이 너무 멀리 있습니다.

rangedAttack(target)

const targets = creep.pos.findInRange(FIND_HOSTILE_CREEPS, 3);
if(targets.length > 0) {
    creep.rangedAttack(targets[0]);
}

다른 크립 또는 구조물에 원거리 공격을 수행합니다. RANGED_ATTACK 바디 파트가 필요합니다. 대상이 램파트 안에 있으면, 대신 램파트가 공격됩니다. 대상은 크립으로부터 3칸 이내에 있어야 합니다.

parametertypedescription
targetCreep, PowerCreep, Structure

공격할 대상 객체입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

ERR_INVALID_TARGET-7

대상이 공격 가능한 올바른 객체가 아닙니다.

ERR_NOT_IN_RANGE-9

대상이 너무 멀리 있습니다.

ERR_NO_BODYPART-12

이 크립의 바디에 RANGED_ATTACK 바디 파트가 없습니다.

rangedHeal(target)

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칸 이내에 있어야 합니다.

parametertypedescription
targetCreep, PowerCreep

대상 크립 객체입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

ERR_INVALID_TARGET-7

대상이 올바른 크립 객체가 아닙니다.

ERR_NOT_IN_RANGE-9

대상이 너무 멀리 있습니다.

ERR_NO_BODYPART-12

이 크립의 바디에 HEAL 바디 파트가 없습니다.

rangedMassAttack()

const targets = creep.pos.findInRange(FIND_HOSTILE_CREEPS, 3);
if(targets.length > 0) {
    creep.rangedMassAttack();
}

반경 3칸 내의 모든 적 크립 또는 구조물을 원거리 광역 공격합니다. RANGED_ATTACK 바디 파트가 필요합니다. 공격력은 각 대상까지의 거리에 따라 달라집니다. 아군 유닛은 영향을 받지 않습니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

ERR_NO_BODYPART-12

이 크립의 바디에 RANGED_ATTACK 바디 파트가 없습니다.

repair(target)

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]);
    }
}

운반 중인 에너지를 사용해 손상된 구조물을 수리합니다. WORKCARRY 바디 파트가 필요합니다. 대상은 크립으로부터 3칸 이내에 있어야 합니다.

parametertypedescription
targetStructure

수리할 대상 구조물입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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

이 크립의 바디에 WORK 바디 파트가 없습니다.

reserveController(target)

if(creep.room.controller) {
    if(creep.reserveController(creep.room.controller) == ERR_NOT_IN_RANGE) {
        creep.moveTo(creep.room.controller);
    }
}

다른 플레이어가 중립 컨트롤러를 점유(claim)하지 못하도록 일시적으로 차단하고, 에너지 소스를 최대 용량으로 복구합니다. 매 틱마다 이 명령은 컨트롤러가 사용 불가(점유 불가)한 기간 카운터를 CLAIM 바디 파트당 1틱씩 증가시킵니다. 유지할 수 있는 최대 예약 기간은 5,000틱입니다. 대상은 크립과 인접한 칸에 있어야 합니다.

parametertypedescription
targetStructureController

예약할 대상 컨트롤러 객체입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

ERR_INVALID_TARGET-7

대상이 올바른 중립 컨트롤러 객체가 아닙니다.

ERR_NOT_IN_RANGE-9

대상이 너무 멀리 있습니다.

ERR_NO_BODYPART-12

이 크립의 바디에 CLAIM 바디 파트가 없습니다.

say(message, [public])

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 속성으로 읽을 수 있습니다. 이모지를 포함해, 유효한 모든 유니코드 문자를 사용할 수 있습니다.

parametertypedescription
messagestring

표시할 메시지입니다. 최대 길이는 10자입니다.

public
optional
boolean

true로 설정하면 다른 플레이어도 이 메시지를 볼 수 있습니다. 기본값은 false입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

signController(target, text)

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로도 접근할 수 있습니다. 소유되지 않은 컨트롤러와 적 컨트롤러에도 서명할 수 있습니다. 대상은 크립과 인접한 칸에 있어야 합니다. 빈 문자열을 전달하면 서명을 제거합니다.

parametertypedescription
targetStructureController

서명할 대상 컨트롤러 객체입니다.

textstring

서명 텍스트입니다. 문자열은 100자 이후 잘립니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

ERR_INVALID_TARGET-7

대상이 올바른 컨트롤러 객체가 아닙니다.

ERR_NOT_IN_RANGE-9

대상이 너무 멀리 있습니다.

suicide()

크립을 즉시 자살시킵니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

크립이 아직 생성(spawning) 중입니다.

transfer(target, resourceType, [amount])

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);
}

크립에서 다른 객체로 자원을 옮깁니다. 대상은 크립과 인접한 칸에 있어야 합니다.

parametertypedescription
targetCreep, PowerCreep, Structure

대상 객체입니다.

resourceTypestring

RESOURCE_* 상수 중 하나입니다.

amount
optional
number

옮길 자원 수량입니다. 생략하면 들고 있는 모든 수량을 사용합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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이 RESOURCE_* 상수 중 하나가 아니거나 amount가 올바르지 않습니다.

upgradeController(target)

if(creep.room.controller) {
    if(creep.upgradeController(creep.room.controller) == ERR_NOT_IN_RANGE) {
        creep.moveTo(creep.room.controller);
    }
}

운반 중인 에너지를 사용해 내 컨트롤러를 다음 레벨로 업그레이드합니다. 컨트롤러 업그레이드는 동시에 글로벌 컨트롤 레벨(GCL)도 증가시킵니다. WORKCARRY 바디 파트가 필요합니다. 대상은 크립으로부터 3칸 이내에 있어야 합니다.

완전히 업그레이드된 레벨 8 컨트롤러는, 크립 능력과 무관하게 틱당 15 에너지 유닛을 초과하여 업그레이드할 수 없습니다. 현재 틱에 upgradeController를 수행한 모든 크립의 누적 효과가 고려됩니다. 이 제한은 ghodium 미네랄 부스트를 사용해 늘릴 수 있습니다.

컨트롤러를 업그레이드하면 ticksToDowngrade 타이머가 100 증가합니다. 컨트롤러가 레벨업하려면 이 타이머가 가득 차 있어야 합니다.

parametertypedescription
targetStructureController

업그레이드할 대상 컨트롤러 객체입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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

이 크립의 바디에 WORK 바디 파트가 없습니다.

withdraw(target, resourceType, [amount])

if(creep.withdraw(storage, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
    creep.moveTo(storage);
}

구조물 또는 톰스톤에서 자원을 꺼냅니다. 대상은 크립과 인접한 칸에 있어야 합니다. 같은 틱에 여러 크립이 같은 객체에서 withdraw할 수 있습니다. 또한 대상 위에 적 램파트가 없는 경우, 내 크립은 적 구조물/톰스톤에서도 자원을 꺼낼 수 있습니다.

이 메서드는 크립 사이의 자원 이동에 사용하면 안 됩니다. 크립 간 이동은 원래 크립에서 transfer 메서드를 사용하세요.

parametertypedescription
targetStructure, Tombstone, Ruin

대상 객체입니다.

resourceTypestring

RESOURCE_* 상수 중 하나입니다.

amount
optional
number

옮길 자원 수량입니다. 생략하면 가능한 모든 수량을 사용합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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이 RESOURCE_* 상수 중 하나가 아니거나 amount가 올바르지 않습니다.

Deposit

상품(commodities) 생산에 필요한 희귀 자원 매장지입니다. WORK 바디 파트를 가진 크립이 채집할 수 있습니다. 각 채집은 쿨다운을 발생시키며, 시간이 지날수록 쿨다운이 점점 길어집니다.

Deposit에 대해서는 이 문서에서 더 알아보세요.

Cooldown 0.001 * totalHarvested ^ 1.2
Decay 등장 또는 마지막 채집 이후 50,000틱

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

cooldownnumber

다음 harvest 액션이 가능해질 때까지 남은 게임 틱 수입니다.

depositTypestring

Deposit 타입입니다. 아래 상수 중 하나입니다:

RESOURCE_MIST
RESOURCE_BIOMASS
RESOURCE_METAL
RESOURCE_SILICON

idstring

고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.

lastCooldownnumber

이 Deposit에 대한 마지막 채집의 쿨다운입니다.

ticksToDecaynumber

이 Deposit이 사라질 때까지 남은 게임 틱 수입니다.

Flag

깃발입니다. 깃발은 룸 안의 특정 지점을 표시(mark)하는 데 사용할 수 있습니다. 깃발은 소유자에게만 보입니다. 깃발은 최대 10,000개까지 가질 수 있습니다.

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

colornumber

깃발의 기본(Primary) 색상입니다. COLOR_* 상수 중 하나입니다.

memoryany

Memory.flags[flag.name]의 축약(shorthand)입니다. 깃발별 메모리 데이터 오브젝트에 빠르게 접근하는 데 사용할 수 있습니다.

namestring

깃발의 이름입니다. 새 깃발을 만들 때 이름을 정할 수 있으며, 이후 변경할 수 없습니다. 이 이름은 Game.flags 오브젝트를 통해 깃발에 접근하기 위한 해시 키입니다. 최대 길이는 100자입니다.

secondaryColornumber

깃발의 보조(Secondary) 색상입니다. COLOR_* 상수 중 하나입니다.

remove()

깃발을 제거합니다.

반환 값

항상 OK를 반환합니다.

setColor(color, [secondaryColor])

Game.flags.Flag1.setColor(COLOR_GREEN, COLOR_WHITE);

깃발의 새 색상을 설정합니다.

parametertypedescription
colornumber

깃발의 기본 색상. COLOR_* 상수 중 하나입니다.

secondaryColor
optional
number

깃발의 보조 색상. COLOR_* 상수 중 하나입니다.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_INVALID_ARGS-10

color 또는 secondaryColor가 유효한 색상 상수가 아닙니다.

setPosition(x,y)
(pos)

Game.flags.Flag1.setPosition(10,20);
Game.flags.Flag1.setPosition( new RoomPosition(10, 20, 'W3S5') );

깃발의 새 위치를 설정합니다.

parametertypedescription
xnumber

룸 내 X 좌표.

ynumber

룸 내 Y 좌표.

posobject

RoomPosition 오브젝트 또는 RoomPosition을 포함하는 어떤 오브젝트.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_INVALID_TARGET-7

제공한 대상이 유효하지 않습니다.

Mineral

미네랄 매장지입니다. extractor 구조물을 사용해 WORK 바디 파트를 가진 크립이 채굴할 수 있습니다. 미네랄에 대해서는 이 문서에서 더 알아보세요.

Regeneration amount DENSITY_LOW: 15,000
DENSITY_MODERATE: 35,000
DENSITY_HIGH: 70,000
DENSITY_ULTRA: 100,000
Regeneration time 50,000 ticks
Density change probability DENSITY_LOW: 100% chance
DENSITY_MODERATE: 5% chance
DENSITY_HIGH: 5% chance
DENSITY_ULTRA: 100% chance

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

densitynumber

ticksToRegeneration이 0이 되었을 때 이 미네랄 매장지가 어느 density로 리필될지 나타냅니다. DENSITY_* 상수 중 하나입니다.

mineralAmountnumber

남아 있는 자원 양입니다.

mineralTypestring

자원 타입입니다. RESOURCE_* 상수 중 하나입니다.

idstring

고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.

ticksToRegenerationnumber

매장지가 다시 리필될 때까지 남은 시간입니다.

Nuke

핵이 착탄하는 위치입니다. 이 오브젝트는 제거하거나 수정할 수 없습니다. FIND_NUKES 상수로 룸에서 들어오는 핵을 찾을 수 있습니다.

Landing time 50,000 ticks
Effect 룸 내의 모든 크립, 건설 사이트, 드랍된 자원이 즉시 제거됩니다(램파트 내부도 포함). 구조물 피해:
  • 착탄 지점: 10,000,000 hits;
  • 5x5 영역 내 모든 구조물: 5,000,000 hits.

서로 다른 룸에서 여러 핵을 같은 목표 위치에 겹쳐 발사하여 피해를 늘릴 수 있다는 점에 유의하세요.

핵 착탄은 tombstone과 ruin을 생성하지 않으며, 룸에 존재하는 모든 tombstone과 ruin을 파괴합니다.

룸이 세이프 모드인 경우, 세이프 모드는 즉시 해제되며 세이프 모드 쿨다운은 0으로 리셋됩니다.

룸 컨트롤러는 upgradeBlocked 기간이 트리거되어, 다음 200틱 동안 세이프 모드를 다시 활성화할 수 없습니다.

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

idstring

고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.

launchRoomNamestring

이 핵이 발사된 룸 이름입니다.

timeToLandnumber

남은 착탄 시간입니다.

OwnedStructure

소유자(owner)가 있는 구조물의 기본 프로토타입입니다. 이런 구조물은 FIND_MY_STRUCTURESFIND_HOSTILE_STRUCTURES 상수로 찾을 수 있습니다.

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

myboolean

이 구조물이 여러분의 구조물인지 여부입니다.

ownerobject

구조물 소유자 정보를 담은 오브젝트입니다. 다음 프로퍼티를 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름.

PathFinder.CostMatrix

커스텀 네비게이션 비용 데이터를 담는 컨테이너입니다. 기본적으로 PathFinder는 지형 정보(plain, swamp, wall)만 고려합니다. 건물이나 크립 같은 장애물을 피해서 경로를 잡고 싶다면 그 정보를 CostMatrix에 넣어야 합니다. 일반적으로 roomCallback 안에서 CostMatrix를 생성합니다. 룸의 CostMatrix에서 0이 아닌 값이 발견되면, 기본 지형 비용 대신 그 값이 사용됩니다. CostMatrix와 지형 비용 플래그에는 너무 큰 값을 사용하는 것을 피하세요. 예를 들어 { plainCost: 1, swampCost: 5 }PathFinder.search를 실행하는 것이, 경로가 동일하더라도 {plainCost: 2, swampCost: 10 }으로 실행하는 것보다 더 빠릅니다.

constructor()

let costs = new PathFinder.CostMatrix;

모든 좌표가 0인 새 CostMatrix를 생성합니다.

set(x, y, cost)

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에서 특정 좌표의 비용을 설정합니다.

parametertypedescription
xnumber

룸 내 X 좌표.

ynumber

룸 내 Y 좌표.

costnumber

이 좌표의 비용. 정수여야 합니다. 0이면 해당 타일의 지형 비용을 사용합니다. 255 이상이면 통행 불가(unwalkable)로 취급됩니다.

get(x, y)

이 CostMatrix에서 특정 좌표의 비용을 가져옵니다.

parametertypedescription
xnumber

룸 내 X 좌표.

ynumber

룸 내 Y 좌표.

clone()

이 CostMatrix를 동일한 데이터로 새 CostMatrix에 복사합니다.

반환 값

새 CostMatrix 인스턴스.

serialize()

let costs = new PathFinder.CostMatrix;
Memory.savedMatrix = costs.serialize();

JSON.stringify로 저장할 수 있는, 이 CostMatrix의 컴팩트 표현을 반환합니다.

반환 값

숫자 배열입니다. 보통은 나중에 사용하기 위해 저장하는 것 외에는 할 수 있는 일이 많지 않습니다.

PathFinder.CostMatrix.deserialize(val)

let costs = PathFinder.CostMatrix.deserialize(Memory.savedMatrix)

serialize의 반환값을 사용해 새 CostMatrix를 역직렬화(deserialize)하는 정적 메서드입니다.

parametertypedescription
valobject

serialize의 반환값

반환 값

CostMatrix 인스턴스를 반환합니다.

PowerCreep

파워 크립(Power Creeps)은 계정에 귀속된 불멸의 “영웅” 유닛이며, 죽은 뒤에도 어떤 PowerSpawn에서든 다시 리스폰할 수 있습니다. 능력(“powers”)은 계정의 글로벌 파워 레벨까지 업그레이드할 수 있습니다(Game.gpl 참고).


수명(Time to live) 5,000
체력(Hits) 레벨당 1,000
용량(Capacity) 레벨당 100

사용 가능한 파워 전체 목록

PowerCreep.create(name, className)

PowerCreep.create('PowerCreep1', POWER_CLASS.OPERATOR);

계정에 새 파워 크립 인스턴스를 생성하는 정적(static) 메서드입니다. 생성된 파워 크립은 스폰되지 않은 상태로 추가되며, 월드에 배치하려면 spawn 메서드를 사용하세요.

이 작업을 수행하려면 계정에 사용 가능한 Power Level이 1개 있어야 합니다.

parametertypedescription
namestring

새 파워 크립의 이름입니다. 이름 길이 제한은 100자입니다.

classNamestring

새 파워 크립의 클래스이며, POWER_CLASS 상수 중 하나입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NAME_EXISTS-3

지정한 이름의 파워 크립이 이미 존재합니다.

ERR_NOT_ENOUGH_RESOURCES-6

계정에 사용 가능한 Power Level이 없습니다.

ERR_INVALID_ARGS-10

제공된 파워 크립 이름이 제한을 초과했거나, 파워 크립 클래스가 올바르지 않습니다.

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

carryobject

This property is deprecated and will be removed soon.

PowerCreep.store의 별칭입니다.

carryCapacitynumber

This property is deprecated and will be removed soon.

PowerCreep.store.getCapacity()의 별칭입니다.

classNamestring

파워 크립의 클래스이며, POWER_CLASS 상수 중 하나입니다.

deleteTimenumber

이 크립이 계정에서 영구 삭제 대상으로 표시된 시각(타임스탬프)입니다. 그렇지 않으면 undefined입니다.

hitsnumber

크립의 현재 체력입니다.

hitsMaxnumber

크립의 최대 체력입니다.

idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

levelnumber

파워 크립의 레벨입니다.

memoryany

creep.memory.task = 'building';

Memory.powerCreeps[creep.name]의 단축 접근자입니다. 크립별 메모리 데이터 객체에 빠르게 접근할 때 사용할 수 있습니다. 메모리에 대해 더 알아보기

myboolean

내 크립인지, 적(상대) 크립인지 여부입니다.

namestring

파워 크립의 이름입니다. 새 파워 크립을 생성할 때 이름을 정하며, 이후에는 변경할 수 없습니다. 이 이름은 Game.powerCreeps 객체에서 크립에 접근하기 위한 해시 키입니다.

ownerobject

크립 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

storeStore

if(creep.store[RESOURCE_ENERGY] < creep.store.getCapacity()) {
    goHarvest(creep);
}

이 크립의 화물(저장량)을 담고 있는 Store 객체입니다.

powersobject

사용 가능한 파워 목록입니다. 파워 ID를 키로 하는 객체이며, 각 항목은 다음 속성을 가집니다:

parametertypedescription
levelnumber

파워의 현재 레벨입니다.

cooldownnumber

남은 쿨다운 틱 수이며, 파워 크립이 월드에 스폰되어 있지 않으면 undefined입니다.

sayingstring

마지막 틱에 크립이 말한 텍스트입니다.

shardstring

파워 크립이 스폰된 샤드의 이름이며, 스폰되어 있지 않으면 undefined입니다.

spawnCooldownTimenumber

if(!(Game.powerCreeps['PowerCreep1'].spawnCooldownTime > Date.now())) {
    Game.powerCreeps['PowerCreep1'].spawn(powerSpawn);
}

이 크립을 스폰하거나 삭제할 수 있게 되는 시각(타임스탬프)입니다. 파워 크립이 월드에 스폰되어 있으면 undefined입니다.

ticksToLivenumber

크립이 죽고 스폰되지 않은 상태가 되기까지 남은 게임 틱 수입니다. 크립이 월드에 스폰되어 있지 않으면 undefined입니다.

cancelOrder(methodName)

creep.move(LEFT);
creep.cancelOrder('move');
//The creep will not move in this game tick

현재 게임 틱에서 내린 명령(order)을 취소합니다.

parametertypedescription
methodNamestring

취소할 크립 메서드의 이름입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 취소되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

파워 크립이 월드에 스폰되어 있지 않습니다.

ERR_NOT_FOUND-5

지정한 이름의 명령(order)을 찾을 수 없습니다.

delete([cancel])

Game.powerCreeps['PowerCreep1'].delete();

계정에서 파워 크립을 영구적으로 삭제합니다. 크립은 월드에 스폰되어 있으면 안 됩니다. 삭제는 즉시 이루어지지 않고, 대신 24시간 삭제 타이머가 시작됩니다(deleteTime 참고). delete(true)를 호출하면 삭제를 취소할 수 있습니다.

parametertypedescription
cancelboolean

true로 설정하면 이전에 예약된 삭제를 취소합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

파워 크립이 월드에 스폰되어 있습니다.

drop(resourceType, [amount])

creep.drop(RESOURCE_ENERGY);
// drop all resources
for(const resourceType in creep.carry) {
    creep.drop(resourceType);
}

이 자원을 바닥에 떨어뜨립니다.

parametertypedescription
resourceTypestring

RESOURCE_* 상수 중 하나입니다.

amount
optional
number

떨어뜨릴 자원 수량입니다. 생략하면 들고 있는 모든 수량을 사용합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

파워 크립이 월드에 스폰되어 있지 않습니다.

ERR_NOT_ENOUGH_RESOURCES-6

크립에 지정한 양의 에너지가 없습니다.

ERR_INVALID_ARGS-10

resourceType이 올바른 RESOURCE_* 상수가 아닙니다.

Game.powerCreeps['PowerCreep1'].usePower(PWR_GENERATE_OPS);

enableRoom(controller)

powerCreep.enableRoom(powerCreep.room.controller);

이 방에서 파워 사용을 활성화합니다. 방 컨트롤러는 인접 타일에 있어야 합니다.

parametertypedescription
controllerStructureController

방 컨트롤러입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_INVALID_TARGET-7

대상이 컨트롤러 구조물이 아닙니다.

ERR_NOT_IN_RANGE-9

대상이 너무 멀리 있습니다.

move(direction)

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칸 이동시킵니다.

parametertypedescription
directionCreep|number

근처의 크립이거나, 아래 상수 중 하나입니다:

  • TOP
  • TOP_RIGHT
  • RIGHT
  • BOTTOM_RIGHT
  • BOTTOM
  • BOTTOM_LEFT
  • LEFT
  • TOP_LEFT

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

파워 크립이 월드에 스폰되어 있지 않습니다.

ERR_NOT_IN_RANGE-9

대상 크립이 너무 멀리 있습니다

ERR_INVALID_ARGS-10

제공된 방향이 올바르지 않습니다.

ERR_TIRED-11

크립의 피로도(fatigue) 값이 0이 아닙니다.

moveByPath(path)

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);

지정한 미리 계산된 경로를 사용해 크립을 이동시킵니다.

parametertypedescription
patharray|string

Room.findPath, RoomPosition.findPathTo, PathFinder.search 메서드가 반환한 경로 값입니다. 배열 형태와 직렬화된 문자열 형태를 모두 지원합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

파워 크립이 월드에 스폰되어 있지 않습니다.

ERR_NOT_FOUND-5

지정한 경로가 크립의 현재 위치와 맞지 않습니다.

ERR_INVALID_ARGS-10

path가 올바른 경로 배열이 아닙니다.

ERR_TIRED-11

크립의 피로도(fatigue) 값이 0이 아닙니다.

moveTo(x, y, [opts])
(target, [opts])

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()를 연속으로 호출하는 단축형입니다. 대상이 다른 방에 있다면, 해당 방으로 향하는 적절한 출구가 목표로 사용됩니다.

parametertypedescription
xnumber

같은 방 내에서의 목표 X 좌표입니다.

ynumber

같은 방 내에서의 목표 Y 좌표입니다.

targetobject

RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다. 위치는 크립과 같은 방에 있을 필요가 없습니다.

opts
optional
object

다음 추가 옵션을 포함하는 객체입니다:

  • reusePath
    number
    여러 게임 틱에 걸쳐 찾은 경로를 재사용하도록 합니다. CPU 시간을 절약할 수 있지만, 크립의 반응이 약간 느려질 수 있습니다. 경로는 크립 메모리의 _move 속성에 저장됩니다. reusePath 값은 경로를 재사용할 틱 수를 정의합니다. 기본값은 5입니다. 값을 늘리면 CPU를 더 절약할 수 있고, 줄이면 이동이 더 일관되게 됩니다. 0으로 설정하면 경로 재사용을 비활성화합니다.
  • serializeMemory
    boolean
    reusePath가 활성화되어 있고 이 옵션이 true이면, 경로를 Room.serializePath를 사용한 짧은 직렬화 형태로 메모리에 저장합니다. 기본값은 true입니다.
  • noPathFinding
    boolean
    true로 설정하면, 재사용할 메모리 경로가 없을 때 moveToERR_NOT_FOUND를 반환합니다. 경우에 따라 CPU 시간을 크게 절약할 수 있습니다. 기본값은 false입니다.
  • visualizePathStyle
    object
    RoomVisual.poly로 크립의 경로를 따라 선을 그립니다. 빈 객체 또는 사용자 지정 스타일 파라미터를 제공할 수 있습니다. 기본 스타일은 아래와 동일합니다:
    {
        fill: 'transparent',
        stroke: '#fff',
        lineStyle: 'dashed',
        strokeWidth: .15,
        opacity: .1
    }
  • Room.findPath 메서드가 지원하는 모든 옵션.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_NO_PATH-2

대상까지의 경로를 찾을 수 없습니다.

ERR_BUSY-4

파워 크립이 월드에 스폰되어 있지 않습니다.

ERR_NOT_FOUND-5

재사용할 메모리 경로가 없습니다.

ERR_INVALID_TARGET-7

제공된 대상이 올바르지 않습니다.

ERR_TIRED-11

크립의 피로도(fatigue) 값이 0이 아닙니다.

notifyWhenAttacked(enabled)

Game.powerCreeps['PC1'].notifyWhenAttacked(true);

크립이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

파워 크립이 월드에 스폰되어 있지 않습니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

pickup(target)

const target = creep.pos.findClosestByRange(FIND_DROPPED_RESOURCES);
if(target) {
    if(creep.pickup(target) == ERR_NOT_IN_RANGE) {
        creep.moveTo(target);
    }
}

아이템(바닥에 떨어진 에너지 조각)을 줍습니다. 대상은 크립과 같은 칸 또는 인접한 칸에 있어야 합니다.

parametertypedescription
targetResource

줍는 대상 객체입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

파워 크립이 월드에 스폰되어 있지 않습니다.

ERR_INVALID_TARGET-7

대상이 줍기 가능한 올바른 객체가 아닙니다.

ERR_FULL-8

크립이 더 이상 자원을 받을 수 없습니다.

ERR_NOT_IN_RANGE-9

대상이 너무 멀리 있습니다.

rename(name)

Game.powerCreeps['PC1'].rename('PC1X');

파워 크립의 이름을 변경합니다. 크립은 월드에 스폰되어 있으면 안 됩니다.

parametertypedescription
namestring

파워 크립의 새 이름입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_NAME_EXISTS-3

지정한 이름의 파워 크립이 이미 존재합니다.

ERR_BUSY-4

파워 크립이 월드에 스폰되어 있습니다.

renew(target)

let powerBank = Game.getObjectById('XXX');
Game.powerCreeps['PowerCreep1'].renew(powerBank);

근처의 파워 스폰 또는 파워 뱅크를 사용해 수명(Time to live)을 즉시 최대치로 복구합니다. 대상은 인접 타일에 있어야 합니다.

parametertypedescription
targetStructurePowerBank | StructurePowerSpawn

대상 구조물입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

파워 크립이 월드에 스폰되어 있지 않습니다.

ERR_INVALID_TARGET-7

대상이 올바른 파워 뱅크/파워 스폰 객체가 아닙니다.

ERR_NOT_IN_RANGE-9

대상이 너무 멀리 있습니다.

say(message, [public])

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 속성으로 읽을 수 있습니다. 이모지를 포함해, 유효한 모든 유니코드 문자를 사용할 수 있습니다.

parametertypedescription
messagestring

표시할 메시지입니다. 최대 길이는 10자입니다.

public
optional
boolean

true로 설정하면 다른 플레이어도 이 메시지를 볼 수 있습니다. 기본값은 false입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

파워 크립이 월드에 스폰되어 있지 않습니다.

spawn(powerSpawn)

Game.powerCreeps['PowerCreep1'].spawn(Game.getObjectById('XXX'));

지정한 파워 스폰(Power Spawn)에 이 파워 크립을 스폰합니다.

parametertypedescription
powerSpawnStructurePowerSpawn

내 Power Spawn 구조물입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

크립 또는 스폰의 소유자가 아닙니다.

ERR_BUSY-4

파워 크립이 이미 월드에 스폰되어 있습니다.

ERR_INVALID_TARGET-7

지정한 객체가 Power Spawn이 아닙니다.

ERR_TIRED-11

쿨다운 때문에 파워 크립을 스폰할 수 없습니다.

ERR_RCL_NOT_ENOUGH-14

스폰을 사용하기에 방 컨트롤러 레벨이 부족합니다.

suicide()

파워 크립을 즉시 자살시킵니다. 영구적으로 파괴되지는 않으며, 스폰되지 않은 상태가 되어 다시 spawn할 수 있습니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_BUSY-4

파워 크립이 월드에 스폰되어 있지 않습니다.

transfer(target, resourceType, [amount])

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);
}

크립에서 다른 객체로 자원을 옮깁니다. 대상은 크립과 인접한 칸에 있어야 합니다.

parametertypedescription
targetCreep, PowerCreep, Structure

대상 객체입니다.

resourceTypestring

RESOURCE_* 상수 중 하나입니다.

amount
optional
number

옮길 자원 수량입니다. 생략하면 들고 있는 모든 수량을 사용합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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이 RESOURCE_* 상수 중 하나가 아니거나 amount가 올바르지 않습니다.

upgrade(power)

Game.powerCreeps['PowerCreep1'].upgrade(PWR_GENERATE_OPS);

크립을 업그레이드하여 새 파워 능력을 추가하거나 기존 파워의 레벨을 올립니다. 이 작업을 수행하려면 계정에 사용 가능한 Power Level이 1개 있어야 합니다.

parametertypedescription
powernumber

업그레이드할 파워 능력이며, PWR_* 상수 중 하나입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 크립의 소유자가 아닙니다.

ERR_NOT_ENOUGH_RESOURCES-6

계정의 Power Level이 충분하지 않습니다.

ERR_FULL-8

이 크립 레벨에서는 지정한 파워를 업그레이드할 수 없거나, 크립이 최대 레벨에 도달했습니다.

ERR_INVALID_ARGS-10

지정한 파워 ID가 올바르지 않습니다.

usePower(power, [target])

Game.powerCreeps['PowerCreep1'].usePower(PWR_GENERATE_OPS);
Game.powerCreeps['PowerCreep1'].usePower(PWR_OPERATE_SPAWN, Game.spawns['Spawn1']);

지정한 대상에 크립의 파워 중 하나를 적용합니다. 파워는 컨트롤러가 없거나, 컨트롤러가 파워 활성화된 방에서만 사용할 수 있습니다. 같은 틱에는 한 번에 하나의 파워만 사용할 수 있으며, usePower를 여러 번 호출하면 마지막 호출이 이전 호출을 덮어씁니다. 대상에 더 낮거나 같은 레벨의 동일 효과가 있으면 덮어쓰며, 기존 효과 레벨이 더 높으면 오류를 반환합니다.

사용 가능한 파워 전체 목록

parametertypedescription
powernumber

사용할 파워 능력이며, PWR_* 상수 중 하나입니다.

target
optional
RoomObject

방 안의 대상 객체입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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

크립이 지정한 파워 능력을 가지고 있지 않습니다.

withdraw(target, resourceType, [amount])

if(creep.withdraw(storage, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
    creep.moveTo(storage);
}

구조물 또는 톰스톤에서 자원을 꺼냅니다. 대상은 크립과 인접한 칸에 있어야 합니다. 같은 틱에 여러 크립이 같은 객체에서 withdraw할 수 있습니다. 또한 대상 위에 적 램파트가 없는 경우, 내 크립은 적 구조물/톰스톤에서도 자원을 꺼낼 수 있습니다.

이 메서드는 크립 사이의 자원 이동에 사용하면 안 됩니다. 크립 간 이동은 원래 크립에서 transfer 메서드를 사용하세요.

parametertypedescription
targetStructure, Tombstone, Ruin

대상 객체입니다.

resourceTypestring

RESOURCE_* 상수 중 하나입니다.

amount
optional
number

옮길 자원 수량입니다. 생략하면 가능한 모든 수량을 사용합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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이 RESOURCE_* 상수 중 하나가 아니거나 amount가 올바르지 않습니다.

Resource

드랍된 자원 조각입니다. 줍지 않으면 시간이 지나 붕괴(decay)합니다. 드랍된 자원 더미는 틱마다 ceil(amount/1000)만큼 붕괴합니다.

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

amountnumber

담고 있는 자원 유닛 수입니다.

idstring

고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.

resourceTypestring

RESOURCE_* 상수 중 하나입니다.

Room

내 유닛과 구조물이 존재하는 “방(Room)”을 나타내는 객체입니다. 주변을 살펴보고, 경로를 찾는 등 다양한 작업에 사용할 수 있습니다. 방 안의 모든 RoomObjectroom 속성으로 연결된 Room 인스턴스를 포함합니다.

controllerStructureController

이 방의 컨트롤러 구조물입니다. 존재하지 않으면 undefined입니다.

energyAvailablenumber

이 방의 모든 스폰과 익스텐션에 현재 사용 가능한 에너지 총량입니다.

energyCapacityAvailablenumber

이 방의 모든 스폰과 익스텐션의 energyCapacity 총합입니다.

memoryany

room.memory.stage = 2;

Memory.rooms[room.name]의 단축 접근자입니다. 방별 메모리 데이터 객체에 빠르게 접근할 때 사용할 수 있습니다. 메모리에 대해 더 알아보기

namestring

방 이름입니다.

storageStructureStorage

이 방의 스토리지 구조물입니다. 존재하지 않으면 undefined입니다.

terminalStructureTerminal

이 방의 터미널 구조물입니다. 존재하지 않으면 undefined입니다.

visualRoomVisual

이 방에 대한 RoomVisual 객체입니다. 이 객체를 사용해 방 안에 간단한 도형(선, 원, 텍스트 라벨)을 그릴 수 있습니다.

Room.serializePath(path)

const path = spawn.pos.findPathTo(source);
Memory.path = Room.serializePath(path);
creep.moveByPath(Memory.path);

경로 배열을 메모리에 저장하기 적합한 짧은 문자열 표현으로 직렬화합니다.

parametertypedescription
patharray

Room.findPath에서 가져온 경로 배열입니다.

반환 값

주어진 경로의 직렬화된 문자열 형태입니다.

Room.deserializePath(path)

const path = Room.deserializePath(Memory.path);
creep.moveByPath(path);

짧은 문자열 경로 표현을 배열 형태로 역직렬화합니다.

parametertypedescription
pathstring

직렬화된 경로 문자열입니다.

반환 값

경로 배열입니다.

createConstructionSite(x, y, structureType, [name])
(pos, structureType, [name])

Game.rooms.sim.createConstructionSite(10, 15, STRUCTURE_ROAD);
Game.rooms.sim.createConstructionSite(10, 15, STRUCTURE_SPAWN, 
    'MySpawn2');

지정한 위치에 새 ConstructionSite를 생성합니다.

parametertypedescription
xnumber

X 좌표입니다.

ynumber

Y 좌표입니다.

posobject

RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다.

structureTypestring

STRUCTURE_* 상수 중 하나입니다.

name
optional
string

이름을 지원하는 구조물의 이름입니다(현재는 스폰만 해당). 이름 길이 제한은 100자입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 방이 적 플레이어에게 점유(claim) 또는 예약(reserve)되어 있습니다.

ERR_INVALID_TARGET-7

지정한 위치에 구조물을 배치할 수 없습니다.

ERR_FULL-8

건설 현장이 너무 많습니다. 플레이어당 최대 건설 현장 수는 100개입니다.

ERR_INVALID_ARGS-10

위치가 올바르지 않습니다.

ERR_RCL_NOT_ENOUGH-14

방 컨트롤러 레벨이 부족합니다. 자세히 보기

createFlag(x, y, [name], [color], [secondaryColor])
(pos, [name], [color], [secondaryColor])

Game.rooms.sim.createFlag(5, 12, 'Flag1');

지정한 위치에 새 Flag를 생성합니다.

parametertypedescription
xnumber

X 좌표입니다.

ynumber

Y 좌표입니다.

posobject

RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다.

name
optional
string

새 플래그의 이름입니다. 유일해야 하며, 즉 Game.flags 객체에 같은 이름(해시 키)의 다른 플래그가 없어야 합니다. 지정하지 않으면 무작위 이름이 생성됩니다. 최대 길이는 100자입니다.

color
optional
number

새 플래그의 색상입니다. COLOR_* 상수 중 하나여야 합니다. 기본값은 COLOR_WHITE입니다.

secondaryColor
optional
string

새 플래그의 보조 색상입니다. COLOR_* 상수 중 하나여야 합니다. 기본값은 color와 같습니다.

반환 값

새 플래그의 이름 또는 다음 오류 코드 중 하나를 반환합니다:

constantvaluedescription
ERR_NAME_EXISTS-3

같은 이름의 플래그가 이미 존재합니다.

ERR_FULL-8

플래그가 너무 많습니다. 플레이어당 최대 플래그 수는 10000개입니다.

ERR_INVALID_ARGS-10

위치 또는 이름 또는 색상 상수가 올바르지 않습니다.

find(type, [opts])

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;
    }
});

방에서 지정한 타입의 모든 객체를 찾습니다. 사용자 정의 필터를 적용하기 전에, 해당 방과 타입에 대해 결과가 자동으로 캐시됩니다. 이 자동 캐시는 틱이 끝날 때까지 유지됩니다.

parametertypedescription
typenumber

FIND_* 상수 중 하나입니다.

opts
optional
object

추가 옵션을 포함하는 객체입니다:

  • filter
    object, function, string
    결과 목록은 Lodash.filter 메서드로 필터링됩니다.

반환 값

찾은 객체의 배열입니다.

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)

findExitTo(room)

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에 그대로 넘기면 됩니다.

parametertypedescription
roomstring, Room

다른 방의 이름 또는 Room 객체입니다.

반환 값

아래 방향 상수 중 하나를 반환합니다:

또는 아래 오류 코드 중 하나를 반환합니다:

constantvaluedescription
ERR_NO_PATH-2

경로를 찾을 수 없습니다.

ERR_INVALID_ARGS-10

위치 정보가 올바르지 않습니다.

findPath(fromPos, toPos, [opts])

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까지의 최적 경로를 찾습니다.

parametertypedescription
fromPosRoomPosition

시작 위치입니다.

toPosRoomPosition

끝 위치입니다.

opts
optional
object

추가 경로 탐색 플래그를 담고 있는 객체입니다:

  • ignoreCreeps
    boolean
    크립이 있는 칸을 이동 가능한 것으로 취급합니다. 이동 중인 크립이 너무 많을 때 등 일부 상황에서 유용할 수 있습니다. 기본값은 false입니다.
  • ignoreDestructibleStructures
    boolean
    파괴 가능한 구조물(건설된 벽, 램파트, 스폰, 익스텐션)이 있는 칸을 이동 가능한 것으로 취급합니다. 기본값은 false입니다.
  • ignoreRoads
    boolean
    도로(road) 구조물을 무시합니다. 이 옵션을 켜면 탐색 속도가 빨라질 수 있습니다. 기본값은 false입니다. 이 옵션은 새 PathFinder가 활성화되어 있을 때만 사용됩니다.
  • costCallback
    function(string, CostMatrix)
    탐색 중 어떤 방에 대해서든 CostMatrix를 수정할 수 있는 콜백입니다. 콜백은 roomNamecostMatrix 두 인자를 받습니다. costMatrix 인스턴스를 사용해 위치 비용을 변경할 수 있습니다. 이 콜백에서 새 매트릭스를 반환하면, 내장된 캐시 매트릭스 대신 그 매트릭스가 사용됩니다. 이 옵션은 새 PathFinder가 활성화되어 있을 때만 사용됩니다.
  • ignore
    array
    탐색 중 이동 가능한 타일로 취급할 방의 객체 또는 RoomPosition 객체 배열입니다. 새 PathFinder가 활성화되어 있을 때는 이 옵션을 사용할 수 없습니다(대신 costCallback을 사용하세요).
  • avoid
    array
    탐색 중 장애물로 취급할 방의 객체 또는 RoomPosition 객체 배열입니다. 새 PathFinder가 활성화되어 있을 때는 이 옵션을 사용할 수 없습니다(대신 costCallback을 사용하세요).
  • maxOps
    number
    가능한 경로 탐색 연산의 최대 한도입니다. 1 op ~ 0.001 CPU 비율을 기준으로 탐색에 사용할 CPU를 제한할 수 있습니다. 기본값은 2000입니다.
  • heuristicWeight
    number
    A 공식 F = G + weight H에서 휴리스틱에 적용할 가중치입니다. A* 알고리즘의 동작을 이해하고 있을 때만 사용하세요. 기본값은 1.2입니다.
  • serialize
    boolean
    true이면 결과 경로를 Room.serializePath로 직렬화합니다. 기본값은 false입니다.
  • maxRooms
    number
    탐색이 허용되는 최대 방 수입니다. 기본값(및 최대값)은 16입니다. 이 옵션은 새 PathFinder가 활성화되어 있을 때만 사용됩니다.
  • range
    number
    대상으로부터 지정한 직선 거리(range) 안의 위치까지 경로를 찾습니다. 기본값은 0입니다.
  • plainCost
    number
    평지(plain)에서 이동 비용입니다. 기본값은 1입니다.
  • swampCost
    number
    늪지(swamp)에서 이동 비용입니다. 기본값은 5입니다.

반환 값

아래 형식의 경로 스텝 배열을 반환합니다:

[
    { 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 },
    ...
]

getEventLog([raw])

// 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);
        }
    });
});

이 방에서 “이전 틱”에 발생한 이벤트 배열을 반환합니다.

parametertypedescription
raw
optional
boolean

이 파라미터가 false 또는 undefined이면, 이 메서드는 JSON.parse로 파싱된 객체를 반환하며(첫 접근 시 CPU 비용이 듭니다. 이후 호출에서는 반환 값이 캐시됩니다). raw가 truthy이면 문자열 형식의 원본 JSON을 반환합니다.

반환 값

이벤트 배열입니다. 각 이벤트는 아래 형식의 어떤 게임 액션을 나타냅니다:

{
    event: EVENT_ATTACK,
    objectId: '54bff72ab32a10f73a57d017',
    data: { /* ... */ }
}

data 속성은 아래 표에 따라 이벤트 타입별로 다릅니다:




eventdescription
EVENT_ATTACK 크립 또는 구조물이 다른 객체를 공격했습니다.
  • targetId - 대상 객체 ID
  • damage - 입힌 피해량(감소한 hits)
  • attackType - 아래 상수 중 하나:
    • EVENT_ATTACK_TYPE_MELEE - 크립이 attack으로 공격
    • EVENT_ATTACK_TYPE_RANGED - 크립이 rangedAttack으로 공격, 또는 타워가 attack으로 공격
    • EVENT_ATTACK_TYPE_RANGED_MASS - 크립이 rangedMassAttack으로 공격
    • EVENT_ATTACK_TYPE_DISMANTLE - 크립이 dismantle로 공격
    • EVENT_ATTACK_TYPE_HIT_BACK - 크립이 다른 크립의 attack에 반격(hit back)
    • EVENT_ATTACK_TYPE_NUKE - 핵이 착탄
EVENT_OBJECT_DESTROYED 게임 오브젝트가 파괴되거나 사망했습니다.
  • type - 파괴된 객체의 타입
EVENT_ATTACK_CONTROLLER 크립이 이 방에서 attackController를 수행했습니다.
EVENT_BUILD 크립이 이 방에서 build를 수행했습니다.
  • targetId - 대상 객체 ID
  • amount - 증가한 건설 진행도
  • structureType - STRUCTURE_ 상수 중 하나
  • x - 대상 건설 현장의 X 좌표
  • y - 대상 건설 현장의 Y 좌표
  • incomplete - 건설 진행 상태
EVENT_HARVEST 크립이 이 방에서 harvest를 수행했습니다.
  • targetId - 대상 객체 ID
  • amount - 채집한 자원량
EVENT_HEAL 크립 또는 타워가 크립을 치유했습니다.
  • targetId - 대상 객체 ID
  • amount - 치유한 hits 양
  • healType - 아래 상수 중 하나:
    • EVENT_HEAL_TYPE_MELEE - 크립이 heal로 치유
    • EVENT_HEAL_TYPE_RANGED - 크립이 rangedHeal로 치유, 또는 타워가 heal로 치유
EVENT_REPAIR 크립 또는 타워가 구조물을 수리했습니다.
  • targetId - 대상 객체 ID
  • amount - 수리한 hits 양
  • energySpent - 작업에 소비된 에너지 양
EVENT_RESERVE_CONTROLLER 크립이 이 방에서 reserveController를 수행했습니다.
  • amount - 증가한 예약 시간
EVENT_UPGRADE_CONTROLLER 크립이 이 방에서 upgradeController를 수행했습니다.
  • amount - 증가한 컨트롤 포인트
  • energySpent - 작업에 소비된 에너지 양
EVENT_EXIT 크립이 다른 방으로 이동했습니다.
  • room - 목표 방 이름
  • x, y - 다른 방에서 크립이 등장한 좌표
EVENT_TRANSFER 링크가 transferEnergy를 수행했거나, 크립이 transfer 또는 withdraw를 수행했습니다.
  • targetId - 대상 객체 ID
  • resourceType - 전송된 자원 타입
  • amount - 전송된 자원량
EVENT_POWER 크립의 파워 중 하나를 지정한 대상에 적용했습니다.
  • targetId - 대상 객체 ID
  • power - 사용할 파워 능력(PWR_ 상수 중 하나)

getPositionAt(x, y)

const pos = Game.rooms.sim.getPositionAt(5,12);
const source = pos.findClosestByRange(FIND_SOURCES_ACTIVE);

지정한 위치에 RoomPosition 객체를 생성합니다.

parametertypedescription
xnumber

X 좌표입니다.

ynumber

Y 좌표입니다.

반환 값

RoomPosition 객체를 반환하며, 얻을 수 없으면 null을 반환합니다.

getTerrain()

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 객체를 반환합니다.

lookAt(x, y)
(target)

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);
    }
});

지정한 방 위치에 있는 객체 목록을 가져옵니다.

parametertypedescription
xnumber

방 내부의 X 좌표입니다.

ynumber

방 내부의 Y 좌표입니다.

targetobject

RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다.

반환 값

아래 형식의, 해당 위치에 있는 객체 배열을 반환합니다:

[
    { type: 'creep', creep: {...} },
    { type: 'structure', structure: {...} },
    ...
    { type: 'terrain', terrain: 'swamp' }
]

lookAtArea(top, left, bottom, right, [asArray])

const look = creep.room.lookAtArea(10,5,11,7);

지정한 방 영역(area)에 있는 객체 목록을 가져옵니다.

parametertypedescription
topnumber

영역의 위쪽 Y 경계입니다.

leftnumber

영역의 왼쪽 X 경계입니다.

bottomnumber

영역의 아래쪽 Y 경계입니다.

rightnumber

영역의 오른쪽 X 경계입니다.

asArray
optional
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'}
]

lookForAt(type, x, y)
(type, target)

const found = creep.room.lookForAt(LOOK_CREEPS, target);
if(found.length && found[0].getActiveBodyparts(ATTACK) == 0) {
    creep.moveTo(found[0]);
}

지정한 방 위치에서, 주어진 타입의 객체를 가져옵니다.

parametertypedescription
typestring

LOOK_* 상수 중 하나입니다.

xnumber

방 내부의 X 좌표입니다.

ynumber

방 내부의 Y 좌표입니다.

targetobject

RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다.

반환 값

찾았다면 지정한 타입의 객체 배열을 반환합니다.

lookForAtArea(type, top, left, bottom, right, [asArray])

const look = creep.room.lookForAtArea(LOOK_STRUCTURES,10,5,11,7);

지정한 방 영역(area)에서, 주어진 타입의 객체 목록을 가져옵니다.

parametertypedescription
typestring

LOOK_* 상수 중 하나입니다.

topnumber

영역의 위쪽 Y 경계입니다.

leftnumber

영역의 왼쪽 X 경계입니다.

bottomnumber

영역의 아래쪽 Y 경계입니다.

rightnumber

영역의 오른쪽 X 경계입니다.

asArray
optional
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

룸 지형 데이터에 빠르게 접근할 수 있게 해주는 오브젝트입니다. 이 오브젝트는 여러분이 접근 권한이 없는 룸에 대해서도 월드의 어떤 룸이든 생성할 수 있습니다.

기술적으로 모든 Room.Terrain 오브젝트는, 대응되는 최소 접근자(accessors)를 가진 정적 지형 버퍼 위에 있는 매우 가벼운 어댑터(adapter)입니다.

constructor(roomName)

const terrain = new Room.Terrain("E2S7");
const terrain = new Room.Terrain(Game.creeps.John.room.name);

룸 이름으로 새 Terrain을 생성합니다. Terrain 오브젝트는 접근 권한이 없더라도 월드의 어떤 룸이든 생성할 수 있습니다.

parametertypedescription
roomNamestring

룸 이름.

get(x, y)

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(...)과 달리, 이 메서드는 문자열 연산을 수행하지 않으며 정수 지형 타입 값을 반환합니다(아래 참고).

parametertypedescription
xnumber

룸 내 X 좌표.

ynumber

룸 내 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

getRawBuffer([destinationArray])

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입니다.

parametertypedescription
destinationArray
optional
Uint8Array

지형이 복사될 typed array view.

경고: 이 메서드는 지형 데이터의 기저 표현에 의존합니다. 룸 전체(2500 타일)의 지형 데이터를 얻는 가장 빠른 방법이지만, 향후 언제든 deprecated될 수 있거나 반환 타입이 바뀔 수 있음을 염두에 두세요.

사용 예시를 참고하세요. 바이너리 모듈에 대해서도 참고할 수 있습니다.

반환 값

크기 2500의 새 Uint8Array typed array로, 룸 지형 표현의 복사본을 반환합니다.

각 원소는 정수이며, 적절한 TERRAIN_MASK_* 상수로 비트 AND(&)를 적용해 지형 타입을 얻을 수 있습니다. 룸 타일은 행(row) 단위로 저장됩니다.

destinationArray가 지정되면, 복사에 성공했을 때는 채워진 destinationArray 레퍼런스를 반환하고, 실패하면 에러 코드를 반환합니다:

constantvaluedescription
ERR_INVALID_ARGS-10

destinationArray 타입이 호환되지 않습니다.

RoomObject

룸 안에서 좌표(position)를 가지는 모든 오브젝트입니다. 거의 모든 게임 오브젝트 프로토타입은 RoomObject에서 파생됩니다.

effectsarray

적용 중인 효과 목록. 다음 프로퍼티를 가진 오브젝트의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 파워의 레벨. 파워 효과가 아닌 경우에는 존재하지 않습니다.

ticksRemainingnumber

효과가 앞으로 몇 틱 동안 지속되는지.

posRoomPosition

이 오브젝트의 룸 내 위치를 나타내는 오브젝트입니다.

roomRoom

Room 오브젝트에 대한 링크입니다. 오브젝트가 깃발(flag) 또는 건설 사이트(construction site)이고, 해당 오브젝트가 여러분에게 보이지 않는 룸에 배치되어 있는 경우에는 undefined일 수 있습니다.

RoomPosition

방 안의 특정 위치를 나타내는 객체입니다. 방 안의 모든 RoomObjectpos 속성으로 RoomPosition을 포함합니다. 사용자 정의 위치의 RoomPosition 객체는 Room.getPositionAt 메서드 또는 생성자(constructor)를 통해 얻을 수 있습니다.

constructor(x, y, roomName)

const pos = new RoomPosition(10, 25, 'sim');

생성자를 사용해 새 RoomPosition 객체를 만들 수 있습니다.

parametertypedescription
xnumber

방 내부의 X 좌표입니다.

ynumber

방 내부의 Y 좌표입니다.

roomNamestring

방 이름입니다.

roomNamestring

방 이름입니다.

xnumber

방 내부의 X 좌표입니다.

ynumber

방 내부의 Y 좌표입니다.

createConstructionSite(structureType, [name])

Game.flags['Flag1'].pos.createConstructionSite(STRUCTURE_ROAD);
Game.flags['Flag1'].pos.createConstructionSite(STRUCTURE_SPAWN, 'MySpawn2');

지정한 위치에 새 ConstructionSite를 생성합니다.

parametertypedescription
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

name
optional
string

이름을 지원하는 구조물의 이름입니다(현재는 스폰만 해당).

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_INVALID_TARGET-7

지정한 위치에 구조물을 배치할 수 없습니다.

ERR_FULL-8

건설 현장이 너무 많습니다. 플레이어당 최대 건설 현장 수는 100개입니다.

ERR_INVALID_ARGS-10

위치가 올바르지 않습니다.

ERR_RCL_NOT_ENOUGH-14

방 컨트롤러 레벨이 부족합니다. 자세히 보기

createFlag([name], [color], [secondaryColor])

creep.pos.createFlag('Flag1');

지정한 위치에 새 Flag를 생성합니다.

parametertypedescription
name
optional
string

새 플래그의 이름입니다. 유일해야 하며, 즉 Game.flags 객체에 같은 이름(해시 키)의 다른 플래그가 없어야 합니다. 지정하지 않으면 무작위 이름이 생성됩니다.

color
optional
string

새 플래그의 색상입니다. COLOR_* 상수 중 하나여야 합니다. 기본값은 COLOR_WHITE입니다.

secondaryColor
optional
string

새 플래그의 보조 색상입니다. COLOR_* 상수 중 하나여야 합니다. 기본값은 color와 같습니다.

반환 값

새 플래그의 이름 또는 아래 오류 코드 중 하나를 반환합니다:

constantvaluedescription
ERR_NAME_EXISTS-3

같은 이름의 플래그가 이미 존재합니다.

ERR_INVALID_ARGS-10

위치 또는 색상 상수가 올바르지 않습니다.

findClosestByPath(type, [opts])
(objects, [opts])

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 알고리즘을 사용합니다.

parametertypedescription
typenumber

Room.find를 참고하세요.

objectsarray

검색 대상이 될 방의 객체 또는 RoomPosition 객체 배열입니다.

opts
optional
object

경로 탐색 옵션 객체(Room.findPath 참고) 또는 아래 옵션들 중 하나를 포함하는 객체입니다:

  • filter
    object, function, string
    Lodash.filter 메서드를 통해 필터를 통과한 객체만 사용됩니다.
  • algorithm
    string
    아래 상수 중 하나입니다:
    • astar는 가능한 대상이 비교적 적을 때 더 빠릅니다;
    • dijkstra는 가능한 대상이 많거나 가장 가까운 대상이 근처에 있을 때 더 빠릅니다.
    기본값은 휴리스틱으로 자동 결정됩니다.

반환 값

가장 가까운 객체를 찾으면 그 객체를, 찾지 못하면 null을 반환합니다.

findClosestByRange(type, [opts])
(objects, [opts])

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);

주어진 위치에서 “직선 거리”가 가장 짧은 객체를 찾습니다.

parametertypedescription
typenumber

Room.find를 참고하세요.

objectsarray

검색 대상이 될 방의 객체 또는 RoomPosition 객체 배열입니다.

opts
optional
object

아래 옵션 중 하나를 포함하는 객체입니다:

  • filter
    object, function, string
    Lodash.filter 메서드를 통해 필터를 통과한 객체만 사용됩니다.

반환 값

가장 가까운 객체를 찾으면 그 객체를, 찾지 못하면 null을 반환합니다.

findInRange(type, range, [opts])
(objects, range, [opts])

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) 안의 모든 객체를 찾습니다.

parametertypedescription
typenumber

Room.find를 참고하세요.

objectsarray

검색 대상이 될 방의 객체 또는 RoomPosition 객체 배열입니다.

rangenumber

거리(range) 값입니다.

opts
optional
object

Room.find를 참고하세요.

반환 값

찾은 객체의 배열입니다.

findPathTo(x, y, [opts])
(target, [opts])

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의 단축형입니다. 대상이 다른 방에 있다면, 해당 방으로 향하는 적절한 출구가 목표로 사용됩니다.

parametertypedescription
xnumber

방 내부의 X 좌표입니다.

ynumber

방 내부의 Y 좌표입니다.

targetobject

RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다.

opts
optional
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 },
    ...
]    

getDirectionTo(x,y)
(target)

const direction = creep.pos.getDirectionTo(target);
creep.move(direction);

지정한 위치까지의 직선 방향을 구합니다.

parametertypedescription
xnumber

방 내부의 X 좌표입니다.

ynumber

방 내부의 Y 좌표입니다.

targetobject

RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다.

반환 값

방향 상수 중 하나를 나타내는 숫자입니다.

getRangeTo(x,y)
(target)

const range = creep.pos.getRangeTo(target);
if(range <= 3) {
    creep.rangedAttack(target);
}

지정한 위치까지의 직선 거리(range)를 구합니다.

parametertypedescription
xnumber

방 내부의 X 좌표입니다.

ynumber

방 내부의 Y 좌표입니다.

targetobject

RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다.

반환 값

지정한 위치까지의 칸 수(거리)입니다.

inRangeTo(x, y, range)
(target, range)

if(creep.pos.inRangeTo(target, 3)) {
    creep.rangedAttack(target);
}

이 위치가 다른 위치로부터 지정한 거리(range) 안에 있는지 확인합니다.

parametertypedescription
xnumber

같은 방에서의 X 좌표입니다.

ynumber

같은 방에서의 Y 좌표입니다.

targetRoomPosition

대상 위치입니다.

rangenumber

거리(range) 값입니다.

반환 값

불리언 값을 반환합니다.

isEqualTo(x,y)
(target)

if(creep.pos.isEqualTo(10,25)) {
    creep.move(RIGHT);
}
if(creep.pos.isEqualTo(Game.flags.Flag1)) {
    creep.move(RIGHT);
}

이 위치가 지정한 위치와 동일한지 확인합니다.

parametertypedescription
xnumber

방 내부의 X 좌표입니다.

ynumber

방 내부의 Y 좌표입니다.

targetobject

RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다.

반환 값

불리언 값을 반환합니다.

isNearTo(x,y)
(target)

if(creep.pos.isNearTo(target)) {
    creep.transfer(target, RESOURCE_ENERGY);
}

이 위치가 지정한 위치의 인접 칸에 있는지 확인합니다. inRangeTo(target, 1)과 동일합니다.

parametertypedescription
xnumber

방 내부의 X 좌표입니다.

ynumber

방 내부의 Y 좌표입니다.

targetobject

RoomPosition 객체 또는 RoomPosition을 포함하는 어떤 객체든 가능합니다.

반환 값

불리언 값을 반환합니다.

look()

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' }
]

lookFor(type)

const found = Game.flags.Flag1.pos.lookFor(LOOK_CREEPS);
if(found.length && found[0].getActiveBodyparts(ATTACK) == 0) {
    creep.moveTo(found[0]);
}

지정한 방 위치에서, 주어진 타입의 객체를 가져옵니다.

parametertypedescription
typestring

LOOK_* 상수 중 하나입니다.

반환 값

찾았다면 지정한 타입의 객체 배열을 반환합니다.

RoomVisual

룸 비주얼(Room visuals)은 게임 룸 안에 다양한 시각적 디버그 정보를 표시하는 방법을 제공합니다. RoomVisual 객체를 사용해 본인에게만 보이는 간단한 도형을 그릴 수 있습니다. 모든 Room 객체에는 이미 visual 속성이 있지만, 생성자를 사용하면 (시야가 없어도) 어떤 방에 대해서든 새 RoomVisual 객체를 만들 수도 있습니다.

룸 비주얼은 데이터베이스에 저장되지 않으며, 오직 브라우저에 표시하는 것이 목적입니다. 모든 그림은 1틱 동안만 유지되며, 업데이트하지 않으면 사라집니다. 모든 RoomVisual API 호출은 추가 CPU 비용이 없습니다(비용은 자연 비용이며, 주로 간단한 JSON.serialize 호출과 관련됩니다). 다만 사용량 제한이 있습니다: 방 하나당 직렬화된 데이터는 500 KB를 초과하여 게시할 수 없습니다(getSize 메서드 참고).

모든 좌표는 게임 좌표로 측정되며 타일의 중앙을 기준으로 합니다. 즉 (10,10)은 x:10; y:10 위치에 있는 크립의 중앙을 가리킵니다. 소수 좌표도 사용할 수 있습니다.

constructor([roomName])

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 객체를 직접 생성할 수 있습니다.

parametertypedescription
roomName
optional
string

방 이름입니다. undefined이면 비주얼이 모든 방에 동시에 게시됩니다.

roomNamestring

방 이름입니다.

line(x1, y1, x2, y2, [style])
(pos1, pos2, [style])

new RoomVisual('W1N1').line(10,15, 20,20);
creep.room.visual.line(creep.pos, target.pos,
    {color: 'red', lineStyle: 'dashed'});

선을 그립니다.

parametertypedescription
x1number

시작 X 좌표입니다.

y1number

시작 Y 좌표입니다.

x2number

끝 X 좌표입니다.

y2number

끝 Y 좌표입니다.

pos1RoomPosition

시작 위치 객체입니다.

pos2RoomPosition

끝 위치 객체입니다.

style
optional
object

다음 속성을 가진 객체입니다:

  • width
    number
    선 두께이며 기본값은 0.1입니다.
  • color
    string
    선 색상입니다(웹에서 사용 가능한 어떤 형식도 가능). 기본값은 #ffffff(흰색)입니다.
  • opacity
    number
    불투명도 값이며 기본값은 0.5입니다.
  • lineStyle
    string
    undefined(실선), dashed, dotted 중 하나입니다. 기본값은 undefined입니다.

반환 값

메서드 체이닝을 할 수 있도록 RoomVisual 객체 자기 자신을 반환합니다.

circle(x, y, [style])
(pos, [style])

new RoomVisual('W1N1').circle(10,15);
creep.room.visual.circle(creep.pos,
    {fill: 'transparent', radius: 0.55, stroke: 'red'});

원을 그립니다.

parametertypedescription
xnumber

중심의 X 좌표입니다.

ynumber

중심의 Y 좌표입니다.

posRoomPosition

중심의 위치 객체입니다.

style
optional
object

다음 속성을 가진 객체입니다:

  • radius
    number
    원의 반지름이며 기본값은 0.15입니다.
  • fill
    string
    채우기 색상입니다(웹에서 사용 가능한 어떤 형식도 가능). 기본값은 #ffffff(흰색)입니다.
  • opacity
    number
    불투명도 값이며 기본값은 0.5입니다.
  • stroke
    string
    외곽선 색상입니다(웹에서 사용 가능한 어떤 형식도 가능). 기본값은 undefined(외곽선 없음)입니다.
  • strokeWidth
    number
    외곽선 두께이며 기본값은 0.1입니다.
  • lineStyle
    string
    undefined(실선), dashed, dotted 중 하나입니다. 기본값은 undefined입니다.

반환 값

메서드 체이닝을 할 수 있도록 RoomVisual 객체 자기 자신을 반환합니다.

rect(x, y, width, height, [style])
(topLeftPos, width, height, [style])

// 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'});

사각형을 그립니다.

parametertypedescription
xnumber

좌상단 모서리의 X 좌표입니다.

ynumber

좌상단 모서리의 Y 좌표입니다.

topLeftPosRoomPosition

좌상단 모서리의 위치 객체입니다.

widthnumber

사각형의 너비입니다.

heightnumber

사각형의 높이입니다.

style
optional
object

다음 속성을 가진 객체입니다:

  • fill
    string
    채우기 색상입니다(웹에서 사용 가능한 어떤 형식도 가능). 기본값은 #ffffff(흰색)입니다.
  • opacity
    number
    불투명도 값이며 기본값은 0.5입니다.
  • stroke
    string
    외곽선 색상입니다(웹에서 사용 가능한 어떤 형식도 가능). 기본값은 undefined(외곽선 없음)입니다.
  • strokeWidth
    number
    외곽선 두께이며 기본값은 0.1입니다.
  • lineStyle
    string
    undefined(실선), dashed, dotted 중 하나입니다. 기본값은 undefined입니다.

반환 값

메서드 체이닝을 할 수 있도록 RoomVisual 객체 자기 자신을 반환합니다.

poly(points, [style])

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'}); 

폴리라인을 그립니다.

parametertypedescription
pointsarray

점들의 배열입니다. 각 요소는 숫자 2개로 이루어진 배열(예: [10,15])이거나, RoomPosition 객체여야 합니다.

style
optional
object

다음 속성을 가진 객체입니다:

  • fill
    string
    채우기 색상입니다(웹에서 사용 가능한 어떤 형식도 가능). 기본값은 undefined(채우기 없음)입니다.
  • opacity
    number
    불투명도 값이며 기본값은 0.5입니다.
  • stroke
    string
    외곽선 색상입니다(웹에서 사용 가능한 어떤 형식도 가능). 기본값은 #ffffff(흰색)입니다.
  • strokeWidth
    number
    외곽선 두께이며 기본값은 0.1입니다.
  • lineStyle
    string
    undefined(실선), dashed, dotted 중 하나입니다. 기본값은 undefined입니다.

반환 값

메서드 체이닝을 할 수 있도록 RoomVisual 객체 자기 자신을 반환합니다.

text(text, x, y, [style])
(text, pos, [style])

new RoomVisual('W1N1').text("Target💥", 10, 15, {color: 'green', font: 0.8}); 

텍스트 라벨을 그립니다. 이모지를 포함해, 유효한 모든 유니코드 문자를 사용할 수 있습니다.

parametertypedescription
textstring

텍스트 메시지입니다.

xnumber

라벨 기준선(baseline) 지점의 X 좌표입니다.

ynumber

라벨 기준선(baseline) 지점의 Y 좌표입니다.

posRoomPosition

라벨 기준선(baseline)의 위치 객체입니다.

style
optional
object

다음 속성을 가진 객체입니다:

  • color
    string
    글꼴 색상입니다(웹에서 사용 가능한 어떤 형식도 가능). 기본값은 #ffffff(흰색)입니다.
  • font
    number, string
    아래 형식 중 하나의 숫자 또는 문자열입니다:
    • 0.7 - 게임 좌표 기준 상대 크기
    • 20px - 픽셀 기준 절대 크기
    • 0.7 serif
    • bold italic 1.5 Times New Roman
  • stroke
    string
    외곽선 색상입니다(웹에서 사용 가능한 어떤 형식도 가능). 기본값은 undefined(외곽선 없음)입니다.
  • strokeWidth
    number
    외곽선 두께이며 기본값은 0.15입니다.
  • backgroundColor
    string
    배경색입니다(웹에서 사용 가능한 어떤 형식도 가능). 기본값은 undefined(배경 없음)입니다. 배경을 켜면 텍스트 세로 정렬이 middle로 설정됩니다(기본은 baseline).
  • backgroundPadding
    number
    배경 사각형의 여백(padding)이며 기본값은 0.3입니다.
  • align
    string
    텍스트 정렬입니다. center, left, right 중 하나이며 기본값은 center입니다.
  • opacity
    number
    불투명도 값이며 기본값은 1.0입니다.

반환 값

메서드 체이닝을 할 수 있도록 RoomVisual 객체 자기 자신을 반환합니다.

clear()

new RoomVisual('W1N1').clear();

방에서 모든 비주얼을 제거합니다.

반환 값

메서드 체이닝을 할 수 있도록 RoomVisual 객체 자기 자신을 반환합니다.

getSize()

if(creep.room.visual.getSize() >= 512000) {
    // cannot add more visuals in this tick
}

현재 틱에서 방에 추가된 모든 비주얼 데이터의 저장 크기를 가져옵니다. 이 값은 512,000(500 KB)을 초과하면 안 됩니다.

반환 값

비주얼의 크기를 바이트 단위로 반환합니다.

export()

Memory.RoomVisualData['E2S7'] = Game.rooms.E2S7.visual.export();

현재 틱에서 방에 추가된 모든 비주얼을 압축된 형태로 반환합니다.

반환 값

비주얼 데이터가 담긴 문자열입니다. 이 문자열로 할 수 있는 일은 많지 않으며, 보통 나중을 위해 저장하는 용도로 사용합니다.

import(val)

if(Memory.RoomVisualData['E2S7']) {
    Game.rooms.E2S7.visual.import(Memory.RoomVisualData['E2S7']);
}

이전에(RoomVisual.export로) 내보낸 룸 비주얼을 현재 틱의 룸 비주얼 데이터에 추가합니다.

parametertypedescription
valstring

RoomVisual.export에서 반환된 문자열입니다.

반환 값

메서드 체이닝을 할 수 있도록 RoomVisual 객체 자기 자신을 반환합니다.

Ruin

파괴된 구조물입니다. 이동 가능한(walkable) 오브젝트입니다.

Decay 일부 특수 케이스를 제외하면 500틱

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

destroyTimenumber

구조물이 파괴된 시각입니다.

idstring

고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.

storeStore

이 구조물의 자원을 담고 있는 Store 오브젝트입니다.

structureStructure | OwnedStructure

파괴된 구조물의 기본 데이터를 담는 오브젝트입니다.

ticksToDecaynumber

이 폐허가 붕괴(decay)되기까지 남은 게임 틱 수입니다.

Source

에너지 소스 오브젝트입니다. WORK 바디 파트를 가진 크립이 채집할 수 있습니다.

Energy amount 중앙 룸: 4000
소유/예약된 룸: 3000
예약되지 않은 룸: 1500
Energy regeneration 매 300 게임 틱

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

energynumber

남아 있는 에너지 양입니다.

energyCapacitynumber

소스의 총 에너지 양입니다.

idstring

고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.

ticksToRegenerationnumber

소스가 다시 채워질 때까지 남은 시간입니다.

Store

적재물(cargo)로 자원을 담을 수 있는 오브젝트입니다.

게임에는 두 종류의 store가 있습니다: 범용 store와 제한 store.

Store 프로토타입은 두 종류 모두 동일하지만, 메서드에서 resource 인자에 따라 동작이 달라집니다.

store에서 특정 자원을 얻으려면 오브젝트 프로퍼티로 접근하면 됩니다:

console.log(creep.store[RESOURCE_ENERGY]);

getCapacity([resource])

if(creep.store[RESOURCE_ENERGY] < creep.store.getCapacity()) {
    goHarvest(creep);
}

지정한 자원에 대한 store의 용량을 반환합니다. 범용 store에서는 resource가 undefined이면 총 용량을 반환합니다.

parametertypedescription
resource
optional
string

자원 타입.

반환 값

용량 숫자를 반환하거나, 이 store 타입에 대해 resource가 유효하지 않으면 null을 반환합니다.

getFreeCapacity([resource])

if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
    creep.transfer(structure, RESOURCE_ENERGY);
}

store의 남은 용량을 반환합니다. 제한 store에서는 resource가 정의되어 있고 이 store에 유효한 경우, 해당 자원에 대해 사용 가능한 용량을 반환합니다.

parametertypedescription
resource
optional
string

자원 타입.

반환 값

사용 가능한 용량 숫자를 반환하거나, 이 store 타입에 대해 resource가 유효하지 않으면 null을 반환합니다.

getUsedCapacity([resource])

if(Game.rooms['W1N1'].terminal.store.getUsedCapacity() == 0) {
    // terminal is empty
}

지정한 자원이 사용 중인 용량을 반환합니다. 범용 store에서는 resource가 undefined이면 총 사용 용량을 반환합니다.

parametertypedescription
resource
optional
string

자원 타입.

반환 값

사용 중인 용량 숫자를 반환하거나, 이 store 타입에 대해 resource가 유효하지 않으면 null을 반환합니다.

Structure

모든 구조물의 기본 프로토타입 오브젝트입니다.

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

hitsnumber

구조물의 현재 hit points입니다.

hitsMaxnumber

구조물의 총 hit points입니다.

idstring

고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.

structureTypestring

STRUCTURE_* 상수 중 하나입니다.

destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아니며, 여러분의 룸에도 있지 않습니다.

ERR_BUSY-4

룸에 적대 크립이 있습니다.

isActive()

이 구조물을 사용할 수 있는지 확인합니다. 룸 컨트롤러 레벨이 부족하면 false를 반환하며, 게임에서는 해당 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값입니다.

notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 켜거나 끕니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지 끌지 여부.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 boolean 값이 아닙니다.

StructureContainer

자원을 저장할 수 있는 작은 컨테이너입니다. 이동 가능한(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를 잃습니다.

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

storeStore

const containersWithEnergy = room.find(FIND_STRUCTURES, {
    filter: (i) => i.structureType == STRUCTURE_CONTAINER &&
                   i.store[RESOURCE_ENERGY] > 0
});

이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.

storeCapacitynumber

This property is deprecated and will be removed soon.

.store.getCapacity()에 대한 별칭(alias)입니다.

ticksToDecaynumber

이 컨테이너가 일부 hit points를 잃기까지 남은 게임 틱 수입니다.

StructureController

이 구조물을 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

세이프 모드(Safe mode)

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
  • 컨트롤러 레벨이 올라갈 때마다 사용 가능한 활성화 1회를 생성
  • 크립이 ghodium 1,000을 사용해 생성할 수 있음
  • 컨트롤러가 다운그레이드되면 사용 가능한 활성화는 모두 리셋됨

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

isPowerEnabledboolean

이 룸에서 power 사용이 활성화되어 있는지 여부입니다. 파워를 켜려면 PowerCreep.enableRoom을 사용하세요.

levelnumber

현재 컨트롤러 레벨(0~8).

progressnumber

다음 레벨로 업그레이드하기 위한 현재 진행도입니다.

progressTotalnumber

다음 레벨에 도달하기 위해 필요한 진행도입니다.

reservationobject

컨트롤러가 예약(reservation)되어 있다면 예약 정보 오브젝트입니다:

parametertypedescription
usernamestring

이 컨트롤러를 예약한 플레이어 이름.

ticksToEndnumber

예약이 종료될 게임 틱 시각.

safeModenumber

남은 세이프 모드 틱 수 또는 undefined.

safeModeAvailablenumber

사용 가능한 세이프 모드 활성화 수입니다.

safeModeCooldownnumber

이 기간(틱) 동안에는 새 세이프 모드 활성화가 차단됩니다. 쿨다운이 비활성일 때는 undefined입니다.

signobject

컨트롤러에 사인(sign)이 있다면 사인 정보 오브젝트입니다:

parametertypedescription
usernamestring

사인한 플레이어 이름.

textstring

사인 텍스트.

timenumber

게임 틱 기준 사인 시간.

datetimeDate

실제 날짜 기준 사인 시간.

ticksToDowngradenumber

이 컨트롤러가 레벨을 1 잃게 되는 게임 틱 시각입니다. 이 타이머는 레벨 업/다운 시 50%로 설정되며, Creep.upgradeController로 증가시킬 수 있습니다. 다음 레벨로 업그레이드하려면 이 값이 꽉 차 있어야 합니다.

upgradeBlockednumber

공격으로 인해 이 컨트롤러를 업그레이드할 수 없는 기간(틱)입니다. 이 기간 동안 세이프 모드도 사용할 수 없습니다.

activateSafeMode()

room.controller.activateSafeMode();

가능하다면 세이프 모드를 활성화합니다.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 컨트롤러의 소유자가 아닙니다.

ERR_BUSY-4

이미 세이프 모드인 다른 룸이 있습니다.

ERR_NOT_ENOUGH_RESOURCES-6

사용 가능한 세이프 모드 활성화가 없습니다.

ERR_TIRED-11

이전 세이프 모드가 아직 쿨다운 중이거나, 컨트롤러가 upgradeBlocked 상태이거나, 컨트롤러가 50% + 5000틱 이상으로 다운그레이드된 상태입니다.

unclaim()

room.controller.unclaim();

점령(claim)한 컨트롤러를 다시 중립 상태로 만듭니다.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 컨트롤러의 소유자가 아닙니다.

StructureExtension

에너지를 담고 있으며, 더 큰 크립을 스폰하는 데 사용할 수 있습니다. 익스텐션은 룸 안 어디에나 배치할 수 있고, 거리에 상관없이 어떤 스폰이든 사용할 수 있습니다.

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

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

energynumber

This property is deprecated and will be removed soon.

.store[RESOURCE_ENERGY]에 대한 별칭(alias)입니다.

energyCapacitynumber

This property is deprecated and will be removed soon.

.store.getCapacity(RESOURCE_ENERGY)에 대한 별칭(alias)입니다.

익스텐션이 담을 수 있는 총 에너지 양입니다.

storeStore

if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
    creep.transfer(structure, RESOURCE_ENERGY);
}

이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.

StructureExtractor

미네랄 매장지를 채굴할 수 있게 해줍니다. 미네랄에 대해서는 이 문서에서 더 알아보세요.

Controller level 6
Cost 5,000
Hits 500
Cooldown harvest 액션마다 5틱

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

cooldownnumber

다음 harvest 액션이 가능해질 때까지 남은 게임 틱 수입니다.

StructureFactory

기본 미네랄과 다른 상품으로부터 거래용 상품(commodities)을 생산합니다. 상품에 대해서는 이 문서에서 더 알아보세요.

Controller level
1-6
7-8 1 factory
Cost 100,000
Hits 1000
Capacity 50,000
Production cooldown 자원에 따라 다름

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

cooldownnumber

다음 생산이 가능해질 때까지 팩토리가 기다려야 하는 게임 틱 수입니다.

levelnumber

if(!factory.level) {
    Game.powerCreeps['MyOperator1'].usePower(PWR_OPERATE_FACTORY, factory);
}

팩토리 레벨입니다. 새로 건설된 팩토리에 PWR_OPERATE_FACTORY 파워를 적용해 설정할 수 있습니다. 한 번 설정되면 레벨은 변경할 수 없습니다.

storeStore

이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.

storeCapacitynumber

This property is deprecated and will be removed soon.

.store.getCapacity()에 대한 별칭(alias)입니다.

produce(resourceType)

factory.produce(RESOURCE_UTRIUM_BAR);

지정한 상품을 생산합니다. 필요한 모든 재료는 팩토리 store에 있어야 합니다.

parametertypedescription
resourceTypestring

RESOURCE_* 상수 중 하나입니다.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

팩토리가 PWR_OPERATE_FACTORY 파워로 운영 중이 아닙니다.

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 레벨이 부족합니다.

StructureInvaderCore

이 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

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

levelnumber

Stronghold 레벨입니다. 전리품의 양과 품질은 레벨에 따라 달라집니다.

ticksToDeploynumber

아직 deploy되지 않은 stronghold의 타이머를 나타냅니다. 그 외에는 undefined입니다.

spawningStructureSpawn.Spawning

코어가 새 크립을 스폰하는 중이라면, 이 오브젝트는 StructureSpawn.Spawning 오브젝트를 담습니다. 그렇지 않으면 null입니다.

StructureKeeperLair

비플레이어 구조물입니다. 일부 룸에서 에너지 소스와 미네랄을 지키는 NPC Source Keeper를 스폰합니다. 이 구조물은 파괴할 수 없습니다.

Spawning time 300

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

ticksToSpawnnumber

다음 Source Keeper가 스폰되기까지 남은 시간입니다.

StructureLab

기본 미네랄로부터 미네랄 화합물을 생산하고, 크립을 부스트/언부스트합니다. 미네랄에 대해서는 이 문서에서 더 알아보세요.

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

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

cooldownnumber

다음 반응 또는 언부스트 작업이 가능해질 때까지 랩이 기다려야 하는 게임 틱 수입니다.

energynumber

This property is deprecated and will be removed soon.

.store[RESOURCE_ENERGY]에 대한 별칭(alias)입니다.

energyCapacitynumber

This property is deprecated and will be removed soon.

.store.getCapacity(RESOURCE_ENERGY)에 대한 별칭(alias)입니다.

mineralAmountnumber

This property is deprecated and will be removed soon.

lab.store[lab.mineralType]에 대한 별칭(alias)입니다.

mineralTypestring

랩에 들어 있는 미네랄 타입입니다. 랩은 동시에 한 종류의 미네랄만 담을 수 있습니다.

mineralCapacitynumber

This property is deprecated and will be removed soon.

lab.store.getCapacity(lab.mineralType || yourMineral)에 대한 별칭(alias)입니다.

storeStore

if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
    creep.transfer(structure, RESOURCE_ENERGY);
}

이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.

boostCreep(creep, [bodyPartsCount])

담고 있는 미네랄 화합물로 크립의 바디 파트를 부스트합니다. 크립은 랩에 인접한 칸에 있어야 합니다.

parametertypedescription
creepCreep

대상 크립.

bodyPartsCount
optional
number

부스트할 해당 타입 바디 파트 개수. 바디 파트는 TOUGH는 왼쪽→오른쪽, 그 외 타입은 오른쪽→왼쪽으로 카운트됩니다. undefined이면 가능한 모든 바디 파트를 부스트합니다.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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이 부족합니다.

reverseReaction(lab1, lab2)

미네랄 화합물을 다시 시약(reagents)으로 분해합니다. 같은 출력 랩(output labs)은 여러 소스 랩(source labs)이 함께 사용할 수 있습니다.

parametertypedescription
lab1StructureLab

첫 번째 결과 랩(result lab).

lab2StructureLab

두 번째 결과 랩(result lab).

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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이 부족합니다.

runReaction(lab1, lab2)

다른 두 랩의 시약(reagents)으로 미네랄 화합물을 생산합니다. 같은 입력 랩(input labs)은 여러 출력 랩(output labs)이 함께 사용할 수 있습니다.

parametertypedescription
lab1StructureLab (lab)

첫 번째 소스 랩.

lab2StructureLab (lab)

두 번째 소스 랩.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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이 부족합니다.

unboostCreep(creep)

크립의 부스트를 즉시 제거하고, 크립의 남은 수명과 무관하게, 부스트에 사용된 미네랄 화합물의 50%를 바닥에 드랍합니다. 크립은 랩에 인접한 칸에 있어야 합니다. 언부스트(unboost)는 크립에 적용된 모든 화합물을 생산하기 위해 필요한 반응 시간의 총합만큼 쿨다운을 요구합니다.

parametertypedescription
creepCreep

대상 크립.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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이 부족합니다.

StructureLink

같은 룸 안의 다른 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%

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

cooldownnumber

다음 전송이 가능해질 때까지 링크가 기다려야 하는 게임 틱 수입니다.

energynumber

This property is deprecated and will be removed soon.

.store[RESOURCE_ENERGY]에 대한 별칭(alias)입니다.

energyCapacitynumber

This property is deprecated and will be removed soon.

.store.getCapacity(RESOURCE_ENERGY)에 대한 별칭(alias)입니다.

storeStore

if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
    creep.transfer(structure, RESOURCE_ENERGY);
}

이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.

transferEnergy(target, [amount])

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);

같은 룸 안의 어떤 위치든 있는 다른 링크로 에너지를 원격 전송합니다.

parametertypedescription
targetStructureLink

대상 오브젝트.

amount
optional
number

전송할 에너지 양. 생략하면 사용 가능한 에너지를 전부 사용합니다.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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이 부족합니다.

StructureNuker

다른 룸으로 핵을 발사해 착탄 지역에 막대한 피해를 줍니다. 각 발사는 쿨다운이 있으며 에너지와 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 룸 내의 모든 크립, 건설 사이트, 드랍된 자원이 즉시 제거됩니다(램파트 내부도 포함). 구조물 피해:
  • 착탄 지점: 10,000,000 hits;
  • 5x5 영역 내 모든 구조물: 5,000,000 hits.

서로 다른 룸에서 여러 핵을 같은 목표 위치에 겹쳐 발사하여 피해를 늘릴 수 있다는 점에 유의하세요.

핵 착탄은 tombstone과 ruin을 생성하지 않으며, 룸에 존재하는 모든 tombstone과 ruin을 파괴합니다.

룸이 세이프 모드인 경우, 세이프 모드는 즉시 해제되며 세이프 모드 쿨다운은 0으로 리셋됩니다.

룸 컨트롤러는 upgradeBlocked 기간이 트리거되어, 다음 200틱 동안 세이프 모드를 다시 활성화할 수 없습니다.

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

energynumber

This property is deprecated and will be removed soon.

.store[RESOURCE_ENERGY]에 대한 별칭(alias)입니다.

energyCapacitynumber

This property is deprecated and will be removed soon.

.store.getCapacity(RESOURCE_ENERGY)에 대한 별칭(alias)입니다.

ghodiumnumber

This property is deprecated and will be removed soon.

.store[RESOURCE_GHODIUM]에 대한 별칭(alias)입니다.

ghodiumCapacitynumber

This property is deprecated and will be removed soon.

.store.getCapacity(RESOURCE_GHODIUM)에 대한 별칭(alias)입니다.

cooldownnumber

다음 발사가 가능해질 때까지 남은 게임 틱 수입니다.

storeStore

if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
    creep.transfer(structure, RESOURCE_ENERGY);
}

이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.

launchNuke(pos)

nuker.launchNuke(new RoomPosition(20,30, 'W1N1'));

지정한 위치로 핵을 발사합니다.

parametertypedescription
posRoomPosition

대상 룸 좌표.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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이 부족합니다.

StructureObserver

스크립트로 먼 룸을 관측(시야 확보)할 수 있게 해줍니다.

Controller level
1-7
8 1 observer
Cost 8,000
Hits 500
Range 10 rooms

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

observeRoom(roomName)

스크립트로 먼 룸을 관측할 수 있게 합니다. 대상 룸 오브젝트는 다음 틱에 사용할 수 있습니다.

parametertypedescription
roomNamestring

대상 룸 이름.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_NOT_IN_RANGE-9

roomName 룸이 관측 범위 밖입니다.

ERR_INVALID_ARGS-10

roomName 인자가 유효한 룸 이름이 아닙니다.

ERR_RCL_NOT_ENOUGH-14

이 구조물을 사용하기에 Room Controller Level이 부족합니다.

StructurePowerBank

비플레이어 구조물입니다. 구조물을 파괴하면 획득할 수 있는 power 자원을 담고 있습니다. 공격할 때마다 공격한 크립에게 피해를 반사합니다. power에 대한 자세한 내용은 이 문서를 참고하세요.

Hits 2,000,000
Return damage 50%
Capacity 500 — 10,000
Decay 5,000 ticks

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

powernumber

담고 있는 power 양입니다.

ticksToDecaynumber

이 구조물이 사라질 때까지 남은 게임 틱 수입니다.

StructurePowerSpawn

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

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

energynumber

This property is deprecated and will be removed soon.

.store[RESOURCE_ENERGY]에 대한 별칭(alias)입니다.

energyCapacitynumber

This property is deprecated and will be removed soon.

.store.getCapacity(RESOURCE_ENERGY)에 대한 별칭(alias)입니다.

powernumber

This property is deprecated and will be removed soon.

.store[RESOURCE_POWER]에 대한 별칭(alias)입니다.

powerCapacitynumber

This property is deprecated and will be removed soon.

.store.getCapacity(RESOURCE_POWER)에 대한 별칭(alias)입니다.

storeStore

if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
    creep.transfer(structure, RESOURCE_ENERGY);
}

이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.

processPower()

power 자원 유닛을 계정에 등록합니다. 등록된 power는 power creep 스킬을 성장시키는 데 사용됩니다.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_NOT_ENOUGH_RESOURCES-6

구조물에 에너지 또는 power 자원이 충분하지 않습니다.

ERR_RCL_NOT_ENOUGH-14

이 구조물을 사용하기에 Room Controller Level이 부족합니다.

StructurePortal

비플레이어 구조물입니다. 룸 출구 타일처럼 동작하며, 크립을 먼 룸으로 즉시 텔레포트합니다. 포털은 각 섹터의 중앙 룸에 무작위로 생성됩니다.

Stable time 10 days
Decay time 30,000 ticks

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

destinationRoomPosition | object

룸 간(inter-room) 포털인 경우, 이 프로퍼티는 목적지 룸의 지점을 가리키는 RoomPosition 오브젝트를 담습니다.

샤드 간(inter-shard) 포털인 경우, 이 프로퍼티는 shardroom 문자열 프로퍼티를 가진 오브젝트를 담습니다. 정확한 좌표는 결정되지 않으며, 크립은 목적지 룸의 어떤 빈 칸에든 나타납니다.

ticksToDecaynumber

포털이 사라지기까지 남은 게임 틱 수입니다. 포털이 안정 상태(stable)인 경우에는 undefined입니다.

StructureRampart

적대 크립의 이동을 막고, 같은 타일 위의 여러분의 크립과 구조물을 방어합니다. 조작 가능한 게이트처럼 사용할 수 있습니다.

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를 잃습니다.

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

isPublicboolean

false(기본값)라면 여러분의 크립만 같은 칸에 설 수 있습니다. true라면 적대 크립도 통과할 수 있습니다.

ticksToDecaynumber

이 램파트가 일부 hit points를 잃기까지 남은 게임 틱 수입니다.

setPublic(isPublic)

이 램파트를 public으로 설정해 다른 플레이어의 크립이 통과할 수 있게 합니다.

parametertypedescription
isPublicboolean

이 램파트를 public으로 할지 non-public으로 할지.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

StructureRoad

이동 비용을 1로 줄입니다. 도로를 사용하면 MOVE 바디 파트가 더 적은 크립을 설계할 수 있습니다. 또한 원래는 지나갈 수 없는 자연 지형 벽 위에도 도로를 건설할 수 있습니다.

Controller level Any (including neutral rooms)
Cost
  • 300 on plain land
  • 1,500 on swamp
  • 45,000 on walls
Hits
  • 5,000 on plain land
  • 25,000 on swamp
  • 750,000 on walls
Decay
  • Loses 100 hits every 1,000 ticks on plain land
  • Loses 500 hits every 1,000 ticks on swamp
  • Loses 15,000 hits every 1,000 ticks on walls
Note: every creep step decreases the decay timer for 1 tick per each creep body part

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

ticksToDecaynumber

이 도로가 일부 hit points를 잃기까지 남은 게임 틱 수입니다.

StructureSpawn

스폰은 콜로니의 중심입니다. 이 구조물은 크립을 생성(spawn)하고, 수명 연장(renew)하며, 재활용(recycle)할 수 있습니다. 모든 스폰은 Game.spawns 해시 목록을 통해 접근할 수 있습니다. 또한 스폰은 매 틱 소량의 에너지를 자동으로 재생성하므로, 모든 크립이 죽었더라도 비교적 쉽게 회복할 수 있습니다.

컨트롤러 레벨
1-6 스폰 1개
7 스폰 2개
8 스폰 3개
비용 15,000
체력(Hits) 5,000
용량(Capacity) 300
스폰 시간 바디 파트 1개당 3틱
에너지 자동 재생 방 안에서 사용 가능한 에너지(모든 스폰과 익스텐션 합계)가 300 미만인 동안, 매 틱 에너지 1을 재생성

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

energynumber

This property is deprecated and will be removed soon.

.store[RESOURCE_ENERGY]의 별칭입니다.

energyCapacitynumber

This property is deprecated and will be removed soon.

.store.getCapacity(RESOURCE_ENERGY)의 별칭입니다.

memoryany

spawn.memory.queue = [];

Memory.spawns[spawn.name]의 단축 접근자입니다. 스폰별 메모리 데이터 객체에 빠르게 접근할 때 사용할 수 있습니다. 메모리에 대해 더 알아보기

namestring

스폰의 이름입니다. 새 스폰을 만들 때 이름을 정하며, 이후에는 변경할 수 없습니다. 이 이름은 Game.spawns 객체에서 스폰에 접근하기 위한 해시 키입니다.

spawningStructureSpawn.Spawning

스폰이 새 크립을 생성 중이라면 이 속성은 StructureSpawn.Spawning 객체를 가지며, 그렇지 않으면 null입니다.

storeStore

if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
    creep.transfer(structure, RESOURCE_ENERGY);
}

이 구조물의 화물(저장량)을 담고 있는 Store 객체입니다.

canCreateCreep(body, [name])

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);
}

크립을 생성할 수 있는지 확인합니다.

parametertypedescription
bodyarray<string>

새 크립의 바디를 설명하는 배열입니다. 1~50개의 요소를 가지며, 아래 상수 중 하나여야 합니다:

  • WORK
  • MOVE
  • CARRY
  • ATTACK
  • RANGED_ATTACK
  • HEAL
  • TOUGH
  • CLAIM
name
optional
string

새 크립의 이름입니다. 이름 길이 제한은 100자입니다. 유일한 크립 이름이어야 하며, 즉 Game.creeps 객체에 같은 이름(해시 키)의 다른 크립이 없어야 합니다. 지정하지 않으면 무작위 이름이 생성됩니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

지정한 바디와 이름으로 크립을 생성할 수 있습니다.

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

이 스폰을 사용하기에 방 컨트롤러 레벨이 부족합니다.

createCreep(body, [name], [memory])

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);
}

크립 생성 과정을 시작합니다. 필요한 에너지는 해당 방의 모든 스폰과 익스텐션에서 인출될 수 있습니다.

parametertypedescription
bodyarray<string>

새 크립의 바디를 설명하는 배열입니다. 1~50개의 요소를 가지며, 아래 상수 중 하나여야 합니다:

  • WORK
  • MOVE
  • CARRY
  • ATTACK
  • RANGED_ATTACK
  • HEAL
  • TOUGH
  • CLAIM
name
optional
string

새 크립의 이름입니다. 이름 길이 제한은 100자입니다. 유일한 크립 이름이어야 하며, 즉 Game.creeps 객체에 같은 이름(해시 키)의 다른 크립이 없어야 합니다. 지정하지 않으면 무작위 이름이 생성됩니다.

memory
optional
any

새 크립의 메모리입니다. 제공하면 즉시 Memory.creeps[name]에 저장됩니다.

반환 값

새 크립의 이름 또는 아래 오류 코드 중 하나를 반환합니다:

constantvaluedescription
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

이 스폰을 사용하기에 방 컨트롤러 레벨이 부족합니다.

spawnCreep(body, name, [opts])

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 });

크립 생성 과정을 시작합니다. 필요한 에너지는 해당 방의 모든 스폰과 익스텐션에서 인출될 수 있습니다.

parametertypedescription
bodyarray<string>

새 크립의 바디를 설명하는 배열입니다. 1~50개의 요소를 가지며, 아래 상수 중 하나여야 합니다:

  • WORK
  • MOVE
  • CARRY
  • ATTACK
  • RANGED_ATTACK
  • HEAL
  • TOUGH
  • CLAIM
namestring

새 크립의 이름입니다. 이름 길이 제한은 100자입니다. 유일한 크립 이름이어야 하며, 즉 Game.creeps 객체에 같은 이름(해시 키)의 다른 크립이 없어야 합니다.

opts
optional
object

스폰 과정에 대한 추가 옵션 객체입니다.

  • memory
    any
    새 크립의 메모리입니다. 제공하면 즉시 Memory.creeps[name]에 저장됩니다.
  • energyStructures
    array
    스폰 과정에서 에너지를 가져올 스폰/익스텐션의 배열입니다. 구조물은 배열 순서대로 사용됩니다.
  • dryRun
    boolean
    dryRun이 true이면, 실제로 생성하지 않고 크립 생성 가능 여부만 검사합니다.
  • directions
    array
    스폰 직후 크립이 이동해야 하는 선호 방향을 설정합니다. 아래 방향 상수들의 배열입니다:
    • TOP
    • TOP_RIGHT
    • RIGHT
    • BOTTOM_RIGHT
    • BOTTOM
    • BOTTOM_LEFT
    • LEFT
    • TOP_LEFT

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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

이 스폰을 사용하기에 방 컨트롤러 레벨이 부족합니다.

recycleCreep(target)

크립을 처치하고, 남은 수명에 따라 스폰 및 부스트에 사용된 자원을 최대 100%까지 반환(드롭)합니다. 대상은 인접한 칸에 있어야 합니다. 에너지 반환은 바디 파트 1개당 최대 125로 제한됩니다.

parametertypedescription
targetCreep

대상 크립 객체입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 스폰 또는 대상 크립의 소유자가 아닙니다.

ERR_INVALID_TARGET-7

지정한 대상 객체가 크립이 아닙니다.

ERR_NOT_IN_RANGE-9

대상 크립이 너무 멀리 있습니다.

ERR_RCL_NOT_ENOUGH-14

이 스폰을 사용하기에 방 컨트롤러 레벨이 부족합니다.

renewCreep(target)

대상 크립의 남은 수명(Time to live)을 증가시킵니다. 대상은 인접한 칸에 있어야 합니다. 대상은 CLAIM 바디 파트를 가지면 안 됩니다. 스폰은 생성 중 상태가 아니어야 합니다. 실행 1회마다 크립 타이머는 아래 공식에 따라 틱 수만큼 증가합니다:

floor(600/body_size)

각 실행에 필요한 에너지는 아래 공식으로 결정됩니다:

ceil(creep_cost/2.5/body_size)

크립을 갱신하면 해당 크립의 모든 부스트가 제거됩니다.

parametertypedescription
targetCreep

대상 크립 객체입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

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 프로퍼티로 접근할 수 있는, 현재 스폰 중인 크립의 상세 정보입니다.

directionsarray

스폰 방향 배열입니다. StructureSpawn.Spawning.setDirections를 참고하세요.

namestring

새 크립의 이름입니다.

needTimenumber

스폰 완료에 필요한 총 시간입니다.

remainingTimenumber

남은 시간입니다.

spawnStructureSpawn

스폰 구조물에 대한 링크입니다.

cancel()

Game.spawns['Spawn1'].spawning.cancel();

스폰을 즉시 취소합니다. 스폰에 사용한 에너지는 반환되지 않습니다.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 스폰의 소유자가 아닙니다.

setDirections(directions)

Game.spawns['Spawn1'].spawning.setDirections([RIGHT, TOP_RIGHT]);

크립이 스폰된 후 이동해야 하는 방향을 설정합니다.

parametertypedescription
directionsarray<number>

방향 상수 배열:

  • TOP
  • TOP_RIGHT
  • RIGHT
  • BOTTOM_RIGHT
  • BOTTOM
  • BOTTOM_LEFT
  • LEFT
  • TOP_LEFT

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 스폰의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

directions 배열이 유효하지 않습니다.

StructureStorage

대량의 자원 유닛을 저장할 수 있는 구조물입니다. 룸당 1개만 건설할 수 있으며, Room.storage 프로퍼티로 접근할 수 있습니다.

Controller level
1-3
4-8 1 storage
Cost 30,000
Hits 10,000
Capacity 1,000,000

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

storeStore

이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.

storeCapacitynumber

This property is deprecated and will be removed soon.

.store.getCapacity()에 대한 별칭(alias)입니다.

StructureTerminal

다른 룸의 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

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

cooldownnumber

이 터미널이 StructureTerminal.send 또는 Game.market.deal을 호출해 사용할 수 없게 남아 있는 틱 수입니다.

storeStore

이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.

storeCapacitynumber

This property is deprecated and will be removed soon.

.store.getCapacity()에 대한 별칭(alias)입니다.

send(resourceType, amount, destination, [description])

Game.rooms['W1N1'].terminal.send(RESOURCE_UTRIUM, 100, 'W2N3',
    'trade contract #1');

지정한 이름의 다른 룸 Terminal로 자원을 보냅니다.

parametertypedescription
resourceTypestring

RESOURCE_* 상수 중 하나입니다.

amountnumber

보낼 자원 양.

destinationstring

대상 룸 이름. 이 룸을 볼 필요는 없습니다.

description
optional
string

트랜잭션 설명. 수신자에게 보입니다. 최대 길이는 100자입니다.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_NOT_ENOUGH_RESOURCES-6

구조물에 필요한 자원이 충분하지 않습니다.

ERR_INVALID_ARGS-10

제공한 인자가 올바르지 않습니다.

ERR_TIRED-11

터미널이 아직 쿨다운 중입니다.

StructureTower

원격으로 크립을 공격하거나 치료하거나, 구조물을 수리합니다. 룸 내 어떤 오브젝트든 대상으로 지정할 수 있습니다. 다만 효율은 거리와 선형적으로(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

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Inherited from OwnedStructure
myboolean

이 구조물이 내 소유인지 여부입니다.

Inherited from OwnedStructure
ownerobject

구조물 소유자 정보가 들어있는 객체이며, 다음 속성을 포함합니다:

parametertypedescription
usernamestring

소유자 유저 이름입니다.

energynumber

This property is deprecated and will be removed soon.

.store[RESOURCE_ENERGY]에 대한 별칭(alias)입니다.

energyCapacitynumber

This property is deprecated and will be removed soon.

.store.getCapacity(RESOURCE_ENERGY)에 대한 별칭(alias)입니다.

storeStore

if(structure.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
    creep.transfer(structure, RESOURCE_ENERGY);
}

이 구조물의 적재물을 담고 있는 Store 오브젝트입니다.

attack(target)

룸 안의 어떤 creep / power creep / structure든 원격 공격합니다.

parametertypedescription
targetCreep, PowerCreep, Structure

대상 오브젝트.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_NOT_ENOUGH_ENERGY-6

타워에 에너지가 충분하지 않습니다.

ERR_INVALID_TARGET-7

대상이 유효한 공격 대상 오브젝트가 아닙니다.

ERR_RCL_NOT_ENOUGH-14

이 구조물을 사용하기에 Room Controller Level이 부족합니다.

heal(target)

룸 안의 어떤 creep 또는 power creep이든 원격 치료합니다.

parametertypedescription
targetCreep, PowerCreep

대상 오브젝트.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_NOT_ENOUGH_ENERGY-6

타워에 에너지가 충분하지 않습니다.

ERR_INVALID_TARGET-7

대상이 유효한 creep 오브젝트가 아닙니다.

ERR_RCL_NOT_ENOUGH-14

이 구조물을 사용하기에 Room Controller Level이 부족합니다.

repair(target)

룸 안의 어떤 구조물이든 원격 수리합니다.

parametertypedescription
targetStructure

대상 구조물.

반환 값

다음 코드 중 하나:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_NOT_ENOUGH_ENERGY-6

타워에 에너지가 충분하지 않습니다.

ERR_INVALID_TARGET-7

대상이 유효한 수리 대상 오브젝트가 아닙니다.

ERR_RCL_NOT_ENOUGH-14

이 구조물을 사용하기에 Room Controller Level이 부족합니다.

StructureWall

모든 크립의 이동을 막습니다. 플레이어는 컨트롤 중인 룸에 파괴 가능한 벽을 건설할 수 있습니다. 일부 룸에는 초보자/리스폰 지역을 나머지 월드로부터 분리하거나, 초보자/리스폰 지역을 더 작은 구역으로 나누는 파괴 불가능한 벽도 존재합니다. 파괴 불가능한 벽에는 hits 프로퍼티가 없습니다.

Controller level 2
Cost 1
Hits when constructed 1
Max hits 300,000,000

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

Inherited from Structure
hitsnumber

구조물의 현재 체력(hits)입니다.

Inherited from Structure
hitsMaxnumber

구조물의 총 체력(hits)입니다.

Inherited from Structure
idstring

고유 객체 식별자입니다. Game.getObjectById 메서드를 사용해 id로 객체 인스턴스를 가져올 수 있습니다.

Inherited from Structure
structureTypestring

STRUCTURE_* 상수 중 하나입니다.

Inherited from Structure
destroy()

이 구조물을 즉시 파괴합니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_BUSY-4

방 안에 적 크립이 있습니다.

Inherited from Structure
isActive()

이 구조물을 사용할 수 있는지 확인합니다. 방 컨트롤러 레벨이 부족하면 이 메서드는 false를 반환하며, 게임 내에서 구조물이 빨간색으로 하이라이트됩니다.

반환 값

불리언 값을 반환합니다.

Inherited from Structure
notifyWhenAttacked(enabled)

구조물이 공격받을 때 자동 알림을 보낼지 설정합니다. 알림은 계정 이메일로 전송됩니다. 기본값은 켜짐입니다.

parametertypedescription
enabledboolean

알림을 켤지/끌지 여부입니다.

반환 값

다음 코드 중 하나를 반환합니다:

constantvaluedescription
OK0

작업이 성공적으로 예약되었습니다.

ERR_NOT_OWNER-1

이 구조물의 소유자가 아닙니다.

ERR_INVALID_ARGS-10

enable 인자가 불리언 값이 아닙니다.

Tombstone

죽은 크립의 흔적입니다. 이동 가능한(walkable) 오브젝트입니다.

Decay 사망한 크립의 바디 파트 1개당 5틱

Inherited from RoomObject
effectsarray

적용된 효과 목록입니다. 다음 속성을 가진 객체들의 배열입니다:

parametertypedescription
effectnumber

적용된 효과의 Effect ID입니다. 자연 효과 ID 또는 Power ID일 수 있습니다.

level
optional
number

적용된 효과의 파워 레벨입니다. 파워 효과가 아니면 이 속성은 없습니다.

ticksRemainingnumber

효과가 지속될 남은 틱 수입니다.

Inherited from RoomObject
posRoomPosition

이 객체가 방 안에서 차지하는 위치를 나타내는 객체입니다.

Inherited from RoomObject
roomRoom

Room 객체에 대한 참조입니다. 객체가 플래그 또는 건설 현장이면서, 내가 볼 수 없는 방에 배치되어 있는 경우에는 undefined일 수 있습니다.

creepCreep | PowerCreep

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을 담고 있는 오브젝트입니다.

deathTimenumber

사망 시각입니다.

idstring

고유한 오브젝트 식별자입니다. Game.getObjectById 메서드를 사용해 id로 오브젝트 인스턴스를 가져올 수 있습니다.

storeStore

이 구조물의 적재물을 담는 Store 오브젝트입니다.

ticksToDecaynumber

이 tombstone이 붕괴(decay)되기까지 남은 게임 틱 수입니다.