All pastes #252560 Raw Edit

Miscellany

public text v1 · immutable
#252560 ·published 2006-11-19 18:27 UTC
rendered paste body
InfoMe = {}

if not ace:LoadTranslation("InfoMe") then

InfoMe.Const          = {

   ChatCmd            = {"/infome", "/im"},

   ChatOpt            = {
      {
         option       = "dress",
         desc         = "dress in an item.",
         method       = "DressUp",
         input        = TRUE,
         args         = {
            {
               option = "help",
               desc   = "if you supply an item-link to this option, it will show you equipped with said item in the dress-up pane."
            }
         }
      }
   },

   Title   = "InfoMe",
   Version = "r5s0",
   Desc    = "Player information via whisper!",

   Misc     = {
      Info  = "Tags: head, neck, shldr, back, chest, shirt, tabd, wrist, hand, waist, legs, feet, 1fin, 2fin, 1tri, 2tri, mainh, offh, range, ammo, 1bag, 2bag, 3bag, 4bag, xp, xptgo, rxp, money, where, str, agi, sta, int, spi, apwr, aspd & tankp (separate with spaces)",
      Head  = "Head: %s",
      Neck  = "Neck: %s",
      Shldr = "Shoulders: %s",
      Back  = "Back: %s",
      Chest = "Chest: %s",
      Shirt = "Shirt: %s",
      Tabd  = "Tabbard: %s",
      Wrist = "Wrists: %s",
      Hand  = "Hands: %s",
      Waist = "Waist: %s",
      Legs  = "Legs: %s",
      Feet  = "Feet: %s",
      Fin1  = "Finger 1: %s",
      Fin2  = "Finger 2: %s",
      Tri1  = "Trinket 1: %s",
      Tri2  = "Trinket 2: %s",
      MainH = "Main Hand: %s",
      OffH  = "Off Hand: %s",
      Range = "Ranged: %sx%s",
      Ammo  = "Ammo: %sx%s",
      Bag1  = "Bag 1: %s (%s/%s)",
      Bag2  = "Bag 2: %s (%s/%s)",
      Bag3  = "Bag 3: %s (%s/%s)",
      Bag4  = "Bag 4: %s (%s/%s)",
      Pack  = "Pack: %s (%s/%s)",
      XP    = "XP: %s/%s (%s)",
      XP2Go = "XP2Go: %s (%s)",
      RXP   = "Rested XP: %s (%s)",
      Money = "Money: %s",
      Where = "Where: %s (%s.%s)",
      Stat  = "%s: %s",
      Ar    = "Armour: %s",
      APwr  = "Attack Power: %s",
      ASpd  = "Attack Speed: %s",
      TankP = "TankPoints: %s",
      NoTP  = "Not Installed",
      Tell  = "infome",
      BP    = "[BackPack]",
      None  = "[None]"
   }
}

ace:RegisterGlobals{
   version              = 1.0,
   ACE_HEX              = {0,1,2,3,4,5,6,7,8,9,"a","b","c","d","e","f"},
   ACE_COLOR_HEX_GOLD   = "ffd700",
   ACE_COLOR_HEX_SILVER = "c7c7cf",
   ACE_COLOR_HEX_COPPER = "eda55f",
   ACE_COLOR_HEX_CASH   = "00ff00",
   ACE_TEXT_GOLD        = "gold",
   ACE_TEXT_SILVER      = "silver",
   ACE_TEXT_COPPER      = "copper",
   ACE_LETTER_GOLD      = "g",
   ACE_LETTER_SILVER    = "s",
   ACE_LETTER_COPPER    = "c",
}

end

local const      = InfoMe.Const

