Files
GSM/gsm-backend/services/factorio.js

100 lines
3.2 KiB
JavaScript

import { readFileSync } from "fs";
import { dirname, join } from "path";
import { fileURLToPath } from "url";
const __dirname = dirname(fileURLToPath(import.meta.url));
function loadConfig() {
return JSON.parse(readFileSync(join(__dirname, "..", "config.json"), "utf-8"));
}
export function getFactorioServer() {
const config = loadConfig();
return config.servers.find(s => s.type === "factorio");
}
// Default map-gen-settings structure
export function getDefaultMapGenSettings() {
return {
terrain_segmentation: 1,
water: 1,
width: 0,
height: 0,
starting_area: 1,
peaceful_mode: false,
autoplace_controls: {
coal: { frequency: 1, size: 1, richness: 1 },
stone: { frequency: 1, size: 1, richness: 1 },
"copper-ore": { frequency: 1, size: 1, richness: 1 },
"iron-ore": { frequency: 1, size: 1, richness: 1 },
"uranium-ore": { frequency: 1, size: 1, richness: 1 },
"crude-oil": { frequency: 1, size: 1, richness: 1 },
trees: { frequency: 1, size: 1, richness: 1 },
"enemy-base": { frequency: 1, size: 1, richness: 1 }
},
cliff_settings: {
name: "cliff",
cliff_elevation_0: 10,
cliff_elevation_interval: 40,
richness: 1
},
seed: null
};
}
// Factorio presets
export const FACTORIO_PRESETS = {
default: getDefaultMapGenSettings(),
"rich-resources": {
...getDefaultMapGenSettings(),
autoplace_controls: {
coal: { frequency: 1, size: 1, richness: 2 },
stone: { frequency: 1, size: 1, richness: 2 },
"copper-ore": { frequency: 1, size: 1, richness: 2 },
"iron-ore": { frequency: 1, size: 1, richness: 2 },
"uranium-ore": { frequency: 1, size: 1, richness: 2 },
"crude-oil": { frequency: 1, size: 1, richness: 2 },
trees: { frequency: 1, size: 1, richness: 1 },
"enemy-base": { frequency: 1, size: 1, richness: 1 }
}
},
"rail-world": {
...getDefaultMapGenSettings(),
autoplace_controls: {
coal: { frequency: 0.33, size: 3, richness: 1 },
stone: { frequency: 0.33, size: 3, richness: 1 },
"copper-ore": { frequency: 0.33, size: 3, richness: 1 },
"iron-ore": { frequency: 0.33, size: 3, richness: 1 },
"uranium-ore": { frequency: 0.33, size: 3, richness: 1 },
"crude-oil": { frequency: 0.33, size: 3, richness: 1 },
trees: { frequency: 1, size: 1, richness: 1 },
"enemy-base": { frequency: 0.5, size: 1, richness: 1 }
}
},
"death-world": {
...getDefaultMapGenSettings(),
autoplace_controls: {
coal: { frequency: 1, size: 1, richness: 1 },
stone: { frequency: 1, size: 1, richness: 1 },
"copper-ore": { frequency: 1, size: 1, richness: 1 },
"iron-ore": { frequency: 1, size: 1, richness: 1 },
"uranium-ore": { frequency: 1, size: 1, richness: 1 },
"crude-oil": { frequency: 1, size: 1, richness: 1 },
trees: { frequency: 1, size: 1, richness: 1 },
"enemy-base": { frequency: 2, size: 2, richness: 1 }
}
},
peaceful: {
...getDefaultMapGenSettings(),
peaceful_mode: true
}
};
export function getPresetNames() {
return Object.keys(FACTORIO_PRESETS);
}
export function getPreset(name) {
return FACTORIO_PRESETS[name] || FACTORIO_PRESETS.default;
}