Arma Reforger Explorer  1.1.0.42
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
SCR_SpawnProtectionComponent.c
Go to the documentation of this file.
1 [EntityEditorProps(category: "GameScripted/GameMode", description: "Spawn protection component for gamemode.", color: "0 0 255 255")]
3 {
4 }
5 
6 class SCR_SpawnProtectionComponent : SCR_BaseGameModeComponent
7 {
8  [Attribute(defvalue: "0.1", desc: "How long should be player protected?")]
9  protected float m_fProtectionTime;
10 
11  [Attribute(defvalue: "1", desc: "Should be protection disabled if player shoots?")]
12  protected bool m_bDisableOnAttack;
13 
14  [Attribute(defvalue: "0", desc: "Allow player spawnpoints?")]
15  protected bool m_bAllowPlayerSpawnpoints;
16 
17  //------------------------------------------------------------------------------------------------
23  override bool PreparePlayerEntity_S(SCR_SpawnRequestComponent requestComponent, SCR_SpawnHandlerComponent handlerComponent, SCR_SpawnData data, IEntity entity)
24  {
25  #ifdef _ENABLE_RESPAWN_LOGS
26  PrintFormat("%1::PreparePlayerEntity_S(playerId: %2, entity: %3)", Type().ToString(),
27  requestComponent.GetPlayerId(), entity);
28  #endif
29 
30  SCR_PlayerController controller = SCR_PlayerController.Cast(requestComponent.GetPlayerController());
31 
32  // Check for radio respawns
33  if (!m_bAllowPlayerSpawnpoints)
34  {
36  if (spawnData)
37  {
38  // If not allowed on player spawns, skip
39  if (SCR_PlayerRadioSpawnPoint.Cast(spawnData.GetSpawnPoint()))
40  return true;
41  }
42  }
43 
44  SCR_DamageManagerComponent damageManager = SCR_DamageManagerComponent.Cast(entity.FindComponent(SCR_DamageManagerComponent));
45  if (!damageManager)
46  return true;
47 
48  #ifdef _ENABLE_RESPAWN_LOGS
49  PrintFormat(" %1::EnableDamageHandling(false, playerId: %2, entity: %3)", Type().ToString(),
50  requestComponent.GetPlayerId(), entity);
51  #endif
52 
53  // Disable damage handling
54  damageManager.EnableDamageHandling(false);
55 
56  // TODO: Check also for and grenade throw
57  if (m_bDisableOnAttack)
58  {
59  EventHandlerManagerComponent eventHandlerManager = EventHandlerManagerComponent.Cast(entity.FindComponent(EventHandlerManagerComponent));
60  if (eventHandlerManager)
61  eventHandlerManager.RegisterScriptHandler("OnAmmoCountChanged", entity, OnPlayerAmmoChangeCallback);
62 
63  SCR_MeleeComponent meleeComp = SCR_MeleeComponent.Cast(entity.FindComponent(SCR_MeleeComponent));
64  if (meleeComp)
65  meleeComp.GetOnMeleePerformed().Insert(DisablePlayerProtection);
66  }
67 
68  return true;
69  }
70 
71  //------------------------------------------------------------------------------------------------
72  override void OnPlayerSpawnFinalize_S(SCR_SpawnRequestComponent requestComponent, SCR_SpawnHandlerComponent handlerComponent, SCR_SpawnData data, IEntity entity)
73  {
74  //Using protection time parameter as delay for CallLater, DisablePlayerProtection is called to disable protection on specific entity
75  GetGame().GetCallqueue().CallLater(DisablePlayerProtection, m_fProtectionTime * 1000, false, entity);
76  }
77 
78  //------------------------------------------------------------------------------------------------
79  override void OnSpawnPlayerEntityFailure_S(SCR_SpawnRequestComponent requestComponent, SCR_SpawnHandlerComponent handlerComponent, IEntity entity, SCR_SpawnData data, SCR_ESpawnResult reason)
80  {
82  }
83 
84  //------------------------------------------------------------------------------------------------
91  protected void OnPlayerAmmoChangeCallback(BaseWeaponComponent currentWeapon, BaseMuzzleComponent currentMuzzle, BaseMagazineComponent magazine, int ammoCount, bool isChambered)
92  {
93  if (!currentWeapon)
94  return;
95 
96  //Get weapon entity to which is component assigned
97  IEntity weaponEntity = currentWeapon.GetOwner();
98  if (!weaponEntity)
99  return;
100 
101  //Get parent of weapon, and check if it is character or not.
102  IEntity parent = weaponEntity.GetParent();
103  if (parent && parent.IsInherited(ChimeraCharacter))
104  DisablePlayerProtection(parent);
105  }
106 
107  //------------------------------------------------------------------------------------------------
108  protected void DisablePlayerProtection(IEntity playerEntity)
109  {
110  if (!playerEntity)
111  return;
112 
113  SCR_DamageManagerComponent damageManager = SCR_DamageManagerComponent.Cast(playerEntity.FindComponent(SCR_DamageManagerComponent));
114  if (!damageManager && damageManager.IsDamageHandlingEnabled())
115  return;
116 
117  damageManager.EnableDamageHandling(true);
118 
119  #ifdef _ENABLE_RESPAWN_LOGS
120  PrintFormat(" %1::EnableDamageHandling(true, playerId: %2, entity: %3)", Type().ToString(),
121  GetGame().GetPlayerManager().GetPlayerIdFromControlledEntity(playerEntity), playerEntity);
122  #endif
123 
124  if (!m_bDisableOnAttack)
125  return;
126 
127  EventHandlerManagerComponent eventHandlerManager = EventHandlerManagerComponent.Cast(playerEntity.FindComponent(EventHandlerManagerComponent));
128  if (eventHandlerManager)
129  eventHandlerManager.RemoveScriptHandler("OnAmmoCountChanged", playerEntity, OnPlayerAmmoChangeCallback);
130 
131  SCR_MeleeComponent meleeComp = SCR_MeleeComponent.Cast(playerEntity.FindComponent(SCR_MeleeComponent));
132  if (meleeComp)
133  meleeComp.GetOnMeleePerformed().Remove(DisablePlayerProtection);
134  }
135 
136  //------------------------------------------------------------------------------------------------
137  override void OnPostInit(IEntity owner)
138  {
139  if (!GetGame().InPlayMode())
140  return;
141  }
142 }
SCR_PlayerController
Definition: SCR_PlayerController.c:31
SCR_ESpawnResult
SCR_ESpawnResult
Definition: SCR_ESpawnResult.c:8
OnSpawnPlayerEntityFailure_S
override void OnSpawnPlayerEntityFailure_S(SCR_SpawnRequestComponent requestComponent, SCR_SpawnHandlerComponent handlerComponent, IEntity entity, SCR_SpawnData data, SCR_ESpawnResult reason)
Definition: SCR_SpawnProtectionComponent.c:79
EntityEditorProps
enum EQueryType EntityEditorProps(category:"GameScripted/Sound", description:"THIS IS THE SCRIPT DESCRIPTION.", color:"0 0 255 255")
Definition: SCR_AmbientSoundsComponent.c:12
GetGame
ArmaReforgerScripted GetGame()
Definition: game.c:1424
desc
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
Definition: SCR_RespawnBriefingComponent.c:17
SCR_SpawnData
Definition: SCR_SpawnData.c:9
Attribute
SCR_SpawnProtectionComponentClass SCR_BaseGameModeComponentClass Attribute(defvalue:"0.1", desc:"How long should be player protected?")
Definition: SCR_SpawnProtectionComponent.c:8
BaseWeaponComponent
Definition: BaseWeaponComponent.c:12
SCR_SpawnPointSpawnData
Definition: SCR_SpawnPointSpawnData.c:2
OnPostInit
override void OnPostInit(IEntity owner)
Called on PostInit when all components are added.
Definition: SCR_SpawnProtectionComponent.c:137
OnPlayerAmmoChangeCallback
protected void OnPlayerAmmoChangeCallback(BaseWeaponComponent currentWeapon, BaseMuzzleComponent currentMuzzle, BaseMagazineComponent magazine, int ammoCount, bool isChambered)
Definition: SCR_SpawnProtectionComponent.c:91
OnPlayerSpawnFinalize_S
override void OnPlayerSpawnFinalize_S(SCR_SpawnRequestComponent requestComponent, SCR_SpawnHandlerComponent handlerComponent, SCR_SpawnData data, IEntity entity)
Definition: SCR_SpawnProtectionComponent.c:72
data
Get all prefabs that have the spawner data
Definition: SCR_EntityCatalogManagerComponent.c:305
BaseMuzzleComponent
Definition: BaseMuzzleComponent.c:12
DisablePlayerProtection
protected void DisablePlayerProtection(IEntity playerEntity)
Definition: SCR_SpawnProtectionComponent.c:108
SCR_BaseGameModeComponentClass
Definition: SCR_BaseGameModeComponent.c:2
SCR_SpawnProtectionComponentClass
Definition: SCR_SpawnProtectionComponent.c:2
SCR_MeleeComponent
Definition: SCR_MeleeComponent.c:23
PreparePlayerEntity_S
bool PreparePlayerEntity_S(SCR_SpawnRequestComponent requestComponent, SCR_SpawnHandlerComponent handlerComponent, SCR_SpawnData data, IEntity entity)
Definition: SCR_BaseGameModeComponent.c:98
category
params category
Definition: SCR_VehicleDamageManagerComponent.c:180
SCR_BaseGameModeComponent
void SCR_BaseGameModeComponent(IEntityComponentSource src, IEntity ent, IEntity parent)
Definition: SCR_BaseGameModeComponent.c:199