InfoMe.Obj       = AceAddonClass:new{
   name          = const.Title,
   version       = const.Version,
   description   = const.Desc,
   author        = "Rowne",
   authorEmail   = "wuffxiii@gmail.com",
   aceCompatible = "100",
   category      = ACE_CATEGORY_INVENTORY,
   db            = AceDbClass:new("InfoMeDB"),
   defaults      = {},
   cmd           = AceChatCmdClass:new(const.ChatCmd,
                                       const.ChatOpt),

   Enable = function(self)
      self:RegisterEvent("CHAT_MSG_WHISPER")
   end,

   DressUp = function(self, i)
      DressUpItemLink(i)
   end,

   BuildInfo = function(self)
      local v, w, x, y, z, t
      return {
         list     = const.Misc.Info,
         head     = function()
            return format(const.Misc.Head,
            self:GetItemLink("HeadSlot"))
         end,
         neck     = function()
            return format(const.Misc.Neck,
            self:GetItemLink("NeckSlot"))
         end,
         shldr    = function()
            return format(const.Misc.Shldr,
            self:GetItemLink("ShoulderSlot"))
         end,
         back     = function()
            return format(const.Misc.Back,
            self:GetItemLink("BackSlot"))
         end,
         chest    = function()
            return format(const.Misc.Chest,
            self:GetItemLink("ChestSlot"))
         end,
         shirt    = function()
            return format(const.Misc.Shirt,
            self:GetItemLink("ShirtSlot"))
         end,
         tabd     = function()
            return format(const.Misc.Tabd,
            self:GetItemLink("TabardSlot"))
         end,
         wrist    = function()
            return format(const.Misc.Wrist,
            self:GetItemLink("WristSlot"))
         end,
         hand     = function()
            return format(const.Misc.Hand,
            self:GetItemLink("HandsSlot"))
         end,
         waist    = function()
            return format(const.Misc.Waist,
            self:GetItemLink("WaistSlot"))
         end,
         legs     = function()
            return format(const.Misc.Legs,
            self:GetItemLink("LegsSlot"))
         end,
         feet     = function()
            return format(const.Misc.Feet,
            self:GetItemLink("FeetSlot"))
         end,
         ["1fin"] = function()
            return format(const.Misc.Fin1,
            self:GetItemLink("Finger0Slot"))
         end,
         ["2fin"] = function()
            return format(const.Misc.Fin2,
            self:GetItemLink("Finger1Slot"))
         end,
         ["1tri"] = function()
            return format(const.Misc.Tri1,
            self:GetItemLink("Trinket0Slot"))
         end,
         ["2tri"] = function()
            return format(const.Misc.Tri2,
            self:GetItemLink("Trinket1Slot"))
         end,
         mainh    = function()
            return format(const.Misc.MainH,
            self:GetItemLink("MainHandSlot"))
         end,
         offh     = function()
            return format(const.Misc.OffH,
            self:GetItemLink("SecondaryHandSlot"))
         end,
         range    = function()
            x, y = self:GetAmmoInfo(true)
            return format(const.Misc.Range, x, y)
         end,
         ammo     = function()
            x, y = self:GetAmmoInfo()
            return format(const.Misc.Ammo, x, y)
         end,
         ["1bag"] = function()
            x, y, z = self:GetBagInfo("0")
            return format(const.Misc.Bag1, x, y, z)
         end,
         ["2bag"] = function()
            x, y, z = self:GetBagInfo("1")
            return format(const.Misc.Bag2, x, y, z)
         end,
         ["3bag"] = function()
            x, y, z = self:GetBagInfo("2")
            return format(const.Misc.Bag3, x, y, z)
         end,
         ["4bag"] = function()
            x, y, z = self:GetBagInfo("3")
            return format(const.Misc.Bag4, x, y, z)
         end,
         pack     = function()
            x, y, z = self:GetBagInfo()
            return format(const.Misc.Pack, x, y, z)
         end,
         xp       = function()
            t = self:GetXPInfo()
            return format(const.Misc.XP, t.xp,
                          t.mxp, t.xpp)
         end,
         xptgo    = function()
            t = self:GetXPInfo()
            return format(const.Misc.XP2Go,
                          t.xp2, t.xp2p)
         end,
         rxp      = function()
            t = self:GetXPInfo()
            return format(const.Misc.RXP,
                          t.rxp, t.rxpp)
         end,
         money    = function()
            return format(const.Misc.Money,
            self.CashTextLetters(GetMoney(), ".", 1))
         end,
         where    = function()
            z, x, y = self:GetLocation()
            return format(const.Misc.Where,
                          z, x, y)
         end,
         str      = function()
            x = UnitStat("player", 1)
            z = SPELL_STAT0_NAME
            return format(const.Misc.Stat,
                          z, x)
         end,
         agi      = function()
            x = UnitStat("player", 2)
            z = SPELL_STAT1_NAME
            return format(const.Misc.Stat,
                          z, x)
         end,
         sta      = function()
            x = UnitStat("player", 3)
            z = SPELL_STAT2_NAME
            return format(const.Misc.Stat,
                          z, x)
         end,
         int      = function()
            x = UnitStat("player", 4)
            z = SPELL_STAT3_NAME
            return format(const.Misc.Stat,
                          z, x)
         end,
         spi      = function()
            x = UnitStat("player", 5)
            z = SPELL_STAT4_NAME
            return format(const.Misc.Stat,
                          z, x)
         end,
         ar       = function()
            z = UnitArmor("player")
            return format(const.Misc.Ar, z)
         end,
         apwr     = function()
            z = UnitAttackPower("player")
            return format(const.Misc.APwr, z)
         end,
         aspd     = function()
            z = UnitAttackSpeed("player")
            z = format("%.2f", z)
            return format(const.Misc.ASpd, z)
         end,
         tankp    = function()
            ShowUIPanel(CharacterFrame)
            z = TankPointsFrame
            z = z and floor(z.tankPoints)
                or const.Misc.NoTP
            HideUIPanel(CharacterFrame)
            return format(const.Misc.TankP, z)
         end
      }
   end,

   CHAT_MSG_WHISPER = function(self)
      if not arg1 or not arg2 then return end
      if not strfind(strlower(arg1 or ""),
                              const.Misc.Tell) then
         return
      end
      local a = gsub(arg1, "infome ", "")
      self.Whisper(self.WordsToInfo(a,
                   self:BuildInfo()),
                   arg2)
   end,

   GetItemLink = function(self, i)
      local s = GetInventorySlotInfo(i)
      i       = GetInventoryItemLink("player", s)
      if not i then return const.Misc.None end
      return i, s
   end,

   GetAmmoInfo = function(self, i)
      local _, s, q
      if i then
         i, s = self:GetItemLink("RangedSlot")
      else
         i = self:GetItemLink("RangedSlot")
         s = GetInventorySlotInfo("AmmoSlot")
      end
      if i == const.Misc.None then q = 0 else
         q = GetInventoryItemCount("player", s)
      end
      return i, q
   end,

   GetBagInfo = function(self, i)
      local b, st, sz, su
      if not i then
         b = 0
         i = const.Misc.BP
      else
         b = tonumber(i) + 1
         i = self:GetItemLink("Bag"..i.."Slot")
      end
      sz = GetContainerNumSlots(b)
      if sz <= 0 then return i, 0, 0 end
      for st = 1, sz do
         if GetContainerItemInfo(b, st) then
            su = (su or 0) + 1
         end
      end
      return i, (su or 0), sz
   end,

   GetXPInfo = function(self)
      local t = {}
      t.xp    = UnitXP("player")
      t.mxp   = UnitXPMax("player")
      t.rxp   = GetXPExhaustion() or 0
      t.xpp   = floor(t.xp * 100 / t.mxp)
      t.xp2   = t.mxp - t.xp
      t.xp2p  = floor(t.xp2 * 100 / t.mxp) + 1
      t.rxpp  = floor(t.rxp * 100 / t.mxp)
      return t
   end,
   
   GetLocation = function(self)
      local x, y = GetPlayerMapPosition("player")
      return GetMinimapZoneText(),
             floor(x * 100), floor(y * 100)
   end
}

