|
PUP Gearswap (Testers Needed)
Server: Phoenix
Game: FFXI
Posts: 32
By Phoenix.Latravant 2019-02-28 06:15:56
never mind i figure out whats wrong with my problem. nothing lol, i just misunderstood the lua.
By Arrchie 2019-03-01 14:34:03
Couple things I noticed while playing with it
When using Valoredge head and body it seems to always want to default to TANK even after I've set it to DD spec it'll switch back most often after a weaponskill, even defaulting to Master only doesn't fix this issue. This is also without having any actual tanking attachments on.
Is there a way to turn off mode prediction? I was looking through the commands and I see Alt+F6 but it seemed more like it was forcing an update to the prediction so I assume it's not meant to turn it on/off.
Without kiting mode on it seems to often forget to equip my hermes sandals, even though it's in my idle sets, not too hard to work around but definitely annoying if I forget to set it in town.
Hmmm, I'll definitely check into where this might be resetting you.
Currently, the prediction is called when:
Besides those, we tried to keep using the prediction as little as possible to prevent this from happening while fighting. The fact it's resetting you after you a weapon skill is quite odd. We do no predictions around that area.
That's also strange about the hermes sandals being in the idle sets and it not equipping. There are also different idle sets based if puppet is out or not. It would be easiest for me to see your gearswap to double check a few items. I haven't had this issue yet, maybe a bit harder to recreate.
Server: Shiva
Game: FFXI
Posts: 27982
By Shiva.Spathaian 2019-03-01 14:40:29
Couple things I noticed while playing with it
When using Valoredge head and body it seems to always want to default to TANK even after I've set it to DD spec it'll switch back most often after a weaponskill, even defaulting to Master only doesn't fix this issue. This is also without having any actual tanking attachments on.
Is there a way to turn off mode prediction? I was looking through the commands and I see Alt+F6 but it seemed more like it was forcing an update to the prediction so I assume it's not meant to turn it on/off.
Without kiting mode on it seems to often forget to equip my hermes sandals, even though it's in my idle sets, not too hard to work around but definitely annoying if I forget to set it in town.
Hmmm, I'll definitely check into where this might be resetting you.
Currently, the prediction is called when:
Besides those, we tried to keep using the prediction as little as possible to prevent this from happening while fighting. The fact it's resetting you after you a weapon skill is quite odd. We do no predictions around that area.
That's also strange about the hermes sandals being in the idle sets and it not equipping. There are also different idle sets based if puppet is out or not. It would be easiest for me to see your gearswap to double check a few items. I haven't had this issue yet, maybe a bit harder to recreate. I'll take a look through my gearswap again when I get home from work just to make sure I didn't miss something.
Does it recalculate frame/head even if Activate isn't actually used, as in if you already have a pet summoned? I wouldn't be surprised if I'm hitting something by accident. Actually I think this is exactly what's happening, completely makes sense based on previous gearswaps.
Server: Shiva
Game: FFXI
Posts: 27982
By Shiva.Spathaian 2019-03-01 19:09:40
Code -- Initialization function for this job file.
-- IMPORTANT: Make sure to also get the Mote-Include.lua file (and its supplementary files) to go with this.
function get_sets()
mote_include_version = 2
-- Load and initialize the include file.
include("Mote-Include.lua")
end
function user_setup()
-- Alt-F10 - Toggles Kiting Mode.
--[[
F9 - Cycle Offense Mode (the offensive half of all 'hybrid' melee modes).
These are for when you are fighting with or without Pet
When you are IDLE and Pet is ENGAGED that is handled by the Idle Sets
]]
state.OffenseMode:options("MasterPet", "Master")
--[[
Ctrl-F9 - Cycle Hybrid Mode (the defensive half of all 'hybrid' melee modes).
Used when you are Engaged with Pet
Used when you are Idle and Pet is Engaged
]]
state.HybridMode:options("Normal", "Acc", "TP", "DT", "Regen", "Ranged")
--[[
Alt-F12 - Turns off any emergency mode
Ctrl-F10 - Cycle type of Physical Defense Mode in use.
F10 - Activate emergency Physical Defense Mode. Replaces Magical Defense Mode, if that was active.
]]
state.PhysicalDefenseMode:options("PetDT", "MasterDT")
--[[
Alt-F12 - Turns off any emergency mode
F11 - Activate emergency Magical Defense Mode. Replaces Physical Defense Mode, if that was active.
]]
state.MagicalDefenseMode:options("PetMDT")
--[[ IDLE Mode Notes:
F12 - Update currently equipped gear, and report current status.
Ctrl-F12 - Cycle Idle Mode.
Will automatically set IdleMode to Idle when Pet becomes Engaged and you are Idle
]]
state.IdleMode:options("Idle", "MasterDT")
--Various Cycles for the different types of PetModes
state.PetStyleCycleTank = M {"NORMAL", "DD", "MAGIC", "SPAM"}
state.PetStyleCycleMage = M {"NORMAL", "HEAL", "SUPPORT", "MB", "DD"}
state.PetStyleCycleDD = M {"NORMAL", "BONE", "SPAM", "OD", "ODACC"}
--The actual Pet Mode and Pet Style cycles
--Default Mode is Tank
state.PetModeCycle = M {"TANK", "DD", "MAGE"}
--Default Pet Cycle is Tank
state.PetStyleCycle = state.PetStyleCycleTank
--Toggles
--[[
Alt + E will turn on or off Auto Maneuver
]]
state.AutoMan = M(false, "Auto Maneuver")
--[[
Alt + D will turn on or off Lock Pet DT
(Note this will block all gearswapping when active)
]]
state.LockPetDT = M(false, "Lock Pet DT")
--[[
Alt + (tilda) will turn on or off the Lock Weapon
]]
state.LockWeapon = M(false, "Lock Weapon")
--[[
//gs c toggle setftp
]]
state.SetFTP = M(false, "Set FTP")
--[[
This will hide the entire HUB
//gs c hide hub
]]
state.textHideHUB = M(false, "Hide HUB")
--[[
This will hide the Mode on the HUB
//gs c hide mode
]]
state.textHideMode = M(false, "Hide Mode")
--[[
This will hide the State on the HUB
//gs c hide state
]]
state.textHideState = M(false, "Hide State")
--[[
This will hide the Options on the HUB
//gs c hide options
]]
state.textHideOptions = M(false, "Hide Options")
--[[
This will toggle the default Keybinds set up for any changeable command on the window
//gs c hide keybinds
]]
state.Keybinds = M(true, "Hide Keybinds")
--[[
Enter the slots you would lock based on a custom set up.
Can be used in situation like Salvage where you don't want
certain pieces to change.
//gs c toggle customgearlock
]]
state.CustomGearLock = M(false, "Custom Gear Lock")
--Example customGearLock = T{"head", "waist"}
customGearLock = T{}
send_command("bind !f7 gs c cycle PetModeCycle")
send_command("bind ^f7 gs c cycleback PetModeCycle")
send_command("bind !f8 gs c cycle PetStyleCycle")
send_command("bind ^f8 gs c cycleback PetStyleCycle")
send_command("bind !e gs c toggle AutoMan")
send_command("bind !d gs c toggle LockPetDT")
send_command("bind !f6 gs c predict")
send_command("bind ^` gs c toggle LockWeapon")
select_default_macro_book()
end
function file_unload()
send_command("unbind !f7")
send_command("unbind ^f7")
send_command("unbind !f8")
send_command("unbind ^f8")
send_command("unbind !e")
send_command("unbind !d")
send_command("unbind !f6")
send_command("unbind ^`")
end
function job_setup()
-- Adjust the X (horizontal) and Y (vertical) position here to adjust the window
setupTextWindow(0, 40)
end
function init_gear_sets()
--Table of Contents
---Gear Variables
---Master Only Sets
---Hybrid Only Sets
---Pet Only Sets
---Misc Sets
-------------------------------------------------------------------------
-- _____ __ __ _ _ _
-- / ____| \ \ / / (_) | | | |
--| | __ ___ __ _ _ __ \ \ / /_ _ _ __ _ __ _| |__ | | ___ ___
--| | |_ |/ _ \/ _` | '__| \ \/ / _` | '__| |/ _` | '_ \| |/ _ \/ __|
--| |__| | __/ (_| | | \ / (_| | | | | (_| | |_) | | __/\__ \
-- \_____|\___|\__,_|_| \/ \__,_|_| |_|\__,_|_.__/|_|\___||___/
-------------------------------------------------------------------------
--[[
This section is best ultilized for defining gear that is used among multiple sets
You can simply use or ignore the below
]]
Animators = {}
Animators.Range = "Animator P +1 II"
Animators.Melee = "Animator P +1 +1"
--Adjust to your reforge level
--Sets up a Key, Value Pair
Artifact_Foire = {}
Artifact_Foire.Head_PRegen = "Foire Taj"
Artifact_Foire.Body_WSD_PTank = "Tali'ah Manteel +2"
Artifact_Foire.Hands_Mane_Overload = "Foire Dastanas"
Artifact_Foire.Legs_PCure = "Foire Churidars"
Artifact_Foire.Feet_Repair_PMagic = "Foire Babouches"
Relic_Pitre = {}
Relic_Pitre.Head_PRegen = "Pitre Taj +1" --Enhances Optimization
Relic_Pitre.Body_PTP = "Pitre Tobe +1" --Enhances Overdrive
Relic_Pitre.Hands_WSD = "Pitre Dastanas +1" --Enhances Fine-Tuning
Relic_Pitre.Legs_PMagic = "Pitre Churidars +1" --Enhances Ventriloquy
Relic_Pitre.Feet_PMagic = "Pitre Babouches" --Role Reversal
Empy_Karagoz = {}
Empy_Karagoz.Head_PTPBonus = "Cirque Capello +2"
Empy_Karagoz.Body_Overload = "Cirque Farsetto +2"
Empy_Karagoz.Hands = "Cirque Guanti +2"
Empy_Karagoz.Legs_Combat = "Cirque Pantaloni +2"
Empy_Karagoz.Feet_Tatical = "Cirque Scarpe +2"
Visucius = {}
Visucius.PetDT = {
name = "Visucius's Mantle",
augments = {
"Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20",
"Accuracy+20 Attack+20",
"Pet: Accuracy+4 Pet: Rng. Acc.+4",
'Pet: "Regen"+10',
"Pet: Damage taken -5%"
}
}
Visucius.MasterDD = {
name = "Visucius's Mantle",
augments={
"STR+20",
"Accuracy+20 Attack+20",
"Accuracy+10",
"Dbl.Atk.+10",
"Damage taken-5%",
}
}
Visucius.MPetDD = {
name = "Visucius's Mantle",
augments={
"Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20",
"Accuracy+20 Attack+20",
"Pet: Attack+10 Pet: Rng.Atk.+10",
"Pet: Haste+10"
}
}
Visucius.PetMagic = {
name = "Visucius's Mantle",
augments = {
"Pet: Acc.+20 Pet: R.Acc.+20 Pet: Atk.+20 Pet: R.Atk.+20",
"Accuracy+20 Attack+20",
"Pet: Accuracy+4 Pet: Rng. Acc.+4",
'Pet: "Regen"+10',
"Pet: Damage taken -5%"
}
}
--------------------------------------------------------------------------------
-- __ __ _ ____ _ _____ _
-- | \/ | | | / __ \ | | / ____| | |
-- | \ / | __ _ ___| |_ ___ _ __ | | | |_ __ | |_ _ | (___ ___| |_ ___
-- | |\/| |/ _` / __| __/ _ \ '__| | | | | '_ \| | | | | \___ \ / _ \ __/ __|
-- | | | | (_| \__ \ || __/ | | |__| | | | | | |_| | ____) | __/ |_\__ \
-- |_| |_|\__,_|___/\__\___|_| \____/|_| |_|_|\__, | |_____/ \___|\__|___/
-- __/ |
-- |___/
---------------------------------------------------------------------------------
--This section is best utilized for Master Sets
--[[
Will be activated when Pet is not active, otherwise refer to sets.idle.Pet
]]
sets.idle = {range="Animator P +1",
head="Tali'ah Turban +2",neck="Twilight Torque",ear1="Steelflash Earring",ear2="Bladeborn Earring",
body="Tali'ah Manteel +2",hands="Tali'ah Gages +1",ring1="Varar Ring +1",ring2="Epona's Ring",
back="Shadow Mantle",waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Hermes' Sandals"
}
-------------------------------------Fastcast
sets.precast.FC = {head="Haruspex Hat",ear2="Loquacious Earring",body="Mirke Wardecors",feet="Chelona Boots",back="Swith Cape"
}
-------------------------------------Midcast
sets.midcast = {} --Can be left empty
sets.midcast.FastRecast = {head="Haruspex Hat",ear2="Loquacious Earring",
body="Tali'ah Manteel +2",hands="Tali'ah Gages +1",
legs="Tali'ah Seraweels +1",feet="Tali'ah Crackows +1"
}
-------------------------------------Kiting
sets.Kiting = {feet = "Hermes' Sandals"}
-------------------------------------JA
sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck = "Magoraga Beads", body = "Passion Jacket"})
-- Precast sets to enhance JAs
sets.precast.JA = {} -- Can be left empty
sets.precast.JA["Tactical Switch"] = {feet = Empy_Karagoz.Feet_Tatical}
sets.precast.JA["Ventriloquy"] = {legs = Relic_Pitre.Legs_PMagic}
sets.precast.JA["Role Reversal"] = {feet = Relic_Pitre.Feet_PMagic}
sets.precast.JA["Overdrive"] = {body = Relic_Pitre.Body_PTP}
sets.precast.JA["Repair"] = {ear1="Guignol Earring", legs="Foire Babouches"}
sets.precast.JA["Maintenance"] = set_combine(sets.precast.JA["Repair"], {})
sets.precast.JA.Maneuver = {
-- Add your set here
}
sets.precast.JA["Activate"] = { back = "Visucius's Mantle" }
sets.precast.JA["Deus Ex Automata"] = sets.precast.JA["Activate"]
sets.precast.JA["Provoke"] = {
-- Add your set here
}
--Waltz set (chr and vit)
sets.precast.Waltz = {
-- Add your set here
}
sets.precast.Waltz["Healing Waltz"] = {}
-------------------------------------WS
-- Weaponskill sets
-- Default set for any weaponskill that isn't any more specifically defined
sets.precast.WS = {head="Tali'ah Turban +2",neck="Ej Necklace",ear1="Steelflash Earring",ear2="Bladeborn Earring",
body={ name="Herculean Vest", augments={'Accuracy+17 Attack+17','"Triple Atk."+4','AGI+6','Accuracy+8',}},hands="Herculean Gloves",ring1="Rajas Ring",ring2="Epona's Ring",
back= Visucius.MasterDD,waist="Moonbow Belt",
legs="Hizamaru Hizayoroi +2",feet="Herculean Boots"
}
-- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
sets.precast.WS["Stringing Pummel"] = set_combine( sets.precast.WS, {neck="Rancor Collar",ear1="Brutal Earring",ear2="Moonshade Earring"
}
)
sets.precast.WS["Stringing Pummel"].Mod = set_combine(sets.precast.WS, {
-- Add armor here specific to the weapon skill not included in the sets.precast.WS
}
)
sets.precast.WS["Victory Smite"] = set_combine( sets.precast.WS, {neck="Rancor Collar",ear1="Brutal Earring",ear2="Moonshade Earring",
}
)
sets.precast.WS["Shijin Spiral"] = set_combine( sets.precast.WS, {ear1="Brutal Earring",ear2="Moonshade Earring"
}
)
sets.precast.WS["Howling Fist"] = set_combine( sets.precast.WS, {ear2="Moonshade Earring", neck="Thunder Gorget", waist="Thunder Belt"
}
)
-------------------------------------Idle
--[[
Pet is not active
Idle Mode = MasterDT
]]
sets.idle.MasterDT = {head="Tali'ah Turban +2",neck="Twilight Torque",ear1="Steelflash Earring",ear2="Bladeborn Earring",
body="Tali'ah Manteel +2",hands="Tali'ah Gages +1",ring1="Defending Ring",ring2="Epona's Ring",
back= Visucius.MPetDD,
waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Herculean Boots"
}
-------------------------------------Engaged
--[[
Offense Mode = Master
Hybrid Mode = Normal
]]
sets.engaged.Master = {head="Tali'ah Turban +2",neck="Ej Necklace",ear1="Steelflash Earring",ear2="Bladeborn Earring",
body={ name="Herculean Vest", augments={'Accuracy+17 Attack+17','"Triple Atk."+4','AGI+6','Accuracy+8',}},hands="Herculean Gloves",ring1="Varar Ring +1",ring2="Epona's Ring",
back= Visucius.MasterDD,waist="Moonbow Belt",legs="Hizamaru Hizayoroi +2",feet="Herculean Boots"
}
-------------------------------------Acc
--[[
Offense Mode = Master
Hybrid Mode = Acc
]]
sets.engaged.Master.Acc = {head="Tali'ah Turban +2",neck="Ej Necklace",ear1="Steelflash Earring",ear2="Bladeborn Earring",
body="Tali'ah Manteel +2",hands="Tali'ah Gages +1",ring1="Varar Ring +1",ring2="Epona's Ring",
back= Visucius.MasterDD,waist="Moonbow Belt",legs="Hizamaru Hizayoroi +2",feet="Herculean Boots"
}
-------------------------------------TP
--[[
Offense Mode = Master
Hybrid Mode = TP
]]
sets.engaged.Master.TP = {head="Tali'ah Turban +2",neck="Twilight Torque",ear1="Steelflash Earring",ear2="Bladeborn Earring",
body={ name="Herculean Vest", augments={'Accuracy+17 Attack+17','"Triple Atk."+4','AGI+6','Accuracy+8',}},hands="Herculean Gloves",ring1="Defending Ring",ring2="Epona's Ring",
back= Visucius.MasterDD,waist="Moonbow Belt",legs="Hizamaru Hizayoroi +2",feet="Herculean Boots"
}
-------------------------------------DT
--[[
Offense Mode = Master
Hybrid Mode = DT
]]
sets.engaged.Master.DT = {head="Tali'ah Turban +2",neck="Twilight Torque",ear1="Steelflash Earring",ear2="Bladeborn Earring",
body={ name="Herculean Vest", augments={'Accuracy+17 Attack+17','"Triple Atk."+4','AGI+6','Accuracy+8',}},hands="Herculean Gloves",ring1="Defending Ring",ring2="Beeline Ring",
back= Visucius.MasterDD,waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Herculean Boots"
}
----------------------------------------------------------------------------------
-- __ __ _ ___ _ ___ _
-- | \/ |__ _ __| |_ ___ _ _| _ \___| |_ / __| ___| |_ ___
-- | |\/| / _` (_-< _/ -_) '_| _/ -_) _| \__ \/ -_) _(_-<
-- |_| |_\__,_/__/\__\___|_| |_| \___|\__| |___/\___|\__/__/
-----------------------------------------------------------------------------------
--[[
These sets are designed to be a hybrid of player and pet gear for when you are
fighting along side your pet. Basically gear used here should benefit both the player
and the pet.
]]
--[[
Offense Mode = MasterPet
Hybrid Mode = Normal
]]
sets.engaged.MasterPet = {head="Tali'ah Turban +2",neck="Ej Necklace",ear1="Steelflash Earring",ear2="Bladeborn Earring",
body="Tali'ah Manteel +2",hands="Tali'ah Gages +1",ring1="Varar Ring +1",ring2="Epona's Ring",
back= Visucius.MPetDD,
waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Tali'ah Crackows +1"
}
-------------------------------------Acc
--[[
Offense Mode = MasterPet
Hybrid Mode = Acc
]]
sets.engaged.MasterPet.Acc = {head="Tali'ah Turban +2",neck="Ej Necklace",ear1="Steelflash Earring",ear2="Bladeborn Earring",
body="Tali'ah Manteel +2",hands="Tali'ah Gages +1",ring1="Varar Ring +1",ring2="Epona's Ring",
back= Visucius.MPetDD,
waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Tali'ah Crackows +1"
}
-------------------------------------TP
--[[
Offense Mode = MasterPet
Hybrid Mode = TP
]]
sets.engaged.MasterPet.TP = {head="Tali'ah Turban +2",neck="Twilight Torque",ear1="Steelflash Earring",ear2="Bladeborn Earring",
body="Tali'ah Manteel +2",hands="Tali'ah Gages +1",ring1="Defending Ring",ring2="Epona's Ring",
back= Visucius.MPetDD,
waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Tali'ah Crackows +1"
}
-------------------------------------DT
--[[
Offense Mode = MasterPet
Hybrid Mode = DT
]]
sets.engaged.MasterPet.DT = {head="Anwig Salade",neck="Twilight Torque",ear1="Steelflash Earring",ear2="Bladeborn Earring",
body="Tali'ah Manteel +2",hands="Rao Kote +1",ring1="Defending Ring",ring2="Beeline Ring",
back= Visucius.MPetDD,
waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Tali'ah Crackows +1"
}
-------------------------------------Regen
--[[
Offense Mode = MasterPet
Hybrid Mode = Regen
]]
sets.engaged.MasterPet.Regen = {
-- Add your set here
}
----------------------------------------------------------------
-- _____ _ ____ _ _____ _
-- | __ \ | | / __ \ | | / ____| | |
-- | |__) |__| |_ | | | |_ __ | |_ _ | (___ ___| |_ ___
-- | ___/ _ \ __| | | | | '_ \| | | | | \___ \ / _ \ __/ __|
-- | | | __/ |_ | |__| | | | | | |_| | ____) | __/ |_\__ \
-- |_| \___|\__| \____/|_| |_|_|\__, | |_____/ \___|\__|___/
-- __/ |
-- |___/
----------------------------------------------------------------
-------------------------------------Magic Midcast
sets.midcast.Pet = {
-- Add your set here
}
sets.midcast.Pet.Cure = {
-- Add your set here
}
sets.midcast.Pet["Healing Magic"] = {
--Add your set here
}
sets.midcast.Pet["Elemental Magic"] = {
-- Add your set here
}
sets.midcast.Pet["Enfeebling Magic"] = {
-- Add your set here
}
sets.midcast.Pet["Dark Magic"] = {
-- Add your set here
}
sets.midcast.Pet["Divine Magic"] = {
-- Add your set here
}
sets.midcast.Pet["Enhancing Magic"] = {
-- Add your set here
}
-------------------------------------Idle
--[[
This set will become default Idle Set when the Pet is Active
and sets.idle will be ignored
Player = Idle and not fighting
Pet = Idle and not fighting
Idle Mode = Idle
]]
sets.idle.Pet = {head="Tali'ah Turban +2",neck="Twilight Torque",ear1="Steelflash Earring",ear2="Bladeborn Earring",
body="Tali'ah Manteel +2",hands="Tali'ah Gages +1",ring1="Varar Ring +1",ring2="Epona's Ring",
back= Visucius.MPetDD,
waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Hermes Sandles"
}
--[[
If pet is active and you are idle and pet is idle
Player = idle and not fighting
Pet = idle and not fighting
Idle Mode = MasterDT
]]
sets.idle.Pet.MasterDT = {head="Anwig Salade",neck="Twilight Torque",ear1="Steelflash Earring",ear2="Bladeborn Earring",
body="Tali'ah Manteel +2",hands="Rao Kote +1",ring1="Varar Ring +1",ring2="Thurandaut Ring",
back= Visucius.MPetDD,
waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Tali'ah Crackows +1"
}
-------------------------------------Enmity
sets.pet = {} -- Not Used
--Equipped automatically
sets.pet.Enmity = {
--Add your set here
}
--[[
Activated by Alt+D or
F10 if Physical Defense Mode = PetDT
]]
sets.pet.EmergencyDT = {
--Add your set here
}
-------------------------------------Engaged for Pet Only
--[[
For Technical Users - This is layout of below
sets.idle[idleScope][state.IdleMode][ Pet[Engaged] ][CustomIdleGroups]
For Non-Technical Users:
If you the player is not fighting and your pet is fighting the first set that will activate is sets.idle.Pet.Engaged
You can further adjust this by changing the HyrbidMode using Ctrl+F9 to activate the Acc/TP/DT/Regen/Ranged sets
]]
--[[
Idle Mode = Idle
Hybrid Mode = Normal
]]
sets.idle.Pet.Engaged = {head="Anwig Salade",neck="Twilight Torque",ear1="Handler's Earring +1",ear2="Handler's Earring",
body="Tali'ah Manteel +2",hands="Rao Kote +1",ring1="Varar Ring +1",ring2="Epona's Ring",
back= Visucius.MPetDD,
waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Tali'ah Crackows +1"
}
--[[
Idle Mode = Idle
Hybrid Mode = Acc
]]
sets.idle.Pet.Engaged.Acc = {head="Tali'ah Turban +2",neck="Twilight Torque",ear1="Handler's Earring +1",ear2="Handler's Earring",
body="Tali'ah Manteel +2",hands="Tali'ah Gages +1",ring1="Varar Ring +1",ring2="Epona's Ring",
back= Visucius.MPetDD,
waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Tali'ah Crackows +1"
}
--[[
Idle Mode = Idle
Hybrid Mode = TP
]]
sets.idle.Pet.Engaged.TP = {head="Tali'ah Turban +2",neck="Twilight Torque",ear1="Handler's Earring +1",ear2="Handler's Earring",
body="Tali'ah Manteel +2",hands="Rao Kote +1",ring1="Varar Ring +1",ring2="Epona's Ring",
back= Visucius.MPetDD,
waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Tali'ah Crackows +1"
}
--[[
Idle Mode = Idle
Hybrid Mode = DT
]]
sets.idle.Pet.Engaged.DT = {head="Anwig Salade",neck="Twilight Torque",ear1="Handler's Earring +1",ear2="Handler's Earring",
body="Foire Tobe +2",hands="Rao Kote +1",ring1="Varar Ring +1",ring2="Thurandaut Ring",
back= Visucius.MPetDD,
waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Rao Sune-Ate +1"
}
--[[
Idle Mode = Idle
Hybrid Mode = Regen
]]
sets.idle.Pet.Engaged.Regen = {head="Anwig Salade",neck="Twilight Torque",ear1="Handler's Earring +1",ear2="Handler's Earring",
body="Foire Tobe +2",hands="Rao Kote +1",ring1="Varar Ring +1",ring2="Thurandaut Ring",
back= Visucius.MPetDD,
waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Rao Sune-Ate +1"
}
--[[
Idle Mode = Idle
Hybrid Mode = Ranged
]]
sets.idle.Pet.Engaged.Ranged = set_combine(sets.idle.Pet.Engaged, {
legs = Empy_Karagoz.Legs_Combat
})
-------------------------------------WS
--[[
WSNoFTP is the default weaponskill set used
]]
sets.midcast.Pet.WSNoFTP = {head="Tali'ah Turban +2", hands="Tali'ah Gages +1", legs="Tali'ah Seraweels +1",
back= Visucius.MPetDD
}
--[[
If we have a pet weaponskill that can benefit from WSFTP
then this set will be equipped
]]
sets.midcast.Pet.WSFTP = {
-- Add your set here
}
--[[
Base Weapon Skill Set
Used by default if no modifier is found
]]
sets.midcast.Pet.WS = {}
--Chimera Ripper, String Clipper
sets.midcast.Pet.WS["STR"] = set_combine(sets.midcast.Pet.WSNoFTP, {
-- Add your gear here that would be different from sets.midcast.Pet.WSNoFTP
})
-- Bone crusher, String Shredder
sets.midcast.Pet.WS["VIT"] =
set_combine(sets.midcast.Pet.WSNoFTP, {
-- Add your gear here that would be different from sets.midcast.Pet.WSNoFTP
head = Empy_Karagoz.Head_PTPBonus, waist = "Incarnation Sash"
})
-- Cannibal Blade
sets.midcast.Pet.WS["MND"] = set_combine(sets.midcast.Pet.WSNoFTP, {
-- Add your gear here that would be different from sets.midcast.Pet.WSNoFTP
})
-- Armor Piercer, Armor Shatterer
sets.midcast.Pet.WS["DEX"] = set_combine(sets.midcast.Pet.WSNoFTP, {
-- Add your gear here that would be different from sets.midcast.Pet.WSNoFTP
})
-- Arcuballista, Daze
sets.midcast.Pet.WS["DEXFTP"] =
set_combine(sets.midcast.Pet.WSFTP, {
-- Add your gear here that would be different from sets.midcast.Pet.WSFTP
head = Empy_Karagoz.Head_PTPBonus, back = "Dispersal Mantle"
})
---------------------------------------------
-- __ __ _ _____ _
-- | \/ (_) / ____| | |
-- | \ / |_ ___ ___ | (___ ___| |_ ___
-- | |\/| | / __|/ __| \___ \ / _ \ __/ __|
-- | | | | \__ \ (__ ____) | __/ |_\__ \
-- |_| |_|_|___/\___| |_____/ \___|\__|___/
---------------------------------------------
-- Town Set
sets.idle.Town = {range="Animator P +1",
head="Tali'ah Turban +2",neck="Twilight Torque",ear1="Steelflash Earring",ear2="Bladeborn Earring",
body="Tali'ah Manteel +2",hands="Tali'ah Gages +1",ring1="Varar Ring +1",ring2="Epona's Ring",
back="Shadow Mantle",waist="Moonbow Belt",legs="Tali'ah Seraweels +1",feet="Hermes' Sandals"
}
-- Resting sets
sets.resting = {head="Tali'ah Turban +2",neck="Twilight Torque",
ring1="Varar Ring +1",ring2="Epona's Ring"
}
sets.defense.MasterDT = sets.idle.MasterDT
sets.defense.PetDT = sets.pet.EmergencyDT
sets.defense.PetMDT = set_combine(sets.pet.EmergencyDT, {
--Gear added here will overwrite the slots within sets.pet.EmergencyDT
--Any slot not added will use the default slot from sets.pet.EmergencyDT
})
end
-- Select default macro book on initial load or subjob change.
function select_default_macro_book()
-- Default macro set/book
if player.sub_job == "WAR" then
set_macro_page(1, 1)
elseif player.sub_job == "NIN" then
set_macro_page(10, 1)
elseif player.sub_job == "DNC" then
set_macro_page(9, 1)
else
set_macro_page(1, 1)
end
end
------------------------------------------------------------------------------------------------------------------------
--------------------------------- DO NOT EDIT BELOW UNLESS YOU KNOW WHAT YOU ARE DOING ---------------------------------
------------------------------------------------------------------------------------------------------------------------
-------------------------------
--------Global Variables-------
-------------------------------
Current_Maneuver = 0
OverCount = 0
NextWS = ""
Master_State = "Idle"
Pet_State = "Idle"
Hybrid_State = "Idle"
Flashbulb_Timer = 45
Strobe_Timer = 30
Strobe_Recast = 0
Flashbulb_Recast = 0
Flashbulb_Time = 0
Strobe_Time = 0
d_mode = false
time_start = os.time()
--Constants in case we decide to change names down the road, will be much easier
const_dd = "DD"
const_tank = "TANK"
const_mage = "MAGE"
const_PetModeCycle = "PetModeCycle"
const_PetStyleCycle = "PetStyleCycle"
const_stateIdle = "Idle"
const_stateHybrid = "Pet+Master"
const_stateEngaged = "Engaged"
const_stateOverdrive = "Overdrive"
const_petOnly = "Pet Only"
const_masterOnly = "Master Only"
--- SKILLCHAIN TABLE
SC = {}
SC["Valoredge Frame"] = {}
SC["Sharpshot Frame"] = {}
SC["Harlequin Frame"] = {}
SC["Stormwaker Frame"] = {}
SC["Valoredge Frame"]["Stringing Pummel"] = "String Shredder"
SC["Valoredge Frame"]["Victory Smite"] = "String Shredder"
SC["Valoredge Frame"]["Shijin Spiral"] = "Bone Crusher"
SC["Valoredge Frame"]["Howling Fist"] = "String Shredder"
SC["Sharpshot Frame"]["Stringing Pummel"] = "Armor Shatterer"
SC["Sharpshot Frame"]["Victory Smite"] = "Armor Shatterer"
SC["Sharpshot Frame"]["Shijin Spiral"] = "Armor Piercer"
SC["Sharpshot Frame"]["Howling Fist"] = "Arcuballista"
SC["Sharpshot Frame"]["Dragon Kick"] = "Armor Shatterer"
SC["Sharpshot Frame"]["One Inch Punch"] = "Daze"
SC["Sharpshot Frame"]["Spinning Attack"] = "Armor Shatterer"
SC["Sharpshot Frame"]["Base"] = "Arcuballista"
SC["Harlequin Frame"]["Stringing Pummel"] = "Slapstick"
SC["Harlequin Frame"]["Victory Smite"] = "Magic Mortar"
SC["Harlequin Frame"]["Shijin Spiral"] = "Slapstick"
SC["Harlequin Frame"]["Howling Fist"] = "Knockout"
SC["Stormwaker Frame"]["Stringing Pummel"] = "Slapstick"
SC["Stormwaker Frame"]["Victory Smite"] = "Magic Mortar"
SC["Stormwaker Frame"]["Shijin Spiral"] = "Slapstick"
SC["Stormwaker Frame"]["Howling Fist"] = "Knockout"
------------------------------------
------------Text Window-------------
------------------------------------
--Default To Set Up the Text Window
function setupTextWindow(pos_x, pos_y)
tb_name = "pup_gs_helper"
bg_visible = false
textinbox = " "
windower.text.create(tb_name)
-- table_name, x, y
windower.text.set_location(tb_name, pos_x, pos_y)
-- transparency, rgb
windower.text.set_bg_color(tb_name, 200, 40, 40, 55)
windower.text.set_color(tb_name, 255, 147, 161, 161)
windower.text.set_font(tb_name, "Arial")
windower.text.set_font_size(tb_name, 8)
windower.text.set_bold(tb_name, true)
windower.text.set_italic(tb_name, false)
windower.text.set_text(tb_name, textinbox)
windower.text.set_bg_visibility(tb_name, bg_visible)
windower.text.set_visibility(tb_name, true)
end
--Hanldles refreshing the current text window
function refreshWindow()
textinbox = " "
textColorNewLine = "\\cr \n"
textColorEnd = " \\cr"
textColor = "\\cs(125, 125, 0)"
--Testing with this variable can ignore for now, works as intended
test = state.textHideHUB.value
if state.textHideHUB.value == true then
textinbox = ''
windower.text.set_text(tb_name, textinbox)
return
end
if pet.isvalid then
drawPetInfo()
drawPetSkills()
end
if not state.textHideState.value then
textinbox = textinbox .. drawTitle(" State ")
textinbox = textinbox .. textColor .. "Pet Mode " .. ternary(state.Keybinds.value, "(ALT+F7)", "") .. " : " .. state.PetModeCycle.value .. textColorNewLine
textinbox = textinbox .. textColor .. "Pet Style " .. ternary(state.Keybinds.value, "(ALT+F8)", "") .. " : " .. state.PetStyleCycle.value .. textColorNewLine
-- textinbox = textinbox .. textColor .. "Master : " .. Master_State .. textColorNewLine
-- textinbox = textinbox .. textColor .. "Pet : " .. Pet_State .. textColorNewLine
textinbox = textinbox .. textColor .. "Hybrid : " .. Hybrid_State .. textColorNewLine
end
if not state.textHideMode.value then
textinbox = textinbox .. drawTitle(" Mode ")
textinbox = textinbox .. textColor .. "Idle Mode " .. ternary(state.Keybinds.value, "(CTRL+F12)", "") .. " : " .. tostring(state.IdleMode.current) .. textColorNewLine
textinbox = textinbox .. textColor .. "Offense Mode " .. ternary(state.Keybinds.value, "(F9)", "") .. " : " .. tostring(state.OffenseMode.current) .. textColorNewLine
textinbox = textinbox .. textColor .. "Physical Mode " .. ternary(state.Keybinds.value, "(CTRL-F10)", "") .. " : " .. tostring(state.PhysicalDefenseMode.current) .. textColorNewLine
textinbox = textinbox .. textColor .. "Hybrid Mode " .. ternary(state.Keybinds.value, "(CTRL-F9)", "") .. " : " .. tostring(state.HybridMode.current) .. textColorNewLine
end
if not state.textHideOptions.value then
textinbox = textinbox .. drawTitle(" Options ")
textinbox =
textinbox .. textColor .. "Auto Maneuver " .. ternary(state.Keybinds.value, "(ALT+E)", "") .. " : " .. ternary(state.AutoMan.value, "ON", "OFF") .. textColorNewLine
textinbox = textinbox .. textColor .. "Lock Pet DT Set " .. ternary(state.Keybinds.value, "(ALT+D)", "") .. " : " .. ternary(state.LockPetDT.value, "ON", "OFF") .. textColorNewLine
textinbox = textinbox .. textColor .. "Lock Weapon " .. ternary(state.Keybinds.value, "(ALT+~)", "") .. " : " .. ternary(state.LockWeapon.value, "ON", "OFF") .. textColorNewLine
textinbox = textinbox .. textColor .. "Weaponskill FTP: " .. ternary(state.SetFTP.value, "ON", "OFF") .. textColorNewLine
textinbox = textinbox .. textColor .. "Custom Gear Lock: " .. ternary(state.CustomGearLock.value, "ON", "OFF") .. textColorNewLine
end
--Debug Variables that are used for testing
if d_mode then
textinbox = textinbox .. drawTitle("DEBUG")
textinbox = textinbox .. textColor .. "Last State : " .. tostring(lastStateActivated) .. textColorNewLine
textinbox = textinbox .. textColor .. "Last State : " .. ternary(justFinishedWeaponSkill, "TRUE", "FALSE") .. textColorNewLine
textinbox = textinbox .. textColor .. "Master State : " .. Master_State .. textColorNewLine
textinbox = textinbox .. textColor .. "Pet State : " .. Pet_State .. textColorNewLine
end
windower.text.set_text(tb_name, textinbox)
end
--Handles drawing the Pet Info for the Text Box
function drawPetInfo()
textinbox = textinbox .. drawTitle(" Pet Info ")
textinbox = textinbox .. "- \\cs(0, 0, 125)HP : " .. pet.hp .. "/" .. pet.max_hp .. textColorNewLine
textinbox = textinbox .. "- \\cs(0, 125, 0)MP : " .. pet.mp .. "/" .. pet.max_mp .. textColorNewLine
textinbox = textinbox .. "- \\cs(255, 0, 0)TP : " .. tostring(pet.tp) ..textColorNewLine
textinbox = textinbox .. "- \\cs(255, 0, 0)WS Gear Lock : " .. ternary(startedPetWeaponSkillTimer and petWeaponSkillRecast <= 0 , "On", "Off") .. " ( " .. petWeaponSkillRecast .. " )" ..textColorNewLine
end
--This handles drawing the Pet Skills for the text box
function drawPetSkills()
--- Recast for enmity gears
textinbox = textinbox .. drawTitle(" Pet Skills ")
-- Strobe recast
if Strobe_Recast == 0 and (pet.attachments.strobe or pet.attachments["strobe II"]) then
if buffactive["Fire Maneuver"] then
textinbox = textinbox .. "\\cs(125, 125, 125)-\\cr \\cs(125,0,0)Strobe\\cr \n"
else
textinbox = textinbox .. "\\cs(125, 125, 125)- Strobe\\cr \n"
end
elseif pet.attachments.strobe or pet.attachments["strobe II"] then
textinbox = textinbox .. "\\cs(125, 125, 125)- Strobe (" .. Strobe_Recast .. ")\\cr \n"
end
-- Flashbulb recast
if Flashbulb_Recast == 0 and pet.attachments.flashbulb then
if buffactive["Light Maneuver"] then
textinbox = textinbox .. "\\cs(125, 125, 125)-\\cr \\cs(255,255,255)Flashbulb\\cr \n"
else
textinbox = textinbox .. "\\cs(125, 125, 125)- Flashbulb\\cr \n"
end
elseif pet.attachments.flashbulb ~= nil then
textinbox = textinbox .. "\\cs(125, 125, 125)- Flashbulb (" .. Flashbulb_Recast .. ")\\cr \n"
end
if not pet.attachments.strobe and not pet.attachments["strobe II"] and not pet.attachments.flashbulb then
textinbox = textinbox .. "\\cs(125, 125, 125)-No Skills To Track\\cr \n"
end
end
--Creates the Title for a section in the Text Screen
function drawTitle(title)
return "\\cs(255, 115, 0)" .. pad(tostring(title), 6, "=") .. "\\cr \n"
end
function msg(str)
send_command("@input /echo *-*-*-*-*-*-*-*-* " .. str .. " *-*-*-*-*-*-*-*-*")
end
------------------------------------
----------Utility Functions---------
------------------------------------
--Used to calculate the Hybrid State of you and your pet
function TotalSCalc()
if state.PetModeCycle.current == const_dd then
if buffactive["Overdrive"] then
Hybrid_State = const_stateOverdrive
elseif Master_State == const_stateIdle and Pet_State == const_stateIdle then
Hybrid_State = const_stateIdle
elseif Master_State == const_stateIdle and Pet_State == const_stateEngaged then
Hybrid_State = const_petOnly
elseif Master_State == const_stateEngaged and Pet_State == const_stateEngaged then
Hybrid_State = const_stateHybrid
elseif Master_State == const_stateEngaged and Pet_State == const_stateIdle then
Hybrid_State = const_masterOnly
end
elseif state.PetModeCycle.current == const_tank then
if Pet_State == const_stateIdle then
Hybrid_State = const_stateIdle
elseif state.PetStyleCycle.value ~= "DD" and state.PetStyleCycle.value ~= 'SPAM' then
Hybrid_State = const_tank
handle_set({'IdleMode', 'Idle'})
handle_set({'HybridMode', 'DT'})
end
elseif state.PetModeCycle.current == const_mage then
if Master_State == const_stateIdle then
Hybrid_State = const_stateIdle
else
Hybrid_State = const_masterOnly
handle_set({"OffenseMode", 'Master'})
end
end
end
--Attempts to determine the Puppet Mode and Style
function determinePuppetType()
local head = pet.head
local frame = pet.frame
local ValHead = "Valoredge Head"
local ValFrame = "Valoredge Frame"
local HarHead = "Harlequin Head"
local HarFrame = "Harlequin Frame"
local SharpHead = "Sharpshot Head"
local SharpFrame = "Sharpshot Frame"
local StormHead = "Stormwaker Head"
local StormFrame = "Stormwaker Frame"
local SoulHead = "Soulsoother Head"
local SpiritHead = "Spiritreaver Head"
--This is based mostly off of the frames from String Theory
--https://www.bg-wiki.com/bg/String_Theory#Automaton_Frame_Setups
--Determine Head first, then further determine by body and attachments
if head == HarHead then --Harlequin Predictions
if frame == HarFrame and (pet.attachments.strobe == true or pet.attachments.flashbulb == true) then --Magic Tank
handle_set({const_PetModeCycle, const_tank})
handle_set({const_PetStyleCycle, "MAGIC"})
elseif frame == HarFrame then -- Default
handle_set({const_PetModeCycle, const_dd})
handle_set({const_PetStyleCycle, "NORMAL"})
else
msg("Unable to determine Mode/Style for Puppet Head: (" .. head .. ") Puppet Frame: (" .. frame .. ")")
end
elseif head == ValHead then --Valoredge Predictions
if frame == SharpFrame then
if (pet.attachments.strobe == true or pet.attachments.flashbulb == true) then -- DD Tank
handle_set({const_PetModeCycle, const_tank})
handle_set({const_PetStyleCycle, const_dd})
else -- Default
handle_set({const_PetModeCycle, const_dd})
handle_set({const_PetStyleCycle, "NORMAL"})
end
elseif frame == ValFrame then -- Default Standard Tank
handle_set({const_PetModeCycle, const_tank})
handle_set({const_PetStyleCycle, "NORMAL"})
else
msg("Unable to determine Mode/Style for Puppet Head: (" .. head .. ") Puppet Frame: (" .. frame .. ")")
end
elseif head == SharpHead then -- Sharpshooter Prediction
if frame == SharpFrame then -- SPAM DD
if (pet.attachments.inhibitor == true or pet.attachments["inhibitor II"] == true) then
handle_set({const_PetModeCycle, const_dd})
handle_set({const_PetStyleCycle, "NORMAL"})
else
handle_set({const_PetModeCycle, const_dd})
handle_set({const_PetStyleCycle, "SPAM"})
end
else
msg("Unable to determine Mode/Style for Puppet Head: (" .. head .. ") Puppet Frame: (" .. frame .. ")")
end
elseif head == StormHead then --Stormwaker Prediction
if frame == StormFrame then -- RDM
handle_set({const_PetModeCycle, const_mage})
handle_set({const_PetStyleCycle, "SUPPORT"})
else
msg("Unable to determine Mode/Style for Puppet Head: (" .. head .. ") Puppet Frame: (" .. frame .. ")")
end
elseif head == SoulHead then -- Soulsoother Prediction
if frame == StormFrame then -- WHM
handle_set({const_PetModeCycle, const_mage})
handle_set({const_PetStyleCycle, "HEAL"})
elseif frame == ValFrame then -- Turtle Tank
handle_set({const_PetModeCycle, const_tank})
handle_set({const_PetStyleCycle, "NORMAL"})
else
msg("Unable to determine Mode/Style for Puppet Head: (" .. head .. ") Puppet Frame: (" .. frame .. ")")
end
elseif head == SpiritHead then -- Spiritweaver Prediction
if frame == StormFrame then -- BLM
handle_set({const_PetModeCycle, const_mage})
handle_set({const_PetStyleCycle, const_dd})
else
msg("Unable to determine Mode/Style for Puppet Head: (" .. head .. ") Puppet Frame: (" .. frame .. ")")
end
end
end
--Various Timers that get reset when you zone
function reset_timers()
state.AutoMan:reset()
Current_Maneuver = 0
refreshWindow()
end
--Traverses a table to see if it contains the given element
function table.contains(table, element)
for _, value in pairs(table) do
if string.lower(value) == string.lower(element) then
return true
end
end
return false
end
--Pads a given chara on both sides (centering with left justification)
function pad(s, l, c)
local srep = string.rep
local c = c or " "
local res1 = srep(c, l) .. s -- pad to half-length s
local res2 = res1 .. srep(c, l) -- right-pad our left-padded string to the full length
return res2
end
--Takes a condition and returns a given value based on if it is true or false
function ternary(cond, T, F)
if cond then
return T
else
return F
end
end
----------------------------------------------------
----------Windower Hooks/Custom Gearswap------------
----------------------------------------------------
function user_customize_idle_set(idleSet)
--Custom Idle Group when Pet is Engaged and Master is Idle
if Master_State:lower() == const_stateIdle:lower() and Pet_State:lower() == const_stateEngaged:lower() then
if state.HybridMode.current == "Normal" then
return idleSet
else
idleSet = sets.idle.Pet.Engaged[state.HybridMode.current]
return idleSet
end
else
return idleSet
end
end
function job_precast(spell, action, spellMap, eventArgs)
if spell.english == "Activate" or spell.english == "Deus Ex Automata" then
TotalSCalc()
determinePuppetType()
elseif string.find(spell.english, "Maneuver") then
equip(sets.precast.JA.Maneuver)
elseif sets.precast.JA[spell.english] then
equip(sets.precast.JA[spell.english])
elseif sets.precast.WS[spell.english] then
equip(sets.precast.WS[spell.english])
elseif pet.isvalid then
if spell.english == "Deploy" and pet.tp >= 950 then
equip(sets.midcast.Pet.WSNoFTP)
eventArgs.handled = true
end
end
end
function job_midcast(spell, action, spellMap, eventArgs)
end
--Puppet Weaponskill Modifiers
Modifier = {}
Modifier["String Shredder"] = "VIT"
Modifier["Bone Crusher"] = "VIT"
Modifier["Armor Shatterer"] = "DEX"
Modifier["Armor Piercer"] = "DEX"
Modifier["Arcuballista"] = "DEXFTP"
Modifier["Daze"] = "DEXFTP"
Modifier["Slapstick"] = "DEX"
Modifier["Knockout"] = "AGI"
function job_aftercast(spell, action, spellMap, eventArgs)
if pet.isvalid then
if SC[pet.frame][spell.english] and pet.tp >= 850 and Pet_State == 'Engaged' then
ws = SC[pet.frame][spell.english]
modif = Modifier[ws]
--If its a valid modif
if modif then
equip(sets.midcast.Pet.WS[modif])
add_to_chat(
392,
"*-*-*-*-*-*-*-*-* [ " .. pet.name .. " is about to " .. ws .. " (" .. modif .. ") ] *-*-*-*-*-*-*-*-*"
)
else --Otherwise equip the default Weapon Skill Set
equip(sets.midcast.Pet.WSNoFTP)
end
--Since this will be a new Weapon Skill we just performed best to reset any current timers
resetWeaponSkillPetTimer()
--Begin the count down until we may lock out the pet weapon skill set
startWeaponSkillPetTimer()
eventArgs.handled = true
else
handle_equipping_gear(player.status, Pet_State)
end
else
handle_equipping_gear(player.status, Pet_State)
end
end
function job_status_change(new, old)
if new == "Engaged" then
Master_State = const_stateEngaged
TotalSCalc()
else
Master_State = const_stateIdle
TotalSCalc()
end
handle_equipping_gear(player.status, Pet_State)
end
function job_pet_status_change(new, old)
if new == "Engaged" then
Pet_State = const_stateEngaged
TotalSCalc()
add_to_chat(392, "*-*-*-*-*-*-*-*-* [ Pet Engaged ] *-*-*-*-*-*-*-*-*")
else
Pet_State = const_stateIdle
TotalSCalc()
add_to_chat(392, "*-*-*-*-*-*-*-*-* [ Pet Idle ] *-*-*-*-*-*-*-*-*")
end
handle_equipping_gear(player.status, Pet_State)
end
AutomatonWeaponSkills = T{"Slapstick", "Knockout", "Magic Mortar", "Chimera Ripper", "String Clipper", "Cannibal Blade", "Bone Crusher", "String Shredder", "Arcuballista", "Daze", "Armor Piercer", "Armor Shatterer"}
function job_pet_aftercast(spell)
if table.contains(AutomatonWeaponSkills, spell.name) then
justFinishedWeaponSkill = true
end
handle_equipping_gear(player.status, pet.status)
end
--Anytime you change equipment you need to set eventArgs.handled or else you may get overwritten
function job_buff_change(status, gain_or_loss, eventArgs)
if status == "sleep" and gain_or_loss then
equip(set_combine(sets.defense.PDT, {neck = "Opo-opo Necklace"}))
eventArgs.handled = true
elseif status == "doom" and gain_or_loss then
send_command("input /p I have befallen to ~~~DOOM~~~ may my end not come to quickly.")
elseif status == "doom" and gain_or_loss == false then
send_command("input /p I have avoided the grips of ~~~DOOM~~~ may Altana be praised! ")
end
--When you are at 3 Maneuvers and you use the ability you will temporarily go to 4
--This helps prevent you from trying to cast on losing a buff
if status:contains("Maneuver") and gain_or_loss then
Current_Maneuver = Current_Maneuver + 1
refreshWindow()
elseif Current_Maneuver > 0 then -- We don't want to see a negative count
Current_Maneuver = Current_Maneuver - 1
refreshWindow()
end
--Now we can turn on and off the functionailty of automatically maintaining manuevers
--Also, make sure your not dead, so we don't attempt to recast Maneuvers
if state.AutoMan.value and player.hp > 0 and pet.isvalid then
if status:contains("Maneuver") and gain_or_loss == false and Current_Maneuver < 3 then
send_command('input /ja "' .. status .. '" <me>')
end
end
if status == const_stateOverdrive then
if gain_or_loss then
OverCount = 1
equip(sets.midcast.Pet.WSFTP)
eventArgs.handled = true
else
OverCount = 0
equip(sets.midcast.Pet.WSNoFTP)
eventArgs.handled = true
end
end
end
-- Toggles -- SE Macros: /console gs c "command"
function job_self_command(command, eventArgs)
if command[1]:lower() == "automan" then
state.AutoMan:toggle()
refreshWindow()
elseif command[1]:lower() == "debug" then
d_mode = not d_mode
debug('Debug Mode is now on!')
refreshWindow()
elseif command[1]:lower() == "predict" then
determinePuppetType()
refreshWindow()
elseif command[1]:lower() == "hide" then
if command[2]:lower() == 'mode' then
state.textHideMode:toggle()
refreshWindow()
elseif command[2]:lower() == 'state' then
state.textHideState:toggle()
refreshWindow()
elseif command[2]:lower() == 'hub' then
state.textHideHUB:toggle()
refreshWindow()
elseif command[2]:lower() == 'keybinds' then
state.Keybinds:toggle()
refreshWindow()
elseif command[2]:lower() == 'options' then
state.textHideOptions:toggle()
refreshWindow()
end
elseif command[1]:lower() == 'setftp' then
state.SetFTP:toggle()
refreshWindow()
elseif command[1]:lower() == 'customgearlock' then
state.CustomGearLock:toggle()
refreshWindow()
end
end
--Defaults
DefaultPetWeaponSkillLockOutTimer = 8 -- This will be the time that is changeable by the player
justFinishedWeaponSkill = false
petWeaponSkillLock = false
startedPetWeaponSkillTimer = false
petWeaponSkillRecast = 0
petWeaponSkillTime = 0
windower.register_event(
"prerender",
function()
--Items we want to check every second
if os.time() > time_start then
time_start = os.time()
if pet.isvalid and player.hpp > 0 then
--Double check current Pet Status and Player Status
--In some cases Mote's doesn't recognize a pet's status change
Pet_State = pet.status
Master_State = player.status
--We only want this to activate if we are actually running the timer for the pet weapon skill
if pet.tp >= 1000 and petWeaponSkillRecast <= 0 and startedPetWeaponSkillTimer == true then
--We have passed the allowed time without the puppet using a weapon skill, locking till next round
petWeaponSkillRecast = 0
petWeaponSkillLock = true
handle_equipping_gear(player.status, pet.status)
elseif pet.tp < 1000 or Pet_State == "Idle" then
resetWeaponSkillPetTimer()
end
end
--This reads if pet is active and
--pet style is SPAM or DD
--Otherwise this is handled for when the player is fighting with pet in job_aftercast
if pet.isvalid and
(state.PetStyleCycle.value:lower() == "spam" or state.PetStyleCycle.value:lower() == "dd")
and Master_State:lower() == "idle" then
--Now if pet has more than 1000 tp and pet is engaged and didn't just finish a weaponskill and we have not locked the pet out this set
if pet.tp >= 1000 and Pet_State == const_stateEngaged and justFinishedWeaponSkill == false and petWeaponSkillLock == false then
if state.SetFTP.value then
equip(set_combine(sets.midcast.Pet.WSFTP,{main="Ohtas"}))
else
equip(set_combine(sets.midcast.Pet.WSFTP,{main="Ohtas"}))
end
startWeaponSkillPetTimer()
end
end
if state.PetModeCycle.value == const_tank and Pet_State == const_stateEngaged then
if buffactive["Fire Maneuver"] and (pet.attachments.strobe or pet.attachments["strobe II"]) then
if Strobe_Recast <= 2 then
equip(sets.pet.Enmity)
end
end
if buffactive["Light Maneuver"] and pet.attachments.flashbulb == true then
if Flashbulb_Recast <= 2 then
equip(sets.pet.Enmity)
end
end
end
if Strobe_Recast > 0 then
Strobe_Recast = Strobe_Timer - (os.time() - Strobe_Time)
end
if Flashbulb_Recast > 0 then
Flashbulb_Recast = Flashbulb_Timer - (os.time() - Flashbulb_Time)
end
if petWeaponSkillRecast > 0 and startedPetWeaponSkillTimer == true then
--Count down the timer if it has started
petWeaponSkillRecast = DefaultPetWeaponSkillLockOutTimer - (os.time() - petWeaponSkillTime)
end
refreshWindow()
end
end
)
function startWeaponSkillPetTimer()
if petWeaponSkillRecast <= 0 and startedPetWeaponSkillTimer == false then
petWeaponSkillRecast = DefaultPetWeaponSkillLockOutTimer
petWeaponSkillTime = os.time()
startedPetWeaponSkillTimer = true
end
end
function resetWeaponSkillPetTimer()
petWeaponSkillRecast = 0
justFinishedWeaponSkill = false
petWeaponSkillLock = false
startedPetWeaponSkillTimer = false
end
windower.register_event(
"incoming text",
function(original, modified, mode)
-- OVERDRIVE OPTIMIZER
--I believe the original intent for this was if the player was not engaged and
--the pet is fighting on its own in Overdrive.
--With that thought this now activates when the master is not engaged
--or if the master is engaged
--and the PetStyleCycle is set to SPAM then it will also activate
if buffactive["Overdrive"] and (Master_State:lower() ~= const_stateEngaged:lower() or state.PetStyleCycle.value:lower() == "spam") then
if original:contains(pet.name) and original:contains("Daze") then
equip(sets.midcast.Pet.WSFTP)
add_to_chat(204, "*-*-*-*-*-*-*-*-* [ " .. "Daze" .. " done ] *-*-*-*-*-*-*-*-*")
OverCount = 2
elseif original:contains(pet.name) and original:contains("Arcuballista") then
equip(sets.midcast.Pet.WSNoFTP)
add_to_chat(204, "*-*-*-*-*-*-*-*-* [ " .. "Arcuballista" .. " done ] *-*-*-*-*-*-*-*-*")
OverCount = 3
elseif original:contains(pet.name) and original:contains("Armor Shatterer") then
equip(sets.midcast.Pet.WSNoFTP)
add_to_chat(204, "*-*-*-*-*-*-*-*-* [ " .. "Armor Shatterer" .. " done ] *-*-*-*-*-*-*-*-*")
OverCount = 4
elseif original:contains(pet.name) and original:contains("Armor Piercer") then
equip(sets.midcast.Pet.WSFTP)
add_to_chat(204, "*-*-*-*-*-*-*-*-* [ " .. "Armor Piercer" .. " done ] *-*-*-*-*-*-*-*-*")
OverCount = 1
end
end
-- Checking timer for enmity sets
if buffactive["Fire Maneuver"] then
if original:contains(pet.name) and original:contains("Provoke") then
add_to_chat(204, "*-*-*-*-*-*-*-*-* [ Strobe done ] *-*-*-*-*-*-*-*-*")
Strobe_Time = os.time()
Strobe_Recast = Strobe_Timer
handle_equipping_gear(player.status, pet.status)
refreshWindow()
end
end
if buffactive["Light Maneuver"] then
if original:contains(pet.name) and original:contains("Flashbulb") then
add_to_chat(204, "*-*-*-*-*-*-*-*-* [ Flashbulb done ] *-*-*-*-*-*-*-*-*")
Flashbulb_Time = os.time()
Flashbulb_Recast = Flashbulb_Timer
handle_equipping_gear(player.status, pet.status)
refreshWindow()
end
end
return modified, mode
end
)
All my Idle sets aside from puppet engaged look to be setup with hermes. I'm sure there's probably something I'm missing.
By Arrchie 2019-03-02 18:12:12
One item I noticed was
sets.idle.Town has feet="Hermes' Sandals"
while the other sets have feet="Hermes Sandles"
Does the ' need to be in both? Or removed?
Server: Shiva
Game: FFXI
Posts: 27982
By Shiva.Spathaian 2019-03-02 21:19:53
One item I noticed was
sets.idle.Town has feet="Hermes' Sandals"
while the other sets have feet="Hermes Sandles"
Does the ' need to be in both? Or removed? That's probably it, along with the even simpler issue that you also pointed out... Sandles intead of sandals... *facepalm*
I'm going back into my hole.
Thanks for the help!
By Pholo 2019-03-08 14:39:20
Thank you for this excellent lua.
Is there any way for defense sets to prevail over pet.engaged sets while master is not engaged and pet is engaged?
By Arrchie 2019-03-11 08:53:25
Thank you for this excellent lua.
Is there any way for defense sets to prevail over pet.engaged sets while master is not engaged and pet is engaged?
If you are wanting Pet Defensive sets, then you would change your Hybrid Mode (CTRL+F9 to cycle) to DT which would activate sets.idle.Pet.Engaged.DT (which means you are idle and your pet is engaged). If you see a move by a mob you know you want to be in a pet defensive set then (ALT+D) will activate the emergency set for your pet which is sets.pet.EmergencyDT. When ALT+D is active it will block all gear swapping till you deactivate with ALT+D again. You can also use (F10) to activate PetDT if the defense mode is set to PetDT. (ALT+F12) to deactivate. This mode would still allow gear swapping to occur.
If you are wanting to activate a DT set on yourself then you would set the Defense Mode to MasterDT (CTRL+F10 to cycle)and then hit (F10) to activate. This mode is more or less designed to be an emergency set, not really one you would want to stay in full time. To clear this you would hit (ALT+F12).
Server: Sylph
Game: FFXI
Posts: 11
By Sylph.Gaspard 2019-03-12 15:12:25
Hi all!
A bit new to this level of complexity in gearswap, and I have a few questions concerning this one!
I've noticed when playing and testing out my sets that when my pet is active and deployed, and I melee along with it, I see in chat log "Idle mode is idle" and it equips my idle set (with regen rings and Hermes sandals... not exactly tp stuff). I've tried to change that with ctrl+f12 which puts it at MasterDT, but while it seems to work when cycling, it goes back to Idle mode is idle and equipping my idle set whem I engage a mob along with my pet.
Also, and not related, is there anyone else having issues with aftercast? For example, when doing a maneuver, I stay in my overload - gear and not requipping my melee tp set.
Possible I am overlooking stuff, but since I am not making any sense of this alone, figured I'd ask!
Shiva.Funf
Server: Shiva
Game: FFXI
Posts: 73
By Shiva.Funf 2019-03-12 17:28:06
id jump in the discord channel and ask there, u will get a faster response
By Arrchie 2019-03-13 08:48:54
Hi all!
A bit new to this level of complexity in gearswap, and I have a few questions concerning this one!
I've noticed when playing and testing out my sets that when my pet is active and deployed, and I melee along with it, I see in chat log "Idle mode is idle" and it equips my idle set (with regen rings and Hermes sandals... not exactly tp stuff). I've tried to change that with ctrl+f12 which puts it at MasterDT, but while it seems to work when cycling, it goes back to Idle mode is idle and equipping my idle set whem I engage a mob along with my pet.
Also, and not related, is there anyone else having issues with aftercast? For example, when doing a maneuver, I stay in my overload - gear and not requipping my melee tp set.
Possible I am overlooking stuff, but since I am not making any sense of this alone, figured I'd ask!
Greetings!
No worries, this gearswap has a bit of learning curve to it, but with the many options we have as a Puppetmaster this is flexible enough to cover any basis you would want.
For fighting alongside your pet, you want to make sure you are in OffenseMode MasterPet and this will then activate the base set sets.engaged.MasterPet. If you want to be in TP set then its OffenseMode(F9 to cycle) MasterPet and Hybrid Mode(CTRL+F9 to cycle) TP this then uses the set sets.engaged.MasterPet.TP.
For pet only sets you would use the sets.idle.Pet.Engaged. This means you the player is idle and the puppet is engaged. Also, this again will let you cycle through the Hybrid Mode(CTRL+F9) to access the other sets like TP (sets.idle.Pet.Engaged.TP).
If you are not switching out of the Aftercast gear then you may not have the set defined you are trying to go back into. Which sounds like sets.engaged.MasterPet may not be set up for you.
As Funf said, feel free to join our discord (invite on the first post) usually someone is available to help out. I try to check back here on the forums when I can, but usually more available on discord (unless I'm sleeping of course lol).
Necro Bump Detected!
[47 days between previous and next post]
By Phildo8506 2019-04-29 18:59:37
I've got a bit of an issue I can't figure out also.
The situation is master and mage DD engaged. With the prediction, it correctly sets Master mode when I am engaged with mage pup. I only have an elemental spell set listed in the lua. When I engage, chat log message says that I am in Master only mode and has the correct master tp gear set, and it correctly swaps to my WS gear also when WSing. The problem is it does not swap to pet mage gear when using elemental spells. I tried copying that elemental spell set into the top set for the base mage casting gear and it then did change to the mage gear when it casted, but then never changed back to my tp gear when finished. I've not tested it with only pet engaged, but that's not a huge deal as I can just stay in elemental gear the whole time in that case.
Edit: I wanted to add that after trying to play around with it more. I decided to plug in my master only tp gear to the hybrid regen set, then set it as MasterPet with Hybrid regen set so that I could tp in my master only gear with mage pup and have the lua swap in the correct casting gear. It worked... until the next mob when I engaged and it automatically set me back into MasterOnly, and I had to cycle through all of the hybrid sets to get it back to HybridRegen set.
Can I lock this somehow, or get it to stop changing me from MasterPet to Master every time I engage a new mob?
By Arrchie 2019-05-01 08:31:03
I've got a bit of an issue I can't figure out also.
The situation is master and mage DD engaged. With the prediction, it correctly sets Master mode when I am engaged with mage pup. I only have an elemental spell set listed in the lua. When I engage, chat log message says that I am in Master only mode and has the correct master tp gear set, and it correctly swaps to my WS gear also when WSing. The problem is it does not swap to pet mage gear when using elemental spells. I tried copying that elemental spell set into the top set for the base mage casting gear and it then did change to the mage gear when it casted, but then never changed back to my tp gear when finished. I've not tested it with only pet engaged, but that's not a huge deal as I can just stay in elemental gear the whole time in that case.
Edit: I wanted to add that after trying to play around with it more. I decided to plug in my master only tp gear to the hybrid regen set, then set it as MasterPet with Hybrid regen set so that I could tp in my master only gear with mage pup and have the lua swap in the correct casting gear. It worked... until the next mob when I engaged and it automatically set me back into MasterOnly, and I had to cycle through all of the hybrid sets to get it back to HybridRegen set.
Can I lock this somehow, or get it to stop changing me from MasterPet to Master every time I engage a new mob?
For those interested, a discussion is happening on GitHub https://github.com/atperry7/pup_gearswap/issues/10
Also, the development version ( https://github.com/atperry7/pup_gearswap/tree/development ) that is being tested right now contains an updated UI window that is draggable (does not save that location at this time). A few have also requested an Auto-Deploy feature, which when you engage or switch targets while you have this turned on it will attempt to deploy your puppet on the mob you are currently fighting. Another feature, on by default in development, is the ability to log your puppets damage into a text file. It tracks TP, multi-hits, etc... Nothing too crazy, I simply wanted an easier way to track and go back later to see this information. Some plans for this, but nothing set in stone at this time.
Server: Asura
Game: FFXI
Posts: 496
By Asura.Elizabet 2019-05-07 11:44:35
Line 1305: Looks like else condition is a copy pasta bug? Should be sets.midcast.Pet.WSNoFTP Code
if pet.tp >= 1000 and Pet_State == const_stateEngaged and justFinishedWeaponSkill == false and petWeaponSkillLock == false then
if state.SetFTP.value then
equip(set_combine(sets.midcast.Pet.WSFTP,{main="Ohtas"}))
else
equip(set_combine(sets.midcast.Pet.WSFTP,{main="Ohtas"}))
end
startWeaponSkillPetTimer()
end
By Arrchie 2019-05-07 14:06:28
Line 1305: Looks like else condition is a copy pasta bug? Should be sets.midcast.Pet.WSNoFTP Code
if pet.tp >= 1000 and Pet_State == const_stateEngaged and justFinishedWeaponSkill == false and petWeaponSkillLock == false then
if state.SetFTP.value then
equip(set_combine(sets.midcast.Pet.WSFTP,{main="Ohtas"}))
else
equip(set_combine(sets.midcast.Pet.WSFTP,{main="Ohtas"}))
end
startWeaponSkillPetTimer()
end
Nice catch. Totally would be. Have fixed on both main and development branch.
Server: Asura
Game: FFXI
Posts: 496
By Asura.Elizabet 2019-05-26 01:35:10
Line 1634
Code
if pet.isvalid and
(state.PetStyleCycle.value:lower() == "spam" or state.PetStyleCycle.value:lower() == "dd") then
Shouldn't it be Code
if pet.isvalid and
(state.PetStyleCycle.value:lower() == "spam" or state.PetModeCycle.value:lower() == "dd") then
or am I missing something?
Cerberus.Jiko
Server: Cerberus
Game: FFXI
Posts: 1741
By Cerberus.Jiko 2019-05-26 04:56:53
I seriously wish I could understand this *** :\ It's REALLY hurting my damage..
By Arrchie 2019-05-26 08:30:49
I seriously wish I could understand this *** :\ It's REALLY hurting my damage..
Well, you are welcome to join us on discord listed on the first post. We would be happy to help you better understand this. Most have seen jumps in their damage and can give you plenty of advice. I'm usually around as well to help too. :)
Necro Bump Detected!
[71 days between previous and next post]
Bahamut.Faites
Server: Bahamut
Game: FFXI
Posts: 7
By Bahamut.Faites 2019-08-05 15:59:29
Hey guys,
I'm looking for an enmity gear swap for the Selindrile's lua's
Can anyone help?
By Arrchie 2019-08-06 08:02:47
Hey guys,
I'm looking for an enmity gear swap for the Selindrile's lua's
Can anyone help?
I am not familiar with Selindrile's lua. So, our implementation may not work quite correctly in Selindrile's.
We have our own timers we utilize to determine when to swap in enmity gear based on when the pet used provoke/flash. As well as the ability to swap in weapon skill gear with timers to prevent staying in the weapon skill gear for long periods of time.
Server: Asura
Game: FFXI
Posts: 35
By Asura.Cherished 2019-08-07 20:45:08
Been using the file for a few weeks now. Great job by the way guys. It makes playing PUP extremely fun and rewarding.
Wanted to let you know that sometimes when changing jobs, not just PUP, in my mog house and when zoning into my MH it crashes and immediately closes the client w/o warning. I would say about 12% of the time. Not a huge deal, and it's only in my Port Windurst Mog House. I haven't tested other places, except Norg moogles, Mhaura, Selbina and Windurst Walls Mog House. So far, only Port Windurst has produced crashes.
EDIT: Also, the client only crashed AFTER I had played PUP since starting the client. I run 3 clients at once, and the other 2 are fine, and I don't use PUP on either of those accounts.
Server: Asura
Game: FFXI
Posts: 7
By Asura.Arrchie 2019-08-09 08:22:10
Been using the file for a few weeks now. Great job by the way guys. It makes playing PUP extremely fun and rewarding.
Wanted to let you know that sometimes when changing jobs, not just PUP, in my mog house and when zoning into my MH it crashes and immediately closes the client w/o warning. I would say about 12% of the time. Not a huge deal, and it's only in my Port Windurst Mog House. I haven't tested other places, except Norg moogles, Mhaura, Selbina and Windurst Walls Mog House. So far, only Port Windurst has produced crashes.
EDIT: Also, the client only crashed AFTER I had played PUP since starting the client. I run 3 clients at once, and the other 2 are fine, and I don't use PUP on either of those accounts.
Glad you are enjoying the gearswap! Pup is an awesome job!
This is the first we have heard about the gearswap causing crashes. Have you disabled all other plugins except gearswap just to make sure it actually is the gearswap? I hope we don't have conflict with another plugin. I will have to test this out in Windurst to see if I can reproduce it.
Also, we did release a new version on 8/6, so if you haven't upgraded yet it may worth looking into, maybe it won't have that issue. lol
Bahamut.Butmunch
Server: Bahamut
Game: FFXI
Posts: 101
By Bahamut.Butmunch 2019-08-15 00:56:54
idk if its just me but i cant get any of the sets to work. if anyone has any thing that could help, would love it ^^
Server: Asura
Game: FFXI
Posts: 7
By Asura.Arrchie 2019-08-16 14:44:56
idk if its just me but i cant get any of the sets to work. if anyone has any thing that could help, would love it ^^
First post we have a link to our Discord. Plenty of people that can help ya out.
To get the basics working. You want to make sure to fill in all your sets.idle.Pet and sets.idle.Pet.Engaged... These are used when you are not fighting and the Pet is fighting (or if your OffenseMode is set to Trusts).
For tanking, you will also want to make sure to fill out sets.pet.Enmity -- this is automatically swapped in when Provoke/Flashbulb is ready.
Another set you could fill in is your pet Weapon skill set. sets.midcast.Pet.WSNoFTP and sets.midcast.Pet.WSFTP.
Second set is the sets.engaged.MasterPet... these sets are used when you and your pet are both fighting together. They would be your hybrid sets.
Server: Asura
Game: FFXI
Posts: 35
By Asura.Cherished 2019-08-22 16:15:22
Been using the file for a few weeks now. Great job by the way guys. It makes playing PUP extremely fun and rewarding.
Wanted to let you know that sometimes when changing jobs, not just PUP, in my mog house and when zoning into my MH it crashes and immediately closes the client w/o warning. I would say about 12% of the time. Not a huge deal, and it's only in my Port Windurst Mog House. I haven't tested other places, except Norg moogles, Mhaura, Selbina and Windurst Walls Mog House. So far, only Port Windurst has produced crashes.
EDIT: Also, the client only crashed AFTER I had played PUP since starting the client. I run 3 clients at once, and the other 2 are fine, and I don't use PUP on either of those accounts.
Glad you are enjoying the gearswap! Pup is an awesome job!
This is the first we have heard about the gearswap causing crashes. Have you disabled all other plugins except gearswap just to make sure it actually is the gearswap? I hope we don't have conflict with another plugin. I will have to test this out in Windurst to see if I can reproduce it.
Also, we did release a new version on 8/6, so if you haven't upgraded yet it may worth looking into, maybe it won't have that issue. lol
The only other "new to me" addon I enabled since this gs file has been the one that checks a player's equipment and reports various stats in chat. I really don't remember the name of it.
But since posting about the issue and after the ffxi client update I've had no more crashes. Granted, I'm not using port windurst mog house any more (east aduolin mog house now) but I try not to purposely crash my client.
Server: Asura
Game: FFXI
Posts: 157
By Asura.Bitesized 2019-08-27 09:28:08
Maybe it's already been answered here and I missed it. But Is there any way to get auto maneuvers to cast just before losing the buff instead of after?
Server: Asura
Game: FFXI
Posts: 7
By Asura.Arrchie 2019-08-31 18:47:57
Maybe it's already been answered here and I missed it. But Is there any way to get auto maneuvers to cast just before losing the buff instead of after?
I've not had issues with it refreshing just after the maneuver falls off. What issues are you running into with this?
To do this before the buff falls off would require a rewrite of how that currently works.
By Brynach 2019-09-14 16:25:05
There are a couple things ive found recently that I wanted to bring up to get better understanding.
Since this latest update, any time I engaged and fight, when the mob dies I get an error message from the pup-lib.lua. Line 974: attempt to index a nil value. This doesnt happen when only the pet is engaged.
Gearswap: Lua runtime error: Gearswap/flow.lua:102:
User Event error: [directory]/Gearswap/libs/pup-lib.lua:974: attempt to index a nil value.
Second thing ive found is with a VE/SS dd auto, using firex2, light maneuvers, the ws prediction is Armor Shatterer, but the auto uses Arcuballista.
Server: Asura
Game: FFXI
Posts: 7
By Asura.Arrchie 2019-09-14 20:27:04
There are a couple things ive found recently that I wanted to bring up to get better understanding.
Since this latest update, any time I engaged and fight, when the mob dies I get an error message from the pup-lib.lua. Line 974: attempt to index a nil value. This doesnt happen when only the pet is engaged.
Gearswap: Lua runtime error: Gearswap/flow.lua:102:
User Event error: [directory]/Gearswap/libs/pup-lib.lua:974: attempt to index a nil value.
Second thing ive found is with a VE/SS dd auto, using firex2, light maneuvers, the ws prediction is Armor Shatterer, but the auto uses Arcuballista.
Just to double check, you are getting the 974 error only during AutoDeploy correct? Looks like we need a better check here if that is the case.
For those weapon skill predictions we don't actually look at the current lights used and those have mainly been a best guess. Sounds like we may need to check lights as well at some point to give more accurate prediction.
By Brynach 2019-09-14 20:42:32
There are a couple things ive found recently that I wanted to bring up to get better understanding.
Since this latest update, any time I engaged and fight, when the mob dies I get an error message from the pup-lib.lua. Line 974: attempt to index a nil value. This doesnt happen when only the pet is engaged.
Gearswap: Lua runtime error: Gearswap/flow.lua:102:
User Event error: [directory]/Gearswap/libs/pup-lib.lua:974: attempt to index a nil value.
Second thing ive found is with a VE/SS dd auto, using firex2, light maneuvers, the ws prediction is Armor Shatterer, but the auto uses Arcuballista.
Just to double check, you are getting the 974 error only during AutoDeploy correct? Looks like we need a better check here if that is the case.
For those weapon skill predictions we don't actually look at the current lights used and those have mainly been a best guess. Sounds like we may need to check lights as well at some point to give more accurate prediction.
I get the message when the mob that I am fighting dies. But it does only happen when the auto-deploy function is on. Once I turned it off, the error no longer appears.
Updated: 08/06/2019
Official release can be found here: Offical Releases
Some features:
Informational HUB Window
Auto Maneuvers (Completely Optional. You still have to cast the initial Maneuvers, this just attempts to keep up what you put yourself. You are not locked into anything even if you have turned on this feature, you can simply keep changing at will without this ever activating on its own).
Emergency Lock for Pet DT Set (this will prevent all swaps from happening)
Special Pet Modes and Styles that affect the behavior of the gearswap
Enmity Gear Swapping
Weapon Skill Gear Swapping prior to puppet using the best we can to predict. This also depends on the Pet Mode and Pet Style.
Automation in most areas to help you determine the best Idle Mode, Offense Mode, Hybrid Mode, etc. (Hitting F12 will also help refresh armor in the event something odd happens.)
Special Mode for Trusts when you are engaged, want to focus on pet gear only
For controller users, we do have corresponding commands you can macro!
You can find a current list of the features and plans for improvement on Github for this gearswap:
Offical Releases
Main Stable Gearswap
Main Development Gearswap
Always looking for testers!
Also, feel free to join us on our Discord Channel for discussions, development, testing of this gearswap (all are welcome, don't have to know how to code):
Inivte Link
Enjoy!
|
|