Added door properties, and more entitylist types

This commit is contained in:
Xackery 2018-03-14 11:30:58 -07:00
parent cb72ad4d0f
commit e0d4f9ecd1
2 changed files with 179 additions and 28 deletions

View File

@ -41,7 +41,7 @@ message Entity {
EntityType type = 3; //Type of entity
int32 hp = 4; //Mob: Current health
int32 level = 5; //Mob: Current level
Position position = 6; //Mob: Position
Position position = 6; //Mob, Door: Position
int32 race = 7; //Mob: Race
int32 class = 8; //Mob: Class
int32 max_hp = 9; //Mob: Maximum Hitpoints
@ -53,7 +53,7 @@ message Entity {
BodyType bodytype = 15; //Mob: Body Type
DeityType deity = 16; //Mob: Deity
uint32 npctype_id = 17; //Mob: When npc was spawned from db, this is it's entry for npctype
float size = 18; //Mob: size of mob
float size = 18; //Mob, Door: size of mob
float runspeed = 19; //Mob: runspeed
//int32 light = 20; //Mob: Light level
int32 texture = 21; //Mob: texture
@ -95,6 +95,31 @@ message Entity {
uint8 in_legtexture,
uint8 in_feettexture
*/
//DOOR
uint32 door_db_id = 100; //Door: databse ID of door
uint32 door_id = 101; //Door: Unique ID of door
//string door_zone_name = 102; //Door: zone name of door not needed?
string door_name = 103; //Door: name
int32 door_incline = 104; //Door: Incline
uint32 door_opentype = 105; //Door: Open type
uint32 door_guild_id = 106; //Door: Guild ID
uint32 door_lockpick = 107; //Door: Lockpick
uint32 door_keyitem = 108; //Door: Key item
uint32 door_nokeyring = 109; //Door: No key ring
uint32 door_trigger_door_id = 110; //Door: trigger door
uint32 door_trigger_type = 111; //Door: trigger type
uint32 door_param = 112; //Door: parameter
int32 door_invert_state = 113; //Door: invert state
bool door_disable_timer = 114; //Door: is timer disabled?
bool door_is_open = 115; //Door: is it currently open?
//string door_destination_zone = 116; //Door: destination zone TODO: not exposed
//int32 door_destination_instance_id = 117; //Door: destination instance TODO: not exposed
//Position door_destination_position = 118; //Door: destination position TODO: not exposed
uint32 door_is_ldon = 119; //Door: is it ldon?
uint32 door_client_version_mask = 120; //Door: client version mask
}
message Entities {

View File

@ -1,6 +1,9 @@
#include "entity.h"
#include "mob.h"
#include "client.h"
#include "doors.h"
#include "corpse.h"
#include "object.h"
#include "event_codes.h"
#include "nats.h"
#include "zone_config.h"
@ -318,70 +321,164 @@ void NatsManager::GetCommandMessage(eqproto::CommandMessage* message, const char
eqproto::Entities* entities = google::protobuf::Arena::CreateMessage<eqproto::Entities>(&the_arena);
if (message->params(0).compare("npc") == 0) {
auto npcs = entity_list.GetNPCList();
auto it = npcs.begin();
for (const auto &entry : npcs) {
auto ents = entity_list.GetNPCList();
auto it = ents.begin();
for (const auto &entry : ents) {
if (entry.second == nullptr)
continue;
auto npc = entry.second;
auto ent = entry.second;
auto entity = entities->add_entities();
EncodeEntity(npc, entity);
EncodeEntity(ent, entity);
}
if (!entities->SerializeToString(&entityPayload)) {
size_t size = entities->ByteSizeLong();
void *buffer = malloc(size);
if (!entities->SerializeToArray(buffer, size)) {
message->set_result("Failed to serialize entitiy result");
SendCommandMessage(message, reply);
return;
}
message->set_result("1");
message->set_payload(entityPayload.c_str());
message->set_payload(buffer, size);
SendCommandMessage(message, reply);
return;
}
else if (message->params(0).compare("client") == 0) {
auto clients = entity_list.GetClientList();
auto it = clients.begin();
for (const auto &entry : clients) {
auto ents = entity_list.GetClientList();
auto it = ents.begin();
for (const auto &entry : ents) {
if (entry.second == nullptr)
continue;
auto client = entry.second;
auto ent = entry.second;
auto entity = entities->add_entities();
//EncodeEntity(client, entity);
entity->set_id(client->GetID());
entity->set_name(client->GetName());
EncodeEntity(ent, entity);
}
if (!entities->SerializeToString(&entityPayload)) {
size_t size = entities->ByteSizeLong();
void *buffer = malloc(size);
if (!entities->SerializeToArray(buffer, size)) {
message->set_result("Failed to serialize entitiy result");
SendCommandMessage(message, reply);
return;
}
message->set_result("1");
message->set_payload(entityPayload.c_str());
message->set_payload(buffer, size);
SendCommandMessage(message, reply);
return;
}
else if (message->params(0).compare("mob") == 0) {
auto mobs = entity_list.GetMobList();
auto it = mobs.begin();
for (const auto &entry : mobs) {
auto ents = entity_list.GetMobList();
auto it = ents.begin();
for (const auto &entry : ents) {
if (entry.second == nullptr)
continue;
auto mob = entry.second;
auto ent = entry.second;
auto entity = entities->add_entities();
EncodeEntity(mob, entity);
EncodeEntity(ent, entity);
}
if (!entities->SerializeToString(&entityPayload)) {
size_t size = entities->ByteSizeLong();
void *buffer = malloc(size);
if (!entities->SerializeToArray(buffer, size)) {
message->set_result("Failed to serialize entitiy result");
SendCommandMessage(message, reply);
return;
}
message->set_result("1");
message->set_payload(entityPayload.c_str());
message->set_payload(buffer, size);
SendCommandMessage(message, reply);
return;
}
else if (message->params(0).compare("mercenary") == 0) {
auto ents = entity_list.GetMercList();
auto it = ents.begin();
for (const auto &entry : ents) {
if (entry.second == nullptr)
continue;
auto ent = entry.second;
auto entity = entities->add_entities();
EncodeEntity(ent, entity);
}
size_t size = entities->ByteSizeLong();
void *buffer = malloc(size);
if (!entities->SerializeToArray(buffer, size)) {
message->set_result("Failed to serialize entitiy result");
SendCommandMessage(message, reply);
return;
}
message->set_result("1");
message->set_payload(buffer, size);
SendCommandMessage(message, reply);
return;
}
else if (message->params(0).compare("corpse") == 0) {
auto ents = entity_list.GetCorpseList();
auto it = ents.begin();
for (const auto &entry : ents) {
if (entry.second == nullptr)
continue;
Corpse* ent = entry.second;
auto entity = entities->add_entities();
EncodeEntity(ent, entity);
}
size_t size = entities->ByteSizeLong();
void *buffer = malloc(size);
if (!entities->SerializeToArray(buffer, size)) {
message->set_result("Failed to serialize entitiy result");
SendCommandMessage(message, reply);
return;
}
message->set_result("1");
message->set_payload(buffer, size);
SendCommandMessage(message, reply);
return;
}
else if (message->params(0).compare("door") == 0) {
auto ents = entity_list.GetDoorsList();
auto it = ents.begin();
for (const auto &entry : ents) {
if (entry.second == nullptr)
continue;
Doors* ent = entry.second;
auto entity = entities->add_entities();
EncodeEntity(ent, entity);
}
size_t size = entities->ByteSizeLong();
void *buffer = malloc(size);
if (!entities->SerializeToArray(buffer, size)) {
message->set_result("Failed to serialize entitiy result");
SendCommandMessage(message, reply);
return;
}
message->set_result("1");
message->set_payload(buffer, size);
SendCommandMessage(message, reply);
return;
}
else if (message->params(0).compare("object") == 0) {
auto ents = entity_list.GetObjectList();
auto it = ents.begin();
for (const auto &entry : ents) {
if (entry.second == nullptr)
continue;
Object * ent = entry.second;
auto entity = entities->add_entities();
EncodeEntity(ent, entity);
}
size_t size = entities->ByteSizeLong();
void *buffer = malloc(size);
if (!entities->SerializeToArray(buffer, size)) {
message->set_result("Failed to serialize entitiy result");
SendCommandMessage(message, reply);
return;
}
message->set_result("1");
message->set_payload(buffer, size);
SendCommandMessage(message, reply);
return;
}
@ -683,6 +780,35 @@ void NatsManager::EncodeEntity(Entity * entity, eqproto::Entity * out)
if (entity->IsDoor()) {
out->set_type(eqproto::EntityType::Door);
Doors * door = entity->CastToDoors();
eqproto::Position* pos = google::protobuf::Arena::CreateMessage<eqproto::Position>(&the_arena);
auto door_pos = door->GetPosition();
pos->set_x(door_pos.x);
pos->set_y(door_pos.y);
pos->set_z(door_pos.z);
pos->set_h(door_pos.w);
out->set_allocated_position(pos);
out->set_door_db_id(door->GetDoorDBID());
out->set_door_id(door->GetDoorID());
out->set_door_name(door->GetName());
out->set_door_incline(door->GetIncline());
out->set_door_opentype(door->GetOpenType());
out->set_door_guild_id(door->GetGuildID());
out->set_door_lockpick(door->GetLockpick());
out->set_door_keyitem(door->GetKeyItem());
out->set_door_nokeyring(door->GetNoKeyring());
out->set_door_trigger_door_id(door->GetTriggerDoorID());
out->set_door_trigger_type(door->GetTriggerType());
out->set_door_param(door->GetDoorParam());
out->set_door_invert_state(door->GetInvertState());
out->set_door_disable_timer(door->GetDisableTimer());
out->set_door_is_open(door->IsDoorOpen());
//TODO: expose door destination properties
//out->set_door_destination_zone(door->)
out->set_door_is_ldon(door->IsLDoNDoor());
out->set_door_client_version_mask(door->GetClientVersionMask());
}