WoWInterface

WoWInterface (https://www.wowinterface.com/forums/index.php)
-   AddOn Help/Support (https://www.wowinterface.com/forums/forumdisplay.php?f=3)
-   -   Help request for an old chat addon (https://www.wowinterface.com/forums/showthread.php?t=55687)

Be3f. 08-29-17 03:35 PM

Help request for an old chat addon
 
Hi there,

I Recently rediscovered an addon I was using back in the day which sadly hasn't been updated for a while
and thereby leaving it nonfunctional.
The purpose of the addon is to change the chatframe's height (maximize and minimize) when a new message
appears in the chat.

Following error is thrown:

Code:

Message: Interface\AddOns\Chicchai\core.lua:117: attempt to index local 'self' (a nil value)
Time: 08/29/17 23:15:52
Count: 1
Stack: Interface\AddOns\Chicchai\core.lua:117: attempt to index local 'self' (a nil value)Interface\SharedXML\SharedBasicControls.lua:204: in function <Interface\SharedXML\SharedBasicControls.lua:203>
[C]: ?
Interface\AddOns\Chicchai\core.lua:117: in function <Interface\AddOns\Chicchai\core.lua:115>
Interface\AddOns\Chicchai\core.lua:178: in function `updateHeight'
Interface\AddOns\Chicchai\core.lua:221: in main chunk

Locals: errorMessage = "Interface\AddOns\Chicchai\core.lua:117: attempt to index local 'self' (a nil value)"
DisplayMessageInternal = <function> defined @Interface\SharedXML\SharedBasicControls.lua:187
MESSAGE_TYPE_ERROR = 0


Code dump Link to original addon

Code:

--[[                        Chicchai
]]--        by Lolzen & Cargor (EU-Nozdormu)

-- Configuration
local maxHeight = 120                                -- How high the chat frames are when maximized
local animTime = 0.3                                -- How lang the animation takes (in seconds)
local minimizeTime = 10                                -- Minimize after X seconds
local minimizedLines = 1                        -- Number of chat messages to show in minimized state

local MaximizeOnEnter = true                -- Maximize when entering chat frame, minimize when leaving
local WaitAfterEnter = 0                        -- Wait X seconds after entering before maximizing
local WaitAfterLeave = 0                        -- Wait X seconds after leaving before minimizing

local LockInCombat = nil                        -- Do not maximize in combat

local MaximizeCombatLog = true                -- When the combat log is selected, it will be maximized

-- Modify this to maximize only on special channels
-- comment/remove it to react on all channels
-- you still need the "channel"-event on your chat frame!
local channelNumbers = {
        [1] = true,
        [2] = true,
        [3]  = true,
}

local ChatFrameConfig = {        -- Events which maximize the chat for the different windows
        ["ChatFrame1"] = {
                "say", "emote", "text_emote",
                "party", "party_leader", "party_guide",
                "whisper",
                "guild", "officer",
                "battleground", "battleground_leader",
                "raid", "raid_leader", "raid_warning",
       
                "bn_whisper",
                "bn_conversation",
                "bn_broadcast",
        },
        ["ChatFrame3"] = true, -- "true" just makes this frame available for minimizing and registers it with Chicchai
}

--[[
        REFERENCE LIST
        These are the available chat events for ChatFrameConfig
                say, yell, emote, text_emote,
                party, party_leader, party_guide,
                whisper, whisper_inform, afk, dnd, ignored,
                guild, officer,
                channel, channel_join, channel_leave, channel_list, channel_notice, channel_notice_user,
                battleground, battleground_leader,
                raid, raid_leader, raid_warning,

                bn_whisper, bn_whisper_inform,
                bn_conversation, bn_conversation_notice, bn_conversation_list,
                bn_alert,
                bn_broadcast, bn_broadcast_inform,
                bn_inline_toast_alert, bn_inline_toast_broadcast, bn_inline_toast_broadcast_inform, bn_inline_toast_conversation,

                system, achievement, guild_achievement,
                bg_system_neutral, bg_system_alliance, bg_system_horde,
                monster_say, monster_party, monster_yell, monster_whisper, monster_emote,
                raid_boss_whisper, raid_boss_emote,
                skill, loot, money, opening, tradeskills, pet_info, combat_misc_info, combat_xp_gain, combat_honor_gain, combat_faction_change,
]]
-- Configuration End
-- Do not change anything under this line except you know what you're doing (:



local select = select
local UP, DOWN = 1, -1

local function getMinHeight(self)
        local minHeight = 0
        for i=1, minimizedLines do
                local line = select(9+i, self:GetRegions())
                if(line) then
                        minHeight = minHeight + line:GetHeight() + 2.5
                end
        end
        if(minHeight == 0) then
                minHeight = select(2, self:GetFont()) + 2.5
        end
        return minHeight
end

local function Update(self, elapsed)
        if(self.WaitTime) then
                self.WaitTime = self.WaitTime - elapsed
                if(self.WaitTime > 0) then return end
                self.WaitTime = nil
                if(self.Frozen) then return self:Hide() end
        end

        self.State = nil

        self.TimeRunning = self.TimeRunning + elapsed
        local animPercent = min(self.TimeRunning/animTime, 1)

        local heightPercent = self.Animate == DOWN and 1-animPercent or animPercent

        local minHeight = getMinHeight(self.Frame)
        self.Frame:SetHeight(minHeight + (maxHeight-minHeight) * heightPercent)

        if(animPercent >= 1) then
                self.State = self.Animate
                self.Animate = nil
                self.TimeRunning = nil
                self:Hide()
                if(self.finishedFunc) then self:finishedFunc() end
        end
end

local function getChicchai(self)
        if(self:GetObjectType() == "Frame") then self = self.Frame  end
        if(self.isDocked) then self = GENERAL_CHAT_DOCK.DOCKED_CHAT_FRAMES[1] end
        return self.Chicchai
end

local function SetFrozen(self, isFrozen)
        getChicchai(self).Frozen = isFrozen
end

local function Animate(self, dir, waitTime, finishedFunc)
        local self = getChicchai(self)
        if(self.Frozen) then return end
        if(self.Animate == dir or self.State == dir and not self.Animate) then return end

        if(self.Animate == -dir) then
                self.TimeRunning = animTime - self.TimeRunning
        else
                self.TimeRunning = 0
        end
        self.WaitTime = waitTime
        self.Animate = dir
        self.finishedFunc = finishedFunc
        self:Show()
end

local function Maximize(self) Animate(self, UP) end
local function Minimize(self) Animate(self, DOWN) end

local function MinimizeAfterWait(self)
        Animate(self, DOWN, minimizeTime)
end

local CheckEnterLeave
if(MaximizeOnEnter) then
        CheckEnterLeave = function(self)
                self = getChicchai(self)
                if(MouseIsOver(self.Frame) and not self.wasOver) then
                        self.wasOver = true
                        Animate(self, UP, WaitAfterEnter)
                elseif(self.wasOver and not MouseIsOver(self.Frame)) then
                        self.wasOver = nil
                        Animate(self, DOWN, WaitAfterLeave)
                end
        end
end

if(MaximizeCombatLog) then
        hooksecurefunc("FCF_Tab_OnClick", function(self)
                local frame = getChicchai(ChatFrame2)
                if(not frame) then return end

                if(self == ChatFrame2Tab) then
                        Animate(frame, UP)
                        SetFrozen(frame, true)
                elseif(frame.Frozen) then
                        SetFrozen(frame, nil)
                        Animate(frame, DOWN)
                end
        end)
end

local function updateHeight(self)
        local self = getChicchai(self)
        if(self.State ~= DOWN) then return end
        self.Frame:ScrollToBottom()
        self.Frame:SetHeight(getMinHeight(self.Frame))
end

local function chatEvent(self)
        if(event == "CHAT_MSG_CHANNEL" and channelNumbers and not channelNumbers[arg8]) then return end

        if(not LockInCombat or not UnitAffectingCombat("player")) then
                Animate(self, UP, nil, MinimizeAfterWait)
        end
end

for chatname, options in pairs(ChatFrameConfig) do
        local chatframe = _G[chatname]
        local chicchai = CreateFrame"Frame"
        if(MaximizeOnEnter) then
                local updater = CreateFrame("Frame", nil, chatframe)
                updater:SetScript("OnUpdate", CheckEnterLeave)
                updater.Frame = chatframe
        end
        chicchai.Frame = chatframe
        chatframe.Chicchai = chicchai
        if(type(options) == "table") then
                for _, event in pairs(options) do
                        if(not event:match("[A-Z]")) then
                                event = "CHAT_MSG_"..event:upper()
                        end
                        chicchai:RegisterEvent(event)
                end
        end
        ChatFrameConfig[chatname] = chicchai
       
        chatframe.Maximize = Maximize
        chatframe.Minimize = Minimize
        chatframe.UpdateHeight = updateHeight
        chatframe.SetFrozen = SetFrozen

        chicchai:SetScript("OnUpdate", Update)
        chicchai:SetScript("OnEvent", chatEvent)
        chicchai:Hide()

        updateHeight(chatframe)

        hooksecurefunc(chatframe, "AddMessage", updateHeight)
end

_G.Chicchai = ChatFrameConfig

I've tried applying my limited coding skill but that didn't get me anywhere.
Any help is appreciated.

Linayo 08-29-17 04:05 PM

Currently only having a semi working version of it (only one of two frames are moving) as such posting here to see if someone has a fix (almost sounds like an addiction lol)


All times are GMT -6. The time now is 03:11 PM.

vBulletin © 2024, Jelsoft Enterprises Ltd
© 2004 - 2022 MMOUI