annotate Core.lua @ 34:0e03db65c1fe

listBase -> lists for symmetry project-revision turned into a string so you can dev on repo
author John@Yosemite-PC
date Sun, 11 Mar 2012 23:27:02 -0400
parents 84f56de22631
children ecd37523ae04
rev   line source
John@0 1 -- ideas: last attended data and/or remove people who haven't attended in X days
John@0 2 -- and/or just a "remove from all lists" option
John@0 3
John@0 4
John@0 5 -- order of implementation
John@31 6 -- (*) lists fully functional (/script interface)
John@31 7 -- (*) lists single-user functional via command line interface
John@27 8 -- (*) all actions should reference the player list rather than player names
John@27 9 -- (?) player entries should persist as long as any list or change references
John@18 10 -- (*) lists store number slots rather than flat indexing
John@33 11 -- ( ) database and comm versioning
John@18 12 -- ( ) limited communication - everyone trusts the loot master
John@0 13 -- ( ) single user + admin gui (manual suicides)
John@0 14 -- ( ) single user + admin gui (master loot)
John@18 15 -- ( ) communication and list merging/trimming
John@0 16 -- ( ) admins
John@0 17 -- ( ) players gui
John@0 18 -- ( ) crypto / protection against tampering
John@0 19 -- ( ) alt tracking
John@32 20 -- (_) reserves
John@32 21
John@34 22 local pkgrev = " @project-revision@ "
John@0 23
John@0 24 -- important things to remember:
John@1 25 -- 1) ipairs iterates from 1 until the first missing int index -> no gaps if int
John@1 26 -- indexing
John@0 27 -- 2) a.x === a["x"]
John@0 28 -- 3) a["1"] =/= a[1]
John@5 29 -- 4) table.remove() works ok if reverse iterating, terrible at anything else
John@5 30 -- 5) pairs() does not have a guaranteed iteration order
John@0 31
John@0 32 bsk = LibStub("AceAddon-3.0"):NewAddon("bsk","AceConsole-3.0", "AceHook-3.0", "AceComm-3.0", "AceSerializer-3.0")
John@0 33 local L = LibStub("AceLocale-3.0"):GetLocale("bsk", false)
John@0 34
John@0 35 local AceGUI = LibStub("AceGUI-3.0")
John@0 36
John@0 37 function bsk:OnInitialize()
John@0 38
John@0 39 self.db = LibStub("AceDB-3.0"):New("BskDB", self.defaults, "Default")
John@0 40
John@0 41 self.options.args.profile = LibStub("AceDBOptions-3.0"):GetOptionsTable(self.db)
John@0 42 LibStub("AceConfig-3.0"):RegisterOptionsTable("bsk", self.options)
John@0 43 self.optionsFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("bsk", "bsk")
John@0 44
John@0 45 self:RegisterChatCommand("bsk", "HandleCommand")
John@0 46 end
John@0 47
John@0 48 function bsk:OnEnable()
John@5 49 bsk:CreateWorkingStateFromChanges(self.db.profile.changes)
John@0 50 --self:HandleCommand()
John@0 51 end
John@0 52
John@0 53 function bsk:HandleCommand(paramIn)
John@0 54 local param = { strsplit(" ", paramIn) }
John@8 55 local FixPersonName = function(p)
John@0 56 p = p:lower()
John@0 57 -- next two lines from sylvanaar
John@0 58 local MULTIBYTE_FIRST_CHAR = "^([\192-\255]?%a?[\128-\191]*)"
John@0 59 return string.gsub(p, MULTIBYTE_FIRST_CHAR, string.upper, 1)
John@0 60 end
John@0 61
John@0 62 if param[1] == nil or param[1] == "" then
John@0 63 bsk:Print("need args")
John@0 64 return
John@0 65 end
John@8 66 if param[1] == "persons" then
John@8 67 bsk:PrintPersons()
John@8 68 elseif param[1] == "changes" then
John@8 69 bsk:PrintChanges()
John@21 70 elseif param[1] == "delete" then
John@21 71 if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then
John@21 72 bsk:PrintTable(param)
John@21 73 return
John@21 74 end
John@21 75 if param[2] == "list" then
John@21 76 bsk:DeleteList(param[3])
John@22 77 elseif param[2] == "personfromlist" then
John@22 78 if param[4] == nil or param[4] == "" then
John@22 79 bsk:PrintTable(param)
John@22 80 return
John@22 81 end
John@22 82 local person = FixPersonName(param[3])
John@22 83 bsk:RemovePersonFromList(person, param[4])
John@28 84 elseif param[2] == "person" then
John@28 85 local person = FixPersonName(param[3])
John@28 86 bsk:RemovePerson(person)
John@21 87 else
John@21 88 bsk:Print(sformat("Deleting anything of type %s is not supported",param[2]))
John@21 89 end
John@30 90 elseif param[1] == "nuke" then
John@30 91 if param[2] == nil or param[2] == "" then
John@30 92 bsk:PrintTable(param)
John@30 93 return
John@30 94 end
John@30 95 local person = FixPersonName(param[2])
John@30 96 bsk:NukePerson(person)
John@0 97 elseif param[1] == "add" then
John@0 98 if param[2] == nil or param[2] == "" then
John@0 99 bsk:PrintTable(param)
John@0 100 return
John@0 101 end
John@0 102 if param[3] == nil or param[3] == "" then
John@0 103 bsk:PrintTable(param)
John@0 104 return
John@0 105 end
John@8 106 if param[2] == "person" then
John@1 107 if param[3] == "all" then
John@8 108 bsk:AddMissingPersons()
John@1 109 else
John@8 110 local person = FixPersonName(param[3])
John@8 111 bsk:AddPerson(person)
John@1 112 end
John@0 113 elseif param[2] == "list" then
John@0 114 bsk:CreateList(param[3])
John@11 115 elseif param[2] == "tolist" then
John@9 116 if param[4] == nil or param[4] == "" then
John@9 117 bsk:PrintTable(param)
John@9 118 return
John@9 119 end
John@9 120 local person = FixPersonName(param[3])
John@11 121 bsk:AddPersonToListEnd(person,param[4])
John@11 122 elseif param[2] == "tolistrandom" then
John@11 123 if param[4] == nil or param[4] == "" then
John@11 124 bsk:PrintTable(param)
John@11 125 return
John@11 126 end
John@11 127 local person = FixPersonName(param[3])
John@11 128 bsk:AddPersonToListRandom(person,param[4])
John@0 129 end
John@3 130 elseif param[1] == "populate" then
John@3 131 if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then
John@3 132 bsk:PrintTable(param)
John@3 133 return
John@3 134 end
John@3 135 -- list = p2
John@3 136 local index = bsk:GetListIndex(param[2])
John@3 137 if param[3] == "random" then
John@3 138 bsk:PopulateListRandom(index)
John@3 139 end
John@0 140 elseif param[1] == "suicide" then
John@0 141 if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then
John@0 142 bsk:PrintTable(param)
John@0 143 return
John@0 144 end
John@8 145 local person = FixPersonName(param[2])
John@8 146 bsk:SuicidePerson(person,param[3])
John@14 147 elseif param[1] == "lists" then
John@0 148 if param[2] == nil or param[2] == "" then
John@14 149 bsk:PrettyPrintLists()
John@14 150 return
John@14 151 else
John@14 152 local listIndex = bsk:GetListIndex(param[2])
John@14 153 bsk:PrettyPrintList(listIndex)
John@14 154 end
John@14 155 elseif param[1] == "reserve" then
John@14 156 if param[2] == nil or param[2] == "" then
John@14 157 bsk:printtable(param)
John@0 158 return
John@0 159 end
John@14 160 local person = FixPersonName(param[2])
John@14 161 bsk:AddReserve(person)
John@5 162 elseif param[1] == "trim" then
John@5 163 if param[2] == nil or param[2] == "" then
John@14 164 bsk:printtable(param)
John@5 165 return
John@5 166 end
John@5 167 bsk:TrimLists(param[2])
John@20 168 elseif param[1] == "rename" then
John@20 169 if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then
John@20 170 bsk:printtable(param)
John@20 171 return
John@20 172 end
John@20 173 bsk:RenameList(param[2],param[3])
John@17 174 elseif param[1] == "selfdestruct" then
John@17 175 bsk:SelfDestruct()
John@0 176 end
John@0 177
John@0 178 --if self.frame == nil then
John@0 179 --self:CreateGUI()
John@0 180 --self:ShowGUI()
John@0 181 --else
John@0 182 --self:ShowGUI()
John@0 183 --end
John@0 184
John@0 185 end
John@0 186
John@0 187 bsk.defaults = {
John@0 188 profile = {
John@8 189 persons = {},
John@0 190 changes = {},
John@34 191 lists = {}
John@0 192 }
John@0 193 }
John@0 194
John@0 195