iddqd

Loot Council with Discord Bot integration

File Details

iddqd v0.8.2

  • R
  • Apr 8, 2026
  • 411.60 KB
  • 45
  • 2.5.5
  • Classic TBC

File Name

iddqd_app.zip

Supported Versions

  • 2.5.5

iddqd app v0.8.2

Loot Automation

  • Added Auto Need system — automatically rolls Need on group loot items matching enabled rarities
  • Per-rarity toggles: Uncommon (off), Rare (on), Epic (on), Legendary (off) by default
  • Tooltip-based BoP detection via hidden scanTooltip frame — scans for ITEM_BIND_ON_PICKUP and ITEM_SOULBOUND using locale-safe WoW globals
  • Fail-closed tradability check: item must be positively confirmed tradable before any auto-roll; any uncertainty = skip
  • Deferred evaluation with retry: TryAutoNeed() retries up to 3 times at 200ms intervals if item info or tooltip is not ready; bonus retry if GetLootRollTimeLeft() > 500ms
  • Added Auto Master Loot — automatically distributes items to assigned players when you are master looter
  • Master loot requires 90%+ guild members in raid via new Sync:IsHighConfidenceGuildRaid(threshold), separate from the 75% broadcast threshold
  • Strict validation chain: assignment exists → player in raid → candidate index resolved → name re-verified → GiveMasterLoot(slot, index)
  • No fallbacks: if any validation step fails, item is left for manual handling
  • Both features disabled by default

Session System

  • Added sessionKey field to all loot entries — format: instanceId-difficultyId-startTimestamp
  • Session key generated lazily on first loot event via EnsureSessionKey(), not on zone entry — ensures all raid members converge on the same key
  • Sync convergence: AdoptSessionKey() called when receiving LD messages — first looter's key propagates to all players
  • Relog recovery: TryRecoverSessionKey() scans recent loot history (30-minute window) for matching instanceId on zone entry
  • sessionKey treated as opaque identifier — never parsed to derive other fields
  • Added originalInstanceId and originalSessionKey to every loot entry for trade/DE audit trail
  • Export:BuildSessionsFromHistory() now groups by sessionKey first (no time-gap check needed), falls back to instanceId:difficultyId + gap, then raid name
  • LootLog:GetCurrentSession() matches by sessionKey (priority), instanceId, then raid name
  • LD sync payload extended with 9th field (sessionKey) — backward compatible with older addon versions
  • Loot history sync payload includes sk, oi, ok fields for sessionKey, originalInstanceId, originalSessionKey

Sync & Data Integrity

  • PUG filtering reworked: loot is now always tracked locally regardless of guild raid status
  • Broadcast gating: guild raid (75%+) → full RAID + GUILD broadcast; PUG with guild member loot → GUILD-only via new SendGuildOnlyLootMessage(); PUG with non-guild loot → no broadcast
  • Added Sync:IsPlayerInGuild(playerName) using cached guild member set
  • Added Sync:SendGuildOnlyLootMessage() with same LD throttle as SendLootMessage() (shared syncSendThrottle)
  • Added Sync:IsHighConfidenceGuildRaid(threshold) — independent from 75% IsGuildRaid(), used exclusively by auto master loot
  • HandleLootOpen simplified — setting enforcement moved to UI:ShowMiniLoot()

UI & Settings

  • Added Loot Automation section to General Settings panel
  • Auto Need toggle with per-rarity checkboxes (Uncommon/Rare/Epic/Legendary) — each independently toggleable
  • Auto Master Loot toggle
  • Both toggles include descriptive tooltips listing safety restrictions
  • UI:ShowMiniLoot(force) now accepts a force parameter — explicit user actions (officer button, toggle) pass force=true; automated paths (sync LO, auto-open) respect autoOpenMiniLoot setting
  • Added autoOpenMiniLoot = false to lootSettings defaults — mini loot window no longer auto-opens from sync
  • Removed Split Roster button, Split Options section (Parts dropdown, Rule dropdown, Group checkboxes) from Raid Groups panel
  • Added /iddqd autoneed debug command — prints settings state, active roll guards, and live tooltip tradability scan for hovered item
  • Added /iddqd session debug command — prints session key, instance info, recent sessions from history, guild raid status

Safety Improvements

  • Permanent blacklist: Splinter of Atiesh, Frame of Atiesh, Nether Vortex, Fragment of Val'anyr, Eye of Sulfuras, both Bindings of the Windseeker, Eye of C'Thun, Badge of Justice, Heart of Darkness, Sunmote
  • Inverted safety model: CanConfirmTradable() must return true to proceed — default is deny
  • Tooltip scan uses ITEM_BIND_ON_PICKUP / ITEM_SOULBOUND WoW globals for locale-safe detection (German, French, etc.)
  • Roll guard keyed by rollID-itemId with 60-second TTL — prevents duplicate rolls and avoids stale rollID collisions
  • Auto master loot: 0.5s delay after LOOT_OPENED for candidate list population; candidate name double-verified after index lookup
  • All automation disabled by default — requires explicit opt-in per feature

Fixes

  • Fixed mini loot window opening for all raid members when officer clicks "Open Raid Loot" — now respects per-user autoOpenMiniLoot setting
  • Fixed PUG raids blocking all loot tracking — loot is now tracked locally even in non-guild raids
  • Fixed loot from multiple runs of the same raid merging into one session — sessionKey provides unique identity per run
  • Fixed session divergence across players entering raid at different times — EnsureSessionKey() triggers on first loot, not zone entry; sync convergence adopts sender's key

Internal Changes

  • Version bumped to 0.8.2 in iddqd_app.toc and core.lua
  • New module: auto_loot.lua — self-contained, no modifications to existing loot flow
  • Removed SplitRoster() function and SPLIT_CLASS_PRIO constant from raid_groups.lua
  • Removed splitGroups, splitParts, splitRule from database defaults; OnInitialize cleans up old saved data
  • LootTracker state extended with currentSessionKey, sessionStartTime, currentInstanceId, currentDifficultyId
  • SESSION_GAP_SECONDS = 30 * 60 in loot_tracker.lua for relog recovery (export.lua retains 4-hour gap for historical session grouping)
  • Alt+click loot handler now includes sessionKey in entry and LD sync payload
  • MergeLootHistory() in sync now reads and writes sk, oi, ok fields