Mercurial > wow > breuesk
view Core.lua @ 9:daed0597deba
Pretty printing for lists
A decision on how to index them up
Bug about reverse list maintenance fixed.
Next step noted.
author | John@Doomsday |
---|---|
date | Wed, 07 Mar 2012 14:56:25 -0500 |
parents | b05fcb225c4a |
children | 99c279ab0b75 |
line wrap: on
line source
-- ideas: last attended data and/or remove people who haven't attended in X days -- and/or just a "remove from all lists" option -- order of implementation -- (_) lists fully functional (/script interface) -- (_) lists single-user functional via command line interface -- ( ) all actions should reference the player list rather than player names -- ( ) player entries should persist as long as any list or change references -- ( ) convert slist entries down to a delimited string - much smaller -- ( ) lists store number slots rather than flat indexing -- ( ) single user + admin gui (manual suicides) -- ( ) single user + admin gui (master loot) -- ( ) communication and list trimming -- ( ) admins -- ( ) players gui -- ( ) crypto / protection against tampering -- ( ) alt tracking -- ( ) reserves -- important things to remember: -- 1) ipairs iterates from 1 until the first missing int index -> no gaps if int -- indexing -- 2) a.x === a["x"] -- 3) a["1"] =/= a[1] -- 4) table.remove() works ok if reverse iterating, terrible at anything else -- 5) pairs() does not have a guaranteed iteration order bsk = LibStub("AceAddon-3.0"):NewAddon("bsk","AceConsole-3.0", "AceHook-3.0", "AceComm-3.0", "AceSerializer-3.0") local L = LibStub("AceLocale-3.0"):GetLocale("bsk", false) local AceGUI = LibStub("AceGUI-3.0") function bsk:OnInitialize() self.db = LibStub("AceDB-3.0"):New("BskDB", self.defaults, "Default") self.options.args.profile = LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db) LibStub("AceConfig-3.0"):RegisterOptionsTable("bsk", self.options) self.optionsFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("bsk", "bsk") self:RegisterChatCommand("bsk", "HandleCommand") end function bsk:OnEnable() bsk:CreateWorkingStateFromChanges(self.db.profile.changes) --self:HandleCommand() end function bsk:HandleCommand(paramIn) local param = { strsplit(" ", paramIn) } local FixPersonName = function(p) p = p:lower() -- next two lines from sylvanaar local MULTIBYTE_FIRST_CHAR = "^([\192-\255]?%a?[\128-\191]*)" return string.gsub(p, MULTIBYTE_FIRST_CHAR, string.upper, 1) end if param[1] == nil or param[1] == "" then bsk:Print("need args") return end if param[1] == "persons" then bsk:PrintPersons() elseif param[1] == "changes" then bsk:PrintChanges() elseif param[1] == "add" then if param[2] == nil or param[2] == "" then bsk:PrintTable(param) return end if param[3] == nil or param[3] == "" then bsk:PrintTable(param) return end if param[2] == "person" then if param[3] == "all" then bsk:AddMissingPersons() else local person = FixPersonName(param[3]) bsk:AddPerson(person) end elseif param[2] == "list" then bsk:CreateList(param[3]) elseif param[2] == "persontolist" then if param[4] == nil or param[4] == "" then bsk:PrintTable(param) return end local person = FixPersonName(param[3]) bsk:AddPersonToList(person,param[4]) end elseif param[1] == "populate" then if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then bsk:PrintTable(param) return end -- list = p2 local index = bsk:GetListIndex(param[2]) if param[3] == "random" then bsk:PopulateListRandom(index) end elseif param[1] == "suicide" then if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then bsk:PrintTable(param) return end local person = FixPersonName(param[2]) bsk:Print(string.format("Fixed player name %s to %s",param[2],person)) bsk:SuicidePerson(person,param[3]) elseif param[1] == "show" then if param[2] == nil or param[2] == "" then bsk:PrintTable(param) return end bsk:PrettyPrintLists(param[2]) elseif param[1] == "trim" then if param[2] == nil or param[2] == "" then bsk:PrintTable(param) return end bsk:TrimLists(param[2]) end --if self.frame == nil then --self:CreateGUI() --self:ShowGUI() --else --self:ShowGUI() --end end bsk.defaults = { profile = { persons = {}, changes = {}, listBase = {} } }