File Details
v0.6.0
- R
- Apr 30, 2026
- 320.88 KB
- 29
- 12.0.5+2
- Retail
File Name
PiratesPlunder-v0.6.0.zip
Supported Versions
- 12.0.5
- 12.0.1
- 12.0.0
Changelog
[0.6.0] - 2026-04-30
Added
SESSION_SYNC_REQUEST/SESSION_SYNC_REPLY(PP:RequestSessionSync,PP:HandleSessionSyncRequest,PP:HandleSessionSyncReply): leader-only, narrow alternative toSYNC_REQUEST/SYNC_FULL. Reply carries the active guild's roster, the active session record, in-flightpendingLoot, and_completedLootKeys. Broadcast-only with a 5 s cooldown so concurrent requesters from the same burst are coalesced into a single broadcast.SESSION_SYNC_REPLYships atBULKpriority.PP:_ensureSessionRecord(guildKey, sessionID, sessionData): installs a minimal session shell when the local record is missing. Used byHandleSessionCreate,HandleLootPost,HandleLootAward, and the newHandleSessionSyncReply.LOOT_POSTandLOOT_AWARDpayloads now carry a minimalsessionfield ({ name, startTime, leader, guildKey }) so receivers who missedSESSION_CREATEcan install a record before showing the response popup or recording an award.
Changed
- All internal
RequestSynccallers swapped toRequestSessionSync(_ScheduleJoinSync,CompletePendingSessionEnd,OnGuildRosterUpdate,OnPlayerEnteringWorldungrouped path,HandleSessionCreatefresh-roster trigger, and theLOOT_AWARDversion-gap recovery inHandleLootAward). The Settings-tab "Request Sync" button still callsRequestSync/SYNC_FULLas the manual escape hatch for a multi-guild dump. HandleLootPostgates the response popup behind_ensureSessionRecord. If the receiver missedSESSION_CREATEand the sender did not carry thesessionfield (old client), the post is dropped and aRequestSessionSyncis issued; the leader's reply repopulatespendingLoot.HandleLootAwardinvokes_ensureSessionRecordbeforeRecordItemAward. If installation fails, the score change still applies (roster is independent) but the item is not recorded into a phantom session and aRequestSessionSyncis issued.
Removed
ComputeRosterHashand thePP.ComputeRosterHashexport. Roster broadcasts ship the full table on every mutation alongside a strictly-monotonicrosterVersion; equal versions imply equal state.hashfield onROSTER_UPDATEandSYNC_REQUESTpayloads,rosterHashonLOOT_AWARDandGROUP_SCORE._groupScoreHashescache and theGROUP_SCORE_ACKround-trip (PP.MSG.GROUP_SCORE_ACK,HandleGroupScoreAck).GROUP_SCOREitself stays — only the per-receiver acknowledgement dies. Wire-breaking: clients on older versions still sendGROUP_SCORE_ACK, which new clients silently ignore (no dispatch branch).- Hash-mismatch recovery branches in
HandleRosterUpdateandHandleLootAward. Version-gap detection onLOOT_AWARDis retained and now triggersRequestSessionSync. - "Roster hash:" line from the
/ppSettings status panel.
[0.5.1] - 2026-04-28
Added
- Roster snapshots: end-of-session standings frozen per session. Captured locally by every client on
PP.Session:End()(skipped forRESETandSYNC_DELETE); shipped inline onSESSION_CLOSE; backfilled on demand viaSNAPSHOT_REQUEST/SNAPSHOT_REPLY(BULK priority).sessionSnapshotstable added toguilds[guildKey]schema (auto-backfilled byEnsureData). Arbitration byrosterVersion— newest wins. - New
PP.Repo.Rostermethods:GetSessionSnapshot,SetSessionSnapshot,BuildRosterSnapshot,GetAllSnapshotVersions. - Roster snapshot UI: "View Roster Snapshot" button on ended-session detail view; popup window lists frozen standings sorted by score. "Fetch Session Snapshots" button in the Settings tab triggers a group-wide backfill (5 s cooldown).
LOOT_CLEARmessage type: raid leader broadcasts after 60 s of an empty queue. Receivers wipe their loot display and mark the cleared keys as completed so lateLOOT_POSTmessages cannot re-pop them. Idle timer cancels on new posts and on session end/create.PP:LocalClearLoot()and/pp loot clear(/pp l clear): wipes pending loot for this client only, no broadcast. Settings tab gains a "Clear My Loot Display" button.PARTY_LEADER_CHANGEDhandler (OnPartyLeaderChanged): hands off the idle-clear timer when leadership transfers.- Bounded post-join sync retry (
_ScheduleJoinSync): up to 3 attempts (3 s, then 9 s, then 15 s) issuingRequestSync; stops once an active session is adopted, the group is left, or no other PP users are present. _completedLootKeysruntime table tracks cleared/awarded/cancelled loot keys to suppress late re-posts.
Changed
- Reliable broadcast simplified: per-member whisper retry loop removed.
BroadcastCriticalnow broadcasts once and relies on theACKhash check to detect divergence — any mismatch schedules a singleSendFullSync._criticalAckSnapshotsentries auto-expire after 30 s. - Message priority dropped from
ALERTtoNORMALfor loot/session/sync traffic.LOOT_STATE_QUERY,RAID_SETTINGS, and the newSNAPSHOT_*messages remain atBULK. LOOT_AWARDpayload now carriesrosterVersionandrosterHash— receivers update score, advancerosterVersion, and verify the hash from a single message. SeparateROSTER_DELTAon award removed; gap detection requests a full sync.ROSTER_DELTArequires sequential version application; any gap (incoming != local + 1) triggersRequestSync.LOOT_CANCELpayload now includesguildKeyso the ACK hash compares against the same roster on every client.BroadcastSessionCreatepayload reduced to{name, startTime}— recipients reconstruct the session shell locally.HandleSyncRequestresponds using the responder's own active guild key (no longer filters by requester guild match) so a joining player with a stale_activeGuildKeyis not ignored by every officer.SendFullSync(guildKey, target): targeted whispers bypass the broadcast cooldown.HandleSyncFullonly auto-creates foreign guild records when the message is a whispered reply received within 15 s of our ownRequestSyncand the sender is currently in our group.HandleSyncFullends a local stale session when the sender authoritatively cleared theirs at a neweractiveSessionVersion.PP.Session:RecordItemAwardaccepts an optionalguildKeyparameter;HandleLootAwardpasses the payload'sguildKeyso receivers with a stale_activeGuildKeystill write into the correct session.- Default session names: when multiple sessions are created on the same day they auto-increment as
Session YYYY-MM-DD #2,#3, … HandleSessionCreaterebuilds the session shell from the trimmed payload and routes viaPP.Repo.Roster:SetActiveSessionID.
Fixed
- Whisper-only
SYNC_FULLandSNAPSHOT_REPLYno longer accepted from non-group senders or outside their request trust window — prevents arbitrary guild-key injection and snapshot-poisoning via unsolicited whispers. LOOT_CLEARvalidated as raid-leader-only; pending keys are marked completed before the local wipe so a delayedLOOT_POSTcannot re-introduce a cleared item.- Snapshot pop-up window released on
SESSION_DELETEso it cannot reference a deleted session.
[0.5.0] - 2026-04-22
Added
- Reliable broadcast (
BroadcastCritical): initial RAID/PARTY broadcast + per-member whisper retry for critical messages (LOOT_POST, LOOT_AWARD, LOOT_CANCEL, SESSION_CREATE, SESSION_CLOSE, SESSION_DELETE, ROSTER_DELTA, GROUP_SCORE). Retries 3× with 4s delay before giving up. - ACK message type: receivers echo back a roster hash so the sender can detect divergence and trigger a delta or full sync.
- Roster delta sync (
ROSTER_DELTA/BroadcastRosterDelta): sends only changed/removed entries instead of the full roster on every update. - Group score sync (
GROUP_SCORE/GROUP_SCORE_ACK): dedicated round-trip for boss-kill point awards with per-member acknowledgement. - Message priority system: LOOT, SESSION, and SYNC messages sent at ALERT priority; bulk sync at BULK priority.
- Handshake on group join: automatically requests a version check from all online members.
- Full sync throttle: additional full syncs are suppressed within a 10-second cooldown.
ComputeRosterHash: deterministic roster hash used to detect drift without exchanging the full payload./pp debugcommand: toggles sync debug output to chat (replaces/pp bagdebug)./pp minimapcommand: toggles minimap icon visibility.- Minimap visibility checkbox in the Settings tab.
ShowMinimapIcon()/HideMinimapIcon()methods with persistence across reloads.- Default session names auto-increment within a day (
Session YYYY-MM-DD,Session YYYY-MM-DD #2, …). _ppUsersruntime table: tracks which group members have the addon loaded.
Changed
- All slash-command handlers consolidated into
Commands/Commands.lua(was split acrossDevCommands.lua,RosterCommands.lua,SessionCommands.lua). SendFullSyncno longer accepts atargetparameter — full syncs always broadcast to the group.- Loot key format changed to
itemLink:timestamp:indexfor stable chronological sort across reloads. - Loot master window width increased to 850.
- Tooltip overlay frames reused instead of recreated on each draw.
Fixed
- Loot master window sort order: entries now sort chronologically by timestamp, with index as tiebreaker within the same second.
- Whisper reflection attack vector: the addon no longer echoes whisper-delivered messages back to the sender.
- Potential duplicate ACK keys replaced with a time-based GUID.
[0.4.0] - 2026-03-22
Added
- Minimap icon with LibDBIcon-1.0: left-click toggles main window, right-click opens loot master window
- Pending loot bars UI: visual progress bars for active loot postings
Fixed
- Leader change stale raid: session now correctly reactivates on rejoin after leader swap
- Sync gating to prevent unintentional guild entry creation
[0.3.2] - 2026-03-21
Changed
- Clarified
GetDatavsEnsureDataAPI inPP.Repo.Roster:EnsureDataauto-creates the guild entry if missing;GetDatareturns nil for absent entries
Fixed
- Added nil-guards after
GetData()calls in Sync.lua, LootService, SessionService, and main.lua to prevent crashes when guild data is absent
[0.3.1] - 2026-03-21
Changed
- Sync improvements for roster and session state propagation
- Session renamed to use more descriptive identifiers
Fixed
- Prevent auto-pass triggering when not in an active raid
- Scroll position preserved on UI redraw
[0.3.0] - 2026-03-21
Changed
- Refactored data access into Repository layer (PP.Repo.Roster, PP.Repo.Loot)
- Refactored business logic into Service layer (PP.Session, PP.Roster, PP.Loot)
- Session teardown consolidated into single PP.Session:End() path
- Pending trades now persist across UI reloads
Fixed
- Spurious client-side session ends on disconnect/reconnect (disconnect recovery window)
- LEADER_LEFT session end now deferred 5 seconds to survive leader promotion windows
- CheckActiveRaid moved to fire after world load so IsInGroup() is accurate on reload
- Auto-pass epic+ setting now included in full sync payload (resilient to race with loot rolls)
- Cancel and Award loot actions now gated by CanPostLoot() permission check
[0.2.2]
Fixed
- Session window reopening on UI redraw
- Sync improvements for roster version propagation
[0.2.1]
Added
- Initial guild roster and session sync via AceComm
- Loot response system (NEED / MINOR / TRANSMOG / PASS)
- Auto-trade window population for pending deliveries
[0.2.0]
Added
- Initial public release
- Guild-based loot distribution with score tracking
- Sandbox mode for in-game testing

