Added partial OP_NewZone support

This commit is contained in:
Xackery
2018-03-15 15:54:31 -07:00
parent c09ab507dd
commit a5f35bf32a
6 changed files with 107 additions and 10 deletions
+1 -1
View File
@@ -1657,7 +1657,7 @@ bool Client::Death(Mob* killerMob, int32 damage, uint16 spell, EQEmu::skills::Sk
d->damage = damage;
app.priority = 6;
entity_list.QueueClients(this, &app);
nats.OnDeathEvent(d);
/*
#2: figure out things that affect the player dying and mark them dead
*/
+1 -1
View File
@@ -3875,7 +3875,7 @@ void Client::Sacrifice(Client *caster)
d->damage = 0;
app.priority = 6;
entity_list.QueueClients(this, &app);
nats.OnDeathEvent(d);
BuffFadeAll();
UnmemSpellAll();
Group *g = GetGroup();
+1 -1
View File
@@ -1226,7 +1226,7 @@ void Client::Handle_Connect_OP_ZoneComplete(const EQApplicationPacket *app)
auto outapp = new EQApplicationPacket(OP_0x0347, 0);
QueuePacket(outapp);
safe_delete(outapp);
nats.OnZoneComplete(GetID());
nats.OnZoneCompleteEvent(GetID());
return;
}
+58 -1
View File
@@ -1304,7 +1304,7 @@ void NatsManager::OnAlternateAdvancementStats(uint32 entity_id, AltAdvStats_Stru
}
void NatsManager::OnZoneComplete(uint32 entity_id) {
void NatsManager::OnZoneCompleteEvent(uint32 entity_id) {
if (!connect())
return;
if (entity_id == 0)
@@ -1370,4 +1370,61 @@ void NatsManager::OnAlternateAdvancementActionRequest(uint32 entity_id, AA_Actio
return;
}
SendEvent(op, entity_id, event_buffer, event_size);
}
void NatsManager::OnNewZoneEvent(uint32 entity_id, NewZone_Struct * nz) {
if (!connect())
return;
if (entity_id == 0)
return;
if (!isEntityEventAllEnabled && !isEntitySubscribed(entity_id))
return;
auto op = eqproto::OP_NewZone;
eqproto::NewZoneEvent* event = google::protobuf::Arena::CreateMessage<eqproto::NewZoneEvent>(&the_arena);
event->set_char_name(nz->char_name);
event->set_zone_short_name(nz->zone_short_name);
event->set_zone_long_name(nz->zone_long_name);
event->set_ztype(nz->ztype);
event->set_fog_red(*nz->fog_red);
event->set_fog_green(*nz->fog_green);
event->set_fog_blue(*nz->fog_blue);
event->set_unknown323(nz->unknown323);
event->set_fog_minclip(*nz->fog_minclip);
event->set_fog_maxclip(*nz->fog_maxclip);
event->set_gravity(nz->gravity);
event->set_time_type(nz->time_type);
event->set_rain_chance(*nz->rain_chance);
event->set_rain_duration(*nz->rain_duration);
event->set_snow_chance(*nz->snow_chance);
event->set_snow_duration(*nz->snow_duration);
event->set_unknown360(*nz->unknown360);
event->set_sky(nz->sky);
event->set_unknown331(*nz->unknown331);
event->set_zone_exp_multiplier(nz->zone_exp_multiplier);
event->set_safe_y(nz->safe_y);
event->set_safe_x(nz->safe_x);
event->set_safe_z(nz->safe_z);
event->set_max_z(nz->max_z);
event->set_underworld(nz->underworld);
event->set_minclip(nz->minclip);
event->set_maxclip(nz->maxclip);
event->set_unknown_end(*nz->unknown_end);
event->set_zone_short_name2(nz->zone_short_name2);
event->set_unknown672(nz->unknown672);
event->set_zone_id(nz->zone_id);
event->set_zone_instance(nz->zone_instance);
event->set_unknown688(nz->unknown688);
event->set_unknown692(*nz->unknown692);
event->set_fog_density(nz->fog_density);
event->set_suspend_buffs(nz->SuspendBuffs);
size_t event_size = event->ByteSizeLong();
void *event_buffer = malloc(event_size);
if (!event->SerializeToArray(event_buffer, event_size)) {
Log(Logs::General, Logs::NATS, "zone.%s.%d.entity.%d.event.out: (OP: %d) failed to serialize message", subscribedZoneName.c_str(), subscribedZoneInstance, entity_id, op);
return;
}
SendEvent(op, entity_id, event_buffer, event_size);
}
+2 -2
View File
@@ -45,8 +45,8 @@ public:
void OnSpawnEvent(const EmuOpcode op, uint32 entity_id, Spawn_Struct * spawn);
void OnSpecialMessageEvent(uint32 entity_id, SpecialMesg_Struct *sm);
void OnWearChangeEvent(uint32 entity_id, WearChange_Struct * wc);
void OnZoneComplete(uint32 entity_id);
void OnZoneCompleteEvent(uint32 entity_id);
void OnNewZoneEvent(uint32 entity_id, NewZone_Struct * nz);
protected:
bool connect();
Timer nats_timer;