Before Format Wars

This commit is contained in:
2024-08-29 10:45:07 +02:00
parent 35af9ffc97
commit 545e47a9f3
20 changed files with 1243 additions and 399 deletions

View File

@@ -7,12 +7,19 @@ import {
Dimension,
TicksPerSecond,
BlockVolume,
ScriptEventCommandMessageAfterEvent,
} from "@minecraft/server";
import { Mindkeeper, StoreType } from "./Commandeer/mindKeeper";
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 { PARTICLES, spawnParticle } from "./Commandeer/utils/particleUtils";
import { ParticleColumn, PARTICLES, spawnParticle } from "./Commandeer/utils/particleUtils";
import { TrailMaker } from "./Commandeer/trail/trailMaker";
import * as CCTrigger from "./Commandeer/Trigger/CCTrigger";
import { Commands } from "./Commandeer/command/command";
@@ -41,7 +48,14 @@ import {
SetFrame,
} from "./Commandeer/animations/animation";
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";
const mindKeeper = new Mindkeeper(world);
@@ -50,7 +64,9 @@ const triggerManager = new CCTrigger.Manager(mindKeeper);
const CURRENT_LEVEL = "currentLevel";
const AGENT_ID = "agentid";
const PREFIX = "!";
export { mindKeeper, CURRENT_LEVEL, triggerManager };
let DEVELOPER_MODE = true;
export { mindKeeper, CURRENT_LEVEL, triggerManager, PREFIX, DEVELOPER_MODE };
// loadTriggers();
// loadCommands();
@@ -64,14 +80,14 @@ async function resetLightPath() {
}
let introToGlassBreakTimer: number = 0;
const glassBreakTime = 5 * TicksPerSecond;
const glassBreakTime = 1 * TicksPerSecond;
let isIntroToLevel1Sqeuence = false;
let introTrail: Trail = new Trail("introTrail", 2, 4);
let introTrail: Trail = new Trail("introTrail", 2, 25 / 5);
introTrail.fromTrail(startTrail);
let introToLevelTrail = new Trail("introToLevelTrail", 2, 2);
let introToLevelTrail = new Trail("introToLevelTrail", 2, 74 / 2);
introToLevelTrail.fromTrail(IntroToLevel1Trail);
//fill 2466 0 48 2469 -1 48
@@ -81,10 +97,16 @@ let bilalBlock: Wall = {
};
// 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;
system.runInterval(async () => {
system.runInterval(() => {
tickCounter++;
if (mindKeeper.initialised) {
trailMaker.Update();
@@ -93,11 +115,18 @@ system.runInterval(async () => {
}
const currentLevel = mindKeeper.get(CURRENT_LEVEL);
if (prevCurrentLevel != currentLevel) {
world.sendMessage("Current level: " + currentLevel);
prevCurrentLevel = mindKeeper.get(CURRENT_LEVEL) as number;
}
switch (currentLevel) {
case 0:
// Show goto airlock text
Pupeteer.setActionBar("%message.goto.airlock");
introTrail.spawnNext();
drawArrow(vector3(2478, 37, 89));
airlockParticles.update();
airlockParticles.draw();
break;
case 1:
Pupeteer.setActionBar("%message.enter.airlock");
@@ -110,36 +139,36 @@ system.runInterval(async () => {
levelIntro.update();
break;
case 4:
if (!isIntroToLevel1Sqeuence) {
isIntroToLevel1Sqeuence = true;
// world.sendMessage("Intro to level1 sequence start");
await lightUpPath();
await randomExplosions();
blowUpDoor();
mindKeeper.increment(CURRENT_LEVEL);
triggerAlarm();
}
(async () => {
if (!isIntroToLevel1Sqeuence) {
isIntroToLevel1Sqeuence = true;
// world.sendMessage("Intro to level1 sequence start");
await lightUpPath();
await randomExplosions();
blowUpDoor();
triggerAlarm();
mindKeeper.increment(CURRENT_LEVEL);
}
})();
break;
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:
// Show Goto Level 1
if (glassWindowState == GlassWindowState.Fixed) {
glassWindowState = GlassWindowState.Broken;
system.run(async () => {
if (DEVELOPER_MODE) {
world.sendMessage("Breaking glass");
}
await delay(10);
await breakGlassWindow();
mindKeeper.increment(CURRENT_LEVEL);
setNPCDialog("chanel1", "chanel_goto_temple");
});
if (isBreaking == false) {
isBreaking = true;
if (glassWindowState == GlassWindowState.Fixed) {
glassWindowState = GlassWindowState.Broken;
system.run(async () => {
if (DEVELOPER_MODE) {
world.sendMessage("Breaking glass");
}
await delay(10);
await breakGlassWindow();
mindKeeper.increment(CURRENT_LEVEL);
});
}
}
break;
case 7:
@@ -152,33 +181,62 @@ system.runInterval(async () => {
//Talk to Suki
break;
case 9:
mission1part1.update();
level1Particles.update();
level1Particles.draw();
Pupeteer.setActionBar("%message.goto.level1");
break;
case 10:
mission1part2.update();
mission1part1.update();
break;
case 11:
mission1part3.update();
mission1part2.update();
break;
case 12:
Pupeteer.setActionBar("%message.goto.level2");
mission1part3.update();
//Agent is back with player
break;
case 13:
mission2part1.update();
setNPCDialog("suki1", "suki_afterlevel_1_1");
Pupeteer.setActionBar("%message.talkto.suki");
break;
case 14:
mission2part2.update();
mission2part1.update();
break;
case 15:
mission3part1.update();
break;
case 15:
mission3part2.update();
//Talk to suki
setNPCDialog("suki1", "suki_afterlevel_2_1_intermezzo");
Pupeteer.setActionBar("%message.talkto.suki");
break;
case 16:
mission3part3.update();
mission2part2.update();
break;
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;
}
}
@@ -287,6 +345,9 @@ world.afterEvents.chatSend.subscribe(async (event: ChatSendAfterEvent) => {
mission2part1.reset();
mission2part2.reset();
//Set redstone block
startLevel(vector3(2456, -1, 4));
startLevel(vector3(2457, -1, 4));
//Reset the combination to a random squence
@@ -299,7 +360,10 @@ world.afterEvents.chatSend.subscribe(async (event: ChatSendAfterEvent) => {
fillWall(bilalBlock, MinecraftBlockTypes.Barrier);
openDoor();
isIntroToLevel1Sqeuence = false;
isBreaking = false;
}
});
@@ -329,14 +393,33 @@ system.afterEvents.scriptEventReceive.subscribe((event) => {
}
}
if (event.id == "cc:startLevel1") {
if (mindKeeper.get(CURRENT_LEVEL) == 8) {
checkNpcResponse(event, "cc:startLevel1", 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);
}
}
}
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) => {
@@ -361,13 +444,15 @@ Commands.register(PREFIX, "info", (arg) => {
});
Commands.register(PREFIX, "kboom", (arg) => {
(async () => {
for (let i = 0; i < 10; i++) {
randomExplosions();
await delay(1);
}
blowUpDoor();
})();
if (DEVELOPER_MODE) {
(async () => {
for (let i = 0; i < 10; i++) {
randomExplosions();
await delay(1);
}
blowUpDoor();
})();
}
});
let openDoor = () => {
@@ -392,6 +477,7 @@ Commands.register(PREFIX, "restore", (arg) => {
enum GlassWindowState {
Broken,
Fixed,
Fucked,
}
enum AirLockState {
@@ -419,91 +505,6 @@ const glassWindowClonePos: ClonePos = {
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) => {
breakGlassWindow();
glassWindowState = GlassWindowState.Broken;
@@ -514,11 +515,12 @@ Commands.register(PREFIX, "restoreGlass", (arg) => {
});
async function breakGlassWindow() {
playAnimation(glassBreakingFrames, 5, false, doorRoot);
await playAnimation(glassBreakingFrames, 5, false, doorRoot);
glassWindowState = GlassWindowState.Broken;
}
async function restoreGlassWindow(force: boolean = false) {
playAnimation(glassBreakingFrames, 5, true, doorRoot, force);
glassWindowState = GlassWindowState.Fixed;
}
async function CycleAirLockWater(fill: boolean, delayTime: number) {
@@ -567,12 +569,19 @@ triggerManager.RegisterFunctionTrigger("FrontAirLockOutside", async (event) => {
triggerManager.RegisterFunctionTrigger("TempleFrontDoor", async (event) => {
if (mindKeeper.get(CURRENT_LEVEL) == 8) {
mindKeeper.increment(CURRENT_LEVEL);
closeDoor();
}
if (mindKeeper.get(CURRENT_LEVEL) == 15) {
if (mindKeeper.get(CURRENT_LEVEL) == 22) {
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 SetBackDoorOpen = () => SetFrame(BackAirLockOpenFrames[BackAirLockOpenFrames.length - 1], 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 EmptyAirlockWater = async () => {