diff options
author | n0n4m3 <none@none> | 2010-04-14 13:29:56 +0400 |
---|---|---|
committer | n0n4m3 <none@none> | 2010-04-14 13:29:56 +0400 |
commit | a6af93c3d6df91e6f9f5d374a55ef1d7b8d7a5f4 (patch) | |
tree | ca5179cadd1785e92cf79dd48f2392e46fdcda7e /src/game/Player.cpp | |
parent | 8b6005666dc10ba6acb423c7ad936b8b290fd6ee (diff) |
Create new table character_stats for external tools(website,etc). This table use only when player logout. Original code by hunuza.
--HG--
branch : trunk
Diffstat (limited to 'src/game/Player.cpp')
-rw-r--r-- | src/game/Player.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 0d70553c2c0..8441dd31fa5 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -17448,6 +17448,11 @@ void Player::SaveToDB() CharacterDatabase.CommitTransaction(); + // check if stats should only be saved on logout + // save stats can be out of transaction + if (m_session->isLogingOut() || !sWorld.getConfig(CONFIG_STATS_SAVE_ONLY_ON_LOGOUT)) + _SaveStats(); + // save pet (hunter pet level and experience and all type pets health/mana). if (Pet* pet = GetPet()) pet->SavePetToDB(PET_SAVE_AS_CURRENT); @@ -17789,6 +17794,40 @@ void Player::_SaveSpells() } } +// save player stats -- only for external usage +// real stats will be recalculated on player login +void Player::_SaveStats() +{ + // check if stat saving is enabled and if char level is high enough + if (!sWorld.getConfig(CONFIG_MIN_LEVEL_STAT_SAVE) || getLevel() < sWorld.getConfig(CONFIG_MIN_LEVEL_STAT_SAVE)) + return; + + CharacterDatabase.PExecute("DELETE FROM character_stats WHERE guid = '%u'", GetGUIDLow()); + std::ostringstream ss; + ss << "INSERT INTO character_stats (guid, maxhealth, maxpower1, maxpower2, maxpower3, maxpower4, maxpower5, maxpower6, maxpower7, " + "strength, agility, stamina, intellect, spirit, armor, resHoly, resFire, resNature, resFrost, resShadow, resArcane, " + "blockPct, dodgePct, parryPct, critPct, rangedCritPct, spellCritPct, attackPower, rangedAttackPower, spellPower) VALUES (" + << GetGUIDLow() << ", " + << GetMaxHealth() << ", "; + for (int i = 0; i < MAX_POWERS; ++i) + ss << GetMaxPower(Powers(i)) << ", "; + for (int i = 0; i < MAX_STATS; ++i) + ss << GetStat(Stats(i)) << ", "; + // armor + school resistances + for (int i = 0; i < MAX_SPELL_SCHOOL; ++i) + ss << GetResistance(SpellSchools(i)) << ","; + ss << GetFloatValue(PLAYER_BLOCK_PERCENTAGE) << ", " + << GetFloatValue(PLAYER_DODGE_PERCENTAGE) << ", " + << GetFloatValue(PLAYER_PARRY_PERCENTAGE) << ", " + << GetFloatValue(PLAYER_CRIT_PERCENTAGE) << ", " + << GetFloatValue(PLAYER_RANGED_CRIT_PERCENTAGE) << ", " + << GetFloatValue(PLAYER_SPELL_CRIT_PERCENTAGE1) << ", " + << GetUInt32Value(UNIT_FIELD_ATTACK_POWER) << ", " + << GetUInt32Value(UNIT_FIELD_RANGED_ATTACK_POWER) << ", " + << GetBaseSpellPowerBonus() << ")"; + CharacterDatabase.Execute(ss.str().c_str()); +} + void Player::outDebugValues() const { if (!sLog.IsOutDebug()) // optimize disabled debug output |