mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-25 06:36:24 +00:00
Merge branch 'master' into Playerbot
This commit is contained in:
@@ -335,21 +335,22 @@ bool GameObject::Create(ObjectGuid::LowType guidlow, uint32 name_id, Map* map, u
|
||||
|
||||
if (IsInstanceGameobject())
|
||||
{
|
||||
switch (GetStateSavedOnInstance())
|
||||
if (InstanceScript* instance = GetInstanceScript())
|
||||
{
|
||||
case 0:
|
||||
SetGoState(GO_STATE_READY);
|
||||
SwitchDoorOrButton(true);
|
||||
break;
|
||||
case 1:
|
||||
SetGoState(GO_STATE_READY);
|
||||
break;
|
||||
case 2:
|
||||
SetGoState(GO_STATE_ACTIVE_ALTERNATIVE);
|
||||
break;
|
||||
default:
|
||||
SetGoState(go_state);
|
||||
break;
|
||||
switch (uint8 state = instance->GetStoredGameObjectState(GetSpawnId()))
|
||||
{
|
||||
case 0:
|
||||
SetGoState(GO_STATE_READY);
|
||||
SwitchDoorOrButton(true);
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
SetGoState((GOState)state);
|
||||
break;
|
||||
default:
|
||||
SetGoState(go_state);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -2505,21 +2506,13 @@ void GameObject::SetGoState(GOState state)
|
||||
* save it's state on the database to be loaded properly
|
||||
* on server restart or crash.
|
||||
*/
|
||||
if (IsInstanceGameobject() && IsAbleToSaveOnDb())
|
||||
if (IsInstanceGameobject() && IsAllowedToSaveToDB())
|
||||
{
|
||||
// Save the gameobject state on the Database
|
||||
if (!FindStateSavedOnInstance())
|
||||
{
|
||||
SaveInstanceData(GameobjectStateToInt(&state));
|
||||
}
|
||||
else
|
||||
{
|
||||
UpdateInstanceData(GameobjectStateToInt(&state));
|
||||
}
|
||||
SaveStateToDB();
|
||||
}
|
||||
}
|
||||
|
||||
bool GameObject::IsInstanceGameobject()
|
||||
bool GameObject::IsInstanceGameobject() const
|
||||
{
|
||||
// Avoid checking for unecessary gameobjects whose
|
||||
// states don't matter for the dungeon progression
|
||||
@@ -2538,7 +2531,7 @@ bool GameObject::IsInstanceGameobject()
|
||||
return false;
|
||||
}
|
||||
|
||||
bool GameObject::ValidateGameobjectType()
|
||||
bool GameObject::ValidateGameobjectType() const
|
||||
{
|
||||
switch (m_goInfo->type)
|
||||
{
|
||||
@@ -2553,7 +2546,7 @@ bool GameObject::ValidateGameobjectType()
|
||||
}
|
||||
}
|
||||
|
||||
uint8 GameObject::GameobjectStateToInt(GOState* state)
|
||||
uint8 GameObject::GameobjectStateToInt(GOState* state) const
|
||||
{
|
||||
uint8 m_state = 3;
|
||||
|
||||
@@ -2578,71 +2571,24 @@ uint8 GameObject::GameobjectStateToInt(GOState* state)
|
||||
return m_state;
|
||||
}
|
||||
|
||||
bool GameObject::IsAbleToSaveOnDb()
|
||||
{
|
||||
return m_saveStateOnDb;
|
||||
}
|
||||
|
||||
void GameObject::UpdateSaveToDb(bool enable)
|
||||
{
|
||||
m_saveStateOnDb = enable;
|
||||
|
||||
if (enable)
|
||||
{
|
||||
SavingStateOnDB();
|
||||
}
|
||||
}
|
||||
|
||||
void GameObject::SavingStateOnDB()
|
||||
void GameObject::SaveStateToDB()
|
||||
{
|
||||
if (IsInstanceGameobject())
|
||||
{
|
||||
GOState param = GetGoState();
|
||||
if (!FindStateSavedOnInstance())
|
||||
if (InstanceScript* instance = GetInstanceScript())
|
||||
{
|
||||
SaveInstanceData(GameobjectStateToInt(¶m));
|
||||
GOState param = GetGoState();
|
||||
instance->StoreGameObjectState(GetSpawnId(), GameobjectStateToInt(¶m));
|
||||
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INSERT_INSTANCE_SAVED_DATA);
|
||||
stmt->SetData(0, GetInstanceId());
|
||||
stmt->SetData(1, GetSpawnId());
|
||||
stmt->SetData(2, GameobjectStateToInt(¶m));
|
||||
CharacterDatabase.Execute(stmt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GameObject::SaveInstanceData(uint8 state)
|
||||
{
|
||||
uint32 id = GetInstanceId();
|
||||
uint32 guid = GetSpawnId();
|
||||
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_INSERT_INSTANCE_SAVED_DATA);
|
||||
stmt->SetData(0, id);
|
||||
stmt->SetData(1, guid);
|
||||
stmt->SetData(2, state);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
|
||||
sObjectMgr->NewInstanceSavedGameobjectState(id, guid, state);
|
||||
}
|
||||
|
||||
void GameObject::UpdateInstanceData(uint8 state)
|
||||
{
|
||||
uint32 id = GetInstanceId();
|
||||
uint32 guid = GetSpawnId();
|
||||
|
||||
CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPDATE_INSTANCE_SAVED_DATA);
|
||||
stmt->SetData(0, state);
|
||||
stmt->SetData(1, guid);
|
||||
stmt->SetData(2, id);
|
||||
CharacterDatabase.Execute(stmt);
|
||||
|
||||
sObjectMgr->SetInstanceSavedGameobjectState(id, guid, state);
|
||||
}
|
||||
|
||||
uint8 GameObject::GetStateSavedOnInstance()
|
||||
{
|
||||
return sObjectMgr->GetInstanceSavedGameobjectState(GetInstanceId(), GetSpawnId());
|
||||
}
|
||||
|
||||
bool GameObject::FindStateSavedOnInstance()
|
||||
{
|
||||
return sObjectMgr->FindInstanceSavedGameobjectState(GetInstanceId(), GetSpawnId());
|
||||
}
|
||||
|
||||
void GameObject::SetDisplayId(uint32 displayid)
|
||||
{
|
||||
SetUInt32Value(GAMEOBJECT_DISPLAYID, displayid);
|
||||
|
||||
@@ -350,25 +350,21 @@ public:
|
||||
|
||||
static std::unordered_map<int, goEventFlag> gameObjectToEventFlag; // Gameobject -> event flag
|
||||
|
||||
void SaveInstanceData(uint8 state);
|
||||
void UpdateInstanceData(uint8 state);
|
||||
bool FindStateSavedOnInstance();
|
||||
bool ValidateGameobjectType();
|
||||
uint8 GetStateSavedOnInstance();
|
||||
bool IsInstanceGameobject();
|
||||
uint8 GameobjectStateToInt(GOState* state);
|
||||
[[nodiscard]] bool ValidateGameobjectType() const;
|
||||
[[nodiscard]] bool IsInstanceGameobject() const;
|
||||
[[nodiscard]] uint8 GameobjectStateToInt(GOState* state) const;
|
||||
|
||||
/* A check to verify if this object is available to be saved on the DB when
|
||||
* a state change occurs
|
||||
*/
|
||||
bool IsAbleToSaveOnDb();
|
||||
[[nodiscard]] bool IsAllowedToSaveToDB() const { return m_saveStateOnDb; };
|
||||
|
||||
/* Enable or Disable the ability to save on the database this gameobject's state
|
||||
* whenever it changes
|
||||
*/
|
||||
void UpdateSaveToDb(bool enable);
|
||||
void AllowSaveToDB(bool enable) { m_saveStateOnDb = enable; };
|
||||
|
||||
void SavingStateOnDB();
|
||||
void SaveStateToDB();
|
||||
|
||||
std::string GetDebugInfo() const override;
|
||||
protected:
|
||||
|
||||
Reference in New Issue
Block a user