Repository navigation
Releases
Releases · JesperLive/GRIP-EMS-PluginAPI
EMS 2.4.22 (2026-11-01)
Added
API:GetSequenceInfo(name)returnskeybinds, a fresh array of every key bound to the sequence, as a sequence can now hold more than one. The active loadout's keys come first, then the spec's, each group sorted. The array is empty when no key is bound.keybindstays, and is its first entry.
Changed
API_VERSIONis now5.RequireVersion(5)is the gate forkeybinds. No existing call changed.
EMS 2.4.21 (2026-10-17)
Changed
handle:CreateSequence(name, data)refuses a name whose action buttons would overlap another sequence's, and a name EMS keeps for its own frames. A modifier variant's button adds_vand a number, soAcme Burst v2is refused whileAcme Burstexists, andAcme Burst!clashes withAcme Burst. A name you already own isn't checked again.handle:EnsureSequenceMacro(name)answersfalseand a reason for a sequence with no button because another sequence or frame uses its button name.SEQUENCE_UPDATEDalso fires when a variable rename rewrites a sequence, and when Auto-refresh macro-reference steps updates a step.API:GetSequenceInfo(name)hands back the sequence's own fields in the types the data reference lists, because EMS now checks them when a sequence is imported, registered, edited or loaded.versionis a string, a number ornil, normally the string"1".- The event catalog now says when each sequence event fires. A rebuild fires
SEQUENCE_DELETED, thenSEQUENCE_CREATED, for a sequence that still exists.
Fixed
handle:CreateSequencerefuses a name whose saved sequence isn't yours before EMS restores the saved sequences at the firstPLAYER_ENTERING_WORLD. Called fromPLAYER_LOGIN, it used to replace the player's saved sequence with yours.handle:EnsureSequenceMacro(name)remakes the macro the player deleted by hand, where it used to answerfalsewithmacro creation failed.API:GetSequenceMacroIndex(name)andEnsureSequenceMacrofind the macro by its body, so deleting another macro can't leave them on the wrong slot.API:GetSequenceInfo(name)lists a variable used only in a modifier variant, Key Press or Key Release invariableDeps. ItscreatedAtis a number for a sequence your plugin made, stamped when you send none.
EMS 2.4.12 (2026-09-03)
Fixed
API:GetSequenceInfo(name)reportsactiveVersionIndexagain for a sequence that has a live version. 2.4.11 moved the type screen for the active version onto the engine's accessor, but this function kept hand-rolling its own position loop against the value it had screened locally. Once the two stopped agreeing, the field came backnilfor exactly the sequence whose in-game badge was showing V2 live. The position now comes from the engine, which reads the unscreened element deliberately: an array position stays knowable even when the element at it is malformed. Nothing else in the returned table changed. Anilcheck you added aroundactiveVersionIndexafter 2.4.11 is still correct and still worth keeping — a version that genuinely does not resolve returnsnilhere, as it always has.
EMS 2.4.11 (2026-09-02)
Fixed
API:GetSequenceInfo(name)stopped raising on a sequence whose active version is not a table, and stopped reporting a step count for one whosestepsfield is not a table either. The old code readstepFunctionoff whatever the version resolved to, so a number or a boolean there threw inside your call. A stringstepsfield failed more quietly: the length operator ran on the string, so a sequence holding"abcd"came back with anactiveStepCountof4. Both keys are screened now.activeVersionisnilunless the stored version really is a table, andactiveStepCountis0unlessstepsreally is one. A sequence with well formed data is unaffected, so this only ever changes a case that used to throw or hand back a count nothing authored.
EMS 2.4.0 (2026-08-14)
Added
API:GetActiveSequence()— the name of the sequence EMS most recently drove, ornilwhen none has been driven this session. A read-only string with no setter. It saves you mirroringSEQUENCE_STEP_ADVANCEDinto your own variable just to answer "which sequence?". Read the name literally: it is most recently driven, not currently running. The value is never cleared when a sequence stops, and hold-mode activation writes it just as a secure-button click does — so a non-nil result tells you what ran last, not that anything is running now. For live start/stop, stay onSEQUENCE_STEP_ADVANCED.authoredstepscapability id —GetAuthoredStepsnow has an id of its own. It previously sat understepdata, which predates it and therefore couldn't detect it.
Changed
API_VERSIONis now4, and the bump rule changed. The contract used to say it bumped only on a breaking change; in practice v2 and v3 both bumped on purely additive growth, and 2.3.7'sGetAuthoredStepswas the one addition that didn't. The rule now matches the practice: any addition to the surface bumpsAPI_VERSION. Nothing about an existing call changed, so no plugin needs edits — this makesRequireVersion(4)a reliable gate for everything listed above, and leaves 2.3.7 as the single build where a presence check is still the only option.
EMS 2.3.15 (2026-07-29)
Fixed
API:GetSequenceInfo(name)stopped raising on a sequence whose storedversionsfield is not a table. The old code handed that value straight toipairs, so the error surfaced inside your call instead of the function returning something you could check. A non-table now reads as an empty list: the call returns normally, withversionCountandcontextVersionCountboth0andactiveVersionIndexleftnil. A sequence with well formed data is unaffected, so this only ever changes a case that used to throw.