diff --git a/zone/doors.cpp b/zone/doors.cpp index b977ce066..550b3964a 100644 --- a/zone/doors.cpp +++ b/zone/doors.cpp @@ -802,20 +802,75 @@ void Doors::CreateDatabaseEntry() return; } - content_db.InsertDoor( - GetDoorDBID(), - GetDoorID(), - GetDoorName(), - m_position, - GetOpenType(), - static_cast(GetGuildID()), - GetLockpick(), - GetKeyItem(), - static_cast(GetDoorParam()), - static_cast(GetInvertState()), - GetIncline(), - GetSize() + const auto& l = DoorsRepository::GetWhere( + content_db, + fmt::format( + "zone = '{}' AND doorid = {}", + zone->GetShortName(), + GetDoorID() + ) ); + if (!l.empty()) { + auto e = l[0]; + + e.name = GetDoorName(); + e.pos_x = GetX(); + e.pos_y = GetY(); + e.pos_z = GetZ(); + e.heading = GetHeading(); + e.opentype = GetOpenType(); + e.guild = static_cast(GetGuildID()); + e.lockpick = GetLockpick(); + e.keyitem = GetKeyItem(); + e.door_param = static_cast(GetDoorParam()); + e.invert_state = static_cast(GetInvertState()); + e.incline = GetIncline(); + e.size = GetSize(); + + auto updated = DoorsRepository::UpdateOne(content_db, e); + if (!updated) { + LogError( + "Failed to update door in Zone [{}] Version [{}] Database ID [{}] ID [{}]", + zone->GetShortName(), + zone->GetInstanceVersion(), + GetDoorDBID(), + GetDoorID() + ); + } + + return; + } + + auto e = DoorsRepository::NewEntity(); + + e.id = GetDoorDBID(); + e.doorid = GetDoorID(); + e.zone = zone->GetShortName(); + e.version = zone->GetInstanceVersion(); + e.name = GetDoorName(); + e.pos_x = GetX(); + e.pos_y = GetY(); + e.pos_z = GetZ(); + e.heading = GetHeading(); + e.opentype = GetOpenType(); + e.guild = static_cast(GetGuildID()); + e.lockpick = GetLockpick(); + e.keyitem = GetKeyItem(); + e.door_param = static_cast(GetDoorParam()); + e.invert_state = static_cast(GetInvertState()); + e.incline = GetIncline(); + e.size = GetSize(); + + const auto& n = DoorsRepository::InsertOne(content_db, e); + if (!n.id) { + LogError( + "Failed to create door in Zone [{}] Version [{}] Database ID [{}] ID [{}]", + zone->GetShortName(), + zone->GetInstanceVersion(), + GetDoorDBID(), + GetDoorID() + ); + } } float Doors::GetX() @@ -832,3 +887,8 @@ float Doors::GetZ() { return m_position.z; } + +float Doors::GetHeading() +{ + return m_position.w; +} diff --git a/zone/doors.h b/zone/doors.h index 6ee15f46b..1c26df3c9 100644 --- a/zone/doors.h +++ b/zone/doors.h @@ -65,6 +65,7 @@ public: float GetX(); float GetY(); float GetZ(); + float GetHeading(); private: diff --git a/zone/gm_commands/door_manipulation.cpp b/zone/gm_commands/door_manipulation.cpp index c0e7c48ba..a8660fa8f 100644 --- a/zone/gm_commands/door_manipulation.cpp +++ b/zone/gm_commands/door_manipulation.cpp @@ -187,7 +187,7 @@ void DoorManipulation::CommandHandler(Client *c, const Seperator *sep) std::vector set_size_options_negative; std::vector xyz_values = { - ".1", "1", "5", "10", "25", "50", "100" + "0.1", "1", "5", "10", "25", "50", "100" }; // build positive options x/y/z diff --git a/zone/zonedb.cpp b/zone/zonedb.cpp index b81eef4c5..14d664fa7 100755 --- a/zone/zonedb.cpp +++ b/zone/zonedb.cpp @@ -3075,53 +3075,6 @@ void ZoneDatabase::QGlobalPurge() database.QueryDatabase(query); } -void ZoneDatabase::InsertDoor( - uint32 database_id, - uint8 id, - std::string name, - const glm::vec4 &position, - uint8 open_type, - uint16 guild_id, - uint32 lockpick, - uint32 key_item_id, - uint8 door_param, - uint8 invert, - int incline, - uint16 size, - bool disable_timer -) { - auto e = DoorsRepository::NewEntity(); - - e.id = database_id; - e.doorid = id; - e.zone = zone->GetShortName(); - e.version = zone->GetInstanceVersion(); - e.name = name; - e.pos_x = position.x; - e.pos_y = position.y; - e.pos_z = position.z; - e.opentype = open_type; - e.guild = guild_id; - e.lockpick = lockpick; - e.keyitem = key_item_id; - e.disable_timer = static_cast(disable_timer); - e.door_param = door_param; - e.invert_state = invert; - e.incline = incline; - e.size = size; - - const auto& n = DoorsRepository::InsertOne(*this, e); - if (!n.id) { - LogError( - "Failed to create door in Zone [{}] Version [{}] Database ID [{}] ID [{}]", - zone->GetShortName(), - zone->GetInstanceVersion(), - database_id, - id - ); - } -} - void ZoneDatabase::LoadAltCurrencyValues(uint32 char_id, std::map ¤cy) { std::string query = StringFormat("SELECT currency_id, amount " diff --git a/zone/zonedb.h b/zone/zonedb.h index 3903bd3a8..7d612fabf 100644 --- a/zone/zonedb.h +++ b/zone/zonedb.h @@ -570,21 +570,6 @@ public: std::vector LoadDoors(const std::string& zone_name, int16 version); uint32 GetDoorsCountPlusOne(); int GetDoorsDBCountPlusOne(std::string zone_short_name, int16 version); - void InsertDoor( - uint32 database_id, - uint8 id, - std::string name, - const glm::vec4 &position, - uint8 open_type, - uint16 guild_id, - uint32 ockpick, - uint32 key_item_id, - uint8 door_param, - uint8 invert, - int incline, - uint16 size, - bool disable_timer = false - ); /* Blocked Spells */ int32 GetBlockedSpellsCount(uint32 zoneid);