Advertisement
Amadis

RUN lua

May 26th, 2014
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 22.85 KB | None | 0 0
  1. -- *** Credit goes to Flippant for helping me with Gearswap *** --
  2. -- ** I Use Some of Motenten's Functions ** --
  3. -- Last Updated: 05/05/14 12:00 AM *Fixed Magic Sets* --
  4.  
  5. function get_sets()
  6.     AccIndex = 1
  7.     AccArray = {"LowACC","MidACC","HighACC"} -- 3 Levels Of Accuracy Sets For TP/WS/Hybrid. Default ACC Set Is LowACC. Add More ACC Sets If Needed Then Create Your New ACC Below --
  8.     IdleIndex = 1
  9.     IdleArray = {"Movement","Regen"} -- Default Idle Set Is Movement --
  10.     Armor = 'None'
  11.     target_distance = 6 -- Set Default Distance Here --
  12.     select_default_macro_book() -- Change Default Macro Book At The End --
  13.  
  14.     sc_map = {SC1="Resolution", SC2="Berserk", SC3="Aggressor"} -- 3 Additional Binds. Can Change Whatever JA/WS/Spells You Like Here. Remember Not To Use Spaces. --
  15.  
  16.     -- Idle/Town Sets --
  17.     sets.Idle = {}
  18.         sets.Idle.Regen = {
  19.             ammo="Iron Gobbet",
  20.             head="Wivre Hairpin",
  21.             neck="Wiglen Gorget",
  22.             ear1="Ethereal Earring",
  23.             ear2="Darkness Earring",
  24.             body="Runeist Coat +1",
  25.             hands="Runeist mitons +1",
  26.             ring1="Defending Ring",
  27.             ring2="Paguroidea Ring",
  28.             back="Evasionist's Cape",
  29.             waist="Flume Belt",
  30.             legs="Rune. Trousers +1",
  31.             feet="Skd. Jambeaux +1"}
  32.         sets.Idle.Movement = set_combine(sets.Idle.Regen,{})
  33.  
  34.     -- TP Sets --
  35.         sets.TP = {
  36.                         ammo="Vanir Battery",
  37.                         head="Iuitl Headgear +1",
  38.                         neck="Asperity Necklace",
  39.                         ear1="Steelflash Earring",
  40.                         ear2="Bladeborn Earring",
  41.                         body="Thaumas Coat",
  42.                         hands="Qaaxo Mitaines",
  43.                         ring1="Rajas Ring",
  44.                         ring2="Epona's Ring",
  45.                         back="Atheling Mantle",
  46.                         waist="Windbuffet Belt",
  47.                         legs="Quiahuiz Trousers",
  48.                         feet="Qaaxo Leggings"}
  49.         sets.TP.MidACC = set_combine(sets.TP,{
  50.                         ammo="Honed Tathlum",
  51.                         back="Letalis Mantle",
  52.                         legs="Manibozho Brais",
  53.                         feet="Manibozho boots"})
  54.         sets.TP.HighACC = set_combine(sets.TP.MidACC,{
  55.                         head="Whirlpool Mask",
  56.                         neck="Iqabi Necklace",
  57.                         body="Manibozho Jerkin",
  58.                         hands="Buremte Gloves",
  59.                         ring1="Patricius Ring",
  60.                         waist="Hurch'lan Sash"})
  61.  
  62.     -- PDT/MDT Sets --
  63.         sets.PDT = {
  64.                         ammo="Iron Gobbet",
  65.                         head="Fu. bandeau +1",
  66.                         neck="Twilight Torque",
  67.                         ear1="Ethereal Earring",
  68.                         ear2="Darkness Earring",
  69.                         body="Futhark Coat +1",
  70.                         hands="Umuthi Gloves",
  71.                         ring1="Defending Ring",
  72.                         ring2="Patricius Ring",
  73.                         back="Evasionist's Cape",
  74.                         waist="Flume Belt",
  75.                         legs="Rune. Trousers +1",
  76.                         feet="Iuitl Gaiters +1"}
  77.  
  78.         sets.MDT = set_combine(sets.PDT,{
  79.                         ammo="Vanir Battery",
  80.                         ear2="Sanare Earring",
  81.                         ring2="Shadow Ring",
  82.                         back="Engulfer Cape"})
  83.  
  84.         -- Hybrid Sets --
  85.         sets.TP.Hybrid = set_combine(sets.PDT,{})
  86.         sets.TP.Hybrid.MidACC = set_combine(sets.TP.Hybrid,{})
  87.         sets.TP.Hybrid.HighACC = set_combine(sets.TP.Hybrid.MidACC,{})
  88.  
  89.     -- WS Base Set --
  90.     sets.WS = {
  91.                         ammo="Aqreqaq Bomblet",
  92.                         head="Whirlpool Mask",
  93.                         neck="Asperity Necklace",
  94.                         ear1="Moonshade Earring",
  95.                         ear2="Brutal Earring",
  96.                         body="Manibozho Jerkin",
  97.                         hands="Qaaxo Mitaines",
  98.                         ring1="Pyrosoul Ring",
  99.                         ring2="Epona's Ring",
  100.                         back="Atheling Mantle",
  101.                         waist="Windbuffet Belt",
  102.                         legs="Manibozho Brais",
  103.                         feet="Qaaxo Leggings"}
  104.  
  105.     -- WS Sets --
  106.         sets.WS.Resolution = {
  107.                         ammo="Aqreqaq Bomblet",
  108.                         head="Whirlpool Mask",
  109.                         neck="Soil Gorget",
  110.                         ear1="Moonshade Earring",
  111.                         ear2="Brutal Earring",
  112.                         body="Manibozho Jerkin",
  113.                         hands="Qaaxo Mitaines",
  114.                         ring1="Pyrosoul Ring",
  115.                         ring2="Epona's Ring",
  116.                         back="Atheling Mantle",
  117.                         waist="Soil Belt",
  118.                         legs="Manibozho Brais",
  119.                         feet="Qaaxo Leggings"}
  120.         sets.WS.Resolution.MidACC = set_combine(sets.WS.Resolution,{
  121.                         ammo="Honed Tathlum",
  122.                         back="Letalis Mantle"})
  123.         sets.WS.Resolution.HighACC = set_combine(sets.WS.Resolution.MidACC,{})
  124.  
  125.         sets.WS.Dimidiation = {
  126.                         ammo="Jukukik Feather",
  127.                         head="Uk'uxkaj Cap",
  128.                         neck="Light Gorget",
  129.                         ear1="Moonshade Earring",
  130.                         ear2="Brutal Earring",
  131.                         body="Futhark Coat +1",
  132.                         hands="Buremte Gloves",
  133.                         ring1="Rajas Ring",
  134.                         ring2="Epona's Ring",
  135.                         back="Atheling Mantle",
  136.                         waist="Windbuffet Belt",
  137.                         legs="Manibozho Brais",
  138.                         feet="Qaaxo Leggings"}
  139.         sets.WS.Dimidiation.MidACC = set_combine(sets.WS.Dimidiation,{
  140.                         ammo="Honed Tathlum",
  141.                         back="Letalis Mantle"})
  142.         sets.WS.Dimidiation.HighACC = set_combine(sets.WS.Dimidiation.MidACC,{})
  143.                
  144.     sets.WS.Requiescat = {}
  145.     sets.WS.Requiescat.MidACC = set_combine(sets.WS.Requiescat,{})
  146.     sets.WS.Requiescat.HighACC = set_combine(sets.WS.Requiescat.MidACC,{})
  147.  
  148.     -- Enmity Set --
  149.     sets.Enmity = {
  150.                         ammo="Iron Gobbet",
  151.                         neck="Invidia Torque",
  152.                         ear1="Trux Earring",
  153.                         ear2="Friomisi Earring",
  154.                         hands="Futhark Mitons",
  155.                         ring1="Eihwaz Ring",
  156.                         ring2="Vexer Ring +1",
  157.                         waist="Goading Belt"}
  158.  
  159.     -- JA Sets --
  160.     sets.JA = {}
  161.         sets.JA.Vallation = set_combine(sets.Enmity,{
  162.                         body="Runeist Coat +1",
  163.                         legs="Futhark Trousers"})
  164.                        
  165.         sets.JA.Swordplay = set_combine(sets.Enmity,{
  166.                         hands="Futhark Mitons"})
  167.                        
  168.         sets.JA.Lunge = set_combine(sets.Enmity,{
  169.                         ammo="Erlene's notebook",
  170.                         head="A'as Circlet",
  171.                         neck="Eddy Necklace",
  172.                         ear1="Friomisi Earring",
  173.                         ear2="Crematio Earring",
  174.                         body="Vanir Cotehardie",
  175.                         hands="Spolia Cuffs",
  176.                         ring2="Acumen Ring",
  177.                         back="Evasionist's Cape",
  178.                         legs="Shned. Tights +1",
  179.                         feet="Manabyss Pigaches"})
  180.                        
  181.         sets.JA.Swipe = set_combine(sets.Enmity,{
  182.                         ammo="Erlene's notebook",
  183.                         head="A'as Circlet",
  184.                         neck="Eddy Necklace",
  185.                         ear1="Friomisi Earring",
  186.                         ear2="Crematio Earring",
  187.                         body="Vanir Cotehardie",
  188.                         hands="Spolia Cuffs",
  189.                         ring2="Acumen Ring",
  190.                         back="Evasionist's Cape",
  191.                         legs="Shned. Tights +1",
  192.                         feet="Manabyss Pigaches"})
  193.                        
  194.         sets.JA.Pflug = set_combine(sets.Enmity,{
  195.                         feet="Runeist Bottes +1"})
  196.                        
  197.         sets.JA.Valiance = set_combine(sets.Enmity,{
  198.                         body="Runeist Coat +1",
  199.                         Legs="Futhark Trousers"})
  200.                        
  201.         sets.JA.Embolden = set_combine(sets.Enmity)
  202.        
  203.         sets.JA.Gambit = set_combine(sets.Enmity,{
  204.                         hands="Runeist Mitons +1"})
  205.                        
  206.         sets.JA.Liement = set_combine(sets.Enmity,{
  207.                         body="Futhark Coat +1"})
  208.        
  209.         sets.JA["One For All"] = set_combine(sets.Enmity)
  210.        
  211.         sets.JA.Battuta = set_combine(sets.Enmity,{
  212.                         head="Fu. Bandeau +1"})
  213.                        
  214.         sets.JA.Rayke = set_combine(sets.Enmity,{
  215.                         feet="Futhark Boots"})
  216.  
  217.     -- Waltz Set --
  218.     sets.Waltz = {
  219.                         ammo="Iron Gobbet",
  220.                         head="Rune. Bandeau +1",
  221.                         neck="Invidia Torque",
  222.                         ear1="Trux Earring",
  223.                         ear2="Friomisi Earring",
  224.                         body="Vanir Cotehardie",
  225.                         hands="Runeist Mitons +1",
  226.                         ring1="Eihwaz Ring",
  227.                         ring2="Vexer Ring +1",
  228.                         back="Evasionist's Cape",
  229.                         waist="Goading Belt",
  230.                         legs="Rune. Trousers",
  231.                         feet="Runeist Bottes +1"}
  232.  
  233.     sets.Precast = {}
  234.     -- Fastcast Set --
  235.     sets.Precast.FastCast = {                        
  236.                         ammo="Impatiens",
  237.                         head="Runeist Bandeau +1",
  238.                         neck="Orunmila's Torque",
  239.                         ear1="Loquacious Earring",
  240.                         ear2="Darkness Earring",
  241.                         body="Vanir Cotehardie",
  242.                         hands="Thaumas Gloves",
  243.                         ring1="Veneficium Ring",
  244.                         ring2="Prolix Ring",
  245.                         back="Evasionist's Cape",
  246.                         waist="Flume Belt",
  247.                         legs="Iuitl Tights",
  248.                         feet="Iuitl Gaiters +1"}
  249.  
  250.     -- Utsusemi Precast Set --
  251.     sets.Precast.Utsusemi = set_combine(sets.Precast.FastCast,{})
  252.  
  253.     -- Precast Enhancing Magic --
  254.     sets.Precast['Enhancing Magic'] = set_combine(sets.Precast.FastCast,{
  255.                         waist="Siegel Sash",
  256.                         legs="Futhark Trousers"})
  257.  
  258.     -- Midcast Base Set --
  259.     sets.Midcast = {                        
  260.                         ammo="Impatiens",
  261.                         head="Runeist Bandeau +1",
  262.                         neck="Orunmila's Torque",
  263.                         ear1="Loquacious Earring",
  264.                         ear2="Darkness Earring",
  265.                         body="Vanir Cotehardie",
  266.                         hands="Thaumas Gloves",
  267.                         ring1="Defending Ring",
  268.                         ring2="Prolix Ring",
  269.                         back="Evasionist's Cape",
  270.                         waist="Flume Belt",
  271.                         legs="Iuitl Tights",
  272.                         feet="Iuitl Gaiters +1"}
  273.  
  274.     -- Magic Haste Set --
  275.     sets.Midcast.Haste = set_combine(sets.PDT,{                        
  276.                         ammo="Impatiens",
  277.                         head="Runeist Bandeau +1",
  278.                         neck="Orunmila's Torque",
  279.                         ear1="Loquacious Earring",
  280.                         ear2="Darkness Earring",
  281.                         body="Vanir Cotehardie",
  282.                         hands="Thaumas Gloves",
  283.                         ring1="Defending Ring",
  284.                         ring2="Prolix Ring",
  285.                         back="Evasionist's Cape",
  286.                         waist="Flume Belt",
  287.                         legs="Iuitl Tights",
  288.                         feet="Iuitl Gaiters +1"})
  289.  
  290.     -- Flash Set --
  291.     sets.Midcast.Flash = {
  292.                         ammo="Iron Gobbet",
  293.                         neck="Invidia Torque",
  294.                         ear1="Trux Earring",
  295.                         ear2="Friomisi Earring",
  296.                         hands="Futhark Mitons",
  297.                         ring1="Eihwaz Ring",
  298.                         ring2="Vexer Ring +1",
  299.                         belt="Goading Belt"}
  300.  
  301.     -- Enhancing Magic --
  302.     sets.Midcast['Enhancing Magic'] = {                        
  303.                         head="Rune. Bandeau +1",
  304.                         neck="Colossus's Torque",
  305.                         ear1="Ethereal Earring",
  306.                         ear2="Darkness Earring",
  307.                         body="Futhark Coat +1",
  308.                         hands="Runeist Mitons +1",
  309.                         ring1="Defending Ring",
  310.                         ring2="Patricius Ring",
  311.                         back="Merciful Cape",
  312.                         waist="Olympus Sash",
  313.                         legs="Portent Pants",
  314.                         feet="Iuitl Gaiters +1"}
  315.  
  316.     -- Stoneskin --
  317.     sets.Midcast.Stoneskin = set_combine(sets.Midcast['Enhancing Magic'],{waist="Siegel Sash"})
  318.  
  319.     -- Phalanx --
  320.     sets.Midcast.Phalanx = set_combine(sets.Midcast['Enhancing Magic'],{                        
  321.                         head="Fu. bandeau +1",
  322.                         neck="Colossus's Torque",
  323.                         ear1="Ethereal Earring",
  324.                         ear2="Darkness Earring",
  325.                         body="Futhark Coat +1",
  326.                         hands="Runeist Mitons +1",
  327.                         ring1="Defending Ring",
  328.                         ring2="Patricius Ring",
  329.                         back="Merciful Cape",
  330.                         waist="Olympus Sash",
  331.                         legs="Portent Pants",
  332.                         feet="Iuitl Gaiters +1"})
  333.  
  334.     -- Regen --
  335.     sets.Midcast.Regen = {
  336.                         head="Rune. Bandeau +1",
  337.                         legs="Futhark Trousers"}
  338.  
  339.     -- Divine Magic --
  340.     sets.Midcast['Divine Magic'] = {}
  341. end
  342.  
  343. function pretarget(spell,action)
  344.     if (spell.type:endswith('Magic') or spell.type == "Ninjutsu") and buffactive.silence then -- Auto Use Echo Drops If You Are Silenced --
  345.         cancel_spell()
  346.         send_command('input /item "Echo Drops" <me>')
  347.     elseif spell.english == "Berserk" and buffactive.Berserk then -- Change Berserk To Aggressor If Berserk Is On --
  348.         cancel_spell()
  349.         send_command('Aggressor')
  350.     elseif spell.type == "WeaponSkill" and spell.target.distance > target_distance and player.status == 'Engaged' then -- Cancel WS If You Are Out Of Range --
  351.         cancel_spell()
  352.         add_to_chat(123, spell.name..' Canceled: [Out of Range]')
  353.         return
  354.     end
  355. end
  356.  
  357. function precast(spell,action)
  358.     if spell.type == "WeaponSkill" then
  359.         if player.status ~= 'Engaged' then -- Cancel WS If You Are Not Engaged. Can Delete It If You Don't Need It --
  360.             cancel_spell()
  361.             add_to_chat(123,'Unable To Use WeaponSkill: [Disengaged]')
  362.             return
  363.         else
  364.             equipSet = sets.WS
  365.             if equipSet[spell.english] then
  366.                 equipSet = equipSet[spell.english]
  367.             end
  368.             if equipSet[AccArray[AccIndex]] then
  369.                 equipSet = equipSet[AccArray[AccIndex]]
  370.             end
  371.             equip(equipSet)
  372.         end
  373.     elseif spell.type == "JobAbility" or spell.type == "Ward" or spell.type == "Effusion" then
  374.         if sets.JA[spell.english] then
  375.             equip(sets.JA[spell.english])
  376.         end
  377.     elseif spell.type == "Rune" then
  378.         equip(sets.Enmity)
  379.     elseif spell.type:endswith('Magic') or spell.type == "Ninjutsu" then
  380.         if buffactive.silence or spell.target.distance > 16+target_distance then -- Cancel Magic or Ninjutsu If You Are Silenced or Out of Range --
  381.             cancel_spell()
  382.             add_to_chat(123, spell.name..' Canceled: [Silenced or Out of Casting Range]')
  383.             return
  384.         else
  385.             if string.find(spell.english,'Utsusemi') then
  386.                 if buffactive['Copy Image (3)'] or buffactive['Copy Image (4)'] then
  387.                     cancel_spell()
  388.                     add_to_chat(123, spell.english .. ' Canceled: [3+ Images]')
  389.                     return
  390.                 else
  391.                     equip(sets.Precast.Utsusemi)
  392.                 end
  393.             elseif sets.Precast[spell.skill] then
  394.                 equip(sets.Precast[spell.skill])
  395.             else
  396.                 equip(sets.Precast.FastCast)
  397.             end
  398.         end
  399.     elseif spell.type == "Waltz" then
  400.         refine_waltz(spell,action)
  401.         equip(sets.Waltz)
  402.     elseif spell.english == 'Spectral Jig' and buffactive.Sneak then
  403.         cast_delay(0.2)
  404.         send_command('cancel Sneak')
  405.     end
  406. end
  407.  
  408. function midcast(spell,action)
  409.     equipSet = {}
  410.     if spell.type:endswith('Magic') or spell.type == 'Ninjutsu' then
  411.         equipSet = sets.Midcast
  412.         if equipSet[spell.english] then
  413.             equipSet = equipSet[spell.english]
  414.         elseif string.find(spell.english,'Protect') or string.find(spell.english,'Shell') then
  415.             equipSet = equipSet.Haste
  416.             if spell.target.name == player.name then
  417.                 equipSet = set_combine(equipSet,{ring2="Sheltered Ring"})
  418.             end
  419.         elseif spell.english == "Stoneskin" then
  420.             if buffactive.Stoneskin then
  421.                 send_command('@wait 2.8;cancel stoneskin')
  422.             end
  423.             equipSet = equipSet.Stoneskin
  424.         elseif spell.english == "Sneak" then
  425.             if spell.target.name == player.name and buffactive['Sneak'] then
  426.                 send_command('cancel sneak')
  427.             end
  428.             equipSet = equipSet.Haste
  429.         elseif string.find(spell.english,'Spikes') then
  430.             equipSet = equipSet.Haste
  431.         elseif string.find(spell.english,'Utsusemi') then
  432.             if spell.english == 'Utsusemi: Ichi' and (buffactive['Copy Image'] or buffactive['Copy Image (2)']) then
  433.                 send_command('@wait 1.7;cancel Copy Image*')
  434.             end
  435.             equipSet = equipSet.Haste
  436.         elseif spell.english == 'Monomi: Ichi' then
  437.             if buffactive['Sneak'] then
  438.                 send_command('@wait 1.7;cancel sneak')
  439.             end
  440.             equipSet = equipSet.Haste
  441.         elseif equipSet[spell.skill] then
  442.             equipSet = equipSet[spell.skill]
  443.         end
  444.     elseif equipSet[spell.english] then
  445.         equipSet = equipSet[spell.english]
  446.     end
  447.     equip(equipSet)
  448. end
  449.  
  450. function aftercast(spell,action)
  451.     if spell.type == "WeaponSkill" and not spell.interrupted then
  452.         send_command('wait 0.2;gs c TP')
  453.     end
  454.     status_change(player.status)
  455. end
  456.  
  457. function status_change(new,old)
  458.     if Armor == 'PDT' then
  459.         equip(sets.PDT)
  460.     elseif Armor == 'MDT' then
  461.         equip(sets.MDT)
  462.     elseif new == 'Engaged' then
  463.         equipSet = sets.TP
  464.         if Armor == 'Hybrid' and equipSet["Hybrid"] then
  465.             equipSet = equipSet["Hybrid"]
  466.         end
  467.         if equipSet[AccArray[AccIndex]] then
  468.             equipSet = equipSet[AccArray[AccIndex]]
  469.         end
  470.         equip(equipSet)
  471.     else
  472.         equip(sets.Idle[IdleArray[IdleIndex]])
  473.     end
  474. end
  475.  
  476. function buff_change(buff,gain)
  477.     buff = string.lower(buff)
  478.     if buff == 'weakness' then -- Weakness Timer --
  479.         if gain then
  480.             send_command('timers create "Weakness" 300 up')
  481.         else
  482.             send_command('timers delete "Weakness"')
  483.         end
  484.     end
  485.     if not midaction() then
  486.         status_change(player.status)
  487.     end
  488. end
  489.  
  490. -- In Game: //gs c (command), Macro: /console gs c (command), Bind: gs c (command) --
  491. function self_command(command)
  492.     if command == 'C1' then -- Accuracy Level Toggle --
  493.         AccIndex = (AccIndex % #AccArray) + 1
  494.         add_to_chat(158,'Accuracy Level: ' .. AccArray[AccIndex])
  495.         status_change(player.status)
  496.     elseif command == 'C5' then -- Auto Update Gear Toggle --
  497.         status_change(player.status)
  498.         add_to_chat(158,'Auto Update Gear')
  499.     elseif command == 'C2' then -- Hybrid Toggle --
  500.         if Armor == 'Hybrid' then
  501.             Armor = 'None'
  502.             add_to_chat(123,'Hybrid Set: [Unlocked]')
  503.         else
  504.             Armor = 'Hybrid'
  505.             add_to_chat(158,'Hybrid Set: '..AccArray[AccIndex])
  506.         end
  507.         status_change(player.status)
  508.     elseif command == 'C7' then -- PDT Toggle --
  509.         if Armor == 'PDT' then
  510.             Armor = 'None'
  511.             add_to_chat(123,'PDT Set: [Unlocked]')
  512.         else
  513.             Armor = 'PDT'
  514.             add_to_chat(158,'PDT Set: [Locked]')
  515.         end
  516.         status_change(player.status)
  517.     elseif command == 'C15' then -- MDT Toggle --
  518.         if Armor == 'MDT' then
  519.             Armor = 'None'
  520.             add_to_chat(123,'MDT Set: [Unlocked]')
  521.         else
  522.             Armor = 'MDT'
  523.             add_to_chat(158,'MDT Set: [Locked]')
  524.         end
  525.         status_change(player.status)
  526.     elseif command == 'C8' then -- Distance Toggle --
  527.         if player.target.distance then
  528.             target_distance = math.floor(player.target.distance*10)/10
  529.             add_to_chat(158,'Distance: '..target_distance)
  530.         else
  531.             add_to_chat(123,'No Target Selected')
  532.         end
  533.     elseif command == 'C6' then -- Idle Toggle --
  534.         IdleIndex = (IdleIndex % #IdleArray) + 1
  535.         add_to_chat(158,'Idle Set: ' .. IdleArray[IdleIndex])
  536.         status_change(player.status)
  537.     elseif command == 'TP' then
  538.         add_to_chat(158,'TP Return: ['..tostring(player.tp)..']')
  539.     elseif command:match('^SC%d$') then
  540.         send_command('//' .. sc_map[command])
  541.     end
  542. end
  543.  
  544. function refine_waltz(spell,action)
  545.     if spell.type ~= 'Waltz' then
  546.         return
  547.     end
  548.  
  549.     if spell.name == "Healing Waltz" or spell.name == "Divine Waltz" or spell.name == "Divine Waltz II" then
  550.         return
  551.     end
  552.  
  553.     local newWaltz = spell.english
  554.     local waltzID
  555.  
  556.     local missingHP
  557.  
  558.     if spell.target.type == "SELF" then
  559.         missingHP = player.max_hp - player.hp
  560.     elseif spell.target.isallymember then
  561.         local target = find_player_in_alliance(spell.target.name)
  562.         local est_max_hp = target.hp / (target.hpp/100)
  563.         missingHP = math.floor(est_max_hp - target.hp)
  564.     end
  565.  
  566.     if missingHP ~= nil then
  567.         if player.sub_job == 'DNC' then
  568.             if missingHP < 40 and spell.target.name == player.name then
  569.                 add_to_chat(123,'Full HP!')
  570.                 cancel_spell()
  571.                 return
  572.             elseif missingHP < 150 then
  573.                 newWaltz = 'Curing Waltz'
  574.                 waltzID = 190
  575.             elseif missingHP < 300 then
  576.                 newWaltz = 'Curing Waltz II'
  577.                 waltzID = 191
  578.             else
  579.                 newWaltz = 'Curing Waltz III'
  580.                 waltzID = 192
  581.             end
  582.         else
  583.             return
  584.         end
  585.     end
  586.  
  587.     local waltzTPCost = {['Curing Waltz'] = 20, ['Curing Waltz II'] = 35, ['Curing Waltz III'] = 50, ['Curing Waltz IV'] = 65, ['Curing Waltz V'] = 80}
  588.     local tpCost = waltzTPCost[newWaltz]
  589.  
  590.     local downgrade
  591.  
  592.     if player.tp < tpCost and not buffactive.trance then
  593.  
  594.         if player.tp < 20 then
  595.             add_to_chat(123, 'Insufficient TP ['..tostring(player.tp)..']. Cancelling.')
  596.             cancel_spell()
  597.             return
  598.         elseif player.tp < 35 then
  599.             newWaltz = 'Curing Waltz'
  600.         elseif player.tp < 50 then
  601.             newWaltz = 'Curing Waltz II'
  602.         elseif player.tp < 65 then
  603.             newWaltz = 'Curing Waltz III'
  604.         elseif player.tp < 80 then
  605.             newWaltz = 'Curing Waltz IV'
  606.         end
  607.  
  608.         downgrade = 'Insufficient TP ['..tostring(player.tp)..']. Downgrading to '..newWaltz..'.'
  609.     end
  610.  
  611.     if newWaltz ~= spell.english then
  612.         send_command('@input /ja "'..newWaltz..'" '..tostring(spell.target.raw))
  613.         if downgrade then
  614.             add_to_chat(158, downgrade)
  615.         end
  616.         cancel_spell()
  617.         return
  618.     end
  619.  
  620.     if missingHP > 0 then
  621.         add_to_chat(158,'Trying to cure '..tostring(missingHP)..' HP using '..newWaltz..'.')
  622.     end
  623. end
  624.  
  625. function find_player_in_alliance(name)
  626.     for i,v in ipairs(alliance) do
  627.         for k,p in ipairs(v) do
  628.             if p.name == name then
  629.                 return p
  630.             end
  631.         end
  632.     end
  633. end
  634.  
  635. function sub_job_change(newSubjob, oldSubjob)
  636.     select_default_macro_book()
  637. end
  638.  
  639. function set_macro_page(set,book)
  640.     if not tonumber(set) then
  641.         add_to_chat(123,'Error setting macro page: Set is not a valid number ('..tostring(set)..').')
  642.         return
  643.     end
  644.     if set < 1 or set > 10 then
  645.         add_to_chat(123,'Error setting macro page: Macro set ('..tostring(set)..') must be between 1 and 10.')
  646.         return
  647.     end
  648.  
  649.     if book then
  650.         if not tonumber(book) then
  651.             add_to_chat(123,'Error setting macro page: book is not a valid number ('..tostring(book)..').')
  652.             return
  653.         end
  654.         if book < 1 or book > 20 then
  655.             add_to_chat(123,'Error setting macro page: Macro book ('..tostring(book)..') must be between 1 and 20.')
  656.             return
  657.         end
  658.         send_command('@input /macro book '..tostring(book)..';wait .1;input /macro set '..tostring(set))
  659.     else
  660.         send_command('@input /macro set '..tostring(set))
  661.     end
  662. end
  663.  
  664. function select_default_macro_book()
  665.     -- Default macro set/book
  666.     if player.sub_job == 'WAR' then
  667.         set_macro_page(1, 13)
  668.     elseif player.sub_job == 'DNC' then
  669.         set_macro_page(1, 13)
  670.     elseif player.sub_job == 'NIN' then
  671.         set_macro_page(1, 13)
  672.     else
  673.         set_macro_page(1, 13)
  674.     end
  675. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement