[Repositories] Use repositories to load doors (#1572)

Remove Door struct that was being used to map db columns
This commit is contained in:
hg
2021-10-01 23:09:40 -04:00
committed by GitHub
parent 3883adcefc
commit 00a22ca12e
6 changed files with 80 additions and 202 deletions
+22 -29
View File
@@ -197,24 +197,27 @@ bool Zone::LoadZoneObjects()
if (!shortname)
continue;
Door d;
memset(&d, 0, sizeof(d));
// todo: clean up duplicate code with command_object
auto d = DoorsRepository::NewEntity();
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.zone = shortname;
d.id = 1000000000 + atoi(row[0]); // Out of range of normal use for doors.id
d.doorid = -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';
d.name = row[8]; // objectname
memcpy(d.dest_zone, "NONE", 5);
// Strip trailing "_ACTORDEF" if present. Client won't accept it for doors.
int pos = d.name.size() - strlen("_ACTORDEF");
if (pos > 0 && d.name.compare(pos, std::string::npos, "_ACTORDEF") == 0)
{
d.name.erase(pos);
}
d.dest_zone = "NONE";
if ((d.size = atoi(row[11])) == 0) // unknown08 = optional size percentage
d.size = 100;
@@ -232,7 +235,7 @@ bool Zone::LoadZoneObjects()
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);
auto door = new Doors(d);
entity_list.AddDoor(door);
}
@@ -911,29 +914,19 @@ void Zone::LoadZoneDoors(const char* zone, int16 version)
{
LogInfo("Loading doors for [{}] ", zone);
uint32 maxid;
int32 count = content_db.GetDoorsCount(&maxid, zone, version);
if(count < 1) {
auto door_entries = content_db.LoadDoors(zone, version);
if (door_entries.empty())
{
LogInfo("No doors loaded");
return;
}
auto dlist = new Door[count];
if(!content_db.LoadDoors(count, dlist, zone, version)) {
LogError("Failed to load doors");
delete[] dlist;
return;
}
int r;
Door *d = dlist;
for(r = 0; r < count; r++, d++) {
auto newdoor = new Doors(d);
for (const auto& entry : door_entries)
{
auto newdoor = new Doors(entry);
entity_list.AddDoor(newdoor);
Log(Logs::Detail, Logs::Doors, "Door Add to Entity List, index: %u db id: %u, door_id %u", r, dlist[r].db_id, dlist[r].door_id);
LogDoorsDetail("Door added to entity list, db id: [{}], door_id: [{}]", entry.id, entry.doorid);
}
delete[] dlist;
}
Zone::Zone(uint32 in_zoneid, uint32 in_instanceid, const char* in_short_name)