summaryrefslogtreecommitdiff
path: root/Data/BuiltIn/Libraries/lua-addons/addons/bluguide/masterlist.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Data/BuiltIn/Libraries/lua-addons/addons/bluguide/masterlist.lua')
-rw-r--r--Data/BuiltIn/Libraries/lua-addons/addons/bluguide/masterlist.lua192
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.