diff options
Diffstat (limited to 'src/game/World.cpp')
| -rw-r--r-- | src/game/World.cpp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/src/game/World.cpp b/src/game/World.cpp index f20b3d61dc3..6ab59cd9fb5 100644 --- a/src/game/World.cpp +++ b/src/game/World.cpp @@ -1650,6 +1650,9 @@ void World::SetInitialWorldSettings() uint32 nextGameEvent = gameeventmgr.Initialize(); m_timers[WUPDATE_EVENTS].SetInterval(nextGameEvent); //depend on next event + sLog.outString("Loading World States..."); // must be loaded before battleground and outdoor PvP + LoadWorldStates(); + ///- Initialize Battlegrounds sLog.outString("Starting BattleGround System"); sBattleGroundMgr.CreateInitialBattleGrounds(); @@ -2588,3 +2591,49 @@ void World::UpdateAreaDependentAuras() itr->second->GetPlayer()->UpdateZoneDependentAuras(itr->second->GetPlayer()->GetZoneId()); } } + +void World::LoadWorldStates() +{ + QueryResult_AutoPtr result = CharacterDatabase.Query("SELECT entry, value FROM worldstates"); + + if (!result) + { + barGoLink bar(1); + bar.step(); + sLog.outString(); + sLog.outString(">> Loaded 0 world states."); + return; + } + + barGoLink bar(result->GetRowCount()); + uint32 counter = 0; + + do + { + Field *fields = result->Fetch(); + m_worldstates[fields[0].GetUInt32()] = fields[1].GetUInt64(); + bar.step(); + ++counter; + } + while (result->NextRow()); + + sLog.outString(); + sLog.outString( ">> Loaded %u world states.", counter); +} + +// Setting a worldstate will save it to DB +void World::setWorldState(uint32 index, uint64 value) +{ + WorldStatesMap::const_iterator it = m_worldstates.find(index); + if (it != m_worldstates.end()) + CharacterDatabase.PExecute("UPDATE worldstates SET value="UI64FMTD" where entry=%u", value, index); + else + CharacterDatabase.PExecute("INSERT INTO worldstates (entry, value) VALUES (%u,"UI64FMTD")", index, value); + m_worldstates[index] = value; +} + +uint64 World::getWorldState(uint32 index) const +{ + WorldStatesMap::const_iterator it = m_worldstates.find(index); + return it != m_worldstates.end() ? it->second : 0; +} |
