HCRoleplay

A lightweight World of Warcraft Classic Hardcore addon that adds simple roleplay-focused emote icons to enhance in-game expression without affecting gameplay.

File Details

HCRoleplay v1.8.7

  • R
  • Feb 26, 2026
  • 131.78 KB
  • 5
  • 1.15.8
  • Classic

File Name

HCRoleplay.zip

Supported Versions

  • 1.15.8
# Changelog – HCRoleplay

## [1.8.7] – 2026-02-26
### Added
- **"Das lebende Rollenbuch" – Minimap-Button komplett neu gestaltet:**
  - **Kerzenlicht-Glow**: Sanft pulsierender Starburst in warmem Amber (3s Bounce, Alpha 0.06–0.44) — wie eine Kerze die einen alten Buchdeckel beleuchtet
  - **3 organisch schwebende Tintenwisps**: Kein einfacher Kreisflug wie bei GDL — jeder Wisp hat einen eigenen Basisradius, eine pulsierende Radiusveränderung (`sin(t) * pulseAmp`) und einen leichten y-Drift (`cos(t * 0.6) * 2`), was eine fließende "Tinte-im-Wasser"-Bewegung ergibt. Goldene Warmtöne (amber/gold/elfenbein).
  - **Pergament-Tint**: Icon in warmem Parchment-Ton (0.95, 0.88, 0.65), Border in Gold (0.88, 0.75, 0.35).
  - **Emote-Blitz**: Jedes Mal wenn ein RP-Emote tatsächlich gesendet wird, leuchtet ein goldener Ring kurz auf (`Flash()`) und die Wisps hellen für 0.6s auf — visuelles Feedback direkt am Button.
  - **Zustandsreaktiv**: Rechtsklick-Deaktivierung dimmt Icon (grau), Border (grau), pausiert den Glow und dimmt die Wisps auf 6% — sofort sichtbar dass das Addon aus ist. Re-Aktivierung stellt alle Farben und Animationen wieder her.

## [1.8.6] – 2026-02-26
### Added
- **AFK: Charakter legt sich hin** statt nur ein Emote-Text zu senden: Bei AFK-Setzen feuert jetzt zuerst `DoEmote("SLEEP")` (Charakter legt sich hin), 0,8s später folgt der gewohnte `SendRP("AFK")`-Text.
- **AFK-Rückkehr: Gähnen als Aufwach-Signal**: Beim Zurückkehren aus dem AFK feuert `DoEmote("TIRED")` (Gähnen), 0,5s später der `SendRP("BACK_FROM_AFK")`-Text.
- **Login: Charakter liegt beim Einloggen**: Bei frischem Login (`isLogin = true`) legt sich der Charakter nach 0,3s via `DoEmote("SLEEP")` hin — als würde er gerade schlafen. Nach 3s folgt der gewohnte `SendRP("LOGIN")`-Text. Der Charakter steht automatisch auf, sobald sich der Spieler bewegt.

## [1.8.5] – 2026-02-26
### Fixed
- **Loot: GetItemInfo Cache-Miss** (Hauptursache): `GetItemInfo()` gibt `nil` zurück wenn ein Item noch nicht im Client-Cache ist. Bisher wurde in diesem Fall still abgebrochen (`if not quality then return end`). Jetzt wird bis zu 4× mit je 0,3s Verzögerung (`C_Timer.After`) nachgefragt, bis die Qualität verfügbar ist.
- **Loot: Doppelter Zufallsfilter entfernt**: Uncommon-Items hatten einen inline `math.random(100) <= 20`-Check (20%) zusätzlich zum `SendRP`-eigenen 15%-Chance-System → effektive Wahrscheinlichkeit ~3%. Der inline-Filter wurde entfernt. Jetzt gilt ausschließlich der im UI konfigurierbare Wert (Standard 15%) für Uncommon-Items. Common- (Qualität 1) und Grau-Items (Qualität 0) werden komplett ignoriert.
- **Berufe: `DoTradeSkill` existiert im Classic 1.15.x Modern Client nicht mehr**: Der Hook schlug silent fehl (via `pcall`), `pendingCraftItem` wurde nie gesetzt, Emotes feuerten nie. Der primäre Hook nutzt jetzt `C_TradeSkillUI.CraftRecipe` (modernes API), `DoTradeSkill`/`DoCraft` bleiben als Fallback für ältere Builds.
- **Loot: `msg:find(playerName)` jetzt plain-text** (`find(..., 1, true)`): Verhindert Fehler wenn der Charaktername Sonderzeichen enthält, die Lua als Regex-Metazeichen interpretiert.

## [1.8.4] – 2026-02-26
### Fixed
- **ENTER_COMBAT zu früh ausgelöst (Wut-Klassen)**: Das Emote feuerte sofort bei `PLAYER_REGEN_DISABLED`, zu einem Zeitpunkt wo Krieger/Bär noch 0 Wut haben. Da `GetResourceStateKey()` für Wut eine invertierte Logik nutzt (0 Wut = `full_res`), stimmte der Emote-Kontext nicht. Jetzt wird das ENTER_COMBAT-Emote um **1,5 Sekunden verzögert** (`C_Timer.After`) – bis dann hat der Charakter die ersten Treffer kassiert und die Wut spiegelt die tatsächliche Situation wider. Guard: Feuert nur, wenn `inCombat` nach dem Delay noch true ist.

## [1.8.3] – 2026-02-26
### Fixed
- **CheckEatingDrinking: falscher UnitBuff-Feldindex** (Classic 1.15.8 Modern Client API hat kein `rank`-Feld mehr → `dispelType` liegt an Position 4, nicht 5). EAT- und DRINK-Emotes feuerten deshalb nie.
- **FISHING-Event war nie implementiert**: In Config/DEFAULTS als 100%-Event aktiv, wurde aber nie ausgelöst. Jetzt Erkennung via `UNIT_SPELLCAST_START` mit allen Angelruten-Spell-IDs (7620/7731/7732/18248 – Classic Rang 1–4). Emote feuert beim Auswerfen der Angel.
- **GATHER_NODE + GATHER_SKIN fehlten in Config.EVENT_INFO und Config.DEFAULT_CHANCES**: Diese in v1.8.1 hinzugefügten Events konnten nicht über das UI ein-/ausgeschaltet werden, und `Config.GetChance()` fiel auf 100% statt der korrekten 30%/40% zurück. Jetzt vollständig in Config registriert.
- **COMPANION_UPDATE nicht registriert**: Das Event wurde im OnEvent-Handler behandelt (für Mount-Erkennung), aber nie via `frame:RegisterEvent()` angemeldet. Jetzt korrekt registriert.
- **`/hcrp events` zeigte veraltete Chancen**: Slash-Command nutzte die veraltete `EVENT_CHANCE`-Tabelle (Dezimalwerte, unvollständig) statt `HCRoleplayDB.chances`. Jetzt werden die Live-Werte aus der DB angezeigt.

### Changed
- **Versionstrings vereinheitlicht**: Core.lua (Ladeprint), UI.lua (Info-Tab + Versionsanzeige) und Minimap.lua (Tooltip) zeigten verschiedene Stände (v1.6.0, v1.7.0). Alle auf v1.8.3 aktualisiert.