Effectify
Introduction
Effectify is an OOP-based module designed to simplify the management and application of status effects in Roblox games.
It allows developers to define, apply, and control effects like burning, slowing, or freezing, with flexible stacking behavior and full type safety.
Whether you’re building an RPG, action game, or anything with temporary buffs or debuffs, Effectify helps you keep your code clean, modular, and powerful!
Download
Module Link
https://create.roblox.com/store/asset/121743174910696/Effectify
Uncopylocked Place
Effectify - Roblox
Features
-
Easy Customization — Define effects in one place. (
EffectLibrary
) - Advanced Stacking System.
- Pause / Resume Support.
- GoodSignal Events — stravant’s GoodSignal module.
- Particle Integration — Automatically applied and cleaned up.
Constructor Parameters
Use StatusEffect.new(Params)
to create a new effect instance:
Field | Type | Description |
---|---|---|
Owner |
Model? |
The target receiving the effect. (e.g., a character) Required |
EffectType |
string |
Effect name from EffectLibrary . Required
|
Creator |
Instance |
Source of the effect (tool, part, etc.). Defaults to Owner . |
Duration |
number |
Total duration in seconds. Defaults to EffectLibrary or 3 . |
Interval |
number |
Time between ticks. Defaults to EffectLibrary or 1 . |
CanStack |
boolean |
Whether the effect can stack. Defaults to EffectLibrary or true . |
StackType |
string |
"Overwrite" , "Yield" , or "Overlap" behavior. Defaults from EffectLibrary or "Overwrite" . |
StackType Explained
Type | Behavior |
---|---|
"Overwrite" |
Replaces previous effects of the same type. |
"Yield" |
Queues the new effect until the old one finishes. |
"Overlap" |
Allows multiple instances to run simultaneously. |
Core Methods
effect:Activate()
effect:Pause()
effect:Resume()
effect:Deactivate()
-
:Activate()
— Starts behavior. -
:Pause()
— Freezes duration and intervals. -
:Resume()
— Continues from pause. -
:Deactivate()
— Cancels effect immediately.
Global Effect Control
Effectify.PauseEffect(character, "Fire")
Effectify.ResumeEffect(character, "Fire")
Effectify.RemoveEffect(character, "Fire")
Effectify.IsActive(character, "Fire")
Effectify.GetActiveEffects(character)
-
PauseEffect(character, EffectType)
— Freezes an active effect’s timer and behavior externally. -
ResumeEffect(character, EffectType)
— Resumes a paused effect from where it left off. -
RemoveEffect(character, EffectType)
— Instantly ends and cleans up the specified effect. -
IsActive(character, EffectType)
— Returnstrue
if the effect is currently active on the target. -
GetActiveEffects(character)
— Returns a table of all currently active effects on the character or model.
Signals (Events)
Powered by a custom event system based on stravant’s GoodSignal module.
Signal Name | Fires When… |
---|---|
.ActivatedSignal |
The effect starts. |
.TickSignal |
Every interval tick. (e.g., per second) |
.DeactivatedSignal |
The effect ends. |
.StackedSignal |
A duplicate is applied. |
.YieldedSignal |
Effect is queued due to Yield stacking. |
.TimeLeftSignal |
Time left for the effect. (updated regularly) |
Example: Defining Fire Effect (EffectLibrary)
local TypeCheck = require(script.Parent.TypeCheck)
local ParticleHandler = require(script.Parent.ParticleHandler)
return {
Fire = {
Duration = 3,
Interval = 1,
CanStack = true,
Function = function(Params: TypeCheck.Properties)
local damage = 5
Params.ActivatedSignal:Connect(function(callback)
local particleTable = ParticleHandler.Attach(Params.Owner, "Fire")
callback(particleTable)
end)
Params.DeactivatedSignal:Connect(function()
if Params._particles then
ParticleHandler.Detach(Params._particles)
Params._particles = nil
end
end)
Params.TickSignal:Connect(function()
local hum = Params.Owner:FindFirstChildOfClass("Humanoid")
if hum then
hum:TakeDamage(damage)
end
end)
end,
}
}
Particle Integration
- Add
ParticleEmitter
objects into a folder namedParticles
. - Name them to match your effect (
"Fire"
,"Poison"
, etc.) -
Attach(owner, type)
— Clones the particle namedtype
from theParticles
folder and attaches it to every body part (exceptHumanoidRootPart
) of the target model. -
Detach(particles)
— Disables and removes all given particles with a slight delay for smoother visuals. - They are cleaned up automatically when the effect ends.
Example: Applying the Effect
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Effectify = require(ReplicatedStorage:WaitForChild("Effectify"))
local part = script.Parent
local db = false
part.Touched:Connect(function(hit)
if db then return end
local character = hit.Parent
local humanoid = character:FindFirstChildOfClass("Humanoid")
if not humanoid then return end
db = true
task.delay(1, function() db = false end)
local StatusEffect = Effectify.new({
Owner = character,
Creator = part,
Duration = 3,
EffectType = "Fire",
StackType = "Overwrite"
})
StatusEffect:Activate()
end)
Update Log
Version 1.0.0
- Release of the module.
Any feedback, bug reports, or feature requests are welcome!