Compare commits
8 Commits
57c28c29ef
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 54df920ba1 | |||
| 2df2a171e7 | |||
| 36ea81e5e2 | |||
| 57277eff2d | |||
| 182e672086 | |||
| 0fa23009ad | |||
| 542d127eea | |||
| 0d66740d0d |
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,2 +1,2 @@
|
|||||||
./dist
|
|
||||||
node_modules/*
|
node_modules/*
|
||||||
|
dist/*
|
||||||
|
|||||||
46
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
46
.idea/inspectionProfiles/Project_Default.xml
generated
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
<component name="InspectionProjectProfileManager">
|
||||||
|
<profile version="1.0">
|
||||||
|
<option name="myName" value="Project Default" />
|
||||||
|
<inspection_tool class="PyPackageRequirementsInspection" enabled="true" level="WARNING" enabled_by_default="true">
|
||||||
|
<option name="ignoredPackages">
|
||||||
|
<value>
|
||||||
|
<list size="24">
|
||||||
|
<item index="0" class="java.lang.String" itemvalue="blinker" />
|
||||||
|
<item index="1" class="java.lang.String" itemvalue="autopep8" />
|
||||||
|
<item index="2" class="java.lang.String" itemvalue="Flask-Cors" />
|
||||||
|
<item index="3" class="java.lang.String" itemvalue="Werkzeug" />
|
||||||
|
<item index="4" class="java.lang.String" itemvalue="Flask-HTTPAuth" />
|
||||||
|
<item index="5" class="java.lang.String" itemvalue="SQLAlchemy" />
|
||||||
|
<item index="6" class="java.lang.String" itemvalue="cryptography" />
|
||||||
|
<item index="7" class="java.lang.String" itemvalue="MarkupSafe" />
|
||||||
|
<item index="8" class="java.lang.String" itemvalue="click" />
|
||||||
|
<item index="9" class="java.lang.String" itemvalue="Flask-SQLAlchemy" />
|
||||||
|
<item index="10" class="java.lang.String" itemvalue="casbin" />
|
||||||
|
<item index="11" class="java.lang.String" itemvalue="pip-review" />
|
||||||
|
<item index="12" class="java.lang.String" itemvalue="Authlib" />
|
||||||
|
<item index="13" class="java.lang.String" itemvalue="filelock" />
|
||||||
|
<item index="14" class="java.lang.String" itemvalue="platformdirs" />
|
||||||
|
<item index="15" class="java.lang.String" itemvalue="certifi" />
|
||||||
|
<item index="16" class="java.lang.String" itemvalue="virtualenv" />
|
||||||
|
<item index="17" class="java.lang.String" itemvalue="charset-normalizer" />
|
||||||
|
<item index="18" class="java.lang.String" itemvalue="casbin-sqlalchemy-adapter" />
|
||||||
|
<item index="19" class="java.lang.String" itemvalue="gevent" />
|
||||||
|
<item index="20" class="java.lang.String" itemvalue="Flask" />
|
||||||
|
<item index="21" class="java.lang.String" itemvalue="typing_extensions" />
|
||||||
|
<item index="22" class="java.lang.String" itemvalue="greenlet" />
|
||||||
|
<item index="23" class="java.lang.String" itemvalue="Flask-APScheduler" />
|
||||||
|
</list>
|
||||||
|
</value>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||||
|
<option name="ignoredErrors">
|
||||||
|
<list>
|
||||||
|
<option value="N803" />
|
||||||
|
<option value="N802" />
|
||||||
|
<option value="N806" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</inspection_tool>
|
||||||
|
</profile>
|
||||||
|
</component>
|
||||||
8
.idea/modules.xml
generated
Normal file
8
.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/screepCpde.iml" filepath="$PROJECT_DIR$/.idea/screepCpde.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
12
.idea/screepCpde.iml
generated
Normal file
12
.idea/screepCpde.iml
generated
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="WEB_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
67
.idea/workspace.xml
generated
Normal file
67
.idea/workspace.xml
generated
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AutoImportSettings">
|
||||||
|
<option name="autoReloadType" value="SELECTIVE" />
|
||||||
|
</component>
|
||||||
|
<component name="ChangeListManager">
|
||||||
|
<list default="true" id="c827e683-0dd1-4e51-b9ab-32ea80c8033c" name="Changes" comment="">
|
||||||
|
<change afterPath="$PROJECT_DIR$/src/modules/creepApi.ts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/index.d.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/index.d.ts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/modules/builder.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/modules/builder.ts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/modules/setting.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/modules/setting.ts" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/modules/spawnCreep.ts" beforeDir="false" afterPath="$PROJECT_DIR$/src/modules/spawnCreep.ts" afterDir="false" />
|
||||||
|
</list>
|
||||||
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
|
</component>
|
||||||
|
<component name="Git.Settings">
|
||||||
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectColorInfo"><![CDATA[{
|
||||||
|
"associatedIndex": 1
|
||||||
|
}]]></component>
|
||||||
|
<component name="ProjectId" id="2oMglzZAjAmWPupiCpptc5L6kGn" />
|
||||||
|
<component name="ProjectViewState">
|
||||||
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
|
<option name="showLibraryContents" value="true" />
|
||||||
|
</component>
|
||||||
|
<component name="PropertiesComponent"><![CDATA[{
|
||||||
|
"keyToString": {
|
||||||
|
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||||
|
"git-widget-placeholder": "master",
|
||||||
|
"ignore.virus.scanning.warn.message": "true",
|
||||||
|
"last_opened_file_path": "C:/document/code/ts/screepCpde",
|
||||||
|
"node.js.detected.package.eslint": "true",
|
||||||
|
"node.js.detected.package.tslint": "true",
|
||||||
|
"node.js.selected.package.eslint": "(autodetect)",
|
||||||
|
"node.js.selected.package.tslint": "(autodetect)",
|
||||||
|
"nodejs_package_manager_path": "npm",
|
||||||
|
"ts.external.directory.path": "C:\\document\\code\\ts\\screepCpde\\node_modules\\typescript\\lib",
|
||||||
|
"vue.rearranger.settings.migration": "true"
|
||||||
|
}
|
||||||
|
}]]></component>
|
||||||
|
<component name="SharedIndexes">
|
||||||
|
<attachedChunks>
|
||||||
|
<set>
|
||||||
|
<option value="bundled-js-predefined-1d06a55b98c1-91d5c284f522-JavaScript-WS-241.15989.105" />
|
||||||
|
</set>
|
||||||
|
</attachedChunks>
|
||||||
|
</component>
|
||||||
|
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||||
|
<component name="TaskManager">
|
||||||
|
<task active="true" id="Default" summary="Default task">
|
||||||
|
<changelist id="c827e683-0dd1-4e51-b9ab-32ea80c8033c" name="Changes" comment="" />
|
||||||
|
<created>1730685013447</created>
|
||||||
|
<option name="number" value="Default" />
|
||||||
|
<option name="presentableId" value="Default" />
|
||||||
|
<updated>1730685013447</updated>
|
||||||
|
<workItem from="1730685014588" duration="3709000" />
|
||||||
|
</task>
|
||||||
|
<servers />
|
||||||
|
</component>
|
||||||
|
<component name="TypeScriptGeneratedFilesManager">
|
||||||
|
<option name="version" value="3" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
3516
dist/main.js
vendored
3516
dist/main.js
vendored
File diff suppressed because it is too large
Load Diff
1
dist/main.js.map
vendored
1
dist/main.js.map
vendored
File diff suppressed because one or more lines are too long
3
document/command.json
Normal file
3
document/command.json
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"建筑":"storage.db['rooms.objects'].find({ type: 'constructionSite' }).then(resp => resp.map(cs => storage.db['rooms.objects'].findOne({ _id: cs._id }).then(csDetail => storage.db['rooms.objects'].update({_id: cs._id }, {$set: { progress: csDetail.progressTotal - 1 }}))))"
|
||||||
|
}
|
||||||
@@ -7,7 +7,6 @@ import typescript from 'rollup-plugin-typescript2' // <== 新增这一行
|
|||||||
import { config } from './.secret.js'
|
import { config } from './.secret.js'
|
||||||
|
|
||||||
|
|
||||||
console.log(config[process.env.DEST])
|
|
||||||
// 根据指定的目标获取对应的配置项
|
// 根据指定的目标获取对应的配置项
|
||||||
if (!process.env.DEST) console.log("未指定目标, 代码将被编译但不会上传")
|
if (!process.env.DEST) console.log("未指定目标, 代码将被编译但不会上传")
|
||||||
else if (config.main == null && config.local == null) {
|
else if (config.main == null && config.local == null) {
|
||||||
|
|||||||
21
src/index.d.ts
vendored
21
src/index.d.ts
vendored
@@ -1,4 +1,21 @@
|
|||||||
interface CreepMemory{
|
interface CreepMemory {
|
||||||
role: string,
|
role: string,
|
||||||
working: boolean | null
|
working?: boolean,
|
||||||
|
source?:string,
|
||||||
|
workTarget?: Id<Structure>,
|
||||||
|
[property: string]: any,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface MemoryStructure{
|
||||||
|
id: Id<Structure>,
|
||||||
|
structureType: string,
|
||||||
|
roomName: string
|
||||||
|
creep?: Id<Creep>,
|
||||||
|
}
|
||||||
|
|
||||||
|
interface Memory{
|
||||||
|
structures?: MemoryStructure[]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
declare type Part = WORK | MOVE | CARRY | HEAL | ATTACK | RANGED_ATTACK | TOUGH | CLAIM;
|
||||||
19
src/main.ts
19
src/main.ts
@@ -1,26 +1,25 @@
|
|||||||
import { errorMapper } from "./modules/errorMapping";
|
import { errorMapper } from "./modules/errorMapping";
|
||||||
import { Harvest } from "./modules/harvester";
|
import { BigHarvest, Harvest } from "./modules/harvester";
|
||||||
import { Build } from "./modules/builder";
|
import { Build } from "./modules/builder";
|
||||||
import { Upgrade } from "./modules/upgrader";
|
import { Upgrade } from "./modules/upgrader";
|
||||||
import { SpawnCreep } from "./modules/spawnCreep";
|
import { SpawnCreep } from "./modules/spawnCreep";
|
||||||
|
import { RoleToString, UpdateGlobalMemory } from "./modules/creepApi";
|
||||||
|
import { Role } from "./modules/setting";
|
||||||
export const loop = errorMapper(() => {
|
export const loop = errorMapper(() => {
|
||||||
let mainSpawn = Game.spawns["Spawn1"];
|
let mainSpawn = Game.spawns["Spawn1"];
|
||||||
SpawnCreep(mainSpawn);
|
SpawnCreep(mainSpawn);
|
||||||
for (var name in Memory.creeps) {
|
UpdateGlobalMemory();
|
||||||
if (!Game.creeps[name]) {
|
|
||||||
delete Memory.creeps[name];
|
|
||||||
console.log("clearing non-existing creep memory:", name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var name in Game.creeps) {
|
for (var name in Game.creeps) {
|
||||||
let creep = Game.creeps[name];
|
let creep = Game.creeps[name];
|
||||||
if (creep.memory.role == "Harvester") {
|
if (creep.memory.role == RoleToString(Role.Harvester)) {
|
||||||
Harvest(creep);
|
Harvest(creep);
|
||||||
} else if (creep.memory.role == "Upgrader") {
|
} else if (creep.memory.role == RoleToString(Role.Upgrader)) {
|
||||||
Upgrade(creep);
|
Upgrade(creep);
|
||||||
} else if (creep.memory.role == "Builder") {
|
} else if (creep.memory.role == RoleToString(Role.Builder)) {
|
||||||
Build(creep);
|
Build(creep);
|
||||||
|
}else if(creep.memory.role == RoleToString(Role.BigHarvester)){
|
||||||
|
BigHarvest(creep);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import { FindCapacity } from "./util";
|
import { MAIN_SOURCE_ID } from "./setting";
|
||||||
|
import { FindCapacity, GetConstructureSet, GetContainer, GetSource } from "./creepApi";
|
||||||
|
|
||||||
export function Build(creep: Creep) {
|
export function Build(creep: Creep, structureType: string | null = null) {
|
||||||
if (creep.memory.working && creep.store[RESOURCE_ENERGY] == 0) {
|
if (creep.memory.working && creep.store[RESOURCE_ENERGY] == 0) {
|
||||||
creep.memory.working = false;
|
creep.memory.working = false;
|
||||||
creep.say("harvest")
|
creep.say("harvest")
|
||||||
@@ -10,7 +11,7 @@ export function Build(creep: Creep) {
|
|||||||
creep.say("builder")
|
creep.say("builder")
|
||||||
}
|
}
|
||||||
if (creep.memory.working) {
|
if (creep.memory.working) {
|
||||||
let target = creep.room.find(FIND_CONSTRUCTION_SITES);
|
let target = GetConstructureSet(creep, structureType);
|
||||||
if (target.length > 0) {
|
if (target.length > 0) {
|
||||||
if (creep.build(target[0]) == ERR_NOT_IN_RANGE) {
|
if (creep.build(target[0]) == ERR_NOT_IN_RANGE) {
|
||||||
creep.moveTo(target[0], { visualizePathStyle: { stroke: "#ffaa00" } });
|
creep.moveTo(target[0], { visualizePathStyle: { stroke: "#ffaa00" } });
|
||||||
@@ -26,9 +27,9 @@ export function Build(creep: Creep) {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
creep.memory.working = false
|
creep.memory.working = false
|
||||||
let sources = creep.room.find(FIND_SOURCES);
|
const target = GetContainer(creep);
|
||||||
if (creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
|
if (creep.withdraw(target[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
|
||||||
creep.moveTo(sources[0], { visualizePathStyle: { stroke: "#ffaa00" } });
|
creep.moveTo(target[0], { visualizePathStyle: { stroke: '#ffaa00' } });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
20
src/modules/carry.ts
Normal file
20
src/modules/carry.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import * as creepApi from "./creepApi"
|
||||||
|
|
||||||
|
|
||||||
|
export function Carry(creep: Creep) {
|
||||||
|
var containers = creepApi.GetContainer(creep);
|
||||||
|
var targets = creepApi.GetConstructure(creep, STRUCTURE_EXTENSION);
|
||||||
|
if (creep.store.getFreeCapacity(RESOURCE_ENERGY) > 0) {
|
||||||
|
for (var container of containers) {
|
||||||
|
if (container.store.getFreeCapacity(RESOURCE_ENERGY) == 0) {
|
||||||
|
if (creep.withdraw(container, RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
|
||||||
|
creep.moveTo(container, { visualizePathStyle: { stroke: "#00ffxx" } });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (creep.transfer(targets[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
|
||||||
|
creep.moveTo(targets[0], { visualizePathStyle: { stroke: "#00ffxx" } });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
117
src/modules/creepApi.ts
Normal file
117
src/modules/creepApi.ts
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
import { Role } from "@/modules/setting";
|
||||||
|
|
||||||
|
export function SetRole(creep: Creep, role: Role) {
|
||||||
|
switch (role) {
|
||||||
|
case Role.Harvester:
|
||||||
|
creep.memory.role = "Harvester";
|
||||||
|
case Role.BigHarvester:
|
||||||
|
creep.memory.role = "BigHarvester";
|
||||||
|
case Role.Builder:
|
||||||
|
creep.memory.role = "Builder";
|
||||||
|
case Role.Upgrader:
|
||||||
|
creep.memory.role = "Upgrader";
|
||||||
|
case Role.Repairer:
|
||||||
|
creep.memory.role = "Repairer";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export function RoleToString(role: Role): string {
|
||||||
|
switch (role) {
|
||||||
|
case Role.Harvester:
|
||||||
|
return "Harvester";
|
||||||
|
case Role.BigHarvester:
|
||||||
|
return "BigHarvester";
|
||||||
|
case Role.Builder:
|
||||||
|
return "Builder";
|
||||||
|
case Role.Upgrader:
|
||||||
|
return "Upgrader";
|
||||||
|
case Role.Repairer:
|
||||||
|
return "Repairer";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function SpawnCreep(spawn: StructureSpawn, body: Part[], opt?: SpawnOptions): number {
|
||||||
|
const name = "Creep" + Game.time;
|
||||||
|
return spawn.spawnCreep(body, name, opt);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function FindCapacity(creep: Creep): AnyStructure[] {
|
||||||
|
return creep.room.find(FIND_STRUCTURES, {
|
||||||
|
filter: (structure: StructureSpawn | StructureExtension) => {
|
||||||
|
let type = structure.structureType;
|
||||||
|
return (
|
||||||
|
(type == STRUCTURE_EXTENSION ||
|
||||||
|
type == STRUCTURE_SPAWN ||
|
||||||
|
type == STRUCTURE_CONTAINER) &&
|
||||||
|
structure.store.getFreeCapacity(RESOURCE_ENERGY) as number > 0
|
||||||
|
)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function GetSource(sourceId: Id<Source> | null): Source {
|
||||||
|
return Game.getObjectById(sourceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function GetConstructureSet(creep: Creep, structureType: string | null = null): ConstructionSite<BuildableStructureConstant>[] {
|
||||||
|
return creep.room.find(FIND_CONSTRUCTION_SITES, {
|
||||||
|
filter: (structure: Structure) => {
|
||||||
|
if (structureType == null) return true;
|
||||||
|
return structure.structureType == structureType;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function GetConstructure(creep: Creep | Structure, structureType: string,) {
|
||||||
|
return creep.room.find(FIND_STRUCTURES, {
|
||||||
|
filter: (structure: AnyStructure) => {
|
||||||
|
return structure.structureType == structureType;
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function GetContainer(creep: Creep | Structure): StructureContainer[] {
|
||||||
|
let target = GetConstructure(creep, STRUCTURE_CONTAINER) as StructureContainer[];
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function GetCreeps(): Map<string, number> {
|
||||||
|
let resp: Map<string, number> = new Map();
|
||||||
|
for (var name in Game.creeps) {
|
||||||
|
var creep = Game.creeps[name];
|
||||||
|
if (resp.has(creep.memory.role))
|
||||||
|
resp.set(creep.memory.role, resp.get(creep.memory.role) + 1)
|
||||||
|
else
|
||||||
|
resp.set(creep.memory.role, 1);
|
||||||
|
}
|
||||||
|
return resp;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function ClearMemory(){
|
||||||
|
for(var name in Memory.creeps){
|
||||||
|
if(!Game.creeps[name]){
|
||||||
|
delete Memory.creeps[name];
|
||||||
|
for(var structureMemory of Memory.structures){
|
||||||
|
if(structureMemory.creep == Game.creeps[name].id){
|
||||||
|
//Creep死亡后, 应为各建筑重新分配Creep
|
||||||
|
structureMemory.creep = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log("clearing non-existing creepmemory:", name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function UpdateStructureMemory(){
|
||||||
|
for(var roomName in Game.rooms){
|
||||||
|
const room = Game.rooms[roomName];
|
||||||
|
var structures = room.find(FIND_STRUCTURES);
|
||||||
|
for(var structure of structures){
|
||||||
|
Memory.structures.push({"id": structure.id, structureType: structure.structureType, roomName: room.name})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function UpdateGlobalMemory(){
|
||||||
|
ClearMemory();
|
||||||
|
UpdateStructureMemory();
|
||||||
|
}
|
||||||
@@ -1,17 +1,29 @@
|
|||||||
import { FindCapacity } from "./util"
|
import { FindCapacity, GetContainer, GetSource } from "./creepApi"
|
||||||
|
import { MAIN_SOURCE_ID } from "./setting";
|
||||||
|
|
||||||
export function Harvest(creep: Creep) {
|
export function Harvest(creep: Creep) {
|
||||||
if (creep.store.getFreeCapacity() > 0) {
|
if (creep.store.getFreeCapacity() > 0) {
|
||||||
let sources: Source[] = creep.room.find(FIND_SOURCES);
|
let source: Source = GetSource(MAIN_SOURCE_ID);
|
||||||
if (creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
|
if (creep.harvest(source) == ERR_NOT_IN_RANGE) {
|
||||||
creep.moveTo(sources[0], { visualizePathStyle: { stroke: "#ffaa00" } });
|
creep.moveTo(source, { visualizePathStyle: { stroke: "#ffaa00" } });
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
let targets = FindCapacity(creep);
|
let targets = FindCapacity(creep);
|
||||||
if (targets.length > 0) {
|
if (targets.length > 0) {
|
||||||
if(creep.transfer(targets[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE){
|
if (creep.transfer(targets[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
|
||||||
creep.moveTo(targets[0], { visualizePathStyle: { stroke: "#ffffff" } });
|
creep.moveTo(targets[0], { visualizePathStyle: { stroke: "#ffffff" } });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function BigHarvest(creep: Creep) {
|
||||||
|
let source: Source = GetSource(MAIN_SOURCE_ID);
|
||||||
|
let target = Game.getObjectById(creep.memory.workTarget) as StructureContainer;
|
||||||
|
if (target.store.getFreeCapacity(RESOURCE_ENERGY) == 0) {
|
||||||
|
console.log("container is full, wait for next tick, container id is:", target.id);
|
||||||
|
}
|
||||||
|
else if (creep.harvest(source) == ERR_NOT_IN_RANGE) {
|
||||||
|
creep.moveTo(target, { visualizePathStyle: { stroke: "#ffaa00" } });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,19 @@
|
|||||||
let HARVESTER_COUNT: number = 2;
|
export let HARVESTER_COUNT: number = 0;
|
||||||
let BUILDER_COUNT: number = 2;
|
export let BUILDER_COUNT: number = 1;
|
||||||
let UPGRADER_COUNT: number = 6;
|
export let UPGRADER_COUNT: number = 4;
|
||||||
export {
|
export let CARRYER_COUNT: number = 2;
|
||||||
HARVESTER_COUNT,
|
|
||||||
BUILDER_COUNT,
|
export let MAIN_SOURCE_ID: Id<Source> = "ef990774d80108c" as Id<Source>;
|
||||||
UPGRADER_COUNT
|
export const enum Role {
|
||||||
|
Harvester,
|
||||||
|
BigHarvester,
|
||||||
|
Builder,
|
||||||
|
Upgrader,
|
||||||
|
Repairer,
|
||||||
|
Carryer,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export let mk1Body: Part[] = [WORK, CARRY, MOVE];
|
||||||
|
export let mk2Body: Part[] = [WORK, WORK, CARRY, CARRY, MOVE, MOVE];
|
||||||
|
export let mk1CarryerBody: Part[] = [CARRY, CARRY, MOVE, MOVE];
|
||||||
|
export let Mk2harvesterBody: Part[] = [WORK, WORK, WORK, WORK, MOVE];
|
||||||
|
|||||||
@@ -1,70 +1,59 @@
|
|||||||
import "./setting";
|
import * as setting from "./setting";
|
||||||
import { BUILDER_COUNT, HARVESTER_COUNT, UPGRADER_COUNT } from "./setting";
|
import * as creepApi from "./creepApi"
|
||||||
|
|
||||||
var createDefaultHarvester = (spawn: StructureSpawn) => {
|
const createDefaultHarvester = (spawn: StructureSpawn) => {
|
||||||
let name = "Harvester" + Game.time;
|
return creepApi.SpawnCreep(spawn, setting.mk1Body, { memory: { role: creepApi.RoleToString(setting.Role.Harvester) } });
|
||||||
return spawn.spawnCreep([WORK, CARRY, MOVE], name, {
|
|
||||||
memory: {
|
|
||||||
role: "Harvester",
|
|
||||||
working: false
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
var createDefaultBuilder = (spawn: StructureSpawn) => {
|
const createDefaultBuilder = (spawn: StructureSpawn) => {
|
||||||
let name = "Builder" + Game.time;
|
return creepApi.SpawnCreep(spawn, setting.mk1Body, { memory: { role: creepApi.RoleToString(setting.Role.Builder) } });
|
||||||
return spawn.spawnCreep([WORK, CARRY, MOVE], name, {
|
};
|
||||||
memory: {
|
|
||||||
role: "Builder",
|
const createDefaultUpgrader = (spawn: StructureSpawn) => {
|
||||||
working: false
|
return creepApi.SpawnCreep(spawn, setting.mk1Body, { memory: { role: creepApi.RoleToString(setting.Role.Upgrader) } });
|
||||||
}
|
};
|
||||||
});
|
|
||||||
|
const createMk2Harvester = (spawn: StructureSpawn, container: StructureContainer) => {
|
||||||
|
return creepApi.SpawnCreep(spawn, setting.Mk2harvesterBody, { memory: { role: creepApi.RoleToString(setting.Role.BigHarvester), workTarget: container.id } });
|
||||||
}
|
}
|
||||||
|
|
||||||
var createDefaultUpgrader = (spawn: StructureSpawn) => {
|
const createMk1Carryer = (spawn: StructureSpawn) => {
|
||||||
let name = "Upgrader" + Game.time;
|
return creepApi.SpawnCreep(spawn, setting.mk1CarryerBody, { memory: { role: creepApi.RoleToString(setting.Role.Carryer) } });
|
||||||
return spawn.spawnCreep([WORK, CARRY, MOVE], name, {
|
|
||||||
memory: {
|
|
||||||
role: "Upgrader",
|
|
||||||
working: false
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function SpawnCreep(spawn: StructureSpawn) {
|
export function SpawnCreep(spawn: StructureSpawn) {
|
||||||
if (spawn.spawning) return;
|
if (spawn.spawning) return;
|
||||||
|
|
||||||
|
let currentCreeps = creepApi.GetCreeps();
|
||||||
let harvesters = _.filter(Game.creeps,
|
let currentContainer = creepApi.GetContainer(spawn);
|
||||||
/**@param {Creep} creep*/
|
if (currentCreeps.get(creepApi.RoleToString(setting.Role.Harvester)) < setting.HARVESTER_COUNT) {
|
||||||
(creep) => {
|
|
||||||
return creep.memory.role == "Harvester";
|
|
||||||
});
|
|
||||||
let builders = _.filter(Game.creeps,
|
|
||||||
/**@param {Creep} creep*/
|
|
||||||
(creep) => {
|
|
||||||
return creep.memory.role == "Builder";
|
|
||||||
});
|
|
||||||
let upgraders = _.filter(Game.creeps,
|
|
||||||
/**@param {Creep} creep*/
|
|
||||||
(creep) => {
|
|
||||||
return creep.memory.role == "Upgrader";
|
|
||||||
});
|
|
||||||
if (harvesters.length < HARVESTER_COUNT) {
|
|
||||||
if (createDefaultHarvester(spawn) == 0) {
|
if (createDefaultHarvester(spawn) == 0) {
|
||||||
console.log("Spawn Harvester")
|
console.log("Spawn Harvester")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (upgraders.length < UPGRADER_COUNT) {
|
if (currentCreeps.get(creepApi.RoleToString(setting.Role.Upgrader)) < setting.UPGRADER_COUNT) {
|
||||||
if (createDefaultUpgrader(spawn) == 0) {
|
if (createDefaultUpgrader(spawn) == 0) {
|
||||||
console.log("Spawn Upgrader")
|
console.log("Spawn Upgrader")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (builders.length < BUILDER_COUNT) {
|
if (currentCreeps.get(creepApi.RoleToString(setting.Role.Builder)) < setting.BUILDER_COUNT) {
|
||||||
if (createDefaultBuilder(spawn) == 0) {
|
if (createDefaultBuilder(spawn) == 0) {
|
||||||
console.log("Spawn Builder")
|
console.log("Spawn Builder")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (currentCreeps.get(creepApi.RoleToString(setting.Role.Carryer)) < setting.CARRYER_COUNT) {
|
||||||
|
if (createMk1Carryer(spawn) == 0) {
|
||||||
|
console.log("Spawn Carryer")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (currentCreeps.get(creepApi.RoleToString(setting.Role.BigHarvester)) < currentContainer.length) {
|
||||||
|
for (var structure of Memory.structures) {
|
||||||
|
if (structure.structureType == STRUCTURE_CONTAINER && structure.creep == null)
|
||||||
|
if (createMk2Harvester(spawn, Game.getObjectById(structure.id) as StructureContainer) == 0) {
|
||||||
|
structure.creep = Game.creeps[spawn.spawning.name].id;
|
||||||
|
console.log("Spawn Mk2Harvester, Set Work Target:", structure.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if (spawn.spawning) {
|
if (spawn.spawning) {
|
||||||
var spawningCreep = Game.creeps[spawn.spawning.name];
|
var spawningCreep = Game.creeps[spawn.spawning.name];
|
||||||
spawn.room.visual.text(
|
spawn.room.visual.text(
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
|
import { MAIN_SOURCE_ID } from "./setting";
|
||||||
|
import { GetContainer, GetSource } from "./creepApi";
|
||||||
|
|
||||||
/**@param {Creep} creep */
|
/**@param {Creep} creep */
|
||||||
export function Upgrade(creep: Creep) {
|
export function Upgrade(creep: Creep) {
|
||||||
if (creep.memory.working && creep.store[RESOURCE_ENERGY] == 0) {
|
if (creep.memory.working && creep.store[RESOURCE_ENERGY] == 0) {
|
||||||
creep.memory.working = false;
|
creep.memory.working = false;
|
||||||
creep.say('🔄 harvest');
|
creep.say('🔄 carry');
|
||||||
}
|
}
|
||||||
if (!creep.memory.working && creep.store.getFreeCapacity() == 0) {
|
if (!creep.memory.working && creep.store.getFreeCapacity() == 0) {
|
||||||
creep.memory.working = true;
|
creep.memory.working = true;
|
||||||
@@ -15,9 +18,9 @@ export function Upgrade(creep: Creep) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
var sources = creep.room.find(FIND_SOURCES);
|
var target = GetContainer(creep);
|
||||||
if (creep.harvest(sources[0]) == ERR_NOT_IN_RANGE) {
|
if (creep.withdraw(target[0], RESOURCE_ENERGY) == ERR_NOT_IN_RANGE) {
|
||||||
creep.moveTo(sources[0], { visualizePathStyle: { stroke: '#ffaa00' } });
|
creep.moveTo(target[0], { visualizePathStyle: { stroke: '#ffaa00' } });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
export function FindCapacity(creep: Creep) {
|
|
||||||
return creep.room.find(FIND_STRUCTURES, {
|
|
||||||
filter: (structure: StructureSpawn | StructureExtension) => {
|
|
||||||
let type = structure.structureType;
|
|
||||||
return (
|
|
||||||
(type == STRUCTURE_EXTENSION ||
|
|
||||||
type == STRUCTURE_SPAWN) &&
|
|
||||||
structure.store.getFreeCapacity() != null && structure.store.getFreeCapacity() as number > 0
|
|
||||||
)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user