diff --git a/Community Scripts/AutoRetainer Companions/RobustGCTurnIn_McVaxius.ini b/Community Scripts/AutoRetainer Companions/RobustGCTurnIn_McVaxius.ini deleted file mode 100644 index a112615d..00000000 --- a/Community Scripts/AutoRetainer Companions/RobustGCTurnIn_McVaxius.ini +++ /dev/null @@ -1,89 +0,0 @@ ---arrays so we can easily transfer between PC and configure for other lists of retainers -local folderPath = "D:/FF14/!gil/" ---filename will be FCranks - ---enter in names of characters that will be responsible for triggering FC Buffs -local chars_FCBUFF = { - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server" -} - ---characters with Gridania GC -local chars_gridania = { - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server" -} - ---characters with uldah GC -local chars_uldah = { - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server" -} - ---characters with limsa gc -local chars_toilet = { - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server", - "First Last@Server" -} - - ---this is for the log file, you can configure it or not up to you. its first last and the FC shortname -local charFCS = { - ['firstname lastname'] = 'FCNEM', - ['firstname lastname'] = 'FCNEM', - ['firstname lastname'] = 'FCNEM', - ['firstname lastname'] = 'FCNEM', - ['firstname lastname'] = 'FCNEM', - ['firstname lastname'] = 'FCNEM', - ['firstname lastname'] = 'FCNEM', - ['firstname lastname'] = 'FCNEM' -} - ---total retainer abusers -local total_rcucks = 22 ---starting the counter at 1 -local rcuck_count = 1 - ---do we bother with fc buffs? 0 = no 1 = yes -local process_fc_buffs = 1 - ---do we run each city? -local process_gridania = 1 -local process_uldah = 1 -local process_toilet = 1 \ No newline at end of file diff --git a/Community Scripts/AutoRetainer Companions/RobustGCTurnIn_McVaxius.lua b/Community Scripts/AutoRetainer Companions/RobustGCTurnIn_McVaxius.lua deleted file mode 100644 index bd2d3c59..00000000 --- a/Community Scripts/AutoRetainer Companions/RobustGCTurnIn_McVaxius.lua +++ /dev/null @@ -1,265 +0,0 @@ ---[[ - Description: Updated Deliver and clean up script for using deliveroo and visland. - Author: McVaxius - Link: https://discord.com/channels/1162031769403543643/1162799234874093661/1190858719546835065 -]] - ---some ideas for next version ---deliveroo config suggestion: add some seals. and we can have a seal 0 or 1 option in settings ---add instructions for how to use this script ---separate config into a file ---check direction of where we spawned in gridania and uldah to adjust, and include new vislands ---change any vislands to use base64 var passed to visland ---use snd useitem - --- Function to load variables from a file -function loadVariablesFromFile(filename) - local file = io.open(filename, "r") - if file then - for line in file:lines() do - -- Remove single-line comments (lines starting with --) before processing - line = line:gsub("%s*%-%-.*", "") - -- Extract variable name and value - local variable, value = line:match("(%S+)%s*=%s*(.+)") - if variable and value then - -- Convert the value to the appropriate type (number or string) - value = tonumber(value) or value - _G[variable] = value -- Set the global variable with the extracted name and value - end - end - io.close(file) - else - print("Error: Unable to open file " .. filename) - end -end - - --- Specify the path to your text file ---[[ - --some vestigial junk i may remove if not needed once i update script properly - tempchar = GetCharacterName() - tempchar = tempchar:match("%s*(.-)%s*") --remove spaces at start and end only - tempchar = tempchar:gsub("%s", "") --remove all spaces - tempchar = tempchar:gsub("'", "") --remove all apostrophes -]] -local filename = os.getenv("appdata").."\\XIVLauncher\\pluginConfigs\\SomethingNeedDoing\\RobustGCTurnIn_McVaxius.ini" - --- Call the function to load variables from the file -loadVariablesFromFile(filename) - -function recordFCRANK() - local file = io.open(folderPath .. "FCranks.txt", "a") - local currentTime = os.date("*t") - local formattedTime = string.format("%04d-%02d-%02d %02d:%02d:%02d", currentTime.year, currentTime.month, currentTime.day, currentTime.hour, currentTime.min, currentTime.sec) - if file then - -- Write text to the file - --file:write("Hello, this is some text written to a file using Lua!\n") - file:write(formattedTime.." - Char:"..GetCharacterName().." - FC: "..charFCS[GetCharacterName()].." - FC Rank - "..GetFCRank().."\n") - -- Close the file handle - file:close() - yield("/echo Text has been written to '" .. folderPath .. "FCranks.txt'") - else - yield("/echo Error: Unable to open file for writing") - end -end - -function Final_GC_Cleaning() - --turn around in case we aren't facing the correct way - --this attempts to target serpent or flame personnel or even storm. assuming you have a separate line in a hotkey for each type. - --the purpose of this section is to get your char to face the npcs and orient the camera properly. otherwise the rest of the script might die - - --no targeting needed with deliveroo - --yield("/send KEY_3") - --yield("/wait 1") - --yield("/lockon on") - --yield("/automove on") - --yield("/wait 1") - - --deliveroo i choose you - yield("/deliveroo enable") - yield("/wait 1") - - --loop until deliveroo done - dellyroo = true - dellyroo = DeliverooIsTurnInRunning() - dellycount = 0 - while dellyroo do - yield("/wait 5") - dellyroo = DeliverooIsTurnInRunning() - dellycount = dellycount + 1 - yield("/echo Processing Retainer Abuser "..rcuck_count.."/"..total_rcucks) - if dellycount > 100 then - --do some stuff like turning off deliveroo and targeting and untargeting an npc - --i think we just need to target the quartermaster and open the dialog with him - --this will solve getting stuck on deliveroo doing nothing - dellycount = 0 - end - end - - --added 5 second wait here because sometimes they get stuck. altho its been biological life form so far.... - yield("/wait 5") - yield("/tp Estate Hall") - yield("/wait 1") - --yield("/waitaddon Nowloading ") - yield("/wait 15") - yield("/waitaddon NamePlate ") - - yield("/hold W ") - yield("/release W") - yield("/target Entrance ") - yield("/lockon on") - yield("/automove on ") - yield("/automove off ") - yield("/hold Q ") - yield("/release Q") - - --Code for opening venture coffers - yield("/wait 3") - yield("/echo Number of Venture Coffers to open: "..GetItemCount(32161)) - VCnum = GetItemCount(32161) - while (VCnum > 0) do - --this is no longer reliable - --yield("/item Venture Coffer") - yield("/send X") - yield("/wait 6") - VCnum = GetItemCount(32161) - yield("/echo Number of Venture Coffers left: "..GetItemCount(32161)) - end - --yield("/autorun off") - --Code for opening FC menu so allagan tools can pull the FC points - yield("/freecompanycmd") - recordFCRANK() - yield("/wait 3") -end - -function visland_stop_moving() - yield("/equipguud") - yield("/wait 3") - muuv = 1 - muuvX = GetPlayerRawXPos() - muuvY = GetPlayerRawYPos() - muuvZ = GetPlayerRawZPos() - while muuv == 1 do - yield("/wait 1") - if muuvX == GetPlayerRawXPos() and muuvY == GetPlayerRawYPos() and muuvZ == GetPlayerRawZPos() then - muuv = 0 - end - muuvX = GetPlayerRawXPos() - muuvY = GetPlayerRawYPos() - muuvZ = GetPlayerRawZPos() - end - yield("/echo movement stopped - time for GC turn ins or whatever") - yield("/visland stop") - yield("/wait 3") -end - -function open_aetheryte() - yield("/waitaddon NamePlate ") - yield("/wait 10") - yield("/target Aetheryte ") - yield("/lockon") - yield("/automove") - yield("/send E") - yield("/wait 0.5") - yield("/send E") - yield("/wait 0.5") - yield("/send E") - yield("/wait 0.5") - yield("/send E") - yield("/wait 0.5") - yield("/send E") - yield("/wait 0.5") - yield("/pinteract ") - yield("/pcall SelectString true 0") -end - ---first turn on FC buffs -if process_fc_buffs == 1 then - for _, char in ipairs(chars_FCBUFF) do - yield("/echo "..char) - yield("/ays relog " ..char) - yield("/echo 15 second wait") - yield("/wait 15") - yield("/waitaddon NamePlate ") - yield("/echo FC Seal Buff II") - yield("/freecompanycmd ") - yield("/pcall FreeCompany false 0 4u ") - yield("/pcall FreeCompanyAction false 1 0u ") - yield("/pcall ContextMenu true 0 0 1u 0 0 ") - yield("/pcall SelectYesno true 0 ") - --Then you need to /pyes the "Execute" - end - yield("/wait 3") -end ---gridania -if process_gridania == 1 then - for _, char in ipairs(chars_gridania) do - yield("/echo "..char) - yield("/ays relog " ..char) - yield("/echo 15 second wait") - yield("/wait 15") - yield("/waitaddon NamePlate ") - yield("/echo Processing Retainer Abuser "..rcuck_count.."/"..total_rcucks) - yield("/tp New Gridania ") - open_aetheryte() - yield("/pcall TelepotTown false 11 1u") - yield("/pcall TelepotTown false 11 1u") - yield("/wait 5") - yield("/ac Sprint") - yield("/ac Sprint") - yield("/ac Sprint") - yield("/visland execonce GCgrid") - visland_stop_moving() - Final_GC_Cleaning() - rcuck_count = rcuck_count + 1 - end -end ---uldah -if process_uldah == 1 then - for _, char in ipairs(chars_uldah) do - yield("/echo "..char) - yield("/ays relog " ..char) - yield("/echo 15 second wait") - yield("/wait 15") - yield("/waitaddon NamePlate ") - yield("/echo Processing Retainer Abuser "..rcuck_count.."/"..total_rcucks) - rcuck_count = rcuck_count + 1 - yield("/tp Ul'dah - Steps of Nald ") - open_aetheryte() - yield("/pcall TelepotTown false 11 2u") - yield("/pcall TelepotTown false 11 2u") - yield("/wait 5") - yield("/ac Sprint") - yield("/ac Sprint") - yield("/ac Sprint") - yield("/visland execonce GCuld") - visland_stop_moving() - Final_GC_Cleaning() - end -end ---limsa -if process_toilet == 1 then - for _, char in ipairs(chars_toilet) do - yield("/echo "..char) - yield("/ays relog " ..char) - yield("/echo 15 second wait") - yield("/wait 15") - yield("/waitaddon NamePlate ") - yield("/echo Processing Retainer Abuser "..rcuck_count.."/"..total_rcucks) - rcuck_count = rcuck_count + 1 - yield("/tp Limsa Lominsa ") - open_aetheryte() - yield("/pcall TelepotTown false 11 1u") - yield("/pcall TelepotTown false 11 1u") - yield("/wait 5") - yield("/ac Sprint") - yield("/ac Sprint") - yield("/ac Sprint") - yield("/visland execonce GClimsa") - visland_stop_moving() - Final_GC_Cleaning() - end -end ---last one out turn off the lights -yield("/ays multi") -yield("/pcraft stop") \ No newline at end of file diff --git a/Community Scripts/AutoRetainer Companions/RobustGCturnin/RobustGCTurnIn_McVaxius.lua b/Community Scripts/AutoRetainer Companions/RobustGCturnin/RobustGCTurnIn_McVaxius.lua new file mode 100644 index 00000000..c9bad708 --- /dev/null +++ b/Community Scripts/AutoRetainer Companions/RobustGCturnin/RobustGCTurnIn_McVaxius.lua @@ -0,0 +1,181 @@ +--[[ + Description: Updated Deliver and clean up script for using deliveroo and visland. + Author: McVaxius + Link: https://discord.com/channels/1162031769403543643/1162799234874093661/1190858719546835065 +]] + +--enter in names of characters that will be responsible for triggering FC Buffs +local chars_FCBUFF = { + "First Last@Server", + "First Last@Server", + "First Last@Server", + "First Last@Server", + "First Last@Server" +} + +--characters with servername, fc house or bell (0, 1) +local chars_fn = { + {"First Last@Server", 0}, + {"First Last@Server", 0}, + {"First Last@Server", 0}, + {"First Last@Server", 0}, + {"First Last@Server", 0}, + {"First Last@Server", 0}, + {"First Last@Server", 0}, + {"First Last@Server", 0} +} + +--starting the counter at 1 +local rcuck_count = 1 +--do we bother with fc buffs? 0 = no 1 = yes +local process_fc_buffs = 1 +--do we run each city? +local process_players = 1 + + +--some ideas for next version +--deliveroo config suggestion: add some seals. and we can have a seal 0 or 1 option in settings +--add instructions for how to use this script +--separate config into a file +--check direction of where we spawned in gridania and uldah to adjust, and include new vislands +--change any vislands to use base64 var passed to visland +--use snd useitem +--https://discord.com/channels/1001823907193552978/1196163718216679514/1215227696607531078 + +--borrowed some code and ideas from the wonderful: (make sure the _functions is in the snd folder) +--https://github.com/elijabesu/ffxiv-scripts/blob/main/snd/_functions.lua +loadfiyel = os.getenv("appdata").."\\XIVLauncher\\pluginConfigs\\SomethingNeedDoing\\_functions.lua" +functionsToLoad = loadfile(loadfiyel) +functionsToLoad() +DidWeLoadcorrectly() + +-- Specify the path to your text file +--[[ + --some vestigial junk i may remove if not needed once i update script properly + tempchar = GetCharacterName() + tempchar = tempchar:match("%s*(.-)%s*") --remove spaces at start and end only + tempchar = tempchar:gsub("%s", "") --remove all spaces + tempchar = tempchar:gsub("'", "") --remove all apostrophes +]] + +function Final_GC_Cleaning() + --turn around in case we aren't facing the correct way + --this attempts to target serpent or flame personnel or even storm. assuming you have a separate line in a hotkey for each type. + --the purpose of this section is to get your char to face the npcs and orient the camera properly. otherwise the rest of the script might die + + --no targeting needed with deliveroo + --yield("/send KEY_3") + --yield("/wait 1") + --yield("/lockon on") + --yield("/automove on") + --yield("/wait 1") + + --deliveroo i choose you + yield("/deliveroo enable") + yield("/wait 1") + + --loop until deliveroo done + dellyroo = true + dellyroo = DeliverooIsTurnInRunning() + dellycount = 0 + while dellyroo do + yield("/wait 5") + dellyroo = DeliverooIsTurnInRunning() + dellycount = dellycount + 1 + yield("/echo Processing Retainer Abuser "..rcuck_count.."/"..#chars_fn) + if dellycount > 100 then + --do some stuff like turning off deliveroo and targeting and untargeting an npc + --i think we just need to target the quartermaster and open the dialog with him + --this will solve getting stuck on deliveroo doing nothing + dellycount = 0 + end + end + + --added 5 second wait here because sometimes they get stuck. altho its been biological life form so far.... + yield("/wait 5") + yield("/tp Estate Hall") + yield("/wait 1") + --yield("/waitaddon Nowloading ") + yield("/wait 15") + yield("/waitaddon NamePlate ") + + --normal small house shenanigans + if chars_fn[rcuck_count][2] == 0 then + yield("/hold W ") + yield("/release W") + yield("/target Entrance ") + yield("/lockon on") + yield("/automove on ") + yield("/automove off ") + yield("/hold Q ") + yield("/release Q") + end + + --retainer bell nearby shenanigans + if chars_fn[rcuck_count][2] == 1 then + yield("/target \"Summoning Bell\"") + yield("/wait 2") + PathfindAndMoveTo(GetObjectRawXPos("Summoning Bell"), GetObjectRawYPos("Summoning Bell"), GetObjectRawZPos("Summoning Bell"), false) + visland_stop_moving() --added so we don't accidentally end before we get to the bell + end + +--[[ dumping out this part. opening venture coffers is kind of annoying waste of time. maybe we make it optional later -->TODO<-- + --Code for opening venture coffers + yield("/wait 3") + yield("/echo Number of Venture Coffers to open: "..GetItemCount(32161)) + VCnum = GetItemCount(32161) + while (VCnum > 0) do + --this is no longer reliable + --yield("/item Venture Coffer") + yield("/send X") + yield("/wait 6") + VCnum = GetItemCount(32161) + yield("/echo Number of Venture Coffers left: "..GetItemCount(32161)) + end + ]] + --yield("/autorun off") + --Code for opening FC menu so allagan tools can pull the FC points + yield("/freecompanycmd") + yield("/wait 3") +end + +--first turn on FC buffs +if process_fc_buffs == 1 then + for _, char in ipairs(chars_FCBUFF) do + yield("/echo "..char) + yield("/ays relog " ..char) + yield("/echo 15 second wait") + yield("/wait 15") + yield("/waitaddon NamePlate ") + yield("/echo FC Seal Buff II") + yield("/freecompanycmd ") + yield("/pcall FreeCompany false 0 4u ") + yield("/pcall FreeCompanyAction false 1 0u ") + yield("/pcall ContextMenu true 0 0 1u 0 0 ") + yield("/pcall SelectYesno true 0 ") + --Then you need to /pyes the "Execute" + end + yield("/wait 3") +end + +--gc turn in +if process_players == 1 then + for i=1, #chars_fn do + yield("/echo Loading Characters for GC TURNIN -> "..chars_fn[i][1]) + yield("/echo Processing Retainer Abuser "..i.."/"..#chars_fn) + yield("/ays relog " ..chars_fn[i][1]) + --yield("/echo 15 second wait") + yield("/wait 2") + CharacterSafeWait() + yield("/echo Processing Retainer Abuser "..i.."/"..#chars_fn) + TeleportToGCTown() + ZoneTransition() + WalkToGC() + rcuck_count = i + yield("/wait 2") + Final_GC_Cleaning() + end +end +--last one out turn off the lights +yield("/ays multi") +yield("/pcraft stop") \ No newline at end of file diff --git a/Community Scripts/AutoRetainer Companions/RobustGCturnin/_functions.lua b/Community Scripts/AutoRetainer Companions/RobustGCturnin/_functions.lua new file mode 100644 index 00000000..41be76f7 --- /dev/null +++ b/Community Scripts/AutoRetainer Companions/RobustGCturnin/_functions.lua @@ -0,0 +1,67 @@ +function WalkTo(x, y, z) + PathfindAndMoveTo(x, y, z, false) + while (PathIsRunning() or PathfindInProgress()) do + yield("/wait 0.5") + yield("/gaction jump") + end +end + +function ZoneTransition() + repeat + yield("/wait 0.5") + yield("/echo Are we ready?") + until not IsPlayerAvailable() + repeat + yield("/wait 0.5") + yield("/echo Are we ready? (backup check)") + until IsPlayerAvailable() +end + +function WalkToGC() + if GetPlayerGC() == 1 then + yield("/li The Aftcastle") + ZoneTransition() + WalkTo(94, 40.5, 74.5) + elseif GetPlayerGC() == 2 then + WalkTo(-68.5, -0.5, -8.5) + elseif GetPlayerGC() == 3 then + WalkTo(-142.5, 4, -106.5) + end +end + +function TargetedInteract(target) + yield("/target "..target.." ") + yield("/pinteract ") +end + +function DidWeLoadcorrectly() + yield("/echo We loaded the functions file successfully!") +end + +function CharacterSafeWait() + yield("/echo 15 second wait for char swap") + yield("/wait 15") + yield("/waitaddon NamePlate ") + +end + +function visland_stop_moving() + yield("/equipguud") + yield("/wait 3") + muuv = 1 + muuvX = GetPlayerRawXPos() + muuvY = GetPlayerRawYPos() + muuvZ = GetPlayerRawZPos() + while muuv == 1 do + yield("/wait 1") + if muuvX == GetPlayerRawXPos() and muuvY == GetPlayerRawYPos() and muuvZ == GetPlayerRawZPos() then + muuv = 0 + end + muuvX = GetPlayerRawXPos() + muuvY = GetPlayerRawYPos() + muuvZ = GetPlayerRawZPos() + end + yield("/echo movement stopped - time for GC turn ins or whatever") + yield("/visland stop") + yield("/wait 3") +end diff --git a/Community Scripts/Dungeons/Alex Burden of Father [A4N] Farm - Navmesh.lua b/Community Scripts/Dungeons/Alex Burden of Father [A4N] Farm - Navmesh.lua new file mode 100644 index 00000000..6a9fd555 --- /dev/null +++ b/Community Scripts/Dungeons/Alex Burden of Father [A4N] Farm - Navmesh.lua @@ -0,0 +1,431 @@ +--[[ + + **************************************** + * Alexander - The Burden of the Father * + * Normal Farm * + **************************************** + + *********** + * Version * + * 3.3.4 * + *********** + + -> 3.3.4: Switched over to PURELY Navmesh on this, visland is causing some memory leak or SOMETHING atm. So... to avoid further issues/make it to where it works properly, implimenting it (pretty much as seemless, I get peeps don't like change but) + ALSO. If you use "YesAlready" and have it to where the setting "ContentsFinderConfirm" is checkmarked, please enable that in the settings tab to true, that way you can keep it on and not have to worry about toggling it. + -> 3.3.3: Added the fucking manual like the main repo. + -> 3.3.2: Added the ability to Infinite Loop w/o having to set a number + -> 3.3.1: Added some checks to wait till you're fully loaded out (in case of high ping) [Chest fix is next on the list for high ping] + -> 3.3.0: Repair Functionality & Potentional duty load check (@leaf update) + Created by: Leontopodium Nivale, Class Support: Ellipsis | Menu Optimizing/tweaks: Leaf + + Creators note: thank you Ellipsis for getting all the classes working, you did an amazing job. You deserve the credit here. + also @Leaf thanks for tweaking it and making this more friendly for situations I didn't account for, you're the best + + *************** + * Description * + *************** + + This is meant to be used for Alexander - The Burden of the Father (NORMAL NOT SAVAGE) + It's setup to where you should be able to loop it as many time as you want, and be able to farm mats for GC seals + Known classes to work: ALL + + ********************* + * Required Plugins * + ********************* + + + Plugins that are used are: + -> VNavmesh (for pathing) : https://puni.sh/api/repository/veyn + -> Pandora (Setting "Open Chest") : https://love.puni.sh/ment.json + -> RotationSolver : https://puni.sh/api/repository/croizat + -> Something Need Doing [Expanded Edition] : https://puni.sh/api/repository/croizat + -> In the SND window, press the question mark to make the help setting's menu open + -> Go to options tab -> /target -> DISABLE THIS!! " Stop macro if target not found (only applies to SND's targeting system') " +]] + +--[[ + + ************** + * Settings * + ************** + ]] + + NumberofLoops = 5 -- number of loops you would like to do + InfiniteLoops = false -- options: true | false + -- If you want it to continually loop w/o a cap, change InfiniteLoops to true + -- this will ignore the number of loops and continually go w/o stopping + + rate = 0.3 -- Increase this at lower fps [0.3 works on 15fps+] + timeoutThreshold = 15 -- Number of seconds to wait before timeout + + ManualSetDuty = false -- true | false option + -- if you don't want to deal with the duty selection process, and select the duty yourself/turned on Unsync set this to true. If you want to just automate to the duty, set this to false. + -- This assumes that you have EVERYTHING unlocked + + DutyFinderOrder = true -- true | false option + -- If you have your duty from 50 at top, and 90 toward the bottom, leave this as true + -- If you have your duty from 90 at top, and 50 toward the bottom, change this to false + + YesAlreadyContentCheckBox = false -- true | false option + -- If you have it to where you have the setting to automatically confirm in "YesAlready" set this to true. + -- This will make it to where it won't hang on trying to get the duty confirm window to load, and press the duty commence button + -- I could pause yes already, but that's a headache I don't wanna think about at this second lol. + -- default is false + + CastingDebug = false -- true | false option + -- Just something for me to debug test w/ + + ManualRepair = false -- if you want to repair between the loops that you do. [defaults is false | on is true] + RepairAmount = 99 -- lowest point your gear will + + EchoHowMany = true -- Would you like to know where in the script the loop is at? [default is true | off is false] + TrueLoop = false -- would you like to know how many loops you're currently at actually? (tracks how many bolts/things you have) [default is false | on is true] + + CastingDebug = false + +--[[ + + ************ + * Script * + * Start * + ************ + +]] + +-- functions + function TargetNearestObjectKind(objectKind, radius, subKind) + local smallest_distance = 10000000000000.0 + local closest_target + local radius = radius or 0 + local subKind = subKind or 5 + local nearby_objects = GetNearbyObjectNames(radius^2,objectKind) + + if nearby_objects.Count > 0 then + for i = 0, nearby_objects.Count - 1 do + yield("/target "..nearby_objects[i]) + if not GetTargetName() or nearby_objects[i] ~= GetTargetName() + or (objectKind == 2 and subKind ~= GetTargetSubKind()) then + elseif GetDistanceToTarget() < smallest_distance then + smallest_distance = GetDistanceToTarget() + closest_target = GetTargetName() + end + end + ClearTarget() + if closest_target then yield("/target "..closest_target) end + end + return closest_target + end + + function PlayerTest() + repeat + yield("/wait "..rate) + until IsPlayerAvailable() + end + + +-- custom stuff for me to be insane, ignore This + LensID = 12674 + ShaftID = 12675 + CrankID = 12676 + SpringID = 12677 + PedalID = 12678 + BoltID = 12680 + + LensCount = GetItemCount(LensID) + ShaftCount = GetItemCount(ShaftID) + CrankCount = GetItemCount(CrankID) + SpringCount = GetItemCount(SpringID) + PedalCount = GetItemCount(PedalID) + BoltCount = GetItemCount(BoltID) + + ActualLoopCount = math.min(BoltCount//2,ShaftCount//2,SpringCount//2,PedalCount//1,CrankCount//1) + + +-- Values that are needed for the whole script + CurrentLoop = 1 -- This is just the loop counter itself, keeps tracks of how many you've done. + if ActualLoopCount > CurrentLoop and TrueLoop == true then + CurrentLoop = ActualLoopCount + end + DutyCounter = 0 + DutyFail = 0 + + +if ManualSetDuty == true then + DutyCounter = 1 +end + +if NumberofLoops == 0 then + InfiniteLoops = true + yield("/e Hmm... you didn't set it to infinite, but you also set it as 0, so I'm going to safely assume you meant to put it as infinite. Fixed that for you") +end + +::LoopTest:: +if NumberofLoops >= CurrentLoop and InfiniteLoops == false then + if EchoHowMany == true then + yield("/echo Loop: "..CurrentLoop.." out of ".. NumberofLoops) + end + PlayerTest() +elseif NumberofLoops < CurrentLoop and InfiniteLoops == false then + goto StopLoop +elseif InfiniteLoops == true then + if EchoHowMany == true then + yield("/e Current Loop is at: "..CurrentLoop) + end + PlayerTest() +end + +if CurrentLoop == 69 then + yield("/e Heh... nice.") +elseif CurrentLoop == 100 then + yield("/e Woo! 100 in, only... many more to go") +elseif CurrentLoop == 300 then + yield("/e Wow, 300. Man Idyllshire is going to be hurting for gear after this") +elseif CurrentLoop == 500 then + yield("/e Wanna know what a pirate's favorite letter is?") + yield("/e You might this it's 'Arr' but his first love was the 'C' ") +end + +-- Repair Functionality +if ManualRepair == true then + if NeedsRepair(99) then + while not IsAddonVisible("Repair") do + yield("/generalaction repair") + yield("/wait 0.5") + end + yield("/pcall Repair true 0") + yield("/wait 0.1") + if IsAddonVisible("SelectYesno") then + yield("/pcall SelectYesno true 0") + yield("/wait 0.1") + end + while GetCharacterCondition(39) do yield("/wait 1") end + yield("/wait 1") + yield("/pcall Repair true -1") + end +end + +::DutyFinder:: +if DutyFail == 4 then + goto StopLoop + +elseif DutyCounter == 0 then -- Initially setting up duty to loop Alexander - Burden of the Father (A4N) + PathStop() + --Open duty finder until it's visible + while not IsAddonVisible("ContentsFinder") do + yield("/dutyfinder") + yield("/wait "..rate) + end + --wait till duty finder has finished loading + while not IsAddonReady("ContentsFinder") do + yield("/wait "..rate) + end + +-- Setting up Unsync if it wasn't already + SetDFUnrestricted(true) + --wait until duty finder settings has closed + yield("/pcall ContentsFinder True 12 1") -- Clearing out any old duties + --wait till old selections are cleared out + repeat + yield("/wait "..rate) + until GetNodeText("ContentsFinder", 15) == "0/5 Selected" + OpenRegularDuty(115) + local timeout = 0 + repeat + yield("/wait "..rate) + timeout = timeout + 1 + if timeout > timeoutThreshold / rate then goto NOTALLUNLOCK end + until GetNodeText("JournalDetail", 19) == "Alexander - The Burden of the Father" + if DutyFinderOrder then + yield("/pcall ContentsFinder True 3 27") + else + yield("/pcall ContentsFinder True 3 75") + end + timeout = 0 + repeat + yield("/wait "..rate) + timeout = timeout + 1 + if timeout > timeoutThreshold / rate then goto NOTALLUNLOCK end + until GetNodeText("ContentsFinder", 14) == "Alexander - The Burden of the Father" + + ::NOTALLUNLOCK:: + if GetNodeText("ContentsFinder", 14) ~= "Alexander - The Burden of the Father" then + for i = 1, 501 do + yield("/pcall ContentsFinder True 3 "..i) + yield("/wait "..rate) + if GetNodeText("ContentsFinder", 14) == "Alexander - The Burden of the Father" then break end + end + yield("/wait "..rate) + end + + yield("/pcall ContentsFinder True 12 0") + DutyCounter = DutyCounter + 1 + while IsAddonVisible("ContentsFinderConfirm") == false and YesAlreadyContentCheckBox == false do + yield("/wait "..rate) + end + +elseif DutyCounter == 1 then -- Quicker menu'ing here to load in + PathStop() + --Open duty finder until it's visible + while not IsAddonVisible("ContentsFinder") do + yield("/dutyfinder") + yield("/wait "..rate) + end + --wait till duty finder has finished loading + while not IsAddonReady("ContentsFinder") do + yield("/wait "..rate) + end + yield("/pcall ContentsFinder True 12 0") --Duty Load + while IsAddonVisible("ContentsFinderConfirm") == false and YesAlreadyContentCheckBox == false do + yield("/wait "..rate) + end +elseif DutyCounter == 2 then + yield("/echo Hmm... it seems like this has failed, so going to reset it") + DutyCounter = 0 + DutyFail = DutyFail + 1 + goto DutyFinder +end + + +::DutyCommence:: +yield("/pcall ContentsFinderConfirm True 8") +repeat + yield("/wait "..rate) +until IsInZone(445) and IsAddonVisible("_Image") + +::BattleInitialize:: +manip_phase = 0 +while not GetCharacterCondition(26) do +-- Target selection and movement logic + local current_target = GetTargetName() + if not current_target or current_target == "" then + yield("/targetenemy") -- Attempt to auto-target the next enemy + current_target = GetTargetName() + if current_target == "" then + yield("/wait "..rate) + end + end + + local enemy_max_dist = 40 + local dist_to_enemy = GetDistanceToTarget() + if dist_to_enemy and dist_to_enemy > 0 then + if dist_to_enemy <= enemy_max_dist then + local enemy_x = GetTargetRawXPos() + local enemy_y = GetTargetRawYPos() + local enemy_z = GetTargetRawZPos() + PathfindAndMoveTo(enemy_x, enemy_y, enemy_z) + while PathfindInProgress() do + yield("/wait 0.05") + end + yield("/wait "..rate) + yield("/rotation manual") + else + PathStop() -- Stop movement after reaching near the target + end + end +end + +::StartofBattle:: +--rotation +while GetCharacterCondition(26) do + yield("/wait "..rate) + -- Target selection and movement logic + local current_target = GetTargetName() --Leaf: need find the setting to always zoom out or something + if not current_target or current_target == "" then + yield("/targetenemy") -- Attempt to auto-target the next enemy + current_target = GetTargetName() + if current_target == "" then + yield("/wait "..rate) + end + end + + while IsPlayerCasting() do + if CastingDebug == true then + yield("/e EY WATCH IT. I'M CASTING") + end + yield("/wait "..rate/3) + end + + local enemy_max_dist = 40 + local dist_to_enemy = GetDistanceToTarget() + if dist_to_enemy and dist_to_enemy > 0 then + if dist_to_enemy <= enemy_max_dist then + local enemy_x = GetTargetRawXPos() + local enemy_y = GetTargetRawYPos() + local enemy_z = GetTargetRawZPos() + PathfindAndMoveTo(enemy_x, enemy_y, enemy_z) + while PathfindInProgress() do + yield("/wait 0.05") + end + yield("/wait "..rate) + else + PathStop() -- Stop movement after reaching near the target + end + end +end +-- This section might need an additional command to re-target or adjust positioning +-- if the enemy is beyond the max distance, depending on your needs. + +yield("/rotation cancel") + +-- Chest #1 + PathfindAndMoveTo(1.93,10.60,-6.31) + while PathfindInProgress() do + yield("/wait 0.05") + end + while PathIsRunning() do + yield("/wait 0.05") + end + yield('/target "Treasure Coffer"') + yield("/pint") + +-- Chest #2 + PathfindAndMoveTo(-0.15,10.54,-8.23) + while PathfindInProgress() do + yield("/wait 0.05") + end + while PathIsRunning() do + yield("/wait 0.05") + end + yield('/target "Treasure Coffer"') + yield("/pint") + +-- Chest #3 + PathfindAndMoveTo(-2.18,10.57,-6.41) + while PathfindInProgress() do + yield("/wait 0.05") + end + while PathIsRunning() do + yield("/wait 0.05") + end + yield('/target "Treasure Coffer"') + yield("/pint") + +while TargetNearestObjectKind(4) do + if PathIsRunning() == false then + ChestX = GetTargetRawXPos() + ChestY = GetTargetRawYPos() + ChestZ = GetTargetRawZPos() + PathfindAndMoveTo(ChestX, ChestY, ChestZ) + while PathfindInProgress() do + yield("/wait 0.05") + end + end + yield("/wait "..rate) +end + +CurrentLoop = CurrentLoop + 1 +yield("/echo Leaving the instance") +yield("/pdfleave") + +repeat + yield("/wait "..rate) +until not IsInZone(445) and not GetCharacterCondition(34) and not GetCharacterCondition(56) and not GetCharacterCondition(45) + +goto LoopTest + +::StopLoop:: +if DutyFail < 4 then + yield("/echo Alex Looping has completed") +elseif DutyFail >= 4 then + yield("/echo It seems like it's failed, maybe lag?") +end \ No newline at end of file diff --git a/Community Scripts/Dungeons/Alex Burden of Father [A4N] Farm.lua b/Community Scripts/Dungeons/Alex Burden of Father [A4N] Farm.lua index 2b8454a6..212b6ece 100644 --- a/Community Scripts/Dungeons/Alex Burden of Father [A4N] Farm.lua +++ b/Community Scripts/Dungeons/Alex Burden of Father [A4N] Farm.lua @@ -63,6 +63,7 @@ RepairAmount = 75 -- lowest point your gear will EchoHowMany = true -- Would you like to know where in the script the loop is at? [default is true | off is false] + TrueLoop = false -- would you like to know how many loops you're currently at actually? (tracks how many bolts/things you have) [default is false | on is true] CastingDebug = false @@ -108,8 +109,29 @@ --Visland Loops Alex_Chest = "H4sIAAAAAAAACuWQSWvDMBCF/0qZsyMkR7It3UIX8CHdCLgLJYhkTASxVWy5C8b/vYpj40ALvRZ605t5enr6WrjWBYKCxR4/1ny9ggAy/flqTelqUM8t3NraOGNLUC08gAqJFDGXEQ/gERSjJKJcijCAJ1AzQZKEJiHrvLQlphegaAD3emsaH8aIF0v7hgWWrt+kpcNKb1xm3O5mcJ/Ohm6+U72z7+PGl/Fpud7XONn7hiyAy8K68eHUYTEcF71jEHcN1m44H4IzbdyUeFBXtjq35Xb4OD0OV6bApffRLviGZUYJo5IyGU9kBOeRkEcykgjJEhH/QzIhoaHkyURlLrk4UonIPJpTmZxQ4YfdyMVf/Y0Ljz3hH8i4CnXdVHi2sXmO1Z8D9dJ9Ad/rgrl7AwAA" +-- custom stuff for me to be insane, ignore This + LensID = 12674 + ShaftID = 12675 + CrankID = 12676 + SpringID = 12677 + PedalID = 12678 + BoltID = 12680 + + LensCount = GetItemCount(LensID) + ShaftCount = GetItemCount(ShaftID) + CrankCount = GetItemCount(CrankID) + SpringCount = GetItemCount(SpringID) + PedalCount = GetItemCount(PedalID) + BoltCount = GetItemCount(BoltID) + + ActualLoopCount = math.min(BoltCount//2,ShaftCount//2,SpringCount//2,PedalCount//1,CrankCount//1) + + -- Values that are needed for the whole script CurrentLoop = 1 -- This is just the loop counter itself, keeps tracks of how many you've done. + if ActualLoopCount > CurrentLoop and TrueLoop == true then + CurrentLoop = ActualLoopCount + end DutyCounter = 0 DutyFail = 0 diff --git a/Community Scripts/Dungeons/arbitrary duty solver/Trial_Farmer_MxVaxius.ini b/Community Scripts/Dungeons/arbitrary duty solver/Trial_Farmer_MxVaxius.ini new file mode 100644 index 00000000..eb565e1c --- /dev/null +++ b/Community Scripts/Dungeons/arbitrary duty solver/Trial_Farmer_MxVaxius.ini @@ -0,0 +1,64 @@ +--you could concieveably just change "The Ultima Weapon" to another target if you were say.. wanting to farm a different trial. +--target stuff +-- the pary member to follow. 4 means character slot 4, slot 1 is us, dont use 1, can throw in text if you want it to be a specific enemy or player -> wrap it with double quotes +local char_snake = "no follow" +--no follow = no follow. useful if your playing manually or through yet other means +--party leader = party leader eventually will be the basis for the character that will handle pathing through the dungeon to get near/to objectives +--^^^^^^^^^^^ please note that party leader is the char_snake to pick if you want to actually trigger the duties +--firstname lastname (of party member) you want to follow. dont put the @server + +-- the enemy to follow. 4 means character slot 4, slot 1 is us, dont use 1, can throw in text if you want it to be a specific enemy or player -> wrap it with double quotes +local enemy_snake = "The Ultima Weapon" +--local enemy_snake = "nothing" +--some names +--nothing - dont do anything just attack if something pops on target otherwise we will solve mechs with snd +--follow only = following in a non trial +--The Ultima Weapon +--etc + +--number of times to repeat the trial. we could also contemplate repeating until current char reaches a specific level also... +local repeat_trial = 5 +--0 is premade, 1 is trust, 2 is unsynced (not implemented yet. need some pcalls probably) +--for premade/unsync and for trust, open the respective windows and preselect the duty you want to farm +local repeat_type = 0 + +--duty specific settings +--this is 1-8 so we can assign specific behvaiour etc per member for certain duties +local partymemberENUM = 1 + +--how long to lock on for. we only do it once every lockon_wait seconds. this will interfere less with VBM dodging mechanics +local dont_lockon = 0 +local lockon_wait = 5 + +--distance stuff +-- distance max to the specific char so we can decide when to start moving +local snake_deest = 1 +-- distance max to the specific enemy to beeline to the enemy using navmesh. set this to a higher value than snake_deest if you want it to never follow the enemy. +local enemy_deest = 3 +-- distance max to char_snake where we stop trying to follow or do anything. maybe look for interaction points or exits? +local meh_deest = 40 +-- distance max to battle target +local enemeh_deest = 40 +--use limit break or not, 1 yes 0 no +local limituse = 0 +--limit break when % of life to use limit break attack +local limitpct = 30 + +--here we will specify the movement type. visland for visland, vnavmesh for vnavmesh +--default for visland because vnavmesh is kind of WIP atm +--youll notice we aren't using quotes. this is fine +--local movetype = visland +local movetype = vnavmesh + +--we'll deal with this later but for now its going into the ini file +local spread_marker_entities = { +"Buttcheeks", +"Chuttbeeks", +"Kuchkeebs" +} + + + +--DEPRECRATED SECTION +--limit break level permitted number is lowest level permitted DEPRECATED FOR NOW but won't remove it from template. ill just keep deprecated stuff at the bottom +local limitlevel = 2 diff --git a/Community Scripts/Dungeons/arbitrary duty solver/arbitraryduty_McVaxius.lua b/Community Scripts/Dungeons/arbitrary duty solver/arbitraryduty_McVaxius.lua index 41b7524d..526c360c 100644 --- a/Community Scripts/Dungeons/arbitrary duty solver/arbitraryduty_McVaxius.lua +++ b/Community Scripts/Dungeons/arbitrary duty solver/arbitraryduty_McVaxius.lua @@ -9,7 +9,7 @@ --todo --convert all variable sanity (type) checks into a generic function to reduce code clutter ---test and start building the spread marker checker so we can farm level 90 duties with a premade in preparation for vnavmesh caching :~D +--add in some check if we are doing trust/squad/DS and then follow an npc in party when in combat so we resolve stack markers --we configure everything in a ini file. --this way we can just copy paste the scripts and not need to edit the script per char diff --git a/Community Scripts/Gathering/DeluxeOceanFishingCharSwapping_MxVaxius.lua b/Community Scripts/Gathering/DeluxeOceanFishingCharSwapping_MxVaxius.lua index 1f49d93a..80395087 100644 --- a/Community Scripts/Gathering/DeluxeOceanFishingCharSwapping_MxVaxius.lua +++ b/Community Scripts/Gathering/DeluxeOceanFishingCharSwapping_MxVaxius.lua @@ -1,16 +1,35 @@ -This text isnt commented because I want you to read this before you copy paste it -go to this part - if randomNum == 1 then yield("/visland moveto 6.641 6.711 -0.335") -and fiddle with the numbers a bit -then delete these first 5 lines and enjoy. - ---you need visland, you need to not use "wait in lobby" in autoretainer ---you need the version of snd related to the repo where you found this ---you need to have each char on the fisher job. lalter version will fix this. ---having liza's discard helper will help with discarding garbage fish +--log path +local folderPath = "F:/FF14/!gil/" +-- first char cardinality and variable declaration +local feesh_c = 2 +--define the fisherpeople here +local which_one = { +{"Firstname Lastname@Server", 0}, +{"Firstname Lastname@Server", 0}, +{"Firstname Lastname@Server", 0}, +{"Firstname Lastname@Server", 0}, +{"Firstname Lastname@Server", 0}, +{"Firstname Lastname@Server", 0}, +{"Firstname Lastname@Server", 0}, +{"Firstname Lastname@Server", 0} +} --[[ +the above table works like this: +firstname last name@server (obvious), ? +? = 0 or 1, +0 means teleport to fc estate and try to get into FC entrance. +1 means teleport to fc estate and use a nearby retainer bell (navmesh) + + +you need navmesh and visland, you need to NOT use "wait in lobby" in autoretainer +you need the version of snd related to the repo where you found this +you need to have each char on the fisher job. lalter version will fix this. +having liza's discard helper will help with discarding garbage fish + + + --------- ---TODO --------- @@ -22,7 +41,7 @@ end --to exit summary --add this somewhere to verify right char -GetCharacterName() +GetCharacterName(true) gives full name and server --check pinned mesages with @em for some stuff like changing jobs automatically whicih requires gearsets for instructions --add in config file that checks levels of chars. if they are under 90 they will be considered. and lowest level one will be selected @@ -45,60 +64,73 @@ pre fishing condition 1 33 34 while looking at leave menu, 35 is off _> this is what we use ]]-- +function visland_stop_moving() + yield("/wait 3") + muuv = 1 + muuvX = GetPlayerRawXPos() + muuvY = GetPlayerRawYPos() + muuvZ = GetPlayerRawZPos() + while muuv == 1 do + yield("/wait 1") + if muuvX == GetPlayerRawXPos() and muuvY == GetPlayerRawYPos() and muuvZ == GetPlayerRawZPos() then + muuv = 0 + end + muuvX = GetPlayerRawXPos() + muuvY = GetPlayerRawYPos() + muuvZ = GetPlayerRawZPos() + end + yield("/echo movement stopped - time for GC turn ins or whatever") + yield("/visland stop") + yield("/wait 3") +end + -- random number function function getRandomNumber(min, max) return math.random(min,max) end ---log path -local folderPath = "F:/FF14/!gil/" - -- main fishing function will run per set interval time --- first char cardinality and variable declaration -local feesh_c = 2 - ---max number of chars -local feesh_max_c = 7 local feesh_char = "firstname lastname@server" --placeholder don't change this variable --for echoing later smol_increment = 0 -function which_one() - if feesh_c == 0 then feesh_c = feesh_max_c end - if feesh_c > feesh_max_c then feesh_c = 1 end - if feesh_c == 1 then feesh_char = "Firstname Lastname@Server" end - if feesh_c == 2 then feesh_char = "Firstname Lastname@Server" end - if feesh_c == 3 then feesh_char = "Firstname Lastname@Server" end - if feesh_c == 4 then feesh_char = "Firstname Lastname@Server" end - if feesh_c == 5 then feesh_char = "Firstname Lastname@Server" end - if feesh_c == 6 then feesh_char = "Firstname Lastname@Server" end - if feesh_c == 7 then feesh_char = "Firstname Lastname@Server" end +local function vich_one() + if feesh_c == 0 then feesh_c = #which_one end + if feesh_c > #which_one then feesh_c = 1 end + feesh_char = which_one[feesh_c][1] end --prep the variable for the echo at the end -which_one() +vich_one() function fishing() --turn off multi for teleporting to limsa to queue for fishing -- yield("/ays multi") --set the variable for the char to load - which_one() + vich_one() feesh_c = feesh_c + 1 yield("/echo "..feesh_char) - yield("/ays relog " ..feesh_char) - yield("/wait 3") + + --now we have to keep trying until we are on the right character.... just in case we are not. + while feesh_char ~= GetCharacterName(true) do + yield("/ays relog " ..feesh_char) + yield("/wait 3") - -- set the echo variable again so we can say what is next - which_one() + -- set the echo variable again so we can say what is next + vich_one() - yield("/waitaddon _ActionBar ") + yield("/waitaddon _ActionBar ") + end + --ok we made it to the right character. let us continue. + -- Teleport to Lisma yield("/tp Limsa Lominsa Lower Decks ") yield("/waitaddon _ActionBar ") + yield("/target Aetheryte ") yield("/target Aetheryte ") yield("/target Aetheryte ") @@ -115,9 +147,9 @@ function fishing() yield("/pcall TelepotTown false 11 3u ") yield("/wait 10") - -- from Arcanists' Guild to Ocean Fishing - yield("/visland execonce OC_Arc_Guild") -- create a path from Arcanists' Guild to Dryskthota yield("/ac sprint") + --TODO better / faster way to get to dryskthoa + PathfindAndMoveTo(-409.42459106445,3.9999997615814,74.483444213867,false) muuv = 1 muuvX = GetPlayerRawXPos() muuvY = GetPlayerRawYPos() @@ -131,24 +163,32 @@ function fishing() muuvY = GetPlayerRawYPos() muuvZ = GetPlayerRawZPos() end - yield("/visland stop") - yield("/wait 1") - - yield("/target Dryskthota") - yield("/pinteract ") - yield("/wait 1") - yield("/send ESCAPE ") - yield("/send ESCAPE ") - yield("/send ESCAPE ") - yield("/send ESCAPE ") yield("/wait 1") + fishqtest = false + toolong = 0 + fishqtest = GetCharacterCondition(91) + while (type(fishqtest) == "boolean" and fishqtest == false) do + yield("/target Dryskthota") + yield("/pinteract ") + yield("/wait 1") + yield("/send ESCAPE ") + yield("/send ESCAPE ") + yield("/send ESCAPE ") + yield("/send ESCAPE ") + yield("/wait 10") + fishqtest = GetCharacterCondition(91) + toolong = toolong + 1 + if toolong > 30 then + fishqtest = true + end + end --get current area yield("/echo Current area"..GetZoneID()) zown = GetZoneID() fzown = GetZoneID() --check if area has changed every 5 seconds. - while (zown == fzown) do + while (zown == fzown) and (toolong < 30) do fzown = GetZoneID() yield("/wait 5") end @@ -196,69 +236,28 @@ function fishing() yield("/tp Estate Hall ") yield("/waitaddon _ActionBar ") - yield("/hold W ") - yield("/release W") - yield("/target Entrance ") - yield("/lockon on") - yield("/automove on ") - yield("/automove off ") - yield("/hold Q ") - yield("/release Q") + --normal small house shenanigans + if which_one[feesh_c][2] == 0 then + yield("/hold W ") + yield("/release W") + yield("/target Entrance ") + yield("/lockon on") + yield("/automove on ") + yield("/automove off ") + yield("/hold Q ") + yield("/release Q") + end - yield("/send Left") - yield("/send Left") + --retainer bell nearby shenanigans + if which_one[feesh_c][2] == 1 then + yield("/target \"Summoning Bell\"") + yield("/wait 2") + PathfindAndMoveTo(GetObjectRawXPos("Summoning Bell"), GetObjectRawYPos("Summoning Bell"), GetObjectRawZPos("Summoning Bell"), false) + visland_stop_moving() --added so we don't accidentally end before we get to the bell + end end --of fishing() ---in case times are offset?!?! - -local taskTimes = { -[1] = true, -[3] = true, -[5] = true, -[7] = true, -[9] = true, -[11] = true, -[13] = true, -[15] = true, -[17] = true, -[19] = true, -[21] = true, -[23] = true -} - ---[[ -local taskTimes = { -[0] = true, -[2] = true, -[4] = true, -[6] = true, -[8] = true, -[10] = true, -[12] = true, -[14] = true, -[16] = true, -[18] = true, -[20] = true, -[22] = true -} -]]-- - -local taskTimeMin = { -[1] = true, -[2] = true, -[3] = true, -[4] = true, -[5] = true, -[6] = true, -[7] = true, -[8] = true, -[9] = true, -[10] = true, -[11] = true, -[12] = true -} - while true do local currentTime = os.date("*t") local formattedTime = string.format("%04d-%02d-%02d %02d:%02d:%02d", currentTime.year, currentTime.month, currentTime.day, currentTime.hour, currentTime.min, currentTime.sec) @@ -266,19 +265,36 @@ while true do if GetCharacterCondition(1)==false then yield("") -- Wait for 30 seconds because we are at the login screen end - - if taskTimes[currentTime.hour] and taskTimeMin[currentTime.min] then + + --secret variable + wheeequeheeheheheheheehhhee = 0 + + --The next 2 lines of code copied from https://raw.githubusercontent.com/plottingCreeper/FFXIV-scripts-and-macros/main/SND/FishingRaid.lua + --line 319 to line 320 + --thanks botting creeper! + if os.date("!*t").hour%2==0 and os.date("!*t").min<15 then + if os.date("!*t").min>=1 then + wheeequeheeheheheheheehhhee = 1 + end + end + + --if taskTimes[currentTime.hour] and taskTimeMin[currentTime.min] then + if wheeequeheeheheheheheehhhee == 1 then if GetCharacterCondition(31)==false then if GetCharacterCondition(32)==false then - yield("/ays multi") + --yield("/ays multi") + yield("/ays multi d") + yield("/send ESCAPE ") + yield("/send ESCAPE ") + yield("/send ESCAPE ") yield("/waitaddon _ActionBar ") fishing() --drop a log file entry on the charname + Level -- Define the folder path feesh_c = feesh_c - 1 - which_one() + vich_one() -- Open a file in write mode within the specified folder - local file = io.open(folderPath .. "output.txt", "a") + local file = io.open(folderPath .. "FeeshLevels.txt", "a") if file then -- Write text to the file @@ -290,15 +306,16 @@ while true do -- Close the file handle file:close() --print("Text has been written to '" .. folderPath .. "output.txt'") - yield("/echo Text has been written to '" .. folderPath .. "output.txt'") + yield("/echo Text has been written to '" .. folderPath .. "FeeshLevels.txt'") else --print("Error: Unable to open file for writing") yield("/echo Error: Unable to open file for writing") - file:write("Error: Unable to open file for writing\n") + --file:write("Error: Unable to open file for writing\n") end feesh_c = feesh_c + 1 - which_one() - yield("/ays multi") + vich_one() + --yield("/ays multi") + yield("/ays multi e") end end end -- end if diff --git a/Community Scripts/Misc/Deep Dungeon Inuition Farm.lua b/Community Scripts/Misc/Deep Dungeon Inuition Farm.lua index a98bbcea..7686bdeb 100644 --- a/Community Scripts/Misc/Deep Dungeon Inuition Farm.lua +++ b/Community Scripts/Misc/Deep Dungeon Inuition Farm.lua @@ -13,10 +13,14 @@ ************** * Version: * - * 1.1.1 * + * 1.1.3.3 * ************** Version Update Notes: + 1.1.3.3 -> Fixed it getting stuck on a step sometimes.... + 1.1.3.2 -> make it to where sprint would toggle off upon exit + 1.1.3.1 -> Made it to where if you get spotted w/o Concealment, it'll pop a Magicite for safety + 1.1.3 -> New plugin suggestion: "Burnt Toast". Esentially saves you ~3-6 seconds per pull. 1.1.2 -> Forgot that floors 21-30 has a different zone ID... woops. Also, standard is now supported by default, so no need for extra menu-ing/changing control schemes 1.1.1 -> Added tracker to tell you how many you've gotten as you farm, false by default 1.1 -> NVM. Turns out this is faster than I could before. Updated timers again, added one before loading into NPC to make it more normalish on loadout @@ -51,6 +55,15 @@ -> Pandora's Box | https://love.puni.sh/ment.json -> VNavmesh (was last tested on 0.0.0.10) | https://puni.sh/api/repository/veyn + -> Burnt Toast | 1PP Plugin (ty dev team) + -> Open the config and add the following: + -> You can now discern the call of the Accursed Hoard. + -> The current duty uses an independent leveling system. + -> All the traps on this floor have disappeared! + -> You use a splinter of Inferno magicite. + -> You use a splinter of Crag magicite. + -> The Beacon of Passage is activated! + -> The Beacon of Return begins to glow! ]] @@ -82,6 +95,21 @@ -- false by default, if you would like it to tell you upon every return back in front of the NPC, set it to true -- Options: true | false + --[[ + + ******************** + * Safety Options * + ******************** + + ]] + + DemiSafety = false + -- if for whatever reason you're in concealment and it either doesn't activate for you, or you manage to get stuck on a step(this has happened before more than I'd like to admit) + -- this will make it to where you activate a demi -> safety to ensure you don't hit the trap by accident + + ConcealmentSafety = false + -- if you get stuck on a step and your concealment + --[[ ******************** @@ -95,6 +123,29 @@ IntuitNotFound = 0 IntuitOutofRanged = 0 +-- Functions +function SafetyProtocolDemi() + yield("/pcall DeepDungeonStatus True 12 0") -- primal summon + yield("/wait 3") + yield("/pcall DeepDungeonStatus True 11 1") -- safety pomander + yield("/wait 0.5") + repeat + yield("/wait 0.1") + until IsPlayerAvailable() +end + +function DistancetoHoard() + DistanceCheckStart = GetDistanceToPoint(tonumber(HoardX), tonumber(HoardY), tonumber(HoardZ)) + yield("/wait 0.1") + DistanceCheckEnd = GetDistanceToPoint(tonumber(HoardX), tonumber(HoardY), tonumber(HoardZ)) + yield("/wait 0.1") + if DistanceCheckStart == DistanceCheckEnd and PathIsRunning() then + yield("/gaction jump") + end +end + + + ::DeepDungeon:: while IsInZone(613) == false do PathStop() @@ -107,6 +158,7 @@ end if IsInZone(613) then yield("/wait 0.5") + yield("/statusoff sprint") if ChatTracker == true then yield("/e ┣━━━━━━━━━━━━━━━━━┫") yield("/e -> Intuitions Found Currently at: "..IntuitFound) @@ -141,11 +193,13 @@ if (GetZoneID() == 771 or GetZoneID() == 772) then end ::IntuitionCheck:: -yield("/wait 0.2") -yield("/pcall DeepDungeonStatus True 11 14") repeat - yield("/wait 0.1") + yield("/wait 0.1") + yield("/pcall DeepDungeonStatus True 11 14") + repeat + yield("/wait 0.1") + until IsPlayerAvailable() until GetToastNodeText(2, 3) == "You sense the Accursed Hoard calling you..." or GetToastNodeText(2, 3) == "You do not sense the call of the Accursed Hoard on this floor..." if GetToastNodeText(2, 3) == "You sense the Accursed Hoard calling you..." then @@ -166,21 +220,16 @@ if GetToastNodeText(2, 3) == "You sense the Accursed Hoard calling you..." then yield("/echo Hey! A Hoard is here and in range.") yield("/vnavmesh moveto "..string.format("%.2f", GetAccursedHoardRawX()).." "..string.format("%.2f", GetAccursedHoardRawY()).." "..string.format("%.2f", GetAccursedHoardRawZ())) + yield("/wait 1") + Chest_Got = false if ConcealmentSaveFile == true then yield("/pcall DeepDungeonStatus True 11 18") -- Concealment pomander repeat yield("/wait 0.1") until IsPlayerAvailable() elseif ConcealmentSaveFile == false then - yield("/pcall DeepDungeonStatus True 12 0") -- primal summon - yield("/wait 3") - yield("/pcall DeepDungeonStatus True 11 1") -- safety pomander - yield("/wait 0.5") - repeat - yield("/wait 0.1") - until IsPlayerAvailable() + SafetyProtocolDemi() end - Chest_Got = false elseif GetToastNodeText(2, 3) == "You do not sense the call of the Accursed Hoard on this floor..." then IntuitNotFound = IntuitNotFound + 1 @@ -188,10 +237,20 @@ elseif GetToastNodeText(2, 3) == "You do not sense the call of the Accursed Hoar goto DeepDungeon end +HoardX = string.format("%.2f", GetAccursedHoardRawX()) +HoardY = string.format("%.2f", GetAccursedHoardRawY()) +HoardZ = string.format("%.2f", GetAccursedHoardRawZ()) + ::IntuitionTime:: while Chest_Got == false and (GetZoneID() == 771 or GetZoneID() == 772) do - yield("/wait 0.1") - yield("/ac sprint") + yield("/wait 0.2") + if HasStatusId(50) == false then + yield("/ac sprint") + end + DistancetoHoard() + if GetCharacterCondition(26) == true and DemiSafety == true then + SafetyProtocolDemi() + end if GetToastNodeText(2, 3) == "You obtain a piece of the Accursed Hoard." then Chest_Got = true elseif GetToastNodeText(2, 3) == "You discover a piece of the Accursed Hoard!" then @@ -203,7 +262,7 @@ if Chest_Got == true and (GetZoneID() == 771 or GetZoneID() == 772) then while GetCharacterCondition(26) do yield("/wait 1") end - yield("/wait 1") + yield("/wait 0.2") IntuitFound = IntuitFound + 1 diff --git a/Community Scripts/README.md b/Community Scripts/README.md index 68e15cc9..4f4adf3e 100644 --- a/Community Scripts/README.md +++ b/Community Scripts/README.md @@ -9,3 +9,5 @@ Many of these were originally posted to [Liza's Discord](https://discord.com/inv [plottingCreeper's Repo](https://github.com/plottingCreeper/FFXIV-scripts-and-macros/) [LTS's Repo](https://github.com/LTS-FFXIV/SNDScripts/) + +[Eden's Repo](https://github.com/elijabesu/ffxiv-scripts/) diff --git a/Community Scripts/Treasure Hunt/simpleFireupMapandGO.lua b/Community Scripts/Treasure Hunt/simpleFireupMapandGO.lua new file mode 100644 index 00000000..bc9f7164 --- /dev/null +++ b/Community Scripts/Treasure Hunt/simpleFireupMapandGO.lua @@ -0,0 +1,109 @@ +--[[ +script to fire up a map and go to it + +requires +Pandora -> Auto-Teleport to Map Coords +Pandora -> auto interact + auto chests +Simpletweaks -> Target/Targetting fix +Globetrotter -> automatically get flag for opened map +Something Neeed Doing -> Yes you need this +Rotation Solver -> :D +Boss Mod -> :D +Lazyloot -> optional for "/fulf pass" or whatever you want to do with it +YesAlready -> the first time you decipher a map just add it to your yesalready + +pseudocode +-> start +pop map +are we in same area already? if not tp to flag +flyto +pop dig +path to chest and pop it + +functions: +public unsafe float GetFlagXCoord() => AgentMap.Instance()->FlagMapMarker.XFloat; +public unsafe float GetFlagYCoord() => AgentMap.Instance()->FlagMapMarker.YFloat; +public unsafe float GetFlagZone() => AgentMap.Instance()->FlagMapMarker.TerritoryId; +]] + +--[[ +maptypes +Level 80 Ostensibly Special Timeworn Map 33328 +Level 90 Ostensibly Special Timeworn Map ?? +]] + +maptype = 33328 + +function distance(x1, y1, x2, y2) + local dx = x2 - x1 + local dy = y2 - y1 + return math.sqrt(dx*dx + dy*dy) +end + +function WalkTo(x, y, z) + PathfindAndMoveTo(x, y, z, false) + while (PathIsRunning() or PathfindInProgress()) do + yield("/wait 0.5") + end +end + +local function safewait() + repeat + yield("/wait 0.5") + yield("/echo Are we ready? (backup check)") + until IsPlayerAvailable() + yield("/wait 1") +end +function ZoneTransition() + repeat + yield("/wait 0.5") + yield("/echo Casting TP") + until not IsPlayerAvailable() + repeat + yield("/wait 0.5") + yield("/echo Arriving from TP") + until IsPlayerAvailable() +end + +--begin! +--yield("/item "..maptype) +--yield("/item Ostensibly Special Timeworn Map") --this doesnt actually work for some reason. it doesnt give an error though +yield("/gaction decipher") +yield("/wait 1") +yield("/pcall SelectIconString true 0") +safewait() + +yield("target zone -> "..GetFlagZone()) + +if GetZoneID() ~= GetFlagZone() then + --we need to get there! + yield("/p ") + ZoneTransition() +end + +--either we TPed there or we were there already. +--now lets get our butts to the place. no wait first lets see if we are close enough to the flag already to just waltz over + +-- if we are far from the flag (>5 yalm) path to it +tempdist = distance(GetPlayerRawXPos(), GetPlayerRawZPos(), GetFlagXCoord(),GetFlagYCoord()) +yield("tempdist -> "..tempdist) +if tempdist > 5 then + PathfindAndMoveTo(GetFlagXCoord(), GetPlayerRawYPos(), GetFlagYCoord(), false) +end + +--pop dig +while GetCharacterCondition(4) do + yield("/ac dismount") + yield("/wait 2") +end +yield("/wait 1") +yield("/ac dig") +yield("/wait 7") + +--target chest +yield("/target chest") +yield("/wait 0.5") +PathfindAndMoveTo(GetObjectRawXPos(GetTargetName()),GetObjectRawYPos(GetTargetName()),GetObjectRawZPos(GetTargetName()), false) +--move to chest + +--DONE! \ No newline at end of file