diff options
author | megamage <none@none> | 2009-05-11 03:17:13 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-05-11 03:17:13 -0500 |
commit | f9f5d078fda410c0551f1376197094bc4a7bfe08 (patch) | |
tree | 3abb3147c83938b1aee627add7b4f97f0af37e8b /src/game/InstanceData.cpp | |
parent | 4fef015112f7bc5fd114c116a384515859b95e9d (diff) |
*Update instance script functions.
--HG--
branch : trunk
Diffstat (limited to 'src/game/InstanceData.cpp')
-rw-r--r-- | src/game/InstanceData.cpp | 41 |
1 files changed, 35 insertions, 6 deletions
diff --git a/src/game/InstanceData.cpp b/src/game/InstanceData.cpp index 80e728f7b3c..96c10f7b85c 100644 --- a/src/game/InstanceData.cpp +++ b/src/game/InstanceData.cpp @@ -26,8 +26,9 @@ void InstanceData::SaveToDB() { - if(!Save()) return; - std::string data = Save(); + std::string data = GetSaveData(); + if(data.empty()) + return; CharacterDatabase.escape_string(data); CharacterDatabase.PExecute("UPDATE instance SET data = '%s' WHERE id = '%d'", data.c_str(), instance->GetInstanceId()); } @@ -124,13 +125,41 @@ void InstanceData::SetBossState(uint32 id, EncounterState state) if(id < bosses.size()) { BossInfo *bossInfo = &bosses[id]; - if(bossInfo->state == state) - return; - - bossInfo->state = state; + if(bossInfo->state == TO_BE_DECIDED) // loading + bossInfo->state = state; + else + { + if(bossInfo->state == state) + return; + bossInfo->state = state; + SaveToDB(); + } + for(uint32 type = 0; type < MAX_DOOR_TYPES; ++type) for(DoorSet::iterator i = bossInfo->door[type].begin(); i != bossInfo->door[type].end(); ++i) UpdateDoorState(*i); } } +std::string InstanceData::LoadBossState(const char * data) +{ + if(!data) return NULL; + std::istringstream loadStream(data); + uint32 buff; + uint32 bossId = 0; + for(std::vector<BossInfo>::iterator i = bosses.begin(); i != bosses.end(); ++i, ++bossId) + { + loadStream >> buff; + if(buff < TO_BE_DECIDED) + SetBossState(bossId, (EncounterState)buff); + } + return loadStream.str(); +} + +std::string InstanceData::GetBossSaveData() +{ + std::ostringstream saveStream; + for(std::vector<BossInfo>::iterator i = bosses.begin(); i != bosses.end(); ++i) + saveStream << (uint32)i->state << " "; + return saveStream.str(); +} |