perf: eliminate per-frame heap allocs in M2 renderer; UI polish and report
Some checks are pending
Build / Build (arm64) (push) Waiting to run
Build / Build (x86-64) (push) Waiting to run
Build / Build (macOS arm64) (push) Waiting to run
Build / Build (windows-arm64) (push) Waiting to run
Build / Build (windows-x86-64) (push) Waiting to run
Security / CodeQL (C/C++) (push) Waiting to run
Security / Semgrep (push) Waiting to run
Security / Sanitizer Build (ASan/UBSan) (push) Waiting to run

M2 renderer: move 3 per-frame local containers to member variables:
- particleGroups_ (unordered_map): reuse bucket structure across frames
- ribbonDraws_ (vector): reuse draw call buffer
- shadowTexSetCache_ (unordered_map): reuse descriptor cache
Eliminates ~3 heap allocations per frame in particle/ribbon/shadow passes.

UI polish:
- Nameplate hover tooltip showing level, class (players), guild name
- Bag window titles show slot counts: "Backpack (12/16)"

Player report: CMSG_COMPLAIN packet builder and reportPlayer() method.
"Report Player" option in target frame right-click menu for other players.
Server response handler (SMSG_COMPLAIN_RESULT) was already implemented.
This commit is contained in:
Kelsi 2026-03-27 18:21:47 -07:00
parent dee90d2951
commit 2af3594ce8
8 changed files with 117 additions and 44 deletions

View file

@ -1908,6 +1908,19 @@ network::Packet DelIgnorePacket::build(uint64_t ignoreGuid) {
return packet;
}
network::Packet ComplainPacket::build(uint64_t targetGuid, const std::string& reason) {
network::Packet packet(wireOpcode(Opcode::CMSG_COMPLAIN));
packet.writeUInt8(1); // complaintType: 1 = spam
packet.writeUInt64(targetGuid);
packet.writeUInt32(0); // unk
packet.writeUInt32(0); // messageType
packet.writeUInt32(0); // channelId
packet.writeUInt32(static_cast<uint32_t>(time(nullptr))); // timestamp
packet.writeString(reason);
LOG_DEBUG("Built CMSG_COMPLAIN: target=0x", std::hex, targetGuid, std::dec, " reason=", reason);
return packet;
}
// ============================================================
// Logout Commands
// ============================================================