This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
acr [2016/04/07 17:23] – ace | acr [2024/07/23 22:20] (current) – ace | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ===== Features | + | ===== About ===== |
ACR (Advanced Combat Routines) is a platform for highly customizable combat routines that are written in lua. | ACR (Advanced Combat Routines) is a platform for highly customizable combat routines that are written in lua. | ||
Routines built on this platform can use a custom GUI, have access to a special multi-clickable Party Interface, and the routines are not bound by the same generic rules that SkillManager routines use. | Routines built on this platform can use a custom GUI, have access to a special multi-clickable Party Interface, and the routines are not bound by the same generic rules that SkillManager routines use. | ||
- | ==== Usage ==== | + | ===== Features ===== |
- | + | ||
- | ---- | + | |
=== ACR Main Interface === | === ACR Main Interface === | ||
Line 56: | Line 54: | ||
name = " | name = " | ||
} | } | ||
+ | |||
+ | -- Regions table, lists which game regions are supported (1 - NA, 2 - CN, 3 - KR) | ||
+ | profile.region = { 1, 2, 3} | ||
-- Create a classes table, to specify which classes this profile can be used for. | -- Create a classes table, to specify which classes this profile can be used for. | ||
Line 61: | Line 62: | ||
[FFXIV.JOBS.NINJA] = true, | [FFXIV.JOBS.NINJA] = true, | ||
[FFXIV.JOBS.ROGUE] = true, | [FFXIV.JOBS.ROGUE] = true, | ||
- | } | + | } |
+ | |||
+ | -- Add a tags string to indicate whatever you want when class options are displayed | ||
+ | profile.tags = " | ||
-- The Cast() function is where the magic happens. | -- The Cast() function is where the magic happens. | ||
Line 71: | Line 75: | ||
local spinningEdge = ActionList: | local spinningEdge = ActionList: | ||
if (spinningEdge and spinningEdge.isready) then | if (spinningEdge and spinningEdge.isready) then | ||
- | spinningEdge: | + | spinningEdge: |
return true | return true | ||
end | end | ||
Line 85: | Line 89: | ||
ACR_MyProfile_MySavedVar = GUI: | ACR_MyProfile_MySavedVar = GUI: | ||
end | end | ||
+ | GUI:End() | ||
end | end | ||
+ | end | ||
+ | |||
+ | -- Adds a customizable header to the top of the ffxivminion task window. | ||
+ | function profile.DrawHeader() | ||
+ | |||
+ | end | ||
+ | |||
+ | -- Adds a customizable footer to the top of the ffxivminion task window. | ||
+ | function profile.DrawFooter() | ||
+ | |||
end | end | ||
Line 118: | Line 133: | ||
-- Return the profile to ACR, so it can be read. | -- Return the profile to ACR, so it can be read. | ||
return profile | return profile | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Pushing Routines API ==== | ||
+ | |||
+ | <code lua> | ||
+ | |||
+ | -- This code is an example of how to push routines into ACR using the new API call. | ||
+ | -- This isn't required anymore. Simply placing your ACR LUA file into a folder named CombatRoutines is enough for the ACR module to detect and load your ACR. | ||
+ | |||
+ | acelib.routinePath = GetStartupPath()..[[\LuaMods\AceLib\CombatRoutines\]] --this can be any subfolder, I'm using the old structure for ease | ||
+ | |||
+ | function AceLib.LoadCombatProfile(filename, | ||
+ | if (acelib.ModuleFunctions and acelib.ModuleFunctions.ReadModuleFile) then | ||
+ | local fileInfo = { p = " | ||
+ | local fileString = acelib.ModuleFunctions.ReadModuleFile(fileInfo) | ||
+ | if (fileString) then | ||
+ | local fileFunction, | ||
+ | if (fileFunction) then | ||
+ | local ok, profileData = pcall(fileFunction) | ||
+ | if (ok and profileData ~= nil) then | ||
+ | ACR.AddPrivateProfile(profileData, | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | else | ||
+ | if (filename ~= "" | ||
+ | local profileData, | ||
+ | if (ValidTable(profileData)) then | ||
+ | ACR.AddPrivateProfile(profileData, | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | end | ||
+ | |||
+ | function AceLib.LoadCombatProfiles() | ||
+ | AceLib.LoadCombatProfile(" | ||
+ | end | ||
+ | |||
+ | -- Final call should be done in a ModuleInit so that all modules can finish loading other API where required. | ||
+ | function acelib.ModuleInit() | ||
+ | AceLib.LoadCombatProfiles() | ||
+ | end | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== Public API Functions ==== | ||
+ | |||
+ | <code lua> | ||
+ | |||
+ | local t = ACR.GetClassOptions(class (int) (default Player.job), | ||
+ | --returns a table " | ||
+ | /* | ||
+ | { | ||
+ | [1] = { | ||
+ | name = " | ||
+ | tags = "" | ||
+ | }, | ||
+ | [2] = { | ||
+ | name = " | ||
+ | tags = "" | ||
+ | }, | ||
+ | } | ||
+ | */ | ||
+ | |||
+ | local b, n = ACR.IsActive() | ||
+ | --returns b (bool) (true if any ACR is active), n (string) (name of active profile or "" | ||
+ | |||
+ | ACR.OpenProfileOptions() | ||
+ | --executes the currently selected profiles OnOpen() event if applicable | ||
</ | </ |