Added MessageType and SpecialMessage support

This commit is contained in:
Xackery
2018-03-13 17:39:44 -07:00
parent 6532a81b80
commit 98f4e570e7
7 changed files with 169 additions and 18 deletions
+5 -3
View File
@@ -54,7 +54,9 @@ extern volatile bool RunLoops;
#include "guild_mgr.h"
#include "quest_parser_collection.h"
#include "queryserv.h"
#include "nats_manager.h"
extern NatsManager nats;
extern QueryServ* QServ;
extern EntityList entity_list;
extern Zone* zone;
@@ -1270,7 +1272,7 @@ void Client::Message(uint32 type, const char* message, ...) {
sm->header[2] = 0x00;
sm->msg_type = type;
memcpy(sm->message, buffer, len+1);
nats.OnSpecialMessageEvent(GetID(), sm);
FastQueuePacket(&app);
safe_delete_array(buffer);
@@ -1301,7 +1303,7 @@ void Client::FilteredMessage(Mob *sender, uint32 type, eqFilterType filter, cons
sm->header[2] = 0x00;
sm->msg_type = type;
memcpy(sm->message, buffer, len + 1);
nats.OnSpecialMessageEvent(GetID(), sm);
FastQueuePacket(&app);
safe_delete_array(buffer);
@@ -1341,7 +1343,7 @@ void Client::QuestJournalledMessage(const char *npcname, const char* message) {
dest = dest + strlen(OutNPCName) + 13;
memcpy(dest, OutMessage, strlen(OutMessage) + 1);
nats.OnSpecialMessageEvent(GetID(), sm);
QueuePacket(app);
safe_delete(app);
+31 -4
View File
@@ -137,9 +137,9 @@ void NatsManager::GetChannelMessage(eqproto::ChannelMessage* message, const char
}
if (message->distance() > 0)
entity_list.MessageClose(mob, message->skip_sender(), message->distance(), message->chan_num(), message->message().c_str());
entity_list.MessageClose(mob, message->skip_sender(), message->distance(), message->number(), message->message().c_str());
else
mob->Message(message->chan_num(), message->message().c_str());
mob->Message(message->number(), message->message().c_str());
message->set_result("1");
SendChannelMessage(message, reply);
@@ -668,8 +668,8 @@ void NatsManager::OnChannelMessageEvent(uint32 entity_id, ChannelMessage_Struct*
event->set_target_name(cm->targetname);
event->set_sender(cm->sender);
event->set_language(cm->language);
event->set_chan_num(cm->chan_num);
event->set_language(cm->language);
event->set_number((eqproto::MessageType)cm->chan_num);
event->set_cm_unknown4(*cm->cm_unknown4);
event->set_skill_in_language(cm->skill_in_language);
event->set_message(cm->message);
@@ -681,6 +681,33 @@ void NatsManager::OnChannelMessageEvent(uint32 entity_id, ChannelMessage_Struct*
}
void NatsManager::OnSpecialMessageEvent(uint32 entity_id, SpecialMesg_Struct* sm) {
if (!connect())
return;
if (entity_id == 0)
return;
if (!isEntityEventAllEnabled && !isEntitySubscribed(entity_id))
return;
auto op = eqproto::OP_SpecialMesg;
std::string pubMessage;
eqproto::SpecialMessageEvent* event = google::protobuf::Arena::CreateMessage<eqproto::SpecialMessageEvent>(&the_arena);
event->set_header(sm->header);
event->set_number(static_cast<eqproto::MessageType>(sm->msg_type));
event->set_target_spawn_id(sm->target_spawn_id);
event->set_sayer(sm->sayer);
event->set_unknown12(*sm->unknown12);
event->set_message(sm->message);
if (!event->SerializeToString(&pubMessage)) {
Log(Logs::General, Logs::NATS, "zone.%s.%d.entity.%d.event.out: (OP: %d) failed to serialize message to string", subscribedZoneName.c_str(), subscribedZoneInstance, entity_id, op);
return;
}
SendEvent(op, entity_id, pubMessage);
}
void NatsManager::OnEntityEvent(const EmuOpcode op, uint32 entity_id, uint32 target_id) {
if (!connect())
return;
+1
View File
@@ -32,6 +32,7 @@ public:
void SendEvent(eqproto::OpCode op, uint32 entity_id, std::string pubMessage);
void OnChannelMessageEvent(uint32 entity_id, ChannelMessage_Struct * cm);
void OnSpecialMessageEvent(uint32 entity_id, SpecialMesg_Struct *sm);
void OnEntityEvent(const EmuOpcode op, uint32 entity_id, uint32 target_id);
void OnSpawnEvent(const EmuOpcode op, uint32 entity_id, Spawn_Struct * spawn);
void OnWearChangeEvent(uint32 entity_id, WearChange_Struct * wc);