This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| acr [2016/04/01 16:56] – 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 26: | Line 24: | ||
| {{http:// | {{http:// | ||
| + | |||
| + | //ACR does not include FFXIV icons, but these can be downloaded from [[http:// | ||
| + | To install the icons, place the icons folder in the root of the ACR module [ACR\icons].// | ||
| The party interface is a multi-clickable display that can work in conjunction with routines via their OnClick procedure. | The party interface is a multi-clickable display that can work in conjunction with routines via their OnClick procedure. | ||
| Line 53: | 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 58: | 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 68: | 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 82: | 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 115: | 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 | ||
| </ | </ | ||