Before Format Wars
This commit is contained in:
@@ -12,6 +12,7 @@ class AbstractAgentTrackMission extends Level {
|
||||
constructor(
|
||||
levelid: string,
|
||||
agentStartPositon: Vector3,
|
||||
agentStartFacing: Vector3,
|
||||
agentEndPosition: Vector3,
|
||||
startLevelCommandBlockPos: Vector3
|
||||
) {
|
||||
@@ -20,7 +21,7 @@ class AbstractAgentTrackMission extends Level {
|
||||
pupeteer.sendWorldMessage(`%message.${levelid}.started`);
|
||||
pupeteer.setTitleTimed(`%message.${levelid}.name`, 2.5);
|
||||
startLevel(startLevelCommandBlockPos);
|
||||
teleportAgent(agentStartPositon);
|
||||
teleportAgent(agentStartPositon, agentStartFacing);
|
||||
},
|
||||
() => {
|
||||
pupeteer.setActionBar(`%message.${levelid}.make`);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { MolangVariableMap, Vector3, world } from "@minecraft/server";
|
||||
import { Vector3Add } from "../utils/vectorUtils";
|
||||
import { TrailType } from "./trailTypes";
|
||||
import { PARTICLES, spawnParticle } from "../utils/particleUtils";
|
||||
|
||||
class TrailPoint {
|
||||
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 = this.postion;
|
||||
try {
|
||||
world
|
||||
.getDimension("overworld")
|
||||
.spawnParticle("minecraft:balloon_gas_particle", spawnPosition, new MolangVariableMap());
|
||||
spawnParticle(spawnPosition, PARTICLES.balloon_gas_particle, new MolangVariableMap());
|
||||
} catch (e) {}
|
||||
}
|
||||
}
|
||||
@@ -40,19 +39,14 @@ class Trail {
|
||||
addPoint(point: TrailPoint) {
|
||||
this.points.push(point);
|
||||
|
||||
//this could be a one liner,
|
||||
let maxlength: number = 0;
|
||||
this.points.forEach((point) => {
|
||||
if (point.index > maxlength) {
|
||||
maxlength = point.index;
|
||||
}
|
||||
});
|
||||
this.calculatedLength = maxlength;
|
||||
this.calculatedLength = this.points.length;
|
||||
}
|
||||
|
||||
fromTrail(trail: TrailType) {
|
||||
let currentIndex = 0;
|
||||
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;
|
||||
this.points
|
||||
.filter((point) => {
|
||||
return (
|
||||
point.index === this.currentPoint ||
|
||||
(this.wrapIndex > 0 && point.index % pointsPerInterval === this.currentPoint)
|
||||
);
|
||||
if (this.wrapIndex > 0) {
|
||||
return point.index % this.wrapIndex == this.currentPoint;
|
||||
} else {
|
||||
return point.index == this.currentPoint;
|
||||
}
|
||||
})
|
||||
.forEach((point) => {
|
||||
point.spawn();
|
||||
});
|
||||
|
||||
this.currentPoint++;
|
||||
if (this.currentPoint >= this.calculatedLength) {
|
||||
let actualLength = this.wrapIndex > 0 ? this.wrapIndex : this.calculatedLength;
|
||||
if (this.currentPoint >= actualLength) {
|
||||
this.currentPoint = 0;
|
||||
}
|
||||
} else {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { Entity, Vector3, world } from "@minecraft/server";
|
||||
import { Vector3ToString, vector3 } from "./vectorUtils";
|
||||
import { Vector3Add, Vector3ToString, vector3 } from "./vectorUtils";
|
||||
import { mindKeeper } from "../../main";
|
||||
|
||||
//Make a facing with vector3
|
||||
@@ -11,10 +11,11 @@ function teleportAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): v
|
||||
.getDimension("overworld")
|
||||
.runCommand(`/execute as @a run tp @e[type=agent] ${position.x} ${position.y} ${position.z}`);
|
||||
} else {
|
||||
let facing2 = Vector3Add(position, facing);
|
||||
world
|
||||
.getDimension("overworld")
|
||||
.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;
|
||||
}
|
||||
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");
|
||||
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[] = [];
|
||||
|
||||
const blockCycle: string[] = [
|
||||
MinecraftBlockTypes.RedstoneBlock,
|
||||
MinecraftBlockTypes.GoldBlock,
|
||||
MinecraftBlockTypes.DiamondBlock,
|
||||
// MinecraftBlockTypes.RedstoneBlock,
|
||||
// MinecraftBlockTypes.GoldBlock,
|
||||
// MinecraftBlockTypes.DiamondBlock,
|
||||
MinecraftBlockTypes.EmeraldBlock,
|
||||
MinecraftBlockTypes.LapisBlock,
|
||||
];
|
||||
|
||||
@@ -5,11 +5,14 @@ import { vector3 } from "../../Commandeer/utils/vectorUtils";
|
||||
const Level1CommandBlockPos: Vector3 = vector3(2439, 0, 36);
|
||||
|
||||
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);
|
||||
|
||||
let mission1part1: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
||||
"mission1part1",
|
||||
level1StartPosition,
|
||||
level1AgentFacing,
|
||||
Level1EndPosition,
|
||||
Level1CommandBlockPos
|
||||
);
|
||||
|
||||
@@ -5,6 +5,7 @@ import { vector3 } from "../../Commandeer/utils/vectorUtils";
|
||||
const Level2CommandBlockPos: Vector3 = vector3(2439, 0, 35);
|
||||
|
||||
const level2StartPosition: Vector3 = vector3(2446, -2, 40);
|
||||
const level2AgentFacing: Vector3 = vector3(1, 0, 0);
|
||||
const Level2EndPosition: Vector3 = vector3(2446, -2, 30);
|
||||
|
||||
const level2ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
|
||||
@@ -12,6 +13,7 @@ const level2ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
|
||||
let mission1part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
||||
"mission1part2",
|
||||
level2StartPosition,
|
||||
level2AgentFacing,
|
||||
Level2EndPosition,
|
||||
Level2CommandBlockPos
|
||||
);
|
||||
|
||||
@@ -3,6 +3,7 @@ import AbstractAgentTrackMission from "../../Commandeer/level/abstractTrackFollo
|
||||
import { vector3 } from "../../Commandeer/utils/vectorUtils";
|
||||
|
||||
const Level3CommandBlockPos: Vector3 = vector3(2439, 0, 34);
|
||||
const level3AgentFacing: Vector3 = vector3(0, 0, -1);
|
||||
const level3StartPosition: Vector3 = vector3(2447, -2, 30);
|
||||
const level3EndPosition: Vector3 = vector3(2451, -2, 18);
|
||||
|
||||
@@ -11,6 +12,7 @@ const level3ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
|
||||
let mission1part3: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
||||
"mission1part3",
|
||||
level3StartPosition,
|
||||
level3AgentFacing,
|
||||
level3EndPosition,
|
||||
Level3CommandBlockPos
|
||||
);
|
||||
|
||||
@@ -12,6 +12,7 @@ import { startLevel } from "../../Commandeer/utils/levelUtils";
|
||||
const mission2part1CommandBlockPos: Vector3 = vector3(2460, -1, 4);
|
||||
|
||||
const mission2part1StartPosition: Vector3 = vector3(2455, -1, 11);
|
||||
const mission2Part1AgentFacing: Vector3 = vector3(1, 0, 0);
|
||||
const mission2part1EndPosition: Vector3 = vector3(2465, -1, 11);
|
||||
|
||||
const mission2part1ResetCommandBlockPos: Vector3 = vector3(2456, -1, 4);
|
||||
@@ -20,7 +21,7 @@ const mission2part1: Level = new Level(
|
||||
pupeteer.sendWorldMessage("%message.mission2part1.started");
|
||||
pupeteer.setTitleTimed("%message.mission2part1.name", 2.5);
|
||||
startLevel(mission2part1CommandBlockPos);
|
||||
teleportAgent(mission2part1StartPosition);
|
||||
teleportAgent(mission2part1StartPosition, mission2Part1AgentFacing);
|
||||
startLevel(mission2part1ResetCommandBlockPos);
|
||||
},
|
||||
() => {
|
||||
|
||||
@@ -12,6 +12,7 @@ import { startLevel } from "../../Commandeer/utils/levelUtils";
|
||||
const mission2part2CommandBlockPos: Vector3 = vector3(2461, -1, 4);
|
||||
|
||||
const mission2part2StartPosition: Vector3 = vector3(2467, -1, 11);
|
||||
const mission2Part1AgentFacing: Vector3 = vector3(1, 0, 0);
|
||||
const mission2part2EndPosition: Vector3 = vector3(2481, -1, 11);
|
||||
|
||||
const mission2part2ResetCommandBlockPos: Vector3 = vector3(2457, -1, 4);
|
||||
@@ -20,7 +21,7 @@ const mission2part2: Level = new Level(
|
||||
pupeteer.sendWorldMessage("%message.mission2part2.started");
|
||||
pupeteer.setTitleTimed("%message.mission2part2.name", 2.5);
|
||||
startLevel(mission2part2CommandBlockPos);
|
||||
teleportAgent(mission2part2StartPosition);
|
||||
teleportAgent(mission2part2StartPosition, mission2Part1AgentFacing);
|
||||
startLevel(mission2part2ResetCommandBlockPos);
|
||||
},
|
||||
() => {
|
||||
|
||||
@@ -5,11 +5,13 @@ import { vector3 } from "../../Commandeer/utils/vectorUtils";
|
||||
const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 26);
|
||||
|
||||
const level1StartPosition: Vector3 = vector3(2488, -2, 7);
|
||||
const level1AgentFacing: Vector3 = vector3(0, 0, 1);
|
||||
const Level1EndPosition: Vector3 = vector3(2488, -2, 22);
|
||||
|
||||
let mission3part1: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
||||
"mission3part1",
|
||||
level1StartPosition,
|
||||
level1AgentFacing,
|
||||
Level1EndPosition,
|
||||
Level1CommandBlockPos
|
||||
);
|
||||
|
||||
@@ -5,11 +5,13 @@ import { vector3 } from "../../Commandeer/utils/vectorUtils";
|
||||
const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 27);
|
||||
|
||||
const level1StartPosition: Vector3 = vector3(2492, -2, 26);
|
||||
const level1AgentFacing: Vector3 = vector3(0, 0, 1);
|
||||
const Level1EndPosition: Vector3 = vector3(2484, -2, 32);
|
||||
|
||||
let mission3part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
||||
"mission3part2",
|
||||
level1StartPosition,
|
||||
level1AgentFacing,
|
||||
Level1EndPosition,
|
||||
Level1CommandBlockPos
|
||||
);
|
||||
|
||||
@@ -5,11 +5,13 @@ import { vector3 } from "../../Commandeer/utils/vectorUtils";
|
||||
const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 28);
|
||||
|
||||
const level1StartPosition: Vector3 = vector3(2487, -2, 36);
|
||||
const level1AgentFacing: Vector3 = vector3(1, 0, 0);
|
||||
const Level1EndPosition: Vector3 = vector3(2488, -2, 57);
|
||||
|
||||
let mission3part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
|
||||
"mission3part2",
|
||||
level1StartPosition,
|
||||
level1AgentFacing,
|
||||
Level1EndPosition,
|
||||
Level1CommandBlockPos
|
||||
);
|
||||
|
||||
304
scripts/main.ts
304
scripts/main.ts
@@ -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 () => {
|
||||
|
||||
Reference in New Issue
Block a user