clang-format LoadZoneObjects

This commit is contained in:
Michael Cook (mackal) 2016-08-27 22:26:44 -04:00
parent aaa116d97c
commit 89183cf8b7

View File

@ -157,131 +157,129 @@ bool Zone::Bootup(uint32 iZoneID, uint32 iInstanceID, bool iStaticZone) {
} }
//this really loads the objects into entity_list //this really loads the objects into entity_list
bool Zone::LoadZoneObjects() { bool Zone::LoadZoneObjects()
{
std::string query = StringFormat("SELECT id, zoneid, xpos, ypos, zpos, heading, " std::string query =
"itemid, charges, objectname, type, icon, unknown08, " StringFormat("SELECT id, zoneid, xpos, ypos, zpos, heading, itemid, charges, objectname, type, icon, "
"unknown10, unknown20, unknown24, unknown76, size, tilt_x, " "unknown08, unknown10, unknown20, unknown24, unknown76, size, tilt_x, tilt_y, display_name "
"tilt_y, display_name FROM object " "FROM object WHERE zoneid = %i AND (version = %u OR version = -1)",
"WHERE zoneid = %i AND (version = %u OR version = -1)", zoneid, instanceversion);
zoneid, instanceversion); auto results = database.QueryDatabase(query);
auto results = database.QueryDatabase(query); if (!results.Success()) {
if (!results.Success()) { Log.Out(Logs::General, Logs::Error, "Error Loading Objects from DB: %s",
Log.Out(Logs::General, Logs::Error, "Error Loading Objects from DB: %s",results.ErrorMessage().c_str()); results.ErrorMessage().c_str());
return false; return false;
}
Log.Out(Logs::General, Logs::Status, "Loading Objects from DB...");
for (auto row = results.begin(); row != results.end(); ++row) {
if (atoi(row[9]) == 0)
{
// Type == 0 - Static Object
const char* shortname = database.GetZoneName(atoi(row[1]), false); // zoneid -> zone_shortname
if (!shortname)
continue;
Door d;
memset(&d, 0, sizeof(d));
strn0cpy(d.zone_name, shortname, sizeof(d.zone_name));
d.db_id = 1000000000 + atoi(row[0]); // Out of range of normal use for doors.id
d.door_id = -1; // Client doesn't care if these are all the same door_id
d.pos_x = atof(row[2]); // xpos
d.pos_y = atof(row[3]); // ypos
d.pos_z = atof(row[4]); // zpos
d.heading = atof(row[5]); // heading
strn0cpy(d.door_name, row[8], sizeof(d.door_name)); // objectname
// Strip trailing "_ACTORDEF" if present. Client won't accept it for doors.
int len = strlen(d.door_name);
if ((len > 9) && (memcmp(&d.door_name[len - 9], "_ACTORDEF", 10) == 0))
d.door_name[len - 9] = '\0';
memcpy(d.dest_zone, "NONE", 5);
if ((d.size = atoi(row[11])) == 0) // unknown08 = optional size percentage
d.size = 100;
switch (d.opentype = atoi(row[12])) // unknown10 = optional request_nonsolid (0 or 1 or experimental number)
{
case 0:
d.opentype = 31;
break;
case 1:
d.opentype = 9;
break;
}
d.incline = atoi(row[13]); // unknown20 = optional model incline value
d.client_version_mask = 0xFFFFFFFF; //We should load the mask from the zone.
auto door = new Doors(&d);
entity_list.AddDoor(door);
} }
Object_Struct data = {0}; Log.Out(Logs::General, Logs::Status, "Loading Objects from DB...");
uint32 id = 0; for (auto row = results.begin(); row != results.end(); ++row) {
uint32 icon = 0; if (atoi(row[9]) == 0) {
uint32 type = 0; // Type == 0 - Static Object
uint32 itemid = 0; const char *shortname = database.GetZoneName(atoi(row[1]), false); // zoneid -> zone_shortname
uint32 idx = 0;
int16 charges = 0;
id = (uint32)atoi(row[0]); if (!shortname)
data.zone_id = atoi(row[1]); continue;
data.x = atof(row[2]);
data.y = atof(row[3]); Door d;
data.z = atof(row[4]); memset(&d, 0, sizeof(d));
data.heading = atof(row[5]);
strn0cpy(d.zone_name, shortname, sizeof(d.zone_name));
d.db_id = 1000000000 + atoi(row[0]); // Out of range of normal use for doors.id
d.door_id = -1; // Client doesn't care if these are all the same door_id
d.pos_x = atof(row[2]); // xpos
d.pos_y = atof(row[3]); // ypos
d.pos_z = atof(row[4]); // zpos
d.heading = atof(row[5]); // heading
strn0cpy(d.door_name, row[8], sizeof(d.door_name)); // objectname
// Strip trailing "_ACTORDEF" if present. Client won't accept it for doors.
int len = strlen(d.door_name);
if ((len > 9) && (memcmp(&d.door_name[len - 9], "_ACTORDEF", 10) == 0))
d.door_name[len - 9] = '\0';
memcpy(d.dest_zone, "NONE", 5);
if ((d.size = atoi(row[11])) == 0) // unknown08 = optional size percentage
d.size = 100;
switch (d.opentype = atoi(row[12])) // unknown10 = optional request_nonsolid (0 or 1 or experimental number)
{
case 0:
d.opentype = 31;
break;
case 1:
d.opentype = 9;
break;
}
d.incline = atoi(row[13]); // unknown20 = optional model incline value
d.client_version_mask = 0xFFFFFFFF; // We should load the mask from the zone.
auto door = new Doors(&d);
entity_list.AddDoor(door);
}
Object_Struct data = {0};
uint32 id = 0;
uint32 icon = 0;
uint32 type = 0;
uint32 itemid = 0;
uint32 idx = 0;
int16 charges = 0;
id = (uint32)atoi(row[0]);
data.zone_id = atoi(row[1]);
data.x = atof(row[2]);
data.y = atof(row[3]);
data.z = atof(row[4]);
data.heading = atof(row[5]);
itemid = (uint32)atoi(row[6]); itemid = (uint32)atoi(row[6]);
charges = (int16)atoi(row[7]); charges = (int16)atoi(row[7]);
strcpy(data.object_name, row[8]); strcpy(data.object_name, row[8]);
type = (uint8)atoi(row[9]); type = (uint8)atoi(row[9]);
icon = (uint32)atoi(row[10]); icon = (uint32)atoi(row[10]);
data.object_type = type; data.object_type = type;
data.linked_list_addr[0] = 0; data.linked_list_addr[0] = 0;
data.linked_list_addr[1] = 0; data.linked_list_addr[1] = 0;
data.solidtype = (uint32)atoi(row[12]); data.solidtype = (uint32)atoi(row[12]);
data.unknown020 = (uint32)atoi(row[13]); data.unknown020 = (uint32)atoi(row[13]);
data.unknown024 = (uint32)atoi(row[14]); data.unknown024 = (uint32)atoi(row[14]);
data.unknown076 = (uint32)atoi(row[15]); data.unknown076 = (uint32)atoi(row[15]);
data.size = atof(row[16]); data.size = atof(row[16]);
data.tilt_x = atof(row[17]); data.tilt_x = atof(row[17]);
data.tilt_y = atof(row[18]); data.tilt_y = atof(row[18]);
data.unknown084 = 0; data.unknown084 = 0;
ItemInst* inst = nullptr; ItemInst *inst = nullptr;
//FatherNitwit: this dosent seem to work... // FatherNitwit: this dosent seem to work...
//tradeskill containers do not have an itemid of 0... at least what I am seeing // tradeskill containers do not have an itemid of 0... at least what I am seeing
if (itemid == 0) { if (itemid == 0) {
// Generic tradeskill container // Generic tradeskill container
inst = new ItemInst(ItemInstWorldContainer); inst = new ItemInst(ItemInstWorldContainer);
} } else {
else { // Groundspawn object
// Groundspawn object inst = database.CreateItem(itemid);
inst = database.CreateItem(itemid); }
}
//Father Nitwit's fix... not perfect... // Father Nitwit's fix... not perfect...
if(inst == nullptr && type != OT_DROPPEDITEM) { if (inst == nullptr && type != OT_DROPPEDITEM) {
inst = new ItemInst(ItemInstWorldContainer); inst = new ItemInst(ItemInstWorldContainer);
} }
// Load child objects if container // Load child objects if container
if (inst && inst->IsType(EQEmu::item::ItemClassBag)) { if (inst && inst->IsType(EQEmu::item::ItemClassBag)) {
database.LoadWorldContainer(id, inst); database.LoadWorldContainer(id, inst);
} }
auto object = new Object(id, type, icon, data, inst); auto object = new Object(id, type, icon, data, inst);
object->SetDisplayName(row[19]); object->SetDisplayName(row[19]);
entity_list.AddObject(object, false); entity_list.AddObject(object, false);
if (type == OT_DROPPEDITEM && itemid != 0) if (type == OT_DROPPEDITEM && itemid != 0)
entity_list.RemoveObject(object->GetID()); entity_list.RemoveObject(object->GetID());
safe_delete(inst); safe_delete(inst);
} }
return true; return true;
} }