Table of Contents

Class BuffTickEvent

Namespace
FishMMO.Shared
Assembly
FishMMO.Shared.dll

ECA trigger fired on each tick of a buff, driving damage-over-time, heal-over-time, and any other periodic effect.

[CreateAssetMenu(fileName = "New Buff Tick Event", menuName = "FishMMO/Character/Buff/Events/Buff Tick Event", order = 0)]
public class BuffTickEvent : Trigger, ICachedObject
Inheritance
Object
ScriptableObject
BuffTickEvent
Implements
Inherited Members
ScriptableObject.SetDirty()
ScriptableObject.CreateInstance<T>()
Object.GetEntityId()
Object.GetInstanceID()
Object.GetHashCode()
Object.InstantiateAsync<T>(T)
Object.InstantiateAsync<T>(T, Transform)
Object.InstantiateAsync<T>(T, Vector3, Quaternion)
Object.InstantiateAsync<T>(T, Transform, Vector3, Quaternion)
Object.Instantiate(Object, Vector3, Quaternion)
Object.Instantiate(Object, Vector3, Quaternion, Transform)
Object.Instantiate(Object)
Object.Instantiate(Object, Scene)
Object.Instantiate<T>(T, InstantiateParameters)
Object.Instantiate<T>(T, Vector3, Quaternion, InstantiateParameters)
Object.Instantiate(Object, Transform)
Object.Instantiate<T>(T)
Object.Instantiate<T>(T, Vector3, Quaternion)
Object.Instantiate<T>(T, Vector3, Quaternion, Transform)
Object.Instantiate<T>(T, Transform)
Object.Destroy(Object)
Object.DestroyImmediate(Object)
Object.DontDestroyOnLoad(Object)
Object.DestroyObject(Object)
Object.FindObjectsOfType<T>()
Object.FindObjectsByType<T>(FindObjectsSortMode)
Object.FindObjectsByType<T>(FindObjectsInactive, FindObjectsSortMode)
Object.FindObjectOfType<T>()
Object.FindFirstObjectByType<T>()
Object.FindAnyObjectByType<T>()
Object.FindFirstObjectByType<T>(FindObjectsInactive)
Object.FindAnyObjectByType<T>(FindObjectsInactive)
Object.FindObjectsByType<T>()
Object.FindObjectsByType<T>(FindObjectsInactive)
Object.ToString()
Object.name
Object.hideFlags

Remarks

The event is fired with the buff's carrier as the target and the character that applied the buff as the initiator, so an ApplyDamageAction attached here behaves exactly like the same action on an ability's on-hit event: resistance is applied, threat is generated against the caster, the target can die of it, and the caster is credited.

This is why a DoT does not need a bespoke buff-template subclass. Damage, healing, resource drain, chained debuffs, dispels and summons are all already ECA actions; a periodic version of any of them is this event plus the action, with no new C# to write. The condition branches work too — a poison that only ticks while its victim is moving is a condition, not a new template type.

Fires on the server only, once per tick. An action here is a side effect — damage credit, threat, a chained debuff, achievement progress — and must happen exactly once, so InvokeTickEvents(Buff, ICharacter) suppresses it on every client pass and on the server's reconcile replays alike. The owning client still runs the buff's resource mutation for prediction; its health is corrected by the attribute reconcile.