7class WeaponParticlesBase
9 bool m_IlluminateWorld;
10 bool m_IgnoreIfSuppressed;
11 bool m_OnlyIfBoltIsOpen;
13 int m_OverrideParticle;
14 int m_OnlyWithinHealthLabelMin;
15 int m_OnlyWithinHealthLabelMax;
16 float m_OnlyWithinOverheatLimitsMin;
17 float m_OnlyWithinOverheatLimitsMax;
18 float m_OnlyWithinRainLimitsMin;
19 float m_OnlyWithinRainLimitsMax;
20 string m_OverrideDirectionPoint;
21 string m_OnlyIfBulletIs;
22 string m_OnlyIfWeaponIs;
23 string m_OverridePoint;
24 vector m_OverrideDirectionVector;
33 void WeaponParticlesBase(
ItemBase muzzle_owner,
string config_OnFire_entry)
35 m_Name = config_OnFire_entry;
38 m_IgnoreIfSuppressed =
g_Game.ConfigGetFloat(
string.Format(
"%1 ignoreIfSuppressed", m_Name));
41 m_OnlyIfBoltIsOpen =
g_Game.ConfigGetFloat(
string.Format(
"%1 onlyIfBoltIsOpen", m_Name));
44 m_IlluminateWorld =
g_Game.ConfigGetFloat(
string.Format(
"%1 illuminateWorld", m_Name));
47 if (
g_Game.ConfigIsExisting(
string.Format(
"%1 muzzleIndex", m_Name)))
49 m_MuzzleIndex =
g_Game.ConfigGetInt(
string.Format(
"%1 muzzleIndex", m_Name));
53 m_OnlyIfWeaponIs =
"";
54 g_Game.ConfigGetText(
string.Format(
"%1 onlyIfWeaponIs", m_Name), m_OnlyIfWeaponIs);
57 m_OnlyIfBulletIs =
"";
58 g_Game.ConfigGetText(
string.Format(
"%1 onlyIfBulletIs", m_Name), m_OnlyIfBulletIs);
62 g_Game.ConfigGetFloatArray(
string.Format(
"%1 onlyWithinHealthLabel", m_Name), health_limit);
64 if (health_limit.Count() == 2)
66 m_OnlyWithinHealthLabelMin = health_limit.Get(0);
67 m_OnlyWithinHealthLabelMax = health_limit.Get(1);
72 m_OnlyWithinHealthLabelMin = -1;
73 m_OnlyWithinHealthLabelMax = 99;
78 g_Game.ConfigGetFloatArray(
string.Format(
"%1 onlyWithinOverheatLimits", m_Name), overheat_limit);
80 if (overheat_limit.Count() == 2)
82 m_OnlyWithinOverheatLimitsMin = overheat_limit.Get(0);
83 m_OnlyWithinOverheatLimitsMax = overheat_limit.Get(1);
88 m_OnlyWithinOverheatLimitsMin = -1;
89 m_OnlyWithinOverheatLimitsMax = 2;
94 g_Game.ConfigGetFloatArray(
string.Format(
"%1 onlyWithinRainLimits", m_Name), rain_limit);
96 if (rain_limit.Count() == 2)
98 m_OnlyWithinRainLimitsMin = rain_limit.Get(0);
99 m_OnlyWithinRainLimitsMax = rain_limit.Get(1);
104 m_OnlyWithinRainLimitsMin = -1;
105 m_OnlyWithinRainLimitsMax = 2;
109 m_OverridePoint =
"";
110 g_Game.ConfigGetText(
string.Format(
"%1 overridePoint", m_Name), m_OverridePoint);
112 if (m_OverridePoint ==
"")
113 m_OverridePoint =
"Usti hlavne";
116 string particle_name =
"";
117 g_Game.ConfigGetText(
string.Format(
"%1 overrideParticle", m_Name), particle_name);
119 if (particle_name !=
"")
121 m_OverrideParticle =
ParticleList.GetParticleIDByName(particle_name);
125 m_OverrideParticle = -1;
126 ErrorEx(
string.Format(
"'%1' does not contain a definition for 'overrideparticle'",
131 m_OverrideDirectionPoint =
"";
132 g_Game.ConfigGetText(
string.Format(
"%1 overrideDirectionPoint", m_Name), m_OverrideDirectionPoint);
134 if (m_OverrideDirectionPoint ==
"")
137 vector test_ori =
g_Game.ConfigGetVector(
string.Format(
"%1 overrideDirectionVector", m_Name));
139 if (test_ori !=
vector.Zero)
141 m_OverrideDirectionVector = test_ori;
147 g_Game.ConfigGetFloatArray(
string.Format(
"%1 positionOffset", m_Name), v);
154 m_PositionOffset =
Vector(v1, v2, v3);
170 if (
PrtTest.m_GunParticlesState )
172 if ( m_MuzzleIndex == -1 || m_MuzzleIndex == muzzle_index )
174 if ( CheckBoltStateCondition(weapon) )
176 if ( !suppressor || suppressor.IsRuined() || !(m_IgnoreIfSuppressed) )
178 if ( CheckHealthCondition( muzzle_owner.GetHealthLevel() ) )
180 if ( CheckOverheatingCondition( muzzle_owner.GetOverheatingCoef() ) )
182 if ( CheckRainCondition(
g_Game.GetWeather().GetRain().GetActual() ) )
184 if ( m_OnlyIfBulletIs ==
"" || m_OnlyIfBulletIs == ammoType )
186 if ( m_OnlyIfWeaponIs ==
"" || m_OnlyIfWeaponIs == weapon.GetType() )
194 vector local_pos = muzzle_owner.GetSelectionPositionLS(m_OverridePoint);
195 local_pos += m_PositionOffset;
198 vector particle_ori = CheckOrientationOverride(local_pos, muzzle_owner);
202 OnParticleCreated(weapon, ammoType, muzzle_owner, suppressor, config_to_search, p);
206 ErrorEx(
string.Format(
"No valid particle found for: '%1'", m_Name));
210 if (m_IlluminateWorld)
212 vector global_pos = muzzle_owner.ModelToWorld(local_pos +
Vector(-0.2, 0, 0));
213 int randX =
Math.RandomInt( 0,10 );
216 else if ( randX > 4 )
238 void OnDeactivate(
ItemBase weapon,
string ammoType,
ItemBase muzzle_owner,
ItemBase suppressor,
string config_to_search)
255 bool CheckBoltStateCondition(
ItemBase weapon)
257 if ( m_OnlyIfBoltIsOpen )
261 return current_state.IsBoltOpen();
268 bool CheckHealthCondition(
int health_label)
270 return ( (health_label >= m_OnlyWithinHealthLabelMin) && (health_label <= m_OnlyWithinHealthLabelMax) );
274 bool CheckOverheatingCondition(
float overheating_coef)
276 return ( (overheating_coef >= m_OnlyWithinOverheatLimitsMin) && (overheating_coef <= m_OnlyWithinOverheatLimitsMax) );
280 bool CheckRainCondition(
float rain_coef)
282 return ( (rain_coef >= m_OnlyWithinRainLimitsMin) && (rain_coef <= m_OnlyWithinRainLimitsMax) );
286 int CheckParticleOverride(
string ammoType)
290 string particle_file =
"";
291 string cfg_path =
"CfgAmmo " + ammoType +
" muzzleFlashParticle";
292 if (
g_Game.ConfigGetText( cfg_path, particle_file))
299 if (particle_file ==
"")
301 ErrorEx(
string.Format(
"Cannot spawn particle effect because item %1 is missing config parameter muzzleFlashParticle!", ammoType),
ErrorExSeverity.INFO);
311 devStr =
" Make sure it's registered there and then rebuild Scripts and Graphics PBOs.";
313 ErrorEx(
string.Format(
"Cannot play particle effect with name %1 because no such file is registered in ParticleList.c!%2", particle_file, devStr));
329 vector particle_ori =
"0 0 0";
330 if (m_OverrideDirectionPoint !=
"")
332 vector target_pos = muzzle_owner.GetSelectionPositionLS(m_OverrideDirectionPoint);
333 target_pos =
vector.Direction(local_pos, target_pos);
334 particle_ori = target_pos.VectorToAngles();
338 if (m_OverrideDirectionVector !=
Vector(0, 0, 0))
340 particle_ori = m_OverrideDirectionVector;
345 particle_ori = particle_ori +
Vector(0,0,270);