Pastebin
API
tools
faq
paste
Login
Sign up
Please fix the following errors:
New Paste
Syntax Highlighting
------------------------------------------------------------------------------------------------------------------- -- 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 <t>') 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" <me>') 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
Optional Paste Settings
Category:
None
Cryptocurrency
Cybersecurity
Fixit
Food
Gaming
Haiku
Help
History
Housing
Jokes
Legal
Money
Movies
Music
Pets
Photo
Science
Software
Source Code
Spirit
Sports
Travel
TV
Writing
Tags:
Syntax Highlighting:
None
Bash
C
C#
C++
CSS
HTML
JSON
Java
JavaScript
Lua
Markdown (PRO members only)
Objective C
PHP
Perl
Python
Ruby
Swift
4CS
6502 ACME Cross Assembler
6502 Kick Assembler
6502 TASM/64TASS
ABAP
AIMMS
ALGOL 68
APT Sources
ARM
ASM (NASM)
ASP
ActionScript
ActionScript 3
Ada
Apache Log
AppleScript
Arduino
Asymptote
AutoIt
Autohotkey
Avisynth
Awk
BASCOM AVR
BNF
BOO
Bash
Basic4GL
Batch
BibTeX
Blitz Basic
Blitz3D
BlitzMax
BrainFuck
C
C (WinAPI)
C Intermediate Language
C for Macs
C#
C++
C++ (WinAPI)
C++ (with Qt extensions)
C: Loadrunner
CAD DCL
CAD Lisp
CFDG
CMake
COBOL
CSS
Ceylon
ChaiScript
Chapel
Clojure
Clone C
Clone C++
CoffeeScript
ColdFusion
Cuesheet
D
DCL
DCPU-16
DCS
DIV
DOT
Dart
Delphi
Delphi Prism (Oxygene)
Diff
E
ECMAScript
EPC
Easytrieve
Eiffel
Email
Erlang
Euphoria
F#
FO Language
Falcon
Filemaker
Formula One
Fortran
FreeBasic
FreeSWITCH
GAMBAS
GDB
GDScript
Game Maker
Genero
Genie
GetText
Go
Godot GLSL
Groovy
GwBasic
HQ9 Plus
HTML
HTML 5
Haskell
Haxe
HicEst
IDL
INI file
INTERCAL
IO
ISPF Panel Definition
Icon
Inno Script
J
JCL
JSON
Java
Java 5
JavaScript
Julia
KSP (Kontakt Script)
KiXtart
Kotlin
LDIF
LLVM
LOL Code
LScript
Latex
Liberty BASIC
Linden Scripting
Lisp
Loco Basic
Logtalk
Lotus Formulas
Lotus Script
Lua
M68000 Assembler
MIX Assembler
MK-61/52
MPASM
MXML
MagikSF
Make
MapBasic
Markdown (PRO members only)
MatLab
Mercury
MetaPost
Modula 2
Modula 3
Motorola 68000 HiSoft Dev
MySQL
Nagios
NetRexx
Nginx
Nim
NullSoft Installer
OCaml
OCaml Brief
Oberon 2
Objeck Programming Langua
Objective C
Octave
Open Object Rexx
OpenBSD PACKET FILTER
OpenGL Shading
Openoffice BASIC
Oracle 11
Oracle 8
Oz
PARI/GP
PCRE
PHP
PHP Brief
PL/I
PL/SQL
POV-Ray
ParaSail
Pascal
Pawn
Per
Perl
Perl 6
Phix
Pic 16
Pike
Pixel Bender
PostScript
PostgreSQL
PowerBuilder
PowerShell
ProFTPd
Progress
Prolog
Properties
ProvideX
Puppet
PureBasic
PyCon
Python
Python for S60
QBasic
QML
R
RBScript
REBOL
REG
RPM Spec
Racket
Rails
Rexx
Robots
Roff Manpage
Ruby
Ruby Gnuplot
Rust
SAS
SCL
SPARK
SPARQL
SQF
SQL
SSH Config
Scala
Scheme
Scilab
SdlBasic
Smalltalk
Smarty
StandardML
StoneScript
SuperCollider
Swift
SystemVerilog
T-SQL
TCL
TeXgraph
Tera Term
TypeScript
TypoScript
UPC
Unicon
UnrealScript
Urbi
VB.NET
VBScript
VHDL
VIM
Vala
Vedit
VeriLog
Visual Pro Log
VisualBasic
VisualFoxPro
WHOIS
WhiteSpace
Winbatch
XBasic
XML
XPP
Xojo
Xorg Config
YAML
YARA
Z80 Assembler
ZXBasic
autoconf
jQuery
mIRC
newLISP
q/kdb+
thinBasic
Paste Expiration:
Never
Burn after read
10 Minutes
1 Hour
1 Day
1 Week
2 Weeks
1 Month
6 Months
1 Year
Paste Exposure:
Public
Unlisted
Private
Folder:
(members only)
Password
NEW
Enabled
Disabled
Burn after read
NEW
Paste Name / Title:
Create New Paste
Hello
Guest
Sign Up
or
Login
Sign in with Facebook
Sign in with Twitter
Sign in with Google
You are currently not logged in, this means you can not edit or delete anything you paste.
Sign Up
or
Login
Public Pastes
Crypto admin access
32 min ago | 0.43 KB
Free Crypto Method
CSS | 32 min ago | 0.70 KB
Documents
32 min ago | 0.43 KB
+12,000$ in 2 days
CSS | 32 min ago | 0.71 KB
Art school
9 hours ago | 1.06 KB
Untitled
13 hours ago | 6.00 KB
deforestation
1 day ago | 14.70 KB
Untitled
1 day ago | 0.32 KB
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the
Cookies Policy
.
OK, I Understand
Not a member of Pastebin yet?
Sign Up
, it unlocks many cool features!