123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- //! Hot spring area trigger
- class HotSpringTrigger : EffectTrigger
- {
- static HotSpringTrigger m_SourceDamageInstance; // this is used only server side for logging damage source in admin log
- static const float HEAT_DAMAGE_MULTIPLIER = 5;
- static const float HEAT_DAMAGE_TICK_TIME = 2;
-
- protected ParticleSource m_VaporParticle;
-
- override void EEInit()
- {
- if (GetGame().IsServer() && !m_SourceDamageInstance)
- m_SourceDamageInstance = this;
-
- super.EEInit();
-
- #ifndef SERVER
- SpawnVaporEffect();
- #endif
- }
-
- override string GetDisplayName()
- {
- return "#STR_hotspring";
- }
-
- override void EEDelete( EntityAI parent )
- {
- if (m_VaporParticle)
- m_VaporParticle.Stop();
-
- super.EEDelete(parent);
- }
-
- override void OnEnterServerEvent( TriggerInsider insider )
- {
- super.OnEnterServerEvent(insider);
-
- if (insider)
- {
- PlayerBase playerInsider = PlayerBase.Cast(insider.GetObject());
- if (playerInsider)
- playerInsider.SetInEffectAreaTypeFlag(EEffectAreaType.HOT_SPRING);
- }
- }
-
- override void OnLeaveServerEvent( TriggerInsider insider )
- {
- super.OnLeaveServerEvent(insider);
-
- if (insider)
- {
- PlayerBase playerInsider = PlayerBase.Cast(insider.GetObject());
- if (playerInsider)
- playerInsider.UnsetInEffectAreaTypeFlag(EEffectAreaType.HOT_SPRING);
- }
- }
-
- override void OnEnterClientEvent( TriggerInsider insider )
- {
- super.OnEnterClientEvent(insider);
-
- if (insider)
- {
- PlayerBase playerInsider = PlayerBase.Cast(insider.GetObject());
- if (playerInsider)
- playerInsider.SetInEffectAreaTypeFlag(EEffectAreaType.HOT_SPRING);
- }
- }
-
- override void OnLeaveClientEvent( TriggerInsider insider )
- {
- super.OnLeaveClientEvent(insider);
-
- if (insider)
- {
- PlayerBase playerInsider = PlayerBase.Cast(insider.GetObject());
- if (playerInsider)
- playerInsider.UnsetInEffectAreaTypeFlag(EEffectAreaType.HOT_SPRING);
- }
- }
-
- protected void SpawnVaporEffect()
- {
- vector pos = GetPosition();
- pos[1] = GetGame().SurfaceY(pos[0], pos[2]) + 0.5;
-
- m_VaporParticle = ParticleManager.GetInstance().PlayInWorld(ParticleList.HOTPSRING_WATERVAPOR, pos);
-
- int randSize = Math.RandomIntInclusive(-1,2);
- int randRate = Math.RandomIntInclusive(-1,2);
- m_VaporParticle.IncrementParticleParam(EmitorParam.SIZE, randSize);
- m_VaporParticle.IncrementParticleParam(EmitorParam.BIRTH_RATE, randRate);
- }
-
- static void ApplyEffects(PlayerBase player)
- {
- float waterLevel = player.GetCurrentWaterLevel();
- if (waterLevel > 0.5)
- player.ProcessDirectDamage(DamageType.CUSTOM, m_SourceDamageInstance, "", "HeatDamage", "0 0 0", HEAT_DAMAGE_MULTIPLIER * waterLevel);
- }
- }
|