diff --git a/autocraft.ahk b/autocraft.ahk index 48b6f40..164b9b7 100644 --- a/autocraft.ahk +++ b/autocraft.ahk @@ -4,7 +4,7 @@ FileAppend, %output%`n, * Return } ;CONOUT$ is a special file windows uses to expose attached console output - ( output ? ( !___console___? (DllCall("AttachConsole", "int", -1) || DllCall("AllocConsole")) & (___console___:= true) : "" ) & FileAppend(output . "`n","CONOUT$") : DllCall("FreeConsole") & (___console___:= false) & StdExit() ) + ;( output ? ( !___console___? (DllCall("AttachConsole", "int", -1) || DllCall("AllocConsole")) & (___console___:= true) : "" ) & FileAppend(output . "`n","CONOUT$") : DllCall("FreeConsole") & (___console___:= false) & StdExit() ) } Stdin(output:="", sciteCheck := true){ ;output to console & wait for input & return input @@ -100,8 +100,6 @@ SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. ;} until !toggle ;return -WinActivate, FINAL FANTASY XIV - ;Normal - 0xAAAAAA ;Good - 0xB569FF 160 284 ;Excellent - 0xEEEEEE 233 282 @@ -136,32 +134,26 @@ WaitForCraftingWindow() { } } -ChooseBestProgressStep(ByRef step,ByRef cp) { +ChooseBestProgressStep(ByRef step,ByRef cp,ByRef durability,stepcount=1) { + ;Stdout("Choosing progress step... " . step . "/" . cp . "/" . durability) if (cp >= 32) { - PressKeyWithModifier("Shift","2") - ProgressStep(step,cp,32) + ;Stdout("Picking Standard Touch") + StandardTouch(step,cp,durability,stepcount) } else if (cp >= 18) { - send, {2} - ProgressStep(step,cp,16) + BasicTouch(step,cp,durability,stepcount) } else { - PressKeyWithModifier("Ctrl","3") - ProgressStep(step,cp,0) + HastyTouch(step,cp,durability,stepcount) } } -ProgressStep(ByRef step,ByRef cp,cpcost,stepamt=1) { - cp -= cpcost - step += stepamt -} - WaitForReady() { global toggle loop { Stdout("Waiting for Ready...") sleep, 250 - } until (ActionReady()) + } until (ActionReady() or !toggle) if (!toggle) { return false } else { @@ -170,8 +162,7 @@ WaitForReady() { } CraftingRotationTemplate(ByRef STEP) { - global toggle - CP = 252 + global toggle, CP FINALSTEP = 13 if (!WaitForReady()) { @@ -207,19 +198,14 @@ CraftingRotationTemplate(ByRef STEP) { ProgressStep(STEP,CP,0) } } - - loop { - Stdout("Waiting for Ready...") - sleep, 250 - } until (ActionReady() or STEP >= FINALSTEP + 1) Stdout("STEP " . STEP . ": " . CP) } until (STEP >= FINALSTEP + 1 or !toggle) } QuickerCraftRotation(ByRef STEP) { - global toggle - CP = 252 - FINALSTEP = 3 + global toggle, CP + FINALSTEP = 2 + DURABILITY := 40 if (!WaitForReady()) { return @@ -232,33 +218,27 @@ QuickerCraftRotation(ByRef STEP) { Switch STEP { Case 1: - PressKeyWithModifier("Shift","2") - ProgressStep(step,cp,32) + if (DURABILITY = 10) { + STEP := 99 + send, {1} + ProgressStep(STEP,CP,0) + return + } else { + ChooseBestProgressStep(STEP,CP,DURABILITY) + STEP := 1 + } Case 2: - - PressKeyWithModifier("Shift","2") - ProgressStep(step,cp,32) - Case 3: send, {1} ProgressStep(STEP,CP,0) } - - loop { - Stdout("Waiting for Ready...") - sleep, 250 - } until (ActionReady() or STEP >= FINALSTEP + 1) Stdout("STEP " . STEP . ": " . CP) } until (STEP >= FINALSTEP + 1 or !toggle) } QuickCraftRotation(ByRef STEP) { - global toggle - CP = 252 + global toggle, GREATSTRIDES, INNOVATION, CP FINALSTEP = 3 - GREATSTRIDES = 0 - INNOVATION = 0 - DURABILITY := 40 SIDESTEPS = 0 @@ -273,13 +253,6 @@ QuickCraftRotation(ByRef STEP) { STEP := FINALSTEP } - if (INNOVATION > 0) { - INNOVATION := INNOVATION - 1 - } - if (GREATSTRIDES > 0) { - GREATSTRIDES := GREATSTRIDES - 1 - } - Switch STEP { Case 1: @@ -295,37 +268,130 @@ QuickCraftRotation(ByRef STEP) { STEP := 1 if (GREATSTRIDES = 0) { TricksOfTheTrade(CP) - PressKeyWithModifier("Ctrl","5") - ProgressStep(STEP,CP,32) - GREATSTRIDES := 4 + GREATSTRIDES(STEP,CP,DURABILITY) } else if (!IsGood() and !IsExcellent() and INNOVATION = 0) { - send, {4} - ProgressStep(STEP,CP,18) - INNOVATION := 4 + Innovation(STEP,CP,DURABILITY) } else { - ChooseBestProgressStep(STEP,CP) - DURABILITY := DURABILITY - 10 - GREATSTRIDES := 0 + ChooseBestProgressStep(STEP,CP,DURABILITY) } } Case 3: send, {1} ProgressStep(STEP,CP,0) } - - loop { - Stdout("Waiting for Ready...") - sleep, 250 - } until (ActionReady() or STEP >= FINALSTEP + 1) + Stdout("STEP " . STEP . ": " . CP) + } until (STEP >= FINALSTEP + 1 or !toggle) +} + +StrongCraft60(ByRef STEP) { + global toggle, GREATSTRIDES, INNOVATION, CP + FINALSTEP = 2 + + SIDESTEPS = 0 + ACTIVATESIDESTEP := false + DURABILITY := 80 + + if (!WaitForReady()) { + return + } + + loop { + if (IsMaxQuality()) { + Veneration(STEP,CP,DURABILITY,0) + BasicSynthesis(STEP,CP,DURABILITY,0) + BasicSynthesis(STEP,CP,DURABILITY) + STEP := 99 + } + Switch STEP + { + Case 1: + InnerQuiet(STEP,CP,DURABILITY) + Case 2: + if (DURABILITY >= 20) { + if (GREATSTRIDES = 0) { + TricksOfTheTrade(CP) + GreatStrides(STEP,CP,DURABILITY,0) + } + if (IsGood() or IsExcellent()) { + ChooseBestProgressStep(STEP,CP,DURABILITY,0) + } + if (INNOVATION = 0) { + Innovation(STEP,CP,DURABILITY,0) + } + ChooseBestProgressStep(STEP,CP,DURABILITY,0) + } else { + BasicSynthesis(STEP,CP,DURABILITY,0) + BasicSynthesis(STEP,CP,DURABILITY) + } + } + Stdout("STEP " . STEP . ": " . CP) + } until (STEP >= FINALSTEP + 1 or !toggle) +} + +LongCraft60(ByRef STEP) { + global toggle, CP + FINALSTEP = 13 + + SIDESTEPS = 0 + ACTIVATESIDESTEP := false + DURABILITY := 80 + + if (!WaitForReady()) { + return + } + + loop { + if (IsMaxQuality()) { + Veneration(STEP,CP,DURABILITY,0) + BasicSynthesis(STEP,CP,DURABILITY,0) + BasicSynthesis(STEP,CP,DURABILITY) + STEP := 99 + } + Switch STEP + { + Case 1: + InnerQuiet(STEP,CP,DURABILITY) + Case 2: + TricksOfTheTrade(CP) + WasteNot(STEP,CP,DURABILITY) + Case 3,4,5,6: + if (IsGood() or IsExcellent()) { + BasicTouch(STEP,CP,DURABILITY) + } else { + HastyTouch(STEP,CP,DURABILITY) + } + Case 7: + TricksOfTheTrade(CP) + WasteNot(STEP,CP,DURABILITY) + Case 8: + if (IsGood() or IsExcellent()) { + BasicTouch(STEP,CP,DURABILITY,0) + } + Innovation(STEP,CP,DURABILITY) + Case 9,10,11,12: + BasicTouch(STEP,CP,DURABILITY) + Case 13: + if (DURABILITY <= 20) { + if (CP >= 56) { + WasteNot(STEP,CP,DURABILITY,0) + loop { + ChooseBestProgressStep(STEP,CP,DURABILITY,0) + } until (DURABILITY = 10 or IsMaxQuality()) + } + BasicSynthesis(STEP,CP,DURABILITY,0) + BasicSynthesis(STEP,CP,DURABILITY) + } else { + STEP := 12 + } + } Stdout("STEP " . STEP . ": " . CP) } until (STEP >= FINALSTEP + 1 or !toggle) } CraftingRotation(ByRef STEP) { - global toggle - CP = 252 + global toggle, CP FINALSTEP = 13 SIDESTEPS = 0 @@ -420,15 +486,249 @@ CraftingRotation(ByRef STEP) { send, {1} ProgressStep(STEP,CP,0) } - - loop { - Stdout("Waiting for Ready...") - sleep, 250 - } until (ActionReady() or STEP >= FINALSTEP + 1) Stdout("STEP " . STEP . ": " . CP) } until (STEP >= FINALSTEP + 1 or !toggle) } +SkillTemplate(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { ;Optionally remove DURABILITY IF NOT REQUIRED. + CPCOST := 18 ;CP Cost goes here. + DURABILITYCOST := ModDurability(0) ;Durability Cost goes inside ModDurability. + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + send, {5} ;Use PressKeyWithModifier("Ctrl","1") for modifiers. + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + return true + } else { + return false + } +} + +Veneration(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { + global VENERATION + CPCOST := 18 ;CP Cost goes here. + DURABILITYCOST := ModDurability(0) ;Durability Cost goes here. + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + PressKeyWithModifier("Shift","1") ;Use PressKeyWithModifier("Ctrl","1") for modifiers. + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + VENERATION := 4 + return true + } else { + return false + } +} + +GreatStrides(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { + global GREATSTRIDES + CPCOST := 32 ;CP Cost goes here. + DURABILITYCOST := ModDurability(0) ;Durability Cost goes here. + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + PressKeyWithModifier("Ctrl","5") ;Use PressKeyWithModifier("Ctrl","1") for modifiers. + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + GREATSTRIDES := 4 + return true + } else { + return false + } +} + +HastyTouch(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { + global GREATSTRIDES + CPCOST := ModDurability(0) ;CP Cost goes here. + DURABILITYCOST := 10 ;Durability Cost goes here. + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + PressKeyWithModifier("Ctrl","3") ;Use PressKeyWithModifier("Ctrl","1") for modifiers. + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + GREATSTRIDES := 0 + return true + } else { + return false + } +} + +Innovation(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { + global INNOVATION + CPCOST := 18 ;CP Cost goes here. + DURABILITYCOST := ModDurability(0) ;Durability Cost goes here. + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + send, {4} ;Use PressKeyWithModifier("Ctrl","1") for modifiers. + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + INNOVATION := 4 + return true + } else { + return false + } +} + +MastersMend(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { + CPCOST := 88 ;CP Cost goes here. + DURABILITYCOST := -30 ;Durability Cost goes here. + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + send, {3} ;Use PressKeyWithModifier("Ctrl","1") for modifiers. + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + sleep, 2000 + return true + } else { + return false + } +} + +Observe(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { + CPCOST := 7 ;CP Cost goes here. + DURABILITYCOST := ModDurability(0) ;Durability Cost goes here. + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + PressKeyWithModifier("Ctrl","X") ;Use PressKeyWithModifier("Ctrl","1") for modifiers. + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + return true + } else { + return false + } +} + +BrandOfTheElements(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { + CPCOST := 6 ;CP Cost goes here. + DURABILITYCOST := ModDurability(10) ;Durability Cost goes here. + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + PressKeyWithModifier("Ctrl","X") ;Use PressKeyWithModifier("Ctrl","1") for modifiers. + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + return true + } else { + return false + } +} + +NameOfTheElements(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { + global NAMEOFTHEELEMENTS + CPCOST := 30 ;CP Cost goes here. + DURABILITYCOST := ModDurability(0) ;Durability Cost goes here. + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + PressKeyWithModifier("Ctrl","Z") ;Use PressKeyWithModifier("Ctrl","1") for modifiers. + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + NAMEOFTHEELEMENTS := 3 + return true + } else { + return false + } +} + +FinalAppraisal(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { + global FINALAPPRAISAL + CPCOST := 1 ;CP Cost goes here. + DURABILITYCOST := ModDurability(0) ;Durability Cost goes here. + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + PressKeyWithModifier("Alt","1") ;Use PressKeyWithModifier("Ctrl","1") for modifiers. + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + FINALAPPRAISAL := 5 + return true + } else { + return false + } +} + +RapidSynthesis(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { + global GREATSTRIDES + CPCOST := 0 ;CP Cost goes here. + DURABILITYCOST := ModDurability(10) ;Durability Cost goes here. + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + PressKeyWithModifier("Shift","4") ;Use PressKeyWithModifier("Ctrl","1") for modifiers. + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + GREATSTRIDES := 0 + return true + } else { + return false + } +} + +StandardTouch(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { + global GREATSTRIDES + CPCOST := 18 ;CP Cost goes here. + DURABILITYCOST := ModDurability(10) ;Durability Cost goes here. + Stdout(CPCOST . "/" . DURABILITYCOST . "/" . CP . "/" . DURABILITY) + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + PressKeyWithModifier("Shift","2") ;Use PressKeyWithModifier("Ctrl","1") for modifiers. + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + GREATSTRIDES := 0 + return true + } else { + return false + } +} + +BasicTouch(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { + global GREATSTRIDES + CPCOST := 18 ;CP Cost goes here. + DURABILITYCOST := ModDurability(10) ;Durability Cost goes here. + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + send, {2} ;Use PressKeyWithModifier("Ctrl","1") for modifiers. + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + GREATSTRIDES := 0 + return true + } else { + return false + } +} + +BasicSynthesis(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { + CPCOST := 0 ;CP Cost goes here. + DURABILITYCOST := ModDurability(10) ;Durability Cost goes here. + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + send, {1} ;Use PressKeyWithModifier("Ctrl","1") for modifiers. + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + return true + } else { + return false + } +} + +InnerQuiet(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { + CPCOST := 18 + DURABILITYCOST := ModDurability(0) ;Durability Cost goes here. + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + send, {5} + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + return true + } else { + return false + } +} + +WasteNot(ByRef STEP,ByRef CP,ByRef DURABILITY,stepcount=1) { + global WASTENOT + CPCOST := 56 + DURABILITYCOST := ModDurability(0) ;Durability Cost goes here. + if (CP >= CPCOST and DURABILITY >= DURABILITYCOST) { + PressKeyWithModifier("Ctrl","1") + ProgressStep(STEP,CP,CPCOST,stepcount) + DURABILITY := DURABILITY - DURABILITYCOST + WASTENOT := 4 + return true + } else { + return false + } +} + +ModDurability(durability) { + global WASTENOT + if (WASTENOT > 0) { + return durability / 2 + } else { + return durability + } +} + PressKeyWithModifier(modifier,key) { Send, {%modifier% down} sleep, 50 @@ -444,6 +744,9 @@ TricksOfTheTrade(ByRef cp) { loop { sleep, 250 } until ActionReady() + return true + } else { + return false } } @@ -493,36 +796,134 @@ IsExcellent() { } } +SimpleTest() { + Stdout("Output") +} + + +ProgressStep(ByRef step,ByRef cp,cpcost,stepamt=1) { + global WASTENOT, INNOVATION, GREATSTRIDES, VENERATION, NAMEOFTHEELEMENTS, FINALAPPRAISAL, toggle + if (WASTENOT > 0) { + WASTENOT := WASTENOT - 1 + } + if (INNOVATION > 0) { + INNOVATION := INNOVATION - 1 + } + if (GREATSTRIDES > 0) { + GREATSTRIDES := GREATSTRIDES - 1 + } + if (VENERATION > 0) { + VENERATION := VENERATION - 1 + } + if (NAMEOFTHEELEMENTS > 0) { + NAMEOFTHEELEMENTS := NAMEOFTHEELEMENTS - 1 + } + if (FINALAPPRAISAL > 0) { + FINALAPPRAISAL := FINALAPPRAISAL - 1 + } + cp := cp - cpcost + step := step + stepamt + ;sleep, 250 + loop { + Stdout("Waiting for Ready...") + sleep, 250 + } until (ActionReady() or !toggle) +} STEP = -9999 toggle := false +WASTENOT := 0 +GREATSTRIDES := 0 +INNOVATION := 0 +NAMEOFTHEELEMENTS := 0 +VENERATION := 0 +FINALAPPRAISAL := 0 +CPBASE := 280 + +ScriptList := {"(40dura)Long Crafting Rotation":"CraftingRotation","(40dura)Quick Crafting Rotation":"QuickCraftRotation","(40dura)Quickest Crafting Rotation":"QuickerCraftRotation","(60+dura)Long Crafting Rotation":"LongCraft60","(60+dura)Quick Crafting Rotation":"StrongCraft60"} +;Stdout("Starting " . ScriptList[words]) +;functioncall := ScriptList[words] +;%functioncall%(STEP) + +scriptSelectionBox := null +buttonstart := null +buttonstop := null +cpBox := null + +scriptName := "" + +scriptChoices := "" + +for key,val in ScriptList + scriptChoices := scriptChoices . key . "|" + +scriptChoices := scriptChoices . "|" . scriptChoices[0] + +Gui, Add, Text,, Script Choice: +Gui, Add, DropDownList,vscriptSelectionBox w300 ys, %scriptChoices% +Gui, Add, Button,vbuttonstart gStartCraftingScript w90 section, Run Script +Gui, Add, Button,vbuttonstop gStopCraftingScript w90 ys, Stop +Gui, Add, Text,section, CP: +Gui, Add, Edit,gmodifyCP ys w75 +Gui, Add, UpDown,vcpBox ys Range1-1000, %CPBASE% +Gui, Show + +GuiControl, Disable, buttonstop + +modifyCP() { + global cpBox, CPBASE + boxcp := 0 + GuiControlGet, boxcp,,cpBox + CPBASE := boxcp + Stdout("Set Crafting CP to " . CPBASE) +} + +StartCraftingScript() { + global ScriptList, toggle, CPBASE, CP + GuiControlGet, scriptName, ,scriptSelectionBox + functioncall := ScriptList[scriptName] + Stdout("Starting " . functioncall) + toggle := true + GuiControl, Disable, buttonstart + GuiControl, Enable, buttonstop + sleep,100 + CP := CPBASE + WinActivate, FINAL FANTASY XIV + loop { + STEP = 1 + if (WaitForCraftingWindow()) { + %functioncall%(STEP) + } else { + StopCraftingScript() + } + } until (!toggle) + return +} + +StopCraftingScript() { + global toggle + toggle := false + GuiControl, Enable, buttonstart + GuiControl, Disable, buttonstop + WinActivate +} + +ClosedOnce := false + +GuiClose: +if (!ClosedOnce) { + ClosedOnce := true +} else { + ExitApp +} +return + ;Stdout("Toggle1: " . toggle) F11:: -{ - toggle := !toggle - Stdout("Toggle1: " . toggle) -} +StopCraftingScript() return F12:: -loop { - if !toggle { - Stdout("Toggle was false. Toggle is now " . toggle) - toggle := true - break - } - Stdout("Crafting is on. Starting craft...") - STEP = 1 - if (WaitForCraftingWindow()) { - sleep, 250 - CraftingRotation(STEP) - ;QuickCraftRotation(STEP) - ;QuickerCraftRotation(STEP) - } else { - toggle := false - Stdout("Toggle4: " . toggle) - } - sleep, 250 -} +StartCraftingScript() return diff --git a/autocraft.exe b/autocraft.exe index eea9f2b..29b3d14 100644 Binary files a/autocraft.exe and b/autocraft.exe differ