Guest User

cor

a guest
Oct 21st, 2014
256
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.58 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Setup functions for this job. Generally should not be modified.
  3. -------------------------------------------------------------------------------------------------------------------
  4. --[[
  5. gs c toggle LuzafRing -- Toggles use of Luzaf Ring on and off
  6. Offense mode is melee or ranged. Used ranged offense mode if you are engaged
  7. for ranged weaponskills, but not actually meleeing.
  8. Weaponskill mode, if set to 'Normal', is handled separately for melee and ranged weaponskills.
  9. --]]
  10. -- Initialization function for this job file.
  11. function get_sets()
  12. mote_include_version = 2
  13. -- Load and initialize the include file.
  14. include('Mote-Include.lua')
  15. end
  16. -- Setup vars that are user-independent. state.Buff vars initialized here will automatically be tracked.
  17. function job_setup()
  18. -- Whether to use Luzaf's Ring
  19. state.LuzafRing = M(false, "Luzaf's Ring")
  20. -- Whether a warning has been given for low ammo
  21. state.warned = M(false)
  22. define_roll_values()
  23. end
  24. -------------------------------------------------------------------------------------------------------------------
  25. -- User setup functions for this job. Recommend that these be overridden in a sidecar file.
  26. -------------------------------------------------------------------------------------------------------------------
  27. -- Setup vars that are user-dependent. Can override this function in a sidecar file.
  28. function user_setup()
  29. state.OffenseMode:options('Ranged', 'Melee', 'Acc')
  30. state.RangedMode:options('Normal', 'Acc')
  31. state.WeaponskillMode:options('Normal', 'Acc', 'Att', 'Mod')
  32. state.CastingMode:options('Normal', 'Resistant')
  33. state.IdleMode:options('Normal', 'PDT', 'Refresh')
  34. gear.RAbullet = "Adlivun Bullet"
  35. gear.WSbullet = "Adlivun Bullet"
  36. gear.MAbullet = "Bronze Bullet"
  37. gear.QDbullet = "Adlivun Bullet"
  38. options.ammo_warning_limit = 15
  39. -- Additional local binds
  40. send_command('bind ^` input /ja "Double-up" <me>')
  41. send_command('bind !` input /ja "Bolter\'s Roll" <me>')
  42. select_default_macro_book()
  43. end
  44. -- Called when this job file is unloaded (eg: job change)
  45. function user_unload()
  46. send_command('unbind ^`')
  47. send_command('unbind !`')
  48. end
  49. -- Define sets and vars used by this job file.
  50. function init_gear_sets()
  51. --------------------------------------
  52. -- Start defining the sets
  53. --------------------------------------
  54. -- Precast Sets
  55. -- Precast sets to enhance JAs
  56. sets.precast.JA['Triple Shot'] = {body="Navarch's Frac +2"}
  57. sets.precast.JA['Snake Eye'] = {legs="Lanun Culottes"}
  58. sets.precast.JA['Wild Card'] = {feet="Lanun Bottes"}
  59. sets.precast.JA['Random Deal'] = {body="Lanun Frac"}
  60. sets.precast.CorsairRoll = {head="Lanun Tricorne",hands="Navarch's Gants +2"}
  61. sets.precast.CorsairRoll["Caster's Roll"] = set_combine(sets.precast.CorsairRoll, {legs="Navarch's Culottes +2"})
  62. sets.precast.CorsairRoll["Courser's Roll"] = set_combine(sets.precast.CorsairRoll, {feet="Navarch's Bottes +2"})
  63. sets.precast.CorsairRoll["Blitzer's Roll"] = set_combine(sets.precast.CorsairRoll, {head="Navarch's Tricorne +2"})
  64. sets.precast.CorsairRoll["Tactician's Roll"] = set_combine(sets.precast.CorsairRoll, {body="Navarch's Frac +2"})
  65. sets.precast.CorsairRoll["Allies' Roll"] = set_combine(sets.precast.CorsairRoll, {hands="Navarch's Gants +2"})
  66. sets.precast.LuzafRing = {ring2="Luzaf's Ring"}
  67. sets.precast.FoldDoubleBust = {hands="Lanun Gants"}
  68. sets.precast.CorsairShot = {head="Blood Mask"}
  69. -- Waltz set (chr and vit)
  70. sets.precast.Waltz = {
  71. head="Whirlpool Mask",
  72. body="Iuitl Vest",hands="Iuitl Wristbands",
  73. legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  74. -- Don't need any special gear for Healing Waltz.
  75. sets.precast.Waltz['Healing Waltz'] = {}
  76. -- Fast cast sets for spells
  77. sets.precast.FC = {head="Haruspex Hat",ear2="Loquacious Earring",hands="Thaumas Gloves",ring1="Prolix Ring"}
  78. sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  79. sets.precast.RA = {ammo=gear.RAbullet,
  80. head="Navarch's Tricorne +2",
  81. body="Laksamana's Frac",hands="Lanun Gants",
  82. back="Navarch's Mantle",waist="Impulse Belt",legs="Nahtirah Trousers",feet="Wurrukatte Boots"}
  83. -- Weaponskill sets
  84. -- Default set for any weaponskill that isn't any more specifically defined
  85. sets.precast.WS = {
  86. head="Whirlpool Mask",neck=gear.ElementalGorget,ear1="Bladeborn Earring",ear2="Steelflash Earring",
  87. body="Manibozho Jerkin",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Epona's Ring",
  88. back="Atheling Mantle",waist=gear.ElementalBelt,legs="Manibozho Brais",feet="Iuitl Gaiters +1"}
  89. -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
  90. sets.precast.WS['Evisceration'] = sets.precast.WS
  91. sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {legs="Nahtirah Trousers"})
  92. sets.precast.WS['Requiescat'] = set_combine(sets.precast.WS, {legs="Nahtirah Trousers"})
  93. sets.precast.WS['Last Stand'] = {ammo=gear.WSbullet,
  94. head="Whirlpool Mask",neck=gear.ElementalGorget,ear1="Clearview Earring",ear2="Moonshade Earring",
  95. body="Laksamana's Frac",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Stormsoul Ring",
  96. back="Terebellum Mantle",waist=gear.ElementalBelt,legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  97. sets.precast.WS['Last Stand'].Acc = {ammo=gear.WSbullet,
  98. head="Laksamana's Hat",neck=gear.ElementalGorget,ear1="Clearview Earring",ear2="Moonshade Earring",
  99. body="Laksamana's Frac",hands="Buremte Gloves",ring1="Hajduk Ring",ring2="Stormsoul Ring",
  100. back="Libeccio Mantle",waist=gear.ElementalBelt,legs="Thurandaut Tights +1",feet="Laksamana's Bottes"}
  101. sets.precast.WS['Wildfire'] = {ammo=gear.MAbullet,
  102. head="Wayfarer Circlet",neck="Stoicheion Medal",ear1="Friomisi Earring",ear2="Hecate's Earring",
  103. body="Manibozho Jerkin",hands="Iuitl Wristbands",ring1="Stormsoul Ring",ring2="Demon's Ring",
  104. back="Toro Cape",waist=gear.ElementalBelt,legs="Iuitl Tights",feet="Iuitl Gaiters +1"}
  105. sets.precast.WS['Wildfire'].Brew = {ammo=gear.MAbullet,
  106. head="Wayfarer Circlet",neck="Stoicheion Medal",ear1="Friomisi Earring",ear2="Hecate's Earring",
  107. body="Manibozho Jerkin",hands="Iuitl Wristbands",ring1="Stormsoul Ring",ring2="Demon's Ring",
  108. back="Toro Cape",waist=gear.ElementalBelt,legs="Iuitl Tights",feet="Iuitl Gaiters +1"}
  109. sets.precast.WS['Leaden Salute'] = sets.precast.WS['Wildfire']
  110. -- Midcast Sets
  111. sets.midcast.FastRecast = {
  112. head="Whirlpool Mask",
  113. body="Iuitl Vest",hands="Iuitl Wristbands",
  114. legs="Manibozho Brais",feet="Iuitl Gaiters +1"}
  115. -- Specific spells
  116. sets.midcast.Utsusemi = sets.midcast.FastRecast
  117. sets.midcast.CorsairShot = {ammo=gear.QDbullet,
  118. head="Blood Mask",neck="Stoicheion Medal",ear1="Friomisi Earring",ear2="Hecate's Earring",
  119. body="Lanun Frac",hands="Schutzen Mittens",ring1="Hajduk Ring",ring2="Demon's Ring",
  120. back="Toro Cape",waist="Aquiline Belt",legs="Iuitl Tights",feet="Lanun Bottes"}
  121. sets.midcast.CorsairShot.Acc = {ammo=gear.QDbullet,
  122. head="Laksamana's Hat",neck="Stoicheion Medal",ear1="Lifestorm Earring",ear2="Psystorm Earring",
  123. body="Lanun Frac",hands="Schutzen Mittens",ring1="Stormsoul Ring",ring2="Sangoma Ring",
  124. back="Navarch's Mantle",waist="Aquiline Belt",legs="Iuitl Tights",feet="Iuitl Gaiters +1"}
  125. sets.midcast.CorsairShot['Light Shot'] = {ammo=gear.QDbullet,
  126. head="Laksamana's Hat",neck="Stoicheion Medal",ear1="Lifestorm Earring",ear2="Psystorm Earring",
  127. body="Lanun Frac",hands="Schutzen Mittens",ring1="Stormsoul Ring",ring2="Sangoma Ring",
  128. back="Navarch's Mantle",waist="Aquiline Belt",legs="Iuitl Tights",feet="Iuitl Gaiters +1"}
  129. sets.midcast.CorsairShot['Dark Shot'] = sets.midcast.CorsairShot['Light Shot']
  130. -- Ranged gear
  131. sets.midcast.RA = {ammo=gear.RAbullet,
  132. head="Lanun Tricorne",neck="Ocachi Gorget",ear1="Clearview Earring",ear2="Volley Earring",
  133. body="Laksamana's Frac",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Stormsoul Ring",
  134. back="Terebellum Mantle",waist="Commodore Belt",legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  135. sets.midcast.RA.Acc = {ammo=gear.RAbullet,
  136. head="Laksamana's Hat",neck="Huani Collar",ear1="Clearview Earring",ear2="Volley Earring",
  137. body="Laksamana's Frac",hands="Buremte Gloves",ring1="Hajduk Ring",ring2="Beeline Ring",
  138. back="Libeccio Mantle",waist="Commodore Belt",legs="Thurandaut Tights +1",feet="Laksamana's Bottes"}
  139. -- Sets to return to when not performing an action.
  140. -- Resting sets
  141. sets.resting = {neck="Wiglen Gorget",ring1="Sheltered Ring",ring2="Paguroidea Ring"}
  142. -- Idle sets
  143. sets.idle = {ammo=gear.RAbullet,
  144. head="Whirlpool Mask",neck="Wiglen Gorget",ear1="Clearview Earring",ear2="Volley Earring",
  145. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  146. back="Shadow Mantle",waist="Flume Belt",legs="Nahtirah Trousers",feet="Skadi's Jambeaux +1"}
  147. sets.idle.Town = {main="Surcouf's Jambiya",range="Eminent Gun",ammo=gear.RAbullet,
  148. head="Laksamana's Hat",neck="Wiglen Gorget",ear1="Clearview Earring",ear2="Volley Earring",
  149. body="Laksamana's Frac",hands="Iuitl Wristbands",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  150. back="Shadow Mantle",waist="Flume Belt",legs="Nahtirah Trousers",feet="Skadi's Jambeaux +1"}
  151. -- Defense sets
  152. sets.defense.PDT = {
  153. head="Whirlpool Mask",neck="Twilight Torque",ear1="Clearview Earring",ear2="Volley Earring",
  154. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Defending Ring",ring2=gear.DarkRing.physical,
  155. back="Shadow Mantle",waist="Flume Belt",legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  156. sets.defense.MDT = {
  157. head="Whirlpool Mask",neck="Twilight Torque",ear1="Clearview Earring",ear2="Volley Earring",
  158. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Defending Ring",ring2="Shadow Ring",
  159. back="Engulfer Cape",waist="Flume Belt",legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  160. sets.Kiting = {feet="Skadi's Jambeaux +1"}
  161. -- Engaged sets
  162. -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
  163. -- sets if more refined versions aren't defined.
  164. -- If you create a set with both offense and defense modes, the offense mode should be first.
  165. -- EG: sets.engaged.Dagger.Accuracy.Evasion
  166. -- Normal melee group
  167. sets.engaged.Melee = {ammo=gear.RAbullet,
  168. head="Whirlpool Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
  169. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Epona's Ring",
  170. back="Atheling Mantle",waist="Windbuffet Belt",legs="Manibozho Brais",feet="Iuitl Gaiters +1"}
  171. sets.engaged.Acc = {ammo=gear.RAbullet,
  172. head="Whirlpool Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
  173. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Epona's Ring",
  174. back="Atheling Mantle",waist="Hurch'lan Sash",legs="Manibozho Brais",feet="Iuitl Gaiters +1"}
  175. sets.engaged.Melee.DW = {ammo=gear.RAbullet,
  176. head="Whirlpool Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  177. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Epona's Ring",
  178. back="Atheling Mantle",waist="Windbuffet Belt",legs="Manibozho Brais",feet="Iuitl Gaiters +1"}
  179. sets.engaged.Acc.DW = {ammo=gear.RAbullet,
  180. head="Whirlpool Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  181. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Epona's Ring",
  182. back="Atheling Mantle",waist="Hurch'lan Sash",legs="Manibozho Brais",feet="Iuitl Gaiters +1"}
  183. sets.engaged.Ranged = {ammo=gear.RAbullet,
  184. head="Whirlpool Mask",neck="Twilight Torque",ear1="Clearview Earring",ear2="Volley Earring",
  185. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Defending Ring",ring2=gear.DarkRing.physical,
  186. back="Shadow Mantle",waist="Flume Belt",legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  187. end
  188. -------------------------------------------------------------------------------------------------------------------
  189. -- Job-specific hooks for standard casting events.
  190. -------------------------------------------------------------------------------------------------------------------
  191. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  192. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  193. function job_precast(spell, action, spellMap, eventArgs)
  194. -- Check that proper ammo is available if we're using ranged attacks or similar.
  195. if spell.action_type == 'Ranged Attack' or spell.type == 'WeaponSkill' or spell.type == 'CorsairShot' then
  196. do_bullet_checks(spell, spellMap, eventArgs)
  197. end
  198. -- gear sets
  199. if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") and state.LuzafRing.value then
  200. equip(sets.precast.LuzafRing)
  201. elseif spell.type == 'CorsairShot' and state.CastingMode.value == 'Resistant' then
  202. classes.CustomClass = 'Acc'
  203. elseif spell.english == 'Fold' and buffactive['Bust'] == 2 then
  204. if sets.precast.FoldDoubleBust then
  205. equip(sets.precast.FoldDoubleBust)
  206. eventArgs.handled = true
  207. end
  208. end
  209. end
  210. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  211. function job_aftercast(spell, action, spellMap, eventArgs)
  212. if spell.type == 'CorsairRoll' and not spell.interrupted then
  213. display_roll_info(spell)
  214. end
  215. end
  216. -------------------------------------------------------------------------------------------------------------------
  217. -- User code that supplements standard library decisions.
  218. -------------------------------------------------------------------------------------------------------------------
  219. -- Return a customized weaponskill mode to use for weaponskill sets.
  220. -- Don't return anything if you're not overriding the default value.
  221. function get_custom_wsmode(spell, spellMap, default_wsmode)
  222. if buffactive['Transcendancy'] then
  223. return 'Brew'
  224. end
  225. end
  226. -- Called by the 'update' self-command, for common needs.
  227. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  228. function job_update(cmdParams, eventArgs)
  229. if newStatus == 'Engaged' and player.equipment.main == 'Chatoyant Staff' then
  230. state.OffenseMode:set('Ranged')
  231. end
  232. end
  233. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  234. function display_current_job_state(eventArgs)
  235. local msg = ''
  236. msg = msg .. 'Off.: '..state.OffenseMode.current
  237. msg = msg .. ', Rng.: '..state.RangedMode.current
  238. msg = msg .. ', WS.: '..state.WeaponskillMode.current
  239. msg = msg .. ', QD.: '..state.CastingMode.current
  240. if state.DefenseMode.value ~= 'None' then
  241. local defMode = state[state.DefenseMode.value ..'DefenseMode'].current
  242. msg = msg .. ', Defense: '..state.DefenseMode.value..' '..defMode
  243. end
  244. if state.Kiting.value then
  245. msg = msg .. ', Kiting'
  246. end
  247. if state.PCTargetMode.value ~= 'default' then
  248. msg = msg .. ', Target PC: '..state.PCTargetMode.value
  249. end
  250. if state.SelectNPCTargets.value then
  251. msg = msg .. ', Target NPCs'
  252. end
  253. msg = msg .. ', Roll Size: ' .. (state.LuzafRing.value and 'Large') or 'Small'
  254. add_to_chat(122, msg)
  255. eventArgs.handled = true
  256. end
  257. -------------------------------------------------------------------------------------------------------------------
  258. -- Utility functions specific to this job.
  259. -------------------------------------------------------------------------------------------------------------------
  260. function define_roll_values()
  261. rolls = {
  262. ["Corsair's Roll"] = {lucky=5, unlucky=9, bonus="Experience Points"},
  263. ["Ninja Roll"] = {lucky=4, unlucky=8, bonus="Evasion"},
  264. ["Hunter's Roll"] = {lucky=4, unlucky=8, bonus="Accuracy"},
  265. ["Chaos Roll"] = {lucky=4, unlucky=8, bonus="Attack"},
  266. ["Magus's Roll"] = {lucky=2, unlucky=6, bonus="Magic Defense"},
  267. ["Healer's Roll"] = {lucky=3, unlucky=7, bonus="Cure Potency Received"},
  268. ["Puppet Roll"] = {lucky=4, unlucky=8, bonus="Pet Magic Accuracy/Attack"},
  269. ["Choral Roll"] = {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
  270. ["Monk's Roll"] = {lucky=3, unlucky=7, bonus="Subtle Blow"},
  271. ["Beast Roll"] = {lucky=4, unlucky=8, bonus="Pet Attack"},
  272. ["Samurai Roll"] = {lucky=2, unlucky=6, bonus="Store TP"},
  273. ["Evoker's Roll"] = {lucky=5, unlucky=9, bonus="Refresh"},
  274. ["Rogue's Roll"] = {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
  275. ["Warlock's Roll"] = {lucky=4, unlucky=8, bonus="Magic Accuracy"},
  276. ["Fighter's Roll"] = {lucky=5, unlucky=9, bonus="Double Attack Rate"},
  277. ["Drachen Roll"] = {lucky=3, unlucky=7, bonus="Pet Accuracy"},
  278. ["Gallant's Roll"] = {lucky=3, unlucky=7, bonus="Defense"},
  279. ["Wizard's Roll"] = {lucky=5, unlucky=9, bonus="Magic Attack"},
  280. ["Dancer's Roll"] = {lucky=3, unlucky=7, bonus="Regen"},
  281. ["Scholar's Roll"] = {lucky=2, unlucky=6, bonus="Conserve MP"},
  282. ["Bolter's Roll"] = {lucky=3, unlucky=9, bonus="Movement Speed"},
  283. ["Caster's Roll"] = {lucky=2, unlucky=7, bonus="Fast Cast"},
  284. ["Courser's Roll"] = {lucky=3, unlucky=9, bonus="Snapshot"},
  285. ["Blitzer's Roll"] = {lucky=4, unlucky=9, bonus="Attack Delay"},
  286. ["Tactician's Roll"] = {lucky=5, unlucky=8, bonus="Regain"},
  287. ["Allies's Roll"] = {lucky=3, unlucky=10, bonus="Skillchain Damage"},
  288. ["Miser's Roll"] = {lucky=5, unlucky=7, bonus="Save TP"},
  289. ["Companion's Roll"] = {lucky=2, unlucky=10, bonus="Pet Regain and Regen"},
  290. ["Avenger's Roll"] = {lucky=4, unlucky=8, bonus="Counter Rate"},
  291. }
  292. end
  293. function display_roll_info(spell)
  294. rollinfo = rolls[spell.english]
  295. local rollsize = (state.LuzafRing.value and 'Large') or 'Small'
  296. if rollinfo then
  297. add_to_chat(104, spell.english..' provides a bonus to '..rollinfo.bonus..'. Roll size: '..rollsize)
  298. add_to_chat(104, 'Lucky roll is '..tostring(rollinfo.lucky)..', Unlucky roll is '..tostring(rollinfo.unlucky)..'.')
  299. end
  300. end
  301. -- Determine whether we have sufficient ammo for the action being attempted.
  302. function do_bullet_checks(spell, spellMap, eventArgs)
  303. local bullet_name
  304. local bullet_min_count = 1
  305. if spell.type == 'WeaponSkill' then
  306. if spell.skill == "Marksmanship" then
  307. if spell.element == 'None' then
  308. -- physical weaponskills
  309. bullet_name = gear.WSbullet
  310. else
  311. -- magical weaponskills
  312. bullet_name = gear.MAbullet
  313. end
  314. else
  315. -- Ignore non-ranged weaponskills
  316. return
  317. end
  318. elseif spell.type == 'CorsairShot' then
  319. bullet_name = gear.QDbullet
  320. elseif spell.action_type == 'Ranged Attack' then
  321. bullet_name = gear.RAbullet
  322. if buffactive['Triple Shot'] then
  323. bullet_min_count = 3
  324. end
  325. end
  326. local available_bullets = player.inventory[bullet_name] or player.wardrobe[bullet_name]
  327. -- If no ammo is available, give appropriate warning and end.
  328. if not available_bullets then
  329. if spell.type == 'CorsairShot' and player.equipment.ammo ~= 'empty' then
  330. add_to_chat(104, 'No Quick Draw ammo left. Using what\'s currently equipped ('..player.equipment.ammo..').')
  331. return
  332. elseif spell.type == 'WeaponSkill' and player.equipment.ammo == gear.RAbullet then
  333. add_to_chat(104, 'No weaponskill ammo left. Using what\'s currently equipped (standard ranged bullets: '..player.equipment.ammo..').')
  334. return
  335. else
  336. add_to_chat(104, 'No ammo ('..tostring(bullet_name)..') available for that action.')
  337. eventArgs.cancel = true
  338. return
  339. end
  340. end
  341. -- Don't allow shooting or weaponskilling with ammo reserved for quick draw.
  342. if spell.type ~= 'CorsairShot' and bullet_name == gear.QDbullet and available_bullets.count <= bullet_min_count then
  343. add_to_chat(104, 'No ammo will be left for Quick Draw. Cancelling.')
  344. eventArgs.cancel = true
  345. return
  346. end
  347. -- Low ammo warning.
  348. if spell.type ~= 'CorsairShot' and state.warned.value == false
  349. and available_bullets.count > 1 and available_bullets.count <= options.ammo_warning_limit then
  350. local msg = '***** LOW AMMO WARNING: '..bullet_name..' *****'
  351. --local border = string.repeat("*", #msg)
  352. local border = ""
  353. for i = 1, #msg do
  354. border = border .. "*"
  355. end
  356. add_to_chat(104, border)
  357. add_to_chat(104, msg)
  358. add_to_chat(104, border)
  359. state.warned:set()
  360. elseif available_bullets.count > options.ammo_warning_limit and state.warned then
  361. state.warned:reset()
  362. end
  363. end
  364. -- Select default macro book on initial load or subjob change.
  365. function select_default_macro_book()
  366. set_macro_page(1, 19)
  367. end
Advertisement
Add Comment
Please, Sign In to add comment