Yamoman

cor lua

Mar 16th, 2014
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.52 KB | None | 0 0
  1. -------------------------------------------------------------------------------------------------------------------
  2. -- Initialization function that defines sets and variables to be used.
  3. -------------------------------------------------------------------------------------------------------------------
  4.  
  5. -- IMPORTANT: Make sure to also get the Mote-Include.lua file to go with this.
  6.  
  7. --[[
  8. gs c toggle luzaf -- Toggles use of Luzaf Ring on and off
  9.  
  10. Offense mode is melee or ranged. Used ranged offense mode if you are engaged
  11. for ranged weaponskills, but not actually meleeing.
  12. Acc on offense mode (which is intended for melee) will currently use .Acc weaponskill
  13. mode for both melee and ranged weaponskills. Need to fix that in core.
  14. --]]
  15.  
  16.  
  17. -- Initialization function for this job file.
  18. function get_sets()
  19. -- Load and initialize the include file.
  20. include('Mote-Include.lua')
  21. end
  22.  
  23. -- Setup vars that are user-independent.
  24. function job_setup()
  25. -- Whether to use Luzaf's Ring
  26. state.LuzafRing = false
  27. state.warned = false
  28.  
  29. define_roll_values()
  30. end
  31.  
  32.  
  33. -- Setup vars that are user-dependent. Can override this function in a sidecar file.
  34. function user_setup()
  35. -- Options: Override default values
  36. options.OffenseModes = {'Ranged', 'Melee', 'Acc'}
  37. options.RangedModes = {'Normal', 'Acc'}
  38. options.WeaponskillModes = {'Normal', 'Acc', 'Att', 'Mod'}
  39. options.CastingModes = {'Normal', 'Resistant'}
  40. options.IdleModes = {'Normal'}
  41. options.RestingModes = {'Normal'}
  42. options.PhysicalDefenseModes = {'PDT'}
  43. options.MagicalDefenseModes = {'MDT'}
  44.  
  45. state.Defense.PhysicalMode = 'PDT'
  46.  
  47. gear.RAbullet = "Adlivun Bullet"
  48. gear.WSbullet = "Adlivun Bullet"
  49. gear.MAbullet = "Bronze Bullet"
  50. gear.QDbullet = "Adlivun Bullet"
  51. options.ammo_warning_limit = 15
  52.  
  53. -- Additional local binds
  54. -- Cor doesn't use hybrid defense mode; using that for ranged mode adjustments.
  55. send_command('bind ^f9 gs c cycle RangedMode')
  56.  
  57. send_command('bind ^` input /ja "Double-up" <me>')
  58. send_command('bind !` input /ja "Bolter\'s Roll" <me>')
  59.  
  60.  
  61. -- Default macro set/book
  62. set_macro_page(1, 19)
  63. end
  64.  
  65.  
  66. -- Called when this job file is unloaded (eg: job change)
  67. function file_unload()
  68. if binds_on_unload then
  69. binds_on_unload()
  70. end
  71.  
  72. send_command('unbind ^`')
  73. send_command('unbind !`')
  74. end
  75.  
  76. -- Define sets and vars used by this job file.
  77. function init_gear_sets()
  78. --------------------------------------
  79. -- Start defining the sets
  80. --------------------------------------
  81.  
  82. -- Precast Sets
  83.  
  84. -- Precast sets to enhance JAs
  85.  
  86. sets.precast.JA['Triple Shot'] = {body="Navarch's Frac +2"}
  87. sets.precast.JA['Snake Eye'] = {legs="Commodore Culottes +2"}
  88. sets.precast.JA['Wild Card'] = {feet="Commodore Bottes +2"}
  89. sets.precast.JA['Random Deal'] = {body="Commodore Frac"}
  90.  
  91.  
  92. sets.precast.CorsairRoll = {head="Commodore's Tricorne +2",hands="Navarch's Gants +2"}
  93.  
  94. sets.precast.CorsairRoll["Caster's Roll"] = set_combine(sets.precast.CorsairRoll, {legs="Navarch's Culottes +2"})
  95. sets.precast.CorsairRoll["Courser's Roll"] = set_combine(sets.precast.CorsairRoll, {feet="Navarch's Bottes +2"})
  96. sets.precast.CorsairRoll["Blitzer's Roll"] = set_combine(sets.precast.CorsairRoll, {head="Navarch's Tricorne +2"})
  97. sets.precast.CorsairRoll["Tactician's Roll"] = set_combine(sets.precast.CorsairRoll, {body="Navarch's Frac +2"})
  98. sets.precast.CorsairRoll["Allies' Roll"] = set_combine(sets.precast.CorsairRoll, {hands="Navarch's Gants +2"})
  99.  
  100. sets.precast.LuzafRing = {ring2="Luzaf's Ring"}
  101.  
  102. sets.precast.CorsairShot = {head="Blood Mask"}
  103.  
  104.  
  105. -- Waltz set (chr and vit)
  106. sets.precast.Waltz = {
  107. head="Whirlpool Mask",
  108. body="Iuitl Vest",hands="Iuitl Wristbands",
  109. legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  110.  
  111. -- Don't need any special gear for Healing Waltz.
  112. sets.precast.Waltz['Healing Waltz'] = {}
  113.  
  114. -- Fast cast sets for spells
  115.  
  116. sets.precast.FC = {head="Haruspex Hat",ear2="Loquacious Earring",hands="Thaumas Gloves",ring1="Prolix Ring"}
  117.  
  118. sets.precast.FC.Utsusemi = set_combine(sets.precast.FC, {neck="Magoraga Beads"})
  119.  
  120.  
  121. sets.precast.RangedAttack = {ammo=gear.RAbullet,
  122. head="Navarch's Tricorne +2",
  123. body="Laksamana's Frac",hands="Iuitl Wristbands",
  124. back="Navarch's Mantle",waist="Impulse Belt",legs="Nahtirah Trousers",feet="Wurrukatte Boots"}
  125.  
  126.  
  127. -- Weaponskill sets
  128. -- Default set for any weaponskill that isn't any more specifically defined
  129. sets.precast.WS = {
  130. head="Whirlpool Mask",neck=gear.ElementalGorget,ear1="Bladeborn Earring",ear2="Steelflash Earring",
  131. body="Manibozho Jerkin",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Epona's Ring",
  132. back="Atheling Mantle",waist=gear.ElementalBelt,legs="Manibozho Brais",feet="Iuitl Gaiters +1"}
  133.  
  134.  
  135. -- Specific weaponskill sets. Uses the base set if an appropriate WSMod version isn't found.
  136. sets.precast.WS['Evisceration'] = sets.precast.WS
  137.  
  138. sets.precast.WS['Exenterator'] = set_combine(sets.precast.WS, {legs="Nahtirah Trousers"})
  139.  
  140. sets.precast.WS['Requiescat'] = set_combine(sets.precast.WS, {legs="Nahtirah Trousers"})
  141.  
  142. sets.precast.WS['Last Stand'] = {ammo=gear.WSbullet,
  143. head="Whirlpool Mask",neck=gear.ElementalGorget,ear1="Clearview Earring",ear2="Moonshade Earring",
  144. body="Laksamana's Frac",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Stormsoul Ring",
  145. back="Terebellum Mantle",waist=gear.ElementalBelt,legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  146.  
  147. sets.precast.WS['Last Stand'].Acc = {ammo=gear.WSbullet,
  148. head="Laksamana's Hat",neck=gear.ElementalGorget,ear1="Clearview Earring",ear2="Moonshade Earring",
  149. body="Laksamana's Frac",hands="Buremte Gloves",ring1="Hajduk Ring",ring2="Stormsoul Ring",
  150. back="Libeccio Mantle",waist=gear.ElementalBelt,legs="Thurandaut Tights +1",feet="Laksamana's Bottes"}
  151.  
  152.  
  153. sets.precast.WS['Wildfire'] = {ammo=gear.MAbullet,
  154. head="Thaumas Hat",neck="Stoicheion Medal",ear1="Friomisi Earring",ear2="Hecate's Earring",
  155. body="Manibozho Jerkin",hands="Iuitl Wristbands",ring1="Stormsoul Ring",ring2="Demon's Ring",
  156. back="Toro Cape",waist=gear.ElementalBelt,legs="Iuitl Tights",feet="Iuitl Gaiters +1"}
  157.  
  158. sets.precast.WS['Wildfire'].Brew = {ammo=gear.MAbullet,
  159. head="Thaumas Hat",neck="Stoicheion Medal",ear1="Friomisi Earring",ear2="Hecate's Earring",
  160. body="Manibozho Jerkin",hands="Iuitl Wristbands",ring1="Stormsoul Ring",ring2="Demon's Ring",
  161. back="Toro Cape",waist=gear.ElementalBelt,legs="Iuitl Tights",feet="Iuitl Gaiters +1"}
  162.  
  163. sets.precast.WS['Leaden Salute'] = sets.precast.WS['Wildfire']
  164.  
  165.  
  166. -- Midcast Sets
  167. sets.midcast.FastRecast = {
  168. head="Whirlpool Mask",
  169. body="Iuitl Vest",hands="Iuitl Wristbands",
  170. legs="Manibozho Brais",feet="Iuitl Gaiters +1"}
  171.  
  172. -- Specific spells
  173. sets.midcast.Utsusemi = sets.midcast.FastRecast
  174.  
  175. sets.midcast.CorsairShot = {ammo=gear.QDbullet,
  176. head="Blood Mask",neck="Stoicheion Medal",ear1="Friomisi Earring",ear2="Hecate's Earring",
  177. body="Laksamana's Frac",hands="Schutzen Mittens",ring1="Hajduk Ring",ring2="Demon's Ring",
  178. back="Toro Cape",waist="Aquiline Belt",legs="Iuitl Tights",feet="Commodore Bottes +2"}
  179.  
  180. sets.midcast.CorsairShot.Acc = {ammo=gear.QDbullet,
  181. head="Laksamana's Hat",neck="Stoicheion Medal",ear1="Lifestorm Earring",ear2="Psystorm Earring",
  182. body="Laksamana's Frac",hands="Schutzen Mittens",ring1="Stormsoul Ring",ring2="Sangoma Ring",
  183. back="Navarch's Mantle",waist="Aquiline Belt",legs="Iuitl Tights",feet="Iuitl Gaiters +1"}
  184.  
  185. sets.midcast.CorsairShot['Light Shot'] = {ammo=gear.QDbullet,
  186. head="Laksamana's Hat",neck="Stoicheion Medal",ear1="Lifestorm Earring",ear2="Psystorm Earring",
  187. body="Laksamana's Frac",hands="Schutzen Mittens",ring1="Stormsoul Ring",ring2="Sangoma Ring",
  188. back="Navarch's Mantle",waist="Aquiline Belt",legs="Iuitl Tights",feet="Iuitl Gaiters +1"}
  189.  
  190. sets.midcast.CorsairShot['Dark Shot'] = sets.midcast.CorsairShot['Light Shot']
  191.  
  192.  
  193. -- Ranged gear
  194. sets.midcast.RangedAttack = {ammo=gear.RAbullet,
  195. head="Whirlpool Mask",neck="Ocachi Gorget",ear1="Clearview Earring",ear2="Volley Earring",
  196. body="Laksamana's Frac",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Stormsoul Ring",
  197. back="Terebellum Mantle",waist="Commodore Belt",legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  198.  
  199. sets.midcast.RangedAttack.Acc = {ammo=gear.RAbullet,
  200. head="Laksamana's Hat",neck="Huani Collar",ear1="Clearview Earring",ear2="Volley Earring",
  201. body="Laksamana's Frac",hands="Buremte Gloves",ring1="Hajduk Ring",ring2="Beeline Ring",
  202. back="Libeccio Mantle",waist="Commodore Belt",legs="Thurandaut Tights +1",feet="Laksamana's Bottes"}
  203.  
  204.  
  205. -- Sets to return to when not performing an action.
  206.  
  207. -- Resting sets
  208. sets.resting = {neck="Wiglen Gorget",ring1="Sheltered Ring",ring2="Paguroidea Ring"}
  209.  
  210.  
  211. -- Idle sets
  212. sets.idle = {ammo=gear.RAbullet,
  213. head="Whirlpool Mask",neck="Wiglen Gorget",ear1="Clearview Earring",ear2="Volley Earring",
  214. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  215. back="Shadow Mantle",waist="Flume Belt",legs="Nahtirah Trousers",feet="Skadi's Jambeaux +1"}
  216.  
  217. sets.idle.Town = {main="Surcouf's Jambiya",range="Eminent Gun",ammo=gear.RAbullet,
  218. head="Laksamana's Hat",neck="Wiglen Gorget",ear1="Clearview Earring",ear2="Volley Earring",
  219. body="Laksamana's Frac",hands="Iuitl Wristbands",ring1="Sheltered Ring",ring2="Paguroidea Ring",
  220. back="Shadow Mantle",waist="Flume Belt",legs="Nahtirah Trousers",feet="Skadi's Jambeaux +1"}
  221.  
  222. -- Defense sets
  223. sets.defense.PDT = {
  224. head="Whirlpool Mask",neck="Twilight Torque",ear1="Clearview Earring",ear2="Volley Earring",
  225. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Dark Ring",ring2="Dark Ring",
  226. back="Shadow Mantle",waist="Flume Belt",legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  227.  
  228. sets.defense.MDT = {
  229. head="Whirlpool Mask",neck="Twilight Torque",ear1="Clearview Earring",ear2="Volley Earring",
  230. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Dark Ring",ring2="Shadow Ring",
  231. back="Engulfer Cape",waist="Flume Belt",legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  232.  
  233.  
  234. sets.Kiting = {feet="Skadi's Jambeaux +1"}
  235.  
  236. -- Engaged sets
  237.  
  238. -- Variations for TP weapon and (optional) offense/defense modes. Code will fall back on previous
  239. -- sets if more refined versions aren't defined.
  240. -- If you create a set with both offense and defense modes, the offense mode should be first.
  241. -- EG: sets.engaged.Dagger.Accuracy.Evasion
  242.  
  243. -- Normal melee group
  244. sets.engaged.Melee = {ammo=gear.RAbullet,
  245. head="Whirlpool Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
  246. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Epona's Ring",
  247. back="Atheling Mantle",waist="Windbuffet Belt",legs="Manibozho Brais",feet="Iuitl Gaiters +1"}
  248.  
  249. sets.engaged.Acc = {ammo=gear.RAbullet,
  250. head="Whirlpool Mask",neck="Asperity Necklace",ear1="Bladeborn Earring",ear2="Steelflash Earring",
  251. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Epona's Ring",
  252. back="Atheling Mantle",waist="Hurch'lan Sash",legs="Manibozho Brais",feet="Iuitl Gaiters +1"}
  253.  
  254. sets.engaged.Melee.DW = {ammo=gear.RAbullet,
  255. head="Whirlpool Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  256. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Epona's Ring",
  257. back="Atheling Mantle",waist="Windbuffet Belt",legs="Manibozho Brais",feet="Iuitl Gaiters +1"}
  258.  
  259. sets.engaged.Acc.DW = {ammo=gear.RAbullet,
  260. head="Whirlpool Mask",neck="Asperity Necklace",ear1="Dudgeon Earring",ear2="Heartseeker Earring",
  261. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Rajas Ring",ring2="Epona's Ring",
  262. back="Atheling Mantle",waist="Hurch'lan Sash",legs="Manibozho Brais",feet="Iuitl Gaiters +1"}
  263.  
  264.  
  265. sets.engaged.Ranged = {ammo=gear.RAbullet,
  266. head="Whirlpool Mask",neck="Twilight Torque",ear1="Clearview Earring",ear2="Volley Earring",
  267. body="Iuitl Vest",hands="Iuitl Wristbands",ring1="Dark Ring",ring2="Dark Ring",
  268. back="Shadow Mantle",waist="Flume Belt",legs="Nahtirah Trousers",feet="Iuitl Gaiters +1"}
  269. end
  270.  
  271. -------------------------------------------------------------------------------------------------------------------
  272. -- Job-specific hooks that are called to process player actions at specific points in time.
  273. -------------------------------------------------------------------------------------------------------------------
  274.  
  275. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  276. -- Set eventArgs.useMidcastGear to true if we want midcast gear equipped on precast.
  277. function job_precast(spell, action, spellMap, eventArgs)
  278.  
  279. -- bullet checks
  280. local check_bullet
  281. local check_bullet_count = 1
  282. if spell.type == 'WeaponSkill' and bow_gun_weaponskills:contains(spell.english) then
  283. if spell.element == 'None' then
  284. -- physical weaponskills
  285. check_bullet = gear.WSbullet
  286. else
  287. -- magical weaponskills
  288. check_bullet = gear.MAbullet
  289. end
  290. elseif spell.type == 'CorsairShot' then
  291. check_bullet = gear.QDbullet
  292. elseif spell.action_type == 'Ranged Attack' then
  293. check_bullet = gear.RAbullet
  294. if buffactive['Triple Shot'] then
  295. check_bullet_count = 3
  296. end
  297. end
  298.  
  299. if check_bullet then
  300. if not player.inventory[check_bullet] then
  301. if spell.type == 'CorsairShot' and player.equipment.ammo ~= 'empty' then
  302. add_to_chat(104, 'No Quick Draw ammo left. Using what\'s currently equipped ('..player.equipment.ammo..').')
  303. else
  304. add_to_chat(104, 'No ammo available for that action.')
  305. eventArgs.cancel = true
  306. return
  307. end
  308. end
  309.  
  310. if spell.type ~= 'CorsairShot' then
  311. if check_bullet == gear.QDbullet and
  312. player.inventory[check_bullet].count <= check_bullet_count then
  313. add_to_chat(104, 'No ammo will be left for Quick Draw. Cancelling.')
  314. eventArgs.cancel = true
  315. return
  316. end
  317.  
  318. if player.inventory[check_bullet].count <= options.ammo_warning_limit and
  319. player.inventory[check_bullet].count > 1 and not state.warned then
  320. add_to_chat(104, '*****************************')
  321. add_to_chat(104, '***** LOW AMMO WARNING *****')
  322. add_to_chat(104, '*****************************')
  323. state.warned = true
  324. elseif player.inventory[check_bullet].count > options.ammo_warning_limit and state.warned then
  325. state.warned = false
  326. end
  327. end
  328. end
  329.  
  330.  
  331. -- gear sets
  332. if (spell.type == 'CorsairRoll' or spell.english == "Double-Up") and state.LuzafRing then
  333. equip(sets.precast.LuzafRing)
  334. elseif spell.type == 'CorsairShot' and state.CastingMode == 'Resistant' then
  335. classes.CustomClass = 'Acc'
  336. elseif spell.type == 'Waltz' then
  337. refine_waltz(spell, action, spellMap, eventArgs)
  338. end
  339. end
  340.  
  341.  
  342. -- Set eventArgs.handled to true if we don't want any automatic gear equipping to be done.
  343. function job_aftercast(spell, action, spellMap, eventArgs)
  344. if spell.type == 'CorsairRoll' and not spell.interrupted then
  345. display_roll_info(spell)
  346. end
  347. end
  348.  
  349.  
  350. -------------------------------------------------------------------------------------------------------------------
  351. -- Customization hooks for idle and melee sets, after they've been automatically constructed.
  352. -------------------------------------------------------------------------------------------------------------------
  353.  
  354. -- Return a customized weaponskill mode to use for weaponskill sets.
  355. -- Don't return anything if you're not overriding the default value.
  356. function get_custom_wsmode(spell, action, spellMap)
  357. if buffactive['Transcendancy'] then
  358. return 'Brew'
  359. end
  360. end
  361.  
  362. -------------------------------------------------------------------------------------------------------------------
  363. -- General hooks for other events.
  364. -------------------------------------------------------------------------------------------------------------------
  365.  
  366. -- Called when the player's status changes.
  367. function job_status_change(newStatus, oldStatus, eventArgs)
  368. if newStatus == 'Engaged' and player.equipment.main == 'Chatoyant Staff' then
  369. state.OffenseMode = 'Ranged'
  370. end
  371. end
  372.  
  373. -- Called when a player gains or loses a buff.
  374. -- buff == buff gained or lost
  375. -- gain == true if the buff was gained, false if it was lost.
  376. function job_buff_change(buff, gain)
  377.  
  378. end
  379.  
  380.  
  381. -------------------------------------------------------------------------------------------------------------------
  382. -- User code that supplements self-commands.
  383. -------------------------------------------------------------------------------------------------------------------
  384.  
  385. -- Called by the 'update' self-command, for common needs.
  386. -- Set eventArgs.handled to true if we don't want automatic equipping of gear.
  387. function job_update(cmdParams, eventArgs)
  388. if newStatus == 'Engaged' and player.equipment.main == 'Chatoyant Staff' then
  389. state.OffenseMode = 'Ranged'
  390. end
  391. end
  392.  
  393. -- Job-specific toggles.
  394. function job_toggle(field)
  395. if field:lower() == 'luzaf' then
  396. state.LuzafRing = not state.LuzafRing
  397. return "Use of Luzaf Ring", state.LuzafRing
  398. end
  399. end
  400.  
  401. -- Set eventArgs.handled to true if we don't want the automatic display to be run.
  402. function display_current_job_state(eventArgs)
  403. local defenseString = ''
  404. if state.Defense.Active then
  405. local defMode = state.Defense.PhysicalMode
  406. if state.Defense.Type == 'Magical' then
  407. defMode = state.Defense.MagicalMode
  408. end
  409.  
  410. defenseString = 'Defense: '..state.Defense.Type..' '..defMode..', '
  411. end
  412.  
  413. local rollsize = 'Small'
  414. if state.LuzafRing then
  415. rollsize = 'Large'
  416. end
  417.  
  418. local pcTarget = ''
  419. if state.PCTargetMode ~= 'default' then
  420. pcTarget = ', Target PC: '..state.PCTargetMode
  421. end
  422.  
  423. local npcTarget = ''
  424. if state.SelectNPCTargets then
  425. pcTarget = ', Target NPCs'
  426. end
  427.  
  428.  
  429. add_to_chat(122,'Offense: '..state.OffenseMode..', Ranged: '..state.RangedMode..', WS: '..state.WeaponskillMode..
  430. ', Quick Draw: '..state.CastingMode..', '..defenseString..'Kiting: '..on_off_names[state.Kiting]..
  431. ', Roll Size: '..rollsize..pcTarget..npcTarget)
  432.  
  433. eventArgs.handled = true
  434. end
  435.  
  436. -------------------------------------------------------------------------------------------------------------------
  437. -- Utility functions specific to this job.
  438. -------------------------------------------------------------------------------------------------------------------
  439.  
  440. function define_roll_values()
  441. rolls = {
  442. ["Corsair's Roll"] = {lucky=5, unlucky=9, bonus="Experience Points"},
  443. ["Ninja Roll"] = {lucky=4, unlucky=8, bonus="Evasion"},
  444. ["Hunter's Roll"] = {lucky=4, unlucky=8, bonus="Accuracy"},
  445. ["Chaos Roll"] = {lucky=4, unlucky=8, bonus="Attack"},
  446. ["Magus's Roll"] = {lucky=2, unlucky=6, bonus="Magic Defense"},
  447. ["Healer's Roll"] = {lucky=3, unlucky=7, bonus="Cure Potency Received"},
  448. ["Puppet Roll"] = {lucky=4, unlucky=8, bonus="Pet Magic Accuracy/Attack"},
  449. ["Choral Roll"] = {lucky=2, unlucky=6, bonus="Spell Interruption Rate"},
  450. ["Monk's Roll"] = {lucky=3, unlucky=7, bonus="Subtle Blow"},
  451. ["Beast Roll"] = {lucky=4, unlucky=8, bonus="Pet Attack"},
  452. ["Samurai Roll"] = {lucky=2, unlucky=6, bonus="Store TP"},
  453. ["Evoker's Roll"] = {lucky=5, unlucky=9, bonus="Refresh"},
  454. ["Rogue's Roll"] = {lucky=5, unlucky=9, bonus="Critical Hit Rate"},
  455. ["Warlock's Roll"] = {lucky=4, unlucky=8, bonus="Magic Accuracy"},
  456. ["Fighter's Roll"] = {lucky=5, unlucky=9, bonus="Double Attack Rate"},
  457. ["Drachen Roll"] = {lucky=3, unlucky=7, bonus="Pet Accuracy"},
  458. ["Gallant's Roll"] = {lucky=3, unlucky=7, bonus="Defense"},
  459. ["Wizard's Roll"] = {lucky=5, unlucky=9, bonus="Magic Attack"},
  460. ["Dancer's Roll"] = {lucky=3, unlucky=7, bonus="Regen"},
  461. ["Scholar's Roll"] = {lucky=2, unlucky=6, bonus="Conserve MP"},
  462. ["Bolter's Roll"] = {lucky=3, unlucky=9, bonus="Movement Speed"},
  463. ["Caster's Roll"] = {lucky=2, unlucky=7, bonus="Fast Cast"},
  464. ["Courser's Roll"] = {lucky=3, unlucky=9, bonus="Snapshot"},
  465. ["Blitzer's Roll"] = {lucky=4, unlucky=9, bonus="Attack Delay"},
  466. ["Tactician's Roll"] = {lucky=5, unlucky=8, bonus="Regain"},
  467. ["Allies's Roll"] = {lucky=3, unlucky=10, bonus="Skillchain Damage"},
  468. ["Miser's Roll"] = {lucky=5, unlucky=7, bonus="Save TP"},
  469. ["Companion's Roll"] = {lucky=2, unlucky=10, bonus="Pet Regain and Regen"},
  470. ["Avenger's Roll"] = {lucky=4, unlucky=8, bonus="Counter Rate"},
  471. }
  472. end
  473.  
  474. function display_roll_info(spell)
  475. rollinfo = rolls[spell.english]
  476. local rollsize = 'Small'
  477. if state.LuzafRing then
  478. rollsize = 'Large'
  479. end
  480. if rollinfo then
  481. add_to_chat(104, spell.english..' provides a bonus to '..rollinfo.bonus..'. Roll size: '..rollsize)
  482. add_to_chat(104, 'Lucky roll is '..tostring(rollinfo.lucky)..', Unlucky roll is '..tostring(rollinfo.unlucky)..'.')
  483. end
  484. end
Advertisement
Add Comment
Please, Sign In to add comment