DayZ 1.28
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ContaminatedTrigger.c
См. документацию.
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 {
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
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 {
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
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 OnStayClientEvent(TriggerInsider insider, float deltaTime)
Определения AreaDamageManager.c:147
PPERequester_PainBlur m_PPERequester
Определения BulletHitReaction.c:57
override void OnVariablesSynchronized()
Определения ContaminatedArea_Dynamic.c:94
eAreaDecayStage
Определения ContaminatedArea_DynamicBase.c:2
void ContaminatedTrigger_Dynamic()
Определения ContaminatedTrigger.c:96
class ContaminatedTrigger extends EffectTrigger m_AreaState
void SetAreaState(int state)
Определения ContaminatedTrigger.c:105
ModifiersManager m_Manager
Определения ModifierBase.c:11
override string GetAmbientSoundsetName()
Определения ContaminatedTrigger.c:178
do not process rotations !
Определения DayZAnimal.c:654
float m_TimeAccuStay
Определения EffectTrigger.c:9
void EffectTrigger()
Определения EffectTrigger.c:20
override string GetAmbientSoundsetName()
Определения ContaminatedTrigger.c:84
override void OnStayFinishServerEvent()
Определения ContaminatedTrigger.c:65
override void OnStayServerEvent(TriggerInsider insider, float deltaTime)
Определения ContaminatedTrigger.c:74
float m_DeltaTime
Определения EffectTrigger.c:8
override void OnLeaveServerEvent(TriggerInsider insider)
Определения ContaminatedTrigger.c:29
override void OnEnterClientEvent(TriggerInsider insider)
Определения ContaminatedTrigger.c:43
override void OnStayStartServerEvent(int nrOfInsiders)
Определения ContaminatedTrigger.c:54
override void OnLeaveClientEvent(TriggerInsider insider)
Определения ContaminatedTrigger.c:48
const float DAMAGE_TICK_RATE
Определения ContaminatedTrigger.c:4
bool m_DealDamageFlag
Определения EffectTrigger.c:10
override string GetDisplayName()
Определения ContaminatedTrigger.c:6
override void OnEnterServerEvent(TriggerInsider insider)
Определения ContaminatedTrigger.c:15
Определения PlayerBaseClient.c:2
static TriggerEffectManager GetInstance()
Определения TriggerEffectManager.c:21
Object GetObject()
Определения Trigger.c:28
The object which is in a trigger and its metadata.
Определения Trigger.c:3
const float AI_CONTAMINATION_DMG_PER_SEC
Определения 3_Game/constants.c:1067