Rifter I understand your anguish, so I have re-written the script and commented it as much as possible. I have also removed all the 'goto' statements and restructured it to use 'gosub' instead. (Call it a quirk left over from my coding days to never use 'goto') I also removed the timer bit because when a timed lure decays you get the same decay message, so no need to keep track of the time.
The first section is where you can modify specific variables to suit your environment. I included a variable to hold the location to my RIFT log.txt file. And, for my situation I use the hot bars (1-6) to place my fishing pole and my bait. For me that is bar #4, with the pole on button 1, and the bait on button 2 (using the default button keymapping for RIFT.)
Next since you can't just press button 2 (while on bar #4,) and then apply the bait to the pole on button 1 (even using the mouse,) we need to open our bags, and apply the bait to the pole there. So we need to know where the pole is when we open our bags. To do this use the 'AutoIt3 Window Spy' program located in the AutoHotKey program folder. First while in RIFT open your bags and take note where your fishing pole is located. Now start 'AutoIt3 Window Spy', and then hover your mouse over your fishing pole in your bags. Write down the values for the Mouse Position (In Active Window). These are the values you will use for barPoleX and barPoleY.
That's it. Save the file and load it up. Next, it's time to start fishing. First apply your bait prior to starting, then while you have your mouse over a fishing area (i.e WATER!

) press Alt-F to start fishing. You should cast and then the rest is on autopilot.
And remember Alt-P to pause, Alt-R to reload, and Alt-Q to quit the script.
Please note I take no responsibility for the contents of the code, and I personally use this to help prevent repetitive motion syndrome, and am monitoring my toon at all times.
!f:: ; Start Fishing
IfWinNotActive, RIFT, , WinActivate, RIFT,
WinWaitActive, RIFT,
; ****************************************************************************
; ************************ Modifyable variables ******************************
; ****************************************************************************
; Store the location of log.txt in the RIFT program folder
logFileLoc = C:\Program Files (x86)\RIFT\log.txt
; First we need to know where we have placed the fising pole on our buff bars
; In my case I placed my pole and bait on bar #4,
; with the pole on button #1 and the bait on button #2
startBuffBarNo = 1 ; Which buff bar to rotate back to when done (usually 1)
poleBuffBarNo = 4 ; Which buff bar the fising pole is on
poleBuffKey = 1 ; Which button is used for the pole
baitBuffKey = 2 ; Which button is used for the bait
; Next since we can't press the button to apply the bait
; we need to know the coordinates for the pole in our bags.
; To do this I opened 'AutoIt3 Window Spy' (included with AHK
; and recorded the Mouse Position (In Active Window) coordinates
; while hovering over the fishing pole button when my bags are opened.
; NOTE - DO NOT MOVE YOUR BAG WITH THE FISHING POLE ONCE
; YOU HAVE RECORDED THE POSITION.
;
barPoleX = 860 ; Buff Bar X position for the fishing pole
barPoleY = 70 ; Buff Bar Y position for the fishing pole
; ****************************************************************************
; ******************** END OF MODIFYABLE VARIABLES **************************
; ****************************************************************************
; ****************************************************************************
; ******************** Actual Start of the script ***************************
; ****************************************************************************
; First, I want to store the current position for the fishing location.
; In other words I need to save where to recast the pole after aplying any bait.
MouseGetPos, xFish, yFish ; Get the initial mouse position for fishing
fishbait :=1 ; Indicate that we may have bait
Gosub, cast ; Make our first cast
Loop
{
Gosub, checkresults ; Check and see if we got anything
If fishbait = 0 ; Our bait has decayed
Gosub, bait ; Rebait the hook
Gosub, cast ; Cast a new line
}
checkresults:
Loop
{
Loop, read, %logFileLoc% ; Open and read our log file
last_line := A_LoopReadLine ; Read the last line of the file
IfInString, last_line, lure has decayed
{
fishbait :=0 ; No more bait, so rebait hook
Continue ; before recasting
}
IfInString, last_line, Reel ; Something on the line
{
Gosub, reel ; Attempt to reel it in!
Continue
}
IfInString, last_line, away ; Fish got away (recast)
Return
IfInString, last_line, stop fishing ; We stopped Fishing (recast)
Return
IfInString, last_line, received ; Caught something (recast)
Return
}
cast:
{
FileDelete, %logFileLoc% ; Clear out the log file
last_line :=0
sleep, 500
Send, {Shift Down}%poleBuffBarNo%{Shift Up} ; Switch to bar with fishing pole
Send, %poleBuffKey% ; Select the fising pole button
Send, {Shift Down}%startBuffBarNo%{Shift Up} ; Return to original Buff Bar
sleep, 100
MouseClick, Left , %xFish%, %yFish% ; Cast our line to original position
sleep, 100
Return
}
reel:
{
FileDelete, %logFileLoc%
last_line :=0
sleep, 100 ; Wait a fraction of a second
MouseClick ; Real it in click (does not matter if the mouse moved)
Return ; Return and recast the line
}
bait:
{
; Since you can't just press the bait button and then the pole button
; to rebait you will need to open your bags to apply the bait.
; Naturally your bags should be closed at this time.
fishbait :=1 ; Reset bait flag
sleep, 100
Send, b ; Open our bags
Sleep 1000 ; Wait for the bags to open
Send, {Shift Down}%poleBuffBarNo%{Shift Up} ; Switch to fishing pole buff bar
Send, %baitBuffKey% ; Press our bait key
sleep, 500 ; Wait half a sec
MouseClick, Left , %barPoleX%, %barPoleY% ; Click on the pole (in our bag)
sleep, 3500 ; Wait 3.5 seconds to allow buff to apply
Send, b ; Close our bags
sleep, 500
Send, {Shift Down}%startBuffBarNo%{Shift Up} ; Return to original Buff Bar
Return ; Recast
}
!p::Pause ; Pause the script
!r::Reload ; Reload the script
!q::ExitApp ; Exit the script