@bf6mods/sdk 1.3.0 → 1.5.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/dist/index.js CHANGED
@@ -107,7 +107,7 @@ function FilteredArray(array, cond) {
107
107
  let n = arr.length;
108
108
  for (let i = 0; i < n; i++) {
109
109
  let currentElement = arr[i];
110
- if (cond(currentElement)) mod.AppendToArray(v, currentElement);
110
+ if (cond(currentElement)) v = mod.AppendToArray(v, currentElement);
111
111
  }
112
112
  return v;
113
113
  }
@@ -154,11 +154,11 @@ function Equals(a, b) {
154
154
  return mod.Equals(a, b);
155
155
  }
156
156
  async function WaitUntil(delay, cond) {
157
- let deltaCount = 10;
158
- let deltaWait = delay / deltaCount;
159
- for (let t = 0; t < deltaCount; t++) {
160
- if (!cond()) break;
161
- await mod.Wait(deltaWait);
157
+ const interval = .2;
158
+ const checks = Math.ceil(delay / interval);
159
+ for (let t = 0; t < checks; t++) {
160
+ if (cond()) break;
161
+ await mod.Wait(interval);
162
162
  }
163
163
  }
164
164
  var ConditionState = class {
@@ -216,13 +216,14 @@ function getVehicleCondition(obj, n) {
216
216
  function getGlobalCondition(n) {
217
217
  return globalConditions.getConditionState(n);
218
218
  }
219
- function getPlayersInTeam(team) {
219
+ function getPlayersInTeam(teamObj) {
220
+ const team = mod.GetObjId(teamObj);
220
221
  const allPlayers = mod.AllPlayers();
221
222
  const n = mod.CountOf(allPlayers);
222
223
  let teamMembers = [];
223
224
  for (let i = 0; i < n; i++) {
224
225
  let player = mod.ValueInArray(allPlayers, i);
225
- if (mod.GetTeam(player) == team) teamMembers.push(player);
226
+ if (mod.GetObjId(mod.GetTeam(player)) == team) teamMembers.push(player);
226
227
  }
227
228
  return teamMembers;
228
229
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["playerConditions: Conditions[]","teamConditions: Conditions[]","capturePointConditions: Conditions[]","mcomConditions: Conditions[]","vehicleConditions: Conditions[]","globalConditions: Conditions","widget: mod.UIWidget | undefined","msg","target"],"sources":["../src/config/mutators/index.ts","../src/config/index.ts","../src/modlib/index.ts"],"sourcesContent":["import type { PerTeam } from \"../index.ts\";\n\n/**\n * Determines the Man-Down behavior when a soldier is downed.\n */\nexport enum ManDownExperienceType {\n\tCrawl = 0,\n\tDowned = 1,\n\tInstantDeath = 2,\n}\n\n/**\n * Controls which type of AI to spawn. PvP AI will automatically spawn and can be replaced by human players. PvE AI is a fixed number that cannot be replaced, for Solo or Co-op experiences.\n */\nexport enum AiSpawnType {\n\tNoBots = 0,\n\tBackfill = 2,\n\tStatic = 1,\n}\n\n/**\n * Controls the rules for Squad Spawning, for squad members and squad leaders.\n */\nexport enum SquadSpawnType {\n\tAll = 0,\n\tSquadmatesOnLeader_LeaderNone = 1,\n\tSquadmatesOnLeader_LeaderAll = 2,\n\tDisabled = 2,\n\t// If you know what this is, please create an issue\n\tUndocumneted = 3,\n}\n\n/**\n * Controls what type of scoreboard layout to use.\n */\nexport enum ScoreboardType {\n\tNotSet = 0,\n\tDefaultFAA = 1,\n\tOff = 2,\n\tCustomTwoTeams = 3,\n\tCustomFFA = 4,\n}\n\n/**\n * Determines the behavior of the Ping command.\n */\nexport enum PingBehavior {\n\tPingTargets = 0,\n\tDisabled = 1,\n}\n\nexport enum ModBuilderGameMode {\n\tCustom = 2,\n}\n\n/**\n * Sets the faction for each team.\n */\nexport enum FactionID {\n\tPax = -1865993703,\n\tMapDefault = 0,\n\tNATO = 607944106,\n}\n\n/**\n * Describes all configurable mutators for the game.\n */\nexport type Mutators = {\n\t/**\n\t * Whether AI is allowed to go prone per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isProneAllowed], ...]`\n\t */\n\tAI_ProneAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Maximum number of players allowed per team or globally.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, maxPlayers], ...]`\n\t */\n\tMaxPlayerCount_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Maximum number of AI allowed per team or globally.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, maxAI], ...]`\n\t */\n\tAiMaxCount_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Determines the global AI spawn behavior.\n\t * Possible values depend on the internal AI spawn type enumeration.\n\t * If global: `SpawnType`\n\t * If per team: `[[teamIndex, SpawnType], ...]`\n\t */\n\tAiSpawnType: AiSpawnType;\n\n\t/**\n\t * Multiplies damage taken from falling. Values lower than 1.0 reduce damage, while values greater than 1.0 increase damage.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tFallDamageHeightMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Defines the \"Man Down\" experience type per team or globally.\n\t * If global: `ManDownExperienceType`\n\t * If per team: `[[teamIndex, ManDownExperienceType], ...]`\n\t */\n\tManDownExperienceType_PerTeam: PerTeam<ManDownExperienceType>;\n\n\t/**\n\t * Whether sprint-strafing is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tSprintStrafeAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * The total number of teams supported in this game mode.\n\t */\n\tMaxTeamCount: number;\n\n\t/**\n\t * Whether passengers are allowed in vehicles.\n\t */\n\tVehicle_AllowPassengers: boolean;\n\n\t/**\n\t * Whether AI are allowed to occupy passenger seats in vehicles.\n\t */\n\tAI_Vehicle_AllowAiInPassengerSeats: boolean;\n\n\t/**\n\t * Whether friendly identification (friend/foe visibility)\n\t * is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tFriendlyIdentificationAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether squad revive is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tSquadReviveAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether aim assist snap zoom is enabled globally.\n\t */\n\tAimAssistSnapZoomEnabled: boolean;\n\n\t/**\n\t * Whether prone is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tProneAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether vehicle health regeneration is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tVehicleHealthRegenAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether infinite weapon magazines are enabled per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isEnabled], ...]`\n\t */\n\tInfiniteWeaponMagazines_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether sprinting is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tSprintAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether soldier health regeneration is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tSoldierHealthRegenAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether stationary emplacements (e.g. turrets) are allowed globally.\n\t */\n\tStationaryEmplacementsAllowed: boolean;\n\n\t/**\n\t * Whether sliding is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tSlideAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether the compass is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tCompassAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether the minimap is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tMinimapAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Defines ping behavior per team or globally.\n\t * Likely corresponds to an internal ping mode enumeration.\n\t * If global: `PingBehavior`\n\t * If per team: `[[teamIndex, PingBehavior], ...]`\n\t */\n\tPingBehavior_PerTeam: PerTeam<PingBehavior>;\n\n\t/**\n\t * Whether the HUD (Heads-Up Display) is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tHUDAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Multiplies the soldier's maximum health.\n\t * Values lower than 1.0 reduce health, while values greater than 1.0 increase health.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tSoldierMaxHealthMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies the soldier respawn delay time.\n\t * Values lower than 1.0 shorten respawn time, while values greater than 1.0 increase it.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tSoldierRespawnDelayMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies the maximum vehicle health.\n\t * Values lower than 1.0 reduce health, while values greater than 1.0 increase health.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tVehicleMaxHealthMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies the speed of all projectiles globally.\n\t * Values lower than 1.0 slow down projectiles, while values greater than 1.0 speed them up.\n\t */\n\tProjectileSpeedMultiplier: number;\n\n\t/**\n\t * Multiplies bodyshot damage per team or globally.\n\t * Values lower than 1.0 reduce damage, while values greater than 1.0 increase damage.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tBodyshotMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies headshot damage per team or globally.\n\t * Values lower than 1.0 reduce damage, while values greater than 1.0 increase damage.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tHeadshotMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies damage dealt to vehicles per team or globally.\n\t * Values lower than 1.0 reduce damage, while values greater than 1.0 increase damage.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tVehicleDamageMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies the rate at which vehicles regenerate health per team or globally.\n\t * Values lower than 1.0 slow regeneration, while values greater than 1.0 speed it up.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tVehicleRegenRateMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies the soldier health regeneration rate per team or globally.\n\t * Values lower than 1.0 slow regeneration, while values greater than 1.0 speed it up.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tSoldierRegenRateMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Defines the scoreboard type globally.\n\t * Corresponds to an internal scoreboard display mode enumeration.\n\t */\n\tScoreboardType: ScoreboardType;\n\n\t/**\n\t * Defines the \"Man Down\" experience type for AI per team or globally.\n\t * If global: `ManDownExperienceType`\n\t * If per team: `[[teamIndex, ManDownExperienceType], ...]`\n\t */\n\tAI_ManDownExperienceType_PerTeam: PerTeam<ManDownExperienceType>;\n\n\t/**\n\t * Multiplies AI soldier movement speed per team or globally.\n\t * Values lower than 1.0 reduce speed, while values greater than 1.0 increase speed.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tAI_SoldierMovementSpeedMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Whether AI sprinting is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tAI_SprintAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether AI are allowed to exit vehicles per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tAI_ExitVehiclesAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether infinite weapon ammunition is enabled per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isEnabled], ...]`\n\t */\n\tInfiniteWeaponAmmo_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether AI soldier health regeneration is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tAI_SoldierHealthRegenAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Multiplies AI soldier maximum health per team or globally.\n\t * Values lower than 1.0 reduce health, while values greater than 1.0 increase health.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tAI_SoldierMaxHealthMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies AI soldier health regeneration rate per team or globally.\n\t * Values lower than 1.0 slow regeneration, while values greater than 1.0 speed it up.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tAI_SoldierRegenRateMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies AI damage dealt per team or globally.\n\t * Values lower than 1.0 reduce damage, while values greater than 1.0 increase damage.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tAI_DamageMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Whether aim assist slowdown is enabled globally.\n\t */\n\tAimAssistSlowdownEnabled: boolean;\n\n\t/**\n\t * Multiplies soldier movement speed per team or globally.\n\t * Values lower than 1.0 reduce speed, while values greater than 1.0 increase speed.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tSoldierMovementSpeedMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Whether crosshairs (reticles) are allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tCrosshairsAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Multiplies AI vehicle damage dealt per team or globally.\n\t * Values lower than 1.0 reduce damage, while values greater than 1.0 increase damage.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tAI_VehicleDamageMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Whether AI are allowed to spawn on foot per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tAI_OnFootSpawnAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Defines the AI squad spawn mode per team or globally.\n\t * Corresponds to an internal AI squad spawn behavior enumeration.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, mode], ...]`\n\t */\n\tAI_SquadSpawnMode_PerTeam: PerTeam<SquadSpawnType>;\n\n\t/**\n\t * Defines the squad spawn mode per team or globally.\n\t * Corresponds to an internal squad spawn behavior enumeration.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, mode], ...]`\n\t */\n\tSquadSpawnMode_PerTeam: PerTeam<SquadSpawnType>;\n\n\t/**\n\t * Multiplies AI soldier respawn delay time per team or globally.\n\t * Values lower than 1.0 shorten respawn time, while values greater than 1.0 increase it.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tAI_SoldierRespawnDelayMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Whether friendly fire damage reflection is enabled globally.\n\t */\n\tFriendlyFireDamageReflectionEnabled: boolean;\n\n\t/**\n\t * Defines the current mod builder game mode globally.\n\t * Corresponds to an internal game mode enumeration.\n\t */\n\tModBuilder_GameMode: ModBuilderGameMode;\n\n\t/**\n\t * Multiplies the radius of the aim assist snap capsule globally.\n\t * Values lower than 1.0 reduce radius, while values greater than 1.0 increase radius.\n\t */\n\tAimAssistSnapCapsuleRadiusMultiplier: number;\n\n\t/**\n\t * Maximum number of team kills before friendly fire damage reflection activates.\n\t */\n\tFriendlyFireDamageReflectionMaxTeamKills: number;\n\n\t/**\n\t * Defines the total game time for the Portal experience in minutes.\n\t * Max of 60 minutes\n\t */\n\tfPortalExperienceGameTime: number;\n\n\t/**\n\t * Defines the maximum squad size per team or globally.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, squadSize], ...]`\n\t */\n\tSquadSize_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Whether third-person vehicle camera views are disabled globally.\n\t */\n\tDisableVehicle3p: boolean;\n\n\t/**\n\t * Controls whether reloading a magazine causes the soldier or vehicle to lose any remaining ammo within the currently loaded magazine.\n\t */\n\tReloadWholeWeaponMagazines: boolean;\n\n\t/**\n\t * Controls the degree of feedback given to the player via audio or visual cues.\n\t */\n\tbPortalRestrictedGameFeedback: boolean;\n\n\t/**\n\t * Whether health bars are allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tHealthBarAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether damage numbers (floating hit indicators) are hidden per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isHidden], ...]`\n\t */\n\tHideDamageNumbers_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether hit indicators are allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tHitIndicatorAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether HUD inventory auto-hide is enabled per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isEnabled], ...]`\n\t */\n\tHUDInventoryAutoHide_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether reduced friendly world icons are used globally.\n\t */\n\tUseReducedFriendlyWorldIcon: boolean;\n\n\t/**\n\t * Whether capture point scaling is allowed globally.\n\t */\n\tCapturePointScaleAllowed: boolean;\n\n\t/**\n\t * Whether the kill feed (kill log) is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tKillFeedAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether the squad list UI element is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tSquadListAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether voice-over (VO) communication is restricted globally.\n\t */\n\tbRestrictCommunicationVO: boolean;\n\n\t/**\n\t * Whether UI-based communication (pings, menus, etc.) is restricted globally.\n\t */\n\tbRestrictCommunicationUI: boolean;\n\n\t/**\n\t * Whether player spotting is allowed globally.\n\t */\n\tSpottingAllowed: boolean;\n\n\t/**\n\t * Controls whether AI can navigate the map, turning it off will decrease loading times.\n\t */\n\tPortal_GenerateNavMesh: boolean;\n\n\t/**\n\t * Defines the game mode start timer for spawn balancing, in seconds.\n\t * Note: This is a best guess and is undocumneted currently, if you notice it is something else\n\t * please create an issue\n\t */\n\tSpawnBalancing_GamemodeStartTimer: number;\n\n\t/**\n\t * Defines the player count ratio used for spawn balancing calculations.\n\t * Typically a value between 0.0 and 1.0.\n\t * Note: This is a best guess and is undocumneted currently, if you notice it is something else\n\t * please create an issue\n\t */\n\tSpawnBalancing_GamemodePlayerCountRatio: number;\n\n\t/**\n\t * Specifies the lobby player count threshold used to start a match in Conquest (CQ) game modes.\n\t * The timer will begin counting down once this player count is reached.\n\t * Note: This is a best guess and is undocumented currently; if you notice it behaves differently,\n\t * please create an issue.\n\t */\n\tCQ_iLobbyPlayerCountStartTimer: number;\n\n\t/**\n\t * Specifies the lobby player count threshold used to start a match in Breakthrough (BT) game modes.\n\t * The timer will begin counting down once this player count is reached.\n\t * Note: This is a best guess and is undocumented currently; if you notice it behaves differently,\n\t * please create an issue.\n\t */\n\tBT_iLobbyPlayerCountStartTimer: number;\n\n\t/**\n\t * Specifies the lobby player count threshold used to start a match in Rush game modes.\n\t * The timer will begin counting down once this player count is reached.\n\t * Note: This is a best guess and is undocumented currently; if you notice it behaves differently,\n\t * please create an issue.\n\t */\n\tRush_iLobbyPlayerCountStartTimer: number;\n\n\t/**\n\t * Defines the faction ID per team or globally.\n\t * If global: `FactionID`\n\t * If per team: `[[teamIndex, FactionID], ...]`\n\t */\n\tFactionID_PerTeam: PerTeam<FactionID>;\n\n\t/**\n\t * Whether class-locked weapon loadouts are enabled globally.\n\t */\n\tEnableClassLockedWeaponLoadouts: boolean;\n\n\t/**\n\t * Whether on-foot spawning is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tOnFootSpawnAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether exiting vehicles is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tExitVehiclesAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Multiplies the vehicle spawn delay per team or globally.\n\t * Values lower than 1.0 shorten delay, while values greater than 1.0 increase it.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tVehicleSpawnDelayMultiplier_PerTeam: PerTeam<number>;\n};\n","import type { AssetRestrictions } from \"./asset-restrictions/index.ts\";\nimport type { Mutators } from \"./mutators/index.ts\";\n\nexport * from \"./asset-restrictions/index.ts\";\nexport * from \"./mutators/index.ts\";\n\n/**\n * Represents a value that can either apply globally or per team.\n * - Global: a single scalar (e.g., `true`, `5`, `1.2`)\n * - Per team: an array of `[teamIndex, value]` tuples\n */\nexport type PerTeam<T> = T | [number, T][];\n\nexport enum AttachmentType {\n\tSpatialData = 1,\n\tTypeScript = 2,\n\tStrings = 4,\n}\n\n/**\n * Represents a map resource within the game or editor.\n */\nexport type MapType = {\n\t/**\n\t * Unique identifier for the map.\n\t */\n\tid: string;\n\n\t/**\n\t * Spatial attachment data containing map metadata, versioning,\n\t * and processing information.\n\t */\n\tspatialAttachment: {\n\t\t/**\n\t\t * Unique identifier for the spatial attachment.\n\t\t */\n\t\tid: string;\n\n\t\t/**\n\t\t * Original filename of the attachment.\n\t\t */\n\t\tfilename: string;\n\n\t\t/**\n\t\t * Additional metadata describing the attachment\n\t\t */\n\t\tmetadata: string;\n\n\t\t/**\n\t\t * Version string representing the attachment's iteration or schema version.\n\t\t */\n\t\tversion: string;\n\n\t\t/**\n\t\t * Whether the attachment is processable\n\t\t */\n\t\tisProcessable: boolean;\n\n\t\t/**\n\t\t * Numeric code describing the attachment's current processing status.\n\t\t */\n\t\tprocessingStatus: number;\n\n\t\t/**\n\t\t * Raw data associated with the attachment.\n\t\t * May include both original and compiled forms.\n\t\t */\n\t\tattachmentData: {\n\t\t\t/**\n\t\t\t * This is encoded in base64\n\t\t\t */\n\t\t\toriginal: string;\n\n\t\t\t/**\n\t\t\t * This is encoded in base64\n\t\t\t */\n\t\t\tcompiled: string;\n\t\t};\n\n\t\t/**\n\t\t * Type of attachment\n\t\t */\n\t\tattachmentType: AttachmentType;\n\n\t\t/**\n\t\t * Any errors encountered during processing or validation.\n\t\t */\n\t\terrors: unknown[];\n\t};\n};\n\n/**\n * Represents the workspace structure for a mod or custom experience.\n */\nexport type Workspace = {\n\tmod: {\n\t\t/**\n\t\t * Describes block-based scripting data (e.g., visual logic definitions).\n\t\t */\n\t\tblocks: {\n\t\t\t/**\n\t\t\t * Version number of the block language schema (e.g., Blockly or internal DSL version).\n\t\t\t */\n\t\t\tlanguageVersion: number;\n\n\t\t\t/**\n\t\t\t * Array of block definitions representing visual scripting logic.\n\t\t\t */\n\t\t\tblocks: unknown[];\n\t\t};\n\n\t\t/**\n\t\t * List of variables defined within the workspace.\n\t\t */\n\t\tvariables: {\n\t\t\t/**\n\t\t\t * Human-readable name of the variable.\n\t\t\t */\n\t\t\tname: string;\n\n\t\t\t/**\n\t\t\t * Unique identifier of the variable.\n\t\t\t */\n\t\t\tid: string;\n\n\t\t\t/**\n\t\t\t * Variable type or data category (e.g., \"Global\").\n\t\t\t */\n\t\t\ttype: string;\n\t\t}[];\n\t};\n};\n\n/**\n * Describes the configuration of a single team in the game.\n * Each entry represents a team index and its composition limits.\n */\nexport type TeamComposition = [\n\t/**\n\t * The team index (e.g., 0–3 depending on the number of teams).\n\t */\n\tnumber,\n\t{\n\t\t/**\n\t\t * Maximum number of human players allowed on this team.\n\t\t */\n\t\thumanCapacity: number;\n\n\t\t/**\n\t\t * Maximum number of AI bots allowed on this team.\n\t\t */\n\t\taiCapacity?: number;\n\n\t\t/**\n\t\t * Type of AI assigned to this team.\n\t\t * Unknown what any other value than 1 means. If you are aware, please create an issue\n\t\t */\n\t\taiType?: 0 | 1;\n\t},\n];\n\n/**\n * Represents a collection of attachments associated with a map or project.\n * Each attachment can include original and compiled data, metadata,\n * and information about its processing status.\n */\nexport type Attachment = {\n\t/**\n\t * Unique identifier for this attachment.\n\t */\n\tid: string;\n\n\t/**\n\t * Version string or numeric revision of the attachment.\n\t */\n\tversion: string;\n\n\t/**\n\t * Name of the file represented by this attachment.\n\t */\n\tfilename: string;\n\n\t/**\n\t * Indicates whether this attachment can be processed (compiled or validated).\n\t */\n\tisProcessable: boolean;\n\n\t/**\n\t * Numeric code describing the current processing status of the attachment.\n\t */\n\tprocessingStatus: number;\n\n\t/**\n\t * Container for raw and compiled forms of the attachment data.\n\t */\n\tattachmentData: {\n\t\t/**\n\t\t * Base64-encoded JSON string containing the original (unprocessed) data.\n\t\t */\n\t\toriginal: string;\n\n\t\t/**\n\t\t * Base64-encoded JSON string containing the compiled or processed version.\n\t\t */\n\t\tcompiled: string;\n\t};\n\n\t/**\n\t * Numeric or string identifier describing the type of attachment.\n\t * For example, `1` may represent a map attachment.\n\t */\n\tattachmentType: AttachmentType;\n\n\t/**\n\t * Arbitrary metadata string associated with this attachment.\n\t * May contain additional parameters (e.g., \"mapIdx=5\").\n\t */\n\tmetadata?: string;\n\n\t/**\n\t * Any errors encountered while processing or validating this attachment.\n\t */\n\terrors: unknown[];\n};\n\n/**\n * Represents the configuration structure for a BF6 mod project.\n * This defines all high-level metadata, gameplay modifiers, asset restrictions,\n * and references to related attachments or workspace details.\n */\nexport type ConfigType = {\n\t/**\n\t * Optional set of mutator overrides or customizations.\n\t * Each key corresponds to a mutator category or setting that modifies gameplay rules.\n\t */\n\tmutators?: Partial<Mutators>;\n\n\t/**\n\t * Optional restrictions applied to in-game assets.\n\t * Used to limit or enable specific weapons, vehicles, or classes.\n\t */\n\tassetRestrictions?: Partial<AssetRestrictions>;\n\n\t/**\n\t * Display name of the mod project or configuration.\n\t */\n\tname: string;\n\n\t/**\n\t * Brief description of the mod, shown in the mod browser or editor.\n\t */\n\tdescription: string;\n\n\t/**\n\t * Optional list of maps included in this configuration’s rotation.\n\t * Each entry defines a playable map and its associated parameters.\n\t */\n\tmapRotation?: MapType[];\n\n\t/**\n\t * Optional workspace configuration defining project metadata,\n\t * environment paths, and editor state for the mod.\n\t */\n\tworkspace?: Workspace;\n\n\t/**\n\t * Defines team composition for this configuration.\n\t * IMPORTANT! Note that each teamComposition MUST be 1 greater than the team ID.\n\t */\n\tteamComposition?: TeamComposition[];\n\n\t/**\n\t * Specifies the game mode type this configuration belongs to.\n\t * Usually \"ModBuilderCustom\" for user-created modes.\n\t */\n\tgameMode?: \"ModBuilderCustom\";\n\n\t/**\n\t * Array of attachment objects containing spatial or file data\n\t * such as blueprints, scene files, or custom resource definitions.\n\t */\n\tattachments?: Attachment[];\n};\n","// export * from './store';\n\nexport function Concat(s1: string, s2: string) {\n return s1 + s2;\n}\n\nexport function And(...rest: boolean[]): boolean {\n for (let i = 0; i < rest.length; i++) {\n const cond = rest[i];\n if (!cond) return false;\n }\n return true;\n}\n\ntype ConditionFunction = () => boolean;\n\nexport function AndFn(...rest: ConditionFunction[]): boolean {\n for (let i = 0; i < rest.length; i++) {\n const condFn = rest[i];\n if (!condFn()) return false;\n }\n return true;\n}\n\nexport function getPlayerId(player: mod.Player): number {\n return mod.GetObjId(player);\n}\n\nexport function getTeamId(team: mod.Team): number {\n return mod.GetObjId(team);\n}\n\nexport function ConvertArray(array: mod.Array): any[] {\n let v = [];\n let n = mod.CountOf(array);\n for (let i = 0; i < n; i++) {\n let currentElement = mod.ValueInArray(array, i);\n v.push(currentElement);\n }\n return v;\n}\n\nexport function FilteredArray(array: mod.Array, cond: (currentElement: any) => boolean): mod.Array {\n const arr = ConvertArray(array);\n let v = mod.EmptyArray();\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentElement = arr[i];\n if (cond(currentElement)) mod.AppendToArray(v, currentElement);\n }\n return v;\n}\n\nexport function IndexOfFirstTrue(array: mod.Array, cond: (element: any, arg: any) => boolean, arg: any = null): number {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (cond(currentArrayElement, arg)) return i;\n }\n return -1;\n}\n\nexport function IfThenElse<T>(condition: boolean, ifTrue: () => T, ifFalse: () => T) {\n if (condition) return ifTrue();\n else return ifFalse();\n}\n\nexport function IsTrueForAll(array: mod.Array, condition: (element: any, arg: any) => boolean, arg: any = null) {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (!condition(currentArrayElement, arg)) return false;\n }\n return true;\n}\n\nexport function IsTrueForAny(array: mod.Array, condition: (element: any, arg: any) => boolean, arg: any = null) {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (condition(currentArrayElement, arg)) return true;\n }\n return false;\n}\n\nexport function SortedArray(array: any[], compare: (a: any, b: any) => number) {\n let v1 = array.slice();\n v1.sort(compare);\n let v2 = [];\n for (let e of v1) v2.push(e);\n return v2;\n}\n\nexport function Equals(a: any, b: any) {\n if (a == null || b == null) debugger;\n return mod.Equals(a, b);\n}\n\nexport async function WaitUntil(delay: number, cond: () => boolean) {\n // complete rush hack. this will likely wait way too long and other problems.\n let deltaCount = 10;\n let deltaWait = delay / deltaCount;\n for (let t = 0; t < deltaCount; t++) {\n if (!cond()) break;\n await mod.Wait(deltaWait);\n }\n}\n\nexport class ConditionState {\n lastState: boolean;\n\n constructor() {\n this.lastState = false;\n }\n\n update(newState: boolean): boolean {\n // if the new state is false then reset last state and don't trigger action\n if (!newState) {\n this.lastState = false;\n return false;\n }\n // if last state was already true then don't trigger\n if (this.lastState) return false;\n // if the state just transitioned to true then trigger\n this.lastState = true;\n return true;\n }\n}\n\nclass Conditions {\n constructor() {\n this.conditionStates = [];\n }\n\n conditionStates: ConditionState[];\n\n getConditionState(n: number): ConditionState {\n while (n >= this.conditionStates.length) {\n this.conditionStates.push(new ConditionState());\n }\n return this.conditionStates[n];\n }\n}\n\nlet playerConditions: Conditions[] = [];\nlet teamConditions: Conditions[] = [];\nlet capturePointConditions: Conditions[] = [];\nlet mcomConditions: Conditions[] = [];\nlet vehicleConditions: Conditions[] = [];\nlet globalConditions: Conditions = new Conditions();\n\nfunction getObjectCondition(id: number, objectConditions: Conditions[], n: number) {\n while (id >= objectConditions.length) {\n objectConditions.push(new Conditions());\n }\n let conditions = objectConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getPlayerCondition(obj: mod.Player, n: number) {\n let id = getPlayerId(obj);\n while (id >= playerConditions.length) {\n playerConditions.push(new Conditions());\n }\n let conditions = playerConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getTeamCondition(team: mod.Team, n: number) {\n let id = getTeamId(team);\n while (id >= teamConditions.length) {\n teamConditions.push(new Conditions());\n }\n let conditions = teamConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getCapturePointCondition(obj: mod.CapturePoint, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, capturePointConditions, n);\n}\n\nexport function getMCOMCondition(obj: mod.MCOM, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, mcomConditions, n);\n}\n\nexport function getVehicleCondition(obj: mod.Vehicle, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, vehicleConditions, n);\n}\n\nexport function getGlobalCondition(n: number) {\n return globalConditions.getConditionState(n);\n}\n\nexport function getPlayersInTeam(team: mod.Team) {\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n let teamMembers = [];\n\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n if (mod.GetTeam(player) == team) {\n teamMembers.push(player);\n }\n }\n return teamMembers;\n}\n\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n// Helper functions to create UI from a JSON object tree:\n//-----------------------------------------------------------------------------------------------//\n\ntype UIVector = mod.Vector | number[];\n\ninterface UIParams {\n name: string;\n type: string;\n position: any;\n size: any;\n anchor: mod.UIAnchor;\n parent: mod.UIWidget;\n visible: boolean;\n textLabel: string;\n textColor: UIVector;\n textAlpha: number;\n textSize: number;\n textAnchor: mod.UIAnchor;\n padding: number;\n bgColor: UIVector;\n bgAlpha: number;\n bgFill: mod.UIBgFill;\n imageType: mod.UIImageType;\n imageColor: UIVector;\n imageAlpha: number;\n teamId?: mod.Team;\n playerId?: mod.Player;\n children?: any[];\n buttonEnabled: boolean;\n buttonColorBase: UIVector;\n buttonAlphaBase: number;\n buttonColorDisabled: UIVector;\n buttonAlphaDisabled: number;\n buttonColorPressed: UIVector;\n buttonAlphaPressed: number;\n buttonColorHover: UIVector;\n buttonAlphaHover: number;\n buttonColorFocused: UIVector;\n buttonAlphaFocused: number;\n}\n\nfunction __asModVector(param: number[] | mod.Vector) {\n if (Array.isArray(param)) return mod.CreateVector(param[0], param[1], param.length == 2 ? 0 : param[2]);\n else return param;\n}\n\nfunction __asModMessage(param: string | mod.Message) {\n if (typeof param === 'string') return mod.Message(param);\n return param;\n}\n\nfunction __fillInDefaultArgs(params: UIParams) {\n if (!params.hasOwnProperty('name')) params.name = '';\n if (!params.hasOwnProperty('position')) params.position = mod.CreateVector(0, 0, 0);\n if (!params.hasOwnProperty('size')) params.size = mod.CreateVector(100, 100, 0);\n if (!params.hasOwnProperty('anchor')) params.anchor = mod.UIAnchor.TopLeft;\n if (!params.hasOwnProperty('parent')) params.parent = mod.GetUIRoot();\n if (!params.hasOwnProperty('visible')) params.visible = true;\n if (!params.hasOwnProperty('padding')) params.padding = params.type == 'Container' ? 0 : 8;\n if (!params.hasOwnProperty('bgColor')) params.bgColor = mod.CreateVector(0.25, 0.25, 0.25);\n if (!params.hasOwnProperty('bgAlpha')) params.bgAlpha = 0.5;\n if (!params.hasOwnProperty('bgFill')) params.bgFill = mod.UIBgFill.Solid;\n}\n\nfunction __setNameAndGetWidget(uniqueName: any, params: any) {\n let widget = mod.FindUIWidgetWithName(uniqueName) as mod.UIWidget;\n mod.SetUIWidgetName(widget, params.name);\n return widget;\n}\n\nconst __cUniqueName = '----uniquename----';\n\nfunction __addUIContainer(params: UIParams) {\n __fillInDefaultArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIContainer(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n restrict\n );\n } else {\n mod.AddUIContainer(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill\n );\n }\n let widget = __setNameAndGetWidget(__cUniqueName, params);\n if (params.children) {\n params.children.forEach((childParams: any) => {\n childParams.parent = widget;\n __addUIWidget(childParams);\n });\n }\n return widget;\n}\n\nfunction __fillInDefaultTextArgs(params: UIParams) {\n if (!params.hasOwnProperty('textLabel')) params.textLabel = '';\n if (!params.hasOwnProperty('textSize')) params.textSize = 0;\n if (!params.hasOwnProperty('textColor')) params.textColor = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('textAlpha')) params.textAlpha = 1;\n if (!params.hasOwnProperty('textAnchor')) params.textAnchor = mod.UIAnchor.CenterLeft;\n}\n\nfunction __addUIText(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultTextArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIText(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n __asModMessage(params.textLabel),\n params.textSize,\n __asModVector(params.textColor),\n params.textAlpha,\n params.textAnchor,\n restrict\n );\n } else {\n mod.AddUIText(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n __asModMessage(params.textLabel),\n params.textSize,\n __asModVector(params.textColor),\n params.textAlpha,\n params.textAnchor\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __fillInDefaultImageArgs(params: any) {\n if (!params.hasOwnProperty('imageType')) params.imageType = mod.UIImageType.None;\n if (!params.hasOwnProperty('imageColor')) params.imageColor = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('imageAlpha')) params.imageAlpha = 1;\n}\n\nfunction __addUIImage(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultImageArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIImage(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.imageType,\n __asModVector(params.imageColor),\n params.imageAlpha,\n restrict\n );\n } else {\n mod.AddUIImage(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.imageType,\n __asModVector(params.imageColor),\n params.imageAlpha\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __fillInDefaultArg(params: any, argName: any, defaultValue: any) {\n if (!params.hasOwnProperty(argName)) params[argName] = defaultValue;\n}\n\nfunction __fillInDefaultButtonArgs(params: any) {\n if (!params.hasOwnProperty('buttonEnabled')) params.buttonEnabled = true;\n if (!params.hasOwnProperty('buttonColorBase')) params.buttonColorBase = mod.CreateVector(0.7, 0.7, 0.7);\n if (!params.hasOwnProperty('buttonAlphaBase')) params.buttonAlphaBase = 1;\n if (!params.hasOwnProperty('buttonColorDisabled')) params.buttonColorDisabled = mod.CreateVector(0.2, 0.2, 0.2);\n if (!params.hasOwnProperty('buttonAlphaDisabled')) params.buttonAlphaDisabled = 0.5;\n if (!params.hasOwnProperty('buttonColorPressed')) params.buttonColorPressed = mod.CreateVector(0.25, 0.25, 0.25);\n if (!params.hasOwnProperty('buttonAlphaPressed')) params.buttonAlphaPressed = 1;\n if (!params.hasOwnProperty('buttonColorHover')) params.buttonColorHover = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('buttonAlphaHover')) params.buttonAlphaHover = 1;\n if (!params.hasOwnProperty('buttonColorFocused')) params.buttonColorFocused = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('buttonAlphaFocused')) params.buttonAlphaFocused = 1;\n}\n\nfunction __addUIButton(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultButtonArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIButton(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.buttonEnabled,\n __asModVector(params.buttonColorBase),\n params.buttonAlphaBase,\n __asModVector(params.buttonColorDisabled),\n params.buttonAlphaDisabled,\n __asModVector(params.buttonColorPressed),\n params.buttonAlphaPressed,\n __asModVector(params.buttonColorHover),\n params.buttonAlphaHover,\n __asModVector(params.buttonColorFocused),\n params.buttonAlphaFocused,\n restrict\n );\n } else {\n mod.AddUIButton(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.buttonEnabled,\n __asModVector(params.buttonColorBase),\n params.buttonAlphaBase,\n __asModVector(params.buttonColorDisabled),\n params.buttonAlphaDisabled,\n __asModVector(params.buttonColorPressed),\n params.buttonAlphaPressed,\n __asModVector(params.buttonColorHover),\n params.buttonAlphaHover,\n __asModVector(params.buttonColorFocused),\n params.buttonAlphaFocused\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __addUIWidget(params: UIParams) {\n if (params == null) return undefined;\n if (params.type == 'Container') return __addUIContainer(params);\n else if (params.type == 'Text') return __addUIText(params);\n else if (params.type == 'Image') return __addUIImage(params);\n else if (params.type == 'Button') return __addUIButton(params);\n return undefined;\n}\n\nexport function ParseUI(...params: any[]) {\n let widget: mod.UIWidget | undefined;\n for (let a = 0; a < params.length; a++) {\n widget = __addUIWidget(params[a] as UIParams);\n }\n return widget;\n}\n\nexport function DisplayCustomNotificationMessage(msg: mod.Message, custom: mod.CustomNotificationSlots, duration: number, target?: mod.Player | mod.Team) {\n const CreateHeader = async (widgetId: string, msg: mod.Message, targetPlayer: mod.Player, slot: number) => {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(50, 250 + slot * (40 + 5), 0),\n mod.CreateVector(250, 60, 0),\n mod.UIAnchor.TopRight,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n msg,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n targetPlayer\n );\n if (duration > 0) {\n await mod.Wait(duration);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n }\n };\n const CreateSubText = async (widgetId: string, msg: mod.Message, targetPlayer: mod.Player, slot: number) => {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(85, 270 + slot * (40 + 3), 0),\n mod.CreateVector(125, 40, 0),\n mod.UIAnchor.TopRight,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n msg,\n 20,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n targetPlayer\n );\n if (duration > 0) {\n await mod.Wait(duration);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n }\n };\n const createNotificationFunction = custom < 1 ? CreateHeader : CreateSubText;\n\n if (target) {\n // if target is player, fill message in their slot\n if (mod.IsType(target, mod.Types.Player)) {\n const widgetId = custom + String(target);\n createNotificationFunction(widgetId, msg, target as mod.Player, custom);\n }\n // if target is team, fill message in slot for all players on team\n else if (mod.IsType(target, mod.Types.Team)) {\n const teamMates = getPlayersInTeam(target as mod.Team);\n teamMates.forEach((player) => {\n const widgetId = custom + String(player);\n createNotificationFunction(widgetId, msg, player, custom);\n });\n }\n } else {\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n const widgetId = custom + String(player);\n createNotificationFunction(widgetId, msg, player, custom);\n }\n }\n}\n\nexport function ShowEventGameModeMessage(event: mod.Message, target?: mod.Player | mod.Team) {\n //TODO: restore these once DisplayGameModeMessage is fixed\n // if (target) {\n // mod.DisplayGameModeMessage(event, target as mod.Player );\n // } else{\n // mod.DisplayGameModeMessage(event);\n // }\n\n const MakeShiftDisplayGameModeMessage = async (message: mod.Message, target?: mod.Player | mod.Team) => {\n const widgetId = 'GameModeMessage';\n if (target) {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(0, 0, 0),\n mod.CreateVector(2500, 80, 0),\n mod.UIAnchor.TopCenter,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n message,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n target as mod.Player\n );\n } else {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(0, 0, 0),\n mod.CreateVector(2500, 80, 0),\n mod.UIAnchor.TopCenter,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n message,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center\n );\n }\n\n await mod.Wait(6);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n };\n\n if (target) {\n MakeShiftDisplayGameModeMessage(event, target as mod.Player);\n } else {\n MakeShiftDisplayGameModeMessage(event);\n }\n}\n\nexport function ShowHighlightedGameModeMessage(event: mod.Message, target?: mod.Player | mod.Team) {\n if (target) {\n mod.DisplayHighlightedWorldLogMessage(event, target as mod.Player);\n } else {\n mod.DisplayHighlightedWorldLogMessage(event);\n }\n}\n\nexport function ShowNotificationMessage(msg: mod.Message, target?: mod.Player | mod.Team) {\n if (target) {\n mod.DisplayNotificationMessage(msg, target as mod.Player);\n } else {\n mod.DisplayNotificationMessage(msg);\n }\n}\n\nexport function ClearAllCustomNotificationMessages(target: mod.Player) {\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.HeaderText, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText1, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText2, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText3, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText4, target);\n } catch {}\n}\n\nexport function ClearCustomNotificationMessage(custom: mod.CustomNotificationSlots, target?: mod.Player | mod.Team) {\n try {\n if (target) {\n // if target is player, just delete message in their slot\n if (mod.IsType(target, mod.Types.Player)) {\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(target as mod.Player)));\n }\n // if target is team, delete message in slot for all players on team\n else if (mod.IsType(target, mod.Types.Team)) {\n const teamMembers = getPlayersInTeam(target as mod.Team);\n for (let i = 0; i < teamMembers.length; i++) {\n let player = teamMembers[i];\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(player)));\n }\n }\n } else {\n // if no target, delete for all players\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(player)));\n }\n }\n } catch {\n console.error('Could not clear custom message for specified target(s)');\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["playerConditions: Conditions[]","teamConditions: Conditions[]","capturePointConditions: Conditions[]","mcomConditions: Conditions[]","vehicleConditions: Conditions[]","globalConditions: Conditions","widget: mod.UIWidget | undefined","msg","target"],"sources":["../src/config/mutators/index.ts","../src/config/index.ts","../src/modlib/index.ts"],"sourcesContent":["import type { PerTeam } from \"../index.ts\";\n\n/**\n * Determines the Man-Down behavior when a soldier is downed.\n */\nexport enum ManDownExperienceType {\n\tCrawl = 0,\n\tDowned = 1,\n\tInstantDeath = 2,\n}\n\n/**\n * Controls which type of AI to spawn. PvP AI will automatically spawn and can be replaced by human players. PvE AI is a fixed number that cannot be replaced, for Solo or Co-op experiences.\n */\nexport enum AiSpawnType {\n\tNoBots = 0,\n\tBackfill = 2,\n\tStatic = 1,\n}\n\n/**\n * Controls the rules for Squad Spawning, for squad members and squad leaders.\n */\nexport enum SquadSpawnType {\n\tAll = 0,\n\tSquadmatesOnLeader_LeaderNone = 1,\n\tSquadmatesOnLeader_LeaderAll = 2,\n\tDisabled = 2,\n\t// If you know what this is, please create an issue\n\tUndocumneted = 3,\n}\n\n/**\n * Controls what type of scoreboard layout to use.\n */\nexport enum ScoreboardType {\n\tNotSet = 0,\n\tDefaultFAA = 1,\n\tOff = 2,\n\tCustomTwoTeams = 3,\n\tCustomFFA = 4,\n}\n\n/**\n * Determines the behavior of the Ping command.\n */\nexport enum PingBehavior {\n\tPingTargets = 0,\n\tDisabled = 1,\n}\n\nexport enum ModBuilderGameMode {\n\tCustom = 2,\n}\n\n/**\n * Sets the faction for each team.\n */\nexport enum FactionID {\n\tPax = -1865993703,\n\tMapDefault = 0,\n\tNATO = 607944106,\n}\n\n/**\n * Describes all configurable mutators for the game.\n */\nexport type Mutators = {\n\t/**\n\t * Whether AI is allowed to go prone per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isProneAllowed], ...]`\n\t */\n\tAI_ProneAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Maximum number of players allowed per team or globally.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, maxPlayers], ...]`\n\t */\n\tMaxPlayerCount_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Maximum number of AI allowed per team or globally.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, maxAI], ...]`\n\t */\n\tAiMaxCount_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Determines the global AI spawn behavior.\n\t * Possible values depend on the internal AI spawn type enumeration.\n\t * If global: `SpawnType`\n\t * If per team: `[[teamIndex, SpawnType], ...]`\n\t */\n\tAiSpawnType: AiSpawnType;\n\n\t/**\n\t * Multiplies damage taken from falling. Values lower than 1.0 reduce damage, while values greater than 1.0 increase damage.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tFallDamageHeightMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Defines the \"Man Down\" experience type per team or globally.\n\t * If global: `ManDownExperienceType`\n\t * If per team: `[[teamIndex, ManDownExperienceType], ...]`\n\t */\n\tManDownExperienceType_PerTeam: PerTeam<ManDownExperienceType>;\n\n\t/**\n\t * Whether sprint-strafing is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tSprintStrafeAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * The total number of teams supported in this game mode.\n\t */\n\tMaxTeamCount: number;\n\n\t/**\n\t * Whether passengers are allowed in vehicles.\n\t */\n\tVehicle_AllowPassengers: boolean;\n\n\t/**\n\t * Whether AI are allowed to occupy passenger seats in vehicles.\n\t */\n\tAI_Vehicle_AllowAiInPassengerSeats: boolean;\n\n\t/**\n\t * Whether friendly identification (friend/foe visibility)\n\t * is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tFriendlyIdentificationAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether squad revive is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tSquadReviveAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether aim assist snap zoom is enabled globally.\n\t */\n\tAimAssistSnapZoomEnabled: boolean;\n\n\t/**\n\t * Whether prone is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tProneAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether vehicle health regeneration is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tVehicleHealthRegenAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether infinite weapon magazines are enabled per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isEnabled], ...]`\n\t */\n\tInfiniteWeaponMagazines_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether sprinting is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tSprintAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether soldier health regeneration is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tSoldierHealthRegenAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether stationary emplacements (e.g. turrets) are allowed globally.\n\t */\n\tStationaryEmplacementsAllowed: boolean;\n\n\t/**\n\t * Whether sliding is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tSlideAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether the compass is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tCompassAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether the minimap is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tMinimapAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Defines ping behavior per team or globally.\n\t * Likely corresponds to an internal ping mode enumeration.\n\t * If global: `PingBehavior`\n\t * If per team: `[[teamIndex, PingBehavior], ...]`\n\t */\n\tPingBehavior_PerTeam: PerTeam<PingBehavior>;\n\n\t/**\n\t * Whether the HUD (Heads-Up Display) is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tHUDAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Multiplies the soldier's maximum health.\n\t * Values lower than 1.0 reduce health, while values greater than 1.0 increase health.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tSoldierMaxHealthMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies the soldier respawn delay time.\n\t * Values lower than 1.0 shorten respawn time, while values greater than 1.0 increase it.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tSoldierRespawnDelayMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies the maximum vehicle health.\n\t * Values lower than 1.0 reduce health, while values greater than 1.0 increase health.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tVehicleMaxHealthMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies the speed of all projectiles globally.\n\t * Values lower than 1.0 slow down projectiles, while values greater than 1.0 speed them up.\n\t */\n\tProjectileSpeedMultiplier: number;\n\n\t/**\n\t * Multiplies bodyshot damage per team or globally.\n\t * Values lower than 1.0 reduce damage, while values greater than 1.0 increase damage.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tBodyshotMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies headshot damage per team or globally.\n\t * Values lower than 1.0 reduce damage, while values greater than 1.0 increase damage.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tHeadshotMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies damage dealt to vehicles per team or globally.\n\t * Values lower than 1.0 reduce damage, while values greater than 1.0 increase damage.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tVehicleDamageMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies the rate at which vehicles regenerate health per team or globally.\n\t * Values lower than 1.0 slow regeneration, while values greater than 1.0 speed it up.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tVehicleRegenRateMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies the soldier health regeneration rate per team or globally.\n\t * Values lower than 1.0 slow regeneration, while values greater than 1.0 speed it up.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tSoldierRegenRateMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Defines the scoreboard type globally.\n\t * Corresponds to an internal scoreboard display mode enumeration.\n\t */\n\tScoreboardType: ScoreboardType;\n\n\t/**\n\t * Defines the \"Man Down\" experience type for AI per team or globally.\n\t * If global: `ManDownExperienceType`\n\t * If per team: `[[teamIndex, ManDownExperienceType], ...]`\n\t */\n\tAI_ManDownExperienceType_PerTeam: PerTeam<ManDownExperienceType>;\n\n\t/**\n\t * Multiplies AI soldier movement speed per team or globally.\n\t * Values lower than 1.0 reduce speed, while values greater than 1.0 increase speed.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tAI_SoldierMovementSpeedMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Whether AI sprinting is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tAI_SprintAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether AI are allowed to exit vehicles per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tAI_ExitVehiclesAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether infinite weapon ammunition is enabled per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isEnabled], ...]`\n\t */\n\tInfiniteWeaponAmmo_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether AI soldier health regeneration is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tAI_SoldierHealthRegenAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Multiplies AI soldier maximum health per team or globally.\n\t * Values lower than 1.0 reduce health, while values greater than 1.0 increase health.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tAI_SoldierMaxHealthMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies AI soldier health regeneration rate per team or globally.\n\t * Values lower than 1.0 slow regeneration, while values greater than 1.0 speed it up.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tAI_SoldierRegenRateMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Multiplies AI damage dealt per team or globally.\n\t * Values lower than 1.0 reduce damage, while values greater than 1.0 increase damage.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tAI_DamageMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Whether aim assist slowdown is enabled globally.\n\t */\n\tAimAssistSlowdownEnabled: boolean;\n\n\t/**\n\t * Multiplies soldier movement speed per team or globally.\n\t * Values lower than 1.0 reduce speed, while values greater than 1.0 increase speed.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tSoldierMovementSpeedMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Whether crosshairs (reticles) are allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tCrosshairsAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Multiplies AI vehicle damage dealt per team or globally.\n\t * Values lower than 1.0 reduce damage, while values greater than 1.0 increase damage.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tAI_VehicleDamageMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Whether AI are allowed to spawn on foot per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tAI_OnFootSpawnAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Defines the AI squad spawn mode per team or globally.\n\t * Corresponds to an internal AI squad spawn behavior enumeration.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, mode], ...]`\n\t */\n\tAI_SquadSpawnMode_PerTeam: PerTeam<SquadSpawnType>;\n\n\t/**\n\t * Defines the squad spawn mode per team or globally.\n\t * Corresponds to an internal squad spawn behavior enumeration.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, mode], ...]`\n\t */\n\tSquadSpawnMode_PerTeam: PerTeam<SquadSpawnType>;\n\n\t/**\n\t * Multiplies AI soldier respawn delay time per team or globally.\n\t * Values lower than 1.0 shorten respawn time, while values greater than 1.0 increase it.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tAI_SoldierRespawnDelayMultiplier_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Whether friendly fire damage reflection is enabled globally.\n\t */\n\tFriendlyFireDamageReflectionEnabled: boolean;\n\n\t/**\n\t * Defines the current mod builder game mode globally.\n\t * Corresponds to an internal game mode enumeration.\n\t */\n\tModBuilder_GameMode: ModBuilderGameMode;\n\n\t/**\n\t * Multiplies the radius of the aim assist snap capsule globally.\n\t * Values lower than 1.0 reduce radius, while values greater than 1.0 increase radius.\n\t */\n\tAimAssistSnapCapsuleRadiusMultiplier: number;\n\n\t/**\n\t * Maximum number of team kills before friendly fire damage reflection activates.\n\t */\n\tFriendlyFireDamageReflectionMaxTeamKills: number;\n\n\t/**\n\t * Defines the total game time for the Portal experience in minutes.\n\t * Max of 60 minutes\n\t */\n\tfPortalExperienceGameTime: number;\n\n\t/**\n\t * Defines the maximum squad size per team or globally.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, squadSize], ...]`\n\t */\n\tSquadSize_PerTeam: PerTeam<number>;\n\n\t/**\n\t * Whether third-person vehicle camera views are disabled globally.\n\t */\n\tDisableVehicle3p: boolean;\n\n\t/**\n\t * Controls whether reloading a magazine causes the soldier or vehicle to lose any remaining ammo within the currently loaded magazine.\n\t */\n\tReloadWholeWeaponMagazines: boolean;\n\n\t/**\n\t * Controls the degree of feedback given to the player via audio or visual cues.\n\t */\n\tbPortalRestrictedGameFeedback: boolean;\n\n\t/**\n\t * Whether health bars are allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tHealthBarAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether damage numbers (floating hit indicators) are hidden per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isHidden], ...]`\n\t */\n\tHideDamageNumbers_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether hit indicators are allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tHitIndicatorAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether HUD inventory auto-hide is enabled per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isEnabled], ...]`\n\t */\n\tHUDInventoryAutoHide_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether reduced friendly world icons are used globally.\n\t */\n\tUseReducedFriendlyWorldIcon: boolean;\n\n\t/**\n\t * Whether capture point scaling is allowed globally.\n\t */\n\tCapturePointScaleAllowed: boolean;\n\n\t/**\n\t * Whether the kill feed (kill log) is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tKillFeedAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether the squad list UI element is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tSquadListAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether voice-over (VO) communication is restricted globally.\n\t */\n\tbRestrictCommunicationVO: boolean;\n\n\t/**\n\t * Whether UI-based communication (pings, menus, etc.) is restricted globally.\n\t */\n\tbRestrictCommunicationUI: boolean;\n\n\t/**\n\t * Whether player spotting is allowed globally.\n\t */\n\tSpottingAllowed: boolean;\n\n\t/**\n\t * Controls whether AI can navigate the map, turning it off will decrease loading times.\n\t */\n\tPortal_GenerateNavMesh: boolean;\n\n\t/**\n\t * Defines the game mode start timer for spawn balancing, in seconds.\n\t * Note: This is a best guess and is undocumneted currently, if you notice it is something else\n\t * please create an issue\n\t */\n\tSpawnBalancing_GamemodeStartTimer: number;\n\n\t/**\n\t * Defines the player count ratio used for spawn balancing calculations.\n\t * Typically a value between 0.0 and 1.0.\n\t * Note: This is a best guess and is undocumneted currently, if you notice it is something else\n\t * please create an issue\n\t */\n\tSpawnBalancing_GamemodePlayerCountRatio: number;\n\n\t/**\n\t * Specifies the lobby player count threshold used to start a match in Conquest (CQ) game modes.\n\t * The timer will begin counting down once this player count is reached.\n\t * Note: This is a best guess and is undocumented currently; if you notice it behaves differently,\n\t * please create an issue.\n\t */\n\tCQ_iLobbyPlayerCountStartTimer: number;\n\n\t/**\n\t * Specifies the lobby player count threshold used to start a match in Breakthrough (BT) game modes.\n\t * The timer will begin counting down once this player count is reached.\n\t * Note: This is a best guess and is undocumented currently; if you notice it behaves differently,\n\t * please create an issue.\n\t */\n\tBT_iLobbyPlayerCountStartTimer: number;\n\n\t/**\n\t * Specifies the lobby player count threshold used to start a match in Rush game modes.\n\t * The timer will begin counting down once this player count is reached.\n\t * Note: This is a best guess and is undocumented currently; if you notice it behaves differently,\n\t * please create an issue.\n\t */\n\tRush_iLobbyPlayerCountStartTimer: number;\n\n\t/**\n\t * Defines the faction ID per team or globally.\n\t * If global: `FactionID`\n\t * If per team: `[[teamIndex, FactionID], ...]`\n\t */\n\tFactionID_PerTeam: PerTeam<FactionID>;\n\n\t/**\n\t * Whether class-locked weapon loadouts are enabled globally.\n\t */\n\tEnableClassLockedWeaponLoadouts: boolean;\n\n\t/**\n\t * Whether on-foot spawning is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tOnFootSpawnAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Whether exiting vehicles is allowed per team or globally.\n\t * If global: `true | false`\n\t * If per team: `[[teamIndex, isAllowed], ...]`\n\t */\n\tExitVehiclesAllowed_PerTeam: PerTeam<boolean>;\n\n\t/**\n\t * Multiplies the vehicle spawn delay per team or globally.\n\t * Values lower than 1.0 shorten delay, while values greater than 1.0 increase it.\n\t * If global: `number`\n\t * If per team: `[[teamIndex, multiplier], ...]`\n\t */\n\tVehicleSpawnDelayMultiplier_PerTeam: PerTeam<number>;\n};\n","import type { AssetRestrictions } from \"./asset-restrictions/index.ts\";\nimport type { Mutators } from \"./mutators/index.ts\";\n\nexport * from \"./asset-restrictions/index.ts\";\nexport * from \"./mutators/index.ts\";\n\n/**\n * Represents a value that can either apply globally or per team.\n * - Global: a single scalar (e.g., `true`, `5`, `1.2`)\n * - Per team: an array of `[teamIndex, value]` tuples\n */\nexport type PerTeam<T> = T | [number, T][];\n\nexport enum AttachmentType {\n\tSpatialData = 1,\n\tTypeScript = 2,\n\tStrings = 4,\n}\n\n/**\n * Represents a map resource within the game or editor.\n */\nexport type MapType = {\n\t/**\n\t * Unique identifier for the map.\n\t */\n\tid: string;\n\n\t/**\n\t * Spatial attachment data containing map metadata, versioning,\n\t * and processing information.\n\t */\n\tspatialAttachment: {\n\t\t/**\n\t\t * Unique identifier for the spatial attachment.\n\t\t */\n\t\tid: string;\n\n\t\t/**\n\t\t * Original filename of the attachment.\n\t\t */\n\t\tfilename: string;\n\n\t\t/**\n\t\t * Additional metadata describing the attachment\n\t\t */\n\t\tmetadata: string;\n\n\t\t/**\n\t\t * Version string representing the attachment's iteration or schema version.\n\t\t */\n\t\tversion: string;\n\n\t\t/**\n\t\t * Whether the attachment is processable\n\t\t */\n\t\tisProcessable: boolean;\n\n\t\t/**\n\t\t * Numeric code describing the attachment's current processing status.\n\t\t */\n\t\tprocessingStatus: number;\n\n\t\t/**\n\t\t * Raw data associated with the attachment.\n\t\t * May include both original and compiled forms.\n\t\t */\n\t\tattachmentData: {\n\t\t\t/**\n\t\t\t * This is encoded in base64\n\t\t\t */\n\t\t\toriginal: string;\n\n\t\t\t/**\n\t\t\t * This is encoded in base64\n\t\t\t */\n\t\t\tcompiled: string;\n\t\t};\n\n\t\t/**\n\t\t * Type of attachment\n\t\t */\n\t\tattachmentType: AttachmentType;\n\n\t\t/**\n\t\t * Any errors encountered during processing or validation.\n\t\t */\n\t\terrors: unknown[];\n\t};\n};\n\n/**\n * Represents the workspace structure for a mod or custom experience.\n */\nexport type Workspace = {\n\tmod: {\n\t\t/**\n\t\t * Describes block-based scripting data (e.g., visual logic definitions).\n\t\t */\n\t\tblocks: {\n\t\t\t/**\n\t\t\t * Version number of the block language schema (e.g., Blockly or internal DSL version).\n\t\t\t */\n\t\t\tlanguageVersion: number;\n\n\t\t\t/**\n\t\t\t * Array of block definitions representing visual scripting logic.\n\t\t\t */\n\t\t\tblocks: unknown[];\n\t\t};\n\n\t\t/**\n\t\t * List of variables defined within the workspace.\n\t\t */\n\t\tvariables: {\n\t\t\t/**\n\t\t\t * Human-readable name of the variable.\n\t\t\t */\n\t\t\tname: string;\n\n\t\t\t/**\n\t\t\t * Unique identifier of the variable.\n\t\t\t */\n\t\t\tid: string;\n\n\t\t\t/**\n\t\t\t * Variable type or data category (e.g., \"Global\").\n\t\t\t */\n\t\t\ttype: string;\n\t\t}[];\n\t};\n};\n\n/**\n * Describes the configuration of a single team in the game.\n * Each entry represents a team index and its composition limits.\n */\nexport type TeamComposition = [\n\t/**\n\t * The team index (e.g., 0–3 depending on the number of teams).\n\t */\n\tnumber,\n\t{\n\t\t/**\n\t\t * Maximum number of human players allowed on this team.\n\t\t */\n\t\thumanCapacity: number;\n\n\t\t/**\n\t\t * Maximum number of AI bots allowed on this team.\n\t\t */\n\t\taiCapacity?: number;\n\n\t\t/**\n\t\t * Type of AI assigned to this team.\n\t\t * Unknown what any other value than 1 means. If you are aware, please create an issue\n\t\t */\n\t\taiType?: 0 | 1;\n\t},\n];\n\n/**\n * Represents a collection of attachments associated with a map or project.\n * Each attachment can include original and compiled data, metadata,\n * and information about its processing status.\n */\nexport type Attachment = {\n\t/**\n\t * Unique identifier for this attachment.\n\t */\n\tid: string;\n\n\t/**\n\t * Version string or numeric revision of the attachment.\n\t */\n\tversion: string;\n\n\t/**\n\t * Name of the file represented by this attachment.\n\t */\n\tfilename: string;\n\n\t/**\n\t * Indicates whether this attachment can be processed (compiled or validated).\n\t */\n\tisProcessable: boolean;\n\n\t/**\n\t * Numeric code describing the current processing status of the attachment.\n\t */\n\tprocessingStatus: number;\n\n\t/**\n\t * Container for raw and compiled forms of the attachment data.\n\t */\n\tattachmentData: {\n\t\t/**\n\t\t * Base64-encoded JSON string containing the original (unprocessed) data.\n\t\t */\n\t\toriginal: string;\n\n\t\t/**\n\t\t * Base64-encoded JSON string containing the compiled or processed version.\n\t\t */\n\t\tcompiled: string;\n\t};\n\n\t/**\n\t * Numeric or string identifier describing the type of attachment.\n\t * For example, `1` may represent a map attachment.\n\t */\n\tattachmentType: AttachmentType;\n\n\t/**\n\t * Arbitrary metadata string associated with this attachment.\n\t * May contain additional parameters (e.g., \"mapIdx=5\").\n\t */\n\tmetadata?: string;\n\n\t/**\n\t * Any errors encountered while processing or validating this attachment.\n\t */\n\terrors: unknown[];\n};\n\n/**\n * Represents the configuration structure for a BF6 mod project.\n * This defines all high-level metadata, gameplay modifiers, asset restrictions,\n * and references to related attachments or workspace details.\n */\nexport type ConfigType = {\n\t/**\n\t * Optional set of mutator overrides or customizations.\n\t * Each key corresponds to a mutator category or setting that modifies gameplay rules.\n\t */\n\tmutators?: Partial<Mutators>;\n\n\t/**\n\t * Optional restrictions applied to in-game assets.\n\t * Used to limit or enable specific weapons, vehicles, or classes.\n\t */\n\tassetRestrictions?: Partial<AssetRestrictions>;\n\n\t/**\n\t * Display name of the mod project or configuration.\n\t */\n\tname: string;\n\n\t/**\n\t * Brief description of the mod, shown in the mod browser or editor.\n\t */\n\tdescription: string;\n\n\t/**\n\t * Optional list of maps included in this configuration’s rotation.\n\t * Each entry defines a playable map and its associated parameters.\n\t */\n\tmapRotation?: MapType[];\n\n\t/**\n\t * Optional workspace configuration defining project metadata,\n\t * environment paths, and editor state for the mod.\n\t */\n\tworkspace?: Workspace;\n\n\t/**\n\t * Defines team composition for this configuration.\n\t * IMPORTANT! Note that each teamComposition MUST be 1 greater than the team ID.\n\t */\n\tteamComposition?: TeamComposition[];\n\n\t/**\n\t * Specifies the game mode type this configuration belongs to.\n\t * Usually \"ModBuilderCustom\" for user-created modes.\n\t */\n\tgameMode?: \"ModBuilderCustom\";\n\n\t/**\n\t * Array of attachment objects containing spatial or file data\n\t * such as blueprints, scene files, or custom resource definitions.\n\t */\n\tattachments?: Attachment[];\n};\n","// export * from './store';\n\nexport function Concat(s1: string, s2: string) {\n return s1 + s2;\n}\n\nexport function And(...rest: boolean[]): boolean {\n for (let i = 0; i < rest.length; i++) {\n const cond = rest[i];\n if (!cond) return false;\n }\n return true;\n}\n\ntype ConditionFunction = () => boolean;\n\nexport function AndFn(...rest: ConditionFunction[]): boolean {\n for (let i = 0; i < rest.length; i++) {\n const condFn = rest[i];\n if (!condFn()) return false;\n }\n return true;\n}\n\nexport function getPlayerId(player: mod.Player): number {\n return mod.GetObjId(player);\n}\n\nexport function getTeamId(team: mod.Team): number {\n return mod.GetObjId(team);\n}\n\nexport function ConvertArray(array: mod.Array): any[] {\n let v = [];\n let n = mod.CountOf(array);\n for (let i = 0; i < n; i++) {\n let currentElement = mod.ValueInArray(array, i);\n v.push(currentElement);\n }\n return v;\n}\n\nexport function FilteredArray(array: mod.Array, cond: (currentElement: any) => boolean): mod.Array {\n const arr = ConvertArray(array);\n let v = mod.EmptyArray();\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentElement = arr[i];\n if (cond(currentElement)) v = mod.AppendToArray(v, currentElement);\n }\n return v;\n}\n\nexport function IndexOfFirstTrue(array: mod.Array, cond: (element: any, arg: any) => boolean, arg: any = null): number {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (cond(currentArrayElement, arg)) return i;\n }\n return -1;\n}\n\nexport function IfThenElse<T>(condition: boolean, ifTrue: () => T, ifFalse: () => T) {\n if (condition) return ifTrue();\n else return ifFalse();\n}\n\nexport function IsTrueForAll(array: mod.Array, condition: (element: any, arg: any) => boolean, arg: any = null) {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (!condition(currentArrayElement, arg)) return false;\n }\n return true;\n}\n\nexport function IsTrueForAny(array: mod.Array, condition: (element: any, arg: any) => boolean, arg: any = null) {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (condition(currentArrayElement, arg)) return true;\n }\n return false;\n}\n\nexport function SortedArray(array: any[], compare: (a: any, b: any) => number) {\n let v1 = array.slice();\n v1.sort(compare);\n let v2 = [];\n for (let e of v1) v2.push(e);\n return v2;\n}\n\nexport function Equals(a: any, b: any) {\n if (a == null || b == null) debugger;\n return mod.Equals(a, b);\n}\n\n// Waits for a provided number of seconds or if the provided condition evaluates to true during that interval.\nexport async function WaitUntil(delay: number, cond: () => boolean) {\n // rush hack. this will likely wait too long and other problems.\n const interval = 0.2; // seconds\n const checks = Math.ceil(delay / interval);\n for (let t = 0; t < checks; t++) {\n if (cond()) break;\n await mod.Wait(interval);\n }\n}\n\nexport class ConditionState {\n lastState: boolean;\n\n constructor() {\n this.lastState = false;\n }\n\n update(newState: boolean): boolean {\n // if the new state is false then reset last state and don't trigger action\n if (!newState) {\n this.lastState = false;\n return false;\n }\n // if last state was already true then don't trigger\n if (this.lastState) return false;\n // if the state just transitioned to true then trigger\n this.lastState = true;\n return true;\n }\n}\n\nclass Conditions {\n constructor() {\n this.conditionStates = [];\n }\n\n conditionStates: ConditionState[];\n\n getConditionState(n: number): ConditionState {\n while (n >= this.conditionStates.length) {\n this.conditionStates.push(new ConditionState());\n }\n return this.conditionStates[n];\n }\n}\n\nlet playerConditions: Conditions[] = [];\nlet teamConditions: Conditions[] = [];\nlet capturePointConditions: Conditions[] = [];\nlet mcomConditions: Conditions[] = [];\nlet vehicleConditions: Conditions[] = [];\nlet globalConditions: Conditions = new Conditions();\n\nfunction getObjectCondition(id: number, objectConditions: Conditions[], n: number) {\n while (id >= objectConditions.length) {\n objectConditions.push(new Conditions());\n }\n let conditions = objectConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getPlayerCondition(obj: mod.Player, n: number) {\n let id = getPlayerId(obj);\n while (id >= playerConditions.length) {\n playerConditions.push(new Conditions());\n }\n let conditions = playerConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getTeamCondition(team: mod.Team, n: number) {\n let id = getTeamId(team);\n while (id >= teamConditions.length) {\n teamConditions.push(new Conditions());\n }\n let conditions = teamConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getCapturePointCondition(obj: mod.CapturePoint, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, capturePointConditions, n);\n}\n\nexport function getMCOMCondition(obj: mod.MCOM, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, mcomConditions, n);\n}\n\nexport function getVehicleCondition(obj: mod.Vehicle, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, vehicleConditions, n);\n}\n\nexport function getGlobalCondition(n: number) {\n return globalConditions.getConditionState(n);\n}\n\nexport function getPlayersInTeam(teamObj: mod.Team) {\n const team = mod.GetObjId(teamObj);\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n let teamMembers = [];\n\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n if (mod.GetObjId(mod.GetTeam(player)) == team) {\n teamMembers.push(player);\n }\n }\n return teamMembers;\n}\n\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n// Helper functions to create UI from a JSON object tree:\n//-----------------------------------------------------------------------------------------------//\n\ntype UIVector = mod.Vector | number[];\n\ninterface UIParams {\n name: string;\n type: string;\n position: any;\n size: any;\n anchor: mod.UIAnchor;\n parent: mod.UIWidget;\n visible: boolean;\n textLabel: string;\n textColor: UIVector;\n textAlpha: number;\n textSize: number;\n textAnchor: mod.UIAnchor;\n padding: number;\n bgColor: UIVector;\n bgAlpha: number;\n bgFill: mod.UIBgFill;\n imageType: mod.UIImageType;\n imageColor: UIVector;\n imageAlpha: number;\n teamId?: mod.Team;\n playerId?: mod.Player;\n children?: any[];\n buttonEnabled: boolean;\n buttonColorBase: UIVector;\n buttonAlphaBase: number;\n buttonColorDisabled: UIVector;\n buttonAlphaDisabled: number;\n buttonColorPressed: UIVector;\n buttonAlphaPressed: number;\n buttonColorHover: UIVector;\n buttonAlphaHover: number;\n buttonColorFocused: UIVector;\n buttonAlphaFocused: number;\n}\n\nfunction __asModVector(param: number[] | mod.Vector) {\n if (Array.isArray(param)) return mod.CreateVector(param[0], param[1], param.length == 2 ? 0 : param[2]);\n else return param;\n}\n\nfunction __asModMessage(param: string | mod.Message) {\n if (typeof param === 'string') return mod.Message(param);\n return param;\n}\n\nfunction __fillInDefaultArgs(params: UIParams) {\n if (!params.hasOwnProperty('name')) params.name = '';\n if (!params.hasOwnProperty('position')) params.position = mod.CreateVector(0, 0, 0);\n if (!params.hasOwnProperty('size')) params.size = mod.CreateVector(100, 100, 0);\n if (!params.hasOwnProperty('anchor')) params.anchor = mod.UIAnchor.TopLeft;\n if (!params.hasOwnProperty('parent')) params.parent = mod.GetUIRoot();\n if (!params.hasOwnProperty('visible')) params.visible = true;\n if (!params.hasOwnProperty('padding')) params.padding = params.type == 'Container' ? 0 : 8;\n if (!params.hasOwnProperty('bgColor')) params.bgColor = mod.CreateVector(0.25, 0.25, 0.25);\n if (!params.hasOwnProperty('bgAlpha')) params.bgAlpha = 0.5;\n if (!params.hasOwnProperty('bgFill')) params.bgFill = mod.UIBgFill.Solid;\n}\n\nfunction __setNameAndGetWidget(uniqueName: any, params: any) {\n let widget = mod.FindUIWidgetWithName(uniqueName) as mod.UIWidget;\n mod.SetUIWidgetName(widget, params.name);\n return widget;\n}\n\nconst __cUniqueName = '----uniquename----';\n\nfunction __addUIContainer(params: UIParams) {\n __fillInDefaultArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIContainer(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n restrict\n );\n } else {\n mod.AddUIContainer(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill\n );\n }\n let widget = __setNameAndGetWidget(__cUniqueName, params);\n if (params.children) {\n params.children.forEach((childParams: any) => {\n childParams.parent = widget;\n __addUIWidget(childParams);\n });\n }\n return widget;\n}\n\nfunction __fillInDefaultTextArgs(params: UIParams) {\n if (!params.hasOwnProperty('textLabel')) params.textLabel = '';\n if (!params.hasOwnProperty('textSize')) params.textSize = 0;\n if (!params.hasOwnProperty('textColor')) params.textColor = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('textAlpha')) params.textAlpha = 1;\n if (!params.hasOwnProperty('textAnchor')) params.textAnchor = mod.UIAnchor.CenterLeft;\n}\n\nfunction __addUIText(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultTextArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIText(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n __asModMessage(params.textLabel),\n params.textSize,\n __asModVector(params.textColor),\n params.textAlpha,\n params.textAnchor,\n restrict\n );\n } else {\n mod.AddUIText(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n __asModMessage(params.textLabel),\n params.textSize,\n __asModVector(params.textColor),\n params.textAlpha,\n params.textAnchor\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __fillInDefaultImageArgs(params: any) {\n if (!params.hasOwnProperty('imageType')) params.imageType = mod.UIImageType.None;\n if (!params.hasOwnProperty('imageColor')) params.imageColor = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('imageAlpha')) params.imageAlpha = 1;\n}\n\nfunction __addUIImage(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultImageArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIImage(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.imageType,\n __asModVector(params.imageColor),\n params.imageAlpha,\n restrict\n );\n } else {\n mod.AddUIImage(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.imageType,\n __asModVector(params.imageColor),\n params.imageAlpha\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __fillInDefaultArg(params: any, argName: any, defaultValue: any) {\n if (!params.hasOwnProperty(argName)) params[argName] = defaultValue;\n}\n\nfunction __fillInDefaultButtonArgs(params: any) {\n if (!params.hasOwnProperty('buttonEnabled')) params.buttonEnabled = true;\n if (!params.hasOwnProperty('buttonColorBase')) params.buttonColorBase = mod.CreateVector(0.7, 0.7, 0.7);\n if (!params.hasOwnProperty('buttonAlphaBase')) params.buttonAlphaBase = 1;\n if (!params.hasOwnProperty('buttonColorDisabled')) params.buttonColorDisabled = mod.CreateVector(0.2, 0.2, 0.2);\n if (!params.hasOwnProperty('buttonAlphaDisabled')) params.buttonAlphaDisabled = 0.5;\n if (!params.hasOwnProperty('buttonColorPressed')) params.buttonColorPressed = mod.CreateVector(0.25, 0.25, 0.25);\n if (!params.hasOwnProperty('buttonAlphaPressed')) params.buttonAlphaPressed = 1;\n if (!params.hasOwnProperty('buttonColorHover')) params.buttonColorHover = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('buttonAlphaHover')) params.buttonAlphaHover = 1;\n if (!params.hasOwnProperty('buttonColorFocused')) params.buttonColorFocused = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('buttonAlphaFocused')) params.buttonAlphaFocused = 1;\n}\n\nfunction __addUIButton(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultButtonArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIButton(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.buttonEnabled,\n __asModVector(params.buttonColorBase),\n params.buttonAlphaBase,\n __asModVector(params.buttonColorDisabled),\n params.buttonAlphaDisabled,\n __asModVector(params.buttonColorPressed),\n params.buttonAlphaPressed,\n __asModVector(params.buttonColorHover),\n params.buttonAlphaHover,\n __asModVector(params.buttonColorFocused),\n params.buttonAlphaFocused,\n restrict\n );\n } else {\n mod.AddUIButton(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.buttonEnabled,\n __asModVector(params.buttonColorBase),\n params.buttonAlphaBase,\n __asModVector(params.buttonColorDisabled),\n params.buttonAlphaDisabled,\n __asModVector(params.buttonColorPressed),\n params.buttonAlphaPressed,\n __asModVector(params.buttonColorHover),\n params.buttonAlphaHover,\n __asModVector(params.buttonColorFocused),\n params.buttonAlphaFocused\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __addUIWidget(params: UIParams) {\n if (params == null) return undefined;\n if (params.type == 'Container') return __addUIContainer(params);\n else if (params.type == 'Text') return __addUIText(params);\n else if (params.type == 'Image') return __addUIImage(params);\n else if (params.type == 'Button') return __addUIButton(params);\n return undefined;\n}\n\nexport function ParseUI(...params: any[]) {\n let widget: mod.UIWidget | undefined;\n for (let a = 0; a < params.length; a++) {\n widget = __addUIWidget(params[a] as UIParams);\n }\n return widget;\n}\n\nexport function DisplayCustomNotificationMessage(msg: mod.Message, custom: mod.CustomNotificationSlots, duration: number, target?: mod.Player | mod.Team) {\n const CreateHeader = async (widgetId: string, msg: mod.Message, targetPlayer: mod.Player, slot: number) => {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(50, 250 + slot * (40 + 5), 0),\n mod.CreateVector(250, 60, 0),\n mod.UIAnchor.TopRight,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n msg,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n targetPlayer\n );\n if (duration > 0) {\n await mod.Wait(duration);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n }\n };\n const CreateSubText = async (widgetId: string, msg: mod.Message, targetPlayer: mod.Player, slot: number) => {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(85, 270 + slot * (40 + 3), 0),\n mod.CreateVector(125, 40, 0),\n mod.UIAnchor.TopRight,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n msg,\n 20,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n targetPlayer\n );\n if (duration > 0) {\n await mod.Wait(duration);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n }\n };\n const createNotificationFunction = custom < 1 ? CreateHeader : CreateSubText;\n\n if (target) {\n // if target is player, fill message in their slot\n if (mod.IsType(target, mod.Types.Player)) {\n const widgetId = custom + String(target);\n createNotificationFunction(widgetId, msg, target as mod.Player, custom);\n }\n // if target is team, fill message in slot for all players on team\n else if (mod.IsType(target, mod.Types.Team)) {\n const teamMates = getPlayersInTeam(target as mod.Team);\n teamMates.forEach((player) => {\n const widgetId = custom + String(player);\n createNotificationFunction(widgetId, msg, player, custom);\n });\n }\n } else {\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n const widgetId = custom + String(player);\n createNotificationFunction(widgetId, msg, player, custom);\n }\n }\n}\n\nexport function ShowEventGameModeMessage(event: mod.Message, target?: mod.Player | mod.Team) {\n //TODO: restore these once DisplayGameModeMessage is fixed\n // if (target) {\n // mod.DisplayGameModeMessage(event, target as mod.Player );\n // } else{\n // mod.DisplayGameModeMessage(event);\n // }\n\n const MakeShiftDisplayGameModeMessage = async (message: mod.Message, target?: mod.Player | mod.Team) => {\n const widgetId = 'GameModeMessage';\n if (target) {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(0, 0, 0),\n mod.CreateVector(2500, 80, 0),\n mod.UIAnchor.TopCenter,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n message,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n target as mod.Player\n );\n } else {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(0, 0, 0),\n mod.CreateVector(2500, 80, 0),\n mod.UIAnchor.TopCenter,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n message,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center\n );\n }\n\n await mod.Wait(6);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n };\n\n if (target) {\n MakeShiftDisplayGameModeMessage(event, target as mod.Player);\n } else {\n MakeShiftDisplayGameModeMessage(event);\n }\n}\n\nexport function ShowHighlightedGameModeMessage(event: mod.Message, target?: mod.Player | mod.Team) {\n if (target) {\n mod.DisplayHighlightedWorldLogMessage(event, target as mod.Player);\n } else {\n mod.DisplayHighlightedWorldLogMessage(event);\n }\n}\n\nexport function ShowNotificationMessage(msg: mod.Message, target?: mod.Player | mod.Team) {\n if (target) {\n mod.DisplayNotificationMessage(msg, target as mod.Player);\n } else {\n mod.DisplayNotificationMessage(msg);\n }\n}\n\nexport function ClearAllCustomNotificationMessages(target: mod.Player) {\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.HeaderText, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText1, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText2, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText3, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText4, target);\n } catch {}\n}\n\nexport function ClearCustomNotificationMessage(custom: mod.CustomNotificationSlots, target?: mod.Player | mod.Team) {\n try {\n if (target) {\n // if target is player, just delete message in their slot\n if (mod.IsType(target, mod.Types.Player)) {\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(target as mod.Player)));\n }\n // if target is team, delete message in slot for all players on team\n else if (mod.IsType(target, mod.Types.Team)) {\n const teamMembers = getPlayersInTeam(target as mod.Team);\n for (let i = 0; i < teamMembers.length; i++) {\n let player = teamMembers[i];\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(player)));\n }\n }\n } else {\n // if no target, delete for all players\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(player)));\n }\n }\n } catch {\n console.error('Could not clear custom message for specified target(s)');\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,3 @@
1
- import { t as __export } from "./chunk-Bp6m_JJh.js";
2
-
3
- //#region src/std/message.d.ts
4
1
  declare namespace message_d_exports {
5
2
  export { MakeMessage };
6
3
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["globalConditions: Conditions","widget: mod.UIWidget | undefined","#uniqueID","#playerProfileId","#playerId"],"sources":["../../src/std/message.ts","../../src/modlib/index.ts","../../src/std/ui/countdown.ts","../../src/std/ui/index.ts","../../src/std/index.ts"],"sourcesContent":["export function MakeMessage(\n\tmessage: string,\n\t...args: (string | number | mod.Player)[]\n) {\n\tswitch (args.length) {\n\t\tcase 0:\n\t\t\treturn mod.Message(message);\n\t\tcase 1:\n\t\t\treturn mod.Message(message, args[0]);\n\t\tcase 2:\n\t\t\treturn mod.Message(message, args[0], args[1]);\n\t\tcase 3:\n\t\t\treturn mod.Message(message, args[0], args[1], args[2]);\n\t\tdefault:\n\t\t\tthrow new Error(\"Invalid number of arguments\");\n\t}\n}\n","// export * from './store';\n\nexport function Concat(s1: string, s2: string) {\n return s1 + s2;\n}\n\nexport function And(...rest: boolean[]): boolean {\n for (let i = 0; i < rest.length; i++) {\n const cond = rest[i];\n if (!cond) return false;\n }\n return true;\n}\n\ntype ConditionFunction = () => boolean;\n\nexport function AndFn(...rest: ConditionFunction[]): boolean {\n for (let i = 0; i < rest.length; i++) {\n const condFn = rest[i];\n if (!condFn()) return false;\n }\n return true;\n}\n\nexport function getPlayerId(player: mod.Player): number {\n return mod.GetObjId(player);\n}\n\nexport function getTeamId(team: mod.Team): number {\n return mod.GetObjId(team);\n}\n\nexport function ConvertArray(array: mod.Array): any[] {\n let v = [];\n let n = mod.CountOf(array);\n for (let i = 0; i < n; i++) {\n let currentElement = mod.ValueInArray(array, i);\n v.push(currentElement);\n }\n return v;\n}\n\nexport function FilteredArray(array: mod.Array, cond: (currentElement: any) => boolean): mod.Array {\n const arr = ConvertArray(array);\n let v = mod.EmptyArray();\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentElement = arr[i];\n if (cond(currentElement)) mod.AppendToArray(v, currentElement);\n }\n return v;\n}\n\nexport function IndexOfFirstTrue(array: mod.Array, cond: (element: any, arg: any) => boolean, arg: any = null): number {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (cond(currentArrayElement, arg)) return i;\n }\n return -1;\n}\n\nexport function IfThenElse<T>(condition: boolean, ifTrue: () => T, ifFalse: () => T) {\n if (condition) return ifTrue();\n else return ifFalse();\n}\n\nexport function IsTrueForAll(array: mod.Array, condition: (element: any, arg: any) => boolean, arg: any = null) {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (!condition(currentArrayElement, arg)) return false;\n }\n return true;\n}\n\nexport function IsTrueForAny(array: mod.Array, condition: (element: any, arg: any) => boolean, arg: any = null) {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (condition(currentArrayElement, arg)) return true;\n }\n return false;\n}\n\nexport function SortedArray(array: any[], compare: (a: any, b: any) => number) {\n let v1 = array.slice();\n v1.sort(compare);\n let v2 = [];\n for (let e of v1) v2.push(e);\n return v2;\n}\n\nexport function Equals(a: any, b: any) {\n if (a == null || b == null) debugger;\n return mod.Equals(a, b);\n}\n\nexport async function WaitUntil(delay: number, cond: () => boolean) {\n // complete rush hack. this will likely wait way too long and other problems.\n let deltaCount = 10;\n let deltaWait = delay / deltaCount;\n for (let t = 0; t < deltaCount; t++) {\n if (!cond()) break;\n await mod.Wait(deltaWait);\n }\n}\n\nexport class ConditionState {\n lastState: boolean;\n\n constructor() {\n this.lastState = false;\n }\n\n update(newState: boolean): boolean {\n // if the new state is false then reset last state and don't trigger action\n if (!newState) {\n this.lastState = false;\n return false;\n }\n // if last state was already true then don't trigger\n if (this.lastState) return false;\n // if the state just transitioned to true then trigger\n this.lastState = true;\n return true;\n }\n}\n\nclass Conditions {\n constructor() {\n this.conditionStates = [];\n }\n\n conditionStates: ConditionState[];\n\n getConditionState(n: number): ConditionState {\n while (n >= this.conditionStates.length) {\n this.conditionStates.push(new ConditionState());\n }\n return this.conditionStates[n];\n }\n}\n\nlet playerConditions: Conditions[] = [];\nlet teamConditions: Conditions[] = [];\nlet capturePointConditions: Conditions[] = [];\nlet mcomConditions: Conditions[] = [];\nlet vehicleConditions: Conditions[] = [];\nlet globalConditions: Conditions = new Conditions();\n\nfunction getObjectCondition(id: number, objectConditions: Conditions[], n: number) {\n while (id >= objectConditions.length) {\n objectConditions.push(new Conditions());\n }\n let conditions = objectConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getPlayerCondition(obj: mod.Player, n: number) {\n let id = getPlayerId(obj);\n while (id >= playerConditions.length) {\n playerConditions.push(new Conditions());\n }\n let conditions = playerConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getTeamCondition(team: mod.Team, n: number) {\n let id = getTeamId(team);\n while (id >= teamConditions.length) {\n teamConditions.push(new Conditions());\n }\n let conditions = teamConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getCapturePointCondition(obj: mod.CapturePoint, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, capturePointConditions, n);\n}\n\nexport function getMCOMCondition(obj: mod.MCOM, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, mcomConditions, n);\n}\n\nexport function getVehicleCondition(obj: mod.Vehicle, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, vehicleConditions, n);\n}\n\nexport function getGlobalCondition(n: number) {\n return globalConditions.getConditionState(n);\n}\n\nexport function getPlayersInTeam(team: mod.Team) {\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n let teamMembers = [];\n\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n if (mod.GetTeam(player) == team) {\n teamMembers.push(player);\n }\n }\n return teamMembers;\n}\n\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n// Helper functions to create UI from a JSON object tree:\n//-----------------------------------------------------------------------------------------------//\n\ntype UIVector = mod.Vector | number[];\n\ninterface UIParams {\n name: string;\n type: string;\n position: any;\n size: any;\n anchor: mod.UIAnchor;\n parent: mod.UIWidget;\n visible: boolean;\n textLabel: string;\n textColor: UIVector;\n textAlpha: number;\n textSize: number;\n textAnchor: mod.UIAnchor;\n padding: number;\n bgColor: UIVector;\n bgAlpha: number;\n bgFill: mod.UIBgFill;\n imageType: mod.UIImageType;\n imageColor: UIVector;\n imageAlpha: number;\n teamId?: mod.Team;\n playerId?: mod.Player;\n children?: any[];\n buttonEnabled: boolean;\n buttonColorBase: UIVector;\n buttonAlphaBase: number;\n buttonColorDisabled: UIVector;\n buttonAlphaDisabled: number;\n buttonColorPressed: UIVector;\n buttonAlphaPressed: number;\n buttonColorHover: UIVector;\n buttonAlphaHover: number;\n buttonColorFocused: UIVector;\n buttonAlphaFocused: number;\n}\n\nfunction __asModVector(param: number[] | mod.Vector) {\n if (Array.isArray(param)) return mod.CreateVector(param[0], param[1], param.length == 2 ? 0 : param[2]);\n else return param;\n}\n\nfunction __asModMessage(param: string | mod.Message) {\n if (typeof param === 'string') return mod.Message(param);\n return param;\n}\n\nfunction __fillInDefaultArgs(params: UIParams) {\n if (!params.hasOwnProperty('name')) params.name = '';\n if (!params.hasOwnProperty('position')) params.position = mod.CreateVector(0, 0, 0);\n if (!params.hasOwnProperty('size')) params.size = mod.CreateVector(100, 100, 0);\n if (!params.hasOwnProperty('anchor')) params.anchor = mod.UIAnchor.TopLeft;\n if (!params.hasOwnProperty('parent')) params.parent = mod.GetUIRoot();\n if (!params.hasOwnProperty('visible')) params.visible = true;\n if (!params.hasOwnProperty('padding')) params.padding = params.type == 'Container' ? 0 : 8;\n if (!params.hasOwnProperty('bgColor')) params.bgColor = mod.CreateVector(0.25, 0.25, 0.25);\n if (!params.hasOwnProperty('bgAlpha')) params.bgAlpha = 0.5;\n if (!params.hasOwnProperty('bgFill')) params.bgFill = mod.UIBgFill.Solid;\n}\n\nfunction __setNameAndGetWidget(uniqueName: any, params: any) {\n let widget = mod.FindUIWidgetWithName(uniqueName) as mod.UIWidget;\n mod.SetUIWidgetName(widget, params.name);\n return widget;\n}\n\nconst __cUniqueName = '----uniquename----';\n\nfunction __addUIContainer(params: UIParams) {\n __fillInDefaultArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIContainer(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n restrict\n );\n } else {\n mod.AddUIContainer(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill\n );\n }\n let widget = __setNameAndGetWidget(__cUniqueName, params);\n if (params.children) {\n params.children.forEach((childParams: any) => {\n childParams.parent = widget;\n __addUIWidget(childParams);\n });\n }\n return widget;\n}\n\nfunction __fillInDefaultTextArgs(params: UIParams) {\n if (!params.hasOwnProperty('textLabel')) params.textLabel = '';\n if (!params.hasOwnProperty('textSize')) params.textSize = 0;\n if (!params.hasOwnProperty('textColor')) params.textColor = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('textAlpha')) params.textAlpha = 1;\n if (!params.hasOwnProperty('textAnchor')) params.textAnchor = mod.UIAnchor.CenterLeft;\n}\n\nfunction __addUIText(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultTextArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIText(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n __asModMessage(params.textLabel),\n params.textSize,\n __asModVector(params.textColor),\n params.textAlpha,\n params.textAnchor,\n restrict\n );\n } else {\n mod.AddUIText(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n __asModMessage(params.textLabel),\n params.textSize,\n __asModVector(params.textColor),\n params.textAlpha,\n params.textAnchor\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __fillInDefaultImageArgs(params: any) {\n if (!params.hasOwnProperty('imageType')) params.imageType = mod.UIImageType.None;\n if (!params.hasOwnProperty('imageColor')) params.imageColor = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('imageAlpha')) params.imageAlpha = 1;\n}\n\nfunction __addUIImage(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultImageArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIImage(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.imageType,\n __asModVector(params.imageColor),\n params.imageAlpha,\n restrict\n );\n } else {\n mod.AddUIImage(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.imageType,\n __asModVector(params.imageColor),\n params.imageAlpha\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __fillInDefaultArg(params: any, argName: any, defaultValue: any) {\n if (!params.hasOwnProperty(argName)) params[argName] = defaultValue;\n}\n\nfunction __fillInDefaultButtonArgs(params: any) {\n if (!params.hasOwnProperty('buttonEnabled')) params.buttonEnabled = true;\n if (!params.hasOwnProperty('buttonColorBase')) params.buttonColorBase = mod.CreateVector(0.7, 0.7, 0.7);\n if (!params.hasOwnProperty('buttonAlphaBase')) params.buttonAlphaBase = 1;\n if (!params.hasOwnProperty('buttonColorDisabled')) params.buttonColorDisabled = mod.CreateVector(0.2, 0.2, 0.2);\n if (!params.hasOwnProperty('buttonAlphaDisabled')) params.buttonAlphaDisabled = 0.5;\n if (!params.hasOwnProperty('buttonColorPressed')) params.buttonColorPressed = mod.CreateVector(0.25, 0.25, 0.25);\n if (!params.hasOwnProperty('buttonAlphaPressed')) params.buttonAlphaPressed = 1;\n if (!params.hasOwnProperty('buttonColorHover')) params.buttonColorHover = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('buttonAlphaHover')) params.buttonAlphaHover = 1;\n if (!params.hasOwnProperty('buttonColorFocused')) params.buttonColorFocused = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('buttonAlphaFocused')) params.buttonAlphaFocused = 1;\n}\n\nfunction __addUIButton(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultButtonArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIButton(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.buttonEnabled,\n __asModVector(params.buttonColorBase),\n params.buttonAlphaBase,\n __asModVector(params.buttonColorDisabled),\n params.buttonAlphaDisabled,\n __asModVector(params.buttonColorPressed),\n params.buttonAlphaPressed,\n __asModVector(params.buttonColorHover),\n params.buttonAlphaHover,\n __asModVector(params.buttonColorFocused),\n params.buttonAlphaFocused,\n restrict\n );\n } else {\n mod.AddUIButton(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.buttonEnabled,\n __asModVector(params.buttonColorBase),\n params.buttonAlphaBase,\n __asModVector(params.buttonColorDisabled),\n params.buttonAlphaDisabled,\n __asModVector(params.buttonColorPressed),\n params.buttonAlphaPressed,\n __asModVector(params.buttonColorHover),\n params.buttonAlphaHover,\n __asModVector(params.buttonColorFocused),\n params.buttonAlphaFocused\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __addUIWidget(params: UIParams) {\n if (params == null) return undefined;\n if (params.type == 'Container') return __addUIContainer(params);\n else if (params.type == 'Text') return __addUIText(params);\n else if (params.type == 'Image') return __addUIImage(params);\n else if (params.type == 'Button') return __addUIButton(params);\n return undefined;\n}\n\nexport function ParseUI(...params: any[]) {\n let widget: mod.UIWidget | undefined;\n for (let a = 0; a < params.length; a++) {\n widget = __addUIWidget(params[a] as UIParams);\n }\n return widget;\n}\n\nexport function DisplayCustomNotificationMessage(msg: mod.Message, custom: mod.CustomNotificationSlots, duration: number, target?: mod.Player | mod.Team) {\n const CreateHeader = async (widgetId: string, msg: mod.Message, targetPlayer: mod.Player, slot: number) => {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(50, 250 + slot * (40 + 5), 0),\n mod.CreateVector(250, 60, 0),\n mod.UIAnchor.TopRight,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n msg,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n targetPlayer\n );\n if (duration > 0) {\n await mod.Wait(duration);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n }\n };\n const CreateSubText = async (widgetId: string, msg: mod.Message, targetPlayer: mod.Player, slot: number) => {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(85, 270 + slot * (40 + 3), 0),\n mod.CreateVector(125, 40, 0),\n mod.UIAnchor.TopRight,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n msg,\n 20,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n targetPlayer\n );\n if (duration > 0) {\n await mod.Wait(duration);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n }\n };\n const createNotificationFunction = custom < 1 ? CreateHeader : CreateSubText;\n\n if (target) {\n // if target is player, fill message in their slot\n if (mod.IsType(target, mod.Types.Player)) {\n const widgetId = custom + String(target);\n createNotificationFunction(widgetId, msg, target as mod.Player, custom);\n }\n // if target is team, fill message in slot for all players on team\n else if (mod.IsType(target, mod.Types.Team)) {\n const teamMates = getPlayersInTeam(target as mod.Team);\n teamMates.forEach((player) => {\n const widgetId = custom + String(player);\n createNotificationFunction(widgetId, msg, player, custom);\n });\n }\n } else {\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n const widgetId = custom + String(player);\n createNotificationFunction(widgetId, msg, player, custom);\n }\n }\n}\n\nexport function ShowEventGameModeMessage(event: mod.Message, target?: mod.Player | mod.Team) {\n //TODO: restore these once DisplayGameModeMessage is fixed\n // if (target) {\n // mod.DisplayGameModeMessage(event, target as mod.Player );\n // } else{\n // mod.DisplayGameModeMessage(event);\n // }\n\n const MakeShiftDisplayGameModeMessage = async (message: mod.Message, target?: mod.Player | mod.Team) => {\n const widgetId = 'GameModeMessage';\n if (target) {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(0, 0, 0),\n mod.CreateVector(2500, 80, 0),\n mod.UIAnchor.TopCenter,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n message,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n target as mod.Player\n );\n } else {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(0, 0, 0),\n mod.CreateVector(2500, 80, 0),\n mod.UIAnchor.TopCenter,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n message,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center\n );\n }\n\n await mod.Wait(6);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n };\n\n if (target) {\n MakeShiftDisplayGameModeMessage(event, target as mod.Player);\n } else {\n MakeShiftDisplayGameModeMessage(event);\n }\n}\n\nexport function ShowHighlightedGameModeMessage(event: mod.Message, target?: mod.Player | mod.Team) {\n if (target) {\n mod.DisplayHighlightedWorldLogMessage(event, target as mod.Player);\n } else {\n mod.DisplayHighlightedWorldLogMessage(event);\n }\n}\n\nexport function ShowNotificationMessage(msg: mod.Message, target?: mod.Player | mod.Team) {\n if (target) {\n mod.DisplayNotificationMessage(msg, target as mod.Player);\n } else {\n mod.DisplayNotificationMessage(msg);\n }\n}\n\nexport function ClearAllCustomNotificationMessages(target: mod.Player) {\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.HeaderText, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText1, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText2, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText3, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText4, target);\n } catch {}\n}\n\nexport function ClearCustomNotificationMessage(custom: mod.CustomNotificationSlots, target?: mod.Player | mod.Team) {\n try {\n if (target) {\n // if target is player, just delete message in their slot\n if (mod.IsType(target, mod.Types.Player)) {\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(target as mod.Player)));\n }\n // if target is team, delete message in slot for all players on team\n else if (mod.IsType(target, mod.Types.Team)) {\n const teamMembers = getPlayersInTeam(target as mod.Team);\n for (let i = 0; i < teamMembers.length; i++) {\n let player = teamMembers[i];\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(player)));\n }\n }\n } else {\n // if no target, delete for all players\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(player)));\n }\n }\n } catch {\n console.error('Could not clear custom message for specified target(s)');\n }\n}\n","import { ParseUI } from \"../../modlib/index.ts\";\nimport { MakeMessage } from \"../message.ts\";\n\nexport class CountdownUI {\n\tstatic #uniqueID = 0;\n\t#playerId: mod.Player;\n\t#playerProfileId: number;\n\n\theaderWidget: mod.UIWidget | undefined;\n\ttextWidget: mod.UIWidget | undefined;\n\n\tconstructor(playerId: mod.Player) {\n\t\tthis.#playerProfileId = CountdownUI.#uniqueID++;\n\t\tthis.#playerId = playerId;\n\n\t\tconst bfBlueColor = [0.678, 0.753, 0.8];\n\t\tconst height = 125;\n\t\tthis.headerWidget = ParseUI({\n\t\t\ttype: \"Container\",\n\t\t\tsize: [150, height],\n\t\t\tposition: [0, 50],\n\t\t\tname: `countdown_${this.#playerProfileId}`,\n\t\t\tanchor: mod.UIAnchor.TopCenter,\n\t\t\tbgFill: mod.UIBgFill.Blur,\n\t\t\tbgColor: [0.2, 0.2, 0.3],\n\t\t\tbgAlpha: 0.9,\n\t\t\tplayerId: this.#playerId,\n\t\t\tvisible: false,\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"Container\",\n\t\t\t\t\tname: `countdown_line_right_${this.#playerProfileId}`,\n\t\t\t\t\tsize: [2, height],\n\t\t\t\t\tposition: [75, 0],\n\t\t\t\t\tanchor: mod.UIAnchor.Center,\n\t\t\t\t\tbgFill: mod.UIBgFill.Solid,\n\t\t\t\t\tbgColor: bfBlueColor,\n\t\t\t\t\tbgAlpha: 1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"Container\",\n\t\t\t\t\tname: `countdown_line_left_${this.#playerProfileId}`,\n\t\t\t\t\tsize: [2, height],\n\t\t\t\t\tposition: [-75, 0],\n\t\t\t\t\tanchor: mod.UIAnchor.Center,\n\t\t\t\t\tbgFill: mod.UIBgFill.Solid,\n\t\t\t\t\tbgColor: bfBlueColor,\n\t\t\t\t\tbgAlpha: 1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"Text\",\n\t\t\t\t\tname: `countdown_text${this.#playerProfileId}`,\n\t\t\t\t\tsize: [100, height],\n\t\t\t\t\tposition: [0, 0],\n\t\t\t\t\tanchor: mod.UIAnchor.Center,\n\t\t\t\t\tbgFill: mod.UIBgFill.None,\n\t\t\t\t\ttextColor: bfBlueColor,\n\t\t\t\t\ttextAnchor: mod.UIAnchor.Center,\n\t\t\t\t\ttextLabel: MakeMessage(mod.stringkeys.__sdk__CountdownUI),\n\t\t\t\t\ttextSize: 85,\n\t\t\t\t},\n\t\t\t],\n\t\t});\n\t\tthis.textWidget = mod.FindUIWidgetWithName(\n\t\t\t`countdown_text${this.#playerProfileId}`,\n\t\t);\n\t}\n\n\tdelete() {\n\t\tthis.headerWidget && mod.DeleteUIWidget(this.headerWidget);\n\t\t//this.textWidget && mod.DeleteUIWidget(this.textWidget)\n\t}\n\n\topen(text: string, countdowntime: number) {\n\t\tthis.headerWidget && mod.SetUIWidgetVisible(this.headerWidget, true);\n\t\tthis.textWidget &&\n\t\t\tmod.SetUITextLabel(this.textWidget, MakeMessage(text, countdowntime));\n\t}\n\n\tupdate(text: string, countdowntime: number) {\n\t\tthis.textWidget &&\n\t\t\tmod.SetUITextLabel(this.textWidget, MakeMessage(text, countdowntime));\n\t}\n\n\tasync close(delayclose: number = 0) {\n\t\tawait mod.Wait(delayclose);\n\t\tthis.headerWidget && mod.SetUIWidgetVisible(this.headerWidget, false);\n\t}\n}\n\nexport const bf6Strings = {\n\t__sdk__CountdownUI: \"{}\",\n};\n","import * as countdown from \"./countdown.ts\";\n\nexport * from \"./countdown.ts\";\n\nexport default {\n\tcountdown,\n};\n","import * as message from \"./message.ts\";\n\nexport * from \"./message.ts\";\n\nimport * as ui from \"./ui/index.ts\";\n\nexport * from \"./ui/index.ts\";\n\nexport default {\n\tmessage,\n\tui,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["globalConditions: Conditions","widget: mod.UIWidget | undefined","#uniqueID","#playerProfileId","#playerId"],"sources":["../../src/std/message.ts","../../src/modlib/index.ts","../../src/std/ui/countdown.ts","../../src/std/ui/index.ts","../../src/std/index.ts"],"sourcesContent":["export function MakeMessage(\n\tmessage: string,\n\t...args: (string | number | mod.Player)[]\n) {\n\tswitch (args.length) {\n\t\tcase 0:\n\t\t\treturn mod.Message(message);\n\t\tcase 1:\n\t\t\treturn mod.Message(message, args[0]);\n\t\tcase 2:\n\t\t\treturn mod.Message(message, args[0], args[1]);\n\t\tcase 3:\n\t\t\treturn mod.Message(message, args[0], args[1], args[2]);\n\t\tdefault:\n\t\t\tthrow new Error(\"Invalid number of arguments\");\n\t}\n}\n","// export * from './store';\n\nexport function Concat(s1: string, s2: string) {\n return s1 + s2;\n}\n\nexport function And(...rest: boolean[]): boolean {\n for (let i = 0; i < rest.length; i++) {\n const cond = rest[i];\n if (!cond) return false;\n }\n return true;\n}\n\ntype ConditionFunction = () => boolean;\n\nexport function AndFn(...rest: ConditionFunction[]): boolean {\n for (let i = 0; i < rest.length; i++) {\n const condFn = rest[i];\n if (!condFn()) return false;\n }\n return true;\n}\n\nexport function getPlayerId(player: mod.Player): number {\n return mod.GetObjId(player);\n}\n\nexport function getTeamId(team: mod.Team): number {\n return mod.GetObjId(team);\n}\n\nexport function ConvertArray(array: mod.Array): any[] {\n let v = [];\n let n = mod.CountOf(array);\n for (let i = 0; i < n; i++) {\n let currentElement = mod.ValueInArray(array, i);\n v.push(currentElement);\n }\n return v;\n}\n\nexport function FilteredArray(array: mod.Array, cond: (currentElement: any) => boolean): mod.Array {\n const arr = ConvertArray(array);\n let v = mod.EmptyArray();\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentElement = arr[i];\n if (cond(currentElement)) v = mod.AppendToArray(v, currentElement);\n }\n return v;\n}\n\nexport function IndexOfFirstTrue(array: mod.Array, cond: (element: any, arg: any) => boolean, arg: any = null): number {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (cond(currentArrayElement, arg)) return i;\n }\n return -1;\n}\n\nexport function IfThenElse<T>(condition: boolean, ifTrue: () => T, ifFalse: () => T) {\n if (condition) return ifTrue();\n else return ifFalse();\n}\n\nexport function IsTrueForAll(array: mod.Array, condition: (element: any, arg: any) => boolean, arg: any = null) {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (!condition(currentArrayElement, arg)) return false;\n }\n return true;\n}\n\nexport function IsTrueForAny(array: mod.Array, condition: (element: any, arg: any) => boolean, arg: any = null) {\n const arr = ConvertArray(array);\n let n = arr.length;\n for (let i = 0; i < n; i++) {\n let currentArrayElement = arr[i];\n if (condition(currentArrayElement, arg)) return true;\n }\n return false;\n}\n\nexport function SortedArray(array: any[], compare: (a: any, b: any) => number) {\n let v1 = array.slice();\n v1.sort(compare);\n let v2 = [];\n for (let e of v1) v2.push(e);\n return v2;\n}\n\nexport function Equals(a: any, b: any) {\n if (a == null || b == null) debugger;\n return mod.Equals(a, b);\n}\n\n// Waits for a provided number of seconds or if the provided condition evaluates to true during that interval.\nexport async function WaitUntil(delay: number, cond: () => boolean) {\n // rush hack. this will likely wait too long and other problems.\n const interval = 0.2; // seconds\n const checks = Math.ceil(delay / interval);\n for (let t = 0; t < checks; t++) {\n if (cond()) break;\n await mod.Wait(interval);\n }\n}\n\nexport class ConditionState {\n lastState: boolean;\n\n constructor() {\n this.lastState = false;\n }\n\n update(newState: boolean): boolean {\n // if the new state is false then reset last state and don't trigger action\n if (!newState) {\n this.lastState = false;\n return false;\n }\n // if last state was already true then don't trigger\n if (this.lastState) return false;\n // if the state just transitioned to true then trigger\n this.lastState = true;\n return true;\n }\n}\n\nclass Conditions {\n constructor() {\n this.conditionStates = [];\n }\n\n conditionStates: ConditionState[];\n\n getConditionState(n: number): ConditionState {\n while (n >= this.conditionStates.length) {\n this.conditionStates.push(new ConditionState());\n }\n return this.conditionStates[n];\n }\n}\n\nlet playerConditions: Conditions[] = [];\nlet teamConditions: Conditions[] = [];\nlet capturePointConditions: Conditions[] = [];\nlet mcomConditions: Conditions[] = [];\nlet vehicleConditions: Conditions[] = [];\nlet globalConditions: Conditions = new Conditions();\n\nfunction getObjectCondition(id: number, objectConditions: Conditions[], n: number) {\n while (id >= objectConditions.length) {\n objectConditions.push(new Conditions());\n }\n let conditions = objectConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getPlayerCondition(obj: mod.Player, n: number) {\n let id = getPlayerId(obj);\n while (id >= playerConditions.length) {\n playerConditions.push(new Conditions());\n }\n let conditions = playerConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getTeamCondition(team: mod.Team, n: number) {\n let id = getTeamId(team);\n while (id >= teamConditions.length) {\n teamConditions.push(new Conditions());\n }\n let conditions = teamConditions[id];\n return conditions.getConditionState(n);\n}\n\nexport function getCapturePointCondition(obj: mod.CapturePoint, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, capturePointConditions, n);\n}\n\nexport function getMCOMCondition(obj: mod.MCOM, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, mcomConditions, n);\n}\n\nexport function getVehicleCondition(obj: mod.Vehicle, n: number) {\n let id = mod.GetObjId(obj);\n return getObjectCondition(id, vehicleConditions, n);\n}\n\nexport function getGlobalCondition(n: number) {\n return globalConditions.getConditionState(n);\n}\n\nexport function getPlayersInTeam(teamObj: mod.Team) {\n const team = mod.GetObjId(teamObj);\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n let teamMembers = [];\n\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n if (mod.GetObjId(mod.GetTeam(player)) == team) {\n teamMembers.push(player);\n }\n }\n return teamMembers;\n}\n\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n//-----------------------------------------------------------------------------------------------//\n// Helper functions to create UI from a JSON object tree:\n//-----------------------------------------------------------------------------------------------//\n\ntype UIVector = mod.Vector | number[];\n\ninterface UIParams {\n name: string;\n type: string;\n position: any;\n size: any;\n anchor: mod.UIAnchor;\n parent: mod.UIWidget;\n visible: boolean;\n textLabel: string;\n textColor: UIVector;\n textAlpha: number;\n textSize: number;\n textAnchor: mod.UIAnchor;\n padding: number;\n bgColor: UIVector;\n bgAlpha: number;\n bgFill: mod.UIBgFill;\n imageType: mod.UIImageType;\n imageColor: UIVector;\n imageAlpha: number;\n teamId?: mod.Team;\n playerId?: mod.Player;\n children?: any[];\n buttonEnabled: boolean;\n buttonColorBase: UIVector;\n buttonAlphaBase: number;\n buttonColorDisabled: UIVector;\n buttonAlphaDisabled: number;\n buttonColorPressed: UIVector;\n buttonAlphaPressed: number;\n buttonColorHover: UIVector;\n buttonAlphaHover: number;\n buttonColorFocused: UIVector;\n buttonAlphaFocused: number;\n}\n\nfunction __asModVector(param: number[] | mod.Vector) {\n if (Array.isArray(param)) return mod.CreateVector(param[0], param[1], param.length == 2 ? 0 : param[2]);\n else return param;\n}\n\nfunction __asModMessage(param: string | mod.Message) {\n if (typeof param === 'string') return mod.Message(param);\n return param;\n}\n\nfunction __fillInDefaultArgs(params: UIParams) {\n if (!params.hasOwnProperty('name')) params.name = '';\n if (!params.hasOwnProperty('position')) params.position = mod.CreateVector(0, 0, 0);\n if (!params.hasOwnProperty('size')) params.size = mod.CreateVector(100, 100, 0);\n if (!params.hasOwnProperty('anchor')) params.anchor = mod.UIAnchor.TopLeft;\n if (!params.hasOwnProperty('parent')) params.parent = mod.GetUIRoot();\n if (!params.hasOwnProperty('visible')) params.visible = true;\n if (!params.hasOwnProperty('padding')) params.padding = params.type == 'Container' ? 0 : 8;\n if (!params.hasOwnProperty('bgColor')) params.bgColor = mod.CreateVector(0.25, 0.25, 0.25);\n if (!params.hasOwnProperty('bgAlpha')) params.bgAlpha = 0.5;\n if (!params.hasOwnProperty('bgFill')) params.bgFill = mod.UIBgFill.Solid;\n}\n\nfunction __setNameAndGetWidget(uniqueName: any, params: any) {\n let widget = mod.FindUIWidgetWithName(uniqueName) as mod.UIWidget;\n mod.SetUIWidgetName(widget, params.name);\n return widget;\n}\n\nconst __cUniqueName = '----uniquename----';\n\nfunction __addUIContainer(params: UIParams) {\n __fillInDefaultArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIContainer(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n restrict\n );\n } else {\n mod.AddUIContainer(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill\n );\n }\n let widget = __setNameAndGetWidget(__cUniqueName, params);\n if (params.children) {\n params.children.forEach((childParams: any) => {\n childParams.parent = widget;\n __addUIWidget(childParams);\n });\n }\n return widget;\n}\n\nfunction __fillInDefaultTextArgs(params: UIParams) {\n if (!params.hasOwnProperty('textLabel')) params.textLabel = '';\n if (!params.hasOwnProperty('textSize')) params.textSize = 0;\n if (!params.hasOwnProperty('textColor')) params.textColor = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('textAlpha')) params.textAlpha = 1;\n if (!params.hasOwnProperty('textAnchor')) params.textAnchor = mod.UIAnchor.CenterLeft;\n}\n\nfunction __addUIText(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultTextArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIText(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n __asModMessage(params.textLabel),\n params.textSize,\n __asModVector(params.textColor),\n params.textAlpha,\n params.textAnchor,\n restrict\n );\n } else {\n mod.AddUIText(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n __asModMessage(params.textLabel),\n params.textSize,\n __asModVector(params.textColor),\n params.textAlpha,\n params.textAnchor\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __fillInDefaultImageArgs(params: any) {\n if (!params.hasOwnProperty('imageType')) params.imageType = mod.UIImageType.None;\n if (!params.hasOwnProperty('imageColor')) params.imageColor = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('imageAlpha')) params.imageAlpha = 1;\n}\n\nfunction __addUIImage(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultImageArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIImage(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.imageType,\n __asModVector(params.imageColor),\n params.imageAlpha,\n restrict\n );\n } else {\n mod.AddUIImage(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.imageType,\n __asModVector(params.imageColor),\n params.imageAlpha\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __fillInDefaultArg(params: any, argName: any, defaultValue: any) {\n if (!params.hasOwnProperty(argName)) params[argName] = defaultValue;\n}\n\nfunction __fillInDefaultButtonArgs(params: any) {\n if (!params.hasOwnProperty('buttonEnabled')) params.buttonEnabled = true;\n if (!params.hasOwnProperty('buttonColorBase')) params.buttonColorBase = mod.CreateVector(0.7, 0.7, 0.7);\n if (!params.hasOwnProperty('buttonAlphaBase')) params.buttonAlphaBase = 1;\n if (!params.hasOwnProperty('buttonColorDisabled')) params.buttonColorDisabled = mod.CreateVector(0.2, 0.2, 0.2);\n if (!params.hasOwnProperty('buttonAlphaDisabled')) params.buttonAlphaDisabled = 0.5;\n if (!params.hasOwnProperty('buttonColorPressed')) params.buttonColorPressed = mod.CreateVector(0.25, 0.25, 0.25);\n if (!params.hasOwnProperty('buttonAlphaPressed')) params.buttonAlphaPressed = 1;\n if (!params.hasOwnProperty('buttonColorHover')) params.buttonColorHover = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('buttonAlphaHover')) params.buttonAlphaHover = 1;\n if (!params.hasOwnProperty('buttonColorFocused')) params.buttonColorFocused = mod.CreateVector(1, 1, 1);\n if (!params.hasOwnProperty('buttonAlphaFocused')) params.buttonAlphaFocused = 1;\n}\n\nfunction __addUIButton(params: UIParams) {\n __fillInDefaultArgs(params);\n __fillInDefaultButtonArgs(params);\n let restrict = params.teamId ?? params.playerId;\n if (restrict) {\n mod.AddUIButton(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.buttonEnabled,\n __asModVector(params.buttonColorBase),\n params.buttonAlphaBase,\n __asModVector(params.buttonColorDisabled),\n params.buttonAlphaDisabled,\n __asModVector(params.buttonColorPressed),\n params.buttonAlphaPressed,\n __asModVector(params.buttonColorHover),\n params.buttonAlphaHover,\n __asModVector(params.buttonColorFocused),\n params.buttonAlphaFocused,\n restrict\n );\n } else {\n mod.AddUIButton(\n __cUniqueName,\n __asModVector(params.position),\n __asModVector(params.size),\n params.anchor,\n params.parent,\n params.visible,\n params.padding,\n __asModVector(params.bgColor),\n params.bgAlpha,\n params.bgFill,\n params.buttonEnabled,\n __asModVector(params.buttonColorBase),\n params.buttonAlphaBase,\n __asModVector(params.buttonColorDisabled),\n params.buttonAlphaDisabled,\n __asModVector(params.buttonColorPressed),\n params.buttonAlphaPressed,\n __asModVector(params.buttonColorHover),\n params.buttonAlphaHover,\n __asModVector(params.buttonColorFocused),\n params.buttonAlphaFocused\n );\n }\n return __setNameAndGetWidget(__cUniqueName, params);\n}\n\nfunction __addUIWidget(params: UIParams) {\n if (params == null) return undefined;\n if (params.type == 'Container') return __addUIContainer(params);\n else if (params.type == 'Text') return __addUIText(params);\n else if (params.type == 'Image') return __addUIImage(params);\n else if (params.type == 'Button') return __addUIButton(params);\n return undefined;\n}\n\nexport function ParseUI(...params: any[]) {\n let widget: mod.UIWidget | undefined;\n for (let a = 0; a < params.length; a++) {\n widget = __addUIWidget(params[a] as UIParams);\n }\n return widget;\n}\n\nexport function DisplayCustomNotificationMessage(msg: mod.Message, custom: mod.CustomNotificationSlots, duration: number, target?: mod.Player | mod.Team) {\n const CreateHeader = async (widgetId: string, msg: mod.Message, targetPlayer: mod.Player, slot: number) => {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(50, 250 + slot * (40 + 5), 0),\n mod.CreateVector(250, 60, 0),\n mod.UIAnchor.TopRight,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n msg,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n targetPlayer\n );\n if (duration > 0) {\n await mod.Wait(duration);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n }\n };\n const CreateSubText = async (widgetId: string, msg: mod.Message, targetPlayer: mod.Player, slot: number) => {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(85, 270 + slot * (40 + 3), 0),\n mod.CreateVector(125, 40, 0),\n mod.UIAnchor.TopRight,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n msg,\n 20,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n targetPlayer\n );\n if (duration > 0) {\n await mod.Wait(duration);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n }\n };\n const createNotificationFunction = custom < 1 ? CreateHeader : CreateSubText;\n\n if (target) {\n // if target is player, fill message in their slot\n if (mod.IsType(target, mod.Types.Player)) {\n const widgetId = custom + String(target);\n createNotificationFunction(widgetId, msg, target as mod.Player, custom);\n }\n // if target is team, fill message in slot for all players on team\n else if (mod.IsType(target, mod.Types.Team)) {\n const teamMates = getPlayersInTeam(target as mod.Team);\n teamMates.forEach((player) => {\n const widgetId = custom + String(player);\n createNotificationFunction(widgetId, msg, player, custom);\n });\n }\n } else {\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n const widgetId = custom + String(player);\n createNotificationFunction(widgetId, msg, player, custom);\n }\n }\n}\n\nexport function ShowEventGameModeMessage(event: mod.Message, target?: mod.Player | mod.Team) {\n //TODO: restore these once DisplayGameModeMessage is fixed\n // if (target) {\n // mod.DisplayGameModeMessage(event, target as mod.Player );\n // } else{\n // mod.DisplayGameModeMessage(event);\n // }\n\n const MakeShiftDisplayGameModeMessage = async (message: mod.Message, target?: mod.Player | mod.Team) => {\n const widgetId = 'GameModeMessage';\n if (target) {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(0, 0, 0),\n mod.CreateVector(2500, 80, 0),\n mod.UIAnchor.TopCenter,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n message,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center,\n target as mod.Player\n );\n } else {\n mod.AddUIText(\n widgetId,\n mod.CreateVector(0, 0, 0),\n mod.CreateVector(2500, 80, 0),\n mod.UIAnchor.TopCenter,\n mod.GetUIRoot(),\n true,\n 8,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIBgFill.Blur,\n message,\n 30,\n mod.CreateVector(1, 1, 1),\n 1,\n mod.UIAnchor.Center\n );\n }\n\n await mod.Wait(6);\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(widgetId));\n };\n\n if (target) {\n MakeShiftDisplayGameModeMessage(event, target as mod.Player);\n } else {\n MakeShiftDisplayGameModeMessage(event);\n }\n}\n\nexport function ShowHighlightedGameModeMessage(event: mod.Message, target?: mod.Player | mod.Team) {\n if (target) {\n mod.DisplayHighlightedWorldLogMessage(event, target as mod.Player);\n } else {\n mod.DisplayHighlightedWorldLogMessage(event);\n }\n}\n\nexport function ShowNotificationMessage(msg: mod.Message, target?: mod.Player | mod.Team) {\n if (target) {\n mod.DisplayNotificationMessage(msg, target as mod.Player);\n } else {\n mod.DisplayNotificationMessage(msg);\n }\n}\n\nexport function ClearAllCustomNotificationMessages(target: mod.Player) {\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.HeaderText, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText1, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText2, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText3, target);\n } catch {}\n try {\n ClearCustomNotificationMessage(mod.CustomNotificationSlots.MessageText4, target);\n } catch {}\n}\n\nexport function ClearCustomNotificationMessage(custom: mod.CustomNotificationSlots, target?: mod.Player | mod.Team) {\n try {\n if (target) {\n // if target is player, just delete message in their slot\n if (mod.IsType(target, mod.Types.Player)) {\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(target as mod.Player)));\n }\n // if target is team, delete message in slot for all players on team\n else if (mod.IsType(target, mod.Types.Team)) {\n const teamMembers = getPlayersInTeam(target as mod.Team);\n for (let i = 0; i < teamMembers.length; i++) {\n let player = teamMembers[i];\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(player)));\n }\n }\n } else {\n // if no target, delete for all players\n const allPlayers = mod.AllPlayers();\n const n = mod.CountOf(allPlayers);\n for (let i = 0; i < n; i++) {\n let player = mod.ValueInArray(allPlayers, i) as mod.Player;\n mod.DeleteUIWidget(mod.FindUIWidgetWithName(custom + String(player)));\n }\n }\n } catch {\n console.error('Could not clear custom message for specified target(s)');\n }\n}\n","import { ParseUI } from \"../../modlib/index.ts\";\nimport { MakeMessage } from \"../message.ts\";\n\nexport class CountdownUI {\n\tstatic #uniqueID = 0;\n\t#playerId: mod.Player;\n\t#playerProfileId: number;\n\n\theaderWidget: mod.UIWidget | undefined;\n\ttextWidget: mod.UIWidget | undefined;\n\n\tconstructor(playerId: mod.Player) {\n\t\tthis.#playerProfileId = CountdownUI.#uniqueID++;\n\t\tthis.#playerId = playerId;\n\n\t\tconst bfBlueColor = [0.678, 0.753, 0.8];\n\t\tconst height = 125;\n\t\tthis.headerWidget = ParseUI({\n\t\t\ttype: \"Container\",\n\t\t\tsize: [150, height],\n\t\t\tposition: [0, 50],\n\t\t\tname: `countdown_${this.#playerProfileId}`,\n\t\t\tanchor: mod.UIAnchor.TopCenter,\n\t\t\tbgFill: mod.UIBgFill.Blur,\n\t\t\tbgColor: [0.2, 0.2, 0.3],\n\t\t\tbgAlpha: 0.9,\n\t\t\tplayerId: this.#playerId,\n\t\t\tvisible: false,\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\ttype: \"Container\",\n\t\t\t\t\tname: `countdown_line_right_${this.#playerProfileId}`,\n\t\t\t\t\tsize: [2, height],\n\t\t\t\t\tposition: [75, 0],\n\t\t\t\t\tanchor: mod.UIAnchor.Center,\n\t\t\t\t\tbgFill: mod.UIBgFill.Solid,\n\t\t\t\t\tbgColor: bfBlueColor,\n\t\t\t\t\tbgAlpha: 1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"Container\",\n\t\t\t\t\tname: `countdown_line_left_${this.#playerProfileId}`,\n\t\t\t\t\tsize: [2, height],\n\t\t\t\t\tposition: [-75, 0],\n\t\t\t\t\tanchor: mod.UIAnchor.Center,\n\t\t\t\t\tbgFill: mod.UIBgFill.Solid,\n\t\t\t\t\tbgColor: bfBlueColor,\n\t\t\t\t\tbgAlpha: 1,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: \"Text\",\n\t\t\t\t\tname: `countdown_text${this.#playerProfileId}`,\n\t\t\t\t\tsize: [100, height],\n\t\t\t\t\tposition: [0, 0],\n\t\t\t\t\tanchor: mod.UIAnchor.Center,\n\t\t\t\t\tbgFill: mod.UIBgFill.None,\n\t\t\t\t\ttextColor: bfBlueColor,\n\t\t\t\t\ttextAnchor: mod.UIAnchor.Center,\n\t\t\t\t\ttextLabel: MakeMessage(mod.stringkeys.__sdk__CountdownUI),\n\t\t\t\t\ttextSize: 85,\n\t\t\t\t},\n\t\t\t],\n\t\t});\n\t\tthis.textWidget = mod.FindUIWidgetWithName(\n\t\t\t`countdown_text${this.#playerProfileId}`,\n\t\t);\n\t}\n\n\tdelete() {\n\t\tthis.headerWidget && mod.DeleteUIWidget(this.headerWidget);\n\t\t//this.textWidget && mod.DeleteUIWidget(this.textWidget)\n\t}\n\n\topen(text: string, countdowntime: number) {\n\t\tthis.headerWidget && mod.SetUIWidgetVisible(this.headerWidget, true);\n\t\tthis.textWidget &&\n\t\t\tmod.SetUITextLabel(this.textWidget, MakeMessage(text, countdowntime));\n\t}\n\n\tupdate(text: string, countdowntime: number) {\n\t\tthis.textWidget &&\n\t\t\tmod.SetUITextLabel(this.textWidget, MakeMessage(text, countdowntime));\n\t}\n\n\tasync close(delayclose: number = 0) {\n\t\tawait mod.Wait(delayclose);\n\t\tthis.headerWidget && mod.SetUIWidgetVisible(this.headerWidget, false);\n\t}\n}\n\nexport const bf6Strings = {\n\t__sdk__CountdownUI: \"{}\",\n};\n","import * as countdown from \"./countdown.ts\";\n\nexport * from \"./countdown.ts\";\n\nexport default {\n\tcountdown,\n};\n","import * as message from \"./message.ts\";\n\nexport * from \"./message.ts\";\n\nimport * as ui from \"./ui/index.ts\";\n\nexport * from \"./ui/index.ts\";\n\nexport default {\n\tmessage,\n\tui,\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bf6mods/sdk",
3
- "version": "1.3.0",
3
+ "version": "1.5.0",
4
4
  "description": "TypeScript definitions for the BF6 modding API",
5
5
  "type": "module",
6
6
  "license": "MIT",