------------------------------------------------------------------------------------------------------------------- -- Initialization function that defines sets and variables to be used. ------------------------------------------------------------------------------------------------------------------- send_command('input //send @all lua l superwarp') send_command('input //lua l porterpacker') include('organizer-lib') include('Modes.lua') --For Some reason enabling these lines crashes windower --include('packets.lua') --packets = require('packets') organizer_items = { Consumables={"Panacea","Echo Drops","Holy Water", "Remedy","Antacid","Silent Oil","Prisim Powder","Reraiser","Hi-Reraiser"}, NinjaTools={"Shihei","Inoshishinofuda","Shikanofuda","Chonofuda", "Toolbag (Shihe)", "Toolbag (Ino)", "Toolbag (Shika)", "Toolbag (Cho)"}, Food={"Grape Daifuku","Rolanberry Daifuku", "Red Curry Bun","Om. Sandwich","Miso Ramen"}, Bullets={"Happo Shuriken", "Hap. Sh. Pouch"}, } PortTowns= S{"Mhaura","Selbina","Rabao","Norg"} function get_sets() mote_include_version = 2 include('Mote-Include.lua') require('vectors') end function get_gear() send_command('wait 3;input //gs org') add_to_chat(8,'REMEMBER TO REPACK GEAR') end -- Setup vars that are user-independent. function job_setup() state.Buff.Migawari = buffactive.migawari or false state.Buff.Doomed = buffactive.doomed or false state.Buff.Sange = buffactive.Sange or false state.Buff.Yonin = buffactive.Yonin or false state.Buff.Innin = buffactive.Innin or false state.Buff.Futae = buffactive.Futae or false include('Mote-TreasureHunter') state.TreasureMode:set('None') state.HasteMode = M{['description']='Haste Mode', 'Haste I', 'Haste II'} state.MarchMode = M{['description']='March Mode', 'Trusts', '3', '7', 'Honor'} state.GeoMode = M{['description']='Geo Haste', 'Trusts', 'Dunna', 'Idris'} select_ammo() gear.RegularAmmo = 'Seki Shuriken' gear.SangeAmmo = 'Happo Shuriken' gear.MovementFeet = {name="Danzo Sune-ate"} gear.DayFeet = "Danzo Sune-ate" gear.NightFeet = "Hachiya Kyahan +1" gear.ElementalObi = {name="Hachirin-no-Obi"} gear.default.obi_waist = "Orpheus Sash" update_combat_form() ninbuff_status() stance_status() state.warned = M(false) options.ammo_warning_limit = 25 -- For th_action_check(): -- JA IDs for actions that always have TH: Provoke, Animated Flourish info.default_ja_ids = S{35, 204} -- Unblinkable JA IDs for actions that always have TH: Quick/Box/Stutter Step, Desperate/Violent Flourish info.default_u_ja_ids = S{201, 202, 203, 205, 207} get_gear() end -- Setup vars that are user-dependent. Can override this function in a sidecar file. function user_setup() windower.register_event('time change', time_change) -- Options: Override default values state.OffenseMode:options ('Normal', 'ACC') state.RangedMode:options('Normal', 'Acc') state.WeaponskillMode:options('Normal', 'MAXBUFF') state.HybridMode:options('Normal', 'Hybrid', 'TANK', 'CRIT','Subtle') state.CastingMode:options('Normal','Burst') state.IdleMode:options('Normal','Recover','DT','Buff') mainweapon={} subWeapon={} state.mainWeapon = M('Heishi Shorinken','Gokotai','Tauret','Naegling','Hachimonji','Karambit') state.subWeapon = M('Yagyu Darkblade','Kunimitsu','Tsuru','Uzura +2',"Gleti's Knife",'Bloodrain Strap','') -- Defensive Sets state.PhysicalDefenseMode:options('PDT') state.MagicalDefenseMode:options('MDT') -- Binds send_command('bind numpad0 input /ja provoke ') send_command('bind numpad1 gs c KatanaMode') send_command('bind numpad2 gs c GktMode') send_command('bind numpad3 gs c SwordMode') send_command('bind numpad4 gs c cycle CastingMode') send_command('bind numpad5 gs c cycle WeaponskillMode') send_command('bind numpad6 gs c cycle IdleMode') send_command('bind numpad7 gs c cycle OffenseMode') send_command('bind numpad9 gs c cycle RangedMode') send_command('bind numpad8 gs c cycle HybridMode') send_command('bind numpad/ gs c cycle mainWeapon') send_command('bind numpad* gs c cycle subWeapon') send_command('bind numpad- gs c cycle HasteMode') send_command('bind numpad+ gs c cycle MarchMode') send_command('unbind ^r') select_movement_feet() select_default_macro_book() use_UI = true hud_x_pos = 1515 --important to update these if you have a smaller screen hud_y_pos = 300 --important to update these if you have a smaller screen hud_draggable = true hud_font_size = 9 hud_transparency = 200 -- a value of 0 (invisible) to 255 (no transparency at all) hud_font = 'Impact' setupTextWindow() stance = "No Stance" stance_status() send_command('wait 10;input /lockstyleset 8') end function file_unload() send_command('unbind ^[') send_command('unbind ![') send_command('unbind ^=') send_command('unbind !=') send_command('unbind @f9') send_command('unbind @[') send_command('unbind `') send_command('unbind numpad7') send_command('unbind numpad9') send_command('unbind numpad5') send_command('unbind numpad8') send_command('unbind numpad4') send_command('unbind numpad1') send_command('unbind numpad2') send_command('unbind numpad3') send_command('unbind numpad/') send_command('unbind numpad*') send_command('unbind numpad-') send_command('unbind numpad+') end -- Define sets and vars used by this job file. -- sets.engaged[state.CombatForm][state.CombatWeapon][state.OffenseMode][state.HybridMode][classes.CustomMeleeGroups] (any number) -- Ninjutsu tips -- To stick Slow (Hojo) lower earth resist with Raiton: Ni -- To stick poison (Dokumori) or Attack down (Aisha) lower water resist with Katon: Ni -- To stick paralyze (Jubaku) lower ice resistence with Huton: Ni function init_gear_sets() -------------------------------------- -- Augments -------------------------------------- Andartia = {} Andartia.DA = {name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Attack+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}} Andartia.STP = {name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Store TP"+10',}} Andartia.AGIWS = {name="Andartia's Mantle", augments={'AGI+20','Accuracy+20 Attack+20','AGI+10','Weapon skill damage +10%',}} Andartia.DEXWS = {name="Andartia's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}} Andartia.STRWS = {name="Andartia's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}} Andartia.MAB = {name="Andartia's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','Magic Damage +10','"Mag.Atk.Bns."+10','Phys. dmg. taken-10%',}} Andartia.FC = {name="Andartia's Mantle", augments={'HP+60','Eva.+20 /Mag. Eva.+20','Evasion+9','"Fast Cast"+10','Phys. dmg. taken-10%',}} -------------------------------------- -- Job Abilties -------------------------------------- sets.precast.JA['Mijin Gakure'] = {legs="Mochi. Hakama +3"} sets.precast.JA['Futae'] = {hands="Hattori Tekko +1"} sets.precast.JA['Sange'] = {ammo="Happo Shuriken",body="Mochi. Chainmail +3"} sets.precast.JA['Provoke'] = --{waist="Chaac Belt", ammo="Per. Lucky egg", head = "Wh. Rarab Cap +1", feet="Volte Boots"} { ammo="Sapience Orb", head="Nyame Helm", body="Emet Harness +1", hands="Kurys Gloves", legs="Zoar Subligar +1", feet={ name="Mochi. Kyahan +3", augments={'Enh. Ninj. Mag. Acc/Cast Time Red.',}}, neck={ name="Unmoving Collar +1", augments={'Path: A',}}, waist="Trance Belt", left_ear="Cryptic Earring", right_ear="Friomisi Earring", left_ring="Supershear Ring", --+5 right_ring="Eihwaz Ring", --+5 back="Reiki Cloak" } sets.midcast.Flash = set_combine(sets.precast.JA['Provoke'], {}) -- Waltz (chr and vit) sets.precast.Waltz = {} -- Don't need any special gear for Healing Waltz. sets.precast.Waltz['Healing Waltz'] = {} -- Set for acc on steps, since Yonin can drop acc sets.precast.Step = {} sets.precast.Flourish1 = set_combine(sets.precast.Step, {waist="Chaac Belt"}) sets.midcast["Apururu (UC)"] = {} -------------------------------------- -- Utility Sets for rules below -------------------------------------- sets.TreasureHunter = {waist="Chaac Belt", ammo="Per. Lucky egg", head = "Wh. Rarab Cap +1", feet="Volte Boots"} sets.WSDayBonus = {} sets.BrutalLugra = {ear1="Lugra Earring +1", ear2="Brutal Earring"} sets.BrutalTrux = {ear1="Trux Earring", ear2="Brutal Earring"} sets.BrutalMoon = {ear1="Moonshade Earring", ear2="Brutal Earring"} sets.IshvaraMoon = {ear1="Moonshade Earring", ear2="Ishvara Earring"} sets.LugraMoon = {ear1="Moonshade Earring", ear2="Lugra Earring +1"} sets.DualLugra = {ear1="Lugra Earring +1", ear2="Brutal Earring"} sets.IshvaraCessance= {ear1="Ishvara Earring", ear2="Brutal Earring"} sets.IshvaraBrutal = {ear1="Ishvara Earring", ear2="Brutal Earring"} sets.RegularAmmo = {ammo=gear.RegularAmmo} sets.SangeAmmo = {ammo=gear.SangeAmmo} -------------------------------------- -- Ranged -------------------------------------- -- Snapshot for ranged sets.precast.RA = {ammo="Happo Shuriken",waist="Chaac Belt", ammo="Per. Lucky egg", head = "Wh. Rarab Cap +1", feet="Volte Boots"} sets.midcast.RA = { ammo="Happo Shuriken", head="Malignance Chapeau", body="Malignance Tabard", hands="Malignance Gloves", legs="Malignance Tights", feet="Malignance Boots", neck="Sanctity Necklace", waist="Reiki Yotai", left_ear="Crep. Earring", right_ear="Telos Earring", left_ring="Hajduk Ring", right_ring="Paqichikaji Ring", back=Andartia.DEXWS } sets.midcast.RA.Acc = set_combine(sets.midcast.RA, {}) sets.midcast.RA.TH = set_combine(sets.midcast.RA, sets.TreasureHunter) ---------------------------------- -- Casting ---------------------------------- -- Precasts sets.precast.FC = { ammo="Sapience Orb", --+2 head={ name="Herculean Helm", augments={'Mag. Acc.+11','"Fast Cast"+5','MND+8','"Mag.Atk.Bns."+14',}}, --+12 body={ name="Adhemar Jacket +1", augments={'HP+105','"Fast Cast"+10','Magic dmg. taken -4',}}, --+10 hands={ name="Leyline Gloves", augments={'Accuracy+14','Mag. Acc.+13','"Mag.Atk.Bns."+13','"Fast Cast"+2',}}, --+7/8 legs={ name="Herculean Trousers", augments={'"Fast Cast"+5','INT+1','"Mag.Atk.Bns."+8',}}, --+5/6 feet={ name="Herculean Boots", augments={'Mag. Acc.+23','"Fast Cast"+6','MND+1',}}, --+6 neck="Orunmila's Torque", --+5 waist="Svelt. Gouriz +1", --+0 left_ear="Enchntr. Earring +1", --+2 right_ear="Loquac. Earring", --+2 left_ring="Rahab Ring", --+2 right_ring="Kishar Ring", --+4 back={ name="Andartia's Mantle", augments={'HP+60','Eva.+20 /Mag. Eva.+20','Evasion+9','"Fast Cast"+10','Phys. dmg. taken-10%',}}, -- +10 } sets.precast.FC.ElementalNinjutsuSan = set_combine(sets.precast.FC, {}) --[Alternative Utsusemi fast casting Sets] sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {body="Mochi. Chainmail +3", neck="Magoraga Beads", left_ring="Weatherspoon Ring",}) -- Midcasts -- FastRecast (A set to end in when no other specific set is built to reduce recast time) sets.midcast.FastRecast = { ammo="Sapience Orb", head={ name="Herculean Helm", augments={'Mag. Acc.+11','"Fast Cast"+5','MND+8','"Mag.Atk.Bns."+14',}}, body={ name="Adhemar Jacket +1", augments={'HP+105','"Fast Cast"+10','Magic dmg. taken -4',}}, hands={ name="Leyline Gloves", augments={'Accuracy+14','Mag. Acc.+13','"Mag.Atk.Bns."+13','"Fast Cast"+2',}}, legs={ name="Herculean Trousers", augments={'"Fast Cast"+5','INT+1','"Mag.Atk.Bns."+8',}}, feet={ name="Herculean Boots", augments={'Mag. Acc.+23','"Fast Cast"+6','MND+1',}}, neck="Orunmila's Torque", waist="Svelt. Gouriz +1", left_ear="Enchntr. Earring +1", right_ear="Loquac. Earring", left_ring="Weatherspoon Ring", right_ring="Kishar Ring", back={ name="Andartia's Mantle", augments={'HP+60','Eva.+20 /Mag. Eva.+20','Evasion+9','"Fast Cast"+10','Phys. dmg. taken-10%',}}, } -- Magic Accuracy Focus sets.midcast.Ninjutsu = { ammo="Yamarang", head="Hachiya Hatsu. +3", body="Malignance Tabard", hands="Malignance Gloves", legs="Malignance Tights", feet="Malignance Boots", neck="Incanter's Torque", waist="Eschan Stone", left_ear="Gwati Earring", --get digni earring you lazy fuck right_ear="Hattori Earring +1", left_ring = {name="Stikini Ring +1", bag="wardrobe2"}, right_ring = {name="Stikini Ring +1", bag="wardrobe7"}, back= Andartia.MAB } -- Any ninjutsu cast on self - Recast Time Focus - Effects items that dont scale with Ninjutsu Skill, but not utsusemi sets.midcast.SelfNinjutsu = { ammo="Yamarang", head="Malignance Chapeau", body="Malignance Tabard", hands="Malignance Gloves", legs="Malignance Tights", feet="Malignance Boots", neck={ name="Bathy Choker +1", augments={'Path: A',}}, waist="Svelt. Gouriz +1", left_ear="Infused Earring", right_ear="Eabani Earring", left_ring="Hizamaru Ring", right_ring="Gelatinous Ring +1", back={ name="Andartia's Mantle", augments={'HP+60','Eva.+20 /Mag. Eva.+20','Evasion+9','"Fast Cast"+10','Phys. dmg. taken-10%',}}, } sets.midcast.Utsusemi = set_combine(sets.midcast.FastRecast, {feet="Hattori Kyahan +3"}) --Migawari Scales with Skill. Migawari + Pieces Do nothing if you arent wearing them when you are hit sets.midcast.Migawari = set_combine(sets.midcast.SelfNinjutsu, { head="Hachiya Hatsu. +3", feet="Mochi. Kyahan +3", neck="Incanter's Torque", left_ring = {name="Stikini Ring +1", bag="wardrobe2"}, right_ring = {name="Stikini Ring +1", bag="wardrobe7"}, back=Andartia.FC }) -- Nuking Ninjutsu (skill & magic attack) - Scales Ton line spells sets.midcast.ElementalNinjutsu = { ammo="Ghastly Tathlum +1", head={ name="Mochi. Hatsuburi +3", augments={'Enhances "Yonin" and "Innin" effect',}}, body="Nyame Mail", hands="Nyame Gauntlets", legs="Nyame Flanchard", feet={ name="Mochi. Kyahan +3", augments={'Enh. Ninj. Mag. Acc/Cast Time Red.',}}, neck="Sibyl Scarf", waist="Orpheus's Sash", left_ear="Friomisi Earring", right_ear="Hecate's Earring", left_ring="Shiva Ring +1", right_ring="Dingir Ring", back={ name="Andartia's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','Magic Damage +10','"Mag.Atk.Bns."+10','Phys. dmg. taken-10%',}}, } --Ni spells benefit from Higher INT and Magic damage sets.midcast.ElementalNinjutsu.Burst = set_combine(sets.midcast.ElementalNinjutsu, { --body={ name="Samnuha Coat", augments={'Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+5','"Dual Wield"+5',}}, --neck="Warder's Charm +1", left_ring="Mujin Band", }) --San Spells Benefit from Higher MAB sets.midcast.ElementalNinjutsuSan = set_combine(sets.midcast.ElementalNinjutsu, {right_ring="Metamorph Ring +1",}) sets.midcast.ElementalNinjutsuSan.Burst = set_combine(sets.midcast.ElementalNinjutsuSan, { --body={ name="Samnuha Coat", augments={'Mag. Acc.+15','"Mag.Atk.Bns."+15','"Fast Cast"+5','"Dual Wield"+5',}}, left_ring="Mujin Band", right_ring="Metamorph Ring +1", }) -- Effusions sets.precast.Effusion = {} sets.precast.Effusion.Lunge = sets.midcast.ElementalNinjutsu sets.precast.Effusion.Swipe = sets.midcast.ElementalNinjutsu ---------------------------------- -- Idle Sets ---------------------------------- sets.idle = {} sets.idle.Normal = { ammo="Yamarang", head="Malignance Chapeau", body="Mpaca's Doublet", hands="Malignance Gloves", legs="Mpaca's Hose", feet="Malignance Boots", neck={ name="Bathy Choker +1", augments={'Path: A',}}, waist="Svelt. Gouriz +1", left_ear="Infused Earring", right_ear="Eabani Earring", left_ring="Hizamaru Ring", right_ring="Gelatinous Ring +1", back={ name="Andartia's Mantle", augments={'HP+60','Eva.+20 /Mag. Eva.+20','Evasion+9','"Fast Cast"+10','Phys. dmg. taken-10%',}}, } sets.idle.Recover = { ammo="Staunch Tathlum +1", head="Rao Kabuto +1", body="Hiza. Haramaki +2", hands="Rao Kote +1", legs="Malignance Tights", feet="Rao Sune-Ate +1", neck={ name="Bathy Choker +1", augments={'Path: A',}}, waist="Flume Belt", left_ear="Infused Earring", right_ear="Eabani Earring", left_ring="Chirich Ring +1", right_ring="Chirich Ring +1", back={ name="Andartia's Mantle", augments={'HP+60','Eva.+20 /Mag. Eva.+20','Evasion+9','"Fast Cast"+10','Phys. dmg. taken-10%',}}, } sets.idle.DT = { ammo="Staunch Tathlum +1", head="Nyame Helm", body="Nyame Mail", hands="Nyame Gauntlets", legs="Nyame Flanchard", feet="Nyame Sollerets", neck="Warder's Charm +1", waist="Carrier's Sash", left_ear="Tuisto Earring", right_ear="Odnowa Earring +1", left_ring="Defending Ring", right_ring="Shadow Ring", back="Moonbeam Cape", } sets.idle.Buff = { ammo="Yamarang", head={ name="Taeon Chapeau", augments={'Attack+10','"Triple Atk."+2','Phalanx +3',}}, body={ name="Taeon Tabard", augments={'Accuracy+5','"Fast Cast"+3','Phalanx +3',}}, hands={ name="Taeon Gloves", augments={'Phalanx +2',}}, legs={ name="Taeon Tights", augments={'Phalanx +3',}}, feet={ name="Taeon Boots", augments={'Phalanx +2',}}, neck={ name="Bathy Choker +1", augments={'Path: A',}}, waist="Gishdubar Sash", left_ear="Infused Earring", right_ear="Eabani Earring", left_ring="Sheltered Ring", right_ring={ name="Gelatinous Ring +1", augments={'Path: A',}}, back={ name="Andartia's Mantle", augments={'HP+60','Eva.+20 /Mag. Eva.+20','Evasion+9','"Fast Cast"+10','Phys. dmg. taken-10%',}}, } ---------------------------------- -- full Defense sets for react and other things ---------------------------------- -- 51% PDT + Nullification(Mantle) sets.defense.PDT = { ammo="Staunch Tathlum +1", head="Malignance Chapeau", body="Malignance Tabard", hands="Malignance Gloves", legs="Malignance Tights", feet="Malignance Boots", neck="Loricate Torque +1", waist="Flume Belt", left_ear="Tuisto Earring", right_ear="Odnowa Earring +1", left_ring="Defending Ring", right_ring="Warden's Ring", back=Andartia.DA } -- 25% MDT + Absorb + Nullification + MEva sets.defense.PEVA = { ammo="Staunch Tathlum +1", head="Mpaca's Cap", body="Mpaca's Doublet", hands="Mpaca's Gloves", legs="Mpaca's Hose", feet="Mpaca's Boots", neck="Loricate Torque +1", waist="Flume Belt", left_ear="Tuisto Earring", right_ear="Odnowa Earring +1", left_ring="Defending Ring", right_ring="Warden's Ring", back=Andartia.DA } sets.MEva = { ammo="Staunch Tathlum +1", head="Nyame Helm", body="Nyame Mail", hands="Nyame Gauntlets", legs="Nyame Flanchard", feet="Hachi. Kyahan +1", neck={ name="Unmoving Collar +1", augments={'Path: A',}}, waist="Carrier's Sash", left_ear="Tuisto Earring", right_ear="Odnowa Earring +1", left_ring="Defending Ring", right_ring="Warden's Ring", back="Moonbeam Cape", } sets.Death = set_combine(sets.MEva, {left_ring="Warden's Ring"}) sets.Resist = set_combine(sets.MEva, {}) sets.Resist.Stun = set_combine(sets.MEva, {}) sets.DayMovement = {feet="Danzo Sune-ate"} sets.NightMovement = {feet="Hachiya Kyahan +1"} -------------------------------------------------------------------- -- Generic Armor Sets used for Micromanaging Haste DW ACC and DT tiers -------------------------------------------------------------------- -- All DW DA STP Capes should have 10 PDT. 21 MDT/DT is needed to cap, 40 PDT is needed to cap with cape. use a +5 DT Cape with D Ring instead of gelatinous, and malignance body if worried about no Shell V sets.TANK={ head = "Malignance Chapeau", --6 DT |16 PDT - 6 MDT body = "Mpaca's Doublet", --10 PDT|26 PDT - 6 MDT hands= "Malignance Gloves", --5 DT |31 PDT - 11 MDT legs = "Malignance Tights", --7 DT |38 PDT - 18 MDT feet = "Malignance Boots", --4 DT |42 PDT - 22 MDT right_ring="Gelatinous Ring +1" --7 PDT|49 PDT - 21 MDT } sets.Hybrid={ head = "Malignance Chapeau", --6 DT |16 PDT - 6 MDT body = "Mpaca's Doublet", --10 PDT|26 PDT - 6 MDT hands= "Mpaca's Gloves", --8 PDT|34 PDT - 6 MDT legs = "Malignance Tights", --7 DT |38 PDT - 13 MDT feet = "Malignance Boots", --4 DT |42 PDT - 17 MDT } sets.CRIT={ head={ name="Blistering Sallet +1", augments={'Path: A',}}, body={ name="Mpaca's Doublet", augments={'Path: A',}}, hands="Ken. Tekko +1", legs={ name="Mpaca's Hose", augments={'Path: A',}}, feet="Ken. Sune-Ate +1", left_ring="Lehko's Ring", } ---------------------------------- --Generic Accuracy Sets ---------------------------------- --[[ACC Guidelines Before Food(AfterFood) - Content Normal: 1000 (1100) - casual/solo Low: 1100 (1200) - Omen bosses, Geas Fete T3 Mid: 1200 (1300) - VD Ambuscade (normal Month), Wave 3 Dyna D High: 1300 (1400) - Helms, VD Ambuscade (Hard month) Buff tiers assume No external buffs. Lower the tier if recieving madrigals or hunters.]] -- NIN is not hurting for ACC Gear right now. Chirich swaps put most sets in the 1200 range natively. sets.ACC ={ left_ring = {name="Chirich Ring +1", bag="wardrobe2"}, right_ring = {name="Chirich Ring +1", bag="wardrobe7"}, } sets.Subtle = { } ---------------------------------- --DW SETS ---------------------------------- --[[Use DW Sets to cap haste. if you are missing pieces from these sets, or have downgraded pieces, you can change out the slot with a new piece of gear. just be sure to balance the T12,T22,T32,T39 sets to match as close as possible to the required DW]] sets.dw={} sets.dw.head = {head = "Ryuo Somen +1"} --+9 sets.dw.body = {body = "Mochi. Chainmail +3"} --+9 sets.dw.legs = {legs = "Mochi. Hakama +3"} --+10 sets.dw.feet = {feet = "Hiza. Sune-Ate +2"} --+8 sets.dw.ear1 = {left_ear = "Suppanomimi"} --+5 sets.dw.ear2 = {right_ear= "Eabani Earring"} --+4 sets.dw.waist= {waist = "Reiki Yotai"} --+7 sets.dw.back = {back = { name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','DEX+10','"Dual Wield"+10','Phys. dmg. taken-10%',}},} -- +10DW sets.dw.t12 = set_combine(sets.dw.waist,sets.dw.ear1,{}) --Need 12 total DW sets.dw.t22 = set_combine(sets.dw.waist,sets.dw.ear1,sets.dw.back, {})--Need 22 Total DW sets.dw.t32 = set_combine(sets.dw.waist,sets.dw.ear1,sets.dw.back, sets.dw.body, {})--32 DW To cap sets.dw.t35 = set_combine(sets.dw.waist,sets.dw.ear1,sets.dw.back, sets.dw.body, {})--Special 0 haste Hybrid Join, gets 35 DW, 50 dt sets.dw.t39A = set_combine(sets.dw.waist,sets.dw.ear1,sets.dw.ear2, sets.dw.back, sets.dw.body, {})--Special 0 haste Hybrid Join, gets 35 DW, 50 dt sets.dw.t39 = set_combine(sets.dw.waist,sets.dw.ear1,sets.dw.ear2, sets.dw.back, sets.dw.head, sets.dw.body, {})--39 DW To cap ---------------------------------- -- No Haste - Requires 39 total DW to cap. use sets.dw.t39 as primary set join ---------------------------------- sets.engaged = set_combine(sets.dw.t39, { neck = "Ninja Nodowa +2", right_ear = "Telos Earring", left_ring = "Gere Ring", right_ring = "Epona's Ring", hands = { name="Adhemar Wrist. +1", augments={'STR+12','DEX+12','Attack+20',}}, legs = "Samnuha Tights", feet = "Malignance Boots", }) ---------------------------------- -- No Haste SetVariants ---------------------------------- --Accuracy Variants sets.engaged.ACC = set_combine(sets.engaged, sets.ACC, sets.dw.t39, {}) sets.engaged.Hybrid = set_combine(sets.engaged, sets.hybrid, sets.dw.t35, {left_ring="Defending Ring"}) sets.engaged.ACC.Hybrid = set_combine(sets.engaged, sets.ACC, sets.hybrid, sets.dw.t35, {left_ring="Defending Ring"}) sets.engaged.TANK = set_combine(sets.engaged, sets.TANK, sets.dw.t39A, {left_ring="Defending Ring"}) sets.engaged.ACC.TANK = set_combine(sets.engaged, sets.ACC, sets.TANK, sets.dw.t39A, {left_ring="Defending Ring"}) sets.engaged.CRIT = set_combine(sets.engaged, sets.CRIT, sets.dw.t39A, {}) sets.engaged.ACC.CRIT = set_combine(sets.engaged, sets.ACC, sets.CRIT, sets.dw.t39A, {}) sets.engaged.Subtle = set_combine(sets.engaged, sets.Subtle, sets.dw.t39A, {}) sets.engaged.ACC.Subtle = set_combine(sets.engaged, sets.ACC, sets.Subtle, sets.dw.t39A, {}) ---------------------------------- -- Kannagi ---------------------------------- sets.engaged.Kannagi = {} sets.engaged.Kannagi.AM3 = {} ---------------------------------- -- GKT ---------------------------------- sets.engaged.GKT = { head="Malignance Chapeau", body="Malignance Tabard", hands="Malignance Gloves", legs="Malignance Tights", feet="Malignance Boots", neck={name="Ninja Nodowa +2", augments={'Path: A',}}, waist="Reiki Yotai", left_ear="Telos Earring", right_ear="Dedition Earring", left_ring = "Lehko's Ring", right_ring = {name="Chirich Ring +1", bag="wardrobe7"}, back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Store TP"+10','Phys. dmg. taken-10%',}}, } sets.engaged.H2H = { head={ name="Mpaca's Cap", augments={'Path: A',}}, body={ name="Mpaca's Doublet", augments={'Path: A',}}, hands={ name="Mpaca's Gloves", augments={'Path: A',}}, legs={ name="Mpaca's Hose", augments={'Path: A',}}, feet={ name="Mpaca's Boots", augments={'Path: A',}}, neck={ name="Ninja Nodowa +2", augments={'Path: A',}}, waist={ name="Sailfi Belt +1", augments={'Path: A',}}, left_ear={name="Mache Earring +1",bag="wardrobe2"}, right_ear={name="Mache Earring +1",bag="wardrobe7"}, left_ring="Gere Ring", right_ring="Epona's Ring", back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Attack+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}, } --[[Set Build order: [Melee Set] > [Accuracy set] > [DW Sets] > [DT Set] > [Custom Sets] * DW > ACC- Most DW Gear has native acc, so stack it after ACC gear to prevent mis-equips * Stack DT Last to prevent DT overwrites. Current DT Set keeps 43% PDT and 50% MDT under shell 5 at all times. Use 10PDT Capes over 5 DT Capes. 5DT capes are for Malignanceless noobs.]] -------------------------------------------------------------------- -- MaxHaste Sets (0%DW Needed) -------------------------------------------------------------------- -- DW Total in Gear: 0 DW / 1 DW Needed to Cap Delay Reduction sets.engaged.MaxHaste = { head="Malignance Chapeau", body={ name="Tatena. Harama. +1", augments={'Path: A',}}, hands="Malignance Gloves", legs="Samnuha Tights", feet="Malignance Boots", neck={ name="Ninja Nodowa +2", augments={'Path: A',}}, waist={ name="Sailfi Belt +1", augments={'Path: A',}}, left_ear="Telos Earring", right_ear="Dedition Earring", left_ring="Gere Ring", right_ring="Epona's Ring", back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Accuracy+10','"Store TP"+10','Phys. dmg. taken-10%',}}, } sets.engaged.ACC.MaxHaste = set_combine(sets.engaged.MaxHaste, sets.ACC , {}) sets.engaged.Hybrid.MaxHaste = set_combine(sets.engaged.MaxHaste, sets.hybrid, {}) sets.engaged.ACC.Hybrid.MaxHaste= set_combine(sets.engaged.MaxHaste, sets.ACC , sets.hybrid, {}) sets.engaged.TANK.MaxHaste = set_combine(sets.engaged.MaxHaste, sets.TANK, {}) sets.engaged.ACC.TANK.MaxHaste = set_combine(sets.engaged.MaxHaste, sets.ACC , sets.TANK, {}) sets.engaged.CRIT.MaxHaste = set_combine(sets.engaged.MaxHaste, sets.CRIT, {}) sets.engaged.ACC.CRIT.MaxHaste = set_combine(sets.engaged.MaxHaste, sets.ACC , sets.CRIT, {}) sets.engaged.Subtle.MaxHaste = set_combine(sets.engaged.MaxHaste, sets.Subtle, {}) sets.engaged.ACC.Subtle.MaxHaste= set_combine(sets.engaged.MaxHaste, sets.ACC , sets.Subtle, {}) ---------------------------------- -- 35% Haste (~10-12%DW Needed) ---------------------------------- -- DW Total in Gear: 12 DW / 12 DW Needed to Cap Delay Reduction sets.engaged.Haste_35 = set_combine(sets.engaged.MaxHaste, sets.dw.t12, {}) sets.engaged.ACC.Haste_35 = set_combine(sets.engaged.MaxHaste, sets.ACC , sets.dw.t12, {}) sets.engaged.Hybrid.Haste_35 = set_combine(sets.engaged.MaxHaste, sets.dw.t12, sets.hybrid, {}) sets.engaged.ACC.Hybrid.Haste_35= set_combine(sets.engaged.MaxHaste, sets.ACC , sets.hybrid,sets.dw.t12, {}) sets.engaged.TANK.Haste_35 = set_combine(sets.engaged.MaxHaste, sets.dw.t12, sets.TANK , {}) sets.engaged.ACC.TANK.Haste_35 = set_combine(sets.engaged.MaxHaste, sets.ACC , sets.TANK ,sets.dw.t12, {}) sets.engaged.CRIT.Haste_35 = set_combine(sets.engaged.MaxHaste, sets.dw.t12, sets.CRIT , {}) sets.engaged.ACC.CRIT.Haste_35 = set_combine(sets.engaged.MaxHaste, sets.ACC , sets.CRIT ,sets.dw.t12, {}) sets.engaged.Subtle.Haste_35 = set_combine(sets.engaged.MaxHaste, sets.dw.t12, sets.Subtle , {}) sets.engaged.ACC.Subtle.Haste_35 = set_combine(sets.engaged.MaxHaste, sets.ACC , sets.Subtle ,sets.dw.t12, {}) ---------------------------------- -- 30% Haste (~21-22%DW Needed) ---------------------------------- -- DW Total in Gear: 21 DW / 21 DW Needed to Cap Delay Reduction -- DW DT Sets CANT cap DW in this haste tier Without sacrificing DT. If you want to override a piece of DT Gear, simply include it. (Use DW Head, Ear2, and Waist if dropping malignance for DT) -- Use DW Cape sets.engaged.Haste_30 = set_combine(sets.engaged.MaxHaste, sets.dw.t22, {}) sets.engaged.ACC.Haste_30 = set_combine(sets.engaged.MaxHaste, sets.ACC , sets.dw.t22, {}) sets.engaged.Hybrid.Haste_30 = set_combine(sets.engaged.MaxHaste, sets.hybrid, sets.dw.t22, {}) sets.engaged.ACC.Hybrid.Haste_30= set_combine(sets.engaged.MaxHaste, sets.ACC , sets.hybrid, sets.dw.t22, {}) sets.engaged.TANK.Haste_30 = set_combine(sets.engaged.MaxHaste, sets.TANK , sets.dw.t22, {}) sets.engaged.ACC.TANK.Haste_30 = set_combine(sets.engaged.MaxHaste, sets.ACC , sets.TANK, sets.dw.t22, {}) sets.engaged.CRIT.Haste_30 = set_combine(sets.engaged.MaxHaste, sets.CRIT , sets.dw.t22, {}) sets.engaged.ACC.CRIT.Haste_30 = set_combine(sets.engaged.MaxHaste, sets.ACC , sets.CRIT, sets.dw.t22, {}) sets.engaged.Subtle.Haste_30 = set_combine(sets.engaged.MaxHaste, sets.Subtle , sets.dw.t22, {}) sets.engaged.ACC.Subtle.Haste_30 = set_combine(sets.engaged.MaxHaste, sets.ACC , sets.Subtle, sets.dw.t22, {}) ---------------------------------- -- 15% Haste (~32%DW Needed) ---------------------------------- -- DW Total in Gear: 32 DW / 32 DW Needed to Cap Delay Reduction sets.engaged.Haste_15 = set_combine(sets.engaged.MaxHaste, sets.dw.t32, {}) sets.engaged.ACC.Haste_15 = set_combine(sets.engaged.MaxHaste, sets.ACC , sets.dw.t32, {}) sets.engaged.Hybrid.Haste_15 = set_combine(sets.engaged.MaxHaste, sets.hybrid, sets.dw.t32, {}) sets.engaged.ACC.Hybrid.Haste_15= set_combine(sets.engaged.MaxHaste, sets.ACC , sets.hybrid, sets.dw.t32, {}) sets.engaged.TANK.Haste_15 = set_combine(sets.engaged.MaxHaste, sets.TANK , sets.dw.t32, {}) sets.engaged.ACC.TANK.Haste_15 = set_combine(sets.engaged.MaxHaste, sets.ACC , sets.TANK , sets.dw.t32, {}) sets.engaged.CRIT.Haste_15 = set_combine(sets.engaged.MaxHaste, sets.CRIT , sets.dw.t32, {}) sets.engaged.ACC.CRIT.Haste_15 = set_combine(sets.engaged.MaxHaste, sets.ACC , sets.CRIT , sets.dw.t32, {}) sets.engaged.Subtle.Haste_15 = set_combine(sets.engaged.MaxHaste, sets.Subtle , sets.dw.t32, {}) sets.engaged.ACC.Subtle.Haste_15 = set_combine(sets.engaged.MaxHaste, sets.ACC , sets.Subtle , sets.dw.t32, {}) ---------------------------------- -- Weaponskills (General) ---------------------------------- sets.precast.WS = { ammo = "Coiste Bodhar", head="Hachiya Hatsu. +3", body="Nyame Mail", hands="Nyame Gauntlets", legs={ name="Mochi. Hakama +3", augments={'Enhances "Mijin Gakure" effect',}}, feet="Hattori Kyahan +3", neck="Fotia Gorget", waist="Fotia Belt", left_ear="Lugra Earring +1", right_ear="Moonshade Earring", left_ring="Regal Ring", right_ring="Epaminondas's Ring", back=Andartia.DEXWS } sets.precast.WS.MAXBUFF = set_combine(sets.precast.WS, {}) -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found. sets.precast.WS['Blade: Hi'] = set_combine(sets.precast.WS, { ammo="Yetshila +1", head="Hachiya Hatsu. +3", body={ name="Mpaca's Doublet", augments={'Path: A',}}, hands={ name="Nyame Gauntlets", augments={'Path: B',}}, legs={ name="Nyame Flanchard", augments={'Path: B',}}, feet="Hattori Kyahan +3", neck={ name="Ninja Nodowa +2", augments={'Path: A',}}, waist={ name="Sailfi Belt +1", augments={'Path: A',}}, left_ear="Ishvara Earring", right_ear={ name="Lugra Earring +1", augments={'Path: A',}}, left_ring="Lehko's Ring", right_ring="Regal Ring", back={ name="Andartia's Mantle", augments={'AGI+20','Accuracy+20 Attack+20','AGI+10','Weapon skill damage +10%','Damage taken-5%',}}, }) sets.precast.WS['Blade: Hi'].MAXBUFF = { ammo="Yetshila +1", head="Hachiya Hatsu. +3", body="Nyame Mail", hands={ name="Nyame Gauntlets", augments={'Path: B',}}, legs={ name="Nyame Flanchard", augments={'Path: B',}}, feet="Hattori Kyahan +3", neck={ name="Ninja Nodowa +2", augments={'Path: A',}}, waist={ name="Sailfi Belt +1", augments={'Path: A',}}, left_ear="Ishvara Earring", right_ear={ name="Lugra Earring +1", augments={'Path: A',}}, left_ring="Lehko's Ring", right_ring="Regal Ring", back={ name="Andartia's Mantle", augments={'AGI+20','Accuracy+20 Attack+20','AGI+10','Weapon skill damage +10%','Damage taken-5%',}}, } sets.precast.WS['Blade: Ten'] ={ ammo="Seething Bomblet +1", head="Mpaca's Cap", body="Nyame Mail", hands="Nyame Gauntlets", legs="Nyame Flanchard", feet="Hattori Kyahan +3", neck="Rep. Plat. Medal", waist={ name="Sailfi Belt +1", augments={'Path: A',}}, left_ear={ name="Lugra Earring +1", augments={'Path: A',}}, right_ear={ name="Moonshade Earring", augments={'"Mag.Atk.Bns."+4','TP Bonus +250',}}, left_ring="Regal Ring", right_ring="Gere Ring", back={ name="Andartia's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}}, } sets.precast.WS['Blade: Ten'].MAXBUFF = set_combine(sets.precast.WS['Blade: Ten'], { neck={ name="Ninja Nodowa +2", augments={'Path: A',}}, left_ring="Epaminondas's Ring", }) sets.precast.WS['Blade: Jin'] = { ammo="Yetshila +1", head={ name="Blistering Sallet +1", augments={'Path: A',}}, body={ name="Mpaca's Doublet", augments={'Path: A',}}, hands={ name="Mpaca's Gloves", augments={'Path: A',}}, legs={ name="Mochi. Hakama +3", augments={'Enhances "Mijin Gakure" effect',}}, feet={ name="Mpaca's Boots", augments={'Path: A',}}, neck="Fotia Gorget", waist="Fotia Belt", left_ear={ name="Lugra Earring +1", augments={'Path: A',}}, right_ear={ name="Moonshade Earring", augments={'"Mag.Atk.Bns."+4','TP Bonus +250',}}, left_ring="Lehko's Ring", right_ring="Ilabrat Ring", back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Attack+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}, } sets.precast.WS['Blade: Jin'].MAXBUFF = set_combine(sets.precast.WS['Blade: Jin'],{}) sets.precast.WS['Blade: Kamu'] = { -- NEEDS SRODA RING, Hattori Earring +1 ammo="Crepuscular Pebble", head={ name="Mpaca's Cap", augments={'Path: A',}}, body={ name="Nyame Mail", augments={'Path: B',}}, hands={ name="Nyame Gauntlets", augments={'Path: B',}}, legs={ name="Nyame Flanchard", augments={'Path: B',}}, feet={ name="Nyame Sollerets", augments={'Path: B',}}, neck={ name="Ninja Nodowa +2", augments={'Path: A',}}, waist={ name="Sailfi Belt +1", augments={'Path: A',}}, left_ear={ name="Lugra Earring +1", augments={'Path: A',}}, right_ear="Brutal Earring", left_ring="Gere Ring", right_ring="Regal Ring", back={ name="Andartia's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}}, } sets.precast.WS['Blade: Kamu'].MAXBUFF = set_combine(sets.precast.WS['Blade: Kamu'], {}) sets.precast.WS['Blade: Metsu'] = set_combine(sets.precast.WS['Blade: Ten'], {}) sets.precast.WS['Blade: Metsu'].MAXBUFF = set_combine(sets.precast.WS['Blade: Metsu'], {}) sets.precast.WS['Blade: Shun'] = { ammo={ name="Coiste Bodhar", augments={'Path: A',}}, head={ name="Mpaca's Cap", augments={'Path: A',}}, body="Malignance Tabard", hands={ name="Adhemar Wrist. +1", augments={'STR+12','DEX+12','Attack+20',}}, legs={ name="Mpaca's Hose", augments={'Path: A',}}, feet="Hattori Kyahan +3", neck="Fotia Gorget", waist="Fotia Belt", left_ear={ name="Lugra Earring +1", augments={'Path: A',}}, right_ear={ name="Moonshade Earring", augments={'"Mag.Atk.Bns."+4','TP Bonus +250',}}, left_ring="Gere Ring", right_ring="Regal Ring", back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Attack+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}, } sets.precast.WS['Blade: Shun'].MAXBUFF ={ ammo="Crepuscular Pebble", head="Ken. Jinpachi +1", body="Malignance Tabard", hands="Malignance Gloves", legs={ name="Mpaca's Hose", augments={'Path: A',}}, feet="Hattori Kyahan +3", neck={ name="Ninja Nodowa +2", augments={'Path: A',}}, waist="Fotia Belt", left_ear={ name="Lugra Earring +1", augments={'Path: A',}}, right_ear={ name="Moonshade Earring", augments={'"Mag.Atk.Bns."+4','TP Bonus +250',}}, left_ring="Gere Ring", right_ring="Regal Ring", back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Attack+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}, } sets.precast.WS['Blade: Ku'] = { ammo={ name="Coiste Bodhar", augments={'Path: A',}}, head={ name="Mpaca's Cap", augments={'Path: A',}}, body={ name="Nyame Mail", augments={'Path: B',}}, hands={ name="Mochizuki Tekko +3", augments={'Enh. "Ninja Tool Expertise" effect',}}, legs={ name="Nyame Flanchard", augments={'Path: B',}}, feet={ name="Mpaca's Boots", augments={'Path: A',}}, neck="Fotia Gorget", waist="Fotia Belt", left_ear={ name="Lugra Earring +1", augments={'Path: A',}}, right_ear="Brutal Earring", left_ring="Regal Ring", right_ring="Gere Ring", back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Attack+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}, } sets.precast.WS['Blade: Ku'].MAXBUFF = set_combine(sets.precast.WS['Blade: Ku'], { hands="Malignance Gloves", legs="Mpaca's Hose", neck={ name="Ninja Nodowa +2", augments={'Path: A',}}, }) sets.precast.WS['Blade: Chi'] = set_combine(sets.precast.WS, { ammo="Seething Bomblet +1", head={ name="Mochi. Hatsuburi +3", augments={'Enhances "Yonin" and "Innin" effect',}}, body="Nyame Mail", hands="Nyame Gauntlets", legs="Nyame Flanchard", feet="Nyame Sollerets", neck="Fotia Gorget", waist="Orpheus's Sash", left_ear="Lugra Earring +1", right_ear={ name="Moonshade Earring", augments={'"Mag.Atk.Bns."+4','TP Bonus +250',}}, left_ring="Gere Ring", right_ring="Epaminondas's Ring", back=Andartia.STRWS, }) sets.precast.WS['Blade: To'] = sets.precast.WS['Blade: Chi'] sets.precast.WS['Blade: Teki'] = sets.precast.WS['Blade: Chi'] sets.precast.WS['Blade: Ei'] = { ammo="Seething Bomblet +1", head="Pixie Hairpin +1", body="Nyame Mail", hands="Nyame Gauntlets", legs={ name="Mochi. Hakama +3", augments={'Enhances "Mijin Gakure" effect',}}, feet="Nyame Sollerets", neck="Sibyl Scarf", waist="Orpheus's Sash", left_ear="Friomisi Earring", right_ear="Hecate's Earring", left_ring="Epaminondas's Ring", right_ring="Archon Ring", back={ name="Andartia's Mantle", augments={'INT+20','Mag. Acc+20 /Mag. Dmg.+20','Magic Damage +10','"Mag.Atk.Bns."+10',}}, } sets.precast.WS['Blade: Yu'] = { ammo="Ghastly Tathlum +1", head="Mochi. Hatsuburi +3", neck="Sibyl Scarf", ear1="Moonshade Earring", ear2="Lugra Earring +1", body="Nyame Mail", hands="Nyame Gauntlets", ring1="Epaminondas's Ring", ring2="Shiva Ring +1", waist="Orpheus's Sash", legs="Nyame Flanchard", feet="Nyame Sollerets", back=Andartia.MAB--DEXWS(alt needs testing) } sets.precast.WS['Aeolian Edge'] = set_combine(sets.precast.WS['Blade: Yu'],{}) sets.precast.WS['Evisceration'] = { ammo="Yetshila +1", head={ name="Blistering Sallet +1", augments={'Path: A',}}, body={ name="Mpaca's Doublet", augments={'Path: A',}}, hands={ name="Mpaca's Gloves", augments={'Path: A',}}, legs={ name="Mpaca's Hose", augments={'Path: A',}}, feet={ name="Mpaca's Boots", augments={'Path: A',}}, neck="Fotia Gorget", waist="Fotia Belt", left_ear={ name="Lugra Earring +1", augments={'Path: A',}}, right_ear={ name="Moonshade Earring", augments={'"Mag.Atk.Bns."+4','TP Bonus +250',}}, left_ring="Lehko's Ring", right_ring="Gere Ring", back={ name="Andartia's Mantle", augments={'DEX+20','Accuracy+20 Attack+20','Attack+10','"Dbl.Atk."+10','Phys. dmg. taken-10%',}}, } sets.precast.WS['Evisceration'].MAXBUFF = { neck="Ninja Nodowa +2", } -- USE MACC FOR AGEHA TO STICK DEBUFF. NOT USED FOR DAMAGE EVER. sets.precast.WS['Tachi: Ageha'] = set_combine(sets.precast.WS,{ ammo="Yamarang", head="Mpaca's Cap", body="Malignance Tabard", hands="Malignance Gloves", legs="Malignance Tights", feet="Hattori Kyahan +3", neck="Sanctity Necklace", waist="Eschan Stone", left_ear="Telos Earring", right_ear={ name="Moonshade Earring", augments={'"Mag.Atk.Bns."+4','TP Bonus +250',}}, left_ring="Stikini Ring +1", right_ring="Stikini Ring +1", back=Andartia.DEXWS }) sets.precast.WS['Tachi: Gekko'] = set_combine(sets.precast.WS['Blade: Ten'], {}) sets.precast.WS['Tachi: Kasha'] = set_combine(sets.precast.WS['Blade: Ten'], {}) sets.precast.WS['Tachi: Jinpu'] = set_combine(sets.precast.WS['Blade: Chi'],{}) sets.precast.WS['Tachi: Koki'] = set_combine(sets.precast.WS['Blade: Chi'],{}) sets.precast.WS['Tachi: Kagero'] = set_combine(sets.precast.WS['Blade: Chi'],{}) sets.precast.WS['Tachi: Goten'] = set_combine(sets.precast.WS['Blade: Chi'],{}) sets.precast.WS['Tachi: Jinpu'].MAXBUFF = set_combine(sets.precast.WS['Blade: Chi'].MAXBUFF,{}) sets.precast.WS['Tachi: Koki'].MAXBUFF = set_combine(sets.precast.WS['Blade: Chi'].MAXBUFF,{}) sets.precast.WS['Tachi: Kagero'].MAXBUFF = set_combine(sets.precast.WS['Blade: Chi'].MAXBUFF,{}) sets.precast.WS['Tachi: Goten'].MAXBUFF = set_combine(sets.precast.WS['Blade: Chi'].MAXBUFF,{}) sets.precast.WS['Asuran Fists'] = { ammo="Crepuscular Pebble", head={ name="Mochi. Hatsuburi +3", augments={'Enhances "Yonin" and "Innin" effect',}}, body={ name="Mochi. Chainmail +3", augments={'Enhances "Sange" effect',}}, hands={ name="Mochizuki Tekko +3", augments={'Enh. "Ninja Tool Expertise" effect',}}, legs={ name="Mochi. Hakama +3", augments={'Enhances "Mijin Gakure" effect',}}, feet={ name="Mochi. Kyahan +3", augments={'Enh. Ninj. Mag. Acc/Cast Time Red.',}}, neck={ name="Ninja Nodowa +2", augments={'Path: A',}}, waist="Fotia Belt", left_ear={ name="Lugra Earring +1", augments={'Path: A',}}, right_ear={ name="Moonshade Earring", augments={'"Mag.Atk.Bns."+4','TP Bonus +250',}}, left_ring="Ilabrat Ring", right_ring="Gere Ring", back={ name="Andartia's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}}, } sets.precast.WS['Raging Fists'] = { ammo="Crepuscular Pebble", head={ name="Mpaca's Cap", augments={'Path: A',}}, body={ name="Nyame Mail", augments={'Path: B',}}, hands={ name="Nyame Gauntlets", augments={'Path: B',}}, legs={ name="Mochi. Hakama +3", augments={'Enhances "Mijin Gakure" effect',}}, feet="Hattori Kyahan +3", neck={ name="Ninja Nodowa +2", augments={'Path: A',}}, waist={ name="Sailfi Belt +1", augments={'Path: A',}}, left_ear={ name="Lugra Earring +1", augments={'Path: A',}}, right_ear={ name="Moonshade Earring", augments={'"Mag.Atk.Bns."+4','TP Bonus +250',}}, left_ring="Ilabrat Ring", right_ring="Gere Ring", back={ name="Andartia's Mantle", augments={'STR+20','Accuracy+20 Attack+20','STR+10','Weapon skill damage +10%','Phys. dmg. taken-10%',}}, } sets.precast.WS['Savage Blade'] = { ammo = "Seething Bomblet +1", head="Mpaca's Cap", body="Nyame Mail", hands="Nyame Gauntlets", legs="Nyame Flanchard", feet="Hattori Kyahan +3", neck="Rep. Plat. Medal", waist={ name="Sailfi Belt +1", augments={'Path: A',}}, left_ear="Lugra Earring +1", right_ear="Moonshade Earring", left_ring="Regal Ring", right_ring="Gere Ring", back=Andartia.DEXWS } sets.precast.WS['Savage Blade'].MAXBUFF = set_combine(sets.precast.WS['Savage Blade'],{ neck="Ninja Nodowa +2", head="Hachiya Hatsu. +3", right_ring="Epaminondas's Ring", }) sets.precast.WS['Sanguine Blade'] = set_combine(sets.precast.WS['Blade: Ei'], {}) sets.WSDayBonus = {head="Gavialis Helm"} end ------------------------------------------------------------------------------------------------------------------- -- Job-specific hooks that are called to process player actions at specific points in time. ------------------------------------------------------------------------------------------------------------------- function job_pretarget(spell, action, spellMap, eventArgs) if state.Buff[spell.english] ~= nil then state.Buff[spell.english] = true end if (spell.type:endswith('Magic') or spell.type == "Ninjutsu") and buffactive.silence then cancel_spell() send_command('input /item "Echo Drops" ') end end -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast. function job_precast(spell, action, spellMap, eventArgs) if spell.skill == "Ninjutsu" and spell.target.type:lower() == 'self' and spellMap ~= "Utsusemi" then if spell.english == "Migawari" then classes.CustomClass = "Migawari" else classes.CustomClass = "SelfNinjutsu" end end -- Cancel Sneak before reapplying spectral jig -- if spell.name == 'Spectral Jig' and buffactive.sneak then -- send_command('cancel 71') -- end --Cancel Utsusemi Shadows during casting lower tier utsusemi spells. prevents re-casting utsusemi with more than 4 shadows remaining to prevent overbuffing if spell.name == 'Utsusemi: Ichi' then if buffactive['Copy Image'] or buffactive['Copy Image (2)'] or buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then send_command('cancel 66; cancel 444; cancel 445; cancel 446; cancel Copy Image; cancel Copy Image (2); cancel Copy Image (3);cancel Copy Image (4+)') --[[debug add_to_chat(123, '**!!CASTING UTSUSEMI: ICHI - REMOVING EXISTING SHADOWS!!**')]] end elseif spell.name == 'Utsusemi: Ni' then if buffactive['Copy Image'] or buffactive['Copy Image (2)'] or buffactive['Copy Image (3)'] or buffactive['Copy Image (4+)'] then send_command('cancel 66; cancel 444; cancel 445; cancel 446; cancel Copy Image; cancel Copy Image (2); cancel Copy Image (3);cancel Copy Image (4+)') --[[debug add_to_chat(123, '**!!CASTING UTSUSEMI: NI - REMOVING EXISTING SHADOWS!!**')]] end end end function job_post_precast(spell, action, spellMap, eventArgs) -- Ranged Attacks if spell.action_type == 'Ranged Attack' and state.OffenseMode ~= 'LowAcc' then equip(sets.SangeAmmo) end -- Protection for lag if spell.name == 'Sange' and player.equipment.ammo == gear.RegularAmmo then state.Buff.Sange = false eventArgs.cancel = true end if spell.type == 'WeaponSkill' then if spell.english == 'Blade: Shun' then if world.day_element == 'Fire' or world.day_element == 'Thunder' or world.day_element == 'Wind' or world.day_element == 'Light' then equip(sets.WSDayBonus) end elseif spell.english == 'Blade: Ku' then if world.day_element == 'Earth' or world.day_element == 'Light' or world.day_element == 'Dark' then equip(sets.WSDayBonus) end elseif spell.english == 'Blade: Jin' then if world.day_element == 'Thunder' or world.day_element == 'Wind' then equip(sets.WSDayBonus) end elseif spell.english == 'Exenterator' then if world.day_element == 'Earth' or world.day_element == 'Thunder' or world.day_element == 'Wind' then equip(sets.WSDayBonus) end elseif spell.english == 'Evisceration' then if world.day_element == 'Earth' or world.day_element == 'Light' or world.day_element == 'Dark' then equip(sets.WSDayBonus) end end end end -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done. function job_midcast(spell, action, spellMap, eventArgs) end -- Run after the general midcast() is done. -- eventArgs is the same one used in job_midcast, in case information needs to be persisted. function job_post_midcast(spell, action, spellMap, eventArgs) if state.Buff.Futae and spellMap == 'ElementalNinjutsu' then equip(sets.precast.JA['Futae']) end end -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done. function job_aftercast(spell, action, spellMap, eventArgs) if midaction() then return end -- Aftermath timer creation aw_custom_aftermath_timers_aftercast(spell) stance_status() end ------------------------------------------------------------------------------------------------------------------- -- Customization hooks for idle and melee sets, after they've been automatically constructed. ------------------------------------------------------------------------------------------------------------------- -- Called before the Include starts constructing melee/idle/resting sets. -- Can customize state or custom melee class values at this point. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done. function job_handle_equipping_gear(playerStatus, eventArgs) local lockables = T{'Mamool Ja Earring', 'Aptitude Mantle', 'Nexus Cape', 'Aptitude Mantle +1', 'Warp Ring', 'Vocation Ring', 'Reraise Earring', 'Capacity Ring', 'Trizek Ring', 'Echad Ring', 'Facility Ring', 'Dim. Ring (Holla)', 'Dim. Ring (Dem)', 'Dim. Ring (Mea)'} local watch_slots = T{'lear','rear','ring1','ring2','back','head'} -- for _,v in pairs(watch_slots) do -- if lockables:contains(player.equipment[v]) then -- disable(v) -- if has_charges(player.equipment[v]) and (not is_enchant_ready(player.equipment[v])) then -- enable(v) -- end -- else -- enable(v) -- end -- end ninbuff_status() stance_status() tool_counter() validateTextInformation() end -- Modify the default idle set after it was constructed. function customize_idle_set(idleSet) if state.HybridMode.value == 'DT' then if state.Buff.Migawari then idleSet = set_combine(idleSet, sets.buff.Migawari) else idleSet = set_combine(idleSet, sets.idle.PDT) end else idleSet = idleSet end if moving then idleSet=set_combine(idleSet, {feet=gear.MovementFeet.name}) end return idleSet end -- Modify the default melee set after it was constructed. function customize_melee_set(meleeSet) meleeSet = set_combine(meleeSet, select_ammo()) if state.TreasureMode.value == 'Fulltime' then meleeSet = set_combine(meleeSet, sets.TreasureHunter) end if player.equipment.main == 'Kannagi' then if buffactive['Aftermath: Lv.3'] then meleeSet = set_combine(meleeSet, sets.engaged.Kannagi.AM3) end end return meleeSet end ------------------------------------------------------------------------------------------------------------------- -- General hooks for other events. ------------------------------------------------------------------------------------------------------------------- -- Called when a player gains or loses a buff. -- buff == buff gained or lost -- gain == true if the buff was gained, false if it was lost. function job_buff_change(buff, gain) if state.Buff[buff] ~= nil then if not midaction() then handle_equipping_gear(player.status) end end if (buff == 'Innin' and gain or buffactive['Innin']) then state.CombatForm:set('Innin') if not midaction() then handle_equipping_gear(player.status) end else state.CombatForm:reset() if not midaction() then handle_equipping_gear(player.status) end end -- If we gain or lose any haste buffs, adjust which gear set we target. if S{'haste', 'march', 'mighty guard', 'embrava', 'haste samba', 'geo-haste', 'indi-haste'}:contains(buff:lower()) then determine_haste_group() if not midaction() then handle_equipping_gear(player.status) end end end function ninbuff_status() if buffactive['Copy Image'] then shadows='1 Shadow' elseif buffactive['Copy Image (2)'] then shadows='2 Shadows' elseif buffactive['Copy Image (3)'] then shadows='3 Shadows' elseif buffactive['Copy Image (4+)'] then shadows='4 Shadows' else shadows='No Shadows' end if buffactive['Migawari'] then migawari='Active' else migawari='Inactive' end end function job_status_change(newStatus, oldStatus, eventArgs) if newStatus == 'Engaged' then update_combat_form() end select_weapons() end function stance_status() if buffactive['Innin'] then stance = 'Innin' elseif buffactive['Yonin'] then stance = 'Yonin' else stance = 'No Stance' end end ------------------------------------------------------------------------------------------------------------------- -- User code that supplements self-commands. ------------------------------------------------------------------------------------------------------------------- -- Called by the default 'update' self-command. function job_update(cmdParams, eventArgs) select_weapons() select_ammo() select_movement_feet() determine_haste_group() update_combat_form() th_update(cmdParams, eventArgs) tool_counter() validateTextInformation() stance_status() end ------------------------------------------------------------------------------------------------------------------- -- Facing ratio ------------------------------------------------------------------------------------------------------------------- function facing_away(spell) if spell.target.type == 'MONSTER' then local dir = V{spell.target.x, spell.target.y} - V{player.x, player.y} local heading = V{}.from_radian(player.facing) local angle = V{}.angle(dir, heading):degree():abs() if angle > 90 then add_to_chat(8, 'Aborting... angle > 90') return true else return false end end end ------------------------------------------------------------------------------------------------------------------- -- Utility functions specific to this job. ------------------------------------------------------------------------------------------------------------------- -- State buff checks that will equip buff gear and mark the event as handled. function check_buff(buff_name, eventArgs) if state.Buff[buff_name] then equip(sets.buff[buff_name] or {}) if state.TreasureMode.value == 'SATA' or state.TreasureMode.value == 'Fulltime' then equip(sets.TreasureHunter) end eventArgs.handled = true end end -- Check for various actions that we've specified in user code as being used with TH gear. -- This will only ever be called if TreasureMode is not 'None'. -- Category and Param are as specified in the action event packet. function th_action_check(category, param) if category == 2 or -- any ranged attack --category == 4 or -- any magic action (category == 3 and param == 30) or -- Aeolian Edge (category == 6 and info.default_ja_ids:contains(param)) or -- Provoke, Animated Flourish (category == 14 and info.default_u_ja_ids:contains(param)) -- Quick/Box/Stutter Step, Desperate/Violent Flourish then return true end end function select_movement_feet() if world.time >= (17*60) or world.time < (7*60) then gear.MovementFeet.name = gear.NightFeet else gear.MovementFeet.name = gear.DayFeet end end function determine_haste_group() classes.CustomMeleeGroups:clear() h = 0 -- Spell Haste 15/30 if buffactive[33] then if state.HasteMode.value == 'Haste I' then h = h + 15 elseif state.HasteMode.value == 'Haste II' then h = h + 30 end end -- Geo Haste 29/35/40 (assumes dunna and idris have 900 skill) if buffactive[580] then if state.GeoMode.value == 'Trusts' then h = h + 29.9 elseif state.GeoMode.value == 'Dunna' then h = h + 35.4 elseif state.GeoMode.value == 'Idris' then h = h + 40 end end -- Mighty Guard 15 if buffactive[604] then h = h + 15 end -- Embrava 25.9 if buffactive.embrava then h = h + 25.9 end -- March(es) if buffactive.march then if state.MarchMode.value == 'Honor' then if buffactive.march == 2 then h = h + 27 + 16 elseif buffactive.march == 1 then h = h + 16 elseif buffactive.march == 3 then h = h + 27 + 17 + 16 end elseif state.MarchMode.value == 'Trusts' then if buffactive.march == 2 then h = h + 26 elseif buffactive.march == 1 then h = h + 16 elseif buffactive.march == 3 then h = h + 27 + 17 + 16 end elseif state.MarchMode.value == '7' then if buffactive.march == 2 then h = h + 27 + 17 elseif buffactive.march == 1 then h = h + 27 elseif buffactive.march == 3 then h = h + 27 + 17 + 16 end elseif state.MarchMode.value == '3' then if buffactive.march == 2 then h = h + 13.5 + 20.6 elseif buffactive.march == 1 then h = h + 20.6 elseif buffactive.march == 3 then h = h + 27 + 17 + 16 end end end -- Determine CustomMeleeGroups if h >= 15 and h < 30 then classes.CustomMeleeGroups:append('Haste_15') add_to_chat('Haste Group: 15% -- From Haste Total: '..h) elseif h >= 30 and h < 35 then classes.CustomMeleeGroups:append('Haste_30') add_to_chat('Haste Group: 30% -- From Haste Total: '..h) elseif h >= 35 and h < 40 then classes.CustomMeleeGroups:append('Haste_35') add_to_chat('Haste Group: 35% -- From Haste Total: '..h) elseif h >= 40 then classes.CustomMeleeGroups:append('MaxHaste') add_to_chat('Haste Group: Max -- From Haste Total: '..h) end end -- Handle notifications of general user state change. function job_state_change(stateField, newValue, oldValue) end -- Creating a custom spellMap, since Mote capitalized absorbs incorrectly function job_get_spell_map(spell, default_spell_map) if spell.type == 'Trust' then return 'Trust' end end -- Set eventArgs.handled to true if we don't want the automatic display to be run. function display_current_job_state(eventArgs) local msg = '' msg = msg .. 'Offense: '..state.OffenseMode.current if state.CombatWeapon.value == 'Kannagi' or state.CombatWeapon.value == 'GKT' then msg = msg..' --'..state.CombatWeapon.value..'-- ' end if state.DefenseMode.value ~= 'None' then local defMode = state[state.DefenseMode.value ..'DefenseMode'].current msg = msg .. ', Defense: '..state.DefenseMode.value..' '..defMode end if state.HasteMode.value ~= 'Normal' then msg = msg .. ', Haste: '..state.HasteMode.current end if state.MarchMode.value ~= 'Normal' then msg = msg .. ', March Mode: '..state.MarchMode.current end if state.RangedMode.value ~= 'Normal' then msg = msg .. ', Rng: '..state.RangedMode.current end if state.Kiting.value then msg = msg .. ', Kiting' end if state.PCTargetMode.value ~= 'default' then msg = msg .. ', Target PC: '..state.PCTargetMode.value end if state.SelectNPCTargets.value then msg = msg .. ', Target NPCs' end add_to_chat(123, msg) eventArgs.handled = true end -- Call from job_precast() to setup aftermath information for custom timers. function aw_custom_aftermath_timers_precast(spell) if spell.type == 'WeaponSkill' then info.aftermath = {} local empy_ws = "Blade: Hi" info.aftermath.weaponskill = empy_ws info.aftermath.duration = 0 info.aftermath.level = math.floor(player.tp / 1000) if info.aftermath.level == 0 then info.aftermath.level = 1 end if spell.english == empy_ws and player.equipment.main == 'Kannagi' then -- nothing can overwrite lvl 3 if buffactive['Aftermath: Lv.3'] then return end -- only lvl 3 can overwrite lvl 2 if info.aftermath.level ~= 3 and buffactive['Aftermath: Lv.2'] then return end -- duration is based on aftermath level info.aftermath.duration = 30 * info.aftermath.level end end end -- Call from job_aftercast() to create the custom aftermath timer. function aw_custom_aftermath_timers_aftercast(spell) -- prevent gear being locked when it's currently impossible to cast if not spell.interrupted and spell.type == 'WeaponSkill' and info.aftermath and info.aftermath.weaponskill == spell.english and info.aftermath.duration > 0 then local aftermath_name = 'Aftermath: Lv.'..tostring(info.aftermath.level) send_command('timers d "Aftermath: Lv.1"') send_command('timers d "Aftermath: Lv.2"') send_command('timers d "Aftermath: Lv.3"') send_command('timers c "'..aftermath_name..'" '..tostring(info.aftermath.duration)..' down abilities/aftermath'..tostring(info.aftermath.level)..'.png') info.aftermath = {} end end function select_ammo() if state.Buff.Sange then return sets.SangeAmmo else return sets.RegularAmmo end end function select_weapons() if player.equipment.main ~= state.mainWeapon.current then equip({Main=state.mainWeapon.current,sub=state.subWeapon.current}) end if player.equipment.sub ~= state.subWeapon.current then equip({Main=state.mainWeapon.current,sub=state.subWeapon.current}) end end function update_combat_form() --if state.Buff.Innin then -- state.CombatForm:set('Innin') --end --if player.equipment.main == 'Kannagi' then -- state.CombatWeapon:set('Kannagi') if player.equipment.main == 'Beryllium Tachi' then state.CombatWeapon:set('GKT') elseif player.equipment.main == "Hachimonji" then state.CombatWeapon:set('GKT') elseif player.equipment.main == "Karambit" then state.CombatWeapon:set('H2H') else state.CombatWeapon:reset() end end function job_self_command(cmdParams, eventArgs) if cmdParams[1] == 'GktMode' then state.mainWeapon:set('Hachimonji') state.subWeapon:set('Bloodrain strap') state.CombatWeapon:set('GKT') select_weapons() setupTextWindow() update_combat_form() elseif cmdParams[1] == 'KatanaMode' then state.mainWeapon:set('Heishi Shorinken') state.subWeapon:set('Yagyu Darkblade') state.CombatWeapon:reset() select_weapons() setupTextWindow() update_combat_form() elseif cmdParams[1] == 'SwordMode' then state.mainWeapon:set('Naegling') state.subWeapon:set("Uzura +2") state.CombatWeapon:reset() select_weapons() setupTextWindow() update_combat_form() elseif cmdParams[1] == 'runspeed' then runspeed:toggle() updateRunspeedGear(runspeed.value) end end -- Select default macro book on initial load or subjob change. function select_default_macro_book() -- Default macro set/book if player.sub_job == 'DNC' then set_macro_page(1, 8) elseif player.sub_job == 'THF' then set_macro_page(1, 8) else set_macro_page(1, 8) end end --NIN_HUD-- -------------------------------------------------------------------------------------------------------------- -- HUD STUFF -------------------------------------------------------------------------------------------------------------- require('logger') require('tables') require('strings') --global tool placeholder shihei = {} inoshi = {} chono = {} shika = {} happo = {} stance = {} shadows = {} Migiwari = {} --global colors color={} color.red ='(255,0,0)' color.yellow ='(0,255,0)' color.blue ='(0,0,255)' color.white ='(255,255,255)' color.black ='(0,0,0)' color.grey ='(175,175,175)' color.ltred ='(255,125,125)' color.ltblue ='(125,125,255)' color.ltyellow ='(125,255,125)' function tool_counter() local inv = windower.ffxi.get_items(0) -- get main inventory shihei.count = 0 shihei.id = 1179 inoshi.count = 0 inoshi.id = 2971 chono.count = 0 chono.id = 2973 shika.count = 0 shika.id = 2972 happo.count = 0 happo.id = 21353 for b,v in ipairs(inv) do if v.id == shihei.id then shihei.count = shihei.count + v.count elseif v.id == inoshi.id then inoshi.count = inoshi.count + v.count elseif v.id == chono.id then chono.count = chono.count + v.count elseif v.id == shika.id then shika.count = shika.count + v.count elseif v.id == happo.id then happo.count = happo.count + v.count end end --[[ Debug Viewer windower.add_to_chat(8,'shihei:' ..shihei.count) windower.add_to_chat(8,'inoshi:' ..inoshi.count) windower.add_to_chat(8,'chono:' ..chono.count) windower.add_to_chat(8,'shika:' ..shika.count) windower.add_to_chat(8,'happo:' ..happo.count) ]] end const_on = "\\cs(32, 255, 32)ON\\cr" const_off = "\\cs(255, 32, 32)OFF\\cr" hud_x_pos_og = hud_x_pos hud_y_pos_og = hud_y_pos hud_font_size_og = hud_font_size hud_padding_og = hud_padding hud_transparency_og = hud_transparency MB_Window = 0 time_start = 0 hud_padding = 10 -- Standard Mode hub_mode_std = [[\cs(204, 0, 0)KeyBinds \cs(255, 115, 0)GS Info: \cr \cs(175, 125, 225)${KB_C_MH}\cs(0, 150, 175)Main:\cr \cs(125,255,125)${player_current_mainweapon|Kannagi} \cs(175, 125, 225)${KB_C_OH}\cs(0, 150, 175)Sub:\cr \cs(125,255,125) ${player_current_subweapon|Kannagi} \cs(175, 125, 225)${KB_Idle_M}\cs(0, 150, 175)Idle Mode:\cr ${player_current_idle} \cs(175, 125, 225)${KB_Melee_M}\cs(0, 150, 175)Melee Mode:\cr ${player_current_melee} \cs(175, 125, 225)${KB_WS_M}\cs(0, 150, 175)WS Mode:\cr ${player_current_ws} \cs(175, 125, 225)${KB_PDT_M}\cs(0, 150, 175)Hybrid Mode:\cr ${player_current_Hybrid} \cs(175, 125, 225)${KB_RA_M}\cs(0, 150, 175)Ranged Mode:\cr ${player_current_Ranged} \cs(175, 125, 225)${KB_CAST_M}\cs(0, 150, 175)Casting Mode:\cr ${player_current_casting} \cs(175, 125, 225)${KB_Haste_M}\cs(0, 150, 175)Haste Mode:\cr ${player_current_Haste} \cs(175, 125, 225)${KB_March_M}\cs(0, 150, 175)March Mode:\cr ${player_current_March} \cs(204, 0, 0)Item \cs(255, 115, 0) Count: \cr \cs(255, 150, 0) Shihei:\cr \cs${shihei_color} ${Shihei_Left} \cs(255, 150, 0) Inoshinofuda:\cr \cs${ino_color} ${inoshi_Left} \cs(255, 150, 0) Shikanofuda:\cr \cs${shika_color} ${shika_left} \cs(255, 150, 0) Chonofuda:\cr \cs${chono_color} ${chono_left} \cs(255, 150, 0) Happo Shuriken:\cr \cs${happo_color} ${happo_left} \cs(204, 0, 0)Job Info\cs(255, 115, 0) Detail: \cr \cs(255, 150, 200) Stance:\cr \cs${stance_color} ${stance_value} \cs(255, 150, 200) Shadows:\cr \cs${shadow_color} ${shadow_value} \cs(255, 150, 200) Migiwari:\cr \cs${migawari_color} ${migawari_value} ]] -- init style hub_mode = hub_mode_std hub_options = hub_options_std hub_job = hub_job_std hub_battle = hub_battle_std KB = {} KB['KB_C_MH'] = ' (NUM /) ' KB['KB_C_OH'] = ' (NUM *) ' KB['KB_Idle_M'] = ' (NUM 6) ' KB['KB_Melee_M']= ' (NUM 7) ' KB['KB_WS_M'] = ' (NUM 5) ' KB['KB_PDT_M'] = ' (NUM 8) ' KB['KB_RA_M'] = ' (NUM 9) ' KB['KB_CAST_M'] = ' (NUM 4) ' KB['KB_Haste_M']= ' (NUM -) ' KB['KB_March_M']= ' (NUM +) ' function validateTextInformation() local stancecolor ={} local shiheicolor ={} local inocolor ={} local chonocolor ={} local shikacolor ={} local happocolor ={} local shadowcolor ={} local migawaricolor ={} if stance == "No Stance" then stancecolor = color.grey elseif stance == "Innin" then stancecolor = color.ltblue elseif stance == "Yonin" then stancecolor = color.ltred else stancecolor=color.white end if shihei.count ~= nil then if shihei.count == 0 then shiheicolor = color.red elseif shihei.count <= 20 then shiheicolor = color.ltred elseif shihei.count <= 50 then shiheicolor = color.ltyellow else shiheicolor = color.white end else shiheicolor = color.white end if inoshi.count ~= nil then if inoshi.count == 0 then inocolor = color.red elseif inoshi.count <= 20 then inocolor = color.ltred elseif inoshi.count <= 50 then inocolor = color.ltyellow else inocolor = color.white end else inocolor = color.white end if shika.count ~= nil then if shika.count == 0 then shikacolor = color.red elseif shika.count <= 20 then shikacolor = color.ltred elseif shika.count <= 50 then shikacolor = color.ltyellow else shikacolor = color.white end else shikacolor = color.white end if chono.count ~= nil then if chono.count == 0 then chonocolor = color.red elseif chono.count <= 20 then chonocolor = color.ltred elseif chono.count <= 50 then chonocolor = color.ltyellow else chonocolor = color.white end else chonocolor = color.white end if happo.count ~=nil then if happo.count == 0 then happocolor = color.red elseif happo.count <= 20 then happocolor = color.ltred elseif happo.count <= 50 then happocolor = color.ltyellow else happocolor = color.white end else happocolor = color.white end if shadows =='1 Shadow' then shadowcolor=color.ltred elseif shadows=='2 Shadows' then shadowcolor=color.ltyellow elseif shadows=='3 Shadows' then shadowcolor=color.ltgreen elseif shadows=='4 Shadows' then shadowcolor=color.ltblue elseif shadows=='No Shadows' then shadowcolor=color.red else shadowcolor=color.white end if migawari=='Active' then migawaricolor=color.ltblue elseif migawari=='Inactive' then migawaricolor=color.red else migawaricolor=color.white end --Mode Information main_text_hub.player_current_idle = state.IdleMode.current main_text_hub.player_current_melee = state.OffenseMode.current main_text_hub.player_current_ws = state.WeaponskillMode.current main_text_hub.player_current_mainweapon = state.mainWeapon.current main_text_hub.player_current_subweapon = state.subWeapon.current main_text_hub.player_current_Hybrid = state.HybridMode.current main_text_hub.player_current_Ranged = state.RangedMode.current main_text_hub.player_current_casting = state.CastingMode.current main_text_hub.player_current_Haste = state.HasteMode.value main_text_hub.player_current_March = state.MarchMode.current --inventory counts main_text_hub.Shihei_Left=shihei.count main_text_hub.inoshi_Left=inoshi.count main_text_hub.chono_left=chono.count main_text_hub.shika_left=shika.count main_text_hub.happo_left=happo.count --job details main_text_hub.stance_value=stance main_text_hub.shadow_value=shadows main_text_hub.migawari_value=migawari main_text_hub.stance_color=stancecolor main_text_hub.shihei_color=shiheicolor main_text_hub.ino_color=inocolor main_text_hub.chono_color=chonocolor main_text_hub.shika_color=shikacolor main_text_hub.happo_color=happocolor main_text_hub.shadow_color=shadowcolor main_text_hub.migawari_color=migawaricolor end function setupTextWindow() local default_settings = {} default_settings.pos = {} default_settings.pos.x = hud_x_pos default_settings.pos.y = hud_y_pos default_settings.bg = {} default_settings.bg.alpha = hud_transparency default_settings.bg.red = 30 default_settings.bg.green = 20 default_settings.bg.blue = 55 default_settings.bg.visible = true default_settings.flags = {} default_settings.flags.right = false default_settings.flags.bottom = false default_settings.flags.bold = true default_settings.flags.draggable = hud_draggable default_settings.flags.italic = false default_settings.padding = hud_padding default_settings.text = {} default_settings.text.size = hud_font_size default_settings.text.font = hud_font default_settings.text.fonts = {} default_settings.text.alpha = 255 default_settings.text.red = 147 default_settings.text.green = 161 default_settings.text.blue = 161 default_settings.text.stroke = {} default_settings.text.stroke.width = 1 default_settings.text.stroke.alpha = 255 default_settings.text.stroke.red = 0 default_settings.text.stroke.green = 0 default_settings.text.stroke.blue = 0 --Creates the initial Text Object will use to create the different sections in if not (main_text_hub == nil) then texts.destroy(main_text_hub) end main_text_hub = texts.new('', default_settings, default_settings) --Appends the different sections to the main_text_hub texts.append(main_text_hub, hub_mode) texts.update(main_text_hub, KB) --We then do a quick validation validateTextInformation() --Finally we show this to the user main_text_hub:show() end --[AUTO MOVEMENT SPEED LOGIC] runspeed = M(false) mov = {counter=0} if player and player.index and windower.ffxi.get_mob_by_index(player.index) then mov.x = windower.ffxi.get_mob_by_index(player.index).x mov.y = windower.ffxi.get_mob_by_index(player.index).y mov.z = windower.ffxi.get_mob_by_index(player.index).z end moving = false windower.raw_register_event('prerender',function() mov.counter = mov.counter + 1; if mov.counter>10 then local pl = windower.ffxi.get_mob_by_index(player.index) if pl and pl.x and mov.x then local movement = math.sqrt( (pl.x-mov.x)^2 + (pl.y-mov.y)^2 + (pl.z-mov.z)^2 ) > 0.1 if movement and not moving then send_command('gs c runspeed') moving = true elseif not movement and moving then send_command('gs c runspeed') moving = false end end if pl and pl.x then mov.x = pl.x mov.y = pl.y mov.z = pl.z end mov.counter = 0 end end) function updateRunspeedGear() handle_equipping_gear(player.status, pet.status) end