omegga 1.7.0 → 1.8.0
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/.claude/settings.local.json +3 -1
- package/CHANGELOG.md +10 -0
- package/dist/omegga/commandInjector.js +110 -18
- package/dist/omegga/commandInjector.js.map +1 -1
- package/dist/omegga/commands.js +620 -0
- package/dist/omegga/commands.js.map +1 -0
- package/dist/omegga/player.js +21 -10
- package/dist/omegga/player.js.map +1 -1
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js +15 -0
- package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js.map +1 -1
- package/dist/omegga/server.js +54 -30
- package/dist/omegga/server.js.map +1 -1
- package/dist/omegga/wrapper.js +4 -1
- package/dist/omegga/wrapper.js.map +1 -1
- package/dist/plugin.js.map +1 -1
- package/dist/updater/steam.js +42 -24
- package/dist/updater/steam.js.map +1 -1
- package/dist/webserver/backend/metrics.js +2 -1
- package/dist/webserver/backend/metrics.js.map +1 -1
- package/dist/webserver/backend/router/player.js +8 -4
- package/dist/webserver/backend/router/player.js.map +1 -1
- package/dist/worker.js +29 -2
- package/dist/worker.js.map +1 -1
- package/package.json +2 -2
- package/public/app.html +12 -3
- package/public/assets/{app-BiBsxujC.js → app-CHjgCOH4.js} +2 -2
- package/public/assets/app-CHjgCOH4.js.map +1 -0
- package/public/auth.html +1 -1
- package/templates/safe-ts/omegga.d.ts +350 -3
- package/public/assets/app-BiBsxujC.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sources":["../../src/omegga/commands.ts"],"sourcesContent":["// AUTO-GENERATED command name table. Maps each Brickadia console command to\n// its name across game versions so plugins/omegga can address commands without\n// hardcoding a name that changes between releases.\n//\n// At CL 14349 nearly every console command gained the `br.` prefix (and a\n// handful were restructured). Before that, the legacy names were used.\n// Minigames were deprecated at CL 14000 and replaced by GameMode commands;\n// the legacy Minigames commands still resolve but are no-ops on newer servers.\n//\n// Resolve the version-correct name with `omegga.Console`, e.g.\n// `omegga.Console.Bricks.Clear` -> \"Bricks.Clear\" or \"br.Bricks.Clear\".\n//\n// Where a command is both a value and a namespace (e.g. `br.DrawDebug.Colliders`\n// and `br.DrawDebug.Colliders.DrawCOM`), the command itself lives under `$`.\n\n/** CL version at which console commands gained the `br.` prefix. */\nconst RENAME_VERSION = 14349;\n\n/** A console command whose name may differ across game versions. */\nexport class ConsoleCommand {\n /** @param versions [sinceVersion, name] pairs in ascending version order */\n constructor(private readonly versions: readonly [number, string][]) {}\n\n /** Resolve the command name for a given game CL version. */\n resolve(version: number): string {\n // unknown version (server not started / not detected yet) -> newest name\n if (!version || version < 0)\n return this.versions[this.versions.length - 1][1];\n let name = this.versions[0][1];\n for (const [since, candidate] of this.versions)\n if (version >= since) name = candidate;\n return name;\n }\n\n /** every name this command has gone by, across versions */\n get names(): readonly string[] {\n return this.versions.map(([, name]) => name);\n }\n}\n\n/** Command renamed with the `br.` prefix at {@link RENAME_VERSION}. */\nconst c = (legacy: string, current = legacy): ConsoleCommand =>\n new ConsoleCommand(\n legacy === current\n ? [[0, legacy]]\n : [\n [0, legacy],\n [RENAME_VERSION, current],\n ],\n );\n\n/** Command with explicit per-version names (ascending by version). */\nconst cv = (versions: [number, string][]): ConsoleCommand =>\n new ConsoleCommand(versions);\n\n/** The raw command table (leaves are version-aware {@link ConsoleCommand}s). */\nexport const COMMAND_TABLE = {\n Bricks: {\n ActuallyReduce: c('Bricks.ActuallyReduce', 'br.Bricks.ActuallyReduce'),\n Clear: c('Bricks.Clear', 'br.Bricks.Clear'),\n ClearAll: c('Bricks.ClearAll', 'br.Bricks.ClearAll'),\n ClearRegion: c('Bricks.ClearRegion', 'br.Bricks.ClearRegion'),\n Cluster: {\n EnableMergingDynamicGrids: c(\n 'Bricks.Cluster.EnableMergingDynamicGrids',\n 'br.Bricks.Cluster.EnableMergingDynamicGrids',\n ),\n EnableMergingGlobalGrid: c(\n 'Bricks.Cluster.EnableMergingGlobalGrid',\n 'br.Bricks.Cluster.EnableMergingGlobalGrid',\n ),\n MaxClusterHalfExtent: c(\n 'Bricks.Cluster.MaxClusterHalfExtent',\n 'br.Bricks.Cluster.MaxClusterHalfExtent',\n ),\n MaxClusterWeight: c(\n 'Bricks.Cluster.MaxClusterWeight',\n 'br.Bricks.Cluster.MaxClusterWeight',\n ),\n MaxSplitWeight: c(\n 'Bricks.Cluster.MaxSplitWeight',\n 'br.Bricks.Cluster.MaxSplitWeight',\n ),\n MinCollapseWeight: c(\n 'Bricks.Cluster.MinCollapseWeight',\n 'br.Bricks.Cluster.MinCollapseWeight',\n ),\n MinMergeThreshold: c(\n 'Bricks.Cluster.MinMergeThreshold',\n 'br.Bricks.Cluster.MinMergeThreshold',\n ),\n MinRootHalfExtent: c(\n 'Bricks.Cluster.MinRootHalfExtent',\n 'br.Bricks.Cluster.MinRootHalfExtent',\n ),\n },\n ClusterMesh: {\n CardCaching: c(\n 'Bricks.ClusterMesh.CardCaching',\n 'br.Bricks.ClusterMesh.CardCaching',\n ),\n DrawDistance: c(\n 'Bricks.ClusterMesh.DrawDistance',\n 'br.Bricks.ClusterMesh.DrawDistance',\n ),\n Hysteresis: c(\n 'Bricks.ClusterMesh.Hysteresis',\n 'br.Bricks.ClusterMesh.Hysteresis',\n ),\n Lod0KeepBias: c(\n 'Bricks.ClusterMesh.Lod0KeepBias',\n 'br.Bricks.ClusterMesh.Lod0KeepBias',\n ),\n MaxTransitionsPerFrame: c(\n 'Bricks.ClusterMesh.MaxTransitionsPerFrame',\n 'br.Bricks.ClusterMesh.MaxTransitionsPerFrame',\n ),\n MemoryBudgetBucketSize: c(\n 'Bricks.ClusterMesh.MemoryBudgetBucketSize',\n 'br.Bricks.ClusterMesh.MemoryBudgetBucketSize',\n ),\n MemoryBudgetMB: c(\n 'Bricks.ClusterMesh.MemoryBudgetMB',\n 'br.Bricks.ClusterMesh.MemoryBudgetMB',\n ),\n Residency: c(\n 'Bricks.ClusterMesh.Residency',\n 'br.Bricks.ClusterMesh.Residency',\n ),\n ResidencyConeHysteresis: c(\n 'Bricks.ClusterMesh.ResidencyConeHysteresis',\n 'br.Bricks.ClusterMesh.ResidencyConeHysteresis',\n ),\n ResidencyConeMargin: c(\n 'Bricks.ClusterMesh.ResidencyConeMargin',\n 'br.Bricks.ClusterMesh.ResidencyConeMargin',\n ),\n ResidencyWideFOV: c(\n 'Bricks.ClusterMesh.ResidencyWideFOV',\n 'br.Bricks.ClusterMesh.ResidencyWideFOV',\n ),\n ResidencyZoomHysteresisKillRate: c(\n 'Bricks.ClusterMesh.ResidencyZoomHysteresisKillRate',\n 'br.Bricks.ClusterMesh.ResidencyZoomHysteresisKillRate',\n ),\n },\n DebugSaveFileScreenshots: c(\n 'Bricks.DebugSaveFileScreenshots',\n 'br.Bricks.DebugSaveFileScreenshots',\n ),\n DisableLoadWiresForLegacySave: c(\n 'Bricks.DisableLoadWiresForLegacySave',\n 'br.Bricks.DisableLoadWiresForLegacySave',\n ),\n DrawDebugOctree: c('Bricks.DrawDebugOctree', 'br.Bricks.DrawDebugOctree'),\n DumpChunkStats: c('Bricks.DumpChunkStats', 'br.Bricks.DumpChunkStats'),\n DumpCoverageStats: c(\n 'Bricks.DumpCoverageStats',\n 'br.Bricks.DumpCoverageStats',\n ),\n DumpGeometryStats: c(\n 'Bricks.DumpGeometryStats',\n 'br.Bricks.DumpGeometryStats',\n ),\n DumpGroupStats: c('Bricks.DumpGroupStats', 'br.Bricks.DumpGroupStats'),\n EnableExtendedSort: c(\n 'Bricks.EnableExtendedSort',\n 'br.Bricks.EnableExtendedSort',\n ),\n EnableLumenCards: c(\n 'Bricks.EnableLumenCards',\n 'br.Bricks.EnableLumenCards',\n ),\n ExportModel: c('Bricks.ExportModel', 'br.Bricks.ExportModel'),\n GenerateGates: c('BR.Bricks.GenerateGates'),\n GenerateMathTables: c(\n 'Bricks.GenerateMathTables',\n 'br.Bricks.GenerateMathTables',\n ),\n GetOctreeStats: c('Bricks.GetOctreeStats', 'br.Bricks.GetOctreeStats'),\n Load: c('Bricks.Load', 'br.Bricks.Load'),\n LoadTemplate: c('Bricks.LoadTemplate'),\n LODScreenSizeScale: c(\n 'Bricks.LODScreenSizeScale',\n 'br.Bricks.LODScreenSizeScale',\n ),\n LogClusterBuildTime: c(\n 'Bricks.LogClusterBuildTime',\n 'br.Bricks.LogClusterBuildTime',\n ),\n LogStreamSizes: c('Bricks.LogStreamSizes', 'br.Bricks.LogStreamSizes'),\n MaxChunkClusterEntriesPerTick: c(\n 'Bricks.MaxChunkClusterEntriesPerTick',\n 'br.Bricks.MaxChunkClusterEntriesPerTick',\n ),\n MaxChunkEntries: c('Bricks.MaxChunkEntries', 'br.Bricks.MaxChunkEntries'),\n MaxChunkUpdatesPerTick: c(\n 'Bricks.MaxChunkUpdatesPerTick',\n 'br.Bricks.MaxChunkUpdatesPerTick',\n ),\n MaxChunkUpdateTimePerTick: c(\n 'Bricks.MaxChunkUpdateTimePerTick',\n 'br.Bricks.MaxChunkUpdateTimePerTick',\n ),\n MaxClusterResultsToApplyPerTick: c(\n 'Bricks.MaxClusterResultsToApplyPerTick',\n 'br.Bricks.MaxClusterResultsToApplyPerTick',\n ),\n MaxSubscribed: c('br.MaxSubscribedBricks', 'br.Bricks.MaxSubscribed'),\n OptimizeVertexCache: c(\n 'Bricks.OptimizeVertexCache',\n 'br.Bricks.OptimizeVertexCache',\n ),\n PrintOctreeLeafStats: c(\n 'Bricks.PrintOctreeLeafStats',\n 'br.Bricks.PrintOctreeLeafStats',\n ),\n RebuildClusters: c('Bricks.RebuildClusters', 'br.Bricks.RebuildClusters'),\n RebuildMeshes: c('Bricks.RebuildMeshes', 'br.Bricks.RebuildMeshes'),\n Save: c('Bricks.Save', 'br.Bricks.Save'),\n SaveFileCompressionLevel: c(\n 'Bricks.SaveFileCompressionLevel',\n 'br.Bricks.SaveFileCompressionLevel',\n ),\n SaveFileReadBrickLimit: c(\n 'Bricks.SaveFileReadBrickLimit',\n 'br.Bricks.SaveFileReadBrickLimit',\n ),\n SaveFileReadComponentInstanceLimit: c(\n 'Bricks.SaveFileReadComponentInstanceLimit',\n 'br.Bricks.SaveFileReadComponentInstanceLimit',\n ),\n SaveFileReadComponentTypeLimit: c(\n 'Bricks.SaveFileReadComponentTypeLimit',\n 'br.Bricks.SaveFileReadComponentTypeLimit',\n ),\n SaveFileReadDimensionLimit: c(\n 'Bricks.SaveFileReadDimensionLimit',\n 'br.Bricks.SaveFileReadDimensionLimit',\n ),\n SaveFileReadOwnerLimit: c(\n 'Bricks.SaveFileReadOwnerLimit',\n 'br.Bricks.SaveFileReadOwnerLimit',\n ),\n SaveFileReadSizeLimit: c(\n 'Bricks.SaveFileReadSizeLimit',\n 'br.Bricks.SaveFileReadSizeLimit',\n ),\n SaveRegion: c('Bricks.SaveRegion', 'br.Bricks.SaveRegion'),\n ValidateMathTables: c(\n 'Bricks.ValidateMathTables',\n 'br.Bricks.ValidateMathTables',\n ),\n Vehicle: {\n AntiRollScale: c(\n 'Bricks.Vehicle.AntiRollScale',\n 'br.Bricks.Vehicle.AntiRollScale',\n ),\n ClientFullSim: c(\n 'Bricks.Vehicle.ClientFullSim',\n 'br.Bricks.Vehicle.ClientFullSim',\n ),\n DebugDraw: c('Bricks.Vehicle.DebugDraw', 'br.Bricks.Vehicle.DebugDraw'),\n },\n WheelEngine: {\n VisualiseTurningCircles: c(\n 'Bricks.WheelEngine.VisualiseTurningCircles',\n 'br.Bricks.WheelEngine.VisualiseTurningCircles',\n ),\n },\n WipeMirrorTables: c(\n 'Bricks.WipeMirrorTables',\n 'br.Bricks.WipeMirrorTables',\n ),\n },\n BundleCompressionLevel: c('BR.BundleCompressionLevel'),\n Bundles: {\n AutoCloseDelay: c('Bundles.AutoCloseDelay', 'br.Bundles.AutoCloseDelay'),\n },\n Catalog: {\n ClearCache: c('Catalog.ClearCache', 'br.Catalog.ClearCache'),\n HideBlacklisted: c('Catalog.HideBlacklisted', 'br.Catalog.HideBlacklisted'),\n },\n Chat: {\n Broadcast: c('Chat.Broadcast', 'br.Chat.Broadcast'),\n Command: c('Chat.Command', 'br.Chat.Command'),\n MessageForUnknownCommands: c(\n 'Chat.MessageForUnknownCommands',\n 'br.Chat.MessageForUnknownCommands',\n ),\n StatusMessage: c('Chat.StatusMessage', 'br.Chat.StatusMessage'),\n Whisper: c('Chat.Whisper', 'br.Chat.Whisper'),\n },\n ComplexityWarning: {\n BrickCount: c(\n 'br.BrickCountWarningThreshold',\n 'br.ComplexityWarning.BrickCount',\n ),\n FrozenEntityCount: c(\n 'br.FrozenEntityCountWarningThreshold',\n 'br.ComplexityWarning.FrozenEntityCount',\n ),\n UnfrozenEntityCount: c(\n 'br.UnfrozenEntityCountWarningThreshold',\n 'br.ComplexityWarning.UnfrozenEntityCount',\n ),\n },\n Debug: {\n CauseEnsure: c('CauseEnsure', 'br.Debug.CauseEnsure'),\n CauseHang: c('CauseHang', 'br.Debug.CauseHang'),\n ChangeBundleOwner: c('BR.Debug.ChangeBundleOwner'),\n Crash: c('Crash', 'br.Debug.Crash'),\n ListBundleOwners: c('BR.Debug.ListBundleOwners'),\n TestMarkdown: c('TestMarkdown', 'br.Debug.TestMarkdown'),\n TestMarkup: c('TestMarkup', 'br.Debug.TestMarkup'),\n },\n DrawDebug: {\n BrickClusters: {\n $: c('BR.DrawDebugBrickClusters', 'br.DrawDebug.BrickClusters'),\n Neighbors: c(\n 'BR.DrawDebugBrickClusters.Neighbors',\n 'br.DrawDebug.BrickClusters.Neighbors',\n ),\n OctreeBounds: c(\n 'BR.DrawDebugBrickClusters.OctreeBounds',\n 'br.DrawDebug.BrickClusters.OctreeBounds',\n ),\n },\n BrickClusterSplitTree: c(\n 'BR.DrawDebugBrickClusterSplitTree',\n 'br.DrawDebug.BrickClusterSplitTree',\n ),\n BrickLumenCards: c(\n 'BR.DrawDebugBrickLumenCards',\n 'br.DrawDebug.BrickLumenCards',\n ),\n ClientUpdates: c('BR.DrawDebugClientUpdates', 'br.DrawDebug.ClientUpdates'),\n Colliders: {\n $: c('BR.DrawDebugColliders', 'br.DrawDebug.Colliders'),\n DrawCOM: c(\n 'BR.DrawDebugColliders.DrawCOM',\n 'br.DrawDebug.Colliders.DrawCOM',\n ),\n DrawCustomMass: c(\n 'BR.DrawDebugColliders.DrawCustomMass',\n 'br.DrawDebug.Colliders.DrawCustomMass',\n ),\n },\n Constraints: c('BR.DrawDebugConstraints', 'br.DrawDebug.Constraints'),\n Entities: {\n $: c('BR.DrawDebugEntities', 'br.DrawDebug.Entities'),\n Boxes: c('BR.DrawDebugEntities.Boxes', 'br.DrawDebug.Entities.Boxes'),\n Dots: c('BR.DrawDebugEntities.Dots', 'br.DrawDebug.Entities.Dots'),\n },\n Lights: {\n $: c('BR.DrawDebugLights', 'br.DrawDebug.Lights'),\n RedThreshold: c(\n 'BR.DrawDebugLights.RedThreshold',\n 'br.DrawDebug.Lights.RedThreshold',\n ),\n },\n Texts: c('BR.DrawDebugTexts', 'br.DrawDebug.Texts'),\n },\n EnableImgui: c('br.EnableImgui'),\n EOS: {\n AttemptLogin: c('BR.EOS.AttemptLogin'),\n Disable: c('BR.EOS.Disable'),\n SetSocketName: c('BR.EOS.SetSocketName'),\n },\n GPUMappedArray: {\n MinBlocks: c('BR.GPUMappedArray.MinBlocks'),\n ReservedHeadroomBlocks: c('BR.GPUMappedArray.ReservedHeadroomBlocks'),\n },\n Inspector: {\n ShowFloatTest: c('Inspector.ShowFloatTest', 'br.Inspector.ShowFloatTest'),\n ShowGraphics: c('Inspector.ShowGraphics', 'br.Inspector.ShowGraphics'),\n },\n Interview: c('BR.Interview'),\n Iris: {\n EnableMapDeltaSerialization: c('BR.Iris.EnableMapDeltaSerialization'),\n },\n LagIndicator: {\n MinLatency: c('br.LagIndicatorMinLatency', 'br.LagIndicator.MinLatency'),\n MinTimeSincePacket: c(\n 'br.LagIndicatorMinTimeSincePacket',\n 'br.LagIndicator.MinTimeSincePacket',\n ),\n },\n Lua: {\n Execute: c('Lua.Execute', 'br.Lua.Execute'),\n ExecuteScript: c('Lua.ExecuteScript', 'br.Lua.ExecuteScript'),\n },\n Msgpack: {\n Default: {\n MaxContainerSize: c(\n 'msgpack.Default.MaxContainerSize',\n 'br.Msgpack.Default.MaxContainerSize',\n ),\n MaxDepth: c('msgpack.Default.MaxDepth', 'br.Msgpack.Default.MaxDepth'),\n MaxEnumValueCount: c(\n 'msgpack.Default.MaxEnumValueCount',\n 'br.Msgpack.Default.MaxEnumValueCount',\n ),\n MaxFieldCount: c(\n 'msgpack.Default.MaxFieldCount',\n 'br.Msgpack.Default.MaxFieldCount',\n ),\n MaxFieldNameLength: c(\n 'msgpack.Default.MaxFieldNameLength',\n 'br.Msgpack.Default.MaxFieldNameLength',\n ),\n MaxFlatArraySize: c(\n 'msgpack.Default.MaxFlatArraySize',\n 'br.Msgpack.Default.MaxFlatArraySize',\n ),\n MaxNameLength: c(\n 'msgpack.Default.MaxNameLength',\n 'br.Msgpack.Default.MaxNameLength',\n ),\n MaxStringLength: c(\n 'msgpack.Default.MaxStringLength',\n 'br.Msgpack.Default.MaxStringLength',\n ),\n MaxTypeCount: c(\n 'msgpack.Default.MaxTypeCount',\n 'br.Msgpack.Default.MaxTypeCount',\n ),\n },\n },\n NudgePhysicsObject: c('BR.NudgePhysicsObject'),\n Permissions: {\n GrantRole: c('Permissions.GrantRole', 'br.Permissions.GrantRole'),\n RevokeRole: c('Permissions.RevokeRole', 'br.Permissions.RevokeRole'),\n Save: c('Permissions.Save', 'br.Permissions.Save'),\n },\n Physics: {\n ForceFreezeDynamicGrids: c('BR.Physics.ForceFreezeDynamicGrids'),\n },\n Placer: {\n LogRowTests: c('br.Placer.LogRowTests'),\n },\n PlayerParts: {\n UseFastRender: c('br.PlayerParts.UseFastRender'),\n },\n Resizer: {\n LogTests: c('br.Resizer.LogTests'),\n },\n RunHardwareBenchmark: c('BR.RunHardwareBenchmark'),\n Server: {\n Environment: {\n LoadPreset: c(\n 'Server.Environment.LoadPreset',\n 'br.Server.Environment.LoadPreset',\n ),\n Reset: c('Server.Environment.Reset', 'br.Server.Environment.Reset'),\n SavePreset: c(\n 'Server.Environment.SavePreset',\n 'br.Server.Environment.SavePreset',\n ),\n },\n GameMode: {\n EndRound: c('Server.GameMode.EndRound', 'br.Server.GameMode.EndRound'),\n NextRound: c('Server.GameMode.NextRound', 'br.Server.GameMode.NextRound'),\n PrintLeaderboard: c(\n 'Server.GameMode.PrintLeaderboard',\n 'br.Server.GameMode.PrintLeaderboard',\n ),\n Reset: c('Server.GameMode.Reset', 'br.Server.GameMode.Reset'),\n },\n Minigames: {\n Delete: c('Server.Minigames.Delete'),\n List: c('Server.Minigames.List'),\n LoadPreset: c('Server.Minigames.LoadPreset'),\n NextRound: cv([\n [0, 'Server.Minigames.NextRound'],\n [14000, 'Server.GameMode.NextRound'],\n [14349, 'br.Server.GameMode.NextRound'],\n ]),\n Reset: cv([\n [0, 'Server.Minigames.Reset'],\n [14000, 'Server.GameMode.Reset'],\n [14349, 'br.Server.GameMode.Reset'],\n ]),\n SavePreset: c('Server.Minigames.SavePreset'),\n },\n PlayerPositions: c('Server.PlayerPositions', 'br.Server.PlayerPositions'),\n Players: {\n Damage: c('Server.Players.Damage', 'br.Server.Players.Damage'),\n GiveItem: c('Server.Players.GiveItem', 'br.Server.Players.GiveItem'),\n Kill: c('Server.Players.Kill', 'br.Server.Players.Kill'),\n PrintAllLeaderboardValues: c(\n 'Server.Players.PrintAllLeaderboardValues',\n 'br.Server.Players.PrintAllLeaderboardValues',\n ),\n PrintLeaderboardValue: c(\n 'Server.Players.PrintLeaderboardValue',\n 'br.Server.Players.PrintLeaderboardValue',\n ),\n RemoveItem: c(\n 'Server.Players.RemoveItem',\n 'br.Server.Players.RemoveItem',\n ),\n SetLeaderboardValue: c(\n 'Server.Players.SetLeaderboardValue',\n 'br.Server.Players.SetLeaderboardValue',\n ),\n SetMinigame: c('Server.Players.SetMinigame'),\n SetTeam: c('Server.Players.SetTeam', 'br.Server.Players.SetTeam'),\n },\n Status: c('Server.Status', 'br.Server.Status'),\n Teams: {\n PrintAllLeaderboardValues: c(\n 'Server.Teams.PrintAllLeaderboardValues',\n 'br.Server.Teams.PrintAllLeaderboardValues',\n ),\n PrintLeaderboardValue: c(\n 'Server.Teams.PrintLeaderboardValue',\n 'br.Server.Teams.PrintLeaderboardValue',\n ),\n },\n },\n Text: {\n FlushRecoveryFrames: c('br.Text.FlushRecoveryFrames'),\n MaxCharsPolledPerFrame: c('br.Text.MaxCharsPolledPerFrame'),\n MaxCharsShapedPerFrame: c('br.Text.MaxCharsShapedPerFrame'),\n },\n Thumbnails: {\n WipeCache: c('BR.Thumbnails.WipeCache'),\n },\n Voice: {\n DebugDecode: c('voice.DebugDecode', 'br.Voice.DebugDecode'),\n SyntheticInput: c('voice.SyntheticInput', 'br.Voice.SyntheticInput'),\n TestJitter: c('voice.TestJitter', 'br.Voice.TestJitter'),\n },\n Weapons: {\n DebugFiringVectors: c(\n 'weapons.DebugFiringVectors',\n 'br.Weapons.DebugFiringVectors',\n ),\n DebugHitValidation: c(\n 'weapons.DebugHitValidation',\n 'br.Weapons.DebugHitValidation',\n ),\n EnableHitValidation: c(\n 'weapons.EnableHitValidation',\n 'br.Weapons.EnableHitValidation',\n ),\n LatencyCompensationDelayMethod: c(\n 'weapons.LatencyCompensationDelayMethod',\n 'br.Weapons.LatencyCompensationDelayMethod',\n ),\n LatencyCompensationLimit: c(\n 'weapons.LatencyCompensationLimit',\n 'br.Weapons.LatencyCompensationLimit',\n ),\n LatencyCompensationOffset: c(\n 'weapons.LatencyCompensationOffset',\n 'br.Weapons.LatencyCompensationOffset',\n ),\n ProjectileClientLatencyCompensationEnabled: c(\n 'weapons.ProjectileClientLatencyCompensationEnabled',\n 'br.Weapons.ProjectileClientLatencyCompensationEnabled',\n ),\n ProjectileLatencyCompensationEnabled: c(\n 'weapons.ProjectileLatencyCompensationEnabled',\n 'br.Weapons.ProjectileLatencyCompensationEnabled',\n ),\n ProjectilePredictionEnabled: c(\n 'weapons.ProjectilePredictionEnabled',\n 'br.Weapons.ProjectilePredictionEnabled',\n ),\n },\n WireFuzzer: {\n ClearBreakpoints: c('BR.WireFuzzer.ClearBreakpoints'),\n ComponentsPerTick: c('BR.WireFuzzer.ComponentsPerTick'),\n DisconnectBeforeConnect: c('BR.WireFuzzer.DisconnectBeforeConnect'),\n GatesPerTick: c('BR.WireFuzzer.GatesPerTick'),\n MaxComponents: c('BR.WireFuzzer.MaxComponents'),\n MaxGates: c('BR.WireFuzzer.MaxGates'),\n MaxWires: c('BR.WireFuzzer.MaxWires'),\n ModificationsPerTick: c('BR.WireFuzzer.ModificationsPerTick'),\n RerouteDuplication: c('BR.WireFuzzer.RerouteDuplication'),\n Start: c('BR.WireFuzzer.Start'),\n StartWithSeed: c('BR.WireFuzzer.StartWithSeed'),\n Stop: c('BR.WireFuzzer.Stop'),\n WiresPerTick: c('BR.WireFuzzer.WiresPerTick'),\n },\n WireGraphViz: c('BR.WireGraphViz'),\n WireRenderer: {\n EnablePorts: c('BR.WireRenderer.EnablePorts'),\n EnableWires: c('BR.WireRenderer.EnableWires'),\n },\n World: {\n CreateEmpty: c('BR.World.CreateEmpty'),\n ListRevisions: c('BR.World.ListRevisions'),\n Load: c('BR.World.Load'),\n LoadAdditive: c('BR.World.LoadAdditive'),\n LoadRevision: c('BR.World.LoadRevision'),\n Save: c('BR.World.Save'),\n SaveAs: c('BR.World.SaveAs'),\n },\n WorldSerializer: {\n LogPrefabLoads: c('BR.WorldSerializer.LogPrefabLoads'),\n RedirectLegacyWheelJoints: c(\n 'BR.WorldSerializer.RedirectLegacyWheelJoints',\n ),\n WipeOwnershipOnLoad: c('BR.WorldSerializer.WipeOwnershipOnLoad'),\n },\n} satisfies CommandTree;\n\ntype CommandTree = { [key: string]: ConsoleCommand | CommandTree };\n\n/** Recursively turn a {@link CommandTree} into resolved command-name strings. */\ntype Resolved<T> = T extends ConsoleCommand\n ? string\n : { [K in keyof T]: Resolved<T[K]> };\n\n/**\n * Version-resolved console command names, nested by namespace.\n * Every leaf is the command string for the running game version.\n */\nexport type ConsoleCommands = Resolved<typeof COMMAND_TABLE>;\n\nconst resolveTree = (tree: CommandTree, version: number): unknown => {\n const out: Record<string, unknown> = {};\n for (const key in tree) {\n const value = tree[key];\n out[key] =\n value instanceof ConsoleCommand\n ? value.resolve(version)\n : resolveTree(value, version);\n }\n return out;\n};\n\n/** Build the resolved {@link ConsoleCommands} map for a game CL version. */\nexport const resolveConsoleCommands = (version: number): ConsoleCommands =>\n resolveTree(COMMAND_TABLE, version) as ConsoleCommands;\n\n// Reverse lookup: every known command name (lowercased, across all versions)\n// -> the command. First write wins so canonical commands keep priority over\n// the deprecated aliases injected later in the table.\nconst COMMAND_LOOKUP = new Map<string, ConsoleCommand>();\nconst indexTree = (tree: CommandTree): void => {\n for (const key in tree) {\n const value = tree[key];\n if (value instanceof ConsoleCommand) {\n for (const name of value.names) {\n const lower = name.toLowerCase();\n if (!COMMAND_LOOKUP.has(lower)) COMMAND_LOOKUP.set(lower, value);\n }\n } else {\n indexTree(value);\n }\n }\n};\nindexTree(COMMAND_TABLE);\n\n/**\n * Rewrite a console command line so a stale command name resolves to the name\n * the running game version expects. The first word (up to the first space) is\n * matched case-insensitively against every known command name; if it maps to a\n * command whose version-correct name differs, that word is swapped. Lines that\n * don't start with a known command are returned unchanged.\n */\nexport const migrateConsoleCommand = (\n line: string,\n version: number,\n): string => {\n const space = line.indexOf(' ');\n const head = space === -1 ? line : line.slice(0, space);\n const command = COMMAND_LOOKUP.get(head.toLowerCase());\n if (!command) return line;\n const resolved = command.resolve(version);\n // already a valid name for this version (console names are case-insensitive)\n if (resolved.toLowerCase() === head.toLowerCase()) return line;\n return space === -1 ? resolved : resolved + line.slice(space);\n};\n"],"names":[],"mappings":"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"}
|
package/dist/omegga/player.js
CHANGED
|
@@ -104,13 +104,16 @@ class Player {
|
|
|
104
104
|
}
|
|
105
105
|
static kill(omegga, target) {
|
|
106
106
|
if (typeof target === "string") target = omegga.getPlayer(target);
|
|
107
|
-
if (target?.name)
|
|
107
|
+
if (target?.name)
|
|
108
|
+
omegga.writeln(`${omegga.Console.Server.Players.Kill} "${target?.name}"`);
|
|
108
109
|
}
|
|
109
110
|
static damage(omegga, target, amount) {
|
|
110
111
|
if (typeof target === "string") target = omegga.getPlayer(target);
|
|
111
112
|
if (amount === 0) return;
|
|
112
113
|
if (target?.name)
|
|
113
|
-
omegga.writeln(
|
|
114
|
+
omegga.writeln(
|
|
115
|
+
`${omegga.Console.Server.Players.Damage} "${target?.name}" ${amount}`
|
|
116
|
+
);
|
|
114
117
|
}
|
|
115
118
|
static heal(omegga, target, amount) {
|
|
116
119
|
if (amount === 0) return;
|
|
@@ -120,29 +123,37 @@ class Player {
|
|
|
120
123
|
if (typeof target === "string") target = omegga.getPlayer(target);
|
|
121
124
|
if (!item) return;
|
|
122
125
|
if (target?.name)
|
|
123
|
-
omegga.writeln(
|
|
126
|
+
omegga.writeln(
|
|
127
|
+
`${omegga.Console.Server.Players.GiveItem} "${target?.name}" ${item}`
|
|
128
|
+
);
|
|
124
129
|
}
|
|
125
130
|
static takeItem(omegga, target, item) {
|
|
126
131
|
if (typeof target === "string") target = omegga.getPlayer(target);
|
|
127
132
|
if (!item) return;
|
|
128
133
|
if (target?.name)
|
|
129
|
-
omegga.writeln(
|
|
134
|
+
omegga.writeln(
|
|
135
|
+
`${omegga.Console.Server.Players.RemoveItem} "${target?.name}" ${item}`
|
|
136
|
+
);
|
|
130
137
|
}
|
|
131
138
|
static setTeam(omegga, target, teamIndex) {
|
|
132
139
|
if (typeof target === "string") target = omegga.getPlayer(target);
|
|
133
140
|
if (target?.name)
|
|
134
|
-
omegga.writeln(
|
|
141
|
+
omegga.writeln(
|
|
142
|
+
`${omegga.Console.Server.Players.SetTeam} "${target?.name}" ${teamIndex}`
|
|
143
|
+
);
|
|
135
144
|
}
|
|
136
145
|
static setMinigame(omegga, target, index2) {
|
|
137
146
|
if (typeof target === "string") target = omegga.getPlayer(target);
|
|
138
147
|
if (target?.name)
|
|
139
|
-
omegga.writeln(
|
|
148
|
+
omegga.writeln(
|
|
149
|
+
`${omegga.Console.Server.Players.SetMinigame} "${target?.name}" ${index2}`
|
|
150
|
+
);
|
|
140
151
|
}
|
|
141
152
|
static setScore(omegga, target, minigameIndex, score) {
|
|
142
153
|
if (typeof target === "string") target = omegga.getPlayer(target);
|
|
143
154
|
if (target?.name)
|
|
144
155
|
omegga.writeln(
|
|
145
|
-
|
|
156
|
+
`${omegga.Console.Server.Players.SetLeaderboardValue} "${target?.name}" ${minigameIndex} ${score}`
|
|
146
157
|
);
|
|
147
158
|
}
|
|
148
159
|
static async getScore(omegga, target, minigameIndex) {
|
|
@@ -164,7 +175,7 @@ class Player {
|
|
|
164
175
|
{
|
|
165
176
|
timeoutDelay: 1e3,
|
|
166
177
|
exec: () => omegga.writeln(
|
|
167
|
-
|
|
178
|
+
`${omegga.Console.Server.Players.PrintLeaderboardValue} "${name}" ${minigameIndex}`
|
|
168
179
|
)
|
|
169
180
|
}
|
|
170
181
|
);
|
|
@@ -174,7 +185,7 @@ class Player {
|
|
|
174
185
|
if (typeof target === "string") target = omegga.getPlayer(target);
|
|
175
186
|
if (!target?.name) return null;
|
|
176
187
|
omegga.writeln(
|
|
177
|
-
|
|
188
|
+
`${omegga.Console.Server.Players.SetLeaderboardValue} "${target.name}" "${key}" "${value}"`
|
|
178
189
|
);
|
|
179
190
|
}
|
|
180
191
|
static async getLeaderboard(omegga, target, key) {
|
|
@@ -194,7 +205,7 @@ class Player {
|
|
|
194
205
|
{
|
|
195
206
|
timeoutDelay: 1e3,
|
|
196
207
|
exec: () => omegga.writeln(
|
|
197
|
-
|
|
208
|
+
`${omegga.Console.Server.Players.PrintLeaderboardValue} "${target.name}" "${key}"`
|
|
198
209
|
)
|
|
199
210
|
}
|
|
200
211
|
).catch(() => null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"player.js","sources":["../../src/omegga/player.ts"],"sourcesContent":["import type { OmeggaLike, OmeggaPlayer, WeaponClass } from '@/plugin';\nimport { IBrickBounds } from '@util/brick';\nimport { WriteSaveObject } from 'brs-js';\nimport { brick as brickUtils, color } from '../util/';\n\nconst DEFAULT_PERMS: Record<string, string[]> = {\n moderator: [\n 'Bricks.ClearAll',\n 'Minigame.AlwaysLeave',\n 'Players.Kick',\n 'Players.TPInMinigame',\n 'Players.TPOthers',\n 'Self.Ghost',\n ],\n admin: [\n 'Bricks.ClearAll',\n 'Bricks.ClearOwn',\n 'Bricks.IgnoreTrust',\n 'Bricks.Load',\n 'Map.Environment',\n 'Minigame.AlwaysEdit',\n 'Minigame.AlwaysLeave',\n 'Minigame.AlwaysSwitchTeam',\n 'Minigame.MakeDefault',\n 'Minigame.MakePersistent',\n 'Minigame.UseAllBricks',\n 'Players.Ban',\n 'Players.Kick',\n 'Players.TPInMinigame',\n 'Players.TPOthers',\n 'Roles.Grant',\n 'Self.Ghost',\n 'Server.ChangeRoles',\n 'Server.ChangeSettings',\n 'Server.FreezeCamera',\n 'Tools.Selector.BypassLimits',\n 'Tools.Selector.BypassTimeouts',\n ],\n};\n\nclass Player implements OmeggaPlayer {\n #omegga: OmeggaLike;\n name: string;\n displayName: string;\n id: string;\n controller: string;\n state: string;\n\n static getRoles(omegga: OmeggaLike, id: string): readonly string[] {\n const data = omegga.getRoleAssignments().savedPlayerRoles[id];\n return data && data.roles ? [...data.roles] : [];\n }\n\n static getPermissions(\n omegga: OmeggaLike,\n id: string,\n ): Record<string, boolean> {\n const { roles, defaultRole } = omegga.getRoleSetup();\n\n // if the player is the host, the player has every permission\n if (omegga.host?.id === id) {\n return Object.freeze(\n Object.fromEntries(\n [].concat(\n defaultRole.permissions.map(p => [p.name, true]),\n // sometimes the default role does not have every permission listed\n ...roles.map(r => r.permissions.map(p => [p.name, true])),\n ),\n ),\n );\n }\n\n // get the player's roles\n const playerRoles = Player.getRoles(omegga, id).map(r => r.toLowerCase());\n\n // default player permissions\n const permissions: Record<string, boolean> = {\n 'Bricks.ClearAll': false,\n 'Bricks.ClearOwn': true,\n 'Bricks.Delete': true,\n 'Bricks.Edit': true,\n 'Bricks.IgnoreTrust': false,\n 'Bricks.Paint': true,\n 'Bricks.Place': true,\n 'BricksItems.Spawn': true,\n 'Map.Change': false,\n 'Map.Environment': false,\n 'Map.SetSpawn': false,\n 'Minigame.AlwaysEdit': false,\n 'Minigame.AlwaysLeave': false,\n 'Minigame.AlwaysSwitchTeam': false,\n 'Minigame.Create': true,\n 'Minigame.MakePersistent': false,\n 'Minigame.UseAllBricks': false,\n 'Players.Ban': false,\n 'Players.TPInMinigame': false,\n 'Players.TPOthers': false,\n 'Players.TPSelf': true,\n 'Roles.Grant': false,\n 'Self.Flashlight': true,\n 'Self.Fly': true,\n 'Self.FreezeCamera': false,\n 'Self.Ghost': false,\n 'Self.Sprint': true,\n 'Self.Suicide': true,\n 'Tools.Selector.Use': true,\n };\n\n // apply all permissions from default role\n for (const p of defaultRole.permissions) {\n // technically this can never be Unchanged so it's always on enabled or allowed\n permissions[p.name] =\n p.state === 'Unchanged' ? permissions[p.name] : p.state === 'Allowed';\n }\n\n // loop through all the roles\n for (const role of roles) {\n // ignore ones the player does not have\n if (!playerRoles.includes(role.name.toLowerCase())) continue;\n\n const defaultPerms = DEFAULT_PERMS[role.name.toLowerCase()] || [];\n // iterate through default permissions\n for (const perm of defaultPerms) {\n // if they are not overriden, set it to true\n if (!role.permissions.find(r => r.name === perm))\n permissions[perm] = true;\n }\n\n // add all the new permissions the player now has\n for (const p of role.permissions) {\n // permission is disabled on forbidden, persisted on unchanged, and enabled on bEnabled or Allowed\n permissions[p.name] =\n p.state !== 'Forbidden' &&\n (p.state === 'Unchanged'\n ? permissions[p.name]\n : permissions[p.name] || p.state === 'Allowed');\n permissions[p.name] = permissions[p.name];\n }\n }\n\n return Object.freeze(permissions);\n }\n\n static kill(omegga: OmeggaLike, target: string | OmeggaPlayer) {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (target?.name) omegga.writeln(`Server.Players.Kill \"${target?.name}\"`);\n }\n\n static damage(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n amount: number,\n ) {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (amount === 0) return;\n if (target?.name)\n omegga.writeln(`Server.Players.Damage \"${target?.name}\" ${amount}`);\n }\n\n static heal(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n amount: number,\n ) {\n if (amount === 0) return;\n Player.damage(omegga, target, -amount);\n }\n\n static giveItem(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n item: WeaponClass,\n ) {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (!item) return;\n if (target?.name)\n omegga.writeln(`Server.Players.GiveItem \"${target?.name}\" ${item}`);\n }\n\n static takeItem(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n item: WeaponClass,\n ) {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (!item) return;\n if (target?.name)\n omegga.writeln(`Server.Players.RemoveItem \"${target?.name}\" ${item}`);\n }\n\n static setTeam(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n teamIndex: number,\n ) {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (target?.name)\n omegga.writeln(`Server.Players.SetTeam \"${target?.name}\" ${teamIndex}`);\n }\n\n static setMinigame(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n index: number,\n ) {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (target?.name)\n omegga.writeln(`Server.Players.SetMinigame \"${target?.name}\" ${index}`);\n }\n\n static setScore(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n minigameIndex: number,\n score: number,\n ) {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (target?.name)\n omegga.writeln(\n `Server.Players.SetLeaderboardValue \"${target?.name}\" ${minigameIndex} ${score}`,\n );\n }\n\n static async getScore(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n minigameIndex: number,\n ): Promise<number> {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (!target?.name) return 0;\n\n const name = target?.name;\n const id = target?.id;\n\n const match = await omegga.addWatcher(\n (line, match) => {\n if (match?.groups.generator !== 'LogConsoleCommands') return;\n\n const test = match.groups.data.match(\n /^(?<uuid>.+) leaderboard value (?<minigame>\\d+) = (?<score>-?\\d+)$/,\n );\n if (!test) return;\n if (test.groups.uuid !== id) return;\n if (Number(test.groups.minigame) !== minigameIndex) return;\n return test;\n },\n {\n timeoutDelay: 1000,\n exec: () =>\n omegga.writeln(\n `Server.Players.PrintLeaderboardValue \"${name}\" ${minigameIndex}`,\n ),\n },\n );\n if (match) return Number(match[0].groups.score);\n }\n\n static setLeaderboard(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n key: string,\n value: number,\n ): void {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (!target?.name) return null;\n\n omegga.writeln(\n `Server.Players.SetLeaderboardValue \"${target.name}\" \"${key}\" \"${value}\"`,\n );\n }\n\n static async getLeaderboard(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n key: string,\n ): Promise<number | null> {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (!target?.name) return null;\n\n // LogConsoleCommands: <uuid> leaderboard value Key = 0\n const match = await omegga\n .addWatcher<RegExpMatchArray>(\n (line, match) => {\n if (match?.groups.generator !== 'LogConsoleCommands') return;\n\n const test = match.groups.data.match(\n /^(?<uuid>.+) leaderboard value (?<key>.+) = (?<value>-?\\d+)$/,\n );\n if (!test) return;\n if (test.groups.uuid !== target.id) return;\n if (test.groups.key !== key) return;\n return test;\n },\n {\n timeoutDelay: 1000,\n exec: () =>\n omegga.writeln(\n `Server.Players.PrintLeaderboardValue \"${target.name}\" \"${key}\"`,\n ),\n },\n )\n .catch(() => null);\n if (match) return Number(match[0].groups.value);\n return null;\n }\n\n /**\n * players are not to be constructed\n * @constructor\n * @param omegga Omegga Instance\n * @param name Player Name\n * @param displayName Player Display Name\n * @param id Player Id\n * @param controller Player Controller\n * @param state Player State\n */\n constructor(\n omegga: OmeggaLike,\n username: string,\n displayName: string,\n id: string,\n controller: string,\n state: string,\n ) {\n this.#omegga = omegga;\n this.name = username;\n this.displayName = displayName;\n this.id = id;\n this.controller = controller;\n this.state = state;\n }\n\n getOmegga(): OmeggaLike {\n return this.#omegga;\n }\n\n clone(): OmeggaPlayer {\n return new Player(\n this.#omegga,\n this.name,\n this.displayName,\n this.id,\n this.controller,\n this.state,\n );\n }\n\n raw(): [string, string, string, string, string] {\n return [this.name, this.displayName, this.id, this.controller, this.state];\n }\n\n isHost(): boolean {\n return this.#omegga.host.id === this.id;\n }\n\n clearBricks(quiet = false) {\n this.#omegga.clearBricks(this.id, quiet);\n }\n\n getRoles(): readonly string[] {\n return Player.getRoles(this.#omegga, this.id);\n }\n\n getPermissions(): Record<string, boolean> {\n return Player.getPermissions(this.#omegga, this.id);\n }\n\n getNameColor(): string {\n const { roles, defaultRole, ownerRoleColor, bOwnerRoleHasColor } =\n this.#omegga.getRoleSetup();\n\n // host check if host has host color\n if (this.isHost() && bOwnerRoleHasColor)\n return color.rgbToHex(ownerRoleColor);\n\n // get the player's role\n const playerRoles = this.getRoles().map(r => r.toLowerCase());\n\n // only if the player actually has roles...\n if (playerRoles.length > 0) {\n // check the role list in reverse for the player's role (highest tier first)\n const found = roles\n .slice()\n .reverse()\n .find(\n role =>\n role.bHasColor && playerRoles.includes(role.name.toLowerCase()),\n );\n\n if (found) return color.rgbToHex(found.color);\n }\n\n return color.rgbToHex(\n defaultRole.bHasColor\n ? defaultRole.color\n : { r: 255, g: 255, b: 255, a: 255 },\n );\n }\n\n async getPawn(): Promise<string | null> {\n // given a player controller, match the player's pawn\n const pawnRegExp = new RegExp(\n `^(?<index>\\\\d+)\\\\) BP_PlayerController_C .+?PersistentLevel\\\\.${this.controller}\\\\.Pawn = .*?(?:BP_FigureV2_C'.+:PersistentLevel\\\\.)?(?<pawn>BP_FigureV2_C_\\\\d+|None)'?`,\n );\n\n // wait for the pawn watcher to return a pawn\n const [{ groups: { pawn = null } = {} } = {}] =\n await this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll BP_PlayerController_C Pawn Name=' + this.controller,\n pawnRegExp,\n { first: 'index', timeoutDelay: 500 },\n );\n\n if (pawn === 'None') return null;\n\n return pawn;\n }\n\n async getPosition(): Promise<[number, number, number] | null> {\n // this is here because my text editor had weird syntax highlighting glitches when the other omeggas were replaced with this.#omegga...\n // guess the code is \"too new\" :egg:\n const omegga = this.#omegga;\n\n // given a player controller, match the player's pawn\n const pawnRegExp = new RegExp(\n `^(?<index>\\\\d+)\\\\) BP_PlayerController_C .+?PersistentLevel\\\\.${this.controller}\\\\.Pawn = .*?(?:BP_FigureV2_C'.+:PersistentLevel\\\\.)?(?<pawn>BP_FigureV2_C_\\\\d+|None)'?`,\n );\n\n // wait for the pawn watcher to return a pawn\n const [\n {\n groups: { pawn },\n },\n ] = await omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll BP_PlayerController_C Pawn Name=' + this.controller,\n pawnRegExp,\n { first: 'index', timeoutDelay: 100 },\n );\n\n if (pawn === 'None') return null;\n\n // given a player's pawn, match the player's position\n const posRegExp = new RegExp(\n `CapsuleComponent .+?PersistentLevel\\\\.${pawn}\\\\.CollisionCylinder\\\\.RelativeLocation = \\\\(X=(?<x>[\\\\d\\\\.-]+),Y=(?<y>[\\\\d\\\\.-]+),Z=(?<z>[\\\\d\\\\.-]+)\\\\)`,\n );\n\n // wait for the position promise\n const [\n {\n groups: { x, y, z },\n },\n ] = await omegga.addWatcher(posRegExp, {\n // request the position for this player's pawn\n exec: () =>\n omegga.writeln(\n `GetAll SceneComponent RelativeLocation Name=CollisionCylinder Outer=${pawn}`,\n ),\n timeoutDelay: 100,\n });\n\n // return the player's position as an array of numbers\n return [Number(x), Number(y), Number(z)];\n }\n\n async getGhostBrick(): Promise<{\n targetGrid: string;\n location: number[];\n orientation: string;\n }> {\n const { controller } = this;\n\n const previewClass = 'BP_ToolPreviewActor_C';\n\n const ownerRegExp = new RegExp(\n `^(?<index>\\\\d+)\\\\) ${previewClass} (.+):PersistentLevel\\\\.(?<actor>${previewClass}_\\\\d+)\\.Owner = .*?BP_PlayerController_C'(.+):PersistentLevel\\\\.(?<controller>BP_PlayerController_C_\\\\d+)'$`,\n );\n const transformParamsRegExp = new RegExp(\n `^(?<index>\\\\d+)\\\\) ${previewClass} (.+):PersistentLevel\\\\.(?<actor>${previewClass}_\\\\d+)\\\\.TransformParameters = \\\\(TargetGrid=(\"(?<targetGrid>.+)\"|None),Location=\\\\(X=(?<x>.+),Y=(?<y>.+),Z=(?<z>.+)\\\\),Orientation=(?<orientation>.+)\\\\)$`,\n );\n\n const [owners, transformParams] = await Promise.all([\n this.#omegga.watchLogChunk<RegExpMatchArray>(\n `GetAll ${previewClass} Owner`,\n ownerRegExp,\n {\n first: 'index',\n timeoutDelay: 2000,\n afterMatchDelay: 100,\n },\n ),\n this.#omegga.watchLogChunk<RegExpMatchArray>(\n `GetAll ${previewClass} TransformParameters`,\n transformParamsRegExp,\n {\n first: 'index',\n timeoutDelay: 2000,\n afterMatchDelay: 100,\n },\n ),\n ]);\n\n // get BrickGridPreviewActor by controller\n const owner = owners.find(owner => owner.groups.controller === controller);\n\n if (!owner) return;\n\n const actor = owner.groups.actor;\n // get transform parameters for the found actor\n const transformParameters = transformParams.find(\n transformParameters => transformParameters.groups.actor === actor,\n );\n\n if (!transformParameters) return;\n\n return {\n targetGrid: transformParameters.groups.targetGrid,\n location: [\n +transformParameters.groups.x,\n +transformParameters.groups.y,\n +transformParameters.groups.z,\n ],\n orientation: transformParameters.groups.orientation,\n };\n }\n\n async getPaint(): Promise<{\n materialIndex: string;\n materialAlpha: string;\n material: string;\n color: number[];\n }> {\n const { controller } = this;\n\n const match = await this.#omegga\n .addWatcher<{\n materialIndex: string;\n materialAlpha: string;\n material: string;\n color: number[];\n }>(\n line => {\n // [date][counter]0) BP_PlayerState_C /Game/Maps/Plate/Plate.Plate:PersistentLevel.BP_PlayerState_C_2147482378.ColorSelectionState = (SelectedColor=(B=6,G=73,R=246,A=255),MaterialIndex=3,MaterialAlpha=5)\n const match = line.match(\n /^\\[[^\\]]+\\]\\[[^\\]]+\\]\\d+\\) BP_PlayerState_C .+?PersistentLevel\\.(?<state>BP_PlayerState_C_\\d+)\\.ColorSelectionState = \\(SelectedColor=\\(B=(?<b>\\d+),G=(?<g>\\d+),R=(?<r>\\d+),A=(?<a>\\d+)\\),MaterialIndex=(?<materialIndex>\\d+),MaterialAlpha=(?<materialAlpha>\\d+)\\)$/,\n );\n if (!match) return;\n if (match.groups.state !== this.state) return;\n const colorRaw = [+match.groups.r, +match.groups.g, +match.groups.b];\n return {\n materialIndex: match.groups.materialIndex,\n materialAlpha: match.groups.materialAlpha,\n material:\n brickUtils.BRICK_CONSTANTS.DEFAULT_MATERIALS[\n Number(match.groups.materialIndex)\n ],\n color: colorRaw,\n };\n },\n {\n timeoutDelay: 1000,\n exec: () =>\n this.#omegga.writeln('GetAll BRPlayerState ColorSelectionState'),\n },\n )\n .catch(() => null);\n if (!match?.[0]) return;\n return match[0];\n }\n\n async isCrouched(pawn?: string): Promise<boolean> {\n if (!pawn) pawn = await this.getPawn();\n\n const reg =\n /(?<index>\\d+)\\) BP_FigureV2_C .+?PersistentLevel\\.(?<pawn>BP_FigureV2_C_\\d+)\\.bIsCrouched = (?<crouched>True|False)$/;\n\n const resp = await this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll BP_FigureV2_C bIsCrouched Name=' + pawn,\n reg,\n { first: 'index', timeoutDelay: 500 },\n );\n\n const me = resp.find(r => r.groups.pawn === pawn);\n if (!me) return false;\n\n return me.groups.crouched == 'True';\n }\n\n async isDead(pawn?: string): Promise<boolean> {\n if (!pawn) pawn = await this.getPawn();\n\n const reg =\n /(?<index>\\d+)\\) BP_FigureV2_C .+?PersistentLevel\\.(?<pawn>BP_FigureV2_C_\\d+)\\.bIsDead = (?<dead>True|False)$/;\n\n const resp = await this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll BP_FigureV2_C bIsDead Name=' + pawn,\n reg,\n { first: 'index', timeoutDelay: 500 },\n );\n\n const me = resp.find(r => r.groups.pawn === pawn);\n if (!me) return true;\n\n return me.groups.dead == 'True';\n }\n\n async getTemplateBounds() {\n const { controller } = this;\n\n const brickTemplateRegExp =\n /^(?<index>\\d+)\\) Tool_Selector_C (.+):PersistentLevel\\.(?<tool>Tool_Selector_C_\\d+)\\.CurrentTemplate = (.+)Brickadia.BrickBuildingTemplate'(.+)Transient.(?<templateName>BrickBuildingTemplate_\\d+)'$/;\n const brickTemplateOwnerRegExp =\n /^(?<index>\\d+)\\) Tool_Selector_C (.+):PersistentLevel\\.(?<tool>Tool_Selector_C_\\d+)\\.Owner = (.+)(?<controller>BP_PlayerController_C_\\d+)'$/;\n const minBoundsRegExp =\n /^(?<index>\\d+)\\) BrickBuildingTemplate (.+)Transient\\.(?<templateName>BrickBuildingTemplate_\\d+)\\.MinBounds = \\(X=(?<x>.+),Y=(?<y>.+),Z=(?<z>.+)\\)$/;\n const maxBoundsRegExp =\n /^(?<index>\\d+)\\) BrickBuildingTemplate (.+)Transient\\.(?<templateName>BrickBuildingTemplate_\\d+)\\.MaxBounds = \\(X=(?<x>.+),Y=(?<y>.+),Z=(?<z>.+)\\)$/;\n const centerRegExp =\n /^(?<index>\\d+)\\) BrickBuildingTemplate (.+)Transient\\.(?<templateName>BrickBuildingTemplate_\\d+)\\.Center = \\(X=(?<x>.+),Y=(?<y>.+),Z=(?<z>.+)\\)$/;\n\n const [templates, owners, minBounds, maxBounds, centers] =\n await Promise.all([\n this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll Tool_Selector_C CurrentTemplate',\n brickTemplateRegExp,\n {\n first: 'index',\n timeoutDelay: 2000,\n afterMatchDelay: 100,\n },\n ),\n this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll Tool_Selector_C Owner',\n brickTemplateOwnerRegExp,\n {\n first: 'index',\n timeoutDelay: 2000,\n afterMatchDelay: 100,\n },\n ),\n this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll BrickBuildingTemplate MinBounds',\n minBoundsRegExp,\n {\n first: 'index',\n timeoutDelay: 2000,\n afterMatchDelay: 100,\n },\n ),\n this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll BrickBuildingTemplate MaxBounds',\n maxBoundsRegExp,\n {\n first: 'index',\n timeoutDelay: 2000,\n afterMatchDelay: 100,\n },\n ),\n this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll BrickBuildingTemplate Center',\n centerRegExp,\n {\n first: 'index',\n timeoutDelay: 2000,\n afterMatchDelay: 100,\n },\n ),\n ]);\n\n if (\n !templates.length ||\n !owners.length ||\n !minBounds.length ||\n !maxBounds.length ||\n !centers.length\n )\n return;\n\n // get selector for this controller, we need to handle if there are multiple selectors for the same controller\n const selectors = owners\n .filter(selectors => selectors.groups.controller === controller)\n .map(selectors => selectors.groups.tool)\n .sort();\n const selector = selectors[0]; // grab the most recently created\n\n if (!selector) {\n return;\n }\n\n // template for this selector, we need to handle if there are multiple templates for the same selector and grab the most recent one\n const brickTemplates = templates\n .filter(template => template.groups.tool === selector)\n .map(template => template.groups.templateName)\n .sort();\n const templateName = brickTemplates[0]; // grab the most recently created\n\n if (!templateName) {\n return;\n }\n\n // find all values with matching template name\n const minBound = minBounds.find(\n minBound => minBound.groups.templateName === templateName,\n );\n const maxBound = maxBounds.find(\n maxBound => maxBound.groups.templateName === templateName,\n );\n const center = centers.find(\n center => center.groups.templateName === templateName,\n );\n\n if (!minBound || !maxBound || !center) return;\n\n return {\n minBound: [+minBound.groups.x, +minBound.groups.y, +minBound.groups.z],\n maxBound: [+maxBound.groups.x, +maxBound.groups.y, +maxBound.groups.z],\n center: [+center.groups.x, +center.groups.y, +center.groups.z],\n } as IBrickBounds;\n }\n\n async getTemplateBoundsData() {\n const templateBounds = await this.getTemplateBounds();\n\n if (!templateBounds) return;\n\n const saveData = await this.#omegga.getSaveData({\n center: templateBounds.center,\n extent: [\n Math.round(\n (templateBounds.maxBound[0] - templateBounds.minBound[0]) / 2,\n ),\n Math.round(\n (templateBounds.maxBound[1] - templateBounds.minBound[1]) / 2,\n ),\n Math.round(\n (templateBounds.maxBound[2] - templateBounds.minBound[2]) / 2,\n ),\n ],\n });\n\n if (!saveData) return;\n\n // filter bricks outside the bounds\n // no longer necessary thanks to Bricks.SaveRegion\n /* saveData.bricks = (saveData.bricks as Brick[]).filter(brick => {\n return brickUtils.checkBounds(\n brick,\n saveData.brick_assets,\n templateBounds\n );\n }) as typeof saveData.bricks; */\n\n if (saveData.bricks.length > 0) {\n return saveData;\n }\n\n return undefined;\n }\n\n loadBricks(saveName: string) {\n this.#omegga.loadBricksOnPlayer(saveName, this);\n }\n\n async loadSaveData(\n saveData: WriteSaveObject,\n { offX = 0, offY = 0, offZ = 0 } = {},\n ) {\n await this.#omegga.loadSaveDataOnPlayer(saveData, this, {\n offX,\n offY,\n offZ,\n });\n }\n\n async loadDataAtGhostBrick(\n saveData: WriteSaveObject,\n { rotate = true, offX = 0, offY = 0, offZ = 0, quiet = true } = {},\n ) {\n const ghostBrickData = await this.getGhostBrick();\n\n if (!ghostBrickData || !saveData) return;\n\n // get bounds of the bricks\n const bounds = brickUtils.getBounds(saveData);\n\n if (rotate) {\n const orientation =\n brickUtils.BRICK_CONSTANTS.orientationMap[ghostBrickData.orientation];\n saveData.bricks = saveData.bricks.map(brick =>\n brickUtils.rotate(brick, orientation),\n );\n // rotate bounds, if we dont use the original bounds they are off by 1 sometimes >:(\n bounds.minBound = brickUtils.BRICK_CONSTANTS.translationTable[\n brickUtils.d2o(...orientation)\n ](bounds.minBound);\n bounds.maxBound = brickUtils.BRICK_CONSTANTS.translationTable[\n brickUtils.d2o(...orientation)\n ](bounds.maxBound);\n bounds.center = brickUtils.BRICK_CONSTANTS.translationTable[\n brickUtils.d2o(...orientation)\n ](bounds.center);\n }\n\n // calculate offset from bricks center to ghost brick center\n const offset = bounds.center.map(\n (center, index) => ghostBrickData.location[index] - center,\n );\n\n // load at offset location\n await this.#omegga.loadSaveData(saveData, {\n offX: offX + offset[0],\n offY: offY + offset[1],\n offZ: offZ + offset[2],\n quiet,\n });\n }\n\n kill() {\n Player.kill(this.#omegga, this);\n }\n\n damage(amount: number): void {\n Player.damage(this.#omegga, this, amount);\n }\n\n heal(amount: number): void {\n Player.heal(this.#omegga, this, amount);\n }\n\n giveItem(item: WeaponClass): void {\n Player.giveItem(this.#omegga, this, item);\n }\n\n takeItem(item: WeaponClass): void {\n Player.takeItem(this.#omegga, this, item);\n }\n\n setTeam(teamIndex: number): void {\n Player.setTeam(this.#omegga, this, teamIndex);\n }\n\n setMinigame(index: number): void {\n Player.setMinigame(this.#omegga, this, index);\n }\n\n setScore(minigameIndex: number, score: number): void {\n Player.setScore(this.#omegga, this, minigameIndex, score);\n }\n\n getScore(minigameIndex: number): Promise<number> {\n return Player.getScore(this.#omegga, this, minigameIndex);\n }\n\n setLeaderboard(key: string, value: number): void {\n Player.setLeaderboard(this.#omegga, this, key, value);\n }\n\n async getLeaderboard(key: string): Promise<number | null> {\n return Player.getLeaderboard(this.#omegga, this, key);\n }\n}\n\nglobal.Player = Player;\n\nexport default Player;\n"],"names":["index","match","color","owner","transformParameters","brickUtils","selectors","minBound","maxBound","center"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"player.js","sources":["../../src/omegga/player.ts"],"sourcesContent":["import type { OmeggaLike, OmeggaPlayer, WeaponClass } from '@/plugin';\nimport { IBrickBounds } from '@util/brick';\nimport { WriteSaveObject } from 'brs-js';\nimport { brick as brickUtils, color } from '../util/';\n\nconst DEFAULT_PERMS: Record<string, string[]> = {\n moderator: [\n 'Bricks.ClearAll',\n 'Minigame.AlwaysLeave',\n 'Players.Kick',\n 'Players.TPInMinigame',\n 'Players.TPOthers',\n 'Self.Ghost',\n ],\n admin: [\n 'Bricks.ClearAll',\n 'Bricks.ClearOwn',\n 'Bricks.IgnoreTrust',\n 'Bricks.Load',\n 'Map.Environment',\n 'Minigame.AlwaysEdit',\n 'Minigame.AlwaysLeave',\n 'Minigame.AlwaysSwitchTeam',\n 'Minigame.MakeDefault',\n 'Minigame.MakePersistent',\n 'Minigame.UseAllBricks',\n 'Players.Ban',\n 'Players.Kick',\n 'Players.TPInMinigame',\n 'Players.TPOthers',\n 'Roles.Grant',\n 'Self.Ghost',\n 'Server.ChangeRoles',\n 'Server.ChangeSettings',\n 'Server.FreezeCamera',\n 'Tools.Selector.BypassLimits',\n 'Tools.Selector.BypassTimeouts',\n ],\n};\n\nclass Player implements OmeggaPlayer {\n #omegga: OmeggaLike;\n name: string;\n displayName: string;\n id: string;\n controller: string;\n state: string;\n\n static getRoles(omegga: OmeggaLike, id: string): readonly string[] {\n const data = omegga.getRoleAssignments().savedPlayerRoles[id];\n return data && data.roles ? [...data.roles] : [];\n }\n\n static getPermissions(\n omegga: OmeggaLike,\n id: string,\n ): Record<string, boolean> {\n const { roles, defaultRole } = omegga.getRoleSetup();\n\n // if the player is the host, the player has every permission\n if (omegga.host?.id === id) {\n return Object.freeze(\n Object.fromEntries(\n [].concat(\n defaultRole.permissions.map(p => [p.name, true]),\n // sometimes the default role does not have every permission listed\n ...roles.map(r => r.permissions.map(p => [p.name, true])),\n ),\n ),\n );\n }\n\n // get the player's roles\n const playerRoles = Player.getRoles(omegga, id).map(r => r.toLowerCase());\n\n // default player permissions\n const permissions: Record<string, boolean> = {\n 'Bricks.ClearAll': false,\n 'Bricks.ClearOwn': true,\n 'Bricks.Delete': true,\n 'Bricks.Edit': true,\n 'Bricks.IgnoreTrust': false,\n 'Bricks.Paint': true,\n 'Bricks.Place': true,\n 'BricksItems.Spawn': true,\n 'Map.Change': false,\n 'Map.Environment': false,\n 'Map.SetSpawn': false,\n 'Minigame.AlwaysEdit': false,\n 'Minigame.AlwaysLeave': false,\n 'Minigame.AlwaysSwitchTeam': false,\n 'Minigame.Create': true,\n 'Minigame.MakePersistent': false,\n 'Minigame.UseAllBricks': false,\n 'Players.Ban': false,\n 'Players.TPInMinigame': false,\n 'Players.TPOthers': false,\n 'Players.TPSelf': true,\n 'Roles.Grant': false,\n 'Self.Flashlight': true,\n 'Self.Fly': true,\n 'Self.FreezeCamera': false,\n 'Self.Ghost': false,\n 'Self.Sprint': true,\n 'Self.Suicide': true,\n 'Tools.Selector.Use': true,\n };\n\n // apply all permissions from default role\n for (const p of defaultRole.permissions) {\n // technically this can never be Unchanged so it's always on enabled or allowed\n permissions[p.name] =\n p.state === 'Unchanged' ? permissions[p.name] : p.state === 'Allowed';\n }\n\n // loop through all the roles\n for (const role of roles) {\n // ignore ones the player does not have\n if (!playerRoles.includes(role.name.toLowerCase())) continue;\n\n const defaultPerms = DEFAULT_PERMS[role.name.toLowerCase()] || [];\n // iterate through default permissions\n for (const perm of defaultPerms) {\n // if they are not overriden, set it to true\n if (!role.permissions.find(r => r.name === perm))\n permissions[perm] = true;\n }\n\n // add all the new permissions the player now has\n for (const p of role.permissions) {\n // permission is disabled on forbidden, persisted on unchanged, and enabled on bEnabled or Allowed\n permissions[p.name] =\n p.state !== 'Forbidden' &&\n (p.state === 'Unchanged'\n ? permissions[p.name]\n : permissions[p.name] || p.state === 'Allowed');\n permissions[p.name] = permissions[p.name];\n }\n }\n\n return Object.freeze(permissions);\n }\n\n static kill(omegga: OmeggaLike, target: string | OmeggaPlayer) {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (target?.name)\n omegga.writeln(`${omegga.Console.Server.Players.Kill} \"${target?.name}\"`);\n }\n\n static damage(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n amount: number,\n ) {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (amount === 0) return;\n if (target?.name)\n omegga.writeln(\n `${omegga.Console.Server.Players.Damage} \"${target?.name}\" ${amount}`,\n );\n }\n\n static heal(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n amount: number,\n ) {\n if (amount === 0) return;\n Player.damage(omegga, target, -amount);\n }\n\n static giveItem(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n item: WeaponClass,\n ) {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (!item) return;\n if (target?.name)\n omegga.writeln(\n `${omegga.Console.Server.Players.GiveItem} \"${target?.name}\" ${item}`,\n );\n }\n\n static takeItem(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n item: WeaponClass,\n ) {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (!item) return;\n if (target?.name)\n omegga.writeln(\n `${omegga.Console.Server.Players.RemoveItem} \"${target?.name}\" ${item}`,\n );\n }\n\n static setTeam(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n teamIndex: number,\n ) {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (target?.name)\n omegga.writeln(\n `${omegga.Console.Server.Players.SetTeam} \"${target?.name}\" ${teamIndex}`,\n );\n }\n\n static setMinigame(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n index: number,\n ) {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (target?.name)\n omegga.writeln(\n `${omegga.Console.Server.Players.SetMinigame} \"${target?.name}\" ${index}`,\n );\n }\n\n static setScore(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n minigameIndex: number,\n score: number,\n ) {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (target?.name)\n omegga.writeln(\n `${omegga.Console.Server.Players.SetLeaderboardValue} \"${target?.name}\" ${minigameIndex} ${score}`,\n );\n }\n\n static async getScore(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n minigameIndex: number,\n ): Promise<number> {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (!target?.name) return 0;\n\n const name = target?.name;\n const id = target?.id;\n\n const match = await omegga.addWatcher(\n (line, match) => {\n if (match?.groups.generator !== 'LogConsoleCommands') return;\n\n const test = match.groups.data.match(\n /^(?<uuid>.+) leaderboard value (?<minigame>\\d+) = (?<score>-?\\d+)$/,\n );\n if (!test) return;\n if (test.groups.uuid !== id) return;\n if (Number(test.groups.minigame) !== minigameIndex) return;\n return test;\n },\n {\n timeoutDelay: 1000,\n exec: () =>\n omegga.writeln(\n `${omegga.Console.Server.Players.PrintLeaderboardValue} \"${name}\" ${minigameIndex}`,\n ),\n },\n );\n if (match) return Number(match[0].groups.score);\n }\n\n static setLeaderboard(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n key: string,\n value: number,\n ): void {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (!target?.name) return null;\n\n omegga.writeln(\n `${omegga.Console.Server.Players.SetLeaderboardValue} \"${target.name}\" \"${key}\" \"${value}\"`,\n );\n }\n\n static async getLeaderboard(\n omegga: OmeggaLike,\n target: string | OmeggaPlayer,\n key: string,\n ): Promise<number | null> {\n if (typeof target === 'string') target = omegga.getPlayer(target);\n if (!target?.name) return null;\n\n // LogConsoleCommands: <uuid> leaderboard value Key = 0\n const match = await omegga\n .addWatcher<RegExpMatchArray>(\n (line, match) => {\n if (match?.groups.generator !== 'LogConsoleCommands') return;\n\n const test = match.groups.data.match(\n /^(?<uuid>.+) leaderboard value (?<key>.+) = (?<value>-?\\d+)$/,\n );\n if (!test) return;\n if (test.groups.uuid !== target.id) return;\n if (test.groups.key !== key) return;\n return test;\n },\n {\n timeoutDelay: 1000,\n exec: () =>\n omegga.writeln(\n `${omegga.Console.Server.Players.PrintLeaderboardValue} \"${target.name}\" \"${key}\"`,\n ),\n },\n )\n .catch(() => null);\n if (match) return Number(match[0].groups.value);\n return null;\n }\n\n /**\n * players are not to be constructed\n * @constructor\n * @param omegga Omegga Instance\n * @param name Player Name\n * @param displayName Player Display Name\n * @param id Player Id\n * @param controller Player Controller\n * @param state Player State\n */\n constructor(\n omegga: OmeggaLike,\n username: string,\n displayName: string,\n id: string,\n controller: string,\n state: string,\n ) {\n this.#omegga = omegga;\n this.name = username;\n this.displayName = displayName;\n this.id = id;\n this.controller = controller;\n this.state = state;\n }\n\n getOmegga(): OmeggaLike {\n return this.#omegga;\n }\n\n clone(): OmeggaPlayer {\n return new Player(\n this.#omegga,\n this.name,\n this.displayName,\n this.id,\n this.controller,\n this.state,\n );\n }\n\n raw(): [string, string, string, string, string] {\n return [this.name, this.displayName, this.id, this.controller, this.state];\n }\n\n isHost(): boolean {\n return this.#omegga.host.id === this.id;\n }\n\n clearBricks(quiet = false) {\n this.#omegga.clearBricks(this.id, quiet);\n }\n\n getRoles(): readonly string[] {\n return Player.getRoles(this.#omegga, this.id);\n }\n\n getPermissions(): Record<string, boolean> {\n return Player.getPermissions(this.#omegga, this.id);\n }\n\n getNameColor(): string {\n const { roles, defaultRole, ownerRoleColor, bOwnerRoleHasColor } =\n this.#omegga.getRoleSetup();\n\n // host check if host has host color\n if (this.isHost() && bOwnerRoleHasColor)\n return color.rgbToHex(ownerRoleColor);\n\n // get the player's role\n const playerRoles = this.getRoles().map(r => r.toLowerCase());\n\n // only if the player actually has roles...\n if (playerRoles.length > 0) {\n // check the role list in reverse for the player's role (highest tier first)\n const found = roles\n .slice()\n .reverse()\n .find(\n role =>\n role.bHasColor && playerRoles.includes(role.name.toLowerCase()),\n );\n\n if (found) return color.rgbToHex(found.color);\n }\n\n return color.rgbToHex(\n defaultRole.bHasColor\n ? defaultRole.color\n : { r: 255, g: 255, b: 255, a: 255 },\n );\n }\n\n async getPawn(): Promise<string | null> {\n // given a player controller, match the player's pawn\n const pawnRegExp = new RegExp(\n `^(?<index>\\\\d+)\\\\) BP_PlayerController_C .+?PersistentLevel\\\\.${this.controller}\\\\.Pawn = .*?(?:BP_FigureV2_C'.+:PersistentLevel\\\\.)?(?<pawn>BP_FigureV2_C_\\\\d+|None)'?`,\n );\n\n // wait for the pawn watcher to return a pawn\n const [{ groups: { pawn = null } = {} } = {}] =\n await this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll BP_PlayerController_C Pawn Name=' + this.controller,\n pawnRegExp,\n { first: 'index', timeoutDelay: 500 },\n );\n\n if (pawn === 'None') return null;\n\n return pawn;\n }\n\n async getPosition(): Promise<[number, number, number] | null> {\n // this is here because my text editor had weird syntax highlighting glitches when the other omeggas were replaced with this.#omegga...\n // guess the code is \"too new\" :egg:\n const omegga = this.#omegga;\n\n // given a player controller, match the player's pawn\n const pawnRegExp = new RegExp(\n `^(?<index>\\\\d+)\\\\) BP_PlayerController_C .+?PersistentLevel\\\\.${this.controller}\\\\.Pawn = .*?(?:BP_FigureV2_C'.+:PersistentLevel\\\\.)?(?<pawn>BP_FigureV2_C_\\\\d+|None)'?`,\n );\n\n // wait for the pawn watcher to return a pawn\n const [\n {\n groups: { pawn },\n },\n ] = await omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll BP_PlayerController_C Pawn Name=' + this.controller,\n pawnRegExp,\n { first: 'index', timeoutDelay: 100 },\n );\n\n if (pawn === 'None') return null;\n\n // given a player's pawn, match the player's position\n const posRegExp = new RegExp(\n `CapsuleComponent .+?PersistentLevel\\\\.${pawn}\\\\.CollisionCylinder\\\\.RelativeLocation = \\\\(X=(?<x>[\\\\d\\\\.-]+),Y=(?<y>[\\\\d\\\\.-]+),Z=(?<z>[\\\\d\\\\.-]+)\\\\)`,\n );\n\n // wait for the position promise\n const [\n {\n groups: { x, y, z },\n },\n ] = await omegga.addWatcher(posRegExp, {\n // request the position for this player's pawn\n exec: () =>\n omegga.writeln(\n `GetAll SceneComponent RelativeLocation Name=CollisionCylinder Outer=${pawn}`,\n ),\n timeoutDelay: 100,\n });\n\n // return the player's position as an array of numbers\n return [Number(x), Number(y), Number(z)];\n }\n\n async getGhostBrick(): Promise<{\n targetGrid: string;\n location: number[];\n orientation: string;\n }> {\n const { controller } = this;\n\n const previewClass = 'BP_ToolPreviewActor_C';\n\n const ownerRegExp = new RegExp(\n `^(?<index>\\\\d+)\\\\) ${previewClass} (.+):PersistentLevel\\\\.(?<actor>${previewClass}_\\\\d+)\\.Owner = .*?BP_PlayerController_C'(.+):PersistentLevel\\\\.(?<controller>BP_PlayerController_C_\\\\d+)'$`,\n );\n const transformParamsRegExp = new RegExp(\n `^(?<index>\\\\d+)\\\\) ${previewClass} (.+):PersistentLevel\\\\.(?<actor>${previewClass}_\\\\d+)\\\\.TransformParameters = \\\\(TargetGrid=(\"(?<targetGrid>.+)\"|None),Location=\\\\(X=(?<x>.+),Y=(?<y>.+),Z=(?<z>.+)\\\\),Orientation=(?<orientation>.+)\\\\)$`,\n );\n\n const [owners, transformParams] = await Promise.all([\n this.#omegga.watchLogChunk<RegExpMatchArray>(\n `GetAll ${previewClass} Owner`,\n ownerRegExp,\n {\n first: 'index',\n timeoutDelay: 2000,\n afterMatchDelay: 100,\n },\n ),\n this.#omegga.watchLogChunk<RegExpMatchArray>(\n `GetAll ${previewClass} TransformParameters`,\n transformParamsRegExp,\n {\n first: 'index',\n timeoutDelay: 2000,\n afterMatchDelay: 100,\n },\n ),\n ]);\n\n // get BrickGridPreviewActor by controller\n const owner = owners.find(owner => owner.groups.controller === controller);\n\n if (!owner) return;\n\n const actor = owner.groups.actor;\n // get transform parameters for the found actor\n const transformParameters = transformParams.find(\n transformParameters => transformParameters.groups.actor === actor,\n );\n\n if (!transformParameters) return;\n\n return {\n targetGrid: transformParameters.groups.targetGrid,\n location: [\n +transformParameters.groups.x,\n +transformParameters.groups.y,\n +transformParameters.groups.z,\n ],\n orientation: transformParameters.groups.orientation,\n };\n }\n\n async getPaint(): Promise<{\n materialIndex: string;\n materialAlpha: string;\n material: string;\n color: number[];\n }> {\n const { controller } = this;\n\n const match = await this.#omegga\n .addWatcher<{\n materialIndex: string;\n materialAlpha: string;\n material: string;\n color: number[];\n }>(\n line => {\n // [date][counter]0) BP_PlayerState_C /Game/Maps/Plate/Plate.Plate:PersistentLevel.BP_PlayerState_C_2147482378.ColorSelectionState = (SelectedColor=(B=6,G=73,R=246,A=255),MaterialIndex=3,MaterialAlpha=5)\n const match = line.match(\n /^\\[[^\\]]+\\]\\[[^\\]]+\\]\\d+\\) BP_PlayerState_C .+?PersistentLevel\\.(?<state>BP_PlayerState_C_\\d+)\\.ColorSelectionState = \\(SelectedColor=\\(B=(?<b>\\d+),G=(?<g>\\d+),R=(?<r>\\d+),A=(?<a>\\d+)\\),MaterialIndex=(?<materialIndex>\\d+),MaterialAlpha=(?<materialAlpha>\\d+)\\)$/,\n );\n if (!match) return;\n if (match.groups.state !== this.state) return;\n const colorRaw = [+match.groups.r, +match.groups.g, +match.groups.b];\n return {\n materialIndex: match.groups.materialIndex,\n materialAlpha: match.groups.materialAlpha,\n material:\n brickUtils.BRICK_CONSTANTS.DEFAULT_MATERIALS[\n Number(match.groups.materialIndex)\n ],\n color: colorRaw,\n };\n },\n {\n timeoutDelay: 1000,\n exec: () =>\n this.#omegga.writeln('GetAll BRPlayerState ColorSelectionState'),\n },\n )\n .catch(() => null);\n if (!match?.[0]) return;\n return match[0];\n }\n\n async isCrouched(pawn?: string): Promise<boolean> {\n if (!pawn) pawn = await this.getPawn();\n\n const reg =\n /(?<index>\\d+)\\) BP_FigureV2_C .+?PersistentLevel\\.(?<pawn>BP_FigureV2_C_\\d+)\\.bIsCrouched = (?<crouched>True|False)$/;\n\n const resp = await this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll BP_FigureV2_C bIsCrouched Name=' + pawn,\n reg,\n { first: 'index', timeoutDelay: 500 },\n );\n\n const me = resp.find(r => r.groups.pawn === pawn);\n if (!me) return false;\n\n return me.groups.crouched == 'True';\n }\n\n async isDead(pawn?: string): Promise<boolean> {\n if (!pawn) pawn = await this.getPawn();\n\n const reg =\n /(?<index>\\d+)\\) BP_FigureV2_C .+?PersistentLevel\\.(?<pawn>BP_FigureV2_C_\\d+)\\.bIsDead = (?<dead>True|False)$/;\n\n const resp = await this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll BP_FigureV2_C bIsDead Name=' + pawn,\n reg,\n { first: 'index', timeoutDelay: 500 },\n );\n\n const me = resp.find(r => r.groups.pawn === pawn);\n if (!me) return true;\n\n return me.groups.dead == 'True';\n }\n\n async getTemplateBounds() {\n const { controller } = this;\n\n const brickTemplateRegExp =\n /^(?<index>\\d+)\\) Tool_Selector_C (.+):PersistentLevel\\.(?<tool>Tool_Selector_C_\\d+)\\.CurrentTemplate = (.+)Brickadia.BrickBuildingTemplate'(.+)Transient.(?<templateName>BrickBuildingTemplate_\\d+)'$/;\n const brickTemplateOwnerRegExp =\n /^(?<index>\\d+)\\) Tool_Selector_C (.+):PersistentLevel\\.(?<tool>Tool_Selector_C_\\d+)\\.Owner = (.+)(?<controller>BP_PlayerController_C_\\d+)'$/;\n const minBoundsRegExp =\n /^(?<index>\\d+)\\) BrickBuildingTemplate (.+)Transient\\.(?<templateName>BrickBuildingTemplate_\\d+)\\.MinBounds = \\(X=(?<x>.+),Y=(?<y>.+),Z=(?<z>.+)\\)$/;\n const maxBoundsRegExp =\n /^(?<index>\\d+)\\) BrickBuildingTemplate (.+)Transient\\.(?<templateName>BrickBuildingTemplate_\\d+)\\.MaxBounds = \\(X=(?<x>.+),Y=(?<y>.+),Z=(?<z>.+)\\)$/;\n const centerRegExp =\n /^(?<index>\\d+)\\) BrickBuildingTemplate (.+)Transient\\.(?<templateName>BrickBuildingTemplate_\\d+)\\.Center = \\(X=(?<x>.+),Y=(?<y>.+),Z=(?<z>.+)\\)$/;\n\n const [templates, owners, minBounds, maxBounds, centers] =\n await Promise.all([\n this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll Tool_Selector_C CurrentTemplate',\n brickTemplateRegExp,\n {\n first: 'index',\n timeoutDelay: 2000,\n afterMatchDelay: 100,\n },\n ),\n this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll Tool_Selector_C Owner',\n brickTemplateOwnerRegExp,\n {\n first: 'index',\n timeoutDelay: 2000,\n afterMatchDelay: 100,\n },\n ),\n this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll BrickBuildingTemplate MinBounds',\n minBoundsRegExp,\n {\n first: 'index',\n timeoutDelay: 2000,\n afterMatchDelay: 100,\n },\n ),\n this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll BrickBuildingTemplate MaxBounds',\n maxBoundsRegExp,\n {\n first: 'index',\n timeoutDelay: 2000,\n afterMatchDelay: 100,\n },\n ),\n this.#omegga.watchLogChunk<RegExpMatchArray>(\n 'GetAll BrickBuildingTemplate Center',\n centerRegExp,\n {\n first: 'index',\n timeoutDelay: 2000,\n afterMatchDelay: 100,\n },\n ),\n ]);\n\n if (\n !templates.length ||\n !owners.length ||\n !minBounds.length ||\n !maxBounds.length ||\n !centers.length\n )\n return;\n\n // get selector for this controller, we need to handle if there are multiple selectors for the same controller\n const selectors = owners\n .filter(selectors => selectors.groups.controller === controller)\n .map(selectors => selectors.groups.tool)\n .sort();\n const selector = selectors[0]; // grab the most recently created\n\n if (!selector) {\n return;\n }\n\n // template for this selector, we need to handle if there are multiple templates for the same selector and grab the most recent one\n const brickTemplates = templates\n .filter(template => template.groups.tool === selector)\n .map(template => template.groups.templateName)\n .sort();\n const templateName = brickTemplates[0]; // grab the most recently created\n\n if (!templateName) {\n return;\n }\n\n // find all values with matching template name\n const minBound = minBounds.find(\n minBound => minBound.groups.templateName === templateName,\n );\n const maxBound = maxBounds.find(\n maxBound => maxBound.groups.templateName === templateName,\n );\n const center = centers.find(\n center => center.groups.templateName === templateName,\n );\n\n if (!minBound || !maxBound || !center) return;\n\n return {\n minBound: [+minBound.groups.x, +minBound.groups.y, +minBound.groups.z],\n maxBound: [+maxBound.groups.x, +maxBound.groups.y, +maxBound.groups.z],\n center: [+center.groups.x, +center.groups.y, +center.groups.z],\n } as IBrickBounds;\n }\n\n async getTemplateBoundsData() {\n const templateBounds = await this.getTemplateBounds();\n\n if (!templateBounds) return;\n\n const saveData = await this.#omegga.getSaveData({\n center: templateBounds.center,\n extent: [\n Math.round(\n (templateBounds.maxBound[0] - templateBounds.minBound[0]) / 2,\n ),\n Math.round(\n (templateBounds.maxBound[1] - templateBounds.minBound[1]) / 2,\n ),\n Math.round(\n (templateBounds.maxBound[2] - templateBounds.minBound[2]) / 2,\n ),\n ],\n });\n\n if (!saveData) return;\n\n // filter bricks outside the bounds\n // no longer necessary thanks to Bricks.SaveRegion\n /* saveData.bricks = (saveData.bricks as Brick[]).filter(brick => {\n return brickUtils.checkBounds(\n brick,\n saveData.brick_assets,\n templateBounds\n );\n }) as typeof saveData.bricks; */\n\n if (saveData.bricks.length > 0) {\n return saveData;\n }\n\n return undefined;\n }\n\n loadBricks(saveName: string) {\n this.#omegga.loadBricksOnPlayer(saveName, this);\n }\n\n async loadSaveData(\n saveData: WriteSaveObject,\n { offX = 0, offY = 0, offZ = 0 } = {},\n ) {\n await this.#omegga.loadSaveDataOnPlayer(saveData, this, {\n offX,\n offY,\n offZ,\n });\n }\n\n async loadDataAtGhostBrick(\n saveData: WriteSaveObject,\n { rotate = true, offX = 0, offY = 0, offZ = 0, quiet = true } = {},\n ) {\n const ghostBrickData = await this.getGhostBrick();\n\n if (!ghostBrickData || !saveData) return;\n\n // get bounds of the bricks\n const bounds = brickUtils.getBounds(saveData);\n\n if (rotate) {\n const orientation =\n brickUtils.BRICK_CONSTANTS.orientationMap[ghostBrickData.orientation];\n saveData.bricks = saveData.bricks.map(brick =>\n brickUtils.rotate(brick, orientation),\n );\n // rotate bounds, if we dont use the original bounds they are off by 1 sometimes >:(\n bounds.minBound = brickUtils.BRICK_CONSTANTS.translationTable[\n brickUtils.d2o(...orientation)\n ](bounds.minBound);\n bounds.maxBound = brickUtils.BRICK_CONSTANTS.translationTable[\n brickUtils.d2o(...orientation)\n ](bounds.maxBound);\n bounds.center = brickUtils.BRICK_CONSTANTS.translationTable[\n brickUtils.d2o(...orientation)\n ](bounds.center);\n }\n\n // calculate offset from bricks center to ghost brick center\n const offset = bounds.center.map(\n (center, index) => ghostBrickData.location[index] - center,\n );\n\n // load at offset location\n await this.#omegga.loadSaveData(saveData, {\n offX: offX + offset[0],\n offY: offY + offset[1],\n offZ: offZ + offset[2],\n quiet,\n });\n }\n\n kill() {\n Player.kill(this.#omegga, this);\n }\n\n damage(amount: number): void {\n Player.damage(this.#omegga, this, amount);\n }\n\n heal(amount: number): void {\n Player.heal(this.#omegga, this, amount);\n }\n\n giveItem(item: WeaponClass): void {\n Player.giveItem(this.#omegga, this, item);\n }\n\n takeItem(item: WeaponClass): void {\n Player.takeItem(this.#omegga, this, item);\n }\n\n setTeam(teamIndex: number): void {\n Player.setTeam(this.#omegga, this, teamIndex);\n }\n\n setMinigame(index: number): void {\n Player.setMinigame(this.#omegga, this, index);\n }\n\n setScore(minigameIndex: number, score: number): void {\n Player.setScore(this.#omegga, this, minigameIndex, score);\n }\n\n getScore(minigameIndex: number): Promise<number> {\n return Player.getScore(this.#omegga, this, minigameIndex);\n }\n\n setLeaderboard(key: string, value: number): void {\n Player.setLeaderboard(this.#omegga, this, key, value);\n }\n\n async getLeaderboard(key: string): Promise<number | null> {\n return Player.getLeaderboard(this.#omegga, this, key);\n }\n}\n\nglobal.Player = Player;\n\nexport default Player;\n"],"names":["index","match","color","owner","transformParameters","brickUtils","selectors","minBound","maxBound","center"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const commandInjector = require("../../commandInjector.js");
|
|
4
|
+
const commands = require("../../commands.js");
|
|
4
5
|
const logWrangler = require("../../logWrangler.js");
|
|
5
6
|
const player = require("../../player.js");
|
|
6
7
|
const EventEmitter = require("events");
|
|
@@ -114,6 +115,17 @@ class ProxyOmegga extends EventEmitter {
|
|
|
114
115
|
this.currentMap = map;
|
|
115
116
|
});
|
|
116
117
|
}
|
|
118
|
+
/** memoized version-resolved console commands ({@link Console}) */
|
|
119
|
+
#console;
|
|
120
|
+
/** version-resolved Brickadia console command names, nested by namespace */
|
|
121
|
+
get Console() {
|
|
122
|
+
if (this.#console?.version !== this.version)
|
|
123
|
+
this.#console = {
|
|
124
|
+
version: this.version,
|
|
125
|
+
commands: commands.resolveConsoleCommands(this.version)
|
|
126
|
+
};
|
|
127
|
+
return this.#console.commands;
|
|
128
|
+
}
|
|
117
129
|
addMatcher(pattern, callback) {
|
|
118
130
|
throw badBorrow("addMatcher");
|
|
119
131
|
}
|
|
@@ -138,6 +150,9 @@ class ProxyOmegga extends EventEmitter {
|
|
|
138
150
|
getMinigames() {
|
|
139
151
|
throw badBorrow("getMinigames");
|
|
140
152
|
}
|
|
153
|
+
getGamemode() {
|
|
154
|
+
throw badBorrow("getGamemode");
|
|
155
|
+
}
|
|
141
156
|
getPlayers() {
|
|
142
157
|
throw badBorrow("getPlayers");
|
|
143
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxyOmegga.js","sources":["../../../../src/omegga/plugin/plugin_node_safe/proxyOmegga.ts"],"sourcesContent":["import {\n OmeggaCore,\n OmeggaLike,\n OmeggaPlayer,\n PluginInterop,\n WatcherPattern,\n} from '@/plugin';\nimport { EnvironmentPreset } from '@brickadia/presets';\nimport {\n BRBanList,\n BRPlayerNameCache,\n BRRoleAssignments,\n BRRoleSetup,\n} from '@brickadia/types';\nimport commandInjector from '@omegga/commandInjector';\nimport LogWrangler from '@omegga/logWrangler';\nimport Player from '@omegga/player';\nimport Omegga from '@omegga/server';\nimport {\n ILogMinigame,\n IMinigameList,\n IPlayerPositions,\n IServerStatus,\n} from '@omegga/types';\nimport { ReadSaveObject, WriteSaveObject } from 'brs-js';\nimport EventEmitter from 'events';\n\n// bootstrap the proxy with initial omegga data\nexport const bootstrap = (omegga: Omegga): Record<string, unknown[]> => ({\n 'plugin:players:raw': [omegga.players.map(p => p.raw())],\n bootstrap: [\n {\n host: Object.freeze({ ...omegga.host }),\n version: omegga.version,\n verbose: omegga.verbose,\n savePath: omegga.savePath,\n worldPath: omegga.worldPath,\n path: omegga.path,\n configPath: omegga.configPath,\n presetPath: omegga.presetPath,\n starting: omegga.starting,\n started: omegga.started,\n stopping: omegga.stopping,\n config: omegga.config,\n currentMap: omegga.currentMap,\n },\n ],\n});\n\n// prototypes that can be directly stolen from omegga\nconst STEAL_PROTOTYPES: Record<keyof Required<OmeggaCore>, true> = {\n broadcast: true,\n whisper: true,\n middlePrint: true,\n getPlayer: true,\n getPlayers: true,\n findPlayerByName: true,\n getHostId: true,\n clearBricks: true,\n clearRegion: true,\n clearAllBricks: true,\n loadBricks: true,\n loadBricksOnPlayer: true,\n saveBricks: true,\n saveBricksAsync: true,\n getSavePath: true,\n getSaves: true,\n getWorldPath: true,\n getWorlds: true,\n getWorldRevisions: true,\n loadWorld: true,\n loadWorldRevision: true,\n saveWorldAs: true,\n saveWorld: true,\n createEmptyWorld: true,\n writeSaveData: true,\n readSaveData: true,\n loadSaveData: true,\n loadSaveDataOnPlayer: true,\n getSaveData: true,\n getRoleSetup: true,\n getRoleAssignments: true,\n getBanList: true,\n getNameCache: true,\n changeMap: true,\n saveMinigame: true,\n deleteMinigame: true,\n resetMinigame: true,\n nextRoundMinigame: true,\n loadMinigame: true,\n getMinigamePresets: true,\n resetEnvironment: true,\n saveEnvironment: true,\n readEnvironmentData: true,\n getEnvironmentData: true,\n loadEnvironment: true,\n loadEnvironmentData: true,\n getEnvironmentPresets: true,\n};\n\nconst badBorrow = (name: string) =>\n new Error(`Method \"${name}\" not properly borrowed.`);\n\n// this is a \"soft\" omegga\n// it is built to mimic the core omegga\n// it does not provide direct write access to\nexport class ProxyOmegga extends EventEmitter implements OmeggaLike {\n _tempCounter = { save: 0, environment: 0 };\n _tempSavePrefix = 'omegga_plugin_temp_';\n\n writeln: (line: string) => void;\n version: number;\n players: Player[];\n\n host: { id: string; name: string };\n\n verbose: boolean;\n\n started: boolean;\n starting: boolean;\n stopping: boolean;\n currentMap: string;\n\n configPath: string;\n savePath: string;\n worldPath: string;\n presetPath: string;\n\n logWrangler: LogWrangler;\n\n getPlugin: (name: string) => Promise<PluginInterop>;\n\n constructor(exec: (line: string) => void) {\n super();\n this.setMaxListeners(Infinity);\n\n this.writeln = exec;\n\n this.version = -1;\n\n this.players = [];\n\n // log wrangler wrangles logs... it reads brickadia logs and clumps them together\n this.logWrangler = new LogWrangler(this as unknown as Omegga);\n this.on('line', this.logWrangler.callback);\n this.addMatcher = this.logWrangler.addMatcher;\n this.addWatcher = this.logWrangler.addWatcher;\n this.watchLogArray = this.logWrangler.watchLogArray;\n this.watchLogChunk = this.logWrangler.watchLogChunk;\n\n // inject commands\n commandInjector(this, this.logWrangler);\n\n // blanket apply fields\n this.once('bootstrap', data => {\n for (const key in data) {\n (this as any)[key] = data[key];\n }\n });\n\n // data synchronization\n this.on('host', host => (this.host = host));\n this.on('version', version => (this.version = version));\n\n // create players from raw constructor data\n this.on(\n 'plugin:players:raw',\n (players: [string, string, string, string, string][]) =>\n (this.players = players.map(p => new Player(this as OmeggaLike, ...p))),\n );\n\n this.on('start', ({ map }) => {\n this.started = true;\n this.starting = false;\n this.currentMap = map;\n });\n this.on('exit', () => {\n this.started = false;\n this.starting = false;\n });\n this.on('mapchange', ({ map }) => {\n this.currentMap = map;\n });\n }\n addMatcher<T>(\n pattern: RegExp | ((line: string, match: RegExpMatchArray) => T),\n callback:\n | ((match: RegExpMatchArray) => boolean)\n | ((match: RegExpMatchArray) => T),\n ): void {\n throw badBorrow('addMatcher');\n }\n addWatcher<T = RegExpMatchArray>(\n pattern: RegExp | WatcherPattern<T>,\n options?: {\n timeoutDelay?: number;\n bundle?: boolean;\n debounce?: boolean;\n afterMatchDelay?: number;\n last?: (match: T) => boolean;\n exec?: () => void;\n },\n ): Promise<RegExpMatchArray[] | T[]> {\n throw badBorrow('addWatcher');\n }\n watchLogChunk<T = string>(\n cmd: string,\n pattern: RegExp | WatcherPattern<T>,\n options?: {\n first?: 'index' | ((match: T) => boolean);\n last?: (match: T) => boolean;\n afterMatchDelay?: number;\n timeoutDelay?: number;\n },\n ): Promise<RegExpMatchArray[] | T[]> {\n throw badBorrow('watchLogChunk');\n }\n watchLogArray<\n Item extends Record<string, string> = Record<string, string>,\n Member extends Record<string, string> = Record<string, string>,\n >(\n cmd: string,\n itemPattern: RegExp,\n memberPattern: RegExp,\n ): Promise<{ item: Item; members: Member[] }[]> {\n throw badBorrow('watchLogArray');\n }\n getServerStatus(): Promise<IServerStatus> {\n throw badBorrow('getServerStatus');\n }\n listMinigames(): Promise<IMinigameList> {\n throw badBorrow('listMinigames');\n }\n getAllPlayerPositions(): Promise<IPlayerPositions> {\n throw badBorrow('getAllPlayerPositions');\n }\n getMinigames(): Promise<ILogMinigame[]> {\n throw badBorrow('getMinigames');\n }\n getPlayers(): {\n id: string;\n name: string;\n displayName: string;\n controller: string;\n state: string;\n }[] {\n throw badBorrow('getPlayers');\n }\n getPlayer(target: string): OmeggaPlayer {\n throw badBorrow('getPlayer');\n }\n findPlayerByName(name: string): OmeggaPlayer {\n throw badBorrow('findPlayerByName');\n }\n getHostId(): string {\n throw badBorrow('getHostId');\n }\n broadcast(...messages: string[]): void {\n throw badBorrow('broadcast');\n }\n whisper(target: string | OmeggaPlayer, ...messages: string[]): void {\n throw badBorrow('whisper');\n }\n middlePrint(target: string | OmeggaPlayer, message: string): void {\n throw badBorrow('middlePrint');\n }\n saveMinigame(index: number, name: string): void {\n throw badBorrow('saveMinigame');\n }\n deleteMinigame(index: number): void {\n throw badBorrow('deleteMinigame');\n }\n resetMinigame(index: number): void {\n throw badBorrow('resetMinigame');\n }\n nextRoundMinigame(index: number): void {\n throw badBorrow('nextRoundMinigame');\n }\n loadMinigame(presetName: string, owner?: string): void {\n throw badBorrow('loadMinigame');\n }\n getMinigamePresets(): string[] {\n throw badBorrow('getMinigamePresets');\n }\n resetEnvironment(): void {\n throw badBorrow('resetEnvironment');\n }\n saveEnvironment(presetName: string): Promise<void> {\n throw badBorrow('saveEnvironment');\n }\n getEnvironmentData(): Promise<EnvironmentPreset> {\n throw badBorrow('getEnvironmentData');\n }\n loadEnvironment(presetName: string): void {\n throw badBorrow('loadEnvironment');\n }\n readEnvironmentData(presetName: string): void {\n throw badBorrow('readEnvironmentData');\n }\n loadEnvironmentData(preset: EnvironmentPreset): void {\n throw badBorrow('loadEnvironmentData');\n }\n getEnvironmentPresets(): string[] {\n throw badBorrow('getEnvironmentPresets');\n }\n clearBricks(target: string | { id: string }, quiet?: boolean): void {\n throw badBorrow('clearBricks');\n }\n clearRegion(\n region: {\n center: [number, number, number];\n extent: [number, number, number];\n },\n options: {\n target: string | OmeggaPlayer;\n },\n ): void {\n throw badBorrow('clearRegion');\n }\n clearAllBricks(quiet?: boolean): void {\n throw badBorrow('clearAllBricks');\n }\n saveBricks(saveName: string, region?: {}): void {\n throw badBorrow('saveBricks');\n }\n saveBricksAsync(saveName: string, region?: {}): Promise<void> {\n throw badBorrow('saveBricksAsync');\n }\n loadBricks(\n saveName: string,\n options?: { offX?: number; offY?: number; offZ?: number; quiet?: boolean },\n ): void {\n throw badBorrow('loadBricks');\n }\n loadBricksOnPlayer(\n saveName: string,\n player: string | OmeggaPlayer,\n options?: { offX?: number; offY?: number; offZ?: number },\n ): void {\n throw badBorrow('loadBricksOnPlayer');\n }\n getSaves(): string[] {\n throw badBorrow('getSaves');\n }\n getWorlds(): string[] {\n throw badBorrow('getWorlds');\n }\n getSavePath(saveName: string): string {\n throw badBorrow('getSavePath');\n }\n getWorldPath(worldName: string): string {\n throw badBorrow('getWorldPath');\n }\n getWorldRevisions(\n worldName: string,\n ): Promise<{ index: number; date: Date; note: string }[]> {\n throw badBorrow('getWorldRevisions');\n }\n loadWorld(worldName: string): Promise<boolean> {\n throw badBorrow('loadWorld');\n }\n loadWorldRevision(worldName: string, revision: number): Promise<boolean> {\n throw badBorrow('loadWorldRevision');\n }\n saveWorldAs(worldName: string): Promise<boolean> {\n throw badBorrow('saveWorldAs');\n }\n saveWorld(): Promise<boolean> {\n throw badBorrow('saveWorld');\n }\n createEmptyWorld(worldName: string): Promise<boolean> {\n throw badBorrow('createEmptyWorld');\n }\n writeSaveData(saveName: string, saveData: WriteSaveObject) {\n throw badBorrow('writeSaveData');\n }\n readSaveData(saveName: string, nobricks?: boolean): ReadSaveObject {\n throw badBorrow('readSaveData');\n }\n loadSaveData(\n saveData: WriteSaveObject,\n options?: { offX?: number; offY?: number; offZ?: number; quiet?: boolean },\n ): Promise<void> {\n throw badBorrow('loadSaveData');\n }\n loadSaveDataOnPlayer(\n saveData: WriteSaveObject,\n player: string | OmeggaPlayer,\n options?: { offX?: number; offY?: number; offZ?: number },\n ): Promise<void> {\n throw badBorrow('loadSaveDataOnPlayer');\n }\n getSaveData(region?: {\n center: [number, number, number];\n extent: [number, number, number];\n }): Promise<ReadSaveObject> {\n throw badBorrow('getSaveData');\n }\n changeMap(map: string): Promise<boolean> {\n throw badBorrow('changeMap');\n }\n getRoleSetup(): BRRoleSetup {\n throw badBorrow('getRoleSetup');\n }\n getRoleAssignments(): BRRoleAssignments {\n throw badBorrow('getRoleAssignments');\n }\n getBanList(): BRBanList {\n throw badBorrow('getBanList');\n }\n getNameCache(): BRPlayerNameCache {\n throw badBorrow('getNameCache');\n }\n}\n\nexport function injectOmeggaPrototypes(\n proxyOmegga: typeof ProxyOmegga,\n omegga: typeof Omegga,\n) {\n // copy prototypes from core omegga to the proxy omegga\n for (const fn in STEAL_PROTOTYPES) {\n proxyOmegga.prototype[fn] = omegga.prototype[fn];\n }\n}\n"],"names":["LogWrangler","commandInjector","Player","player"],"mappings":";;;;;;AA4BO,MAAM,YAAY,CAAC,YAA+C;AAAA,EACvE,sBAAsB,CAAC,OAAO,QAAQ,IAAI,CAAA,MAAK,EAAE,IAAA,CAAK,CAAC;AAAA,EACvD,WAAW;AAAA,IACT;AAAA,MACE,MAAM,OAAO,OAAO,EAAE,GAAG,OAAO,MAAM;AAAA,MACtC,SAAS,OAAO;AAAA,MAChB,SAAS,OAAO;AAAA,MAChB,UAAU,OAAO;AAAA,MACjB,WAAW,OAAO;AAAA,MAClB,MAAM,OAAO;AAAA,MACb,YAAY,OAAO;AAAA,MACnB,YAAY,OAAO;AAAA,MACnB,UAAU,OAAO;AAAA,MACjB,SAAS,OAAO;AAAA,MAChB,UAAU,OAAO;AAAA,MACjB,QAAQ,OAAO;AAAA,MACf,YAAY,OAAO;AAAA,IAAA;AAAA,EACrB;AAEJ;AAGA,MAAM,mBAA6D;AAAA,EACjE,WAAW;AAAA,EACX,SAAS;AAAA,EACT,aAAa;AAAA,EACb,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,aAAa;AAAA,EACb,aAAa;AAAA,EACb,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,aAAa;AAAA,EACb,UAAU;AAAA,EACV,cAAc;AAAA,EACd,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,aAAa;AAAA,EACb,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,cAAc;AAAA,EACd,sBAAsB;AAAA,EACtB,aAAa;AAAA,EACb,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,WAAW;AAAA,EACX,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,uBAAuB;AACzB;AAEA,MAAM,YAAY,CAAC,SACjB,IAAI,MAAM,WAAW,IAAI,0BAA0B;AAK9C,MAAM,oBAAoB,aAAmC;AAAA,EA0BlE,YAAY,MAA8B;AACxC,UAAA;AA1BF,SAAA,eAAe,EAAE,MAAM,GAAG,aAAa,EAAA;AACvC,SAAA,kBAAkB;AA0BhB,SAAK,gBAAgB,QAAQ;AAE7B,SAAK,UAAU;AAEf,SAAK,UAAU;AAEf,SAAK,UAAU,CAAA;AAGf,SAAK,cAAc,IAAIA,YAAAA,QAAY,IAAyB;AAC5D,SAAK,GAAG,QAAQ,KAAK,YAAY,QAAQ;AACzC,SAAK,aAAa,KAAK,YAAY;AACnC,SAAK,aAAa,KAAK,YAAY;AACnC,SAAK,gBAAgB,KAAK,YAAY;AACtC,SAAK,gBAAgB,KAAK,YAAY;AAGtCC,4BAAgB,MAAM,KAAK,WAAW;AAGtC,SAAK,KAAK,aAAa,CAAA,SAAQ;AAC7B,iBAAW,OAAO,MAAM;AACrB,aAAa,GAAG,IAAI,KAAK,GAAG;AAAA,MAC/B;AAAA,IACF,CAAC;AAGD,SAAK,GAAG,QAAQ,CAAA,SAAS,KAAK,OAAO,IAAK;AAC1C,SAAK,GAAG,WAAW,CAAA,YAAY,KAAK,UAAU,OAAQ;AAGtD,SAAK;AAAA,MACH;AAAA,MACA,CAAC,YACE,KAAK,UAAU,QAAQ,IAAI,CAAA,MAAK,IAAIC,OAAAA,QAAO,MAAoB,GAAG,CAAC,CAAC;AAAA,IAAA;AAGzE,SAAK,GAAG,SAAS,CAAC,EAAE,UAAU;AAC5B,WAAK,UAAU;AACf,WAAK,WAAW;AAChB,WAAK,aAAa;AAAA,IACpB,CAAC;AACD,SAAK,GAAG,QAAQ,MAAM;AACpB,WAAK,UAAU;AACf,WAAK,WAAW;AAAA,IAClB,CAAC;AACD,SAAK,GAAG,aAAa,CAAC,EAAE,UAAU;AAChC,WAAK,aAAa;AAAA,IACpB,CAAC;AAAA,EACH;AAAA,EACA,WACE,SACA,UAGM;AACN,UAAM,UAAU,YAAY;AAAA,EAC9B;AAAA,EACA,WACE,SACA,SAQmC;AACnC,UAAM,UAAU,YAAY;AAAA,EAC9B;AAAA,EACA,cACE,KACA,SACA,SAMmC;AACnC,UAAM,UAAU,eAAe;AAAA,EACjC;AAAA,EACA,cAIE,KACA,aACA,eAC8C;AAC9C,UAAM,UAAU,eAAe;AAAA,EACjC;AAAA,EACA,kBAA0C;AACxC,UAAM,UAAU,iBAAiB;AAAA,EACnC;AAAA,EACA,gBAAwC;AACtC,UAAM,UAAU,eAAe;AAAA,EACjC;AAAA,EACA,wBAAmD;AACjD,UAAM,UAAU,uBAAuB;AAAA,EACzC;AAAA,EACA,eAAwC;AACtC,UAAM,UAAU,cAAc;AAAA,EAChC;AAAA,EACA,aAMI;AACF,UAAM,UAAU,YAAY;AAAA,EAC9B;AAAA,EACA,UAAU,QAA8B;AACtC,UAAM,UAAU,WAAW;AAAA,EAC7B;AAAA,EACA,iBAAiB,MAA4B;AAC3C,UAAM,UAAU,kBAAkB;AAAA,EACpC;AAAA,EACA,YAAoB;AAClB,UAAM,UAAU,WAAW;AAAA,EAC7B;AAAA,EACA,aAAa,UAA0B;AACrC,UAAM,UAAU,WAAW;AAAA,EAC7B;AAAA,EACA,QAAQ,WAAkC,UAA0B;AAClE,UAAM,UAAU,SAAS;AAAA,EAC3B;AAAA,EACA,YAAY,QAA+B,SAAuB;AAChE,UAAM,UAAU,aAAa;AAAA,EAC/B;AAAA,EACA,aAAa,OAAe,MAAoB;AAC9C,UAAM,UAAU,cAAc;AAAA,EAChC;AAAA,EACA,eAAe,OAAqB;AAClC,UAAM,UAAU,gBAAgB;AAAA,EAClC;AAAA,EACA,cAAc,OAAqB;AACjC,UAAM,UAAU,eAAe;AAAA,EACjC;AAAA,EACA,kBAAkB,OAAqB;AACrC,UAAM,UAAU,mBAAmB;AAAA,EACrC;AAAA,EACA,aAAa,YAAoB,OAAsB;AACrD,UAAM,UAAU,cAAc;AAAA,EAChC;AAAA,EACA,qBAA+B;AAC7B,UAAM,UAAU,oBAAoB;AAAA,EACtC;AAAA,EACA,mBAAyB;AACvB,UAAM,UAAU,kBAAkB;AAAA,EACpC;AAAA,EACA,gBAAgB,YAAmC;AACjD,UAAM,UAAU,iBAAiB;AAAA,EACnC;AAAA,EACA,qBAAiD;AAC/C,UAAM,UAAU,oBAAoB;AAAA,EACtC;AAAA,EACA,gBAAgB,YAA0B;AACxC,UAAM,UAAU,iBAAiB;AAAA,EACnC;AAAA,EACA,oBAAoB,YAA0B;AAC5C,UAAM,UAAU,qBAAqB;AAAA,EACvC;AAAA,EACA,oBAAoB,QAAiC;AACnD,UAAM,UAAU,qBAAqB;AAAA,EACvC;AAAA,EACA,wBAAkC;AAChC,UAAM,UAAU,uBAAuB;AAAA,EACzC;AAAA,EACA,YAAY,QAAiC,OAAuB;AAClE,UAAM,UAAU,aAAa;AAAA,EAC/B;AAAA,EACA,YACE,QAIA,SAGM;AACN,UAAM,UAAU,aAAa;AAAA,EAC/B;AAAA,EACA,eAAe,OAAuB;AACpC,UAAM,UAAU,gBAAgB;AAAA,EAClC;AAAA,EACA,WAAW,UAAkB,QAAmB;AAC9C,UAAM,UAAU,YAAY;AAAA,EAC9B;AAAA,EACA,gBAAgB,UAAkB,QAA4B;AAC5D,UAAM,UAAU,iBAAiB;AAAA,EACnC;AAAA,EACA,WACE,UACA,SACM;AACN,UAAM,UAAU,YAAY;AAAA,EAC9B;AAAA,EACA,mBACE,UACAC,SACA,SACM;AACN,UAAM,UAAU,oBAAoB;AAAA,EACtC;AAAA,EACA,WAAqB;AACnB,UAAM,UAAU,UAAU;AAAA,EAC5B;AAAA,EACA,YAAsB;AACpB,UAAM,UAAU,WAAW;AAAA,EAC7B;AAAA,EACA,YAAY,UAA0B;AACpC,UAAM,UAAU,aAAa;AAAA,EAC/B;AAAA,EACA,aAAa,WAA2B;AACtC,UAAM,UAAU,cAAc;AAAA,EAChC;AAAA,EACA,kBACE,WACwD;AACxD,UAAM,UAAU,mBAAmB;AAAA,EACrC;AAAA,EACA,UAAU,WAAqC;AAC7C,UAAM,UAAU,WAAW;AAAA,EAC7B;AAAA,EACA,kBAAkB,WAAmB,UAAoC;AACvE,UAAM,UAAU,mBAAmB;AAAA,EACrC;AAAA,EACA,YAAY,WAAqC;AAC/C,UAAM,UAAU,aAAa;AAAA,EAC/B;AAAA,EACA,YAA8B;AAC5B,UAAM,UAAU,WAAW;AAAA,EAC7B;AAAA,EACA,iBAAiB,WAAqC;AACpD,UAAM,UAAU,kBAAkB;AAAA,EACpC;AAAA,EACA,cAAc,UAAkB,UAA2B;AACzD,UAAM,UAAU,eAAe;AAAA,EACjC;AAAA,EACA,aAAa,UAAkB,UAAoC;AACjE,UAAM,UAAU,cAAc;AAAA,EAChC;AAAA,EACA,aACE,UACA,SACe;AACf,UAAM,UAAU,cAAc;AAAA,EAChC;AAAA,EACA,qBACE,UACAA,SACA,SACe;AACf,UAAM,UAAU,sBAAsB;AAAA,EACxC;AAAA,EACA,YAAY,QAGgB;AAC1B,UAAM,UAAU,aAAa;AAAA,EAC/B;AAAA,EACA,UAAU,KAA+B;AACvC,UAAM,UAAU,WAAW;AAAA,EAC7B;AAAA,EACA,eAA4B;AAC1B,UAAM,UAAU,cAAc;AAAA,EAChC;AAAA,EACA,qBAAwC;AACtC,UAAM,UAAU,oBAAoB;AAAA,EACtC;AAAA,EACA,aAAwB;AACtB,UAAM,UAAU,YAAY;AAAA,EAC9B;AAAA,EACA,eAAkC;AAChC,UAAM,UAAU,cAAc;AAAA,EAChC;AACF;AAEO,SAAS,uBACd,aACA,QACA;AAEA,aAAW,MAAM,kBAAkB;AACjC,gBAAY,UAAU,EAAE,IAAI,OAAO,UAAU,EAAE;AAAA,EACjD;AACF;;;;"}
|
|
1
|
+
{"version":3,"file":"proxyOmegga.js","sources":["../../../../src/omegga/plugin/plugin_node_safe/proxyOmegga.ts"],"sourcesContent":["import {\n OmeggaCore,\n OmeggaLike,\n OmeggaPlayer,\n PluginInterop,\n WatcherPattern,\n} from '@/plugin';\nimport { EnvironmentPreset } from '@brickadia/presets';\nimport {\n BRBanList,\n BRPlayerNameCache,\n BRRoleAssignments,\n BRRoleSetup,\n} from '@brickadia/types';\nimport commandInjector from '@omegga/commandInjector';\nimport { ConsoleCommands, resolveConsoleCommands } from '@omegga/commands';\nimport LogWrangler from '@omegga/logWrangler';\nimport Player from '@omegga/player';\nimport Omegga from '@omegga/server';\nimport {\n IGamemode,\n ILogMinigame,\n IMinigameList,\n IPlayerPositions,\n IServerStatus,\n} from '@omegga/types';\nimport { ReadSaveObject, WriteSaveObject } from 'brs-js';\nimport EventEmitter from 'events';\n\n// bootstrap the proxy with initial omegga data\nexport const bootstrap = (omegga: Omegga): Record<string, unknown[]> => ({\n 'plugin:players:raw': [omegga.players.map(p => p.raw())],\n bootstrap: [\n {\n host: Object.freeze({ ...omegga.host }),\n version: omegga.version,\n verbose: omegga.verbose,\n savePath: omegga.savePath,\n worldPath: omegga.worldPath,\n path: omegga.path,\n configPath: omegga.configPath,\n presetPath: omegga.presetPath,\n starting: omegga.starting,\n started: omegga.started,\n stopping: omegga.stopping,\n config: omegga.config,\n currentMap: omegga.currentMap,\n },\n ],\n});\n\n// prototypes that can be directly stolen from omegga\nconst STEAL_PROTOTYPES: Record<keyof Required<OmeggaCore>, true> = {\n broadcast: true,\n whisper: true,\n middlePrint: true,\n getPlayer: true,\n getPlayers: true,\n findPlayerByName: true,\n getHostId: true,\n clearBricks: true,\n clearRegion: true,\n clearAllBricks: true,\n loadBricks: true,\n loadBricksOnPlayer: true,\n saveBricks: true,\n saveBricksAsync: true,\n getSavePath: true,\n getSaves: true,\n getWorldPath: true,\n getWorlds: true,\n getWorldRevisions: true,\n loadWorld: true,\n loadWorldRevision: true,\n saveWorldAs: true,\n saveWorld: true,\n createEmptyWorld: true,\n writeSaveData: true,\n readSaveData: true,\n loadSaveData: true,\n loadSaveDataOnPlayer: true,\n getSaveData: true,\n getRoleSetup: true,\n getRoleAssignments: true,\n getBanList: true,\n getNameCache: true,\n changeMap: true,\n saveMinigame: true,\n deleteMinigame: true,\n resetMinigame: true,\n nextRoundMinigame: true,\n loadMinigame: true,\n getMinigamePresets: true,\n resetEnvironment: true,\n saveEnvironment: true,\n readEnvironmentData: true,\n getEnvironmentData: true,\n loadEnvironment: true,\n loadEnvironmentData: true,\n getEnvironmentPresets: true,\n};\n\nconst badBorrow = (name: string) =>\n new Error(`Method \"${name}\" not properly borrowed.`);\n\n// this is a \"soft\" omegga\n// it is built to mimic the core omegga\n// it does not provide direct write access to\nexport class ProxyOmegga extends EventEmitter implements OmeggaLike {\n _tempCounter = { save: 0, environment: 0 };\n _tempSavePrefix = 'omegga_plugin_temp_';\n\n writeln: (line: string) => void;\n version: number;\n players: Player[];\n\n /** memoized version-resolved console commands ({@link Console}) */\n #console: { version: number; commands: ConsoleCommands };\n\n /** version-resolved Brickadia console command names, nested by namespace */\n get Console(): ConsoleCommands {\n if (this.#console?.version !== this.version)\n this.#console = {\n version: this.version,\n commands: resolveConsoleCommands(this.version),\n };\n return this.#console.commands;\n }\n\n host: { id: string; name: string };\n\n verbose: boolean;\n\n started: boolean;\n starting: boolean;\n stopping: boolean;\n currentMap: string;\n\n configPath: string;\n savePath: string;\n worldPath: string;\n presetPath: string;\n\n logWrangler: LogWrangler;\n\n getPlugin: (name: string) => Promise<PluginInterop>;\n\n constructor(exec: (line: string) => void) {\n super();\n this.setMaxListeners(Infinity);\n\n this.writeln = exec;\n\n this.version = -1;\n\n this.players = [];\n\n // log wrangler wrangles logs... it reads brickadia logs and clumps them together\n this.logWrangler = new LogWrangler(this as unknown as Omegga);\n this.on('line', this.logWrangler.callback);\n this.addMatcher = this.logWrangler.addMatcher;\n this.addWatcher = this.logWrangler.addWatcher;\n this.watchLogArray = this.logWrangler.watchLogArray;\n this.watchLogChunk = this.logWrangler.watchLogChunk;\n\n // inject commands\n commandInjector(this, this.logWrangler);\n\n // blanket apply fields\n this.once('bootstrap', data => {\n for (const key in data) {\n (this as any)[key] = data[key];\n }\n });\n\n // data synchronization\n this.on('host', host => (this.host = host));\n this.on('version', version => (this.version = version));\n\n // create players from raw constructor data\n this.on(\n 'plugin:players:raw',\n (players: [string, string, string, string, string][]) =>\n (this.players = players.map(p => new Player(this as OmeggaLike, ...p))),\n );\n\n this.on('start', ({ map }) => {\n this.started = true;\n this.starting = false;\n this.currentMap = map;\n });\n this.on('exit', () => {\n this.started = false;\n this.starting = false;\n });\n this.on('mapchange', ({ map }) => {\n this.currentMap = map;\n });\n }\n addMatcher<T>(\n pattern: RegExp | ((line: string, match: RegExpMatchArray) => T),\n callback:\n | ((match: RegExpMatchArray) => boolean)\n | ((match: RegExpMatchArray) => T),\n ): void {\n throw badBorrow('addMatcher');\n }\n addWatcher<T = RegExpMatchArray>(\n pattern: RegExp | WatcherPattern<T>,\n options?: {\n timeoutDelay?: number;\n bundle?: boolean;\n debounce?: boolean;\n afterMatchDelay?: number;\n last?: (match: T) => boolean;\n exec?: () => void;\n },\n ): Promise<RegExpMatchArray[] | T[]> {\n throw badBorrow('addWatcher');\n }\n watchLogChunk<T = string>(\n cmd: string,\n pattern: RegExp | WatcherPattern<T>,\n options?: {\n first?: 'index' | ((match: T) => boolean);\n last?: (match: T) => boolean;\n afterMatchDelay?: number;\n timeoutDelay?: number;\n },\n ): Promise<RegExpMatchArray[] | T[]> {\n throw badBorrow('watchLogChunk');\n }\n watchLogArray<\n Item extends Record<string, string> = Record<string, string>,\n Member extends Record<string, string> = Record<string, string>,\n >(\n cmd: string,\n itemPattern: RegExp,\n memberPattern: RegExp,\n ): Promise<{ item: Item; members: Member[] }[]> {\n throw badBorrow('watchLogArray');\n }\n getServerStatus(): Promise<IServerStatus> {\n throw badBorrow('getServerStatus');\n }\n listMinigames(): Promise<IMinigameList> {\n throw badBorrow('listMinigames');\n }\n getAllPlayerPositions(): Promise<IPlayerPositions> {\n throw badBorrow('getAllPlayerPositions');\n }\n getMinigames(): Promise<ILogMinigame[]> {\n throw badBorrow('getMinigames');\n }\n getGamemode(): Promise<IGamemode | null> {\n throw badBorrow('getGamemode');\n }\n getPlayers(): {\n id: string;\n name: string;\n displayName: string;\n controller: string;\n state: string;\n }[] {\n throw badBorrow('getPlayers');\n }\n getPlayer(target: string): OmeggaPlayer {\n throw badBorrow('getPlayer');\n }\n findPlayerByName(name: string): OmeggaPlayer {\n throw badBorrow('findPlayerByName');\n }\n getHostId(): string {\n throw badBorrow('getHostId');\n }\n broadcast(...messages: string[]): void {\n throw badBorrow('broadcast');\n }\n whisper(target: string | OmeggaPlayer, ...messages: string[]): void {\n throw badBorrow('whisper');\n }\n middlePrint(target: string | OmeggaPlayer, message: string): void {\n throw badBorrow('middlePrint');\n }\n saveMinigame(index: number, name: string): void {\n throw badBorrow('saveMinigame');\n }\n deleteMinigame(index: number): void {\n throw badBorrow('deleteMinigame');\n }\n resetMinigame(index: number): void {\n throw badBorrow('resetMinigame');\n }\n nextRoundMinigame(index: number): void {\n throw badBorrow('nextRoundMinigame');\n }\n loadMinigame(presetName: string, owner?: string): void {\n throw badBorrow('loadMinigame');\n }\n getMinigamePresets(): string[] {\n throw badBorrow('getMinigamePresets');\n }\n resetEnvironment(): void {\n throw badBorrow('resetEnvironment');\n }\n saveEnvironment(presetName: string): Promise<void> {\n throw badBorrow('saveEnvironment');\n }\n getEnvironmentData(): Promise<EnvironmentPreset> {\n throw badBorrow('getEnvironmentData');\n }\n loadEnvironment(presetName: string): void {\n throw badBorrow('loadEnvironment');\n }\n readEnvironmentData(presetName: string): void {\n throw badBorrow('readEnvironmentData');\n }\n loadEnvironmentData(preset: EnvironmentPreset): void {\n throw badBorrow('loadEnvironmentData');\n }\n getEnvironmentPresets(): string[] {\n throw badBorrow('getEnvironmentPresets');\n }\n clearBricks(target: string | { id: string }, quiet?: boolean): void {\n throw badBorrow('clearBricks');\n }\n clearRegion(\n region: {\n center: [number, number, number];\n extent: [number, number, number];\n },\n options: {\n target: string | OmeggaPlayer;\n },\n ): void {\n throw badBorrow('clearRegion');\n }\n clearAllBricks(quiet?: boolean): void {\n throw badBorrow('clearAllBricks');\n }\n saveBricks(saveName: string, region?: {}): void {\n throw badBorrow('saveBricks');\n }\n saveBricksAsync(saveName: string, region?: {}): Promise<void> {\n throw badBorrow('saveBricksAsync');\n }\n loadBricks(\n saveName: string,\n options?: { offX?: number; offY?: number; offZ?: number; quiet?: boolean },\n ): void {\n throw badBorrow('loadBricks');\n }\n loadBricksOnPlayer(\n saveName: string,\n player: string | OmeggaPlayer,\n options?: { offX?: number; offY?: number; offZ?: number },\n ): void {\n throw badBorrow('loadBricksOnPlayer');\n }\n getSaves(): string[] {\n throw badBorrow('getSaves');\n }\n getWorlds(): string[] {\n throw badBorrow('getWorlds');\n }\n getSavePath(saveName: string): string {\n throw badBorrow('getSavePath');\n }\n getWorldPath(worldName: string): string {\n throw badBorrow('getWorldPath');\n }\n getWorldRevisions(\n worldName: string,\n ): Promise<{ index: number; date: Date; note: string }[]> {\n throw badBorrow('getWorldRevisions');\n }\n loadWorld(worldName: string): Promise<boolean> {\n throw badBorrow('loadWorld');\n }\n loadWorldRevision(worldName: string, revision: number): Promise<boolean> {\n throw badBorrow('loadWorldRevision');\n }\n saveWorldAs(worldName: string): Promise<boolean> {\n throw badBorrow('saveWorldAs');\n }\n saveWorld(): Promise<boolean> {\n throw badBorrow('saveWorld');\n }\n createEmptyWorld(worldName: string): Promise<boolean> {\n throw badBorrow('createEmptyWorld');\n }\n writeSaveData(saveName: string, saveData: WriteSaveObject) {\n throw badBorrow('writeSaveData');\n }\n readSaveData(saveName: string, nobricks?: boolean): ReadSaveObject {\n throw badBorrow('readSaveData');\n }\n loadSaveData(\n saveData: WriteSaveObject,\n options?: { offX?: number; offY?: number; offZ?: number; quiet?: boolean },\n ): Promise<void> {\n throw badBorrow('loadSaveData');\n }\n loadSaveDataOnPlayer(\n saveData: WriteSaveObject,\n player: string | OmeggaPlayer,\n options?: { offX?: number; offY?: number; offZ?: number },\n ): Promise<void> {\n throw badBorrow('loadSaveDataOnPlayer');\n }\n getSaveData(region?: {\n center: [number, number, number];\n extent: [number, number, number];\n }): Promise<ReadSaveObject> {\n throw badBorrow('getSaveData');\n }\n changeMap(map: string): Promise<boolean> {\n throw badBorrow('changeMap');\n }\n getRoleSetup(): BRRoleSetup {\n throw badBorrow('getRoleSetup');\n }\n getRoleAssignments(): BRRoleAssignments {\n throw badBorrow('getRoleAssignments');\n }\n getBanList(): BRBanList {\n throw badBorrow('getBanList');\n }\n getNameCache(): BRPlayerNameCache {\n throw badBorrow('getNameCache');\n }\n}\n\nexport function injectOmeggaPrototypes(\n proxyOmegga: typeof ProxyOmegga,\n omegga: typeof Omegga,\n) {\n // copy prototypes from core omegga to the proxy omegga\n for (const fn in STEAL_PROTOTYPES) {\n proxyOmegga.prototype[fn] = omegga.prototype[fn];\n }\n}\n"],"names":["LogWrangler","commandInjector","Player","resolveConsoleCommands","player"],"mappings":"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"}
|