8 protected int m_iMinAiGroups;
11 protected int m_iMaxAiGroups;
14 protected float m_fAiGroupsPerPlayer;
19 [
Attribute(defvalue:
"{EBD2A7DA0A3C6E17}UI/layouts/Menus/CleanSweep/CleanSweepAreaSelection.layout",
desc:
"Layout for area selection")]
37 [
RplProp(onRplName:
"OnAreaChanged")]
65 array<SCR_CleanSweepArea> activeAreas = {};
67 if (activeAreasCount < 1)
69 Print(
"CleanSweep has not enough active playable areas. GameMode will not function.",
LogLevel.ERROR);
81 AIWaypoint wp = AIWaypoint.Cast(GetWorld().FindEntityByName(
"WP1"));
83 wp.SetOrigin(area.GetOrigin());
85 vector centerPos = area.GetOrigin();
86 float rangeSq = area.m_Range * area.m_Range;
87 array<IEntity> entities = {};
88 array<SCR_SpawnPoint> spawnPoints =
SCR_SpawnPoint.GetSpawnPoints();
89 GetWorld().GetActiveEntities(entities);
93 if (
vector.DistanceSqXZ(centerPos, spawnPoint.GetOrigin()) < rangeSq)
95 FactionKey faction = spawnPoint.GetFactionKey();
96 if (faction ==
"USSR")
113 foreach (
IEntity entity : entities)
116 SCR_VehicleSpawner vehicleSpawner = SCR_VehicleSpawner.Cast(entity.FindComponent(SCR_VehicleSpawner));
120 if (
vector.DistanceSqXZ(centerPos, entity.GetOrigin()) < rangeSq)
121 vehicleSpawner.PerformSpawn();
125 m_bAutoPlayerRespawn =
true;
133 array<int> players = {};
134 int count =
GetGame().GetPlayerManager().GetPlayers(players);
135 PlayerController playerController;
137 foreach (
int player : players)
139 playerController =
GetGame().GetPlayerManager().GetPlayerController(player);
140 if (!playerController)
144 if (!networkComponent)
147 networkComponent.CommitSuicide();
190 damageManager = character.GetDamageManager();
216 super.EOnFrame(owner, timeSlice);
219 GetGame().GetInputManager().ActivateContext(
"MenuContext");
236 protected void ShowHint(
int hintID,
float showTime)
252 GetGame().GetCallqueue().CallLater(this.HideHint, showTime * 1000);
281 int enemyGroupsCount =
Math.ClampInt(
Math.Ceil(
game.GetPlayerManager().GetPlayerCount() * m_fAiGroupsPerPlayer), m_iMinAiGroups, m_iMaxAiGroups);
288 array<AIAgent> agents;
289 for (
int i; i < enemyGroupsCount; i++)
291 generator.SetSeed(
Math.RandomInt(0, 100));
297 vector position = generator.GenerateRandomPointInRadius(0, 2, spawnPoint.GetOrigin());
298 position[1] = spawnPoint.GetOrigin()[1];
300 params.TransformMode = ETransformMode.WORLD;
317 newGrp.GetAgents(agents);
318 foreach (AIAgent agent : agents)
337 super.OnPlayerKilled(playerId, playerEntity, killerEntity, killer);
344 array<int> players = {};
345 int count =
GetGame().GetPlayerManager().GetPlayers(players);
353 foreach (
int player : players)
355 controlledEntity = SCR_PossessingManagerComponent.GetPlayerMainEntity(player);
356 if (!controlledEntity)
364 if (countedEntities != 0)
365 center /= countedEntities;
381 if (!area || !area.m_Active)
384 activeAreas.Insert(area);
393 m_AttackWP = AIWaypoint.Cast(GetWorld().FindEntityByName(
"WP1"));
403 if (!playerController)
406 return playerController;
412 PlayerController playerController;
414 array<int> players = {};
416 playerManager.GetPlayers(players);
417 foreach (
int player : players)
419 if (player == exclude)
422 playerController = playerManager.GetPlayerController(player);
423 if (playerController)
430 return playerController;
437 if (!playerController)
441 if (!networkComponent)
444 networkComponent.ShowAreaSelectionScreen();
461 array<SCR_CleanSweepArea> activeAreas = {};
466 selectionBox.AddItem(activeArea.GetName());
469 selectionBox.SetCurrentItem(0);
475 super.OnPlayerRegistered(playerId);
487 super.OnPlayerDisconnected(playerId, cause, timeout);
500 super.EOnInit(owner);
501 m_bAutoPlayerRespawn =
false;
514 m_wRoot =
game.GetWorkspace().CreateWidgets(
"{DE9F713BE2C5D190}UI/layouts/HUD/HintFrame.layout");
524 title.SetText(
"CLEAN SWEEP");
ArmaReforgerScripted GetGame()
RplMode
Mode of replication.
SCR_CacheNoteComponentClass ScriptComponentClass RplProp()] protected ref array< string > m_aLines
RplComponent m_RplComponent
void SCR_CleanSweepArea(IEntitySource src, IEntity parent)
void SCR_CleanSweepNetworkComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
ref array< SCR_SpawnPoint > m_aPlayerSpawnPoints
PlayerController PickNewGameMaster(int exclude=-1)
ref array< IEntity > m_aEnemySoldiers
Widget m_wAreaSelectionWidget
void SetArea(int targetAreaID)
const string ENEMY_PRESENCE_ELIMINATED_TEXT
void ShowAreaSelectionUI()
Used by SCR_CleanSweepNetworkComponent.
vector GetPlayersCenter()
void CheckActiveAreaState()
ref array< SCR_AIGroup > m_aGroups
const int INVALID_AREA_INDEX
PlayerController GetGameMaster()
void ReplicatedShowHint(int hintID, float showTime)
void SetSwapSides(bool swapSides)
void RPC_ShowHint(int hintID, float time)
void ShowAreaSelectionToGameMaster()
ref array< SCR_SpawnPoint > m_aEnemySpawnPoints
int GetActiveAreas(notnull array< SCR_CleanSweepArea > activeAreas)
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
proto external vector GetOrigin()
Object holding reference to resource. In destructor release the resource.
override void OnPlayerRegistered(int playerId)
override void EOnInit(IEntity owner)
ScriptInvokerBase< SCR_BaseGameMode_PlayerId > GetOnPlayerRegistered()
override void OnPlayerDisconnected(int playerId, KickCauseCode cause, int timeout)
override void EOnFrame(IEntity owner, float timeSlice)
override void OnPlayerKilled(int playerId, IEntity playerEntity, IEntity killerEntity, notnull Instigator killer)
Default player kill behaviour. Called when a player is killed (and HandlePlayerKilled returns true).
Spawn point entity defines positions on which players can possibly spawn.
proto void Print(void var, LogLevel level=LogLevel.NORMAL)
Prints content of variable to console/log.
LogLevel
Enum with severity of the logging message.
SCR_FieldOfViewSettings Attribute
override void OnPlayerRegistered(int playerId)
void RplRpc(RplChannel channel, RplRcver rcver, RplCondition condition=RplCondition.None, string customConditionName="")
RplChannel
Communication channel. Reliable is guaranteed to be delivered. Unreliable not.