InfoMe.Obj:RegisterForLoad()

ace:RegisterFunctions(InfoMe.Obj, {
   version   = 1.0,

   WordsToInfo = function(i, db)
      i = ace.ParseWords(i)
      for k, v in i do
         if db[v] then i[k] = db[v]() end
      end
      return ace.concat(i, ", ").."."
   end,

   ParseCash = function(c)
      local c = ace.round(c or 0)
      return floor(c / (100*100)), mod(floor(c / 100), 100), mod(floor(c), 100)
   end,
   
   CashTextLetters = function(cash, sep, nocol)
      if ((sep == TRUE) or (sep == true)) then
        sep = nocol nocol = TRUE
      end
      local g, s, c = ace.ParseCash(cash or 0)
      local str = ""
      local doCoin = function(var, ltr, hex)
        if (var > 0) then
           str = str ~= "" and str..(sep or " ") or ""
           str = nocol and str..var..ltr or str..ace.ColorText(hex, s..ltr)
        end
      end
      doCoin(g, ACE_LETTER_GOLD,   ACE_COLOR_HEX_GOLD)
      doCoin(s, ACE_LETTER_SILVER, ACE_COLOR_HEX_SILVER)
      doCoin(c, ACE_LETTER_COPPER, ACE_COLOR_HEX_COPPER)
      return str
   end,

   Whisper = function(msg, name, ...)
      SendChatMessage(format(msg, unpack(arg)),
                      "WHISPER",
                      DEFAULT_CHAT_FRAME.language,
                      name)
   end
})