diff options
Diffstat (limited to 'Data/BuiltIn/Libraries/lua-addons/addons/bluguide/masterlist.lua')
-rw-r--r-- | Data/BuiltIn/Libraries/lua-addons/addons/bluguide/masterlist.lua | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/Data/BuiltIn/Libraries/lua-addons/addons/bluguide/masterlist.lua b/Data/BuiltIn/Libraries/lua-addons/addons/bluguide/masterlist.lua new file mode 100644 index 0000000..eaed220 --- /dev/null +++ b/Data/BuiltIn/Libraries/lua-addons/addons/bluguide/masterlist.lua @@ -0,0 +1,192 @@ +texts = require("texts") +spellbuttons = require("ui/spellbuttons") +spelllist = {} +display = {} + +local function get_limits() + local player = windower.ffxi.get_player() + local slots = 0 + local points = 0 + local gifts = 0 + local level = 0 + + if player.main_job == "BLU" then + if player.main_job_level > 70 then + slots = 20 + else + slots = (math.floor((player.sub_job_level + 9) / 10) * 2) + 4 + end + + points = (math.floor((player.main_job_level + 9) / 10) * 5) + 5 + if player.main_job_level >= 75 then + points = points + player.merits.assimilation + if player.main_job_level == 99 then + points = points + player.job_points.blu.blue_magic_point_bonus + end + end + level = player.main_job_level + elseif player.sub_job == "BLU" then + points = (math.floor((player.sub_job_level + 9) / 10) * 5) + 5 + slots = (math.floor((player.sub_job_level + 9) / 10) * 2) + 4 + level = player.sub_job_level + end + + local jobpointsspent = player.job_points.blu.jp_spent + if jobpointsspent >= 1200 then + gifts = 2 + elseif jobpointsspent >= 100 then + gifts = 1 + end + + spelllist.limits = { slots = slots, points = points, level = level } + spelllist.gifts = gifts + spelllist.learned = windower.ffxi.get_spells() +end + +function spelllist.create(px, py, updatefn) + local textsettings = { + text = { size = 10, font = 'Lucida Console' }, + bg = { alpha = 120, red = 0, green = 0, blue = 0, visible = true }, + flags = { draggable = false }, + pos = {x = px, y = py} } + + slots = texts.new("Slots: 0/20 Points: 0/70", textsettings) + x = px + y = py + slots:pos(px, py) + slots:show() + + spelllist.slots = 0 + spelllist.points = 0 + spelllist.update = updatefn + get_limits() + + t = get_set_spells() + if not t.spells then return end + for _,v in pairs(t.spells) do + spelllist.add(v) + end +end + +function get_set_spells() + local player = windower.ffxi.get_player() + local t = {} + if player.main_job == "BLU" then + t = windower.ffxi.get_mjob_data() + elseif player.sub_job == "BLU" then + t = windower.ffxi.get_sjob_data() + end + return t +end + +function spelllist.add(spell) + spelllist[spell] = true + spelllist.slots = spelllist.slots + 1 + spelllist.points = spelllist.points + spellinfo[spell].cost + + local newspell = spellbuttons.new(string.format('%-24s %i', spellinfo[spell].name, spellinfo[spell].cost), spell, spellinfo[spell].cost, x, y + spelllist.slots * lineheight) + if spellinfo[spell].element == 0 then --fire + newspell:color(255, 0, 0) + elseif spellinfo[spell].element == 1 then --ice + newspell:color(180, 180, 255) + elseif spellinfo[spell].element == 2 then --wind + newspell:color(0, 255, 0) + elseif spellinfo[spell].element == 3 then --earth + newspell:color(255, 255, 0) + elseif spellinfo[spell].element == 4 then --thunder + newspell:color(255, 0, 255) + elseif spellinfo[spell].element == 5 then --water + newspell:color(100, 100, 255) + elseif spellinfo[spell].element == 6 then --light + newspell:color(235, 235, 255) + elseif spellinfo[spell].element == 7 then --dark + newspell:color(180, 180, 180) + elseif spellinfo[spell].element == 15 then --physical + newspell:color(200, 100, 0) + end + + newspell:show() + display[spell] = newspell + + spelllist.sort() + + local t = get_set_spells() + for i = 1, spelllist.limits.slots do + if t.spells[i] == nil then + windower.ffxi.set_blue_magic_spell(spell, i) + return + end + end +end + +function spelllist.remove(spell) + display[spell]:destroy() + display[spell] = nil + + spelllist[spell] = nil + + spelllist.slots = spelllist.slots - 1 + spelllist.points = spelllist.points - spellinfo[spell].cost + + spelllist.sort() + + + local t = get_set_spells() + for i = 1, spelllist.limits.slots do + if t.spells[i] == spell then + windower.ffxi.remove_blue_magic_spell(i) + + return + end + end + +end + +function spelllist.sort() + local pos = 1 + vspace = "\n" + for _, v in pairs(display) do + vspace = vspace.."\n" + v:pos(x, y + (pos*lineheight)) + v:update() + pos = pos + 1 + end + slots:text(string.format('Slots: %2i/%2i Points: %2i/%2i', spelllist.slots, spelllist.limits.slots, spelllist.points, spelllist.limits.points)..vspace) + spelllist.update() +end + +function spelllist.toggle(spell) + if spelllist[spell] then + spelllist.remove(spell) + else + spelllist.add(spell) + end +end + +return spelllist + +--Copyright © 2015, Anissa +--All rights reserved. + +--Redistribution and use in source and binary forms, with or without +--modification, are permitted provided that the following conditions are met: + +-- * Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- * Redistributions in binary form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in the +-- documentation and/or other materials provided with the distribution. +-- * Neither the name of bluGuide nor the +-- names of its contributors may be used to endorse or promote products +-- derived from this software without specific prior written permission. + +--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +--ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +--WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +--DISCLAIMED. IN NO EVENT SHALL ANISSA BE LIABLE FOR ANY +--DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +--(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +--LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +--ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +--(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +--SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |