Compare commits

..

5 Commits

Author SHA1 Message Date
208e28b2c5 MoanS.toc aktualisiert 2025-12-31 13:19:38 +00:00
a4616a2f8b Sources getrennt 2025-12-31 14:14:30 +01:00
5b34dc9623 Combo-Bild erzeugt und eingebunden 2025-12-31 14:09:15 +01:00
b898e62ea5 Bugfix 2025-12-31 13:09:07 +01:00
c1ae82b296 Combo-Bild erzeugt und eingebunden 2025-12-31 13:02:25 +01:00
3 changed files with 165 additions and 142 deletions

135
MoanS.lua
View File

@@ -2,11 +2,20 @@ local addonName = "MoanS"
local MOAN_NAME = "|cFFFF69B4MoanS|r" local MOAN_NAME = "|cFFFF69B4MoanS|r"
local MOAN_TEXT = "|cFFFF69B4Moan!|r" local MOAN_TEXT = "|cFFFF69B4Moan!|r"
local COMBO_COLOR = "|cFF00FF00" local COMBO_COLOR = "|cFF00FF00"
local COMBO_IMAGE_PATH = "Interface\\AddOns\\MoanS\\media\\combo_pic.tga"
local defaults = { local defaults = {
active = true, chat = true, petEnabled = true, healEnabled = true, active = true,
totalMoans = 0, showCounter = true, chat = true,
framePos = nil, soundBaseName = "moan", comboTimeout = 4.0, locked = false, petEnabled = true,
healEnabled = true,
totalMoans = 0,
showCounter = true,
showImages = true,
framePos = nil,
soundBaseName = "moan",
comboTimeout = 4.0,
locked = false,
} }
local frame = CreateFrame("Frame") local frame = CreateFrame("Frame")
@@ -15,10 +24,42 @@ frame:RegisterEvent("ADDON_LOADED")
local lastSoundTime, comboCount = 0, 0 local lastSoundTime, comboCount = 0, 0
local function FormatNumber(amount) -- CHAOS-VISUAL FUNKTION
if not amount or type(amount) ~= "number" then return amount or "0" end local function TriggerComboVisual()
if amount >= 1000000 then return string.format("%.1fM", amount / 1000000) if not MoanSDB or not MoanSDB.showImages then return end
elseif amount >= 1000 then return string.format("%.1fK", amount / 1000)
local f = CreateFrame("Frame", nil, UIParent)
local randomSize = math.random(300, 550)
f:SetSize(randomSize, randomSize)
local randomX = math.random(-750, 750)
local randomY = math.random(-400, 500)
f:SetPoint("CENTER", randomX, randomY)
local tex = f:CreateTexture(nil, "OVERLAY")
tex:SetAllPoints()
tex:SetTexture(COMBO_IMAGE_PATH)
local randomAlpha = math.random(50, 85) / 100
tex:SetAlpha(randomAlpha)
local ag = f:CreateAnimationGroup()
local scale = ag:CreateAnimation("Scale")
scale:SetScale(1.4, 1.4); scale:SetDuration(0.15); scale:SetOrder(1)
local fade = ag:CreateAnimation("Alpha")
fade:SetFromAlpha(1); fade:SetToAlpha(0); fade:SetStartDelay(0.5); fade:SetDuration(0.6); fade:SetOrder(2)
ag:SetScript("OnFinished", function()
f:Hide()
f:SetParent(nil)
end)
ag:Play()
end
local function FormatNumber(amount)
if not amount or type(amount) ~= "number" then return amount or "0" end
if amount >= 1000 then return string.format("%.1fK", amount / 1000)
else return tostring(amount) end else return tostring(amount) end
end end
@@ -35,22 +76,15 @@ if not amount or type(amount) ~= "number" then return amount or "0" end
local function ShowCritText(amount, isHighCombo) local function ShowCritText(amount, isHighCombo)
local f = CreateFrame("Frame", nil, CounterFrame); f:SetSize(200, 30) local f = CreateFrame("Frame", nil, CounterFrame); f:SetSize(200, 30)
f:SetPoint("CENTER", CounterFrame, "CENTER", 0, 0) f:SetPoint("CENTER", CounterFrame, "CENTER", 0, 0)
local text = f:CreateFontString(nil, "OVERLAY", "NumberFontNormal") local text = f:CreateFontString(nil, "OVERLAY", "NumberFont_Outline_Huge")
text:SetPoint("CENTER"); text:SetText(FormatNumber(amount)) text:SetPoint("CENTER"); text:SetText(FormatNumber(amount))
text:SetTextColor(isHighCombo and 0 or 1, isHighCombo and 1 or 0.41, isHighCombo and 0 or 0.7)
if isHighCombo then
text:SetTextColor(0, 1, 0)
text:SetFont(text:GetFont(), 26, "OUTLINE")
else
text:SetTextColor(1, 0.41, 0.7)
text:SetFont(text:GetFont(), 22, "OUTLINE")
end
local ag = f:CreateAnimationGroup() local ag = f:CreateAnimationGroup()
local targetX, targetY = math.random(-120, 120), math.random(80, 150) local tX, tY = math.random(-120, 120), math.random(80, 150)
local scale = ag:CreateAnimation("Scale"); scale:SetScale(1.4, 1.4); scale:SetDuration(0.15); scale:SetOrder(1) local s = ag:CreateAnimation("Scale"); s:SetScale(1.5, 1.5); s:SetDuration(0.15); s:SetOrder(1)
local translation = ag:CreateAnimation("Translation"); translation:SetOffset(targetX, targetY); translation:SetDuration(1.4); translation:SetSmoothing("OUT"); translation:SetOrder(2) local t = ag:CreateAnimation("Translation"); t:SetOffset(tX, tY); t:SetDuration(1.4); t:SetSmoothing("OUT"); t:SetOrder(2)
local alpha = ag:CreateAnimation("Alpha"); alpha:SetFromAlpha(1); alpha:SetToAlpha(0); alpha:SetStartDelay(0.7); alpha:SetDuration(0.7); alpha:SetOrder(2) local a = ag:CreateAnimation("Alpha"); a:SetFromAlpha(1); a:SetToAlpha(0); a:SetStartDelay(0.7); a:SetDuration(0.7); a:SetOrder(2)
ag:SetScript("OnFinished", function() f:Hide() end); ag:Play() ag:SetScript("OnFinished", function() f:Hide() end); ag:Play()
end end
@@ -64,38 +98,28 @@ if not amount or type(amount) ~= "number" then return amount or "0" end
CounterFrame:SetScript("OnDragStart", CounterFrame.StartMoving) CounterFrame:SetScript("OnDragStart", CounterFrame.StartMoving)
CounterFrame:SetScript("OnDragStop", function(self) CounterFrame:SetScript("OnDragStop", function(self)
self:StopMovingOrSizing() self:StopMovingOrSizing()
local point, _, rel, x, y = self:GetPoint() local p, _, r, x, y = self:GetPoint()
if MoanSDB then MoanSDB.framePos = { point, rel, x, y } end if MoanSDB then MoanSDB.framePos = { p, r, x, y } end
end) end)
local function GetNextSound() local function GetNextSound()
local currentTime = GetTime() local currentTime = GetTime()
local timeout = MoanSDB and MoanSDB.comboTimeout or 4.0 local timeout = MoanSDB and MoanSDB.comboTimeout or 4.0
if (currentTime - lastSoundTime) > timeout then comboCount = 1 else comboCount = comboCount + 1 end
if (currentTime - lastSoundTime) > timeout then
comboCount = 1
else
comboCount = comboCount + 1
end
lastSoundTime = currentTime lastSoundTime = currentTime
CounterFrame.Cooldown:SetCooldown(currentTime, timeout) CounterFrame.Cooldown:SetCooldown(currentTime, timeout)
-- Sound-Rotation Logik
local soundIndex = comboCount % 10 local soundIndex = comboCount % 10
if soundIndex == 0 then soundIndex = 10 end -- Bei 10, 20, 30... spiele moan10 if soundIndex == 0 then soundIndex = 10; TriggerComboVisual() end
local sFile = (MoanSDB.soundBaseName or "moan") .. soundIndex .. ".ogg" local sFile = (MoanSDB.soundBaseName or "moan") .. soundIndex .. ".ogg"
local isHigh = comboCount >= 10 return "Interface\\AddOns\\MoanS\\media\\" .. sFile, comboCount, (comboCount >= 10)
return "Interface\\AddOns\\MoanS\\media\\" .. sFile, comboCount, isHigh
end end
local MoanSPanel = CreateFrame("Frame", "MoanSConfigPanel", UIParent) local MoanSPanel = CreateFrame("Frame", "MoanSConfigPanel", UIParent)
local category local category
local function CreateCB(parent, label, x, y, dbKey) local function CreateCB(label, x, y, dbKey)
local cb = CreateFrame("CheckButton", nil, parent, "InterfaceOptionsCheckButtonTemplate") local cb = CreateFrame("CheckButton", nil, MoanSPanel, "InterfaceOptionsCheckButtonTemplate")
cb:SetPoint("TOPLEFT", x, y); cb.Text:SetText(label) cb:SetPoint("TOPLEFT", x, y); cb.Text:SetText(label)
cb:SetScript("OnShow", function(self) if MoanSDB then self:SetChecked(MoanSDB[dbKey]) end end) cb:SetScript("OnShow", function(self) if MoanSDB then self:SetChecked(MoanSDB[dbKey]) end end)
cb:SetScript("OnClick", function(self) MoanSDB[dbKey] = self:GetChecked(); UpdateCounterDisplay() end) cb:SetScript("OnClick", function(self) MoanSDB[dbKey] = self:GetChecked(); UpdateCounterDisplay() end)
@@ -111,17 +135,19 @@ if not amount or type(amount) ~= "number" then return amount or "0" end
Settings.RegisterAddOnCategory(category) Settings.RegisterAddOnCategory(category)
local title = MoanSPanel:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge") local title = MoanSPanel:CreateFontString(nil, "ARTWORK", "GameFontNormalLarge")
title:SetPoint("TOPLEFT", 16, -16); title:SetText(MOAN_NAME .. " - Classic") title:SetPoint("TOPLEFT", 16, -16); title:SetText(MOAN_NAME .. " - Anniversary Edition")
CreateCB(MoanSPanel, "Addon Aktiviert", 16, -50, "active") CreateCB("Addon Aktiviert", 16, -50, "active")
CreateCB(MoanSPanel, "Chat Nachrichten", 16, -80, "chat") CreateCB("Chat Nachrichten", 16, -80, "chat")
CreateCB(MoanSPanel, "Fenster anzeigen", 16, -110, "showCounter") CreateCB("Fenster anzeigen", 16, -110, "showCounter")
CreateCB(MoanSPanel, "Fenster fixieren (Lock)", 16, -140, "locked") CreateCB("Bilder bei Ultra-Combo", 16, -140, "showImages")
CreateCB(MoanSPanel, "Pet Crits zählen", 16, -170, "petEnabled") CreateCB("Fenster fixieren (Lock)", 16, -170, "locked")
CreateCB(MoanSPanel, "Heil-Crits zählen", 16, -200, "healEnabled") CreateCB("Pet Crits zählen", 16, -200, "petEnabled")
CreateCB("Heil-Crits zählen", 16, -230, "healEnabled")
-- SLIDER HINZUGEFÜGT
local slider = CreateFrame("Slider", "MoanSTimeoutSlider", MoanSPanel, "OptionsSliderTemplate") local slider = CreateFrame("Slider", "MoanSTimeoutSlider", MoanSPanel, "OptionsSliderTemplate")
slider:SetPoint("TOPLEFT", 20, -250); slider:SetMinMaxValues(0.5, 10.0); slider:SetValueStep(0.5); slider:SetWidth(180) slider:SetPoint("TOPLEFT", 20, -280); slider:SetMinMaxValues(0.5, 10.0); slider:SetValueStep(0.5); slider:SetWidth(180)
_G[slider:GetName().."Low"]:SetText("0.5s"); _G[slider:GetName().."High"]:SetText("10s") _G[slider:GetName().."Low"]:SetText("0.5s"); _G[slider:GetName().."High"]:SetText("10s")
local sliderVal = slider:CreateFontString(nil, "ARTWORK", "GameFontHighlight") local sliderVal = slider:CreateFontString(nil, "ARTWORK", "GameFontHighlight")
sliderVal:SetPoint("BOTTOM", slider, "TOP", 0, 5) sliderVal:SetPoint("BOTTOM", slider, "TOP", 0, 5)
@@ -132,16 +158,15 @@ if not amount or type(amount) ~= "number" then return amount or "0" end
end) end)
slider:SetValue(MoanSDB.comboTimeout) slider:SetValue(MoanSDB.comboTimeout)
-- TEST-BUTTON HINZUGEFÜGT
local btnTest = CreateFrame("Button", nil, MoanSPanel, "UIPanelButtonTemplate") local btnTest = CreateFrame("Button", nil, MoanSPanel, "UIPanelButtonTemplate")
btnTest:SetPoint("TOPLEFT", 16, -300); btnTest:SetSize(160, 25); btnTest:SetText("Combo Testen") btnTest:SetPoint("TOPLEFT", 16, -330); btnTest:SetSize(160, 25); btnTest:SetText("Combo Testen")
btnTest:SetScript("OnClick", function() btnTest:SetScript("OnClick", function()
local sPath, cIdx, isHigh = GetNextSound() local sPath, cIdx, isHigh = GetNextSound()
local amount = math.random(100, 5000) PlaySoundFile(sPath, "Master"); ShowCritText(math.random(100,5000), isHigh)
PlaySoundFile(sPath, "Master")
ShowCritText(amount, isHigh)
if MoanSDB.chat then if MoanSDB.chat then
local prefix = isHigh and (COMBO_COLOR .. "[ULTRA COMBO x" .. cIdx .. "]|r") or ("[Combo " .. cIdx .. "/9]") local prefix = isHigh and (COMBO_COLOR .. "[ULTRA COMBO x" .. cIdx .. "]|r") or ("[Combo " .. cIdx .. "/9]")
print(MOAN_TEXT .. " " .. prefix .. " Crit: " .. FormatNumber(amount)) print(MOAN_TEXT .. " " .. prefix)
end end
end) end)
@@ -159,13 +184,11 @@ if not amount or type(amount) ~= "number" then return amount or "0" end
elseif sub == "SPELL_HEAL" and MoanSDB.healEnabled then amount, isCrit = a15, a18 end elseif sub == "SPELL_HEAL" and MoanSDB.healEnabled then amount, isCrit = a15, a18 end
if isCrit then if isCrit then
local sPath, cIdx, isHigh = GetNextSound() local sPath, cIdx, isHigh = GetNextSound()
PlaySoundFile(sPath, "Master") PlaySoundFile(sPath, "Master"); ShowCritText(amount, isHigh)
ShowCritText(amount, isHigh) MoanSDB.totalMoans = MoanSDB.totalMoans + 1; UpdateCounterDisplay()
MoanSDB.totalMoans = MoanSDB.totalMoans + 1
UpdateCounterDisplay()
if MoanSDB.chat then if MoanSDB.chat then
local prefix = isHigh and (COMBO_COLOR .. "[ULTRA COMBO x" .. cIdx .. "]|r") or ("[Combo " .. cIdx .. "/9]") local prefix = isHigh and (COMBO_COLOR .. "[ULTRA COMBO x" .. cIdx .. "]|r") or ("[Combo " .. cIdx .. "/9]")
print(MOAN_TEXT .. " " .. prefix .. " Crit: " .. FormatNumber(amount) .. " (Total: " .. MoanSDB.totalMoans .. ")") print(MOAN_TEXT .. " " .. prefix .. " Crit: " .. FormatNumber(amount))
end end
end end
end end
@@ -174,5 +197,5 @@ if not amount or type(amount) ~= "number" then return amount or "0" end
SLASH_MOANS1 = "/moans" SLASH_MOANS1 = "/moans"
SlashCmdList["MOANS"] = function() SlashCmdList["MOANS"] = function()
if category and category.GetID then Settings.OpenToCategory(category:GetID()) else InterfaceOptionsFrame_OpenToCategory("MoanS") end if category and category.GetID then Settings.OpenToCategory(category:GetID()) end
end end

View File

@@ -2,7 +2,7 @@
## Title: |cffFF69B4MoanS|r ## Title: |cffFF69B4MoanS|r
## Notes: Krit-Sound Addon ## Notes: Krit-Sound Addon
## Author: Quasimoder ## Author: Quasimoder
## Version: 3.1 ## Version: 4.1
## SavedVariables: MoanSDB ## SavedVariables: MoanSDB
MoanS.lua MoanS.lua

BIN
media/combo_pic.tga Normal file

Binary file not shown.