feat(mail): notify online recipients of new mail on any world

Mail sent to someone who is not in the sender's world (system mail with
no address, and all player-to-player mail) now reaches them: the world
sends a MailNotify (Chat::MAIL, unused until now) to the chat server,
which passes it to the world the receiver is in, and that world sends
the client its unread count with a NewMail NotificationResponse.
Receivers in the same world are told directly. Player-to-player mail
did not notify the receiver at all before.

Replaces the TODO in Mail::SendMail.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Aaron Kimbrell
2026-09-27 08:38:39 -05:00
parent 71ecd3737c
commit c269affddf
7 changed files with 78 additions and 1 deletions

View File

@@ -210,6 +210,13 @@ namespace Mail {
void HandleMail(RakNet::BitStream& inStream, const SystemAddress& sysAddr, Entity* player);
// Tells the receiver about their unread mail if they are a player in this world. Returns false if they are not.
bool NotifyNewMailHere(LWOOBJID receiver);
// Tells the receiver about their new mail wherever they are online: in this world directly, otherwise through the
// chat server to the world they are in.
void NotifyNewMail(LWOOBJID receiver);
void SendMail(
const Entity* recipient,
const std::string& subject,