diff --git a/zone/embparser_api.cpp b/zone/embparser_api.cpp index 84e9831fc..9d6618360 100644 --- a/zone/embparser_api.cpp +++ b/zone/embparser_api.cpp @@ -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 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 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() diff --git a/zone/lua_general.cpp b/zone/lua_general.cpp index 91aadbc39..270a13a0b 100644 --- a/zone/lua_general.cpp +++ b/zone/lua_general.cpp @@ -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 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 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()