omegga 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/plugin.js +2 -0
- package/dist/cli/plugin.js.map +1 -1
- package/package.json +1 -1
- package/templates/safe-ts/.gitignore.rename +3 -0
- package/templates/safe-ts/omegga.d.ts +1311 -0
- package/.babelrc.json +0 -5
- package/.github/workflows/lint.yml +0 -26
- package/.vscode/extensions.json +0 -5
- package/.vscode/settings.json +0 -20
|
@@ -0,0 +1,1311 @@
|
|
|
1
|
+
export interface BRColor {
|
|
2
|
+
r: number;
|
|
3
|
+
b: number;
|
|
4
|
+
g: number;
|
|
5
|
+
a: number;
|
|
6
|
+
}
|
|
7
|
+
export interface BRVector {
|
|
8
|
+
x: number;
|
|
9
|
+
y: number;
|
|
10
|
+
z: number;
|
|
11
|
+
}
|
|
12
|
+
export interface BRBanListEntry {
|
|
13
|
+
bannerId: string;
|
|
14
|
+
created: string;
|
|
15
|
+
expires: string;
|
|
16
|
+
reason: string;
|
|
17
|
+
}
|
|
18
|
+
export interface BRBanList {
|
|
19
|
+
banList: Record<string, BRBanListEntry>;
|
|
20
|
+
}
|
|
21
|
+
export interface BRRolePermission {
|
|
22
|
+
name: string;
|
|
23
|
+
state: "Allowed" | "Unchanged" | "Forbidden";
|
|
24
|
+
}
|
|
25
|
+
export interface BRRoleSetupEntry {
|
|
26
|
+
name: string;
|
|
27
|
+
permissions: BRRolePermission[];
|
|
28
|
+
color: BRColor;
|
|
29
|
+
bHasColor: boolean;
|
|
30
|
+
}
|
|
31
|
+
export interface BRRoleSetup {
|
|
32
|
+
roles: BRRoleSetupEntry[];
|
|
33
|
+
defaultRole: BRRoleSetupEntry;
|
|
34
|
+
ownerRoleColor: BRColor;
|
|
35
|
+
bOwnerRoleHasColor: boolean;
|
|
36
|
+
version: string;
|
|
37
|
+
}
|
|
38
|
+
export interface BRRoleAssignments {
|
|
39
|
+
savedPlayerRoles: Record<string, {
|
|
40
|
+
roles: string[];
|
|
41
|
+
}>;
|
|
42
|
+
}
|
|
43
|
+
export interface BRPlayerNameCache {
|
|
44
|
+
savedPlayerNames: Record<string, string>;
|
|
45
|
+
}
|
|
46
|
+
export declare type Preset<T extends string, D> = {
|
|
47
|
+
formatVersion?: "1";
|
|
48
|
+
presetVersion?: "1";
|
|
49
|
+
type?: T;
|
|
50
|
+
data?: D;
|
|
51
|
+
};
|
|
52
|
+
export declare type EnvironmentPreset = Preset<"Environment", {
|
|
53
|
+
groups?: {
|
|
54
|
+
Sky?: {
|
|
55
|
+
timeOfDay?: number;
|
|
56
|
+
timeChangeSpeed?: number;
|
|
57
|
+
sunAngle?: number;
|
|
58
|
+
sunScale?: number;
|
|
59
|
+
sunHorizonScaleMultiplier?: number;
|
|
60
|
+
sunlightColor?: BRColor;
|
|
61
|
+
skyIntensity?: number;
|
|
62
|
+
skyColor?: BRColor;
|
|
63
|
+
moonScale?: number;
|
|
64
|
+
moonlightIntensity?: number;
|
|
65
|
+
moonlightColor?: BRColor;
|
|
66
|
+
starsIntensity?: number;
|
|
67
|
+
starsColor?: BRColor;
|
|
68
|
+
auroraIntensity?: number;
|
|
69
|
+
weatherIntensity?: BRColor;
|
|
70
|
+
rainSnow?: number;
|
|
71
|
+
cloudCoverage?: number;
|
|
72
|
+
cloudSpeedMultiplier?: number;
|
|
73
|
+
precipitationParticleAmount?: number;
|
|
74
|
+
bCloseLightning?: boolean;
|
|
75
|
+
rainVolume?: number;
|
|
76
|
+
closeThunderVolume?: number;
|
|
77
|
+
distantThunderVolume?: number;
|
|
78
|
+
windVolume?: number;
|
|
79
|
+
clearFogDensity?: number;
|
|
80
|
+
cloudyFogDensity?: number;
|
|
81
|
+
clearFogHeightFalloff?: number;
|
|
82
|
+
cloudyFogHeightFalloff?: number;
|
|
83
|
+
fogColor?: BRColor;
|
|
84
|
+
};
|
|
85
|
+
GroundPlate?: {
|
|
86
|
+
variance?: number;
|
|
87
|
+
varianceBrickSize?: number;
|
|
88
|
+
groundColor?: BRColor;
|
|
89
|
+
groundAccentColor?: BRColor;
|
|
90
|
+
isVisible?: boolean;
|
|
91
|
+
bUseStudTexture?: boolean;
|
|
92
|
+
};
|
|
93
|
+
Water?: {
|
|
94
|
+
waterHeight?: number;
|
|
95
|
+
waterAbsorption?: BRVector;
|
|
96
|
+
waterScattering?: BRVector;
|
|
97
|
+
waterFogIntensity?: number;
|
|
98
|
+
waterFogAmbientColor?: BRColor;
|
|
99
|
+
waterFogAmbientScale?: number;
|
|
100
|
+
waterFogScatteringColor?: BRColor;
|
|
101
|
+
waterFogScatteringScale?: number;
|
|
102
|
+
};
|
|
103
|
+
Ambience?: {
|
|
104
|
+
selectedAmbienceTypeInt?: number;
|
|
105
|
+
ambienceVolume?: number;
|
|
106
|
+
reverbEffect?: string;
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
}>;
|
|
110
|
+
export interface IOmeggaOptions {
|
|
111
|
+
noauth?: boolean;
|
|
112
|
+
noplugin?: boolean;
|
|
113
|
+
noweb?: boolean;
|
|
114
|
+
debug?: boolean;
|
|
115
|
+
}
|
|
116
|
+
export interface IServerStatus {
|
|
117
|
+
serverName: string;
|
|
118
|
+
description: string;
|
|
119
|
+
bricks: number;
|
|
120
|
+
components: number;
|
|
121
|
+
time: number;
|
|
122
|
+
players: {
|
|
123
|
+
name: string;
|
|
124
|
+
ping: number;
|
|
125
|
+
time: number;
|
|
126
|
+
roles: string[];
|
|
127
|
+
address: string;
|
|
128
|
+
id: string;
|
|
129
|
+
}[];
|
|
130
|
+
}
|
|
131
|
+
export declare type IMinigameList = {
|
|
132
|
+
index: number;
|
|
133
|
+
name: string;
|
|
134
|
+
numMembers: number;
|
|
135
|
+
owner: {
|
|
136
|
+
name: string;
|
|
137
|
+
id: string;
|
|
138
|
+
};
|
|
139
|
+
}[];
|
|
140
|
+
export declare type IPlayerPositions = {
|
|
141
|
+
player: OmeggaPlayer;
|
|
142
|
+
pawn: string;
|
|
143
|
+
pos: number[];
|
|
144
|
+
isDead: boolean;
|
|
145
|
+
}[];
|
|
146
|
+
export declare type ILogMinigame = {
|
|
147
|
+
name: string;
|
|
148
|
+
ruleset: string;
|
|
149
|
+
members: OmeggaPlayer[];
|
|
150
|
+
teams: {
|
|
151
|
+
name: string;
|
|
152
|
+
team: string;
|
|
153
|
+
color: number[];
|
|
154
|
+
members: OmeggaPlayer[];
|
|
155
|
+
}[];
|
|
156
|
+
};
|
|
157
|
+
export interface BRSBytes extends Uint8Array {
|
|
158
|
+
brsOffset: number;
|
|
159
|
+
}
|
|
160
|
+
export declare type Modify<T, R> = Omit<T, keyof R> & R;
|
|
161
|
+
export declare type Bytes = Uint8Array | BRSBytes;
|
|
162
|
+
export declare type Uuid = string;
|
|
163
|
+
export declare type UnrealClass = string;
|
|
164
|
+
export declare type UnrealObject = string;
|
|
165
|
+
export declare type UnrealBoolean = boolean;
|
|
166
|
+
export declare type UnrealFloat = number;
|
|
167
|
+
export declare type UnrealColor = [
|
|
168
|
+
number,
|
|
169
|
+
number,
|
|
170
|
+
number,
|
|
171
|
+
number
|
|
172
|
+
];
|
|
173
|
+
export declare type UnrealByte = number;
|
|
174
|
+
export declare type UnrealRotator = [
|
|
175
|
+
number,
|
|
176
|
+
number,
|
|
177
|
+
number
|
|
178
|
+
];
|
|
179
|
+
export declare type UnrealType = UnrealClass | UnrealObject | UnrealBoolean | UnrealFloat | UnrealColor | UnrealByte | UnrealRotator;
|
|
180
|
+
export declare type UnrealTypeFromString<T> = T extends "Class" ? UnrealClass : T extends "Object" ? UnrealObject : T extends "Boolean" ? UnrealBoolean : T extends "Float" ? UnrealFloat : T extends "Color" ? UnrealColor : T extends "Byte" ? UnrealByte : T extends "Rotator" ? UnrealRotator : UnrealType;
|
|
181
|
+
export interface User {
|
|
182
|
+
id: Uuid;
|
|
183
|
+
name: string;
|
|
184
|
+
}
|
|
185
|
+
export interface Owner extends User {
|
|
186
|
+
bricks: number;
|
|
187
|
+
}
|
|
188
|
+
declare enum Direction {
|
|
189
|
+
XPositive = 0,
|
|
190
|
+
XNegative = 1,
|
|
191
|
+
YPositive = 2,
|
|
192
|
+
YNegative = 3,
|
|
193
|
+
ZPositive = 4,
|
|
194
|
+
ZNegative = 5
|
|
195
|
+
}
|
|
196
|
+
declare enum Rotation {
|
|
197
|
+
Deg0 = 0,
|
|
198
|
+
Deg90 = 1,
|
|
199
|
+
Deg180 = 2,
|
|
200
|
+
Deg270 = 3
|
|
201
|
+
}
|
|
202
|
+
export declare type ColorRgb = [
|
|
203
|
+
number,
|
|
204
|
+
number,
|
|
205
|
+
number
|
|
206
|
+
];
|
|
207
|
+
export interface Collision {
|
|
208
|
+
player: boolean;
|
|
209
|
+
weapon: boolean;
|
|
210
|
+
interaction: boolean;
|
|
211
|
+
tool: boolean;
|
|
212
|
+
}
|
|
213
|
+
export interface AppliedComponent {
|
|
214
|
+
[property: string]: UnrealType;
|
|
215
|
+
}
|
|
216
|
+
export interface UnknownComponents {
|
|
217
|
+
[component_name: string]: {
|
|
218
|
+
version: number;
|
|
219
|
+
brick_indices?: number[];
|
|
220
|
+
properties: {
|
|
221
|
+
[property: string]: string;
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
export declare type KnownComponents = {
|
|
226
|
+
BCD_SpotLight: {
|
|
227
|
+
version: 1;
|
|
228
|
+
brick_indices?: number[];
|
|
229
|
+
properties: {
|
|
230
|
+
Rotation: "Rotator";
|
|
231
|
+
InnerConeAngle: "Float";
|
|
232
|
+
OuterConeAngle: "Float";
|
|
233
|
+
Brightness: "Float";
|
|
234
|
+
Radius: "Float";
|
|
235
|
+
Color: "Color";
|
|
236
|
+
bUseBrickColor: "Boolean";
|
|
237
|
+
bCastShadows: "Boolean";
|
|
238
|
+
};
|
|
239
|
+
};
|
|
240
|
+
BCD_PointLight: {
|
|
241
|
+
version: 1;
|
|
242
|
+
brick_indices?: number[];
|
|
243
|
+
properties: {
|
|
244
|
+
bMatchBrickShape: "Boolean";
|
|
245
|
+
Brightness: "Float";
|
|
246
|
+
Radius: "Float";
|
|
247
|
+
Color: "Color";
|
|
248
|
+
bUseBrickColor: "Boolean";
|
|
249
|
+
bCastShadows: "Boolean";
|
|
250
|
+
};
|
|
251
|
+
};
|
|
252
|
+
BCD_ItemSpawn: {
|
|
253
|
+
version: 1;
|
|
254
|
+
brick_indices?: number[];
|
|
255
|
+
properties: {
|
|
256
|
+
PickupClass: "Class";
|
|
257
|
+
bPickupEnabled: "Boolean";
|
|
258
|
+
bPickupRespawnOnMinigameReset: "Boolean";
|
|
259
|
+
PickupMinigameResetRespawnDelay: "Float";
|
|
260
|
+
bPickupAutoDisableOnPickup: "Boolean";
|
|
261
|
+
PickupRespawnTime: "Float";
|
|
262
|
+
PickupOffsetDirection: "Byte";
|
|
263
|
+
PickupOffsetDistance: "Float";
|
|
264
|
+
PickupRotation: "Rotator";
|
|
265
|
+
PickupScale: "Float";
|
|
266
|
+
bPickupAnimationEnabled: "Boolean";
|
|
267
|
+
PickupAnimationAxis: "Byte";
|
|
268
|
+
bPickupAnimationAxisLocal: "Boolean";
|
|
269
|
+
PickupSpinSpeed: "Float";
|
|
270
|
+
PickupBobSpeed: "Float";
|
|
271
|
+
PickupBobHeight: "Float";
|
|
272
|
+
PickupAnimationPhase: "Float";
|
|
273
|
+
};
|
|
274
|
+
};
|
|
275
|
+
BCD_Interact: {
|
|
276
|
+
version: 1;
|
|
277
|
+
brick_indices?: number[];
|
|
278
|
+
properties: {
|
|
279
|
+
bPlayInteractSound: "Boolean";
|
|
280
|
+
};
|
|
281
|
+
};
|
|
282
|
+
BCD_AudioEmitter: {
|
|
283
|
+
version: 1;
|
|
284
|
+
brick_indices?: number[];
|
|
285
|
+
properties: {
|
|
286
|
+
AudioDescriptor: "Object";
|
|
287
|
+
VolumeMultiplier: "Float";
|
|
288
|
+
PitchMultiplier: "Float";
|
|
289
|
+
InnerRadius: "Float";
|
|
290
|
+
MaxDistance: "Float";
|
|
291
|
+
bSpatialization: "Boolean";
|
|
292
|
+
};
|
|
293
|
+
};
|
|
294
|
+
};
|
|
295
|
+
export interface DefinedComponents extends UnknownComponents, Partial<KnownComponents> {
|
|
296
|
+
}
|
|
297
|
+
export declare type Components<C extends DefinedComponents> = {
|
|
298
|
+
[T in keyof C]: {
|
|
299
|
+
[V in keyof C[T]["properties"]]: UnrealTypeFromString<C[T]["properties"][V]>;
|
|
300
|
+
};
|
|
301
|
+
} & {
|
|
302
|
+
[component_name: string]: AppliedComponent;
|
|
303
|
+
};
|
|
304
|
+
export declare type Vector = [
|
|
305
|
+
number,
|
|
306
|
+
number,
|
|
307
|
+
number
|
|
308
|
+
];
|
|
309
|
+
export interface BrickV1 {
|
|
310
|
+
asset_name_index: number;
|
|
311
|
+
size: Vector;
|
|
312
|
+
position: Vector;
|
|
313
|
+
direction: Direction;
|
|
314
|
+
rotation: Rotation;
|
|
315
|
+
collision: boolean;
|
|
316
|
+
visibility: boolean;
|
|
317
|
+
color: UnrealColor | number;
|
|
318
|
+
}
|
|
319
|
+
export interface BrickV2 extends BrickV1 {
|
|
320
|
+
material_index: number;
|
|
321
|
+
}
|
|
322
|
+
export interface BrickV3 extends BrickV2 {
|
|
323
|
+
owner_index: number;
|
|
324
|
+
}
|
|
325
|
+
export interface BrickV8 extends BrickV3 {
|
|
326
|
+
components: Components<DefinedComponents>;
|
|
327
|
+
}
|
|
328
|
+
export declare type BrickV9 = Modify<BrickV8, {
|
|
329
|
+
physical_index: number;
|
|
330
|
+
material_intensity: number;
|
|
331
|
+
color: ColorRgb | number;
|
|
332
|
+
}>;
|
|
333
|
+
export declare type BrickV10 = Modify<BrickV9, {
|
|
334
|
+
collision: Collision;
|
|
335
|
+
}>;
|
|
336
|
+
export interface BrsV1 {
|
|
337
|
+
version: 1;
|
|
338
|
+
map: string;
|
|
339
|
+
author: User;
|
|
340
|
+
description: string;
|
|
341
|
+
brick_count: number;
|
|
342
|
+
mods: string[];
|
|
343
|
+
brick_assets: string[];
|
|
344
|
+
colors: UnrealColor[];
|
|
345
|
+
bricks: BrickV1[];
|
|
346
|
+
}
|
|
347
|
+
export declare type BrsV2 = Modify<BrsV1, {
|
|
348
|
+
version: 2;
|
|
349
|
+
materials: string[];
|
|
350
|
+
bricks: BrickV2[];
|
|
351
|
+
}>;
|
|
352
|
+
export declare type BrsV3 = Modify<BrsV2, {
|
|
353
|
+
version: 3;
|
|
354
|
+
brick_owners: User[];
|
|
355
|
+
bricks: BrickV3[];
|
|
356
|
+
}>;
|
|
357
|
+
export declare type BrsV4 = Modify<BrsV3, {
|
|
358
|
+
version: 4;
|
|
359
|
+
save_time: Uint8Array;
|
|
360
|
+
}>;
|
|
361
|
+
export declare type BrsV8 = Modify<BrsV4, {
|
|
362
|
+
version: 8;
|
|
363
|
+
host: User;
|
|
364
|
+
brick_owners: Owner[];
|
|
365
|
+
preview?: Bytes;
|
|
366
|
+
game_version: number;
|
|
367
|
+
bricks: BrickV8[];
|
|
368
|
+
components: DefinedComponents;
|
|
369
|
+
}>;
|
|
370
|
+
export declare type BrsV9 = Modify<BrsV8, {
|
|
371
|
+
version: 9;
|
|
372
|
+
physical_materials: string[];
|
|
373
|
+
bricks: BrickV9[];
|
|
374
|
+
}>;
|
|
375
|
+
export declare type BrsV10 = Modify<BrsV9, {
|
|
376
|
+
version: 10;
|
|
377
|
+
bricks: BrickV10[];
|
|
378
|
+
}>;
|
|
379
|
+
export declare type ReadSaveObject = BrsV1 | BrsV2 | BrsV3 | BrsV4 | BrsV8 | BrsV9 | BrsV10;
|
|
380
|
+
export interface Brick {
|
|
381
|
+
asset_name_index?: number;
|
|
382
|
+
size: Vector;
|
|
383
|
+
position: Vector;
|
|
384
|
+
direction?: Direction;
|
|
385
|
+
rotation?: Rotation;
|
|
386
|
+
collision?: boolean | Partial<Collision>;
|
|
387
|
+
visibility?: boolean;
|
|
388
|
+
material_index?: number;
|
|
389
|
+
physical_index?: number;
|
|
390
|
+
material_intensity?: number;
|
|
391
|
+
color?: ColorRgb | number;
|
|
392
|
+
owner_index?: number;
|
|
393
|
+
components?: Components<DefinedComponents>;
|
|
394
|
+
}
|
|
395
|
+
export interface WriteSaveObject {
|
|
396
|
+
game_version?: number;
|
|
397
|
+
map?: string;
|
|
398
|
+
description?: string;
|
|
399
|
+
author?: Partial<User>;
|
|
400
|
+
host?: Partial<User>;
|
|
401
|
+
mods?: string[];
|
|
402
|
+
brick_assets?: string[];
|
|
403
|
+
colors?: UnrealColor[];
|
|
404
|
+
materials?: string[];
|
|
405
|
+
brick_owners?: Partial<Owner>[];
|
|
406
|
+
physical_materials?: string[];
|
|
407
|
+
preview?: Bytes;
|
|
408
|
+
bricks: Brick[];
|
|
409
|
+
save_time?: ArrayLike<number>;
|
|
410
|
+
components?: DefinedComponents;
|
|
411
|
+
}
|
|
412
|
+
export interface ReadOptions {
|
|
413
|
+
bricks?: boolean;
|
|
414
|
+
preview?: boolean;
|
|
415
|
+
}
|
|
416
|
+
export interface WriteOptions {
|
|
417
|
+
compress?: boolean;
|
|
418
|
+
}
|
|
419
|
+
declare function readBrs(rawBytes: Uint8Array, options?: ReadOptions): ReadSaveObject;
|
|
420
|
+
declare function writeBrs(save: WriteSaveObject, options?: WriteOptions): Uint8Array;
|
|
421
|
+
declare global {
|
|
422
|
+
interface Window {
|
|
423
|
+
BRS: {
|
|
424
|
+
read: typeof read;
|
|
425
|
+
write: typeof write;
|
|
426
|
+
utils: typeof utils;
|
|
427
|
+
constants: typeof constants;
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
declare function hsv(h: number | {
|
|
432
|
+
h: number;
|
|
433
|
+
s: number;
|
|
434
|
+
v: number;
|
|
435
|
+
}, s?: number, v?: number): number[];
|
|
436
|
+
declare function parseDuration(str: string): number;
|
|
437
|
+
declare function parseBrickadiaTime(str: string): number;
|
|
438
|
+
declare function brn2n(brName: string): string;
|
|
439
|
+
declare function n2brn(name: string): string;
|
|
440
|
+
export interface IBrickBounds {
|
|
441
|
+
minBound: Vector;
|
|
442
|
+
maxBound: Vector;
|
|
443
|
+
center: Vector;
|
|
444
|
+
}
|
|
445
|
+
declare function checkBounds(brick: Brick, brick_assets: string[], bounds: IBrickBounds): boolean;
|
|
446
|
+
declare function getBounds({ bricks, brick_assets }: WriteSaveObject): IBrickBounds;
|
|
447
|
+
declare function getBrickSize(brick: Brick, brick_assets: string[]): [
|
|
448
|
+
number,
|
|
449
|
+
number,
|
|
450
|
+
number
|
|
451
|
+
];
|
|
452
|
+
declare function getScaleAxis(brick: Brick, axis: number): number;
|
|
453
|
+
declare function setOwnership(player: {
|
|
454
|
+
id: string;
|
|
455
|
+
name: string;
|
|
456
|
+
}, saveData: ReadSaveObject): ReadSaveObject;
|
|
457
|
+
export declare const read: typeof import("brs-js").read;
|
|
458
|
+
export declare const write: typeof import("brs-js").write;
|
|
459
|
+
export declare const utils: typeof import("brs-js/dist/src/utils");
|
|
460
|
+
export declare const constants: typeof import("brs-js/dist/src/constants");
|
|
461
|
+
export declare const _OMEGGA_UTILS_IMPORT: {
|
|
462
|
+
chat: {
|
|
463
|
+
EMOTES: string[];
|
|
464
|
+
sanitize: (str: string) => string;
|
|
465
|
+
parseLinks: (message: string) => string;
|
|
466
|
+
attr: (attr: string, param?: string) => (message: string) => string;
|
|
467
|
+
attrParam: <T = string>(attr: string) => (message: string, param: T) => string;
|
|
468
|
+
color: (message: string, param: string) => string;
|
|
469
|
+
bold: (message: string) => string;
|
|
470
|
+
italic: (message: string) => string;
|
|
471
|
+
underline: (message: string) => string;
|
|
472
|
+
emoji: (message: string) => string;
|
|
473
|
+
code: (message: string) => string;
|
|
474
|
+
font: (message: string, param: string) => string;
|
|
475
|
+
size: (message: string, param: number) => string;
|
|
476
|
+
link: (message: string, param: string) => string;
|
|
477
|
+
red: (message: string) => string;
|
|
478
|
+
green: (message: string) => string;
|
|
479
|
+
blue: (message: string) => string;
|
|
480
|
+
yellow: (message: string) => string;
|
|
481
|
+
cyan: (message: string) => string;
|
|
482
|
+
magenta: (message: string) => string;
|
|
483
|
+
black: (message: string) => string;
|
|
484
|
+
white: (message: string) => string;
|
|
485
|
+
gray: (message: string) => string;
|
|
486
|
+
};
|
|
487
|
+
color: {
|
|
488
|
+
hsv: typeof hsv;
|
|
489
|
+
linearRGB: (rgba: number[]) => number[];
|
|
490
|
+
sRGB: (linear: number[]) => number[];
|
|
491
|
+
rgbToHex: (r: number | [
|
|
492
|
+
number,
|
|
493
|
+
number,
|
|
494
|
+
number
|
|
495
|
+
] | {
|
|
496
|
+
r: number;
|
|
497
|
+
g: number;
|
|
498
|
+
b: number;
|
|
499
|
+
}, g?: number, b?: number) => string;
|
|
500
|
+
DEFAULT_COLORSET: number[][];
|
|
501
|
+
};
|
|
502
|
+
uuid: {
|
|
503
|
+
UUID_PATTERN: RegExp;
|
|
504
|
+
match: (str: string) => boolean;
|
|
505
|
+
};
|
|
506
|
+
pattern: {
|
|
507
|
+
explode: (str: string) => RegExp;
|
|
508
|
+
};
|
|
509
|
+
time: {
|
|
510
|
+
parseDuration: typeof parseDuration;
|
|
511
|
+
parseBrickadiaTime: typeof parseBrickadiaTime;
|
|
512
|
+
};
|
|
513
|
+
map: {
|
|
514
|
+
DEFAULT_MAPS: {
|
|
515
|
+
name: string;
|
|
516
|
+
brName: string;
|
|
517
|
+
}[];
|
|
518
|
+
brn2n: typeof brn2n;
|
|
519
|
+
n2brn: typeof n2brn;
|
|
520
|
+
};
|
|
521
|
+
brick: {
|
|
522
|
+
BRICK_CONSTANTS: {
|
|
523
|
+
rotationTable: number[];
|
|
524
|
+
translationTable: (([x, y, z]: [
|
|
525
|
+
number,
|
|
526
|
+
number,
|
|
527
|
+
number
|
|
528
|
+
]) => [
|
|
529
|
+
number,
|
|
530
|
+
number,
|
|
531
|
+
number
|
|
532
|
+
])[];
|
|
533
|
+
orientationMap: Record<string, [
|
|
534
|
+
number,
|
|
535
|
+
number
|
|
536
|
+
]>;
|
|
537
|
+
DEFAULT_MATERIALS: string[];
|
|
538
|
+
brickSizeMap: Record<string, [
|
|
539
|
+
number,
|
|
540
|
+
number,
|
|
541
|
+
number
|
|
542
|
+
]>;
|
|
543
|
+
};
|
|
544
|
+
checkBounds: typeof checkBounds;
|
|
545
|
+
getBounds: typeof getBounds;
|
|
546
|
+
getBrickSize: typeof getBrickSize;
|
|
547
|
+
getScaleAxis: typeof getScaleAxis;
|
|
548
|
+
setOwnership: typeof setOwnership;
|
|
549
|
+
rotate: (brick: import("brs-js").Brick, rotation: [
|
|
550
|
+
number,
|
|
551
|
+
number
|
|
552
|
+
]) => import("brs-js").Brick;
|
|
553
|
+
rotate_x: (times: number) => (obj: import("brs-js").Brick) => import("brs-js").Brick;
|
|
554
|
+
rotate_y: (times: number) => (obj: import("brs-js").Brick) => import("brs-js").Brick;
|
|
555
|
+
rotate_z: (times: number) => (obj: import("brs-js").Brick) => import("brs-js").Brick;
|
|
556
|
+
d2o: (direction: number, rotation: number) => number;
|
|
557
|
+
o2d: (orientation: number) => number[];
|
|
558
|
+
};
|
|
559
|
+
wsl: () => number;
|
|
560
|
+
brs: typeof import("brs-js");
|
|
561
|
+
};
|
|
562
|
+
declare global {
|
|
563
|
+
export var Omegga: OmeggaLike;
|
|
564
|
+
export var Player: StaticPlayer;
|
|
565
|
+
export var OMEGGA_UTIL: typeof _OMEGGA_UTILS_IMPORT;
|
|
566
|
+
}
|
|
567
|
+
export declare type OL = OmeggaLike;
|
|
568
|
+
export declare type OP = OmeggaPlugin;
|
|
569
|
+
export declare type PC<T extends Record<string, unknown> = Record<string, unknown>> = PluginConfig<T>;
|
|
570
|
+
export declare type PS<T extends Record<string, unknown> = Record<string, unknown>> = PluginStore<T>;
|
|
571
|
+
export interface BrickBounds {
|
|
572
|
+
minBound: [
|
|
573
|
+
number,
|
|
574
|
+
number,
|
|
575
|
+
number
|
|
576
|
+
];
|
|
577
|
+
maxBound: [
|
|
578
|
+
number,
|
|
579
|
+
number,
|
|
580
|
+
number
|
|
581
|
+
];
|
|
582
|
+
center: [
|
|
583
|
+
number,
|
|
584
|
+
number,
|
|
585
|
+
number
|
|
586
|
+
];
|
|
587
|
+
}
|
|
588
|
+
/** Created when a player clicks on a brick with an interact component */
|
|
589
|
+
export declare type BrickInteraction = {
|
|
590
|
+
/** Brick name from catalog (Turkey Body, 4x Cube) */
|
|
591
|
+
brick_name: string;
|
|
592
|
+
/** Player information, id, name, controller, and pawn */
|
|
593
|
+
player: {
|
|
594
|
+
id: string;
|
|
595
|
+
name: string;
|
|
596
|
+
controller: string;
|
|
597
|
+
pawn: string;
|
|
598
|
+
};
|
|
599
|
+
/** Brick center position */
|
|
600
|
+
position: [
|
|
601
|
+
number,
|
|
602
|
+
number,
|
|
603
|
+
number
|
|
604
|
+
];
|
|
605
|
+
};
|
|
606
|
+
/** AutoRestart options */
|
|
607
|
+
export declare type AutoRestartConfig = {
|
|
608
|
+
players: boolean;
|
|
609
|
+
bricks: boolean;
|
|
610
|
+
minigames: boolean;
|
|
611
|
+
environment: boolean;
|
|
612
|
+
announcement: boolean;
|
|
613
|
+
};
|
|
614
|
+
export interface OmeggaPlayer {
|
|
615
|
+
/** player name */
|
|
616
|
+
name: string;
|
|
617
|
+
/** player uuid */
|
|
618
|
+
id: string;
|
|
619
|
+
/** player controller id */
|
|
620
|
+
controller: string;
|
|
621
|
+
/** player state id */
|
|
622
|
+
state: string;
|
|
623
|
+
/**
|
|
624
|
+
* Returns omegga
|
|
625
|
+
*/
|
|
626
|
+
getOmegga(): OmeggaLike;
|
|
627
|
+
/**
|
|
628
|
+
* Clone a player
|
|
629
|
+
*/
|
|
630
|
+
clone(): OmeggaPlayer;
|
|
631
|
+
/**
|
|
632
|
+
* Get raw player info (to feed into a constructor)
|
|
633
|
+
*/
|
|
634
|
+
raw(): [
|
|
635
|
+
string,
|
|
636
|
+
string,
|
|
637
|
+
string,
|
|
638
|
+
string
|
|
639
|
+
];
|
|
640
|
+
/**
|
|
641
|
+
* True if the player is the host
|
|
642
|
+
*/
|
|
643
|
+
isHost(): boolean;
|
|
644
|
+
/**
|
|
645
|
+
* Clear player's bricks
|
|
646
|
+
* @param quiet clear bricks quietly
|
|
647
|
+
*/
|
|
648
|
+
clearBricks(quiet?: boolean): void;
|
|
649
|
+
/**
|
|
650
|
+
* Get player's roles, if any
|
|
651
|
+
*/
|
|
652
|
+
getRoles(): readonly string[];
|
|
653
|
+
/**
|
|
654
|
+
* Get player's permissions in a map like `{"Bricks.ClearOwn": true, ...}`
|
|
655
|
+
* @return permissions map
|
|
656
|
+
*/
|
|
657
|
+
getPermissions(): Record<string, boolean>;
|
|
658
|
+
/**
|
|
659
|
+
* Get player's name color
|
|
660
|
+
* @return 6 character hex string
|
|
661
|
+
*/
|
|
662
|
+
getNameColor(): string;
|
|
663
|
+
/**
|
|
664
|
+
* Get the player's pawn
|
|
665
|
+
* @return pawn
|
|
666
|
+
*/
|
|
667
|
+
getPawn(): Promise<string>;
|
|
668
|
+
/**
|
|
669
|
+
* Get player's position
|
|
670
|
+
* @return [x, y, z] coordinates
|
|
671
|
+
*/
|
|
672
|
+
getPosition(): Promise<[
|
|
673
|
+
number,
|
|
674
|
+
number,
|
|
675
|
+
number
|
|
676
|
+
]>;
|
|
677
|
+
/**
|
|
678
|
+
* Gets a user's ghost brick info (by uuid, name, controller, or player object)
|
|
679
|
+
* @return ghost brick data
|
|
680
|
+
*/
|
|
681
|
+
getGhostBrick(): Promise<{
|
|
682
|
+
targetGrid: string;
|
|
683
|
+
location: number[];
|
|
684
|
+
orientation: string;
|
|
685
|
+
}>;
|
|
686
|
+
/**
|
|
687
|
+
* gets a user's paint tool properties
|
|
688
|
+
*/
|
|
689
|
+
getPaint(): Promise<{
|
|
690
|
+
materialIndex: string;
|
|
691
|
+
materialAlpha: string;
|
|
692
|
+
material: string;
|
|
693
|
+
color: number[];
|
|
694
|
+
}>;
|
|
695
|
+
/**
|
|
696
|
+
* gets whether or not the player is crouching
|
|
697
|
+
*/
|
|
698
|
+
isCrouched(pawn?: string): Promise<boolean>;
|
|
699
|
+
/**
|
|
700
|
+
* gets whether or not the player is dead
|
|
701
|
+
*/
|
|
702
|
+
isDead(pawn?: string): Promise<boolean>;
|
|
703
|
+
/**
|
|
704
|
+
* Gets the bounds of the template in the user's clipboard (bounds of original selection box)
|
|
705
|
+
* @return template bounds
|
|
706
|
+
*/
|
|
707
|
+
getTemplateBounds(): Promise<BrickBounds>;
|
|
708
|
+
/**
|
|
709
|
+
* Get bricks inside template bounds
|
|
710
|
+
* @return BRS JS Save Data
|
|
711
|
+
*/
|
|
712
|
+
getTemplateBoundsData(): Promise<ReadSaveObject>;
|
|
713
|
+
/**
|
|
714
|
+
* Load bricks at ghost brick location
|
|
715
|
+
* @param saveData save data to load
|
|
716
|
+
*/
|
|
717
|
+
loadDataAtGhostBrick(saveData: WriteSaveObject, options?: {
|
|
718
|
+
rotate?: boolean;
|
|
719
|
+
offX?: number;
|
|
720
|
+
offY?: number;
|
|
721
|
+
offZ?: number;
|
|
722
|
+
quiet?: boolean;
|
|
723
|
+
}): Promise<void>;
|
|
724
|
+
/**
|
|
725
|
+
* Load bricks on this player's clipboard
|
|
726
|
+
* @param saveName Save to load
|
|
727
|
+
*/
|
|
728
|
+
loadBricks(saveName: string): void;
|
|
729
|
+
/**
|
|
730
|
+
* Load bricks on this player's clipboard passing save data
|
|
731
|
+
* @param saveData save data to load
|
|
732
|
+
*/
|
|
733
|
+
loadSaveData(saveData: WriteSaveObject, options?: {
|
|
734
|
+
rotate?: boolean;
|
|
735
|
+
offX?: number;
|
|
736
|
+
offY?: number;
|
|
737
|
+
offZ?: number;
|
|
738
|
+
quiet?: boolean;
|
|
739
|
+
}): Promise<void>;
|
|
740
|
+
/**
|
|
741
|
+
* Kills this player
|
|
742
|
+
*/
|
|
743
|
+
kill(): void;
|
|
744
|
+
/**
|
|
745
|
+
* Damages a player
|
|
746
|
+
* @param amount Amount to damage
|
|
747
|
+
*/
|
|
748
|
+
damage(amount: number): void;
|
|
749
|
+
/**
|
|
750
|
+
* Heal this player
|
|
751
|
+
* @param amount to heal
|
|
752
|
+
*/
|
|
753
|
+
heal(amount: number): void;
|
|
754
|
+
/**
|
|
755
|
+
* Gives a player an item
|
|
756
|
+
* @param item Item name (Weapon_Bow)
|
|
757
|
+
*/
|
|
758
|
+
giveItem(item: string): void;
|
|
759
|
+
/**
|
|
760
|
+
* Removes an item from a player's inventory
|
|
761
|
+
* @param item Item name (Weapon_Bow)
|
|
762
|
+
*/
|
|
763
|
+
takeItem(item: string): void;
|
|
764
|
+
}
|
|
765
|
+
export interface StaticPlayer {
|
|
766
|
+
/**
|
|
767
|
+
* get a player's roles, if any
|
|
768
|
+
* @param omegga omegga instance
|
|
769
|
+
* @param id player uuid
|
|
770
|
+
* @return list of roles
|
|
771
|
+
*/
|
|
772
|
+
getRoles(omegga: OmeggaLike, id: string): readonly string[];
|
|
773
|
+
/**
|
|
774
|
+
* get a player's permissions in a map like `{"Bricks.ClearOwn": true, ...}`
|
|
775
|
+
* @param omegga Omegga instance
|
|
776
|
+
* @param id player uuid
|
|
777
|
+
* @return permissions map
|
|
778
|
+
*/
|
|
779
|
+
getPermissions(omegga: OmeggaLike, id: string): Record<string, boolean>;
|
|
780
|
+
/**
|
|
781
|
+
* Kills a player
|
|
782
|
+
* @param omegga Omegga instance
|
|
783
|
+
* @param target Player or player name/id
|
|
784
|
+
*/
|
|
785
|
+
kill(omegga: OmeggaLike, target: string | OmeggaPlayer): void;
|
|
786
|
+
/**
|
|
787
|
+
* Damages a player
|
|
788
|
+
* @param omegga Omegga instance
|
|
789
|
+
* @param target Player or player name/id
|
|
790
|
+
* @param amount Damage amount
|
|
791
|
+
*/
|
|
792
|
+
damage(omegga: OmeggaLike, target: string | OmeggaPlayer, amount: number): void;
|
|
793
|
+
/**
|
|
794
|
+
* Heal a player
|
|
795
|
+
* @param omegga Omegga instance
|
|
796
|
+
* @param target Player or player name/id
|
|
797
|
+
* @param amount Heal amount
|
|
798
|
+
*/
|
|
799
|
+
heal(omegga: OmeggaLike, target: string | OmeggaPlayer, amount: number): void;
|
|
800
|
+
/**
|
|
801
|
+
* Gives a player an item
|
|
802
|
+
* @param omegga Omegga instance
|
|
803
|
+
* @param target Player or player name/id
|
|
804
|
+
* @param item Item name (Weapon_Bow)
|
|
805
|
+
*/
|
|
806
|
+
giveItem(omegga: OmeggaLike, target: string | OmeggaPlayer, item: string): void;
|
|
807
|
+
/**
|
|
808
|
+
* Removes an item from a player's inventory
|
|
809
|
+
* @param omegga Omegga instance
|
|
810
|
+
* @param target Player or player name/id
|
|
811
|
+
* @param item Item name (Weapon_Bow)
|
|
812
|
+
*/
|
|
813
|
+
takeItem(omegga: OmeggaLike, target: string | OmeggaPlayer, item: string): void;
|
|
814
|
+
}
|
|
815
|
+
export interface InjectedCommands {
|
|
816
|
+
/** Get server status */
|
|
817
|
+
getServerStatus(this: OmeggaLike): Promise<IServerStatus>;
|
|
818
|
+
/** Get a list of minigames and their indices */
|
|
819
|
+
listMinigames(this: OmeggaLike): Promise<IMinigameList>;
|
|
820
|
+
/** Get all player positions and pawns */
|
|
821
|
+
getAllPlayerPositions(this: OmeggaLike): Promise<IPlayerPositions>;
|
|
822
|
+
/** Get minigames and members */
|
|
823
|
+
getMinigames(this: OmeggaLike): Promise<ILogMinigame[]>;
|
|
824
|
+
}
|
|
825
|
+
export interface MockEventEmitter {
|
|
826
|
+
addListener(event: string, listener: Function): this;
|
|
827
|
+
emit(event: string, ...args: any[]): boolean;
|
|
828
|
+
eventNames(): (string | symbol)[];
|
|
829
|
+
getMaxListeners(): number;
|
|
830
|
+
listenerCount(event: string): number;
|
|
831
|
+
listeners(event: string): Function[];
|
|
832
|
+
off(event: string, listener: Function): this;
|
|
833
|
+
on(event: string, listener: Function): this;
|
|
834
|
+
once(event: string, listener: Function): this;
|
|
835
|
+
prependListener(event: string, listener: Function): this;
|
|
836
|
+
prependOnceListener(event: string, listener: Function): this;
|
|
837
|
+
rawListeners(event: string): Function[];
|
|
838
|
+
removeAllListeners(event?: string): this;
|
|
839
|
+
removeListener(event: string, listener: Function): this;
|
|
840
|
+
setMaxListeners(maxListeners: number): this;
|
|
841
|
+
on(event: "close", listener: () => void): this;
|
|
842
|
+
on(event: "line", listener: (line: string) => void): this;
|
|
843
|
+
on(event: "start", listener: (info: {
|
|
844
|
+
map: string;
|
|
845
|
+
}) => void): this;
|
|
846
|
+
on(event: "version", listener: (version: number) => void): this;
|
|
847
|
+
on(event: "unauthorized", listener: () => void): this;
|
|
848
|
+
on(event: "join", listener: (player: OmeggaPlayer) => void): this;
|
|
849
|
+
on(event: "leave", listener: (player: OmeggaPlayer) => void): this;
|
|
850
|
+
on(event: "chat", listener: (name: string, message: string) => void): this;
|
|
851
|
+
on(event: "mapchange", listener: (info: {
|
|
852
|
+
map: string;
|
|
853
|
+
}) => void): this;
|
|
854
|
+
on(event: "autorestart", listener: (config: AutoRestartConfig) => void): this;
|
|
855
|
+
on(event: "interact", listener: (interaction: BrickInteraction) => void): this;
|
|
856
|
+
}
|
|
857
|
+
export interface OmeggaLike extends OmeggaCore, LogWrangling, InjectedCommands, MockEventEmitter {
|
|
858
|
+
writeln(line: string): void;
|
|
859
|
+
/** game CL version*/
|
|
860
|
+
version: number;
|
|
861
|
+
/** verbose logging is enabled*/
|
|
862
|
+
verbose: boolean;
|
|
863
|
+
/** list of players */
|
|
864
|
+
players: OmeggaPlayer[];
|
|
865
|
+
/** server host */
|
|
866
|
+
host?: {
|
|
867
|
+
id: string;
|
|
868
|
+
name: string;
|
|
869
|
+
};
|
|
870
|
+
/** server is started */
|
|
871
|
+
started: boolean;
|
|
872
|
+
/** server is starting */
|
|
873
|
+
starting: boolean;
|
|
874
|
+
/** server is stopping */
|
|
875
|
+
stopping: boolean;
|
|
876
|
+
/** current map */
|
|
877
|
+
currentMap: string;
|
|
878
|
+
/** path to config files */
|
|
879
|
+
configPath: string;
|
|
880
|
+
/** path to saves */
|
|
881
|
+
savePath: string;
|
|
882
|
+
/** path to presets */
|
|
883
|
+
presetPath: string;
|
|
884
|
+
/** get a plugin's name, documentation, and loaded status
|
|
885
|
+
* If run in an unsafe plugin, the emitPlugin method sends events from
|
|
886
|
+
* an "unsafe" plugin
|
|
887
|
+
*/
|
|
888
|
+
getPlugin(name: string): Promise<PluginInterop>;
|
|
889
|
+
}
|
|
890
|
+
export interface OmeggaCore {
|
|
891
|
+
/**
|
|
892
|
+
* get a list of players
|
|
893
|
+
* @return list of players {id: uuid, name: name} objects
|
|
894
|
+
*/
|
|
895
|
+
getPlayers(): {
|
|
896
|
+
id: string;
|
|
897
|
+
name: string;
|
|
898
|
+
controller: string;
|
|
899
|
+
state: string;
|
|
900
|
+
}[];
|
|
901
|
+
/**
|
|
902
|
+
* find a player by name, id, controller, or state
|
|
903
|
+
* @param target - name, id, controller, or state
|
|
904
|
+
*/
|
|
905
|
+
getPlayer(target: string): OmeggaPlayer | null;
|
|
906
|
+
/**
|
|
907
|
+
* find a player by rough name, prioritize exact matches and get fuzzier
|
|
908
|
+
* @param name player name, fuzzy
|
|
909
|
+
*/
|
|
910
|
+
findPlayerByName(name: string): OmeggaPlayer | null;
|
|
911
|
+
/**
|
|
912
|
+
* get the host's ID
|
|
913
|
+
* @return Host Id
|
|
914
|
+
*/
|
|
915
|
+
getHostId(): string;
|
|
916
|
+
/**
|
|
917
|
+
* broadcast messages to chat
|
|
918
|
+
* messages are broken by new line
|
|
919
|
+
* multiple arguments are additional lines
|
|
920
|
+
* all messages longer than 512 characters are deleted automatically, though omegga wouldn't have sent them anyway
|
|
921
|
+
* @param messages unescaped chat messages to send. may need to wrap messages with quotes
|
|
922
|
+
*/
|
|
923
|
+
broadcast(...messages: string[]): void;
|
|
924
|
+
/**
|
|
925
|
+
* whisper messages to a player's chat
|
|
926
|
+
* messages are broken by new line
|
|
927
|
+
* multiple arguments are additional lines
|
|
928
|
+
* all messages longer than 512 characters are deleted automatically, though omegga wouldn't have sent them anyway
|
|
929
|
+
* @param target - player identifier or player object
|
|
930
|
+
* @param messages - unescaped chat messages to send. may need to wrap messages with quotes
|
|
931
|
+
*/
|
|
932
|
+
whisper(target: string | OmeggaPlayer, ...messages: string[]): void;
|
|
933
|
+
/**
|
|
934
|
+
* prints text to the middle of a player's screen
|
|
935
|
+
* all messages longer than 512 characters are deleted automatically
|
|
936
|
+
* @param target - player identifier or player object
|
|
937
|
+
* @param message - unescaped chat messages to send. may need to wrap messages with quotes
|
|
938
|
+
*/
|
|
939
|
+
middlePrint(target: string | OmeggaPlayer, message: string): void;
|
|
940
|
+
/**
|
|
941
|
+
* Save a minigame preset based on a minigame index
|
|
942
|
+
* @param index minigame index
|
|
943
|
+
* @param name preset name
|
|
944
|
+
*/
|
|
945
|
+
saveMinigame(index: number, name: string): void;
|
|
946
|
+
/**
|
|
947
|
+
* Delete a minigame
|
|
948
|
+
* @param index minigame index
|
|
949
|
+
*/
|
|
950
|
+
deleteMinigame(index: number): void;
|
|
951
|
+
/**
|
|
952
|
+
* Reset a minigame
|
|
953
|
+
* @param index minigame index
|
|
954
|
+
*/
|
|
955
|
+
resetMinigame(index: number): void;
|
|
956
|
+
/**
|
|
957
|
+
* Force the next round in a minigame
|
|
958
|
+
* @param index minigame index
|
|
959
|
+
*/
|
|
960
|
+
nextRoundMinigame(index: number): void;
|
|
961
|
+
/**
|
|
962
|
+
* Load an Minigame preset
|
|
963
|
+
* @param presetName preset name
|
|
964
|
+
* @param owner owner id/name
|
|
965
|
+
*/
|
|
966
|
+
loadMinigame(presetName: string, owner?: string): void;
|
|
967
|
+
/**
|
|
968
|
+
* Get all presets in the minigame folder and child folders
|
|
969
|
+
*/
|
|
970
|
+
getMinigamePresets(): string[];
|
|
971
|
+
/**
|
|
972
|
+
* Reset the environment settings
|
|
973
|
+
*/
|
|
974
|
+
resetEnvironment(): void;
|
|
975
|
+
/**
|
|
976
|
+
* Save an environment preset
|
|
977
|
+
* @param presetName preset name
|
|
978
|
+
*/
|
|
979
|
+
saveEnvironment(presetName: string): void;
|
|
980
|
+
/**
|
|
981
|
+
* Load an environment preset
|
|
982
|
+
* @param presetName preset name
|
|
983
|
+
*/
|
|
984
|
+
loadEnvironment(presetName: string): void;
|
|
985
|
+
/**
|
|
986
|
+
* Load some environment preset data
|
|
987
|
+
* @param preset preset data
|
|
988
|
+
*/
|
|
989
|
+
loadEnvironmentData(preset: EnvironmentPreset | EnvironmentPreset["data"]["groups"]): void;
|
|
990
|
+
/**
|
|
991
|
+
* Get all presets in the environment folder and child folders
|
|
992
|
+
*/
|
|
993
|
+
getEnvironmentPresets(): string[];
|
|
994
|
+
/**
|
|
995
|
+
* Clear a user's bricks (by uuid, name, controller, or player object)
|
|
996
|
+
* @param target player or player identifier
|
|
997
|
+
* @param quiet quietly clear bricks
|
|
998
|
+
*/
|
|
999
|
+
clearBricks(target: string | {
|
|
1000
|
+
id: string;
|
|
1001
|
+
}, quiet?: boolean): void;
|
|
1002
|
+
/**
|
|
1003
|
+
* Clear a region of bricks
|
|
1004
|
+
* @param region region to clear
|
|
1005
|
+
* @param options optional settings
|
|
1006
|
+
*/
|
|
1007
|
+
clearRegion(region: {
|
|
1008
|
+
center: [
|
|
1009
|
+
number,
|
|
1010
|
+
number,
|
|
1011
|
+
number
|
|
1012
|
+
];
|
|
1013
|
+
extent: [
|
|
1014
|
+
number,
|
|
1015
|
+
number,
|
|
1016
|
+
number
|
|
1017
|
+
];
|
|
1018
|
+
}, options?: {
|
|
1019
|
+
target?: string | OmeggaPlayer;
|
|
1020
|
+
}): void;
|
|
1021
|
+
/**
|
|
1022
|
+
* Clear all bricks on the server
|
|
1023
|
+
* @param quiet quietly clear bricks
|
|
1024
|
+
*/
|
|
1025
|
+
clearAllBricks(quiet?: boolean): void;
|
|
1026
|
+
/**
|
|
1027
|
+
* Save bricks under a filename
|
|
1028
|
+
* @param saveName save file name
|
|
1029
|
+
* @param region region of bricks to save
|
|
1030
|
+
*/
|
|
1031
|
+
saveBricks(saveName: string, region?: {
|
|
1032
|
+
center: [
|
|
1033
|
+
number,
|
|
1034
|
+
number,
|
|
1035
|
+
number
|
|
1036
|
+
];
|
|
1037
|
+
extent: [
|
|
1038
|
+
number,
|
|
1039
|
+
number,
|
|
1040
|
+
number
|
|
1041
|
+
];
|
|
1042
|
+
}): void;
|
|
1043
|
+
/**
|
|
1044
|
+
* Save bricks under a filename, with a promise
|
|
1045
|
+
* @param saveName save file name
|
|
1046
|
+
* @param region region of bricks to save
|
|
1047
|
+
*/
|
|
1048
|
+
saveBricksAsync(saveName: string, region?: {
|
|
1049
|
+
center: [
|
|
1050
|
+
number,
|
|
1051
|
+
number,
|
|
1052
|
+
number
|
|
1053
|
+
];
|
|
1054
|
+
extent: [
|
|
1055
|
+
number,
|
|
1056
|
+
number,
|
|
1057
|
+
number
|
|
1058
|
+
];
|
|
1059
|
+
}): Promise<void>;
|
|
1060
|
+
/**
|
|
1061
|
+
* Load bricks on the server
|
|
1062
|
+
*/
|
|
1063
|
+
loadBricks(saveName: string, options?: {
|
|
1064
|
+
offX?: number;
|
|
1065
|
+
offY?: number;
|
|
1066
|
+
offZ?: number;
|
|
1067
|
+
quiet?: boolean;
|
|
1068
|
+
correctPalette?: boolean;
|
|
1069
|
+
correctCustom?: boolean;
|
|
1070
|
+
}): void;
|
|
1071
|
+
/**
|
|
1072
|
+
* Load bricks on the server into a player's clipbaord
|
|
1073
|
+
*/
|
|
1074
|
+
loadBricksOnPlayer(saveName: string, player: string | OmeggaPlayer, options?: {
|
|
1075
|
+
offX?: number;
|
|
1076
|
+
offY?: number;
|
|
1077
|
+
offZ?: number;
|
|
1078
|
+
correctPalette?: boolean;
|
|
1079
|
+
correctCustom?: boolean;
|
|
1080
|
+
}): void;
|
|
1081
|
+
/**
|
|
1082
|
+
* Get all saves in the save folder and child folders
|
|
1083
|
+
*/
|
|
1084
|
+
getSaves(): string[];
|
|
1085
|
+
/**
|
|
1086
|
+
* Checks if a save exists and returns an absolute path
|
|
1087
|
+
* @param saveName Save filename
|
|
1088
|
+
* @return Path to string
|
|
1089
|
+
*/
|
|
1090
|
+
getSavePath(saveName: string): string;
|
|
1091
|
+
/**
|
|
1092
|
+
* unsafely load save data (wrap in try/catch)
|
|
1093
|
+
* @param saveName save file name
|
|
1094
|
+
* @param saveData BRS JS Save data
|
|
1095
|
+
*/
|
|
1096
|
+
writeSaveData(saveName: string, saveData: WriteSaveObject): void;
|
|
1097
|
+
/**
|
|
1098
|
+
* unsafely read save data (wrap in try/catch)
|
|
1099
|
+
* @param saveName save file name
|
|
1100
|
+
* @param nobricks only read save header data
|
|
1101
|
+
* @return BRS JS Save Data
|
|
1102
|
+
*/
|
|
1103
|
+
readSaveData(saveName: string, nobricks?: boolean): ReadSaveObject;
|
|
1104
|
+
/**
|
|
1105
|
+
* load bricks from save data and resolve when game finishes loading
|
|
1106
|
+
* @param saveData BRS JS Save data
|
|
1107
|
+
*/
|
|
1108
|
+
loadSaveData(saveData: WriteSaveObject, options?: {
|
|
1109
|
+
offX?: number;
|
|
1110
|
+
offY?: number;
|
|
1111
|
+
offZ?: number;
|
|
1112
|
+
quiet?: boolean;
|
|
1113
|
+
correctPalette?: boolean;
|
|
1114
|
+
correctCustom?: boolean;
|
|
1115
|
+
}): Promise<void>;
|
|
1116
|
+
/**
|
|
1117
|
+
* load bricks from save data and resolve when game finishes loading
|
|
1118
|
+
* @param saveData BRS JS Save data
|
|
1119
|
+
* @param player Player name/id or player object
|
|
1120
|
+
*/
|
|
1121
|
+
loadSaveDataOnPlayer(saveData: WriteSaveObject, player: string | OmeggaPlayer, options?: {
|
|
1122
|
+
offX?: number;
|
|
1123
|
+
offY?: number;
|
|
1124
|
+
offZ?: number;
|
|
1125
|
+
correctPalette?: boolean;
|
|
1126
|
+
correctCustom?: boolean;
|
|
1127
|
+
}): Promise<void>;
|
|
1128
|
+
/**
|
|
1129
|
+
* get current bricks as save data
|
|
1130
|
+
*/
|
|
1131
|
+
getSaveData(region?: {
|
|
1132
|
+
center: [
|
|
1133
|
+
number,
|
|
1134
|
+
number,
|
|
1135
|
+
number
|
|
1136
|
+
];
|
|
1137
|
+
extent: [
|
|
1138
|
+
number,
|
|
1139
|
+
number,
|
|
1140
|
+
number
|
|
1141
|
+
];
|
|
1142
|
+
}): Promise<ReadSaveObject>;
|
|
1143
|
+
/**
|
|
1144
|
+
* Change server map
|
|
1145
|
+
* @param map Map name
|
|
1146
|
+
*/
|
|
1147
|
+
changeMap(map: string): Promise<boolean>;
|
|
1148
|
+
/**
|
|
1149
|
+
* Get up-to-date role setup from RoleSetup.json
|
|
1150
|
+
*/
|
|
1151
|
+
getRoleSetup(): BRRoleSetup;
|
|
1152
|
+
/**
|
|
1153
|
+
* Get up-to-date role assignments from RoleAssignment.json
|
|
1154
|
+
*/
|
|
1155
|
+
getRoleAssignments(): BRRoleAssignments;
|
|
1156
|
+
/**
|
|
1157
|
+
* Get up-to-date ban list from BanList.json
|
|
1158
|
+
*/
|
|
1159
|
+
getBanList(): BRBanList;
|
|
1160
|
+
/**
|
|
1161
|
+
* Get up-to-date name cache from PlayerNameCache.json
|
|
1162
|
+
*/
|
|
1163
|
+
getNameCache(): BRPlayerNameCache;
|
|
1164
|
+
}
|
|
1165
|
+
/** A simple document store for plugins */
|
|
1166
|
+
export interface PluginStore<Storage extends Record<string, unknown> = Record<string, unknown>> {
|
|
1167
|
+
/** Get a value from plugin storage */
|
|
1168
|
+
get<T extends keyof Storage>(key: T): Promise<Storage[T]>;
|
|
1169
|
+
/** Set a value to plugin storage */
|
|
1170
|
+
set<T extends keyof Storage>(key: T, value: Storage[T]): Promise<void>;
|
|
1171
|
+
/** Delete a value from plugin storage */
|
|
1172
|
+
delete(key: string): Promise<void>;
|
|
1173
|
+
/** Wipe all values in plugin storage */
|
|
1174
|
+
wipe(): Promise<void>;
|
|
1175
|
+
/** Count entries in plugin storage */
|
|
1176
|
+
count(): Promise<number>;
|
|
1177
|
+
/** Get a list of keys in plugin storage */
|
|
1178
|
+
keys(): Promise<(keyof Storage)[]>;
|
|
1179
|
+
}
|
|
1180
|
+
/** A config representative of the config outlined in doc.json */
|
|
1181
|
+
export declare type PluginConfig<T extends Record<string, unknown> = Record<string, unknown>> = T;
|
|
1182
|
+
/** An omegga plugin */
|
|
1183
|
+
export default abstract class OmeggaPlugin<Config extends Record<string, unknown> = Record<string, unknown>, Storage extends Record<string, unknown> = Record<string, unknown>> {
|
|
1184
|
+
omegga: OmeggaLike;
|
|
1185
|
+
config: PluginConfig<Config>;
|
|
1186
|
+
store: PluginStore<Storage>;
|
|
1187
|
+
constructor(omegga: OmeggaLike, config: PluginConfig<Config>, store: PluginStore<Storage>);
|
|
1188
|
+
/** Run when plugin starts, returns /commands it uses */
|
|
1189
|
+
abstract init(): Promise<void | {
|
|
1190
|
+
registeredCommands?: string[];
|
|
1191
|
+
}>;
|
|
1192
|
+
/** Run when plugin is stopped */
|
|
1193
|
+
abstract stop(): Promise<void>;
|
|
1194
|
+
/** Run when another plugin tries to interact with this plugin
|
|
1195
|
+
* @param event Event name
|
|
1196
|
+
* @param from Name of origin plugin
|
|
1197
|
+
* @return value other plugin expects
|
|
1198
|
+
*/
|
|
1199
|
+
abstract pluginEvent?(event: string, from: string, ...args: any[]): Promise<unknown>;
|
|
1200
|
+
}
|
|
1201
|
+
export interface LogWrangling {
|
|
1202
|
+
/** Add a passive pattern on console output that invokes callback on match */
|
|
1203
|
+
addMatcher<T>(pattern: IMatcher<T>["pattern"], callback: IMatcher<T>["callback"]): void;
|
|
1204
|
+
/** Run an active pattern on console output that resolves a match */
|
|
1205
|
+
addWatcher<T = RegExpMatchArray>(pattern: IWatcher<T>["pattern"], options?: {
|
|
1206
|
+
timeoutDelay?: number;
|
|
1207
|
+
bundle?: boolean;
|
|
1208
|
+
debounce?: boolean;
|
|
1209
|
+
afterMatchDelay?: number;
|
|
1210
|
+
last?: IWatcher<T>["last"];
|
|
1211
|
+
exec?: () => void;
|
|
1212
|
+
}): Promise<IWatcher<T>["matches"]>;
|
|
1213
|
+
/** Run a command and capture bundled output */
|
|
1214
|
+
watchLogChunk<T = string>(cmd: string, pattern: IWatcher<T>["pattern"], options?: {
|
|
1215
|
+
first?: "index" | ((match: T) => boolean);
|
|
1216
|
+
last?: IWatcher<T>["last"];
|
|
1217
|
+
afterMatchDelay?: number;
|
|
1218
|
+
timeoutDelay?: number;
|
|
1219
|
+
}): Promise<IWatcher<T>["matches"]>;
|
|
1220
|
+
/** Run a command and capture bundled output for array functions */
|
|
1221
|
+
watchLogArray<Item extends Record<string, string> = Record<string, string>, Member extends Record<string, string> = Record<string, string>>(cmd: string, itemPattern: RegExp, memberPattern: RegExp): Promise<{
|
|
1222
|
+
item: Item;
|
|
1223
|
+
members: Member[];
|
|
1224
|
+
}[]>;
|
|
1225
|
+
}
|
|
1226
|
+
export declare type WatcherPattern<T> = (line: string, match: RegExpMatchArray) => T | RegExpMatchArray | "[OMEGGA_WATCHER_DONE]";
|
|
1227
|
+
export declare type IMatcher<T> = {
|
|
1228
|
+
pattern: RegExp;
|
|
1229
|
+
callback: (match: RegExpMatchArray) => boolean;
|
|
1230
|
+
} | {
|
|
1231
|
+
pattern: (line: string, match: RegExpMatchArray) => T;
|
|
1232
|
+
callback: (match: RegExpMatchArray) => T;
|
|
1233
|
+
};
|
|
1234
|
+
export declare type IWatcher<T> = {
|
|
1235
|
+
bundle: boolean;
|
|
1236
|
+
debounce: boolean;
|
|
1237
|
+
timeoutDelay: number;
|
|
1238
|
+
afterMatchDelay: number;
|
|
1239
|
+
last: (match: T) => boolean;
|
|
1240
|
+
callback: () => void;
|
|
1241
|
+
resolve: (...args: any[]) => void;
|
|
1242
|
+
remove: () => void;
|
|
1243
|
+
done: () => void;
|
|
1244
|
+
timeout: ReturnType<typeof setTimeout>;
|
|
1245
|
+
} & ({
|
|
1246
|
+
pattern: WatcherPattern<T>;
|
|
1247
|
+
matches: T[];
|
|
1248
|
+
} | {
|
|
1249
|
+
pattern: RegExp;
|
|
1250
|
+
matches: RegExpMatchArray[];
|
|
1251
|
+
});
|
|
1252
|
+
export declare type IPluginConfigDefinition = {
|
|
1253
|
+
description: string;
|
|
1254
|
+
} & ({
|
|
1255
|
+
type: "string" | "password" | "role";
|
|
1256
|
+
default: string;
|
|
1257
|
+
} | {
|
|
1258
|
+
type: "boolean";
|
|
1259
|
+
default: boolean;
|
|
1260
|
+
} | {
|
|
1261
|
+
type: "number";
|
|
1262
|
+
default: number;
|
|
1263
|
+
} | {
|
|
1264
|
+
type: "enum";
|
|
1265
|
+
options: (string | number)[];
|
|
1266
|
+
default: string | number;
|
|
1267
|
+
} | {
|
|
1268
|
+
type: "players";
|
|
1269
|
+
default: {
|
|
1270
|
+
id: string;
|
|
1271
|
+
name: string;
|
|
1272
|
+
};
|
|
1273
|
+
} | ({
|
|
1274
|
+
type: "list";
|
|
1275
|
+
} & ({
|
|
1276
|
+
itemType: "string";
|
|
1277
|
+
default: string[];
|
|
1278
|
+
} | {
|
|
1279
|
+
itemType: "number";
|
|
1280
|
+
default: number[];
|
|
1281
|
+
} | {
|
|
1282
|
+
itemType: "enum";
|
|
1283
|
+
options: (string | number)[];
|
|
1284
|
+
default: string | number;
|
|
1285
|
+
})));
|
|
1286
|
+
export interface IPluginCommandArgument {
|
|
1287
|
+
name: string;
|
|
1288
|
+
description: string;
|
|
1289
|
+
required?: boolean;
|
|
1290
|
+
}
|
|
1291
|
+
export interface IPluginCommand {
|
|
1292
|
+
name: string;
|
|
1293
|
+
description: string;
|
|
1294
|
+
example?: string;
|
|
1295
|
+
args: IPluginCommandArgument[];
|
|
1296
|
+
}
|
|
1297
|
+
export interface IPluginDocumentation {
|
|
1298
|
+
name: string;
|
|
1299
|
+
description: string;
|
|
1300
|
+
author: string;
|
|
1301
|
+
config: Record<string, IPluginConfigDefinition>;
|
|
1302
|
+
commands: IPluginCommand[];
|
|
1303
|
+
}
|
|
1304
|
+
export interface PluginInterop {
|
|
1305
|
+
name: string;
|
|
1306
|
+
documentation: IPluginDocumentation;
|
|
1307
|
+
loaded: boolean;
|
|
1308
|
+
emitPlugin?(event: string, args: any[]): Promise<any>;
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1311
|
+
export {};
|