aboutsummaryrefslogtreecommitdiff
path: root/src/game/InstanceData.cpp
diff options
context:
space:
mode:
authormegamage <none@none>2009-05-11 03:17:13 -0500
committermegamage <none@none>2009-05-11 03:17:13 -0500
commitf9f5d078fda410c0551f1376197094bc4a7bfe08 (patch)
tree3abb3147c83938b1aee627add7b4f97f0af37e8b /src/game/InstanceData.cpp
parent4fef015112f7bc5fd114c116a384515859b95e9d (diff)
*Update instance script functions.
--HG-- branch : trunk
Diffstat (limited to 'src/game/InstanceData.cpp')
-rw-r--r--src/game/InstanceData.cpp41
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();
+}