mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-28 17:11:29 +00:00
Added partial OP_NewZone support
This commit is contained in:
parent
c09ab507dd
commit
a5f35bf32a
@ -231,6 +231,46 @@ message SpecialMessageEvent {
|
||||
string message = 6; // What is being said?
|
||||
}
|
||||
|
||||
//OP_NewZone
|
||||
message NewZoneEvent {
|
||||
string char_name = 1; // Character Name
|
||||
string zone_short_name = 2; // Zone Short Name
|
||||
string zone_long_name = 3; // Zone Long Name
|
||||
uint32 ztype = 4; // Zone type (usually FF)
|
||||
uint32 fog_red = 5; // Zone fog (red)
|
||||
uint32 fog_green = 6; // Zone fog (green)
|
||||
uint32 fog_blue = 7; // Zone fog (blue)
|
||||
uint32 unknown323 = 8;
|
||||
float fog_minclip = 9;
|
||||
float fog_maxclip = 10;
|
||||
float gravity = 11;
|
||||
uint32 time_type = 12;
|
||||
uint32 rain_chance = 13;
|
||||
uint32 rain_duration = 14;
|
||||
uint32 snow_chance = 15;
|
||||
uint32 snow_duration = 16;
|
||||
uint32 unknown360 = 17;
|
||||
uint32 sky = 18; // Sky Type
|
||||
uint32 unknown331 = 19; // ***Placeholder
|
||||
float zone_exp_multiplier = 20; // Experience Multiplier
|
||||
float safe_y = 21; // Zone Safe Y
|
||||
float safe_x = 22; // Zone Safe X
|
||||
float safe_z = 23; // Zone Safe Z
|
||||
float max_z = 24; // Guessed
|
||||
float underworld = 25; // Underworld, min z (Not Sure?)
|
||||
float minclip = 26; // Minimum View Distance
|
||||
float maxclip = 27; // Maximum View DIstance
|
||||
uint32 unknown_end = 28; // ***Placeholder
|
||||
string zone_short_name2 = 29;
|
||||
string unknown672 = 30;
|
||||
uint32 zone_id = 31;
|
||||
uint32 zone_instance = 32;
|
||||
uint32 unknown688 = 33;
|
||||
uint32 unknown692 = 34;
|
||||
float fog_density = 35;
|
||||
uint32 suspend_buffs = 36;
|
||||
}
|
||||
|
||||
//OP_WearChange
|
||||
message WearChangeEvent {
|
||||
uint32 spawn_id = 1;
|
||||
@ -702,7 +742,7 @@ enum OpCode {
|
||||
OP_ChannelMessage = 74;
|
||||
OP_CharacterCreate = 75;
|
||||
OP_CharacterCreateRequest = 76;
|
||||
OP_CharInventory = 77;
|
||||
OP_CharInventory = 77; //uses outbuffer, may not be worth working with
|
||||
OP_Charm = 78;
|
||||
OP_ChatMessage = 79; //used by lua
|
||||
OP_ClearAA = 80;
|
||||
@ -739,8 +779,8 @@ enum OpCode {
|
||||
OP_CrystalCreate = 111;
|
||||
OP_CrystalReclaim = 112;
|
||||
OP_CustomTitles = 113;
|
||||
OP_Damage = 114;
|
||||
OP_Death = 115;
|
||||
OP_Damage = 114; //supported
|
||||
OP_Death = 115; //supported
|
||||
OP_DelegateAbility = 116;
|
||||
OP_DeleteCharacter = 117;
|
||||
OP_DeleteCharge = 118;
|
||||
@ -971,7 +1011,7 @@ enum OpCode {
|
||||
OP_MultiLineMsg = 343;
|
||||
OP_NewSpawn = 344; //supported
|
||||
OP_NewTitlesAvailable = 345;
|
||||
OP_NewZone = 346;
|
||||
OP_NewZone = 346; //supported
|
||||
OP_OnLevelMessage = 347;
|
||||
OP_OpenContainer = 348;
|
||||
OP_OpenDiscordMerchant = 349;
|
||||
|
||||
@ -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
|
||||
*/
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user