diff options
| author | ariel- <ariel-@users.noreply.github.com> | 2017-04-11 23:57:29 -0300 |
|---|---|---|
| committer | ariel- <ariel-@users.noreply.github.com> | 2017-04-12 02:19:55 -0300 |
| commit | 4c593f12caa162c1bfb831bdbed934bb39155ddb (patch) | |
| tree | 57dfc52e6a0f38e2f9a1a382ea8722d6764e5505 /src/server/game/Entities | |
| parent | e32a4f26aaa51fba2647aeb8ef751dd398bc09d8 (diff) | |
Core/Instance: stop updating the instance resettimes based on creature respawns
- Rather update normal instance reset time to 2 hours after last creature kill
- This fixes yet another integer overflow due to the possibility of having time_t max showing up
- Also change respawntime and resettime fields to bigint on respawn/instance related tables
- Start using prepared statements on the InstanceSaveMgr
Diffstat (limited to 'src/server/game/Entities')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 5 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 2 |
2 files changed, 4 insertions, 3 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 6f2ba8dcdd8..5db36e22530 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -18721,7 +18721,8 @@ void Player::_LoadBoundInstances(PreparedQueryResult result) Group* group = GetGroup(); - //QueryResult* result = CharacterDatabase.PQuery("SELECT id, permanent, map, difficulty, resettime FROM character_instance LEFT JOIN instance ON instance = id WHERE guid = '%u'", GUID_LOPART(m_guid)); + // 0 1 2 3 4 5 + // SELECT id, permanent, map, difficulty, extendState, resettime FROM character_instance LEFT JOIN instance ON instance = id WHERE guid = ? if (result) { do @@ -18734,7 +18735,7 @@ void Player::_LoadBoundInstances(PreparedQueryResult result) uint8 difficulty = fields[3].GetUInt8(); BindExtensionState extendState = BindExtensionState(fields[4].GetUInt8()); - time_t resetTime = time_t(fields[5].GetUInt32()); + time_t resetTime = time_t(fields[5].GetUInt64()); // the resettime for normal instances is only saved when the InstanceSave is unloaded // so the value read from the DB may be wrong here but only if the InstanceSave is loaded // and in that case it is not used diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 6646254bc60..ffffdc1ea01 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -12132,7 +12132,7 @@ void Unit::Kill(Unit* victim, bool durabilityLoss) { // the reset time is set but not added to the scheduler // until the players leave the instance - time_t resettime = creature->GetRespawnTimeEx() + 2 * HOUR; + time_t resettime = GameTime::GetGameTime() + 2 * HOUR; if (InstanceSave* save = sInstanceSaveMgr->GetInstanceSave(creature->GetInstanceId())) if (save->GetResetTime() < resettime) save->SetResetTime(resettime); |
