aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/MiscHandler.cpp3
-rw-r--r--src/game/MovementHandler.cpp1
-rw-r--r--src/game/NPCHandler.cpp2
-rw-r--r--src/game/Player.cpp3
-rw-r--r--src/game/SpellEffects.cpp2
-rw-r--r--src/game/World.cpp3
-rw-r--r--src/game/WorldSession.cpp4
-rw-r--r--src/game/WorldSession.h2
8 files changed, 7 insertions, 13 deletions
diff --git a/src/game/MiscHandler.cpp b/src/game/MiscHandler.cpp
index a3483b8efd9..c51ca063e48 100644
--- a/src/game/MiscHandler.cpp
+++ b/src/game/MiscHandler.cpp
@@ -748,8 +748,6 @@ void WorldSession::HandleReclaimCorpseOpcode(WorldPacket &recv_data)
// spawn bones
GetPlayer()->SpawnCorpseBones();
-
- GetPlayer()->SaveToDB();
}
void WorldSession::HandleResurrectResponseOpcode(WorldPacket & recv_data)
@@ -774,7 +772,6 @@ void WorldSession::HandleResurrectResponseOpcode(WorldPacket & recv_data)
return;
GetPlayer()->ResurectUsingRequestData();
- GetPlayer()->SaveToDB();
}
void WorldSession::HandleAreaTriggerOpcode(WorldPacket & recv_data)
diff --git a/src/game/MovementHandler.cpp b/src/game/MovementHandler.cpp
index d17ad1b8448..a718d1601a2 100644
--- a/src/game/MovementHandler.cpp
+++ b/src/game/MovementHandler.cpp
@@ -146,7 +146,6 @@ void WorldSession::HandleMoveWorldportAckOpcode()
{
GetPlayer()->ResurrectPlayer(0.5f,false);
GetPlayer()->SpawnCorpseBones();
- GetPlayer()->SaveToDB();
}
}
diff --git a/src/game/NPCHandler.cpp b/src/game/NPCHandler.cpp
index 57f9391176c..15201f86dd3 100644
--- a/src/game/NPCHandler.cpp
+++ b/src/game/NPCHandler.cpp
@@ -395,8 +395,6 @@ void WorldSession::SendSpiritResurrect()
else
//ObjectAccessor::UpdateVisibilityForPlayer(_player);
_player->SetToNotify();
-
- _player->SaveToDB();
}
void WorldSession::HandleBinderActivateOpcode( WorldPacket & recv_data )
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index ae3113044da..5d33d75f92b 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -4567,7 +4567,8 @@ void Player::CreateCorpse()
void Player::SpawnCorpseBones()
{
if(ObjectAccessor::Instance().ConvertCorpseForPlayer(GetGUID()))
- SaveToDB(); // prevent loading as ghost without corpse
+ if (!GetSession()->PlayerLogoutWithSave()) // at logout we will already store the player
+ SaveToDB(); // prevent loading as ghost without corpse
}
Corpse* Player::GetCorpse() const
diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index cf275693a82..b6bc9aed572 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -6694,8 +6694,6 @@ void Spell::EffectSelfResurrect(uint32 i)
plr->SetPower(POWER_ENERGY, plr->GetMaxPower(POWER_ENERGY) );
plr->SpawnCorpseBones();
-
- plr->SaveToDB();
}
void Spell::EffectSkinning(uint32 /*i*/)
diff --git a/src/game/World.cpp b/src/game/World.cpp
index 43f2c40026d..a822d202288 100644
--- a/src/game/World.cpp
+++ b/src/game/World.cpp
@@ -2393,9 +2393,6 @@ void World::UpdateSessions(uint32 diff)
next = itr;
++next;
- if (!itr->second)
- continue;
-
///- and remove not active sessions from the list
if (!itr->second->Update(diff)) // As interval = 0
{
diff --git a/src/game/WorldSession.cpp b/src/game/WorldSession.cpp
index ad15c5f3932..bbcf4fcbf70 100644
--- a/src/game/WorldSession.cpp
+++ b/src/game/WorldSession.cpp
@@ -47,7 +47,7 @@ WorldSession::WorldSession(uint32 id, WorldSocket *sock, AccountTypes sec, uint8
LookingForGroup_auto_join(false), LookingForGroup_auto_add(false), m_muteTime(mute_time),
_player(NULL), m_Socket(sock),_security(sec), _accountId(id), m_expansion(expansion),
m_sessionDbcLocale(sWorld.GetAvailableDbcLocale(locale)), m_sessionDbLocaleIndex(objmgr.GetIndexForLocale(locale)),
-_logoutTime(0), m_inQueue(false), m_playerLoading(false), m_playerLogout(false), m_playerRecentlyLogout(false),
+_logoutTime(0), m_inQueue(false), m_playerLoading(false), m_playerLogout(false), m_playerRecentlyLogout(false), m_playerSave(false),
m_latency(0), m_TutorialsChanged(false)
{
if (sock)
@@ -299,6 +299,7 @@ void WorldSession::LogoutPlayer(bool Save)
HandleMoveWorldportAckOpcode();
m_playerLogout = true;
+ m_playerSave = Save;
if (_player)
{
@@ -458,6 +459,7 @@ void WorldSession::LogoutPlayer(bool Save)
Script->OnLogout(_player);
m_playerLogout = false;
+ m_playerSave = false;
m_playerRecentlyLogout = true;
LogoutRequest(0);
}
diff --git a/src/game/WorldSession.h b/src/game/WorldSession.h
index 021a1a49d2b..0e0d5df9480 100644
--- a/src/game/WorldSession.h
+++ b/src/game/WorldSession.h
@@ -118,6 +118,7 @@ class TRINITY_DLL_SPEC WorldSession
bool PlayerLoading() const { return m_playerLoading; }
bool PlayerLogout() const { return m_playerLogout; }
+ bool PlayerLogoutWithSave() const { return m_playerLogout && m_playerSave; }
void SizeError(WorldPacket const& packet, uint32 size) const;
@@ -763,6 +764,7 @@ class TRINITY_DLL_SPEC WorldSession
bool m_playerLoading; // code processed in LoginPlayer
bool m_playerLogout; // code processed in LogoutPlayer
bool m_playerRecentlyLogout;
+ bool m_playerSave;
LocaleConstant m_sessionDbcLocale;
int m_sessionDbLocaleIndex;
uint32 m_latency;