areadamageonce.c 936 B

12345678910111213141516171819202122232425262728293031323334353637
  1. class AreaDamageOnce : AreaDamageManager
  2. {
  3. override void OnEnterServerEvent(TriggerInsider insider)
  4. {
  5. super.OnEnterServerEvent(insider);
  6. OnEvaluateDamageEx(insider, 1);
  7. }
  8. }
  9. class AreaDamageOnceDeferred : AreaDamageOnce
  10. {
  11. //! Time the damage should be deferred in seconds
  12. protected float m_DeferDuration = 1.0;
  13. override void SetDeferDuration(float time)
  14. {
  15. m_DeferDuration = time;
  16. }
  17. override void OnStayServerEvent(TriggerInsider insider, float deltaTime)
  18. {
  19. super.OnStayServerEvent(insider, deltaTime);
  20. AreaDamageTriggerInsider dInsider;
  21. if ( CastTo( dInsider, insider ) && dInsider.lastDamaged == 0 )
  22. OnEvaluateDamageEx(insider, 1);
  23. }
  24. override protected float CalculateDamageScale(TriggerInsider insider, float deltaTime)
  25. {
  26. if ( m_DeferDuration > 0 && (insider.lastUpdated - insider.timeEntered) >= m_DeferDuration )
  27. return super.CalculateDamageScale(insider, deltaTime);
  28. return 0;
  29. }
  30. }