130 lines
4.4 KiB
JavaScript
130 lines
4.4 KiB
JavaScript
// priority: 1
|
|
/**
|
|
* Utility functions for registering microminer missions,
|
|
* and lower-tier projector missions more succinctly.
|
|
*/
|
|
|
|
/**
|
|
* Array to keep track of how many missions are available for each microminer tier.
|
|
* Used to generate circuit numbers for each mission.
|
|
*/
|
|
global.mission_counts = {
|
|
"1": 0,
|
|
"2": 0,
|
|
"2half": 0,
|
|
"3": 0,
|
|
"4": 0,
|
|
"4half": 0,
|
|
"5": 0,
|
|
"6": 0,
|
|
"7": 0,
|
|
"8": 0,
|
|
"8half": 0,
|
|
"9": 0,
|
|
"10": 0,
|
|
"11": 0,
|
|
"12": 0
|
|
}
|
|
|
|
/**
|
|
* Default durations for missions of a given microminer tier.
|
|
* Compare with repairDurations of repair.js.
|
|
*/
|
|
const missionDurations = {
|
|
"1": 100,
|
|
"2": 120,
|
|
"2half": 60,
|
|
"3": 150,
|
|
"4": 180,
|
|
"4half": 180,
|
|
"5": 200,
|
|
"6": 220,
|
|
"7": 240,
|
|
"8": 280,
|
|
"8half": 240,
|
|
"9": 300,
|
|
"10": 300,
|
|
"11": 360,
|
|
"12": 420
|
|
}
|
|
|
|
/**
|
|
* Default EU/t costs for missions of a given microminer tier.
|
|
*/
|
|
const missionEUt = {
|
|
"1": GTValues.VA[GTValues.HV],
|
|
"2": GTValues.VHA[GTValues.EV],
|
|
"2half": GTValues.VA[GTValues.EV],
|
|
"3": GTValues.VA[GTValues.EV],
|
|
"4": GTValues.VHA[GTValues.IV],
|
|
"4half": GTValues.VA[GTValues.IV],
|
|
"5": GTValues.VA[GTValues.IV],
|
|
"6": GTValues.VHA[GTValues.LuV],
|
|
"7": GTValues.VA[GTValues.LuV],
|
|
"8": GTValues.VA[GTValues.ZPM],
|
|
"8half": GTValues.VA[GTValues.ZPM],
|
|
"9": GTValues.VA[GTValues.UV],
|
|
"10": GTValues.VA[GTValues.UHV],
|
|
"11": GTValues.VA[GTValues.UEV],
|
|
"12": GTValues.VA[GTValues.UIV]
|
|
}
|
|
|
|
/**
|
|
* Registers a basic microverse mission and equivalent stabilized mission recipe
|
|
* @param {Internal.RecipesEventJS} event Parameter used in consumer for ServerEvents.recipes().
|
|
* @param {number|string} minerTier Miner tier index. Typically 1 through 12.
|
|
* @param {number} duration Recipe duration in seconds. Defaults based on the miner tier if left undefined.
|
|
* @param {number} EUt The EU per tick consumed by the recipe. Defaults based on the miner tier if left undefined.
|
|
* @param {number} minerReturnChance Chance a damaged miner is returned, in percent. [Integer 0-100]
|
|
* @returns {Internal.GTRecipeSchema$GTRecipeJS[]} Microverse recipe builders. Use this to add item and fluid I/O.
|
|
*/
|
|
function microverse_mission(event, minerTier, projectorTier, duration, EUt, minerReturnChance) {
|
|
// Increase global mission counter
|
|
global.mission_counts[minerTier]++;
|
|
|
|
// Convert miner return chance from percentage to GTM"s hundredth-of-a-percent format
|
|
minerReturnChance = Math.floor(minerReturnChance * 100)
|
|
|
|
// Use defaults if duration or EU/t not defined
|
|
if(duration == undefined) duration = missionDurations[minerTier]
|
|
if(EUt == undefined) EUt = missionEUt[minerTier]
|
|
|
|
// We return an array of GT recipe builders for the caller to act upon with a .forEach
|
|
// rather than a long parameter list, multiple overloads, or varargs
|
|
const builders = [];
|
|
|
|
// Register basic microverse mission
|
|
builders[0] = event.recipes.gtceu.microverse(`kubejs:mission_t${minerTier}_${global.mission_counts[minerTier]}`)
|
|
.addData("projector_tier", projectorTier)
|
|
.itemInputs(`kubejs:microminer_t${minerTier}`)
|
|
.duration(Math.round(duration * 20))
|
|
.EUt(EUt)
|
|
|
|
if(isNaN(minerReturnChance) || minerReturnChance == undefined) {
|
|
// By default, return the microminer that was passed into the input.
|
|
builders[0].itemOutputs(`kubejs:microminer_t${minerTier}`)
|
|
} else if(minerReturnChance > 0) {
|
|
// Only return the damaged miner if the chance to return it is positive and real
|
|
builders[0].chancedOutput(`kubejs:microminer_t${minerTier}_damaged`, minerReturnChance, minerReturnChance == 10000 ? 0 : 500)
|
|
}
|
|
|
|
const stabilized_miners = [
|
|
"2half",
|
|
"4half",
|
|
"6",
|
|
"7",
|
|
"8"
|
|
]
|
|
|
|
// Register actualization chamber counterparts in Hard Mode and Expert Mode except for T9+
|
|
if(stabilized_miners.indexOf(minerTier.toString()) != -1) {
|
|
builders[1] = event.recipes.gtceu.microverse(`kubejs:mission_t${minerTier}_${global.mission_counts[minerTier]}_stabilized`)
|
|
.addData("projector_tier", projectorTier)
|
|
.itemInputs(`kubejs:stabilized_microminer_t${minerTier}`)
|
|
.itemOutputs(`kubejs:stabilized_microminer_t${minerTier}`)
|
|
.duration(Math.round(duration * 20))
|
|
.EUt(EUt)
|
|
}
|
|
|
|
return builders;
|
|
}
|