Mercurial > wow > breuesk
view Core.lua @ 43:4109683c3172
Kept AceConsole embedded - it handily disables the chat commands when the addon is disabled
Did a little passthrough to properly set the self param for commands like Print()
author | John@Yosemite-PC |
---|---|
date | Thu, 15 Mar 2012 22:27:51 -0400 |
parents | 72055fc7e115 |
children | 8913e7d79cad |
line wrap: on
line source
-- ideas: last attended data and/or remove people who haven't attended in X days -- 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 -- (*) lists store number slots rather than flat indexing -- ( ) database and comm versioning -- ( ) limited communication - everyone trusts the loot master -- ( ) single user + admin gui (manual suicides) -- ( ) single user + admin gui (master loot) -- ( ) communication and list merging/trimming -- ( ) admins -- ( ) players gui -- ( ) undo -- ( ) crypto / protection against tampering -- ( ) alt tracking -- (_) reserves local _G=_G local strsplit=strsplit local string=string local sformat=string.format local bsk = LibStub("AceAddon-3.0"):NewAddon("bsk","AceConsole-3.0") -- "AceHook-3.0", "AceComm-3.0", "AceSerializer-3.0" _G.bsk=bsk local L = LibStub("AceLocale-3.0"):GetLocale("bsk", false) setfenv(1,bsk) local pkgrev = " @project-revision@ " -- 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 -- These two functions properly format the call to AceConsole:Print(), which -- needs a full object. Calling "Print" will call the mixed-in console functions -- but without a self parameter because of the namespacing. I would disembed -- console, except that it has handy OnDisable behavior to disable chat -- commands. function print(...) bsk:Print(...) end function printf(...) bsk:Printf(...) end function OnInitialize() db = _G.LibStub("AceDB-3.0"):New("BskDB", defaults, "Default") options.args.profile = _G.LibStub("AceDBOptions-3.0"):GetOptionsTable(db) _G.LibStub("AceConfig-3.0"):RegisterOptionsTable("bsk", options) --optionsFrame = LibStub("AceConfigDialog-3.0"):AddToBlizOptions("bsk", "bsk") local HandlePassThrough = function(...) HandleCommand(...) end bsk:RegisterChatCommand("bsk", HandlePassThrough) end function OnEnable() CreateWorkingStateFromChanges(db.profile.changes) --CreateGUI() end function 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 print("need args") return end if param[1] == "persons" then PrintPersons() elseif param[1] == "changes" then PrintChanges() elseif param[1] == "delete" then if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then PrintTable(param) return end if param[2] == "list" then DeleteList(param[3]) elseif param[2] == "personfromlist" then if param[4] == nil or param[4] == "" then PrintTable(param) return end local person = FixPersonName(param[3]) RemovePersonFromList(person, param[4]) elseif param[2] == "person" then local person = FixPersonName(param[3]) RemovePerson(person) else printf("Deleting anything of type %s is not supported",param[2]) end elseif param[1] == "nuke" then if param[2] == nil or param[2] == "" then PrintTable(param) return end local person = FixPersonName(param[2]) NukePerson(person) elseif param[1] == "add" then if param[2] == nil or param[2] == "" then PrintTable(param) return end if param[3] == nil or param[3] == "" then PrintTable(param) return end if param[2] == "person" then if param[3] == "all" then AddMissingPersons() else local person = FixPersonName(param[3]) AddPerson(person) end elseif param[2] == "list" then CreateList(param[3]) elseif param[2] == "tolist" then if param[4] == nil or param[4] == "" then PrintTable(param) return end local person = FixPersonName(param[3]) AddPersonToListEnd(person,param[4]) elseif param[2] == "tolistrandom" then if param[4] == nil or param[4] == "" then PrintTable(param) return end local person = FixPersonName(param[3]) AddPersonToListRandom(person,param[4]) end elseif param[1] == "populate" then if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then PrintTable(param) return end -- list = p2 local index = GetListIndex(param[2]) if param[3] == "random" then PopulateListRandom(index) end elseif param[1] == "suicide" then if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then PrintTable(param) return end local person = FixPersonName(param[2]) SuicidePerson(person,param[3]) elseif param[1] == "lists" then if param[2] == nil or param[2] == "" then PrettyPrintLists() return else local listIndex = GetListIndex(param[2]) PrettyPrintList(listIndex) end elseif param[1] == "reserve" then if param[2] == nil or param[2] == "" then printtable(param) return end local person = FixPersonName(param[2]) AddReserve(person) elseif param[1] == "trim" then if param[2] == nil or param[2] == "" then printtable(param) return end TrimLists(param[2]) elseif param[1] == "rename" then if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then printtable(param) return end RenameList(param[2],param[3]) elseif param[1] == "selfdestruct" then SelfDestruct() else CreateGUI() end --if frame == nil then --CreateGUI() --ShowGUI() --else --ShowGUI() --end end defaults = { profile = { persons = {}, changes = {}, lists = {} } }