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