John@0: -- ideas: last attended data and/or remove people who haven't attended in X days John@0: John@0: -- order of implementation John@31: -- (*) lists fully functional (/script interface) John@31: -- (*) lists single-user functional via command line interface John@27: -- (*) all actions should reference the player list rather than player names John@27: -- (?) player entries should persist as long as any list or change references John@18: -- (*) lists store number slots rather than flat indexing John@33: -- ( ) database and comm versioning John@18: -- ( ) limited communication - everyone trusts the loot master John@0: -- ( ) single user + admin gui (manual suicides) John@0: -- ( ) single user + admin gui (master loot) John@18: -- ( ) communication and list merging/trimming John@0: -- ( ) admins John@0: -- ( ) players gui John@35: -- ( ) undo John@0: -- ( ) crypto / protection against tampering John@0: -- ( ) alt tracking John@32: -- (_) reserves John@32: John@42: local _G=_G John@42: local strsplit=strsplit John@42: local string=string John@42: local sformat=string.format John@43: local bsk = LibStub("AceAddon-3.0"):NewAddon("bsk","AceConsole-3.0") John@43: -- "AceHook-3.0", "AceComm-3.0", "AceSerializer-3.0" John@42: _G.bsk=bsk John@42: local L = LibStub("AceLocale-3.0"):GetLocale("bsk", false) John@42: setfenv(1,bsk) John@42: John@34: local pkgrev = " @project-revision@ " John@0: John@0: -- important things to remember: John@1: -- 1) ipairs iterates from 1 until the first missing int index -> no gaps if int John@1: -- indexing John@0: -- 2) a.x === a["x"] John@0: -- 3) a["1"] =/= a[1] John@5: -- 4) table.remove() works ok if reverse iterating, terrible at anything else John@5: -- 5) pairs() does not have a guaranteed iteration order John@0: John@42: function OnInitialize() John@0: John@42: db = _G.LibStub("AceDB-3.0"):New("BskDB", defaults, "Default") John@0: John@42: options.args.profile = _G.LibStub("AceDBOptions-3.0"):GetOptionsTable(db) John@42: _G.LibStub("AceConfig-3.0"):RegisterOptionsTable("bsk", options) John@42: --optionsFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("bsk", "bsk") John@0: John@42: local HandlePassThrough = function(...) HandleCommand(...) end John@42: bsk:RegisterChatCommand("bsk", HandlePassThrough) John@0: end John@0: John@42: function OnEnable() John@42: CreateWorkingStateFromChanges(db.profile.changes) John@43: --CreateGUI() John@0: end John@0: John@42: function HandleCommand(paramIn) John@0: local param = { strsplit(" ", paramIn) } John@8: local FixPersonName = function(p) John@0: p = p:lower() John@0: -- next two lines from sylvanaar John@0: local MULTIBYTE_FIRST_CHAR = "^([\192-\255]?%a?[\128-\191]*)" John@0: return string.gsub(p, MULTIBYTE_FIRST_CHAR, string.upper, 1) John@0: end John@0: John@0: if param[1] == nil or param[1] == "" then John@43: print("need args") John@0: return John@0: end John@8: if param[1] == "persons" then John@42: PrintPersons() John@8: elseif param[1] == "changes" then John@42: PrintChanges() John@21: elseif param[1] == "delete" then John@21: if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then John@42: PrintTable(param) John@21: return John@21: end John@21: if param[2] == "list" then John@42: DeleteList(param[3]) John@22: elseif param[2] == "personfromlist" then John@22: if param[4] == nil or param[4] == "" then John@42: PrintTable(param) John@22: return John@22: end John@22: local person = FixPersonName(param[3]) John@42: RemovePersonFromList(person, param[4]) John@28: elseif param[2] == "person" then John@28: local person = FixPersonName(param[3]) John@42: RemovePerson(person) John@21: else John@43: printf("Deleting anything of type %s is not supported",param[2]) John@21: end John@30: elseif param[1] == "nuke" then John@30: if param[2] == nil or param[2] == "" then John@42: PrintTable(param) John@30: return John@30: end John@30: local person = FixPersonName(param[2]) John@42: NukePerson(person) John@0: elseif param[1] == "add" then John@0: if param[2] == nil or param[2] == "" then John@42: PrintTable(param) John@0: return John@0: end John@0: if param[3] == nil or param[3] == "" then John@42: PrintTable(param) John@0: return John@0: end John@8: if param[2] == "person" then John@1: if param[3] == "all" then John@42: AddMissingPersons() John@1: else John@8: local person = FixPersonName(param[3]) John@42: AddPerson(person) John@1: end John@0: elseif param[2] == "list" then John@42: CreateList(param[3]) John@11: elseif param[2] == "tolist" then John@9: if param[4] == nil or param[4] == "" then John@42: PrintTable(param) John@9: return John@9: end John@9: local person = FixPersonName(param[3]) John@42: AddPersonToListEnd(person,param[4]) John@11: elseif param[2] == "tolistrandom" then John@11: if param[4] == nil or param[4] == "" then John@42: PrintTable(param) John@11: return John@11: end John@11: local person = FixPersonName(param[3]) John@42: AddPersonToListRandom(person,param[4]) John@0: end John@3: elseif param[1] == "populate" then John@3: if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then John@42: PrintTable(param) John@3: return John@3: end John@3: -- list = p2 John@42: local index = GetListIndex(param[2]) John@3: if param[3] == "random" then John@42: PopulateListRandom(index) John@3: end John@0: elseif param[1] == "suicide" then John@0: if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then John@42: PrintTable(param) John@0: return John@0: end John@8: local person = FixPersonName(param[2]) John@42: SuicidePerson(person,param[3]) John@14: elseif param[1] == "lists" then John@0: if param[2] == nil or param[2] == "" then John@42: PrettyPrintLists() John@14: return John@14: else John@42: local listIndex = GetListIndex(param[2]) John@42: PrettyPrintList(listIndex) John@14: end John@14: elseif param[1] == "reserve" then John@14: if param[2] == nil or param[2] == "" then John@42: printtable(param) John@0: return John@0: end John@14: local person = FixPersonName(param[2]) John@42: AddReserve(person) John@5: elseif param[1] == "trim" then John@5: if param[2] == nil or param[2] == "" then John@42: printtable(param) John@5: return John@5: end John@42: TrimLists(param[2]) John@20: elseif param[1] == "rename" then John@20: if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then John@42: printtable(param) John@20: return John@20: end John@42: RenameList(param[2],param[3]) John@17: elseif param[1] == "selfdestruct" then John@42: SelfDestruct() John@38: else John@42: CreateGUI() John@0: end John@0: John@42: --if frame == nil then John@42: --CreateGUI() John@42: --ShowGUI() John@0: --else John@42: --ShowGUI() John@0: --end John@0: John@0: end John@0: John@42: defaults = { John@0: profile = { John@8: persons = {}, John@0: changes = {}, John@34: lists = {} John@0: } John@0: } John@0: John@0: