7 Commits

Author SHA1 Message Date
5d3d77a397 Use LFS idiot 2024-12-27 16:18:31 +01:00
f0dcde4b23 Release 2024-12-27 15:52:44 +01:00
4d90fdb229 Update deploy script 2024-12-27 15:52:32 +01:00
30281c7e73 Add download link to readme 2024-12-27 15:50:26 +01:00
720a772dd1 Translate into russian too 2024-12-27 15:43:47 +01:00
9925be5e0b Add README 2024-12-27 15:39:18 +01:00
b1dd53d6d9 Add 1s timer to remove buffs 2024-12-22 14:20:18 +01:00
5 changed files with 125 additions and 84 deletions

1
.gitattributes vendored
View File

@@ -1 +1,2 @@
.zip filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text

View File

@@ -1,30 +1,36 @@
local addonname, shared = ...
---@cast addonname string
---@class shared
---@field timer number?
shared = { timer = nil }
---@class DechickenatorData
---@field alerts table<string, Alert>
---@field blacklistedBuffs table<string, boolean>
---@alias auraType
---| 'BUFF'
---| 'DEBUFF'
--/dechicken a:Greater Blessing of Kings;B;R;e:spit;m:cuntfucker;c:SAY
--/dechicken a:Greater Blessing of Kings;B;R;e:spit;m:cuntfucker
--/dechicken a:Greater Blessing of Kings;R;e:spit;m:cuntfucker
--/dechicken a:Greater Blessing of Kings;B;R;m:cuntfucker
--/dechicken a:Greater Blessing of Kings;R
---@class Alert
---@field message string?
---@field channel string?
---@field channelData string?
---@field emote string?
---@field spellName string
---@field remove boolean?
--/run Dechickenator_Data = nil
if not Dechickenator_Data then Dechickenator_Data = {} end
if not Dechickenator_Data.alerts then Dechickenator_Data.alerts = {} end
if not Dechickenator_Data.blacklistedBuffs then Dechickenator_Data.blacklistedBuffs = {} end
if not Dechickenator_Data.message then Dechickenator_Data.message = "Индивидуум %s хочет поделиться своим истинным обликом" end
local function init()
local function RemoveBuff(buff)
if UnitAffectingCombat("player") then return end
CancelUnitBuff("player", buff)
end
local function RemoveBuffs()
if UnitAffectingCombat("player") then return end
for buff, enabled in pairs(Dechickenator_Data.blacklistedBuffs) do
if enabled then
RemoveBuff(buff)
end
end
end
if not shared.timer then
shared.timer = C_Timer.NewTicker(1, function()
RemoveBuffs()
end)
end
local cleuFrame = CreateFrame("Frame")
cleuFrame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
cleuFrame:SetScript("OnEvent", function(self, event, ...)
@@ -33,25 +39,12 @@ local function init()
local target = CLEUParser.GetDestName(...)
if target ~= UnitName("player") then return end
local spellName = CLEUParser.GetSpellName(...)
if not Dechickenator_Data.alerts[spellName] then return end
if not Dechickenator_Data.blacklistedBuffs[spellName] then return end
local source = CLEUParser.GetSourceName(...)
if Dechickenator_Data.alerts[spellName].message then
local msg = Dechickenator_Data.alerts[spellName].message
if string.find(msg, "%s") then
msg = string.format(msg, tostring(source))
end
local channel = "SAY"
if Dechickenator_Data.alerts[spellName].channel then
channel = Dechickenator_Data.alerts[spellName].channel
end
SendChatMessage(msg, channel)
end
if Dechickenator_Data.alerts[spellName].emote then
DoEmote(Dechickenator_Data.alerts[spellName].emote, source)
end
if Dechickenator_Data.alerts[spellName].remove then
CancelUnitBuff("player", spellName)
end
local msg = string.format(Dechickenator_Data.message, tostring(source))
RemoveBuff(spellName)
SendChatMessage(msg, "EMOTE")
DoEmote("spit", source)
end
end)
@@ -66,52 +59,14 @@ loadedFrame:SetScript("OnEvent", function(self, event, addonName)
end
end)
---@param table table
---@param depth number?
function DumpTable(table, depth)
if depth == nil then
depth = 0
end
if (depth > 200) then
print("Error: Depth > 200 in dumpTable()")
return
end
for k, v in pairs(table) do
if (type(v) == "table") then
print(string.rep(" ", depth) .. k .. ":")
DumpTable(v, depth + 1)
else
print(string.rep(" ", depth) .. k .. ": ", v)
end
end
end
SlashCmdList["DECHICKENATOR_TOGGLE_BLACKLISTED_BUFF"] = function(input)
local fields = { strsplit(";", input) }
---@type Alert
local aura = { spellName = "" }
for _, field in ipairs(fields) do
local data = { strsplit(":", field) }
local key = strtrim(data[1])
key = string.lower(key)
if key == "a" then
aura.spellName = strtrim(data[2])
elseif key == "e" then
aura.emote = strtrim(data[2])
elseif key == "m" then
aura.message = strtrim(data[2])
elseif key == "c" then
aura.channel = strtrim(data[2])
elseif key == "r" then
aura.remove = true
end
end
DumpTable(aura)
if aura.spellName ~= "" then
Dechickenator_Data.alerts[aura.spellName] = aura
print("Toggling blacklisted buff: " .. tostring(input))
if Dechickenator_Data.blacklistedBuffs[input] then
Dechickenator_Data.blacklistedBuffs[input] = nil
else
Dechickenator_Data.blacklistedBuffs[input] = true
end
print(Dechickenator_Data.blacklistedBuffs[input])
end
SLASH_DECHICKENATOR_TOGGLE_BLACKLISTED_BUFF1 = "/dechicken"
@@ -120,4 +75,4 @@ SlashCmdList["DECHICKENATOR_SET_MESSAGE"] = function(input)
Dechickenator_Data.message = input
print(Dechickenator_Data.message)
end
SLASH_DECHICKENATOR_SET_MESSAGE1 = "/dechicken_message"
SLASH_DECHICKENATOR_SET_MESSAGE1 = "/dechicken_message"

