Dayz Explorer 1.28.160049
Loading...
Searching...
No Matches
contaminatedtrigger.c
Go to the documentation of this file.
1// In this file you will find both Static and Dynamic contaminated area triggers
2class ContaminatedTrigger extends EffectTrigger
3{
4 const float DAMAGE_TICK_RATE = 10;//deal damage every n-th second
5
6 override string GetDisplayName()
7 {
8 return "#STR_contaminatedarea";
9 }
10
11 // ----------------------------------------------
12 // TRIGGER EVENTS
13 // ----------------------------------------------
14
15 override void OnEnterServerEvent( TriggerInsider insider )
16 {
17 super.OnEnterServerEvent( insider );
18 //Print("Entered A " + GetType());
19 if ( insider )
20 {
21 DayZCreatureAI creature = DayZCreatureAI.Cast( insider.GetObject() );
22
23 if (creature)
24 creature.IncreaseEffectTriggerCount();
25 }
26
27 }
28
29 override void OnLeaveServerEvent( TriggerInsider insider )
30 {
31 super.OnLeaveServerEvent( insider );
32 //Print("Left A " + GetType());
33 if ( insider )
34 {
35 DayZCreatureAI creature = DayZCreatureAI.Cast( insider.GetObject() );
36
37 if (creature)
38 creature.DecreaseEffectTriggerCount();
39
40 }
41 }
42
43 override void OnEnterClientEvent( TriggerInsider insider )
44 {
45 super.OnEnterClientEvent( insider );
46 }
47
48 override void OnLeaveClientEvent( TriggerInsider insider )
49 {
50 super.OnLeaveClientEvent( insider );
51 }
52
53
54 override void OnStayStartServerEvent(int nrOfInsiders)
55 {
56 m_TimeAccuStay += m_DeltaTime;
57 if (m_TimeAccuStay > DAMAGE_TICK_RATE)
58 {
59 m_DealDamageFlag = true;
60 //this is where we would normally reset the m_TimeAccuStay, but we need the value as deltaT when dealing damage to the insiders, so we reset it only after the insider update in OnStayFinishServerEvent
61 }
62
63 }
64
65 override void OnStayFinishServerEvent()
66 {
67 if(m_DealDamageFlag)//the flag was previously set to true, the insiders have been updated at this point, reset the flag and the timer as well
68 {
69 m_TimeAccuStay = 0;
70 m_DealDamageFlag = false;
71 }
72 }
73
74 override void OnStayServerEvent(TriggerInsider insider, float deltaTime)
75 {
76 if ( m_DealDamageFlag )
77 {
78 DayZCreatureAI creature = DayZCreatureAI.Cast( insider.GetObject());
79 if(creature && creature.m_EffectTriggerCount != 0)
80 creature.DecreaseHealth("", "", GameConstants.AI_CONTAMINATION_DMG_PER_SEC * m_TimeAccuStay / creature.m_EffectTriggerCount);// we devide by m_EffectTriggerCount for multiple trigger presence(overlapping triggers)
81 }
82 }
83
84 override string GetAmbientSoundsetName()
85 {
86 return "ContaminatedArea_SoundSet";
87 }
88
89
90}
91
92class ContaminatedTrigger_Dynamic : ContaminatedTrigger
93{
94 protected int m_AreaState; // Used to get the state from linked area and update effects
95
97 {
98 RegisterNetSyncVariableInt("m_AreaState");
99
100 // Register in the trigger effect manager
101 m_Manager = TriggerEffectManager.GetInstance();
102 m_Manager.RegisterTriggerType( this );
103 }
104
105 void SetAreaState( int state )
106 {
107 m_AreaState = state;
108 SetSynchDirty();
109 }
110
111
112 override protected void OnStayClientEvent(TriggerInsider insider, float deltaTime)
113 {
114 //no super, overriding parent behaviour
115 if ( insider.GetObject().IsMan() )
116 {
117 PlayerBase playerInsider = PlayerBase.Cast( insider.GetObject() );
118
119 // We will only handle the controlled player, as effects are only relevant to this player instance
120 if ( playerInsider.IsControlledPlayer() )
121 {
122 // We check if we are not in the standard LIVE state
123 bool nonDefaultState = m_AreaState > eAreaDecayStage.LIVE;
124 if ( nonDefaultState )
125 {
126 // if not we check the specific state and update local effect values
127 int localPartBirthRate;
128 if ( m_AreaState == eAreaDecayStage.DECAY_START )
129 localPartBirthRate = 20;
130 else
131 localPartBirthRate = 10;
132
133 playerInsider.RequestTriggerEffect(this, m_PPERequester, m_AroundPartId, m_TinyPartId, GetAmbientSoundsetName(), nonDefaultState, localPartBirthRate );
134 }
135 else
136 playerInsider.RequestTriggerEffect(this, m_PPERequester, m_AroundPartId, m_TinyPartId, GetAmbientSoundsetName() );
137 }
138 }
139 }
140
141
142
144 {
145 super.OnVariablesSynchronized();
146
147 // Is the controlled player inside when trigger is synchronized
148 for ( int i = 0; i < GetInsiders().Count(); i++ )
149 {
150 PlayerBase playerInsider = PlayerBase.Cast( m_insiders.Get( i ).GetObject() );
151 if ( playerInsider )
152 {
153 if ( playerInsider.IsControlledPlayer() )
154 {
155 // Update Local particle effects
156 bool nonDefaultState = m_AreaState > eAreaDecayStage.LIVE;
157 if ( nonDefaultState )
158 {
159 int localPartBirthRate;
160 if ( m_AreaState == eAreaDecayStage.DECAY_START )
161 localPartBirthRate = 20;
162 else
163 localPartBirthRate = 10;
164
165 //Update the local effects
166 playerInsider.RequestTriggerEffect(this, m_PPERequester, m_AroundPartId, m_TinyPartId, GetAmbientSoundsetName(), nonDefaultState, localPartBirthRate, true );
167 }
168 return;
169 }
170 }
171 }
172 }
173}
174
175
176class ContaminatedTrigger_Local : ContaminatedTrigger
177{
178 override string GetAmbientSoundsetName()
179 {
180 return "";
181 }
182
183}
override void OnStayServerEvent(TriggerInsider insider, float deltaTime)
override void OnStayClientEvent(TriggerInsider insider, float deltaTime)
override void OnStayStartServerEvent(int nrOfInsiders)
override void OnStayFinishServerEvent()
override void OnLeaveClientEvent(TriggerInsider insider)
override void OnLeaveServerEvent(TriggerInsider insider)
override void OnEnterServerEvent(TriggerInsider insider)
override void OnEnterClientEvent(TriggerInsider insider)
PPERequester_PainBlur m_PPERequester
do not process rotations !
Definition dayzanimal.c:654
The object which is in a trigger and its metadata.
override void OnVariablesSynchronized()
void ContaminatedTrigger_Dynamic()
class ContaminatedTrigger extends EffectTrigger m_AreaState
void SetAreaState(int state)
ModifiersManager m_Manager