rendered paste bodydiff --git a/sql/characters.sql b/sql/characters.sqlindex bbc42f8..b0028cc 100644--- a/sql/characters.sql+++ b/sql/characters.sql@@ -231,7 +231,25 @@ CREATE TABLE `characters` ( `zone` int(11) unsigned NOT NULL default '0', `death_expire_time` bigint(20) unsigned NOT NULL default '0', `taxi_path` text,- `arena_pending_points` int(10) UNSIGNED NOT NULL default '0',+ `arenaPoints` int(10) UNSIGNED NOT NULL default '0',+ `totalHonorPoints` int(10) UNSIGNED NOT NULL default '0',+ `todayHonorPoints` int(10) UNSIGNED NOT NULL default '0',+ `yesterdayHonorPoints` int(10) UNSIGNED NOT NULL default '0',+ `totalKills` int(10) UNSIGNED NOT NULL default '0',+ `todayKills` smallint(5) UNSIGNED NOT NULL default '0',+ `yesterdayKills` smallint(5) UNSIGNED NOT NULL default '0',+ `chosenTitle` int(10) UNSIGNED NOT NULL default '0',+ `knownCurrencies` bigint(20) UNSIGNED NOT NULL default '0',+ `watchedFaction` int(10) UNSIGNED NOT NULL default '0',+ `drunk` smallint(5) UNSIGNED NOT NULL default '0',+ `health` int(10) UNSIGNED NOT NULL default '0',+ `power1` int(10) UNSIGNED NOT NULL default '0',+ `power2` int(10) UNSIGNED NOT NULL default '0',+ `power3` int(10) UNSIGNED NOT NULL default '0',+ `power4` int(10) UNSIGNED NOT NULL default '0',+ `power5` int(10) UNSIGNED NOT NULL default '0',+ `power6` int(10) UNSIGNED NOT NULL default '0',+ `power7` int(10) UNSIGNED NOT NULL default '0', PRIMARY KEY (`guid`), KEY `idx_account` (`account`), KEY `idx_online` (`online`),diff --git a/src/game/BattleGroundMgr.cpp b/src/game/BattleGroundMgr.cppindex 44014c4..c3c642e 100644--- a/src/game/BattleGroundMgr.cpp+++ b/src/game/BattleGroundMgr.cpp@@ -1840,7 +1840,7 @@ void BattleGroundMgr::DistributeArenaPoints() 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);+ CharacterDatabase.PExecute("UPDATE characters SET arenaPoints = arenaPoints + '%u' WHERE guid = '%u'", plr_itr->second, plr_itr->first); //add points if player is online Player* pl = sObjectMgr.GetPlayer(plr_itr->first); if (pl)diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cppindex 7e24175..f6f4862 100644--- a/src/game/CharacterHandler.cpp+++ b/src/game/CharacterHandler.cpp@@ -60,7 +60,11 @@ bool LoginQueryHolder::Initialize() // NOTE: all fields in `characters` must be read to prevent lost character data at next save in case wrong DB structure. // !!! NOTE: including unused `zone`,`online`- res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADFROM, "SELECT guid, account, data, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags, position_x, position_y, position_z, map, orientation, taximask, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, resettalents_time, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, online, death_expire_time, taxi_path, dungeon_difficulty, arena_pending_points FROM characters WHERE guid = '%u'", GUID_LOPART(m_guid));+ res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADFROM, "SELECT guid, account, data, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags,"+ "position_x, position_y, position_z, map, orientation, taximask, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost,"+ "resettalents_time, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, online, death_expire_time, taxi_path, dungeon_difficulty,"+ "arenaPoints, totalHonorPoints, todayHonorPoints, yesterdayHonorPoints, totalKills, todayKills, yesterdayKills, chosenTitle, knownCurrencies, watchedFaction, drunk,"+ "health, power1, power2, power3, power4, power5, power6, power7 FROM characters WHERE guid = '%u'", GUID_LOPART(m_guid)); res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADGROUP, "SELECT leaderGuid FROM group_member WHERE memberGuid ='%u'", GUID_LOPART(m_guid)); res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADBOUNDINSTANCES, "SELECT id, permanent, map, difficulty, resettime FROM character_instance LEFT JOIN instance ON instance = id WHERE guid = '%u'", GUID_LOPART(m_guid)); res &= SetPQuery(PLAYER_LOGIN_QUERY_LOADAURAS, "SELECT caster_guid,spell,effect_index,stackcount,amount,maxduration,remaintime,remaincharges FROM character_aura WHERE guid = '%u'", GUID_LOPART(m_guid));diff --git a/src/game/Player.cpp b/src/game/Player.cppindex f07b4e8..61c16dc 100644--- a/src/game/Player.cpp+++ b/src/game/Player.cpp@@ -14130,8 +14130,16 @@ float Player::GetFloatValueFromDB(uint16 index, uint64 guid) bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) {- //// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40- //QueryResult *result = CharacterDatabase.PQuery("SELECT guid, account, data, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags, position_x, position_y, position_z, map, orientation, taximask, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, resettalents_time, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, online, death_expire_time, taxi_path, dungeon_difficulty, arena_pending_points FROM characters WHERE guid = '%u'", guid);+ // 0 1 2 3 4 5 6 7 8 9 10 11 12+ //SELECT guid, account, data, name, race, class, gender, level, xp, money, playerBytes, playerBytes2, playerFlags,"+ // 13 14 15 16 17 18 19 20 21 22 23 24 25+ //"position_x, position_y, position_z, map, orientation, taximask, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost,"+ // 26 27 28 29 30 31 32 33 34 35 36 37 38 39+ //"resettalents_time, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, online, death_expire_time, taxi_path, dungeon_difficulty,"+ // 40 41 42 43 44 45 46 47 48 49 50+ //"arenaPoints, totalHonorPoints, todayHonorPoints, yesterdayHonorPoints, totalKills, todayKills, yesterdayKills, chosenTitle, knownCurrencies, watchedFaction, drunk,"+ // 51 52 53 54 55 56 57 58+ //"health, power1, power2, power3, power4, power5, power6, power7 FROM characters WHERE guid = '%u'", GUID_LOPART(m_guid)); QueryResult *result = holder->GetResult(PLAYER_LOGIN_QUERY_LOADFROM); if(!result)@@ -14185,11 +14193,19 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) SetUInt32Value(UNIT_FIELD_LEVEL, fields[7].GetUInt8()); SetUInt32Value(PLAYER_XP, fields[8].GetUInt32());- SetUInt32Value(PLAYER_FIELD_COINAGE, fields[9].GetUInt32());++ uint32 money = fields[9].GetUInt32();+ if(money > MAX_MONEY_AMOUNT)+ money = MAX_MONEY_AMOUNT;+ SetMoney(money);+ SetUInt32Value(PLAYER_BYTES, fields[10].GetUInt32()); SetUInt32Value(PLAYER_BYTES_2, fields[11].GetUInt32());- SetUInt32Value(PLAYER_BYTES_3, (GetUInt32Value(PLAYER_BYTES_3) & ~1) | fields[6].GetUInt8());+ SetUInt32Value(PLAYER_BYTES_3, (fields[50].GetUInt16() & 0xFFFE) | fields[6].GetUInt8()); SetUInt32Value(PLAYER_FLAGS, fields[12].GetUInt32());+ SetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX, fields[49].GetUInt32());+ SetUInt64Value(PLAYER_FIELD_KNOWN_CURRENCIES, fields[48].GetUInt64());+ InitDisplayIds(); @@ -14206,10 +14222,6 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) } } - // update money limits- if(GetMoney() > MAX_MONEY_AMOUNT)- SetMoney(MAX_MONEY_AMOUNT);- sLog.outDebug("Load Basic value of player %s is: ", m_name.c_str()); outDebugValues(); @@ -14241,7 +14253,7 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) _LoadArenaTeamInfo(holder->GetResult(PLAYER_LOGIN_QUERY_LOADARENAINFO)); - uint32 arena_currency = GetUInt32Value(PLAYER_FIELD_ARENA_CURRENCY) + fields[40].GetUInt32();+ uint32 arena_currency = GetUInt32Value(fields[40].GetUInt32()); if (arena_currency > sWorld.getConfig(CONFIG_MAX_ARENA_POINTS)) arena_currency = sWorld.getConfig(CONFIG_MAX_ARENA_POINTS); @@ -14263,6 +14275,13 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) SetUInt32Value(PLAYER_FIELD_ARENA_TEAM_INFO_1_1 + (arena_slot * ARENA_TEAM_END) + j, 0); } + SetUInt32Value(PLAYER_FIELD_HONOR_CURRENCY, fields[41].GetUInt32());+ SetUInt32Value(PLAYER_FIELD_TODAY_CONTRIBUTION, fields[42].GetUInt32());+ SetUInt32Value(PLAYER_FIELD_YESTERDAY_CONTRIBUTION, fields[43].GetUInt32());+ SetUInt32Value(PLAYER_FIELD_LIFETIME_HONORBALE_KILLS, fields[44].GetUInt32());+ SetUInt16Value(PLAYER_FIELD_KILLS, 0, fields[45].GetUInt16());+ SetUInt16Value(PLAYER_FIELD_KILLS, 1, fields[46].GetUInt16());+ _LoadBoundInstances(holder->GetResult(PLAYER_LOGIN_QUERY_LOADBOUNDINSTANCES)); if(!IsPositionValid())@@ -14517,12 +14536,6 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) SetUInt64Value(PLAYER_DUEL_ARBITER, 0); SetUInt32Value(PLAYER_DUEL_TEAM, 0); - // remember loaded power/health values to restore after stats initialization and modifier applying- uint32 savedHealth = GetHealth();- uint32 savedPower[MAX_POWERS];- for(uint32 i = 0; i < MAX_POWERS; ++i)- savedPower[i] = GetPower(Powers(i));- // reset stats before loading any modifiers InitStatsForLevel(); InitTaxiNodesForLevel();@@ -14568,10 +14581,12 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) // check PLAYER_CHOSEN_TITLE compatibility with PLAYER__FIELD_KNOWN_TITLES // note: PLAYER__FIELD_KNOWN_TITLES updated at quest status loaded- if(uint32 curTitle = GetUInt32Value(PLAYER_CHOSEN_TITLE))+ if(uint32 curTitle = fields[10].GetUInt32()) { if(!HasTitle(curTitle))- SetUInt32Value(PLAYER_CHOSEN_TITLE, 0);+ curTitle = 0;++ SetUInt32Value(PLAYER_CHOSEN_TITLE, curTitle); } // Not finish taxi flight path@@ -14636,9 +14651,9 @@ bool Player::LoadFromDB( uint32 guid, SqlQueryHolder *holder ) UpdateAllStats(); // restore remembered power/health values (but not more max values)- SetHealth(savedHealth > GetMaxHealth() ? GetMaxHealth() : savedHealth);+ SetHealth(fields[51].GetUInt32() > GetMaxHealth() ? GetMaxHealth() : fields[51].GetUInt32()); for(uint32 i = 0; i < MAX_POWERS; ++i)- SetPower(Powers(i),savedPower[i] > GetMaxPower(Powers(i)) ? GetMaxPower(Powers(i)) : savedPower[i]);+ SetPower(Powers(i),fields[52+i].GetUInt32() > GetMaxPower(Powers(i)) ? GetMaxPower(Powers(i)) : fields[52+i].GetUInt32()); sLog.outDebug("The value of player %s after load item and aura is: ", m_name.c_str()); outDebugValues();@@ -15677,7 +15692,9 @@ void Player::SaveToDB() "taximask, online, cinematic, " "totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, resettalents_time, " "trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, "- "death_expire_time, taxi_path, arena_pending_points) VALUES ("+ "death_expire_time, taxi_path, arenaPoints, totalHonorPoints, todayHonorPoints, yesterdayHonorPoints, totalKills, "+ "todayKills, yesterdayKills, chosenTitle, knownCurrencies, watchedFaction, drunk, health, power1, power2, power3, "+ "power4, power5, power6, power7) VALUES (" << GetGUIDLow() << ", " << GetSession()->GetAccountId() << ", '" << sql_name << "', "@@ -15756,7 +15773,34 @@ void Player::SaveToDB() ss << (uint64)m_deathExpireTime << ", '"; ss << m_taxi.SaveTaxiDestinationsToString() << "', ";- ss << "'0' "; // arena_pending_points++ ss << GetArenaPoints() << ", ";++ ss << GetHonorPoints() << ", ";++ ss << GetUInt32Value(PLAYER_FIELD_TODAY_CONTRIBUTION) << ", ";++ ss << GetUInt32Value(PLAYER_FIELD_YESTERDAY_CONTRIBUTION) << ", ";++ ss << GetUInt32Value(PLAYER_FIELD_LIFETIME_HONORBALE_KILLS) << ", ";++ ss << GetUInt16Value(PLAYER_FIELD_KILLS, 0) << ", ";++ ss << GetUInt16Value(PLAYER_FIELD_KILLS, 1) << ", ";++ ss << GetUInt32Value(PLAYER_CHOSEN_TITLE) << ", ";++ ss << GetUInt64Value(PLAYER_FIELD_KNOWN_CURRENCIES) << ", ";++ ss << GetUInt32Value(PLAYER_FIELD_WATCHED_FACTION_INDEX) << ", ";++ ss << (uint16)(GetUInt32Value(PLAYER_BYTES_3) & 0xFFFE) << ", ";++ ss << GetHealth();++ for(uint32 i = 0; i < MAX_POWERS; ++i)+ ss << "," << GetPower(Powers(i));+ ss << ")"; CharacterDatabase.Execute( ss.str().c_str() );