Before Format Wars
This commit is contained in:
@@ -208,9 +208,298 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"commands": ["/scriptevent cc:StartLevel1"]
|
"commands": ["/scriptevent cc:startLevel1"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scene_tag": "suki_afterlevel_1_1",
|
||||||
|
"npc_name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "npc.name.suki"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"text": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.1.1.text",
|
||||||
|
"with": ["\n"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"buttons": [
|
||||||
|
{
|
||||||
|
"name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.1.1.button"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"commands": ["/dialogue open @e[tag=suki1] @initiator suki_afterlevel_1_2"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scene_tag": "suki_afterlevel_1_2",
|
||||||
|
"npc_name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "npc.name.suki"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"text": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.1.2.text",
|
||||||
|
"with": ["\n"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"buttons": [
|
||||||
|
{
|
||||||
|
"name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.1.2.button"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"commands": ["/dialogue open @e[tag=suki1] @initiator suki_afterlevel_1_3"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scene_tag": "suki_afterlevel_1_3",
|
||||||
|
"npc_name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "npc.name.suki"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"text": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.1.3.text",
|
||||||
|
"with": ["\n"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"buttons": [
|
||||||
|
{
|
||||||
|
"name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.1.3.button"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"commands": ["/scriptevent cc:afterLevel1"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scene_tag": "suki_afterlevel_2_1_intermezzo",
|
||||||
|
"npc_name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "npc.name.suki"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"text": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.2.1.intermezzo.1.text",
|
||||||
|
"with": ["\n"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"buttons": [
|
||||||
|
{
|
||||||
|
"name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.2.1.intermezzo.1.text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"commands": ["/scriptevent cc:level2Intermezzo"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scene_tag": "suki_afterlevel_2_1",
|
||||||
|
"npc_name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "npc.name.suki"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"text": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.2.1.text",
|
||||||
|
"with": ["\n"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"buttons": [
|
||||||
|
{
|
||||||
|
"name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.2.1.button"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"commands": ["/dialogue open @e[tag=suki1] @initiator suki_afterlevel_2_2"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scene_tag": "suki_afterlevel_2_2",
|
||||||
|
"npc_name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "npc.name.suki"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"text": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.2.2.text",
|
||||||
|
"with": ["\n"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"buttons": [
|
||||||
|
{
|
||||||
|
"name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.2.2.button"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"commands": ["/dialogue open @e[tag=suki1] @initiator suki_afterlevel_2_3"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scene_tag": "suki_afterlevel_2_3",
|
||||||
|
"npc_name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "npc.name.suki"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"text": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.2.3.text",
|
||||||
|
"with": ["\n"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"buttons": [
|
||||||
|
{
|
||||||
|
"name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.2.3.button"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"commands": ["/scriptevent cc:afterLevel2"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scene_tag": "suki_afterlevel_3_1",
|
||||||
|
"npc_name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "npc.name.suki"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"text": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.3.1.text",
|
||||||
|
"with": ["\n"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"buttons": [
|
||||||
|
{
|
||||||
|
"name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "suki.afterlevel.3.1.button"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"commands": ["/scriptevent cc:afterLevel3"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scene_tag": "bilal_end_1",
|
||||||
|
"npc_name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "npc.name.bilal"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"text": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "bilal.end.1.text",
|
||||||
|
"with": ["\n"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"buttons": [
|
||||||
|
{
|
||||||
|
"name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "bilal.end.1.button"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"commands": ["/dialogue change @e[tag=bilal1] @initiator bilal_end_2"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"scene_tag": "bilal_end_2",
|
||||||
|
"npc_name": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "npc.name.bilal"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"text": {
|
||||||
|
"rawtext": [
|
||||||
|
{
|
||||||
|
"translate": "bilal.end.2.text",
|
||||||
|
"with": ["\n"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"buttons": []
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
64
gulpfile.js
64
gulpfile.js
@@ -13,7 +13,8 @@ const behavior_pack_authors = ["Me and my cat"];
|
|||||||
|
|
||||||
// === Optional variables
|
// === Optional variables
|
||||||
|
|
||||||
const exportWorldFolderPath = "";
|
const exportWorldFolderPath =
|
||||||
|
"/Users/Bram/AppData/Local/Packages/Microsoft.MinecraftEducationEdition_8wekyb3d8bbwe/LocalState/games/com.mojang/minecraftWorlds/cH+wZocbAQA=";
|
||||||
|
|
||||||
// === END CONFIGURABLE VARIABLES
|
// === END CONFIGURABLE VARIABLES
|
||||||
|
|
||||||
@@ -27,6 +28,7 @@ const zip = require("gulp-zip");
|
|||||||
const fs = require("fs");
|
const fs = require("fs");
|
||||||
const rename = require("gulp-rename");
|
const rename = require("gulp-rename");
|
||||||
const crypto = require("crypto");
|
const crypto = require("crypto");
|
||||||
|
var argv = require("yargs").argv;
|
||||||
|
|
||||||
var readLineSync = import("readline-sync");
|
var readLineSync = import("readline-sync");
|
||||||
var NBT = import("nbtify");
|
var NBT = import("nbtify");
|
||||||
@@ -40,6 +42,13 @@ const storeVersionMojangRoot =
|
|||||||
|
|
||||||
const mcdir = isStoreVersion ? storeVersionMojangRoot : regularVersionMojangRoot;
|
const mcdir = isStoreVersion ? storeVersionMojangRoot : regularVersionMojangRoot;
|
||||||
|
|
||||||
|
const addEducationJson = argv.addEducation || false;
|
||||||
|
const educationFileTemplate = "./education.json";
|
||||||
|
|
||||||
|
const parameterWorldName = argv.worldname || argv.worldName || bpfoldername;
|
||||||
|
|
||||||
|
const releaseVersion = argv.production || false;
|
||||||
|
|
||||||
function clean_build(callbackFunction) {
|
function clean_build(callbackFunction) {
|
||||||
del(["build/behavior_packs/", "build/resource_packs/"]).then(
|
del(["build/behavior_packs/", "build/resource_packs/"]).then(
|
||||||
(value) => {
|
(value) => {
|
||||||
@@ -327,7 +336,7 @@ hasZipped = false;
|
|||||||
function rename_zip_to_mcworld(cb) {
|
function rename_zip_to_mcworld(cb) {
|
||||||
gulp
|
gulp
|
||||||
.src(["export/export.zip"])
|
.src(["export/export.zip"])
|
||||||
.pipe(rename(bpfoldername + ".mcworld"))
|
.pipe(rename(parameterWorldName + ".mcworld"))
|
||||||
.pipe(gulp.dest("export/"));
|
.pipe(gulp.dest("export/"));
|
||||||
cb();
|
cb();
|
||||||
}
|
}
|
||||||
@@ -357,7 +366,7 @@ function add_version_to_world_name(cb) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function copy_build_resource_pack_to_export_folder(cb) {
|
function copy_build_resource_pack_to_export_folder(cb) {
|
||||||
gulp
|
return gulp
|
||||||
.src(["build/resource_packs/**/**"])
|
.src(["build/resource_packs/**/**"])
|
||||||
.pipe(gulp.dest("export/" + bpfoldername + "/resource_packs/" + bpfoldername));
|
.pipe(gulp.dest("export/" + bpfoldername + "/resource_packs/" + bpfoldername));
|
||||||
console.log(
|
console.log(
|
||||||
@@ -368,14 +377,12 @@ function copy_build_resource_pack_to_export_folder(cb) {
|
|||||||
"/resource_packs/" +
|
"/resource_packs/" +
|
||||||
bpfoldername
|
bpfoldername
|
||||||
);
|
);
|
||||||
cb();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function copy_build_behavior_pack_to_export_folder(cb) {
|
function copy_build_behavior_pack_to_export_folder(cb) {
|
||||||
gulp
|
return gulp
|
||||||
.src(["build/behavior_packs/**/**"])
|
.src(["build/behavior_packs/**/**"])
|
||||||
.pipe(gulp.dest("export/" + bpfoldername + "/behavior_packs/" + bpfoldername));
|
.pipe(gulp.dest("export/" + bpfoldername + "/behavior_packs/" + bpfoldername));
|
||||||
cb();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function copy_world_to_export_folder(cb) {
|
function copy_world_to_export_folder(cb) {
|
||||||
@@ -423,20 +430,36 @@ function get_worlds_paths_and_names(cb) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function nbt_rename_world(cb) {
|
async function nbt_rename_world(cb) {
|
||||||
|
if (releaseVersion) {
|
||||||
|
console.log("Release Version, skipping renaming of level.dat");
|
||||||
|
cb();
|
||||||
|
} else {
|
||||||
const NBT = await import("nbtify");
|
const NBT = await import("nbtify");
|
||||||
const { readFile, writeFile } = await import("fs/promises");
|
const { readFile, writeFile } = await import("fs/promises");
|
||||||
const buffer = await readFile("export/" + bpfoldername + "/level.dat");
|
const buffer = await readFile("export/" + bpfoldername + "/level.dat");
|
||||||
const data = await NBT.read(buffer);
|
const data = await NBT.read(buffer);
|
||||||
|
|
||||||
let oldLevelName = data.data.LevelName;
|
let oldLevelName = data.data.LevelName;
|
||||||
let newName = bpfoldername + " " + get_version();
|
let newName = bpfoldername + " " + get_version();
|
||||||
data.data.LevelName = newName;
|
data.data.LevelName = newName;
|
||||||
|
|
||||||
const result = await NBT.write(data);
|
const result = await NBT.write(data);
|
||||||
await writeFile("export/" + bpfoldername + "/level.dat", result);
|
await writeFile("export/" + bpfoldername + "/level.dat", result);
|
||||||
console.log("Renamed " + oldLevelName + " to " + newName);
|
console.log("Renamed " + oldLevelName + " to " + newName);
|
||||||
cb();
|
cb();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function export_header(cb) {
|
||||||
|
console.log("Exporting World");
|
||||||
|
console.log("Is Production: " + releaseVersion);
|
||||||
|
console.log("World Name: " + parameterWorldName);
|
||||||
|
console.log("Add Education Json: " + addEducationJson);
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
|
||||||
function levelnametxt_rename(cb) {
|
function levelnametxt_rename(cb) {
|
||||||
|
if (!releaseVersion) {
|
||||||
const { readFile, writeFile } = import("fs/promises");
|
const { readFile, writeFile } = import("fs/promises");
|
||||||
const levelNameFilePath = "export/" + bpfoldername + "/levelname.txt";
|
const levelNameFilePath = "export/" + bpfoldername + "/levelname.txt";
|
||||||
let levelName = fs.readFileSync(levelNameFilePath, "utf8");
|
let levelName = fs.readFileSync(levelNameFilePath, "utf8");
|
||||||
@@ -444,9 +467,23 @@ function levelnametxt_rename(cb) {
|
|||||||
fs.writeFileSync(levelNameFilePath, newName);
|
fs.writeFileSync(levelNameFilePath, newName);
|
||||||
console.log("Renamed " + levelName + " to " + newName);
|
console.log("Renamed " + levelName + " to " + newName);
|
||||||
cb();
|
cb();
|
||||||
|
} else {
|
||||||
|
console.log("Release Version, skipping renaming of levelname.txt");
|
||||||
|
cb();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup functions
|
function add_education_json_file(cb) {
|
||||||
|
if (addEducationJson) {
|
||||||
|
if (fs.existsSync(educationFileTemplate)) {
|
||||||
|
return gulp.src([educationFileTemplate]).pipe(gulp.dest("export/" + bpfoldername));
|
||||||
|
} else {
|
||||||
|
throw new Error("The file " + educationFileTemplate + " does not exist. But was specified to be added.");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function setup_behaviour_pack(cb) {
|
function setup_behaviour_pack(cb) {
|
||||||
const manifestPath = "behavior_packs/manifest.json";
|
const manifestPath = "behavior_packs/manifest.json";
|
||||||
@@ -521,6 +558,17 @@ function get_uuid_for_type(cb, type) {
|
|||||||
let get_behaviour_pack_uuid = (cb) => get_uuid_for_type(cb, "behaviour_pack");
|
let get_behaviour_pack_uuid = (cb) => get_uuid_for_type(cb, "behaviour_pack");
|
||||||
let get_resource_pack_uuid = (cb) => get_uuid_for_type(cb, "resource_pack");
|
let get_resource_pack_uuid = (cb) => get_uuid_for_type(cb, "resource_pack");
|
||||||
|
|
||||||
|
function help(cb) {
|
||||||
|
//Print help like what paramenters it takes
|
||||||
|
console.log("Help");
|
||||||
|
console.log("Parameters:");
|
||||||
|
console.log("addEducationJson: boolean");
|
||||||
|
console.log("worldName: string");
|
||||||
|
console.log("production: boolean");
|
||||||
|
|
||||||
|
cb();
|
||||||
|
}
|
||||||
|
|
||||||
exports.clean_build = clean_build;
|
exports.clean_build = clean_build;
|
||||||
exports.copy_behavior_packs = copy_behavior_packs;
|
exports.copy_behavior_packs = copy_behavior_packs;
|
||||||
exports.copy_resource_packs = copy_resource_packs;
|
exports.copy_resource_packs = copy_resource_packs;
|
||||||
@@ -550,12 +598,14 @@ exports.compile_world = gulp.series(
|
|||||||
);
|
);
|
||||||
exports.zip = gulp.series(zip_world, rename_zip_to_mcworld);
|
exports.zip = gulp.series(zip_world, rename_zip_to_mcworld);
|
||||||
exports.export = gulp.series(
|
exports.export = gulp.series(
|
||||||
|
export_header,
|
||||||
clean_export,
|
clean_export,
|
||||||
copy_world_to_export_folder,
|
copy_world_to_export_folder,
|
||||||
build,
|
build,
|
||||||
gulp.parallel(copy_build_behavior_pack_to_export_folder, copy_build_resource_pack_to_export_folder),
|
gulp.parallel(copy_build_behavior_pack_to_export_folder, copy_build_resource_pack_to_export_folder),
|
||||||
levelnametxt_rename,
|
levelnametxt_rename,
|
||||||
nbt_rename_world,
|
nbt_rename_world,
|
||||||
|
add_education_json_file,
|
||||||
zip_world,
|
zip_world,
|
||||||
rename_zip_to_mcworld
|
rename_zip_to_mcworld
|
||||||
);
|
);
|
||||||
|
|||||||
750
package-lock.json
generated
750
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -16,7 +16,8 @@
|
|||||||
"nbtify": "^1.85.0",
|
"nbtify": "^1.85.0",
|
||||||
"readline-sync": "^1.4.10",
|
"readline-sync": "^1.4.10",
|
||||||
"source-map": "^0.7.4",
|
"source-map": "^0.7.4",
|
||||||
"typescript": "^4.4.3"
|
"typescript": "^4.4.3",
|
||||||
|
"yargs": "^17.7.2"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"enablemcloopback": "CheckNetIsolation.exe LoopbackExempt -a -p=S-1-15-2-1958404141-86561845-1752920682-3514627264-368642714-62675701-733520436",
|
"enablemcloopback": "CheckNetIsolation.exe LoopbackExempt -a -p=S-1-15-2-1958404141-86561845-1752920682-3514627264-368642714-62675701-733520436",
|
||||||
|
|||||||
@@ -9,6 +9,10 @@ message.enter.airlock=Enter the Airlock
|
|||||||
message.follow.path.temple=Follow the path and talk to §6Bakker Bilal
|
message.follow.path.temple=Follow the path and talk to §6Bakker Bilal
|
||||||
message.goto.temple=Go to the Temple and talk to §2Veteraan Suki
|
message.goto.temple=Go to the Temple and talk to §2Veteraan Suki
|
||||||
|
|
||||||
|
message.goto.door=Go the Temple Door
|
||||||
|
|
||||||
|
message.goto.bilal=Go to Bakker §6Bakker Bilal
|
||||||
|
|
||||||
message.goto.level1=Go to Level 1
|
message.goto.level1=Go to Level 1
|
||||||
message.goto.level2=Go to Level 2
|
message.goto.level2=Go to Level 2
|
||||||
message.goto.level3=Go to Level 3
|
message.goto.level3=Go to Level 3
|
||||||
@@ -49,6 +53,7 @@ message.incorrect=§cIncorrect!§b
|
|||||||
|
|
||||||
message.talkto.ramses=Talk to §dRamses
|
message.talkto.ramses=Talk to §dRamses
|
||||||
message.talkto.chanel=Talk to §9Chanel
|
message.talkto.chanel=Talk to §9Chanel
|
||||||
|
message.talkto.suki=Talk to §2Veteraan Suki
|
||||||
|
|
||||||
## Intro messages
|
## Intro messages
|
||||||
message.intro.started=Crack the Vault!
|
message.intro.started=Crack the Vault!
|
||||||
@@ -130,3 +135,34 @@ suki.greeting.1.button=Zal ik doen!
|
|||||||
|
|
||||||
suki.greeting.2.text=Je moet de agent door het parcours laten wandelen. Pas op, je mag niet boven lava gaan anders zal de agent doodgaan! Veel succes!
|
suki.greeting.2.text=Je moet de agent door het parcours laten wandelen. Pas op, je mag niet boven lava gaan anders zal de agent doodgaan! Veel succes!
|
||||||
suki.greeting.2.button=Oké!
|
suki.greeting.2.button=Oké!
|
||||||
|
|
||||||
|
suki.afterlevel.1.1.text=Goed gedaan! De agent is nu terug bij ons. Ga terug naar het leerplatform. Maar eerst: een weetje! Wist je dat de koralen hun kleur te danken hebben aan de algen die erin zitten? Die algen kunnen niet tegen een snelle stijging van watertemperatuur. Als de temperatuur stijgt, worden de algen afgestoten en verbleekt en sterft het koraal.
|
||||||
|
suki.afterlevel.1.1.button=Oké!
|
||||||
|
|
||||||
|
suki.afterlevel.1.2.text=Goed gedaan, de agent is vrij en terug bij ons! Nu moeten we het dode koraal vervangen door gezond koraal om de oceaan te redden. Dan zijn we weer een stap dichterbij hier ontsnappen.
|
||||||
|
suki.afterlevel.1.2.button=Hoe dan?
|
||||||
|
|
||||||
|
suki.afterlevel.1.3.text=Gebruik enkelvoudige en meervoudige selecties om de dode koralen te vervangen door levende koralen! Voor het eerste level moet je het volgende programmeren: Als de Agent op een blok rood dood koraal stap, dan plaatst hij een blok levend rood koraal.
|
||||||
|
suki.afterlevel.1.3.button=OK!
|
||||||
|
|
||||||
|
|
||||||
|
suki.afterlevel.2.1.intermezzo.1.text=Goed zo! Voor het tweede level wordt het terug een stuk moeilijker. Als de Agent op dood geel koraal stapt, dan plaats hij geel koraal. Anders als de Agent op dood rood koraal stapt, dan plaats bij rood koraal. Anders draait hij een toertje rond zijn as. (TODO)
|
||||||
|
suki.afterlevel.2.1.intermezzo.1.button=Ik Probeer!
|
||||||
|
|
||||||
|
|
||||||
|
suki.afterlevel.2.1.text=Goed gedaan! Je hebt het tweede level voltooid. Ga terug naar het leerplatform en vul de vraag in. Dan kan je starten met de deur te openen. Maar eerst nog een weetje! Wist je dat klimaatverandering de grootste bedreiging is voor koraalriffen? Daardoor stijgt de temperatuur en wordt het water zuurder. Daarnaast vormt ook overbevissing, vervuiling end e afvoer van landbouwgiffen een bedreiging.
|
||||||
|
suki.afterlevel.2.1.button=Wat Jammer!
|
||||||
|
|
||||||
|
suki.afterlevel.2.2.text=Ik heb even kunnen rondkijken en heb de uit knop van de deur gevonden! Hij is aan het einde van het parcours rechts in de tempel. Je zal de agent moeten sturen om dit te activeren!
|
||||||
|
suki.afterlevel.2.2.button=Hoe dan?
|
||||||
|
|
||||||
|
suki.afterlevel.2.3.text=Ik heb alvast wat code gemaakt om het door het parcours te geraken. Ik vrees dat ik niet zo een goede programmeur ben als jij. Er zitten nog wat bugs in. Kan jij deze oplossen en de agent bij de lever krijgen?
|
||||||
|
suki.afterlevel.2.3.button=Tuurlijk!
|
||||||
|
|
||||||
|
suki.afterlevel.3.1.text=Je hebt de deur open gekregen! We en de agent zijn vrij. Ga naar Bakker bilal om deze missie af te sluiten.
|
||||||
|
suki.afterlevel.3.1.button=Geweldig!
|
||||||
|
|
||||||
|
bilal.end.1.text=Je kan terug naar het leerplatform gaan. Dit was de laatste opdracht. Maar eerst; nog een weetje. Wist je dat men denkt dat op het einde van deze eeuw, meer dan 90 procent van alle koraalriffen verloren zullen gaan? Probeer dus jouw uitstoot te verminderen en zo de koralen te helpen.
|
||||||
|
bilal.end.1.button=Ja hé!
|
||||||
|
|
||||||
|
bilal.end.2.text=Bedankt om deze wereld een beetje beter te maken! You Rock!
|
||||||
@@ -12,6 +12,7 @@ class AbstractAgentTrackMission extends Level {
|
|||||||
constructor(
|
constructor(
|
||||||
levelid: string,
|
levelid: string,
|
||||||
agentStartPositon: Vector3,
|
agentStartPositon: Vector3,
|
||||||
|
agentStartFacing: Vector3,
|
||||||
agentEndPosition: Vector3,
|
agentEndPosition: Vector3,
|
||||||
startLevelCommandBlockPos: Vector3
|
startLevelCommandBlockPos: Vector3
|
||||||
) {
|
) {
|
||||||
@@ -20,7 +21,7 @@ class AbstractAgentTrackMission extends Level {
|
|||||||
pupeteer.sendWorldMessage(`%message.${levelid}.started`);
|
pupeteer.sendWorldMessage(`%message.${levelid}.started`);
|
||||||
pupeteer.setTitleTimed(`%message.${levelid}.name`, 2.5);
|
pupeteer.setTitleTimed(`%message.${levelid}.name`, 2.5);
|
||||||
startLevel(startLevelCommandBlockPos);
|
startLevel(startLevelCommandBlockPos);
|
||||||
teleportAgent(agentStartPositon);
|
teleportAgent(agentStartPositon, agentStartFacing);
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
pupeteer.setActionBar(`%message.${levelid}.make`);
|
pupeteer.setActionBar(`%message.${levelid}.make`);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import { MolangVariableMap, Vector3, world } from "@minecraft/server";
|
import { MolangVariableMap, Vector3, world } from "@minecraft/server";
|
||||||
import { Vector3Add } from "../utils/vectorUtils";
|
import { Vector3Add } from "../utils/vectorUtils";
|
||||||
import { TrailType } from "./trailTypes";
|
import { TrailType } from "./trailTypes";
|
||||||
|
import { PARTICLES, spawnParticle } from "../utils/particleUtils";
|
||||||
|
|
||||||
class TrailPoint {
|
class TrailPoint {
|
||||||
postion: Vector3;
|
postion: Vector3;
|
||||||
@@ -15,9 +16,7 @@ class TrailPoint {
|
|||||||
// let spawnPosition: Vector3 = Vector3Add(this.postion, { x: 0.5, y: 0.5, z: 0.5 });
|
// let spawnPosition: Vector3 = Vector3Add(this.postion, { x: 0.5, y: 0.5, z: 0.5 });
|
||||||
let spawnPosition: Vector3 = this.postion;
|
let spawnPosition: Vector3 = this.postion;
|
||||||
try {
|
try {
|
||||||
world
|
spawnParticle(spawnPosition, PARTICLES.balloon_gas_particle, new MolangVariableMap());
|
||||||
.getDimension("overworld")
|
|
||||||
.spawnParticle("minecraft:balloon_gas_particle", spawnPosition, new MolangVariableMap());
|
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -40,19 +39,14 @@ class Trail {
|
|||||||
addPoint(point: TrailPoint) {
|
addPoint(point: TrailPoint) {
|
||||||
this.points.push(point);
|
this.points.push(point);
|
||||||
|
|
||||||
//this could be a one liner,
|
this.calculatedLength = this.points.length;
|
||||||
let maxlength: number = 0;
|
|
||||||
this.points.forEach((point) => {
|
|
||||||
if (point.index > maxlength) {
|
|
||||||
maxlength = point.index;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
this.calculatedLength = maxlength;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fromTrail(trail: TrailType) {
|
fromTrail(trail: TrailType) {
|
||||||
|
let currentIndex = 0;
|
||||||
trail.points.forEach((point) => {
|
trail.points.forEach((point) => {
|
||||||
this.addPoint(new TrailPoint(point.position, point.index));
|
this.addPoint(new TrailPoint(point.position, currentIndex));
|
||||||
|
currentIndex++;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,17 +57,19 @@ class Trail {
|
|||||||
let pointsPerInterval = this.wrapIndex > 0 ? this.calculatedLength / this.wrapIndex : 0;
|
let pointsPerInterval = this.wrapIndex > 0 ? this.calculatedLength / this.wrapIndex : 0;
|
||||||
this.points
|
this.points
|
||||||
.filter((point) => {
|
.filter((point) => {
|
||||||
return (
|
if (this.wrapIndex > 0) {
|
||||||
point.index === this.currentPoint ||
|
return point.index % this.wrapIndex == this.currentPoint;
|
||||||
(this.wrapIndex > 0 && point.index % pointsPerInterval === this.currentPoint)
|
} else {
|
||||||
);
|
return point.index == this.currentPoint;
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.forEach((point) => {
|
.forEach((point) => {
|
||||||
point.spawn();
|
point.spawn();
|
||||||
});
|
});
|
||||||
|
|
||||||
this.currentPoint++;
|
this.currentPoint++;
|
||||||
if (this.currentPoint >= this.calculatedLength) {
|
let actualLength = this.wrapIndex > 0 ? this.wrapIndex : this.calculatedLength;
|
||||||
|
if (this.currentPoint >= actualLength) {
|
||||||
this.currentPoint = 0;
|
this.currentPoint = 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Entity, Vector3, world } from "@minecraft/server";
|
import { Entity, Vector3, world } from "@minecraft/server";
|
||||||
import { Vector3ToString, vector3 } from "./vectorUtils";
|
import { Vector3Add, Vector3ToString, vector3 } from "./vectorUtils";
|
||||||
import { mindKeeper } from "../../main";
|
import { mindKeeper } from "../../main";
|
||||||
|
|
||||||
//Make a facing with vector3
|
//Make a facing with vector3
|
||||||
@@ -11,10 +11,11 @@ function teleportAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): v
|
|||||||
.getDimension("overworld")
|
.getDimension("overworld")
|
||||||
.runCommand(`/execute as @a run tp @e[type=agent] ${position.x} ${position.y} ${position.z}`);
|
.runCommand(`/execute as @a run tp @e[type=agent] ${position.x} ${position.y} ${position.z}`);
|
||||||
} else {
|
} else {
|
||||||
|
let facing2 = Vector3Add(position, facing);
|
||||||
world
|
world
|
||||||
.getDimension("overworld")
|
.getDimension("overworld")
|
||||||
.runCommand(
|
.runCommand(
|
||||||
`/execute as @a run tp @e[type=agent] ${position.x} ${position.y} ${position.z} facing ${facing.x} ${facing.y} ${facing.z}`
|
`/execute as @a run tp @e[type=agent] ${position.x} ${position.y} ${position.z} facing ${facing2.x} ${facing2.y} ${facing2.z}`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -222,6 +222,12 @@ function spawnParticle(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
map.setVector3("variable.direction", vector3(0, 0, 0));
|
map.setVector3("variable.direction", vector3(0, 0, 0));
|
||||||
|
// map.setFloat("Variable.r", 2);
|
||||||
|
map.setColorRGB("variable.color", {
|
||||||
|
red: 1,
|
||||||
|
green: 1,
|
||||||
|
blue: 1,
|
||||||
|
});
|
||||||
|
|
||||||
const dimension = world.getDimension("overworld");
|
const dimension = world.getDimension("overworld");
|
||||||
if (dimension) {
|
if (dimension) {
|
||||||
|
|||||||
89
scripts/animationFrames.ts
Normal file
89
scripts/animationFrames.ts
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
import { ClonePos } from "./Commandeer/animations/animation";
|
||||||
|
import { vector3 } from "./Commandeer/utils/vectorUtils";
|
||||||
|
|
||||||
|
const glassBreakingFrames: ClonePos[] = [
|
||||||
|
///fill 2465 7 94 2470 4 94
|
||||||
|
{
|
||||||
|
point1: vector3(2465, 7, 94),
|
||||||
|
point2: vector3(2470, 4, 94),
|
||||||
|
},
|
||||||
|
//fill 2465 0 94 2470 -3 94
|
||||||
|
{
|
||||||
|
point1: vector3(2465, 0, 94),
|
||||||
|
point2: vector3(2470, -3, 94),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
//fill 2465 -7 94 2470 -10 94
|
||||||
|
point1: vector3(2465, -7, 94),
|
||||||
|
point2: vector3(2470, -10, 94),
|
||||||
|
},
|
||||||
|
//fill 2465 -14 94 2470 -17 94
|
||||||
|
{
|
||||||
|
point1: vector3(2465, -14, 94),
|
||||||
|
point2: vector3(2470, -17, 94),
|
||||||
|
},
|
||||||
|
//fill 2465 -21 94 2470 -24 94
|
||||||
|
{
|
||||||
|
point1: vector3(2465, -21, 94),
|
||||||
|
point2: vector3(2470, -24, 94),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const FrontAirLockOpenFrames: ClonePos[] = [
|
||||||
|
{
|
||||||
|
point1: vector3(2476, 9, 94),
|
||||||
|
point2: vector3(2474, 7, 94),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
point1: vector3(2476, 5, 94),
|
||||||
|
point2: vector3(2474, 3, 94),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
point1: vector3(2476, 1, 94),
|
||||||
|
point2: vector3(2474, -1, 94),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
point1: vector3(2476, -3, 94),
|
||||||
|
point2: vector3(2474, -5, 94),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const BackAirLockOpenFrames: ClonePos[] = [
|
||||||
|
{
|
||||||
|
point1: vector3(2472, 9, 100),
|
||||||
|
point2: vector3(2472, 7, 102),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
point1: vector3(2472, 5, 100),
|
||||||
|
point2: vector3(2472, 3, 102),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
point1: vector3(2472, 1, 100),
|
||||||
|
point2: vector3(2472, -1, 102),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
point1: vector3(2472, -3, 100),
|
||||||
|
point2: vector3(2472, -5, 102),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
const AirLockWaterFrames: ClonePos[] = [
|
||||||
|
{
|
||||||
|
point1: vector3(2473, 11, 95),
|
||||||
|
point2: vector3(2477, 11, 103),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
point1: vector3(2473, 12, 95),
|
||||||
|
point2: vector3(2477, 12, 103),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
point1: vector3(2473, 13, 95),
|
||||||
|
point2: vector3(2477, 13, 103),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
point1: vector3(2473, 14, 95),
|
||||||
|
point2: vector3(2477, 14, 103),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
export { glassBreakingFrames, FrontAirLockOpenFrames, BackAirLockOpenFrames, AirLockWaterFrames };
|
||||||
@@ -30,9 +30,9 @@ let currentBlockSequence: string[] = [];
|
|||||||
let currentBlockSeuqenceIndex: number[] = [];
|
let currentBlockSeuqenceIndex: number[] = [];
|
||||||
|
|
||||||
const blockCycle: string[] = [
|
const blockCycle: string[] = [
|
||||||
MinecraftBlockTypes.RedstoneBlock,
|
// MinecraftBlockTypes.RedstoneBlock,
|
||||||
MinecraftBlockTypes.GoldBlock,
|
// MinecraftBlockTypes.GoldBlock,
|
||||||
MinecraftBlockTypes.DiamondBlock,
|
// MinecraftBlockTypes.DiamondBlock,
|
||||||
MinecraftBlockTypes.EmeraldBlock,
|
MinecraftBlockTypes.EmeraldBlock,
|
||||||
MinecraftBlockTypes.LapisBlock,
|
MinecraftBlockTypes.LapisBlock,
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -5,11 +5,14 @@ import { vector3 } from "../../Commandeer/utils/vectorUtils";
|
|||||||
const Level1CommandBlockPos: Vector3 = vector3(2439, 0, 36);
|
const Level1CommandBlockPos: Vector3 = vector3(2439, 0, 36);
|
||||||
|
|
||||||
const level1StartPosition: Vector3 = vector3(2451, -2, 57);
|
const level1StartPosition: Vector3 = vector3(2451, -2, 57);
|
||||||
|
//Agent faces negative z
|
||||||
|
const level1AgentFacing: Vector3 = vector3(0, 0, -1);
|
||||||
const Level1EndPosition: Vector3 = vector3(2451, -2, 41);
|
const Level1EndPosition: Vector3 = vector3(2451, -2, 41);
|
||||||
|
|
||||||
let mission1part1: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
let mission1part1: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
||||||
"mission1part1",
|
"mission1part1",
|
||||||
level1StartPosition,
|
level1StartPosition,
|
||||||
|
level1AgentFacing,
|
||||||
Level1EndPosition,
|
Level1EndPosition,
|
||||||
Level1CommandBlockPos
|
Level1CommandBlockPos
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { vector3 } from "../../Commandeer/utils/vectorUtils";
|
|||||||
const Level2CommandBlockPos: Vector3 = vector3(2439, 0, 35);
|
const Level2CommandBlockPos: Vector3 = vector3(2439, 0, 35);
|
||||||
|
|
||||||
const level2StartPosition: Vector3 = vector3(2446, -2, 40);
|
const level2StartPosition: Vector3 = vector3(2446, -2, 40);
|
||||||
|
const level2AgentFacing: Vector3 = vector3(1, 0, 0);
|
||||||
const Level2EndPosition: Vector3 = vector3(2446, -2, 30);
|
const Level2EndPosition: Vector3 = vector3(2446, -2, 30);
|
||||||
|
|
||||||
const level2ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
|
const level2ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
|
||||||
@@ -12,6 +13,7 @@ const level2ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
|
|||||||
let mission1part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
let mission1part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
||||||
"mission1part2",
|
"mission1part2",
|
||||||
level2StartPosition,
|
level2StartPosition,
|
||||||
|
level2AgentFacing,
|
||||||
Level2EndPosition,
|
Level2EndPosition,
|
||||||
Level2CommandBlockPos
|
Level2CommandBlockPos
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import AbstractAgentTrackMission from "../../Commandeer/level/abstractTrackFollo
|
|||||||
import { vector3 } from "../../Commandeer/utils/vectorUtils";
|
import { vector3 } from "../../Commandeer/utils/vectorUtils";
|
||||||
|
|
||||||
const Level3CommandBlockPos: Vector3 = vector3(2439, 0, 34);
|
const Level3CommandBlockPos: Vector3 = vector3(2439, 0, 34);
|
||||||
|
const level3AgentFacing: Vector3 = vector3(0, 0, -1);
|
||||||
const level3StartPosition: Vector3 = vector3(2447, -2, 30);
|
const level3StartPosition: Vector3 = vector3(2447, -2, 30);
|
||||||
const level3EndPosition: Vector3 = vector3(2451, -2, 18);
|
const level3EndPosition: Vector3 = vector3(2451, -2, 18);
|
||||||
|
|
||||||
@@ -11,6 +12,7 @@ const level3ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
|
|||||||
let mission1part3: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
let mission1part3: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
||||||
"mission1part3",
|
"mission1part3",
|
||||||
level3StartPosition,
|
level3StartPosition,
|
||||||
|
level3AgentFacing,
|
||||||
level3EndPosition,
|
level3EndPosition,
|
||||||
Level3CommandBlockPos
|
Level3CommandBlockPos
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import { startLevel } from "../../Commandeer/utils/levelUtils";
|
|||||||
const mission2part1CommandBlockPos: Vector3 = vector3(2460, -1, 4);
|
const mission2part1CommandBlockPos: Vector3 = vector3(2460, -1, 4);
|
||||||
|
|
||||||
const mission2part1StartPosition: Vector3 = vector3(2455, -1, 11);
|
const mission2part1StartPosition: Vector3 = vector3(2455, -1, 11);
|
||||||
|
const mission2Part1AgentFacing: Vector3 = vector3(1, 0, 0);
|
||||||
const mission2part1EndPosition: Vector3 = vector3(2465, -1, 11);
|
const mission2part1EndPosition: Vector3 = vector3(2465, -1, 11);
|
||||||
|
|
||||||
const mission2part1ResetCommandBlockPos: Vector3 = vector3(2456, -1, 4);
|
const mission2part1ResetCommandBlockPos: Vector3 = vector3(2456, -1, 4);
|
||||||
@@ -20,7 +21,7 @@ const mission2part1: Level = new Level(
|
|||||||
pupeteer.sendWorldMessage("%message.mission2part1.started");
|
pupeteer.sendWorldMessage("%message.mission2part1.started");
|
||||||
pupeteer.setTitleTimed("%message.mission2part1.name", 2.5);
|
pupeteer.setTitleTimed("%message.mission2part1.name", 2.5);
|
||||||
startLevel(mission2part1CommandBlockPos);
|
startLevel(mission2part1CommandBlockPos);
|
||||||
teleportAgent(mission2part1StartPosition);
|
teleportAgent(mission2part1StartPosition, mission2Part1AgentFacing);
|
||||||
startLevel(mission2part1ResetCommandBlockPos);
|
startLevel(mission2part1ResetCommandBlockPos);
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import { startLevel } from "../../Commandeer/utils/levelUtils";
|
|||||||
const mission2part2CommandBlockPos: Vector3 = vector3(2461, -1, 4);
|
const mission2part2CommandBlockPos: Vector3 = vector3(2461, -1, 4);
|
||||||
|
|
||||||
const mission2part2StartPosition: Vector3 = vector3(2467, -1, 11);
|
const mission2part2StartPosition: Vector3 = vector3(2467, -1, 11);
|
||||||
|
const mission2Part1AgentFacing: Vector3 = vector3(1, 0, 0);
|
||||||
const mission2part2EndPosition: Vector3 = vector3(2481, -1, 11);
|
const mission2part2EndPosition: Vector3 = vector3(2481, -1, 11);
|
||||||
|
|
||||||
const mission2part2ResetCommandBlockPos: Vector3 = vector3(2457, -1, 4);
|
const mission2part2ResetCommandBlockPos: Vector3 = vector3(2457, -1, 4);
|
||||||
@@ -20,7 +21,7 @@ const mission2part2: Level = new Level(
|
|||||||
pupeteer.sendWorldMessage("%message.mission2part2.started");
|
pupeteer.sendWorldMessage("%message.mission2part2.started");
|
||||||
pupeteer.setTitleTimed("%message.mission2part2.name", 2.5);
|
pupeteer.setTitleTimed("%message.mission2part2.name", 2.5);
|
||||||
startLevel(mission2part2CommandBlockPos);
|
startLevel(mission2part2CommandBlockPos);
|
||||||
teleportAgent(mission2part2StartPosition);
|
teleportAgent(mission2part2StartPosition, mission2Part1AgentFacing);
|
||||||
startLevel(mission2part2ResetCommandBlockPos);
|
startLevel(mission2part2ResetCommandBlockPos);
|
||||||
},
|
},
|
||||||
() => {
|
() => {
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ import { vector3 } from "../../Commandeer/utils/vectorUtils";
|
|||||||
const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 26);
|
const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 26);
|
||||||
|
|
||||||
const level1StartPosition: Vector3 = vector3(2488, -2, 7);
|
const level1StartPosition: Vector3 = vector3(2488, -2, 7);
|
||||||
|
const level1AgentFacing: Vector3 = vector3(0, 0, 1);
|
||||||
const Level1EndPosition: Vector3 = vector3(2488, -2, 22);
|
const Level1EndPosition: Vector3 = vector3(2488, -2, 22);
|
||||||
|
|
||||||
let mission3part1: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
let mission3part1: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
||||||
"mission3part1",
|
"mission3part1",
|
||||||
level1StartPosition,
|
level1StartPosition,
|
||||||
|
level1AgentFacing,
|
||||||
Level1EndPosition,
|
Level1EndPosition,
|
||||||
Level1CommandBlockPos
|
Level1CommandBlockPos
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ import { vector3 } from "../../Commandeer/utils/vectorUtils";
|
|||||||
const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 27);
|
const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 27);
|
||||||
|
|
||||||
const level1StartPosition: Vector3 = vector3(2492, -2, 26);
|
const level1StartPosition: Vector3 = vector3(2492, -2, 26);
|
||||||
|
const level1AgentFacing: Vector3 = vector3(0, 0, 1);
|
||||||
const Level1EndPosition: Vector3 = vector3(2484, -2, 32);
|
const Level1EndPosition: Vector3 = vector3(2484, -2, 32);
|
||||||
|
|
||||||
let mission3part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
let mission3part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
||||||
"mission3part2",
|
"mission3part2",
|
||||||
level1StartPosition,
|
level1StartPosition,
|
||||||
|
level1AgentFacing,
|
||||||
Level1EndPosition,
|
Level1EndPosition,
|
||||||
Level1CommandBlockPos
|
Level1CommandBlockPos
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ import { vector3 } from "../../Commandeer/utils/vectorUtils";
|
|||||||
const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 28);
|
const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 28);
|
||||||
|
|
||||||
const level1StartPosition: Vector3 = vector3(2487, -2, 36);
|
const level1StartPosition: Vector3 = vector3(2487, -2, 36);
|
||||||
|
const level1AgentFacing: Vector3 = vector3(1, 0, 0);
|
||||||
const Level1EndPosition: Vector3 = vector3(2488, -2, 57);
|
const Level1EndPosition: Vector3 = vector3(2488, -2, 57);
|
||||||
|
|
||||||
let mission3part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
let mission3part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
||||||
"mission3part2",
|
"mission3part2",
|
||||||
level1StartPosition,
|
level1StartPosition,
|
||||||
|
level1AgentFacing,
|
||||||
Level1EndPosition,
|
Level1EndPosition,
|
||||||
Level1CommandBlockPos
|
Level1CommandBlockPos
|
||||||
);
|
);
|
||||||
|
|||||||
252
scripts/main.ts
252
scripts/main.ts
@@ -7,12 +7,19 @@ import {
|
|||||||
Dimension,
|
Dimension,
|
||||||
TicksPerSecond,
|
TicksPerSecond,
|
||||||
BlockVolume,
|
BlockVolume,
|
||||||
|
ScriptEventCommandMessageAfterEvent,
|
||||||
} from "@minecraft/server";
|
} from "@minecraft/server";
|
||||||
import { Mindkeeper, StoreType } from "./Commandeer/mindKeeper";
|
import { Mindkeeper, StoreType } from "./Commandeer/mindKeeper";
|
||||||
import Pupeteer from "./Commandeer/pupeteer";
|
import Pupeteer from "./Commandeer/pupeteer";
|
||||||
import { Vector3Add, Vector3ToCommandString, Vector3ToFancyString, vector3 } from "./Commandeer/utils/vectorUtils";
|
import {
|
||||||
|
Vector3Add,
|
||||||
|
Vector3Subtract,
|
||||||
|
Vector3ToCommandString,
|
||||||
|
Vector3ToFancyString,
|
||||||
|
vector3,
|
||||||
|
} from "./Commandeer/utils/vectorUtils";
|
||||||
import { delay } from "./Commandeer/utils/waitUtil";
|
import { delay } from "./Commandeer/utils/waitUtil";
|
||||||
import { PARTICLES, spawnParticle } from "./Commandeer/utils/particleUtils";
|
import { ParticleColumn, PARTICLES, spawnParticle } from "./Commandeer/utils/particleUtils";
|
||||||
import { TrailMaker } from "./Commandeer/trail/trailMaker";
|
import { TrailMaker } from "./Commandeer/trail/trailMaker";
|
||||||
import * as CCTrigger from "./Commandeer/Trigger/CCTrigger";
|
import * as CCTrigger from "./Commandeer/Trigger/CCTrigger";
|
||||||
import { Commands } from "./Commandeer/command/command";
|
import { Commands } from "./Commandeer/command/command";
|
||||||
@@ -41,7 +48,14 @@ import {
|
|||||||
SetFrame,
|
SetFrame,
|
||||||
} from "./Commandeer/animations/animation";
|
} from "./Commandeer/animations/animation";
|
||||||
import { doNothingStupidTSIWantFilesNotAGiantAssMainFile } from "./triggers";
|
import { doNothingStupidTSIWantFilesNotAGiantAssMainFile } from "./triggers";
|
||||||
import { clearWall, fillWall, Wall } from "./Commandeer/utils/levelUtils";
|
import { clearWall, fillWall, startLevel, Wall } from "./Commandeer/utils/levelUtils";
|
||||||
|
import { drawArrow } from "./Commandeer/utils/arrow";
|
||||||
|
import {
|
||||||
|
glassBreakingFrames,
|
||||||
|
AirLockWaterFrames,
|
||||||
|
FrontAirLockOpenFrames,
|
||||||
|
BackAirLockOpenFrames,
|
||||||
|
} from "./animationFrames";
|
||||||
// import { loadTriggers } from "./triggers";
|
// import { loadTriggers } from "./triggers";
|
||||||
|
|
||||||
const mindKeeper = new Mindkeeper(world);
|
const mindKeeper = new Mindkeeper(world);
|
||||||
@@ -50,7 +64,9 @@ const triggerManager = new CCTrigger.Manager(mindKeeper);
|
|||||||
const CURRENT_LEVEL = "currentLevel";
|
const CURRENT_LEVEL = "currentLevel";
|
||||||
const AGENT_ID = "agentid";
|
const AGENT_ID = "agentid";
|
||||||
const PREFIX = "!";
|
const PREFIX = "!";
|
||||||
export { mindKeeper, CURRENT_LEVEL, triggerManager };
|
let DEVELOPER_MODE = true;
|
||||||
|
|
||||||
|
export { mindKeeper, CURRENT_LEVEL, triggerManager, PREFIX, DEVELOPER_MODE };
|
||||||
|
|
||||||
// loadTriggers();
|
// loadTriggers();
|
||||||
// loadCommands();
|
// loadCommands();
|
||||||
@@ -64,14 +80,14 @@ async function resetLightPath() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let introToGlassBreakTimer: number = 0;
|
let introToGlassBreakTimer: number = 0;
|
||||||
const glassBreakTime = 5 * TicksPerSecond;
|
const glassBreakTime = 1 * TicksPerSecond;
|
||||||
|
|
||||||
let isIntroToLevel1Sqeuence = false;
|
let isIntroToLevel1Sqeuence = false;
|
||||||
|
|
||||||
let introTrail: Trail = new Trail("introTrail", 2, 4);
|
let introTrail: Trail = new Trail("introTrail", 2, 25 / 5);
|
||||||
introTrail.fromTrail(startTrail);
|
introTrail.fromTrail(startTrail);
|
||||||
|
|
||||||
let introToLevelTrail = new Trail("introToLevelTrail", 2, 2);
|
let introToLevelTrail = new Trail("introToLevelTrail", 2, 74 / 2);
|
||||||
introToLevelTrail.fromTrail(IntroToLevel1Trail);
|
introToLevelTrail.fromTrail(IntroToLevel1Trail);
|
||||||
|
|
||||||
//fill 2466 0 48 2469 -1 48
|
//fill 2466 0 48 2469 -1 48
|
||||||
@@ -81,10 +97,16 @@ let bilalBlock: Wall = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// spawn a sphere of particle
|
// spawn a sphere of particle
|
||||||
|
let prevCurrentLevel: number = 0;
|
||||||
|
|
||||||
const DEVELOPER_MODE = true;
|
let isBreaking: boolean = false;
|
||||||
|
|
||||||
|
let airlockParticles = new ParticleColumn(vector3(2475.5, 10, 92), 2, 2, 3, 0.5, PARTICLES.point);
|
||||||
|
|
||||||
|
let level1Particles = new ParticleColumn(vector3(2455, -1, 49), 1.1, 2, 4, 0.7, PARTICLES.balloon_gas_particle);
|
||||||
|
airlockParticles.generatePoints();
|
||||||
let tickCounter = 0;
|
let tickCounter = 0;
|
||||||
system.runInterval(async () => {
|
system.runInterval(() => {
|
||||||
tickCounter++;
|
tickCounter++;
|
||||||
if (mindKeeper.initialised) {
|
if (mindKeeper.initialised) {
|
||||||
trailMaker.Update();
|
trailMaker.Update();
|
||||||
@@ -93,11 +115,18 @@ system.runInterval(async () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const currentLevel = mindKeeper.get(CURRENT_LEVEL);
|
const currentLevel = mindKeeper.get(CURRENT_LEVEL);
|
||||||
|
if (prevCurrentLevel != currentLevel) {
|
||||||
|
world.sendMessage("Current level: " + currentLevel);
|
||||||
|
prevCurrentLevel = mindKeeper.get(CURRENT_LEVEL) as number;
|
||||||
|
}
|
||||||
switch (currentLevel) {
|
switch (currentLevel) {
|
||||||
case 0:
|
case 0:
|
||||||
// Show goto airlock text
|
// Show goto airlock text
|
||||||
Pupeteer.setActionBar("%message.goto.airlock");
|
Pupeteer.setActionBar("%message.goto.airlock");
|
||||||
introTrail.spawnNext();
|
introTrail.spawnNext();
|
||||||
|
drawArrow(vector3(2478, 37, 89));
|
||||||
|
airlockParticles.update();
|
||||||
|
airlockParticles.draw();
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
Pupeteer.setActionBar("%message.enter.airlock");
|
Pupeteer.setActionBar("%message.enter.airlock");
|
||||||
@@ -110,25 +139,25 @@ system.runInterval(async () => {
|
|||||||
levelIntro.update();
|
levelIntro.update();
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
|
(async () => {
|
||||||
if (!isIntroToLevel1Sqeuence) {
|
if (!isIntroToLevel1Sqeuence) {
|
||||||
isIntroToLevel1Sqeuence = true;
|
isIntroToLevel1Sqeuence = true;
|
||||||
// world.sendMessage("Intro to level1 sequence start");
|
// world.sendMessage("Intro to level1 sequence start");
|
||||||
await lightUpPath();
|
await lightUpPath();
|
||||||
await randomExplosions();
|
await randomExplosions();
|
||||||
blowUpDoor();
|
blowUpDoor();
|
||||||
mindKeeper.increment(CURRENT_LEVEL);
|
|
||||||
triggerAlarm();
|
triggerAlarm();
|
||||||
|
mindKeeper.increment(CURRENT_LEVEL);
|
||||||
}
|
}
|
||||||
|
})();
|
||||||
break;
|
break;
|
||||||
case 5:
|
case 5:
|
||||||
introToGlassBreakTimer++;
|
|
||||||
// world.sendMessage("Glass break timer: " + introToGlassBreakTimer);
|
|
||||||
if (introToGlassBreakTimer > glassBreakTime) {
|
|
||||||
introToGlassBreakTimer = 0;
|
|
||||||
mindKeeper.increment(CURRENT_LEVEL);
|
mindKeeper.increment(CURRENT_LEVEL);
|
||||||
}
|
break;
|
||||||
case 6:
|
case 6:
|
||||||
// Show Goto Level 1
|
// Show Goto Level 1
|
||||||
|
if (isBreaking == false) {
|
||||||
|
isBreaking = true;
|
||||||
if (glassWindowState == GlassWindowState.Fixed) {
|
if (glassWindowState == GlassWindowState.Fixed) {
|
||||||
glassWindowState = GlassWindowState.Broken;
|
glassWindowState = GlassWindowState.Broken;
|
||||||
system.run(async () => {
|
system.run(async () => {
|
||||||
@@ -138,9 +167,9 @@ system.runInterval(async () => {
|
|||||||
await delay(10);
|
await delay(10);
|
||||||
await breakGlassWindow();
|
await breakGlassWindow();
|
||||||
mindKeeper.increment(CURRENT_LEVEL);
|
mindKeeper.increment(CURRENT_LEVEL);
|
||||||
setNPCDialog("chanel1", "chanel_goto_temple");
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
introToLevelTrail.spawnNext();
|
introToLevelTrail.spawnNext();
|
||||||
@@ -152,33 +181,62 @@ system.runInterval(async () => {
|
|||||||
//Talk to Suki
|
//Talk to Suki
|
||||||
break;
|
break;
|
||||||
case 9:
|
case 9:
|
||||||
mission1part1.update();
|
level1Particles.update();
|
||||||
|
level1Particles.draw();
|
||||||
|
Pupeteer.setActionBar("%message.goto.level1");
|
||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
mission1part2.update();
|
mission1part1.update();
|
||||||
break;
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
mission1part3.update();
|
mission1part2.update();
|
||||||
break;
|
break;
|
||||||
case 12:
|
case 12:
|
||||||
Pupeteer.setActionBar("%message.goto.level2");
|
mission1part3.update();
|
||||||
|
//Agent is back with player
|
||||||
|
break;
|
||||||
case 13:
|
case 13:
|
||||||
mission2part1.update();
|
setNPCDialog("suki1", "suki_afterlevel_1_1");
|
||||||
|
Pupeteer.setActionBar("%message.talkto.suki");
|
||||||
break;
|
break;
|
||||||
case 14:
|
case 14:
|
||||||
mission2part2.update();
|
mission2part1.update();
|
||||||
break;
|
break;
|
||||||
case 15:
|
case 15:
|
||||||
mission3part1.update();
|
//Talk to suki
|
||||||
break;
|
setNPCDialog("suki1", "suki_afterlevel_2_1_intermezzo");
|
||||||
case 15:
|
Pupeteer.setActionBar("%message.talkto.suki");
|
||||||
mission3part2.update();
|
|
||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
mission3part3.update();
|
mission2part2.update();
|
||||||
break;
|
break;
|
||||||
case 17:
|
case 17:
|
||||||
Pupeteer.setActionBar("Goto the door");
|
// Mission 2 is complete
|
||||||
|
setNPCDialog("suki1", "suki_afterlevel_2_1");
|
||||||
|
Pupeteer.setActionBar("%message.talkto.suki");
|
||||||
|
break;
|
||||||
|
case 18:
|
||||||
|
mission3part1.update();
|
||||||
|
break;
|
||||||
|
case 19:
|
||||||
|
mission3part2.update();
|
||||||
|
break;
|
||||||
|
case 20:
|
||||||
|
mission3part3.update();
|
||||||
|
break;
|
||||||
|
case 21:
|
||||||
|
//talk to suki
|
||||||
|
setNPCDialog("suki1", "suki_afterlevel_3_1");
|
||||||
|
setNPCDialog("bilal1", "bilal_end_1");
|
||||||
|
Pupeteer.setActionBar("%message.talkto.suki");
|
||||||
|
break;
|
||||||
|
case 22:
|
||||||
|
Pupeteer.setActionBar("%message.goto.door");
|
||||||
|
//wait for player to enter trigger
|
||||||
|
break;
|
||||||
|
case 23:
|
||||||
|
Pupeteer.setActionBar("%message.goto.bilal");
|
||||||
|
setNPCDialog("bilal1", "bilal_end_1");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -287,6 +345,9 @@ world.afterEvents.chatSend.subscribe(async (event: ChatSendAfterEvent) => {
|
|||||||
|
|
||||||
mission2part1.reset();
|
mission2part1.reset();
|
||||||
mission2part2.reset();
|
mission2part2.reset();
|
||||||
|
//Set redstone block
|
||||||
|
startLevel(vector3(2456, -1, 4));
|
||||||
|
startLevel(vector3(2457, -1, 4));
|
||||||
|
|
||||||
//Reset the combination to a random squence
|
//Reset the combination to a random squence
|
||||||
|
|
||||||
@@ -299,7 +360,10 @@ world.afterEvents.chatSend.subscribe(async (event: ChatSendAfterEvent) => {
|
|||||||
|
|
||||||
fillWall(bilalBlock, MinecraftBlockTypes.Barrier);
|
fillWall(bilalBlock, MinecraftBlockTypes.Barrier);
|
||||||
|
|
||||||
|
openDoor();
|
||||||
|
|
||||||
isIntroToLevel1Sqeuence = false;
|
isIntroToLevel1Sqeuence = false;
|
||||||
|
isBreaking = false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -329,14 +393,33 @@ system.afterEvents.scriptEventReceive.subscribe((event) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.id == "cc:startLevel1") {
|
checkNpcResponse(event, "cc:startLevel1", 8);
|
||||||
if (mindKeeper.get(CURRENT_LEVEL) == 8) {
|
checkNpcResponse(event, "cc:afterLevel1", 13);
|
||||||
|
checkNpcResponse(event, "cc:level2Intermezzo", 15);
|
||||||
|
checkNpcResponse(event, "cc:afterLevel2", 17);
|
||||||
|
checkNpcResponse(event, "cc:afterLevel3", 21);
|
||||||
|
});
|
||||||
|
|
||||||
|
function checkNpcResponse(event: ScriptEventCommandMessageAfterEvent, id: string, level: number) {
|
||||||
|
if (event.id == id) {
|
||||||
|
if (mindKeeper.get(CURRENT_LEVEL) == level) {
|
||||||
mindKeeper.increment(CURRENT_LEVEL);
|
mindKeeper.increment(CURRENT_LEVEL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.id == "cc:afterLevel1") {
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
triggerManager.RegisterFunctionTrigger("tp", (event) => {
|
||||||
|
// end center pos /setblock 2490 -12 118
|
||||||
|
// start center pos /setblock 2489 10 118
|
||||||
|
|
||||||
|
let pos = vector3(2489, 10, 118);
|
||||||
|
let endPos = vector3(2490, -12, 118);
|
||||||
|
world.sendMessage(Vector3ToFancyString(Vector3Subtract(endPos, pos)));
|
||||||
|
//Find offset and tp player to end pos + offset so its seamless
|
||||||
|
let playerPos = event.player.location;
|
||||||
|
let offset = Vector3Subtract(endPos, playerPos);
|
||||||
|
let finalPos = Vector3Add(pos, offset);
|
||||||
|
event.player.teleport(finalPos);
|
||||||
});
|
});
|
||||||
|
|
||||||
Commands.register(PREFIX, "fien", (arg) => {
|
Commands.register(PREFIX, "fien", (arg) => {
|
||||||
@@ -361,6 +444,7 @@ Commands.register(PREFIX, "info", (arg) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
Commands.register(PREFIX, "kboom", (arg) => {
|
Commands.register(PREFIX, "kboom", (arg) => {
|
||||||
|
if (DEVELOPER_MODE) {
|
||||||
(async () => {
|
(async () => {
|
||||||
for (let i = 0; i < 10; i++) {
|
for (let i = 0; i < 10; i++) {
|
||||||
randomExplosions();
|
randomExplosions();
|
||||||
@@ -368,6 +452,7 @@ Commands.register(PREFIX, "kboom", (arg) => {
|
|||||||
}
|
}
|
||||||
blowUpDoor();
|
blowUpDoor();
|
||||||
})();
|
})();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let openDoor = () => {
|
let openDoor = () => {
|
||||||
@@ -392,6 +477,7 @@ Commands.register(PREFIX, "restore", (arg) => {
|
|||||||
enum GlassWindowState {
|
enum GlassWindowState {
|
||||||
Broken,
|
Broken,
|
||||||
Fixed,
|
Fixed,
|
||||||
|
Fucked,
|
||||||
}
|
}
|
||||||
|
|
||||||
enum AirLockState {
|
enum AirLockState {
|
||||||
@@ -419,91 +505,6 @@ const glassWindowClonePos: ClonePos = {
|
|||||||
point2: vector3(2470, 11, 94),
|
point2: vector3(2470, 11, 94),
|
||||||
};
|
};
|
||||||
|
|
||||||
const glassBreakingFrames: ClonePos[] = [
|
|
||||||
///fill 2465 7 94 2470 4 94
|
|
||||||
{
|
|
||||||
point1: vector3(2465, 7, 94),
|
|
||||||
point2: vector3(2470, 4, 94),
|
|
||||||
},
|
|
||||||
//fill 2465 0 94 2470 -3 94
|
|
||||||
{
|
|
||||||
point1: vector3(2465, 0, 94),
|
|
||||||
point2: vector3(2470, -3, 94),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
//fill 2465 -7 94 2470 -10 94
|
|
||||||
point1: vector3(2465, -7, 94),
|
|
||||||
point2: vector3(2470, -10, 94),
|
|
||||||
},
|
|
||||||
//fill 2465 -14 94 2470 -17 94
|
|
||||||
{
|
|
||||||
point1: vector3(2465, -14, 94),
|
|
||||||
point2: vector3(2470, -17, 94),
|
|
||||||
},
|
|
||||||
//fill 2465 -21 94 2470 -24 94
|
|
||||||
{
|
|
||||||
point1: vector3(2465, -21, 94),
|
|
||||||
point2: vector3(2470, -24, 94),
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const FrontAirLockOpenFrames: ClonePos[] = [
|
|
||||||
{
|
|
||||||
point1: vector3(2476, 9, 94),
|
|
||||||
point2: vector3(2474, 7, 94),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
point1: vector3(2476, 5, 94),
|
|
||||||
point2: vector3(2474, 3, 94),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
point1: vector3(2476, 1, 94),
|
|
||||||
point2: vector3(2474, -1, 94),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
point1: vector3(2476, -3, 94),
|
|
||||||
point2: vector3(2474, -5, 94),
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const BackAirLockOpenFrames: ClonePos[] = [
|
|
||||||
{
|
|
||||||
point1: vector3(2472, 9, 100),
|
|
||||||
point2: vector3(2472, 7, 102),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
point1: vector3(2472, 5, 100),
|
|
||||||
point2: vector3(2472, 3, 102),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
point1: vector3(2472, 1, 100),
|
|
||||||
point2: vector3(2472, -1, 102),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
point1: vector3(2472, -3, 100),
|
|
||||||
point2: vector3(2472, -5, 102),
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const AirLockWaterFrames: ClonePos[] = [
|
|
||||||
{
|
|
||||||
point1: vector3(2473, 11, 95),
|
|
||||||
point2: vector3(2477, 11, 103),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
point1: vector3(2473, 12, 95),
|
|
||||||
point2: vector3(2477, 12, 103),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
point1: vector3(2473, 13, 95),
|
|
||||||
point2: vector3(2477, 13, 103),
|
|
||||||
},
|
|
||||||
{
|
|
||||||
point1: vector3(2473, 14, 95),
|
|
||||||
point2: vector3(2477, 14, 103),
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
Commands.register(PREFIX, "breakGlass", (arg) => {
|
Commands.register(PREFIX, "breakGlass", (arg) => {
|
||||||
breakGlassWindow();
|
breakGlassWindow();
|
||||||
glassWindowState = GlassWindowState.Broken;
|
glassWindowState = GlassWindowState.Broken;
|
||||||
@@ -514,11 +515,12 @@ Commands.register(PREFIX, "restoreGlass", (arg) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
async function breakGlassWindow() {
|
async function breakGlassWindow() {
|
||||||
playAnimation(glassBreakingFrames, 5, false, doorRoot);
|
await playAnimation(glassBreakingFrames, 5, false, doorRoot);
|
||||||
glassWindowState = GlassWindowState.Broken;
|
glassWindowState = GlassWindowState.Broken;
|
||||||
}
|
}
|
||||||
async function restoreGlassWindow(force: boolean = false) {
|
async function restoreGlassWindow(force: boolean = false) {
|
||||||
playAnimation(glassBreakingFrames, 5, true, doorRoot, force);
|
playAnimation(glassBreakingFrames, 5, true, doorRoot, force);
|
||||||
|
glassWindowState = GlassWindowState.Fixed;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function CycleAirLockWater(fill: boolean, delayTime: number) {
|
async function CycleAirLockWater(fill: boolean, delayTime: number) {
|
||||||
@@ -567,12 +569,19 @@ triggerManager.RegisterFunctionTrigger("FrontAirLockOutside", async (event) => {
|
|||||||
|
|
||||||
triggerManager.RegisterFunctionTrigger("TempleFrontDoor", async (event) => {
|
triggerManager.RegisterFunctionTrigger("TempleFrontDoor", async (event) => {
|
||||||
if (mindKeeper.get(CURRENT_LEVEL) == 8) {
|
if (mindKeeper.get(CURRENT_LEVEL) == 8) {
|
||||||
mindKeeper.increment(CURRENT_LEVEL);
|
|
||||||
closeDoor();
|
closeDoor();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mindKeeper.get(CURRENT_LEVEL) == 15) {
|
if (mindKeeper.get(CURRENT_LEVEL) == 22) {
|
||||||
openDoor();
|
openDoor();
|
||||||
|
mindKeeper.increment(CURRENT_LEVEL);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
triggerManager.RegisterFunctionTrigger("level1start", async (event) => {
|
||||||
|
// This is after the player talks to suki
|
||||||
|
if (mindKeeper.get(CURRENT_LEVEL) == 9) {
|
||||||
|
mindKeeper.increment(CURRENT_LEVEL);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -647,7 +656,8 @@ let PlayFrontDoorCloseAnimation = async () => playAnimation(FrontAirLockOpenFram
|
|||||||
let SetBackDoorClosed = () => SetFrame(BackAirLockOpenFrames[0], backDoorRoot);
|
let SetBackDoorClosed = () => SetFrame(BackAirLockOpenFrames[0], backDoorRoot);
|
||||||
let SetBackDoorOpen = () => SetFrame(BackAirLockOpenFrames[BackAirLockOpenFrames.length - 1], backDoorRoot);
|
let SetBackDoorOpen = () => SetFrame(BackAirLockOpenFrames[BackAirLockOpenFrames.length - 1], backDoorRoot);
|
||||||
let PlayBackDoorOpenAnimation = async () => playAnimation(BackAirLockOpenFrames, frameDuration, false, backDoorRoot);
|
let PlayBackDoorOpenAnimation = async () => playAnimation(BackAirLockOpenFrames, frameDuration, false, backDoorRoot);
|
||||||
let PlayBackDoorCloseAnimation = async () => playAnimation(BackAirLockOpenFrames, frameDuration, true, backDoorRoot);
|
let PlayBackDoorCloseAnimation = async () =>
|
||||||
|
playAnimation(BackAirLockOpenFrames, frameDuration, true, backDoorRoot, true);
|
||||||
|
|
||||||
let FillAirlockWater = async () => CycleAirLockWater(true, frameDuration / 1.5);
|
let FillAirlockWater = async () => CycleAirLockWater(true, frameDuration / 1.5);
|
||||||
let EmptyAirlockWater = async () => {
|
let EmptyAirlockWater = async () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user