Agent skill
SND WrathCombo Integration
Use this skill when implementing combat rotation automation in SND macros using the WrathCombo plugin. Covers auto-rotation control, combo state management, job configuration, and IPC leasing system.
Stars
163
Forks
31
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/snd-wrath
SKILL.md
WrathCombo Integration for SND
This skill covers integration with the WrathCombo plugin for combat rotation automation in SND macros.
Source: Verified from official repository
- https://github.com/PunishXIV/WrathCombo/blob/main/WrathCombo/Services/IPC/Provider.cs
- https://github.com/PunishXIV/WrathCombo/blob/main/WrathCombo/Services/IPC/Leasing.cs
- https://github.com/PunishXIV/WrathCombo/blob/main/WrathCombo/Services/IPC/Enums.cs
Prerequisites
lua
-- Always check plugin availability first
if not HasPlugin("WrathCombo") then
yield("/echo [Script] WrathCombo plugin not available")
return
end
Important: IPC Leasing System
WrathCombo uses a leasing system for IPC control. You must register for a lease before making any Set calls. This allows users to maintain control and revoke external plugin access.
IPC API Reference
Initialization and Status
lua
-- Check if IPC is ready (caches built, fully initialized)
IPC.WrathCombo.IPCReady() → boolean
-- Test IPC connection
IPC.WrathCombo.Test() → nil -- Logs "IPC connection successful"
Lease Registration
lua
-- Register for control of WrathCombo (required before Set calls)
-- Returns: Guid (lease ID) or nil if registration failed
IPC.WrathCombo.RegisterForLease(
string internalPluginName, -- Your plugin's internal name
string pluginName -- Display name shown to users
) → Guid?
-- Register with callback for lease cancellation
IPC.WrathCombo.RegisterForLeaseWithCallback(
string internalPluginName,
string pluginName,
string? ipcPrefixForCallback -- nil = same as internalPluginName
) → Guid?
-- Release your lease (call when done)
IPC.WrathCombo.ReleaseControl(Guid lease) → nil
Auto-Rotation Control
lua
-- Get current auto-rotation state
IPC.WrathCombo.GetAutoRotationState() → boolean
-- Set auto-rotation state (requires lease)
IPC.WrathCombo.SetAutoRotationState(
Guid lease,
boolean enabled -- default: true
) → SetResult
-- Check if current job is ready for auto-rotation
-- (has Single-Target and Multi-Target combos configured in Auto-Mode)
IPC.WrathCombo.IsCurrentJobAutoRotationReady() → boolean
-- Configure current job for auto-rotation (requires lease)
-- Enables ST/MT combos and Auto-Mode using user's existing settings
IPC.WrathCombo.SetCurrentJobAutoRotationReady(Guid lease) → SetResult
Job State Checks
lua
-- Check if current job has ST/MT combos configured
IPC.WrathCombo.IsCurrentJobConfiguredOn() → Dictionary<ComboTargetTypeKeys, ComboSimplicityLevelKeys?>
-- Check if current job has ST/MT combos in Auto-Mode
IPC.WrathCombo.IsCurrentJobAutoModeOn() → Dictionary<ComboTargetTypeKeys, ComboSimplicityLevelKeys?>
Fine-Grained Combo Control
lua
-- Get all combo names for a job
IPC.WrathCombo.GetComboNamesForJob(number jobID) → List<string>?
-- Get all combo option names for a job
IPC.WrathCombo.GetComboOptionNamesForJob(number jobID) → Dictionary<string, List<string>>?
-- Get combo state (enabled + auto-mode)
IPC.WrathCombo.GetComboState(string comboInternalName) → Dictionary<ComboStateKeys, bool>?
-- Set combo state (requires lease)
IPC.WrathCombo.SetComboState(
Guid lease,
string comboInternalName,
boolean comboState, -- default: true
boolean autoState -- default: true
) → SetResult
-- Get combo option state
IPC.WrathCombo.GetComboOptionState(string optionName) → boolean
-- Set combo option state (requires lease)
IPC.WrathCombo.SetComboOptionState(
Guid lease,
string optionName,
boolean state -- default: true
) → SetResult
Enums
SetResult (Return codes for Set operations)
lua
local SetResult = {
IGNORED = -1, -- Default, shouldn't be seen
Okay = 0, -- Success
OkayWorking = 1, -- Success, working asynchronously
IPCDisabled = 10, -- IPC services disabled
InvalidLease = 11, -- Invalid lease ID
BlacklistedLease = 12, -- Lease is blacklisted
Duplicate = 13, -- Already set to this value
PlayerNotAvailable = 14,-- Player object not available
InvalidConfiguration = 15, -- Config not available
InvalidValue = 16, -- Invalid value provided
}
ComboStateKeys
lua
local ComboStateKeys = {
Enabled = 0, -- Whether combo is enabled
AutoMode = 1, -- Whether combo is in Auto-Mode
}
ComboTargetTypeKeys
lua
local ComboTargetTypeKeys = {
SingleTarget = 0,
MultiTarget = 1,
HealST = 2, -- Healer single-target
HealMT = 3, -- Healer multi-target
Other = 4,
}
ComboSimplicityLevelKeys
lua
local ComboSimplicityLevelKeys = {
Simple = 0,
Advanced = 1,
Other = 2,
}
CancellationReason (Why lease was cancelled)
lua
local CancellationReason = {
WrathUserManuallyCancelled = 0, -- User revoked lease
LeaseePluginDisabled = 1, -- Your plugin was disabled
WrathPluginDisabled = 2, -- Wrath is being disabled
LeaseeReleased = 3, -- You released the lease
AllServicesSuspended = 4, -- IPC disabled remotely
JobChanged = 5, -- Player changed jobs
}
Chat Commands
lua
-- Open WrathCombo window
yield("/wrath")
-- Enable/disable auto-rotation
yield("/wrath auto") -- Toggle
yield("/wrath auto on") -- Enable
yield("/wrath auto off") -- Disable
Usage Patterns
Basic Auto-Rotation Control
lua
function EnableWrathAutoRotation()
if not HasPlugin("WrathCombo") then
yield("/echo [Script] WrathCombo not available")
return false
end
-- Check if ready
if not IPC.WrathCombo.IPCReady() then
yield("/echo [Script] WrathCombo IPC not ready")
return false
end
-- Use chat command for simple toggle (no lease needed)
yield("/wrath auto on")
return true
end
Full IPC Control with Lease
lua
local wrathLease = nil
function RegisterWrathControl()
if not HasPlugin("WrathCombo") then
return false
end
if not IPC.WrathCombo.IPCReady() then
return false
end
-- Register for lease
wrathLease = IPC.WrathCombo.RegisterForLease(
"YourPluginName",
"Your Plugin Display Name"
)
if not wrathLease then
yield("/echo [Script] Failed to get Wrath lease")
return false
end
return true
end
function SetupAutoRotation()
if not wrathLease then
if not RegisterWrathControl() then
return false
end
end
-- Check if job is ready
if not IPC.WrathCombo.IsCurrentJobAutoRotationReady() then
-- Configure job for auto-rotation
local result = IPC.WrathCombo.SetCurrentJobAutoRotationReady(wrathLease)
if result ~= 0 and result ~= 1 then -- Not Okay or OkayWorking
yield("/echo [Script] Failed to setup job: " .. result)
return false
end
end
-- Enable auto-rotation
local result = IPC.WrathCombo.SetAutoRotationState(wrathLease, true)
return result == 0 or result == 1
end
function ReleaseWrathControl()
if wrathLease then
IPC.WrathCombo.ReleaseControl(wrathLease)
wrathLease = nil
end
end
Check Job Readiness
lua
function IsJobReadyForCombat()
if not HasPlugin("WrathCombo") then
return false
end
return IPC.WrathCombo.IsCurrentJobAutoRotationReady()
end
Auto-Rotation Config Options
These options can be configured via IPC (from AutoRotationConfigOption enum):
| Option | Type | Description |
|---|---|---|
| InCombatOnly | bool | Only run in combat |
| DPSRotationMode | enum | DPS rotation behavior |
| HealerRotationMode | enum | Healer rotation behavior |
| FATEPriority | bool | Prioritize FATE targets |
| QuestPriority | bool | Prioritize quest targets |
| SingleTargetHPP | int | Single target HP% threshold |
| AoETargetHPP | int | AoE target HP% threshold |
| SingleTargetRegenHPP | int | Regen HP% threshold |
| ManageKardia | bool | Auto-manage Kardia (SGE) |
| AutoRez | bool | Auto-resurrect |
| AutoRezDPSJobs | bool | Rez as DPS jobs |
| AutoCleanse | bool | Auto-cleanse debuffs |
| IncludeNPCs | bool | Include NPCs in healing |
| OnlyAttackInCombat | bool | Only attack in combat |
| OrbwalkerIntegration | bool | Orbwalker integration |
| AutoRezOutOfParty | bool | Auto-rez out of party members |
| DPSAoETargets | int | AoE target count threshold |
| SingleTargetExcogHPP | int | Excogitation HP% threshold |
| AutoRezDPSJobsHealersOnly | bool | Rez DPS jobs only when healer |
Best Practices
- Always check
IPCReady()before using IPC methods - Register for a lease before making any
Setcalls - Release your lease when done to be a good citizen
- Handle lease cancellation - users can revoke at any time
- Check
IsCurrentJobAutoRotationReady()before expecting auto-rotation to work - Use chat commands for simple on/off toggles without needing a lease
- Don't mix IPC with PvP - IPC doesn't work correctly in PvP
Notes
- IPC uses a leasing system to give users control over external access
- Leases can be revoked by users at any time
- Job changes will cancel leases (reason: JobChanged)
SetCurrentJobAutoRotationReadyworks asynchronously and may take several seconds
Didn't find tool you were looking for?