All pastes #1468812 Raw Edit

Miscellany

public diff v1 · immutable
#1468812 ·published 2009-06-21 15:03 UTC
rendered paste body
diff --git a/sql/updates/9999_01_characters_characters.sql b/sql/updates/9999_01_characters_characters.sqlnew file mode 100644index 0000000..23f4cba--- /dev/null+++ b/sql/updates/9999_01_characters_characters.sql@@ -0,0 +1,9 @@+ALTER TABLE characters+ADD level INT UNSIGNED NOT NULL AFTER class,+ADD xp INT UNSIGNED NOT NULL AFTER level,+ADD money INT UNSIGNED NOT NULL AFTER xp;++UPDATE characters SET+level = CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(data, ' ', 54), ' ', -1) AS UNSIGNED),+xp = CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(data, ' ', 609), ' ', -1) AS UNSIGNED),+money = CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(data, ' ', 1145), ' ', -1) AS UNSIGNED);diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cppindex dcd61ea..ad3fe07 100644--- a/src/game/CharacterHandler.cpp+++ b/src/game/CharacterHandler.cpp@@ -335,7 +335,7 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )      if(!AllowTwoSideAccounts || skipCinematics == 1 || class_ == CLASS_DEATH_KNIGHT)     {-        QueryResult *result2 = CharacterDatabase.PQuery("SELECT guid,race,class FROM characters WHERE account = '%u' %s",+        QueryResult *result2 = CharacterDatabase.PQuery("SELECT level,race,class FROM characters WHERE account = '%u' %s",             GetAccountId(), (skipCinematics == 1 || class_ == CLASS_DEATH_KNIGHT) ? "" : "LIMIT 1");         if(result2)         {@@ -362,8 +362,7 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )                  if(!have_req_level_for_heroic)                 {-                    uint32 acc_guid = field[0].GetUInt32();-                    uint32 acc_level = Player::GetUInt32ValueFromDB(UNIT_FIELD_LEVEL,acc_guid);+                    uint32 acc_level = field[0].GetUInt32();                     if(acc_level >= req_level_for_heroic)                         have_req_level_for_heroic = true;                 }@@ -417,8 +416,7 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )                      if(!have_req_level_for_heroic)                     {-                        uint32 acc_guid = field[0].GetUInt32();-                        uint32 acc_level = Player::GetUInt32ValueFromDB(UNIT_FIELD_LEVEL,acc_guid);+                        uint32 acc_level = field[0].GetUInt32();                         if(acc_level >= req_level_for_heroic)                             have_req_level_for_heroic = true;                     }diff --git a/src/game/Guild.cpp b/src/game/Guild.cppindex a4c4a26..ee6c164 100644--- a/src/game/Guild.cpp+++ b/src/game/Guild.cpp@@ -352,17 +352,14 @@ bool Guild::FillPlayerData(uint64 guid, MemberSlot* memslot)     }     else     {-        QueryResult *result = CharacterDatabase.PQuery("SELECT name,data,zone,class FROM characters WHERE guid = '%u'", GUID_LOPART(guid));+        QueryResult *result = CharacterDatabase.PQuery("SELECT name,level,zone,class FROM characters WHERE guid = '%u'", GUID_LOPART(guid));         if(!result)             return false;                                   // player doesn't exist          Field *fields = result->Fetch();          plName = fields[0].GetCppString();--        Tokens data = StrSplit(fields[1].GetCppString(), " ");-        plLevel = Player::GetUInt32ValueFromArray(data,UNIT_FIELD_LEVEL);-+        plLevel = fields[1].GetUInt32();         plZone = fields[2].GetUInt32();         plClass = fields[3].GetUInt32();         delete result;diff --git a/src/game/GuildHandler.cpp b/src/game/GuildHandler.cppindex 9b5dba2..649f57b 100644--- a/src/game/GuildHandler.cpp+++ b/src/game/GuildHandler.cpp@@ -976,7 +976,7 @@ void WorldSession::HandleGuildBankDepositMoney( WorldPacket & recv_data )      pGuild->SetBankMoney(pGuild->GetGuildBankMoney()+money);     GetPlayer()->ModifyMoney(-int(money));-    GetPlayer()->SaveDataFieldToDB();                       //contains money+    GetPlayer()->SaveGoldToDB();      CharacterDatabase.CommitTransaction(); @@ -1032,7 +1032,7 @@ void WorldSession::HandleGuildBankWithdrawMoney( WorldPacket & recv_data )     }      GetPlayer()->ModifyMoney(money);-    GetPlayer()->SaveDataFieldToDB();                       // contains money+    GetPlayer()->SaveGoldToDB();      CharacterDatabase.CommitTransaction(); diff --git a/src/game/Level2.cpp b/src/game/Level2.cppindex 6a3b6fa..65d63cc 100644--- a/src/game/Level2.cpp+++ b/src/game/Level2.cpp@@ -2133,21 +2133,17 @@ bool ChatHandler::HandlePInfoCommand(const char* args)         if (HasLowerSecurity(NULL, target_guid))             return false; -        //                                                     0-        QueryResult *result = CharacterDatabase.PQuery("SELECT totaltime FROM characters WHERE guid = '%u'", GUID_LOPART(target_guid));+        //                                                     0          1      2+        QueryResult *result = CharacterDatabase.PQuery("SELECT totaltime, level, money FROM characters WHERE guid = '%u'", GUID_LOPART(target_guid));         if (!result)             return false;          Field *fields = result->Fetch();         total_player_time = fields[0].GetUInt32();+        level = fields[1].GetUInt32();+        money = fields[2].GetUInt32();         delete result; -        Tokens data;-        if (!Player::LoadValuesArrayFromDB(data,target_guid))-            return false;--        money = Player::GetUInt32ValueFromArray(data, PLAYER_FIELD_COINAGE);-        level = Player::GetUInt32ValueFromArray(data, UNIT_FIELD_LEVEL);         accId = objmgr.GetPlayerAccountIdByGUID(target_guid);     } diff --git a/src/game/Level3.cpp b/src/game/Level3.cppindex bebba74..1a3021e 100644--- a/src/game/Level3.cpp+++ b/src/game/Level3.cpp@@ -3931,11 +3931,7 @@ void ChatHandler::HandleCharacterLevel(Player* player, uint64 player_guid, uint3     else     {         // update level and XP at level, all other will be updated at loading-        Tokens values;-        Player::LoadValuesArrayFromDB(values,player_guid);-        Player::SetUInt32ValueInArray(values,UNIT_FIELD_LEVEL,newlevel);-        Player::SetUInt32ValueInArray(values,PLAYER_XP,0);-        Player::SaveValuesArrayInDB(values,player_guid);+        CharacterDatabase.PExecute("UPDATA characters SET level = '%u', xp = 0 WHERE guid = '%u'", newlevel, GUID_LOPART(player_guid));     } } @@ -3960,7 +3956,7 @@ bool ChatHandler::HandleCharacterLevelCommand(const char* args)     if(!extractPlayerTarget(nameStr,&target,&target_guid,&target_name))         return false; -    int32 oldlevel = target ? target->getLevel() : Player::GetUInt32ValueFromDB(UNIT_FIELD_LEVEL,target_guid);+    int32 oldlevel = target ? target->getLevel() : Player::GetLevelFromDB(target_guid);     int32 newlevel = levelStr ? atoi(levelStr) : oldlevel;      if(newlevel < 1)@@ -3999,7 +3995,7 @@ bool ChatHandler::HandleLevelUpCommand(const char* args)     if(!extractPlayerTarget(nameStr,&target,&target_guid,&target_name))         return false; -    int32 oldlevel = target ? target->getLevel() : Player::GetUInt32ValueFromDB(UNIT_FIELD_LEVEL,target_guid);+    int32 oldlevel = target ? target->getLevel() : Player::GetLevelFromDB(target_guid);     int32 addlevel = levelStr ? atoi(levelStr) : 1;     int32 newlevel = oldlevel + addlevel; diff --git a/src/game/Mail.cpp b/src/game/Mail.cppindex 0d90792..2453f19 100644--- a/src/game/Mail.cpp+++ b/src/game/Mail.cpp@@ -557,7 +557,7 @@ void WorldSession::HandleMailTakeMoney(WorldPacket & recv_data )      // save money and mail to prevent cheating     CharacterDatabase.BeginTransaction();-    pl->SaveDataFieldToDB();                                // contains money+    pl->SaveGoldToDB();     pl->_SaveMail();     CharacterDatabase.CommitTransaction(); }diff --git a/src/game/Player.cpp b/src/game/Player.cppindex 41a8701..3767316 100644--- a/src/game/Player.cpp+++ b/src/game/Player.cpp@@ -6061,6 +6061,19 @@ uint32 Player::GetZoneIdFromDB(uint64 guid)     return zone; } +uint32 Player::GetLevelFromDB(uint64 guid)+{+    QueryResult *result = CharacterDatabase.PQuery( "SELECT level FROM characters WHERE guid='%u'", GUID_LOPART(guid) );+    if (!result)+        return 0;++    Field* fields = result->Fetch();+    uint32 level = fields[0].GetUInt32();+    delete result;++    return level;+}+ void Player::UpdateArea(uint32 newArea) {     // FFA_PVP flags are area and not zone id dependent@@ -15514,8 +15527,12 @@ void Player::SaveToDB() void Player::SaveInventoryAndGoldToDB() {     _SaveInventory();-    //money is in data field-    SaveDataFieldToDB();+    SaveGoldToDB();+}++void Player::SaveGoldToDB()+{+    CharacterDatabase.PExecute("UPDATE money = '%u' WHERE guid = '%u'", GetMoney(), GetGUIDLow()); }  void Player::_SaveActions()diff --git a/src/game/Player.h b/src/game/Player.hindex 02d8f30..bd2ac98 100644--- a/src/game/Player.h+++ b/src/game/Player.h@@ -1261,6 +1261,7 @@ class MANGOS_DLL_SPEC Player : public Unit         static uint32 GetUInt32ValueFromDB(uint16 index, uint64 guid);         static float  GetFloatValueFromDB(uint16 index, uint64 guid);         static uint32 GetZoneIdFromDB(uint64 guid);+        static uint32 GetLevelFromDB(uint64 guid);         static bool   LoadPositionFromDB(uint32& mapid, float& x,float& y,float& z,float& o, bool& in_flight, uint64 guid);          /*********************************************************/@@ -1269,6 +1270,7 @@ class MANGOS_DLL_SPEC Player : public Unit          void SaveToDB();         void SaveInventoryAndGoldToDB();                    // fast save function for item/money cheating preventing+        void SaveGoldToDB();         void SaveDataFieldToDB();         static bool SaveValuesArrayInDB(Tokens const& data,uint64 guid);         static void SetUInt32ValueInArray(Tokens& data,uint16 index, uint32 value);