aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormaximius <none@none>2009-09-30 03:29:08 -0700
committermaximius <none@none>2009-09-30 03:29:08 -0700
commitf0d592489162b8bf7740bbc3db038f81aa3af7e8 (patch)
tree45513c11bc5fb9378f499e14506b555cb9a224f6 /src
parent693251497a751821711262382442b54b91446231 (diff)
*Cleanup, add two new functions, attempt to fix arena point flushing for offline players.
--HG-- branch : trunk
Diffstat (limited to 'src')
-rw-r--r--src/game/BattleGroundMgr.cpp17
-rw-r--r--src/shared/Common.h4
-rw-r--r--src/shared/Database/Database.cpp23
-rw-r--r--src/shared/Database/Database.h3
4 files changed, 38 insertions, 9 deletions
diff --git a/src/game/BattleGroundMgr.cpp b/src/game/BattleGroundMgr.cpp
index a06b7f45f7b..ec67d2f5d54 100644
--- a/src/game/BattleGroundMgr.cpp
+++ b/src/game/BattleGroundMgr.cpp
@@ -1816,22 +1816,25 @@ void BattleGroundMgr::DistributeArenaPoints()
//at first update all points for all team members
for(ObjectMgr::ArenaTeamMap::iterator team_itr = objmgr.GetArenaTeamMapBegin(); team_itr != objmgr.GetArenaTeamMapEnd(); ++team_itr)
- {
if (ArenaTeam * at = team_itr->second)
- {
at->UpdateArenaPointsHelper(PlayerPoints);
- }
- }
//cycle that gives points to all players
for (std::map<uint32, uint32>::iterator plr_itr = PlayerPoints.begin(); plr_itr != PlayerPoints.end(); ++plr_itr)
{
- //update to database
- CharacterDatabase.PExecute("UPDATE characters SET arena_pending_points = '%u' WHERE guid = '%u'", plr_itr->second, plr_itr->first);
- //add points if player is online
+ //add points to player
Player* pl = objmgr.GetPlayer(plr_itr->first);
if (pl)
+ {
+ CharacterDatabase.PExecute("UPDATE characters SET arena_pending_points = '%u' WHERE guid = '%u'", plr_itr->second, plr_itr->first);
pl->ModifyArenaPoints(plr_itr->second);
+ }
+ else
+ {
+ CharacterDatabase.PExecute("UPDATE characters SET arena_pending_points = 0 WHERE guid = '%u'", plr_itr->first);
+ CharacterDatabase._UpdateDataBlobValue(plr_itr->first, PLAYER_FIELD_ARENA_CURRENCY,
+ std::max(std::min(int32(plr_itr->second),int32(sWorld.getConfig(CONFIG_MAX_ARENA_POINTS))),0));
+ }
}
PlayerPoints.clear();
diff --git a/src/shared/Common.h b/src/shared/Common.h
index a274c5d5a0b..8c948fb1d6d 100644
--- a/src/shared/Common.h
+++ b/src/shared/Common.h
@@ -72,7 +72,7 @@
# pragma warning(disable:4311) // 'variable' : pointer truncation from 'type' to 'type'
# pragma warning(disable:4355) // 'this' : used in base member initializer list
# pragma warning(disable:4800) // 'type' : forcing value to bool 'true' or 'false' (performance warning)
-# pragma warning(disable:4522) //warning when class has 2 constructosr
+# pragma warning(disable:4522) //warning when class has 2 constructors
#endif // __SHOW_STUPID_WARNINGS__
#endif // __GNUC__
@@ -199,7 +199,7 @@ extern char const* localeNames[MAX_LOCALE];
LocaleConstant GetLocaleByName(const std::string& name);
-// we always use stdlibc++ std::max/std::min, undefine some not C++ standard defines (Win API and some pother platforms)
+// we always use stdlibc++ std::max/std::min, undefine some not C++ standard defines (Win API and some other platforms)
#ifdef max
#undef max
#endif
diff --git a/src/shared/Database/Database.cpp b/src/shared/Database/Database.cpp
index 8b4de01e8db..9a43f72f272 100644
--- a/src/shared/Database/Database.cpp
+++ b/src/shared/Database/Database.cpp
@@ -21,6 +21,9 @@
#include "DatabaseEnv.h"
#include "Config/ConfigEnv.h"
+#include "Common.h"
+#include "../../game/UpdateFields.h"
+
#include <ctime>
#include <iostream>
#include <fstream>
@@ -172,6 +175,26 @@ bool Database::PExecute(const char * format,...)
return Execute(szQuery);
}
+bool Database::_UpdateDataBlobValue(const uint32 guid, const uint32 field, const uint32 value)
+{
+ return PExecute(
+ "UPDATE characters SET data="
+ "CONCAT(SUBSTRING_INDEX(`data`,' ',%u),' ',"
+ "SUBSTRING_INDEX(SUBSTRING_INDEX(`data`,' ',%u),' ',-1)+%u,"
+ "' ',SUBSTRING_INDEX(`data`,' ',%u)) WHERE guid=%u",
+ field, field+1, value, -int32(PLAYER_END-field)-1, guid);
+}
+
+bool Database::_SetDataBlobValue(const uint32 guid, const uint32 field, const uint32 value)
+{
+ return PExecute(
+ "UPDATE characters SET data="
+ "CONCAT(SUBSTRING_INDEX(`data`,' ',%u),' ',"
+ "%u,' ',SUBSTRING_INDEX(`data`,' ',%u)),"
+ "WHERE guid=%u",
+ field, field+1, value, -int32(PLAYER_END-field)-1, guid);
+}
+
bool Database::DirectPExecute(const char * format,...)
{
if (!format)
diff --git a/src/shared/Database/Database.h b/src/shared/Database/Database.h
index a11c8e9a31f..bbdc137700d 100644
--- a/src/shared/Database/Database.h
+++ b/src/shared/Database/Database.h
@@ -102,6 +102,9 @@ class TRINITY_DLL_SPEC Database
virtual bool DirectExecute(const char* sql) = 0;
bool DirectPExecute(const char *format,...) ATTR_PRINTF(2,3);
+ bool Database::_UpdateDataBlobValue(const uint32 guid, const uint32 field, const uint32 value);
+ bool Database::_SetDataBlobValue(const uint32 guid, const uint32 field, const uint32 value);
+
// Writes SQL commands to a LOG file (see Trinityd.conf "LogSQL")
bool PExecuteLog(const char *format,...) ATTR_PRINTF(2,3);