[Feature] Add Parcel notification for online players when using the Quest API (#4418)

* Add parcel notification for online players when using the quest api for send_parcel

* Compile fix

fix for compile issues
This commit is contained in:
Mitch Freeman 2024-07-22 06:57:42 -03:00 committed by GitHub
parent 5ef4612249
commit a23ac4628f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 39 additions and 2 deletions

View File

@ -34,11 +34,14 @@
#include "questmgr.h"
#include "zone.h"
#include "data_bucket.h"
#include "../common/events/player_event_logs.h"
#include "worldserver.h"
#include <cctype>
extern Zone *zone;
extern QueryServ *QServ;
extern WorldServer worldserver;
#ifdef EMBPERL_XS_CLASSES
@ -5946,7 +5949,22 @@ bool Perl__send_parcel(perl::reference table_ref)
e.note = note;
e.sent_date = std::time(nullptr);
return CharacterParcelsRepository::InsertOne(database, e).id;
auto out = CharacterParcelsRepository::InsertOne(database, e).id;
if (out) {
Parcel_Struct ps{};
ps.item_slot = e.slot_id;
strn0cpy(ps.send_to, name.c_str(), sizeof(ps.send_to));
std::unique_ptr<ServerPacket> server_packet(new ServerPacket(ServerOP_ParcelDelivery, sizeof(Parcel_Struct)));
auto data = (Parcel_Struct *) server_packet->pBuffer;
data->item_slot = ps.item_slot;
strn0cpy(data->send_to, ps.send_to, sizeof(data->send_to));
worldserver.SendPacket(server_packet.get());
}
return out;
}
void perl_register_quest()

View File

@ -26,6 +26,8 @@
#include "data_bucket.h"
#include "expedition.h"
#include "dialogue_window.h"
#include "../common/events/player_event_logs.h"
#include "worldserver.h"
struct Events { };
struct Factions { };
@ -57,6 +59,8 @@ extern std::map<std::string, Encounter *> lua_encounters;
extern void MapOpcodes();
extern void ClearMappedOpcode(EmuOpcode op);
extern WorldServer worldserver;
void unregister_event(std::string package_name, std::string name, int evt);
void load_encounter(std::string name) {
@ -5577,7 +5581,22 @@ bool lua_send_parcel(luabind::object lua_table)
e.note = note;
e.sent_date = std::time(nullptr);
return CharacterParcelsRepository::InsertOne(database, e).id;
auto out = CharacterParcelsRepository::InsertOne(database, e).id;
if (out) {
Parcel_Struct ps{};
ps.item_slot = e.slot_id;
strn0cpy(ps.send_to, name.c_str(), sizeof(ps.send_to));
std::unique_ptr<ServerPacket> server_packet(new ServerPacket(ServerOP_ParcelDelivery, sizeof(Parcel_Struct)));
auto data = (Parcel_Struct *) server_packet->pBuffer;
data->item_slot = ps.item_slot;
strn0cpy(data->send_to, ps.send_to, sizeof(data->send_to));
worldserver.SendPacket(server_packet.get());
}
return out;
}
uint32 lua_get_zone_uptime()