Dayz Explorer  1.24.157551 (v105080)
Dayz Code Explorer by Zeroy
flashgrenade.c
Go to the documentation of this file.
1 class FlashGrenade extends Grenade_Base
2 {
3  const float FX_RANGE_MAX_MULT = 1.0;
4 
5  override void OnExplosionEffects(Object source, Object directHit, int componentIndex, string surface, vector pos, vector surfNormal, float energyFactor, float explosionFactor, bool isWater, string ammoType)
6  {
7  super.OnExplosionEffects(source, directHit, componentIndex, surface, pos, surfNormal, energyFactor, explosionFactor, isWater, ammoType);
8 
9  PlayerBase player = PlayerBase.Cast(GetGame().GetPlayer());
10 
11  if (player)
12  {
13  vector headPos = player.GetDamageZonePos("Head"); // animated position in the middle of the zone
14  float ammoRangeKill = GetGame().ConfigGetFloat(string.Format("CfgAmmo %1 indirectHitRange", ammoType));
15  float ammoRangeMaxMult = 4.0;
16 
17  string indirectHitRangeMultiplier = string.Format("CfgAmmo %1 indirectHitRangeMultiplier", ammoType);
18  if (GetGame().ConfigIsExisting(indirectHitRangeMultiplier))
19  {
21  ammoRangeMaxMult = Math.Clamp(GetGame().ConfigGetFloat(indirectHitRangeMultiplier), 1.0, float.MAX);
22  }
23 
24  float ammoRangeMax = ammoRangeKill * ammoRangeMaxMult;
25  ammoRangeMax = Math.Clamp(ammoRangeMax * FX_RANGE_MAX_MULT, ammoRangeKill, ammoRangeMax);
26 
27  float dist = vector.Distance(headPos, pos);
28  float distSq = vector.DistanceSq(headPos, pos);
29  float radiusMaxSq = Math.SqrFloat(ammoRangeMax);
30 
31  if (distSq <= radiusMaxSq)
32  {
33  // ignore collisions with parent if fireplace
34  InventoryItem invItem = InventoryItem.Cast(source);
35  EntityAI parent = invItem.GetHierarchyParent();
36  array<Object> excluded = new array<Object>;
37 
38  if (!parent || !parent.IsFireplace())
39  parent = null;
40  else if (parent)
41  excluded.Insert(parent);
42 
44  excluded.Insert(this); //Ignore self for visibility check
45 
46  //There shouldn't be cases justifying we go further than first entry (if in fireplace, self does not impact)
47  RaycastRVParams rayParams = new RaycastRVParams(pos, headPos, excluded[0]);
48  rayParams.flags = CollisionFlags.ALLOBJECTS;
49  DayZPhysics.RaycastRVProxy(rayParams, results, excluded);
50 
52  array<Object> hitObjects = new array<Object>;
53  for (int i = 0; i < results.Count(); i++)
54  {
55  if (results[i].obj && !results[i].obj.IsInherited(ItemBase))
56  {
57  hitObjects.Insert(results[i].obj);
58  }
59  }
60 
61  //If player is not first index, object is between player and grenade
62  if (hitObjects.Count() && PlayerBase.Cast(hitObjects[0]))
63  {
64  float effectCoef;
65  if (ammoRangeMax == ammoRangeKill)
66  {
67  effectCoef = 1.0; //edge case, landed right on the edge
68  }
69  effectCoef = 1 - ((dist - ammoRangeKill) / (ammoRangeMax - ammoRangeKill));
70  effectCoef = Math.Clamp(effectCoef, 0.1, 100.0);
71 
72  player.OnPlayerReceiveFlashbangHitStart(MiscGameplayFunctions.IsPlayerOrientedTowardPos(player, pos, 60));
73  player.GetFlashbangEffect().SetupFlashbangValues(effectCoef, effectCoef, effectCoef);
74  }
75  }
76  }
77  }
78 
79  void FlashGrenade()
80  {
81  SetAmmoType("FlashGrenade_Ammo");
82  SetFuseDelay(2);
83  SetGrenadeType(EGrenadeType.ILLUMINATING);
85  }
86 
87  protected override void CreateLight()
88  {
90  }
91 
92  void ~FlashGrenade() {}
93 }
ItemBase
Definition: inventoryitem.c:730
GetGame
proto native CGame GetGame()
SetParticleExplosion
void SetParticleExplosion(int particle)
Definition: explosivesbase.c:294
Grenade_Base
Definition: flashgrenade.c:1
FlashGrenadeLight
void FlashGrenadeLight()
Definition: grenade_base.c:17
m_Light
protected ExplosiveLight m_Light
light
Definition: explosivesbase.c:31
EGrenadeType
EGrenadeType
Definition: grenade_base.c:1
InventoryItem
Definition: itembase.c:13
CollisionFlags
CollisionFlags
Definition: endebug.c:140
GetPosition
class JsonUndergroundAreaTriggerData GetPosition
Definition: undergroundarealoader.c:9
ParticleList
Definition: particlelist.c:11
PlayerBase
Definition: playerbaseclient.c:1
RaycastRVParams
Definition: dayzphysics.c:49
vector
Definition: enconvert.c:105
ExplosiveLight
Definition: explosivesbase.c:1
CreateLight
protected void CreateLight()
Definition: explosivesbase.c:145
Object
Definition: objecttyped.c:1
ScriptedLightBase
Definition: pointlightbase.c:1
array< Object >
GetPlayer
protected void GetPlayer()
Definition: crosshairselector.c:127
SetAmmoType
void SetAmmoType(string pAmmoType)
Definition: explosivesbase.c:283
DayZPhysics
Definition: dayzphysics.c:123
Math
Definition: enmath.c:6
MAX
const int MAX
Definition: enconvert.c:27
EntityAI
Definition: building.c:5
OnExplosionEffects
override void OnExplosionEffects(Object source, Object directHit, int componentIndex, string surface, vector pos, vector surfNormal, float energyFactor, float explosionFactor, bool isWater, string ammoType)
Definition: destructioneffects.c:39