DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
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 // ----------------------------------------------
7 // TRIGGER EVENTS
8 // ----------------------------------------------
9
10 override void OnEnterServerEvent( TriggerInsider insider )
11 {
12 super.OnEnterServerEvent( insider );
13 if ( insider )
14 {
15 PlayerBase playerInsider = PlayerBase.Cast( insider.GetObject() );
16
17
18 if ( playerInsider )
19 {
20 playerInsider.GetModifiersManager().ActivateModifier( eModifiers.MDF_AREAEXPOSURE );
21 }
22 else
23 {
24 DayZCreatureAI creature = DayZCreatureAI.Cast( insider.GetObject() );
25
26 if(creature)
27 creature.IncreaseEffectTriggerCount();
28 }
29 }
30
31 }
32
33 override void OnLeaveServerEvent( TriggerInsider insider )
34 {
35 super.OnLeaveServerEvent( insider );
36
37 if ( insider )
38 {
39 PlayerBase playerInsider = PlayerBase.Cast( insider.GetObject() );
40
41 if ( playerInsider && !m_Manager.IsPlayerInTriggerType( playerInsider, this ) )
42 {
43 playerInsider.GetModifiersManager().DeactivateModifier( eModifiers.MDF_AREAEXPOSURE );
44 }
45 else
46 {
47 DayZCreatureAI creature = DayZCreatureAI.Cast( insider.GetObject() );
48
49 if(creature)
50 creature.DecreaseEffectTriggerCount();
51 }
52 }
53 }
54
55 override void OnEnterClientEvent( TriggerInsider insider )
56 {
57 super.OnEnterClientEvent( insider );
58 }
59
60 override void OnLeaveClientEvent( TriggerInsider insider )
61 {
62 super.OnLeaveClientEvent( insider );
63 }
64
65
66 override void OnStayStartServerEvent(int nrOfInsiders)
67 {
68 m_TimeAccuStay += m_DeltaTime;
69 if (m_TimeAccuStay > DAMAGE_TICK_RATE)
70 {
71 m_DealDamageFlag = true;
72 //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
73 }
74
75 }
76
78 {
79 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
80 {
81 m_TimeAccuStay = 0;
82 m_DealDamageFlag = false;
83 }
84 }
85
86 override void OnStayServerEvent(TriggerInsider insider, float deltaTime)
87 {
88 if ( m_DealDamageFlag )
89 {
90 DayZCreatureAI creature = DayZCreatureAI.Cast( insider.GetObject());
91 if(creature && creature.m_EffectTriggerCount != 0)
92 creature.DecreaseHealth("", "", GameConstants.AI_CONTAMINATION_DMG_PER_SEC * m_TimeAccuStay / creature.m_EffectTriggerCount);// we devide by m_EffectTriggerCount for multiple trigger presence(overlapping triggers)
93 }
94 }
95
96 override string GetAmbientSoundsetName()
97 {
98 return "ContaminatedArea_SoundSet";
99 }
100
101
102}
103
104class ContaminatedTrigger_Dynamic : ContaminatedTrigger
105{
106 protected int m_AreaState; // Used to get the state from linked area and update effects
107
109 {
110 RegisterNetSyncVariableInt("m_AreaState");
111
112 // Register in the trigger effect manager
114 m_Manager.RegisterTriggerType( this );
115 }
116
117 void SetAreaState( int state )
118 {
119 m_AreaState = state;
120 SetSynchDirty();
121 }
122
123 override void OnEnterClientEvent( TriggerInsider insider )
124 {
125 if ( insider.GetObject().IsInherited( PlayerBase ) )
126 {
127 PlayerBase playerInsider = PlayerBase.Cast( insider.GetObject() );
128
129 // We will only handle the controlled player, as effects are only relevant to this player instance
130 if ( playerInsider.IsControlledPlayer() )
131 {
132 // If it is first entrance, we fire the following
133 if ( !m_Manager.IsPlayerInTriggerType( playerInsider, this ) )
134 {
135 // We check if we are not in the standard LIVE state
136 bool nonDefaultState = m_AreaState > eAreaDecayStage.LIVE;
137 if ( nonDefaultState )
138 {
139 // if not we check the specific state and update local effect values
140 int localPartBirthRate;
141 if ( m_AreaState == eAreaDecayStage.DECAY_START )
142 localPartBirthRate = 20;
143 else
144 localPartBirthRate = 10;
145
146 playerInsider.SetContaminatedEffectEx( true, m_PPERequester, m_AroundPartId, m_TinyPartId, GetAmbientSoundsetName(), nonDefaultState, localPartBirthRate );
147 }
148 else
149 playerInsider.SetContaminatedEffectEx( true, m_PPERequester, m_AroundPartId, m_TinyPartId, GetAmbientSoundsetName() );
150 }
151
152 // We then handle the update of player trigger state in manager
153 m_Manager.OnPlayerEnter( playerInsider, this );
154 }
155 }
156 }
157
159 {
160 super.OnVariablesSynchronized();
161
162 // Is the controlled player inside when trigger is synchronized
163 for ( int i = 0; i < GetInsiders().Count(); i++ )
164 {
165 PlayerBase playerInsider = PlayerBase.Cast( m_insiders.Get( i ).GetObject() );
166 if ( playerInsider )
167 {
168 if ( playerInsider.IsControlledPlayer() )
169 {
170 // Update Local particle effects
171 bool nonDefaultState = m_AreaState > eAreaDecayStage.LIVE;
172 if ( nonDefaultState )
173 {
174 int localPartBirthRate;
175 if ( m_AreaState == eAreaDecayStage.DECAY_START )
176 localPartBirthRate = 20;
177 else
178 localPartBirthRate = 10;
179
180 // Update the local effects
181 playerInsider.SetContaminatedEffectEx( true, m_PPERequester, m_AroundPartId, m_TinyPartId, GetAmbientSoundsetName(), nonDefaultState, localPartBirthRate );
182 }
183 }
184 }
185 }
186 }
187
188}
override void OnEnterClientEvent(TriggerInsider insider)
PPERequester_PainBlur m_PPERequester
void ContaminatedTrigger_Dynamic()
class ContaminatedTrigger extends EffectTrigger m_AreaState
void SetAreaState(int state)
override void OnVariablesSynchronized()
ModifiersManager m_Manager
do not process rotations !
Definition DayZAnimal.c:437
override void OnStayServerEvent(TriggerInsider insider, float deltaTime)
override void OnStayStartServerEvent(int nrOfInsiders)
override void OnStayFinishServerEvent()
override void OnLeaveClientEvent(TriggerInsider insider)
override string GetAmbientSoundsetName()
override void OnEnterServerEvent(TriggerInsider insider)
override void OnLeaveServerEvent(TriggerInsider insider)
override void OnEnterClientEvent(TriggerInsider insider)
static TriggerEffectManager GetInstance()
The object which is in a trigger and its metadata.
Definition Trigger.c:3
Object GetObject()
Definition Trigger.c:28
eModifiers
Definition eModifiers.c:2
const float AI_CONTAMINATION_DMG_PER_SEC
Definition constants.c:893