first you need the archbell windower. then get the Lunar plugin (search archbell forums). it allows you to bot unattended but you have to know how to script it and they wont tell you
install lunar in the windower/plugins directory (windower/plugins/lunar) and under that make another directory Scripts.
then create a text file in there like script.lua (must have .lua filename suffix)
then in your text file just put in the keystrokes you want followed with the wait inbetween (the wait is in 1/1000 seconds, so 500 is one half second)
this is a bot that will cast carbuncle and hit F8 and cast Dia on anything in front of you. if you have level 75 summoner, you can stand in 1 place and farm forever this way (until your inventory fills up) because you can refill MP faster than you can cast Dia, with WHM sub you get regen (wear JSE robe for extra regen) and carby has regen. this will work on anything level 50 or lower. 50+ might kill you if you leave it unattended for too long.
i used this script to get a peacock charm, leaping boots, emperor hairpin, and about 40mil in gear (from leaving it running all night at NM spawns in sea serpent grotto to get siren hair). i wrote it myself and it works great. the only downside is if someone sees you and calls a GM, your account will get suspended for 3 days, so only use it if you are at the keyboard, or if you are somewhere people don't usually go.
this is a script i wrote myself. here's what it does:
call carbuncle out (wont do anything if he's already out)
hit f8 to target any monsters (you have to use a bot for this, you can't macro it in the game)
if anything is targeted, carby will attack it
if it's out of carby range, cast Dia on it
sort inventory to conserve space
repeat forever
to use this you must have:
summoner main (the higher the better)
WHM sub (for regen for you)
carby mitts, light staff (for free carby perpetuation)
VC, RC, dalmatica, or yinyang robe (for MP refresh so you can keep casting Dia. not necessary if you only plan to run it a couple hours. Dia costs 6 MP, if you have 1200 MP you can cast it 200 times before you run out of MP, that's a long time if you put a big delay in)
test this while you watch to make sure you can kill stuff easily before you leave it unattended. as i said above, for level 75 summoner, level 1-50 monsters should be fine. if you aren't level 75 summoner you'll have to test to see what's safe for you to farm unattended.
if you dont have Summoner leveled, or you want to use this script in a different way, you can do almost anything with it if you can write a series of steps.
to press a key put
Control.SetKey(KEY_NAME,true)
to releast a key put
Control.SetKey(KEY_NAME,false)
to put in a delay put
Windower.Sleep(n)
where n is the thousanths of seconds to wait. for example
Windower.Sleep(1000)
is wait 1 second
to send some text, as if you had typed it, put
Control.SendString(your text here)
for example to use provoke put
Control.SendString(/ja Provoke <t>)
to start the script, start FFXI, and type this
/console start Lunar
/console Lunar start yourscript.lua
obviously, use the filename you used when you saved your script. this will start your script running. if you want to stop it just put
/console Lunar stop yourscript.lua
this should be all the instructions you need to automate almost any task in game (camping auction house, skilling up, etc). i can't read this forum unless i am promoted to a premium account though so if you have any questions youll have to send me a PM because i can't read the replies here.
(!empty($user->lang['CODE'])) ? $user->lang['CODE'] : ucwords(strtolower(str_replace('_', ' ', 'CODE'))):
Control.SendString(/ma Carbuncle <me>)
Windower.Sleep(1000)
Control.SetKey(F8,true)
Windower.Sleep(50)
Control.SetKey(F8,false)
Windower.Sleep(50)
Control.SendString(/pet Assault)
Windower.Sleep(1000)
Control.SetKey(F8,true)
Windower.Sleep(50)
Control.SetKey(F8,false)
Windower.Sleep(50)
Control.SendString(/ma Dia)
Windower.Sleep(50)
Control.SetKey(LCONTROL,true)
Windower.Sleep(100)
Control.SetKey(I,true)
Windower.Sleep(50)
Control.SetKey(LCONTROL,false)
Control.SetKey(I,false)
Windower.Sleep(50)
Control.SetKey(ADD,true)
Windower.Sleep(50)
Control.SetKey(ADD,false)
Windower.Sleep(50)
Control.SetKey(UP,true)
Windower.Sleep(50)
Control.SetKey(UP,false)
Windower.Sleep(50)
Control.SetKey(RETURN,true)
Windower.Sleep(50)
Control.SetKey(RETURN,false)
Windower.Sleep(50)
Control.SetKey(UP,true)
Windower.Sleep(50)
Control.SetKey(UP,false)
Windower.Sleep(50)
Control.SetKey(RETURN,true)
Windower.Sleep(50)
Control.SetKey(RETURN,false)
Windower.Sleep(500)
Control.SetKey(ESCAPE,true)
Windower.Sleep(100)
Control.SetKey(ESCAPE,false)
Windower.Sleep(500)
Control.SetKey(ESCAPE,true)
Windower.Sleep(100)
Control.SetKey(ESCAPE,false)
Windower.Sleep(500)
Control.SetKey(ESCAPE,true)
Windower.Sleep(100)
Control.SetKey(ESCAPE,false)
Windower.Sleep(500)
Control.SetKey(ESCAPE,true)
Windower.Sleep(100)
Control.SetKey(ESCAPE,false)