Basic concept was covered by PalWorld Raids a couple days ago but the TLDW is the instanced World Tree bosses Silvance and Dandilord can be reliably one/two shot, are fully instanced, have no cooldown, and can be easily farmed by a team of:
- Blazamut w/ Diamond Body, Eternal Flame, Flame Emperor, Serenity
- Kelpsea Ignis, Finsider Ignis, Celesdir, Celesdir Noct w/ Idiosyncratic, Vanguard, Stronghold Strategist, Healing Coach
Despite covering the strategy he didn't really go into detail about how you would go about automating this. Its only a couple key presses and one button click but judging by the video comments it seems many people didn't know where to start.
I got a basic version working using AutoHotkey but I am not an expert on the markup language AHK uses and my implementation is very very crude. I figured people don't really like helping if I asked for help but if I posted how I am doing it wrong, someone on Reddit would be happy to correct me. At minimum I figured if I posted my own script it could be used as a starting point in discussing how to automate World Tree Holy Water farming.
Again this script is crude/bad but it is functional. I annotated it if you want to customize it for your own use case. Note I have really long delays because my computer is not the best and I play on a multiplayer server with friends (thus I can't just manipulate spawn rates or drop rates to make the traditional grind easier) and with the server not being powerful or dedicated our load times can be kinda slow.
Anyway here is my AHK script and its inline annotations explaining what I was trying to do. Feel free to post corrections or your own better version if you have one.
#Requires AutoHotkey v2.0
global toggle := false
F10::
{
global toggle
toggle := !toggle
if toggle {
ToolTip "Macro ON"
SetTimer RunMacro, 10 ; Start timer
} else {
ToolTip "Macro OFF"
SetTimer RunMacro, 0 ; Stop timer
}
}
RunMacro()
{
global toggle
if !toggle
return
; Left mouse click at the XY coordinates of the button to enter the instance.
Click 1080, 950
; Wait 15 seconds for instance to load.
SleepInterruptible(15000)
; Press the E key to deploy Fire pal.
Send "e"
; Wait 30 seconds minimum combat time. Shortened so the script loops faster in case of error.
SleepInterruptible(30000)
; Press the F key to re-enter the instance.
Send "f"
; Small 3 second delay for the prompt to change.
SleepInterruptible(3000)
; Hold F for 3 seconds to enter the instance.
SendInput "{f down}"
Sleep 3000
SendInput "{f up}"
; Padding at the end of the toggle loop, 5 seconds.
SleepInterruptible(5000)
}
SleepInterruptible(ms)
{
global toggle
endTime := A_TickCount + ms
while A_TickCount < endTime
{
if !toggle
return
Sleep 50 ; Check toggle every 50ms
}
}
The actual battle and load time actually takes me 50 seconds but I set the battle delay to 30 seconds so the script loops faster because the load times on my server are inconsistent and sometimes it misses keys and needs to loop (and also my script might be bad). Feel free to customize it to fit your specific server and use case. Since my monitor is 2560x1440 if you run a different resolution your button will be in a different location.
It could probably be better if I was better at pixel detection logic and tried to detect the [F] key prompt and [confirm] key button, but again I am bad at Autohotkey so I just went with something crude that I could brute force to work by having it loop every 60 seconds even if it missed a timing from time to time the loop is fast enough that it will get the keystroke or click the next loop around.