Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
hotspringtrigger.c
Go to the documentation of this file.
1
3{
4 static HotSpringTrigger m_SourceDamageInstance; // this is used only server side for logging damage source in admin log
5 static const float HEAT_DAMAGE_MULTIPLIER = 5;
6 static const float HEAT_DAMAGE_TICK_TIME = 2;
7
9
10 override void EEInit()
11 {
12 if (GetGame().IsServer() && !m_SourceDamageInstance)
13 m_SourceDamageInstance = this;
14
15 super.EEInit();
16
17 #ifndef SERVER
19 #endif
20 }
21
22 override string GetDisplayName()
23 {
24 return "#STR_hotspring";
25 }
26
27 override void EEDelete( EntityAI parent )
28 {
30 m_VaporParticle.Stop();
31
32 super.EEDelete(parent);
33 }
34
35 override void OnEnterServerEvent( TriggerInsider insider )
36 {
37 super.OnEnterServerEvent(insider);
38
39 if (insider)
40 {
41 PlayerBase playerInsider = PlayerBase.Cast(insider.GetObject());
42 if (playerInsider)
43 playerInsider.SetInEffectAreaTypeFlag(EEffectAreaType.HOT_SPRING);
44 }
45 }
46
47 override void OnLeaveServerEvent( TriggerInsider insider )
48 {
49 super.OnLeaveServerEvent(insider);
50
51 if (insider)
52 {
53 PlayerBase playerInsider = PlayerBase.Cast(insider.GetObject());
54 if (playerInsider)
55 playerInsider.UnsetInEffectAreaTypeFlag(EEffectAreaType.HOT_SPRING);
56 }
57 }
58
59 override void OnEnterClientEvent( TriggerInsider insider )
60 {
61 super.OnEnterClientEvent(insider);
62
63 if (insider)
64 {
65 PlayerBase playerInsider = PlayerBase.Cast(insider.GetObject());
66 if (playerInsider)
67 playerInsider.SetInEffectAreaTypeFlag(EEffectAreaType.HOT_SPRING);
68 }
69 }
70
71 override void OnLeaveClientEvent( TriggerInsider insider )
72 {
73 super.OnLeaveClientEvent(insider);
74
75 if (insider)
76 {
77 PlayerBase playerInsider = PlayerBase.Cast(insider.GetObject());
78 if (playerInsider)
79 playerInsider.UnsetInEffectAreaTypeFlag(EEffectAreaType.HOT_SPRING);
80 }
81 }
82
83 protected void SpawnVaporEffect()
84 {
85 vector pos = GetPosition();
86 pos[1] = GetGame().SurfaceRoadY(pos[0], pos[2], RoadSurfaceDetection.UNDER); // Snap to water volume surface or terrain
87
88 m_VaporParticle = ParticleManager.GetInstance().PlayInWorld(ParticleList.HOTPSRING_WATERVAPOR, pos);
89
90 int randSize = Math.RandomIntInclusive(-1,2);
91 int randRate = Math.RandomIntInclusive(-1,2);
92
95 }
96
97 static void ApplyEffects(PlayerBase player)
98 {
99 float waterLevel = player.GetCurrentWaterLevel();
100 if (waterLevel > 0.5)
101 player.ProcessDirectDamage(DamageType.CUSTOM, m_SourceDamageInstance, "", "HeatDamage", "0 0 0", HEAT_DAMAGE_MULTIPLIER * waterLevel);
102 }
103}
proto native float SurfaceRoadY(float x, float z, RoadSurfaceDetection rsd=RoadSurfaceDetection.LEGACY)
Hot spring area trigger.
override void OnLeaveServerEvent(TriggerInsider insider)
static void ApplyEffects(PlayerBase player)
override void OnEnterServerEvent(TriggerInsider insider)
override void EEInit()
override void OnLeaveClientEvent(TriggerInsider insider)
ParticleSource m_VaporParticle
override string GetDisplayName()
override void OnEnterClientEvent(TriggerInsider insider)
override void EEDelete(EntityAI parent)
Definition enmath.c:7
Entity which has the particle instance as an ObjectComponent.
override void IncrementParticleParam(int parameter_id, float value)
Increments the value of the given parameter relatively from the CURRENT value.
static override Particle PlayInWorld(int particle_id, vector global_pos)
Creates a particle emitter on the given position and activates it.
The object which is in a trigger and its metadata.
DamageType
exposed from C++ (do not change)
proto native CGame GetGame()
EmitorParam
Definition envisual.c:114
class JsonUndergroundAreaTriggerData GetPosition
void ParticleManager(ParticleManagerSettings settings)
Constructor (ctor)