Binary file not shown.

81
README.md Normal file
View File

@@ -0,0 +1,81 @@
# Dechickenator
## Overview
Dechickenator is a World of Warcraft addon that automatically manages unwanted buffs with custom messaging.
## Versions
- **v1 (Master)**: Simple buff removal with predefined actions
- **v2.0**: More complex alert system with customizable actions
## Features
- Automatically remove unwanted buffs
- Send custom emote messages when buffs are applied
- Perform "spit" emote on buff source
## Installation
1. Download the [addon](https://git.site.quack-lab.dev/dave/wow_dechickenator/raw/branch/master/Dechickenator.zip)
2. Extract the addon to your World of Warcraft `Interface/AddOns` directory
3. Ensure the addon is enabled in the character selection screen
## Usage
### Toggling Blacklisted Buffs
Use `/dechicken BuffName` to add or remove a buff from the blacklist.
### Customizing Message
Use `/dechicken_message Your custom message with %s for source name`
### Examples
```
# Toggle "Greater Blessing of Kings" blacklist
/dechicken Greater Blessing of Kings
# Set a custom message
/dechicken_message %s thinks they're special!
```
## Default Behavior
- When a blacklisted buff is applied, it will be automatically removed
- An emote message will be sent (default: "Индивидуум %s хочет поделиться своим истинным обликом")
- A "spit" emote will be performed towards the buff source
# Dechickenator; Ruski
## Обзор
Dechickenator - это аддон для World of Warcraft, который автоматически управляет нежелательными баффами с настраиваемыми сообщениями.
## Версии
- **v1 (Master)**: Простое удаление баффов с предустановленными действиями
- **v2.0**: Более сложная система оповещений с настраиваемыми действиями
## Возможности
- Автоматическое удаление нежелательных баффов
- Отправка пользовательских эмоций при получении баффов
- Выполнение эмоции "плевок" в сторону источника баффа
## Установка
1. Скачайте [аддон](https://git.site.quack-lab.dev/dave/wow_dechickenator/raw/branch/master/Dechickenator.zip)
2. Распакуйте аддон в директорию World of Warcraft `Interface/AddOns`
3. Убедитесь, что аддон включен на экране выбора персонажа
## Использование
### Управление черным списком баффов
Используйте `/dechicken НазваниеБаффа` для добавления или удаления баффа из черного списка.
### Настройка сообщения
Используйте `/dechicken_message Ваше сообщение с %s для имени источника`
### Примеры
```
# Переключить "Великое благословение королей" в черном списке
/dechicken Великое благословение королей
# Установить пользовательское сообщение
/dechicken_message %s считает себя особенным!
```
## Поведение по умолчанию
- При получении баффа из черного списка он будет автоматически удален
- Будет отправлено сообщение с эмоцией (по умолчанию: "Индивидуум %s хочет поделиться своим истинным обликом")
- В сторону источника баффа будет выполнена эмоция "плевок"

View File

@@ -1 +1,5 @@
7z a Dechickenator.zip Dechickenator.toc Dechickenator.lua CLEUParser.lua
rm Dechickenator.zip
mkdir Dechickenator
cp *.lua *.toc Dechickenator
7z a Dechickenator.zip Dechickenator
rm -rf Dechickenator