Advertisement
Falkirk

Falkirk COR

Jan 31st, 2018
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 22.82 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Setup functions for this job.  Generally should not be modified.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. --[[
  6.     gs c toggle LuzafRing -- Toggles use of Luzaf Ring on and off
  7.    
  8.     Offense mode is melee or ranged.  Used ranged offense mode if you are engaged
  9.     for ranged weaponskills, but not actually meleeing.
  10.    
  11.     Weaponskill mode, if set to 'Normal', is handled separately for melee and ranged weaponskills.
  12. --]]
  13.  
  14.  
  15. -- Initialization function for this job file.
  16. function get_sets()
  17.     mote_include_version = 2
  18.    
  19.     -- Load and initialize the include file.
  20.     include('Mote-Include.lua')
  21. end
  22.  
  23. -- Setup vars that are user-independent.  state.Buff vars initialized here will automatically be tracked.
  24. function job_setup()
  25.     -- Whether to use Luzaf's Ring
  26.     state.LuzafRing = M(true, false)
  27.     -- Whether a warning has been given for low ammo
  28.     state.warned = M(false)
  29.  
  30.     random_lockstyle_list = {13}
  31.  
  32.     -- Display Roll Mode Info as on-screen Text
  33.     TextBoxX = 1075
  34.     TextBoxY = 47
  35.     TextSize = 10
  36.  
  37.     RollOne = "Chaos Roll";RollTwo = "Hunter's Roll";RollThree = "Samurai Roll";RollFour = "Fighter's Roll"
  38.     define_roll_values()
  39. end
  40.  
  41. -------------------------------------------------------------------------------------------------------------------
  42. -- User setup functions for this job.  Recommend that these be overridden in a sidecar file.
  43. -------------------------------------------------------------------------------------------------------------------
  44.  
  45. -- Setup vars that are user-dependent.  Can override this function in a sidecar file.
  46. function user_setup()
  47.     state.OffenseMode:options('Ranged', 'Melee', 'Acc')
  48.     state.RangedMode:options('Normal', 'Acc')
  49.     state.WeaponskillMode:options('Normal', 'Acc', 'Att', 'Mod')
  50.     state.CastingMode:options('Normal', 'Resistant')
  51.     state.IdleMode:options('Normal', 'PDT', 'Refresh')
  52.  
  53.     gear.RAbullet = "Chrono Bullet"
  54.     gear.WSbullet = "Chrono Bullet"
  55.     gear.MAbullet = "Animikii Bullet"
  56.     gear.QDbullet = "Animikii Bullet"
  57.     options.ammo_warning_limit = 15
  58.  
  59.     -- Additional local binds
  60.     send_command('bind ^` input /ja "Double-Up" <me>')
  61.     send_command('bind !` input /ja "Bolter\'s Roll" <me>')
  62.  
  63.     -- Set up Roll Modes and keybind alt+=
  64.     state.RollMode = M{['description']='Roll Mode', 'Melee', 'Magic', 'Pet'}
  65.     send_command('bind != gs c cycle RollMode')
  66.  
  67.     -- Random Lockstyle generator.
  68.     local randomLockstyle = random_lockstyle_list[math.random(1, #random_lockstyle_list)]
  69.     send_command('@wait 5;input /lockstyleset '.. randomLockstyle)
  70.  
  71.     display_roll_mode()
  72. end
  73.  
  74.  
  75. -- Called when this job file is unloaded (eg: job change)
  76. function user_unload()
  77.     send_command('unbind ^`')
  78.     send_command('unbind !`')
  79.     send_command('text RollModeText delete')
  80. end
  81.  
  82. -- Define sets and vars used by this job file.
  83. function init_gear_sets()
  84.     --------------------------------
  85.     -- Augmented Gear Definitions --
  86.     --------------------------------
  87.  
  88.     Snapshot_head = {name="Taeon Chapeau", augments={'Mag. Evasion+19','"Snapshot"+5','"Snapshot"+4',}}
  89.  
  90.     FC_head = {name="Herculean Helm", augments={'"Mag.Atk.Bns."+14','"Fast Cast"+4','MND+9',}}
  91.     FC_body = {name="Taeon Tabard", augments={'"Mag.Atk.Bns."+20','"Fast Cast"+5','Weapon skill damage +2%',}}
  92.     FC_hands = "Leyline Gloves"
  93.     FC_legs = "Rawhide Trousers"
  94.     FC_feet = {name="Taeon Boots", augments={'Mag. Acc.+13 "Mag.Atk.Bns."+13','"Fast Cast"+5','Weapon skill damage +2%',}}
  95.  
  96.     MAB_head = {name="Herculean Helm", augments={'"Mag.Atk.Bns."+14','"Fast Cast"+4','MND+9',}}
  97.     MAB_legs = {name="Herculean Trousers", augments={'Mag. Acc.+20 "Mag.Atk.Bns."+20','CHR+4','"Mag.Atk.Bns."+15',}}
  98.     MAB_feet = {name="Herculean Boots", augments={'Mag. Acc.+14 "Mag.Atk.Bns."+14','Weapon skill damage +3%','MND+9','"Mag.Atk.Bns."+15',}}
  99.  
  100.     STP_back = {name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Rng.Acc.+10','"Store TP"+10',}}
  101.     WSDMG_back = {name="Camulus's Mantle", augments={'AGI+20','Rng.Acc.+20 Rng.Atk.+20','Weapon skill damage +10%',}}
  102.  
  103.     --------------------------------------
  104.     -- Start defining the sets
  105.     --------------------------------------
  106.    
  107.     -- Precast Sets
  108.     sets.precast.JA['Triple Shot'] = {body="Chasseur's Frac +1"}
  109.     sets.precast.JA['Snake Eye'] = {legs="Lanun Culottes +1"}
  110.     sets.precast.JA['Wild Card'] = {feet="Lanun Bottes +1"}
  111.     sets.precast.JA['Random Deal'] = {body="Lanun Frac +1"}
  112.    
  113.     sets.precast.CorsairRoll = {head="Lanun Tricorne +1",neck="Regal Necklace",
  114.         hands="Chasseur's Gants +1",
  115.         back=STP_back,legs="Desultor Tassets"}
  116.    
  117.     sets.precast.CorsairRoll["Caster's Roll"] = set_combine(sets.precast.CorsairRoll, {legs="Chasseur's Culottes +1"})
  118.     sets.precast.CorsairRoll["Courser's Roll"] = set_combine(sets.precast.CorsairRoll, {feet="Chasseur's Bottes +1"})
  119.     sets.precast.CorsairRoll["Blitzer's Roll"] = set_combine(sets.precast.CorsairRoll, {head="Chasseur's Tricorne +1"})
  120.     sets.precast.CorsairRoll["Tactician's Roll"] = set_combine(sets.precast.CorsairRoll, {body="Chasseur's Frac +1"})
  121.     sets.precast.CorsairRoll["Allies' Roll"] = set_combine(sets.precast.CorsairRoll, {hands="Chasseur's Gants +1"})
  122.    
  123.     sets.precast.LuzafRing = {ring2="Luzaf's Ring"}
  124.     sets.precast.FoldDoubleBust = {hands="Lanun Gants +1"}
  125.    
  126.     sets.precast.CorsairShot = {head="Blood Mask"}
  127.  
  128.     -- Waltz set (chr and vit)
  129.     sets.precast.Waltz = {}
  130.  
  131.     -- Fast cast sets for spells
  132.     sets.precast.FC = {head=FC_head,neck="Orunmila's Torque",ear1="Enchanter Earring +1",ear2="Loquacious Earring",
  133.         body=FC_body,hands=FC_hands,ring1="Prolix Ring",ring2="Kishar Ring",
  134.         waist="Moblin Cest",legs=FC_legs,feet=FC_feet}
  135.  
  136.     sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  137.  
  138.     sets.precast.RA = {ammo=gear.RAbullet,
  139.         head=Snapshot_head,
  140.         body="Furia Jerkin",hands="Carmine Finger Gauntlets +1",
  141.         back="Navarch's Mantle",waist="Impulse Belt",legs="Chasseur's Culottes +1",feet="Meghanada Jambeaux +2"}
  142.  
  143.     -- Weaponskill sets
  144.     -- Default set for any weaponskill that isn't any more specifically defined
  145.     sets.precast.WS = {
  146.         head="Meghanada Visor +2",neck="Fotia Gorget",ear1="Telos Earring",ear2="Dedition Earring",
  147.         body="Laksamana's Frac +3",hands="Meghanada Gloves +2",ring1="Meghanada Ring",ring2="Regal Ring",
  148.         back=WSDMG_back,waist="Fotia Belt",legs="Meghanada Chausses +2",feet="Meghanada Jambeaux +2"}
  149.  
  150.     -- Specific weaponskill sets.  Uses the base set if an appropriate WSMod version isn't found.
  151.     sets.precast.WS['Evisceration'] = sets.precast.WS
  152.     sets.precast.WS['Exenterator'] = sets.precast.WS
  153.     sets.precast.WS['Requiescat'] = sets.precast.WS
  154.  
  155.     sets.precast.WS['Last Stand'] = {ammo=gear.WSbullet,
  156.         head="Meghanada Visor +2",neck="Fotia Gorget",ear1="Moonshade Earring",ear2="Ishvara Earring",
  157.         body="Laksamana's Frac +3",hands="Meghanada Gloves +2",ring1="Regal Ring",ring2="Dingir Ring",
  158.         back=WSDMG_back,waist="Fotia Belt",legs="Meghanada Chausses +2",feet="Meghanada Jambeaux +2"}
  159.  
  160.     sets.precast.WS['Wildfire'] = {ammo=gear.MAbullet,
  161.         head=MAB_head,neck="Baetyl Pendant",ear1="Hecate's Earring",ear2="Friomisi Earring",
  162.         body="Laksamana's Frac +3",hands="Carmine Finger Gauntlets +1",ring1="Ilabrat Ring",ring2="Dingir Ring",
  163.         back=WSDMG_back,waist="Eschan Stone",legs=MAB_legs,feet=MAB_feet}
  164.    
  165.     sets.precast.WS['Leaden Salute'] = {ammo=gear.MAbullet,
  166.         head="Pixie Hairpin +1",neck="Baetyl Pendant",ear1="Moonshade Earring",ear2="Friomisi Earring",
  167.         body="Laksamana's Frac +3",hands="Carmine Finger Gauntlets +1",ring1="Archon Ring",ring2="Dingir Ring",
  168.         back=WSDMG_back,waist="Eschan Stone",legs=MAB_legs,feet=MAB_feet}
  169.  
  170.     -- Midcast Sets
  171.     sets.midcast.FastRecast = sets.precast.FC
  172.        
  173.     -- Specific spells
  174.     sets.midcast.Utsusemi = sets.midcast.FastRecast
  175.  
  176.     sets.midcast.CorsairShot = {ammo=gear.QDbullet,
  177.         head=MAB_head,neck="Baetyl Pendant",ear1="Hecate's Earring",ear2="Friomisi Earring",
  178.         body="Samnuha Coat",hands="Carmine Finger Gauntlets +1",ring1="Fenrir Ring +1",ring2="Dingir Ring",
  179.         back="Argochampsa Mantle",waist="Eschan Stone",legs=MAB_legs,feet="Chasseur's Bottes +1"}
  180.  
  181.     sets.midcast.CorsairShot['Light Shot'] = {ammo=gear.QDbullet,
  182.         head="Dampening Tam",neck="Sanctity Necklace",ear1="Dignitary's Earring",ear2="Hermetic Earring",
  183.         body="Mirke Wardecors",hands="Schutzen Mittens",ring1="Sangoma Ring",ring2="Kishar Ring",
  184.         back="Navarch's Mantle",waist="Eschan Stone",legs=MAB_legs,feet=MAB_feet}
  185.  
  186.     sets.midcast.CorsairShot['Dark Shot'] = sets.midcast.CorsairShot['Light Shot']
  187.  
  188.     -- Ranged gear
  189.     sets.midcast.RA = {ammo=gear.RAbullet,
  190.         head="Meghanada Visor +2",neck="Combatant's Torque",ear1="Telos Earring",ear2="Dedition Earring",
  191.         body="Meghanada Cuirie +2",hands="Meghanada Gloves +2",ring1="Ilabrat Ring",ring2="Petrov Ring",
  192.         back=STP_back,waist="Reiki Yotai",legs="Meghanada Chausses +2",feet="Meghanada Jambeaux +2"}
  193.  
  194.     sets.midcast.RA.Triple = set_combine(sets.midcast.RA, {body="Chasseur's Frac +1"})
  195.  
  196.     -- Idle sets
  197.     sets.idle = {ammo=gear.RAbullet,
  198.         head="Meghanada Visor +2",neck="Bathy Choker +1",ear1="Infused Earring",ear2="Dawn Earring",
  199.         body="Meghanada Cuirie +2",hands="Meghanada Gloves +2",ring1="Meghanada Ring",ring2="Paguroidea Ring",
  200.         back="Shadow Mantle",waist="Flume Belt +1",legs="Meghanada Chausses +2",feet="Skadi's Jambeaux +1"}
  201.  
  202.     -- Defense sets
  203.     sets.defense.PDT = {
  204.         head="Meghanada Visor +2",neck="Loricate Torque +1",ear1="Impregnable Earring",ear2="Genmei Earring",
  205.         body="Meghanada Cuirie +2",hands="Meghanada Gloves +2",ring1="Gelatinous Ring +1",ring2="Defending Ring",
  206.         back="Shadow Mantle",waist="Flume Belt +1",legs="Meghanada Chausses +2",feet="Meghanada Jambeaux +2"}
  207.  
  208.     sets.defense.MDT = {
  209.         head="Dampening Tam",neck="Loricate Torque +1",ear1="Etiolation Earring",ear2="Sanare Earring",
  210.         body="Meghanada Cuirie +2",hands="Kurys Gloves",ring1="Shadow Ring",ring2="Defending Ring",
  211.         back="Engulfer Cape +1",waist="Lieutenant's Sash",legs="Mummu Kecks +1",feet="Lanun Bottes +1"}
  212.  
  213.     sets.Kiting = {feet="Skadi's Jambeaux +1"}
  214.  
  215.     -- Engaged sets
  216.     sets.engaged.Melee = {ammo=gear.RAbullet,
  217.         head="Meghanada Visor +2",neck="Combatant's Torque",ear1="Telos Earring",ear2="Brutal Earring",
  218.         body="Meghanada Cuirie +2",hands="Meghanada Gloves +2",ring1="Meghanada Ring",ring2="Regal Ring",
  219.         back=STP_back,waist="Windbuffet Belt +1",legs="Samnuha Tights",feet="Meghanada Jambeaux +2"}
  220.    
  221.     sets.engaged.Melee.DW = {ammo=gear.RAbullet,
  222.         head="Meghanada Visor +2",neck="Combatant's Torque",ear1="Telos Earring",ear2="Brutal Earring",
  223.         body="Meghanada Cuirie +2",hands="Meghanada Gloves +2",ring1="Meghanada Ring",ring2="Regal Ring",
  224.         back=STP_back,waist="Windbuffet Belt +1",legs="Samnuha Tights",feet="Meghanada Jambeaux +2"}
  225.    
  226.     sets.engaged.Ranged = {ammo=gear.RAbullet,
  227.         head="Meghanada Visor +2",neck="Combatant's Torque",ear1="Telos Earring",ear2="Dedition Earring",
  228.         body="Meghanada Cuirie +2",hands="Meghanada Gloves +2",ring1="Meghanada Ring",ring2="Regal Ring",
  229.         back=STP_back,waist="Reiki Yotai",legs="Meghanada Chausses +2",feet="Meghanada Jambeaux +2"}
  230. end
  231.  
  232. -------------------------------------------------------------------------------------------------------------------
  233. -- Job-specific hooks for standard casting events.
  234. -------------------------------------------------------------------------------------------------------------------
  235.  
  236. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  237. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  238. function job_precast(spell, action, spellMap, eventArgs)
  239.     -- Check that proper ammo is available if we're using ranged attacks or similar.
  240.     if spell.action_type == 'Ranged Attack' or spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
  241.         do_bullet_checks(spell, spellMap, eventArgs)
  242.     end
  243.  
  244.     -- gear sets
  245.     if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") and state.LuzafRing.value then
  246.         equip(sets.precast.LuzafRing)
  247.     elseif spell.type == 'CorsairShot' and state.CastingMode.value == 'Resistant' then
  248.         classes.CustomClass = 'Acc'
  249.     elseif spell.english == 'Fold' and buffactive['Bust'] == 2 then
  250.         if sets.precast.FoldDoubleBust then
  251.             equip(sets.precast.FoldDoubleBust)
  252.             eventArgs.handled = true
  253.         end
  254.     end
  255. end
  256.  
  257. function job_post_midcast(spell, action, spellMap, eventArgs)
  258.     if spell.action_type == 'Ranged Attack' and buffactive['Triple Shot'] then
  259.         equip(sets.midcast.RA.Triple)
  260.     end
  261. end
  262.  
  263. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  264. function job_aftercast(spell, action, spellMap, eventArgs)
  265.     if spell.type == 'CorsairRoll' and not spell.interrupted then
  266.         if spell.english == 'Double-up' then
  267.             return
  268.         else
  269.             display_roll_info(spell)
  270.         end
  271.     end
  272. end
  273.  
  274. -------------------------------------------------------------------------------------------------------------------
  275. -- User code that supplements standard library decisions.
  276. -------------------------------------------------------------------------------------------------------------------
  277.  
  278. --function job_state_change(stateField, newValue, oldValue)
  279. --    if stateField == 'Roll Mode' then
  280. --        state.RollMode:set(newValue)
  281. --        roll_mode_update()
  282. --    end
  283. --end
  284.  
  285. function job_self_command(cmdParams, eventArgs)
  286.     if cmdParams[1]:lower() == 'roll' then
  287.         roll_select(cmdParams)
  288.         eventArgs.handled = true
  289.     end
  290. end
  291.  
  292. function roll_select(cmdParams)
  293.     local roll = cmdParams[2]:lower()
  294.     local CORRoll = ''
  295.     if roll == 'one' then
  296.         CORRoll = RollOne
  297.     elseif roll == 'two' then
  298.         CORRoll = RollTwo
  299.     elseif roll == 'three' then
  300.         CORRoll = RollThree
  301.     else
  302.         CORRoll = RollFour
  303.     end
  304.     send_command('input /ja "'.. CORRoll ..'" <me>')
  305. end
  306.  
  307. -- Return a customized weaponskill mode to use for weaponskill sets.
  308. -- Don't return anything if you're not overriding the default value.
  309. function get_custom_wsmode(spell, spellMap, default_wsmode)
  310.     if buffactive['Transcendancy'] then
  311.         return 'Brew'
  312.     end
  313. end
  314.  
  315. -- Called by the 'update' self-command, for common needs.
  316. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  317. function job_update(cmdParams, eventArgs)
  318.     if newStatus == 'Engaged' and player.equipment.main == 'Chatoyant Staff' then
  319.         state.OffenseMode:set('Ranged')
  320.     end
  321.     roll_mode_update()
  322.     update_roll_mode_info()
  323. end
  324.  
  325. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  326. function display_current_job_state(eventArgs)
  327.     local msg = ''
  328.    
  329.     msg = msg .. 'Off.: '..state.OffenseMode.current
  330.     msg = msg .. ', Rng.: '..state.RangedMode.current
  331.     msg = msg .. ', WS.: '..state.WeaponskillMode.current
  332.     msg = msg .. ', QD.: '..state.CastingMode.current
  333.  
  334.     if state.DefenseMode.value ~= 'None' then
  335.         local defMode = state[state.DefenseMode.value ..'DefenseMode'].current
  336.         msg = msg .. ', Defense: '..state.DefenseMode.value..' '..defMode
  337.     end
  338.    
  339.     if state.Kiting.value then
  340.         msg = msg .. ', Kiting'
  341.     end
  342.    
  343.     if state.PCTargetMode.value ~= 'default' then
  344.         msg = msg .. ', Target PC: '..state.PCTargetMode.value
  345.     end
  346.  
  347.     if state.SelectNPCTargets.value then
  348.         msg = msg .. ', Target NPCs'
  349.     end
  350.  
  351.     msg = msg .. ', Roll Size: ' .. ((state.LuzafRing.value and 'Large') or 'Small')
  352.     add_to_chat(28,'Rolls: 1.'.. RollOne ..'  2.'.. RollTwo ..'  3.'.. RollThree ..'  4.'.. RollFour ..'')
  353.     add_to_chat(122, msg)
  354.  
  355.     eventArgs.handled = true
  356. end
  357.  
  358.  
  359. -------------------------------------------------------------------------------------------------------------------
  360. -- Utility functions specific to this job.
  361. -------------------------------------------------------------------------------------------------------------------
  362.  
  363. function define_roll_values()
  364.     rolls = {
  365.         ["Corsair's Roll"]   = {lucky=5, unlucky=9, bonus="Experience Points"},
  366.         ["Ninja Roll"]       = {lucky=4, unlucky=8, bonus="Evasion"},
  367.         ["Hunter's Roll"]    = {lucky=4, unlucky=8, bonus="Accuracy"},
  368.         ["Chaos Roll"]       = {lucky=4, unlucky=8, bonus="Attack"},
  369.         ["Magus's Roll"]     = {lucky=2, unlucky=6, bonus="Magic Defense"},
  370.         ["Healer's Roll"]    = {lucky=3, unlucky=7, bonus="Cure Potency Received"},
  371.         ["Puppet Roll"]      = {lucky=3, unlucky=7, bonus="Pet Magic Accuracy/Attack"},
  372.         ["Choral Roll"]      = {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
  373.         ["Monk's Roll"]      = {lucky=3, unlucky=7, bonus="Subtle Blow"},
  374.         ["Beast Roll"]       = {lucky=4, unlucky=8, bonus="Pet Attack"},
  375.         ["Samurai Roll"]     = {lucky=2, unlucky=6, bonus="Store TP"},
  376.         ["Evoker's Roll"]    = {lucky=5, unlucky=9, bonus="Refresh"},
  377.         ["Rogue's Roll"]     = {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
  378.         ["Warlock's Roll"]   = {lucky=4, unlucky=8, bonus="Magic Accuracy"},
  379.         ["Fighter's Roll"]   = {lucky=5, unlucky=9, bonus="Double Attack Rate"},
  380.         ["Drachen Roll"]     = {lucky=4, unlucky=8, bonus="Pet Accuracy"},
  381.         ["Gallant's Roll"]   = {lucky=3, unlucky=7, bonus="Defense"},
  382.         ["Wizard's Roll"]    = {lucky=5, unlucky=9, bonus="Magic Attack"},
  383.         ["Dancer's Roll"]    = {lucky=3, unlucky=7, bonus="Regen"},
  384.         ["Scholar's Roll"]   = {lucky=2, unlucky=6, bonus="Conserve MP"},
  385.         ["Bolter's Roll"]    = {lucky=3, unlucky=9, bonus="Movement Speed"},
  386.         ["Caster's Roll"]    = {lucky=2, unlucky=7, bonus="Fast Cast"},
  387.         ["Courser's Roll"]   = {lucky=3, unlucky=9, bonus="Snapshot"},
  388.         ["Blitzer's Roll"]   = {lucky=4, unlucky=9, bonus="Attack Delay"},
  389.         ["Tactician's Roll"] = {lucky=5, unlucky=8, bonus="Regain"},
  390.         ["Allies's Roll"]    = {lucky=3, unlucky=10, bonus="Skillchain Damage"},
  391.         ["Miser's Roll"]     = {lucky=5, unlucky=7, bonus="Save TP"},
  392.         ["Companion's Roll"] = {lucky=2, unlucky=10, bonus="Pet Regain and Regen"},
  393.         ["Avenger's Roll"]   = {lucky=4, unlucky=8, bonus="Counter Rate"},
  394.     }
  395. end
  396.  
  397. function display_roll_info(spell)
  398.     rollinfo = rolls[spell.english]
  399.     local rollsize = (state.LuzafRing.value and 'Large') or 'Small'
  400.  
  401.     if rollinfo then
  402.         --add_to_chat(104, spell.english..' provides a bonus to '..rollinfo.bonus..'.)
  403.         add_to_chat(28, 'Lucky roll is '..tostring(rollinfo.lucky)..', Unlucky roll is '..tostring(rollinfo.unlucky)..'.   [Roll size: '..rollsize..']')
  404.     end
  405. end
  406.  
  407.  
  408. -- Determine whether we have sufficient ammo for the action being attempted.
  409. function do_bullet_checks(spell, spellMap, eventArgs)
  410.     local bullet_name
  411.     local bullet_min_count = 1
  412.    
  413.     if spell.type == 'WeaponSkill' then
  414.         if spell.skill == "Marksmanship" then
  415.             if spell.element == 'None' then
  416.                 -- physical weaponskills
  417.                 bullet_name = gear.WSbullet
  418.             else
  419.                 -- magical weaponskills
  420.                 bullet_name = gear.MAbullet
  421.             end
  422.         else
  423.             -- Ignore non-ranged weaponskills
  424.             return
  425.         end
  426.     elseif spell.type == 'CorsairShot' then
  427.         bullet_name = gear.QDbullet
  428.     elseif spell.action_type == 'Ranged Attack' then
  429.         bullet_name = gear.RAbullet
  430.         if buffactive['Triple Shot'] then
  431.             bullet_min_count = 3
  432.         end
  433.     end
  434.    
  435.     local available_bullets = player.inventory[bullet_name] or player.wardrobe[bullet_name]
  436.    
  437.     -- If no ammo is available, give appropriate warning and end.
  438.     if not available_bullets then
  439.         if spell.type == 'CorsairShot' and player.equipment.ammo ~= 'empty' then
  440.             add_to_chat(104, 'No Quick Draw ammo left.  Using what\'s currently equipped ('..player.equipment.ammo..').')
  441.             return
  442.         elseif spell.type == 'WeaponSkill' and player.equipment.ammo == gear.RAbullet then
  443.             add_to_chat(104, 'No weaponskill ammo left.  Using what\'s currently equipped (standard ranged bullets: '..player.equipment.ammo..').')
  444.             return
  445.         else
  446.             add_to_chat(104, 'No ammo ('..tostring(bullet_name)..') available for that action.')
  447.             eventArgs.cancel = true
  448.             return
  449.         end
  450.     end
  451.    
  452.     -- Don't allow shooting or weaponskilling with ammo reserved for quick draw.
  453.     if spell.type ~= 'CorsairShot' and bullet_name == gear.QDbullet and available_bullets.count <= bullet_min_count then
  454.         add_to_chat(104, 'No ammo will be left for Quick Draw.  Cancelling.')
  455.         eventArgs.cancel = true
  456.         return
  457.     end
  458.    
  459.     -- Low ammo warning.
  460.     if spell.type ~= 'CorsairShot' and state.warned.value == false
  461.         and available_bullets.count > 1 and available_bullets.count <= options.ammo_warning_limit then
  462.         local msg = '*****  LOW AMMO WARNING: '..bullet_name..' *****'
  463.         --local border = string.repeat("*", #msg)
  464.         local border = ""
  465.         for i = 1, #msg do
  466.             border = border .. "*"
  467.         end
  468.        
  469.         add_to_chat(104, border)
  470.         add_to_chat(104, msg)
  471.         add_to_chat(104, border)
  472.  
  473.         state.warned:set()
  474.     elseif available_bullets.count > options.ammo_warning_limit and state.warned then
  475.         state.warned:reset()
  476.     end
  477. end
  478.  
  479. function roll_mode_update()
  480.     if state.RollMode.value == 'Melee' then
  481.         RollOne = "Chaos Roll";RollTwo = "Hunter's Roll";RollThree = "Samurai Roll";RollFour = "Fighter's Roll"
  482.     elseif state.RollMode.value == 'Magic' then
  483.         RollOne = "Wizard's Roll";RollTwo = "Warlock's Roll";RollThree = "Caster's Roll";RollFour = "Naturalist's Roll"
  484.     elseif state.RollMode.value == 'Pet' then
  485.         RollOne = "Beast Roll";RollTwo = "Drachen Roll";RollThree = "Companion's Roll";RollFour = "Puppet Roll"
  486.     end
  487. end
  488.  
  489. function display_roll_mode()
  490.     local x = TextBoxX
  491.     local y = TextBoxY
  492.     send_command('text RollModeText create Roll Mode: '..state.RollMode.value..'')
  493.     send_command('text RollModeText pos '..x..' '..y..'')
  494.     send_command('text RollModeText size '..TextSize..'')
  495. end
  496.  
  497. function update_roll_mode_info()
  498.     send_command('text RollModeText text Roll Mode: '..state.RollMode.value..'')
  499. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement