removes possible obstacles made by items around the grenade(or on the same position)
6 {
7 super.OnExplosionEffects(source, directHit, componentIndex, surface, pos, surfNormal, energyFactor, explosionFactor, isWater, ammoType);
8
10
11 if (player)
12 {
13 vector headPos = player.GetDamageZonePos("Head");
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
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
43 array<ref RaycastRVResult> results = new array<ref RaycastRVResult>;
44 excluded.Insert(this);
45
46
47 RaycastRVParams rayParams = new RaycastRVParams(pos, headPos, excluded[0]);
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
62 if (hitObjects.Count() && PlayerBase.Cast(hitObjects[0]))
63 {
64 float effectCoef;
65 if (ammoRangeMax == ammoRangeKill)
66 {
67 effectCoef = 1.0;
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 }
class GP5GasMask extends MaskBase ItemBase
proto native float ConfigGetFloat(string path)
Get float value from config on path.
const float FX_RANGE_MAX_MULT
proto native CGame GetGame()