view Core.lua @ 37:6362fe301d43

Storing class name in the persons so we can color them in later Exposing some data lists, but this will likely be retracted later in favor of interface functions
author John@Yosemite-PC
date Tue, 13 Mar 2012 23:17:18 -0400
parents ecd37523ae04
children 7bfbff27a3d7
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 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

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)
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] == "delete" then
        if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then
            bsk:PrintTable(param)
            return
        end
        if param[2] == "list" then
            bsk:DeleteList(param[3])
        elseif param[2] == "personfromlist" then
            if param[4] == nil or param[4] == "" then
                bsk:PrintTable(param)
                return
            end
            local person = FixPersonName(param[3])
            bsk:RemovePersonFromList(person, param[4])
        elseif param[2] == "person" then
            local person = FixPersonName(param[3])
            bsk:RemovePerson(person)
        else
            bsk:Print(sformat("Deleting anything of type %s is not supported",param[2]))
        end
    elseif param[1] == "nuke" then
        if param[2] == nil or param[2] == "" then
            bsk:PrintTable(param)
            return
        end
        local person = FixPersonName(param[2])
        bsk:NukePerson(person)
    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] == "tolist" then
            if param[4] == nil or param[4] == "" then
                bsk:PrintTable(param)
                return
            end
            local person = FixPersonName(param[3])
            bsk:AddPersonToListEnd(person,param[4])
        elseif param[2] == "tolistrandom" then
            if param[4] == nil or param[4] == "" then
                bsk:PrintTable(param)
                return
            end
            local person = FixPersonName(param[3])
            bsk: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
            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:SuicidePerson(person,param[3])
    elseif param[1] == "lists" then
        if param[2] == nil or param[2] == "" then
            bsk:PrettyPrintLists()
            return
        else
            local listIndex = bsk:GetListIndex(param[2])
            bsk:PrettyPrintList(listIndex)
        end
    elseif param[1] == "reserve" then
        if param[2] == nil or param[2] == "" then
            bsk:printtable(param)
            return
        end
        local person = FixPersonName(param[2])
        bsk:AddReserve(person)
    elseif param[1] == "trim" then
        if param[2] == nil or param[2] == "" then
            bsk:printtable(param)
            return
        end
        bsk:TrimLists(param[2])
    elseif param[1] == "rename" then
        if param[2] == nil or param[2] == "" or param[3] == nil or param[3] == "" then
            bsk:printtable(param)
            return
        end
        bsk:RenameList(param[2],param[3])
    elseif param[1] == "selfdestruct" then
        bsk:SelfDestruct()
    end

    --if self.frame == nil then
        --self:CreateGUI()
        --self:ShowGUI()
    --else
        --self:ShowGUI()
    --end

end

bsk.defaults = {
    profile = {
        persons = {},
        changes = {},
        lists = {}
    }
}