From e79d50fa2d7ad1af9c6d057583c38a282bd54f3c Mon Sep 17 00:00:00 2001 From: click Date: Fri, 16 Apr 2010 02:14:21 +0200 Subject: Reapply the previous "actionbars"-fix/handling db/coreside Fixes issue #1669 Note: This issue has been a pain in the rear, as it was actually messing up clients that ran a vanilla client without addons. The issue only comes in to place when players load a SINGLE actionbar, and not selecting "activate all bars". Extensive testing and debugging done to figure out why this actually happened - I'll fricking shoot the next one messing with it! --HG-- branch : trunk --- sql/characters.sql | 1 + sql/updates/7901_characters_characters.sql | 1 - sql/updates/7923_characters_characters.sql | 2 ++ src/game/CharacterHandler.cpp | 2 +- src/game/Player.cpp | 13 +++++++++---- 5 files changed, 13 insertions(+), 6 deletions(-) delete mode 100644 sql/updates/7901_characters_characters.sql create mode 100644 sql/updates/7923_characters_characters.sql diff --git a/sql/characters.sql b/sql/characters.sql index 16312e478b1..d07f43cf3a0 100644 --- a/sql/characters.sql +++ b/sql/characters.sql @@ -391,6 +391,7 @@ CREATE TABLE `characters` ( `equipmentCache` longtext, `ammoId` int(10) UNSIGNED NOT NULL default '0', `knownTitles` longtext, + `actionBars` tinyint(3) UNSIGNED NOT NULL default '0', PRIMARY KEY (`guid`), KEY `idx_account` (`account`), KEY `idx_online` (`online`), diff --git a/sql/updates/7901_characters_characters.sql b/sql/updates/7901_characters_characters.sql deleted file mode 100644 index 381cd0399da..00000000000 --- a/sql/updates/7901_characters_characters.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `characters` DROP `actionBars`; diff --git a/sql/updates/7923_characters_characters.sql b/sql/updates/7923_characters_characters.sql new file mode 100644 index 00000000000..a9fe4880731 --- /dev/null +++ b/sql/updates/7923_characters_characters.sql @@ -0,0 +1,2 @@ +ALTER TABLE characters + ADD COLUMN `actionBars` tinyint(3) UNSIGNED NOT NULL default '0' AFTER knownTitles; diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cpp index a823cd5c0e4..feb85d567d2 100644 --- a/src/game/CharacterHandler.cpp +++ b/src/game/CharacterHandler.cpp @@ -69,7 +69,7 @@ bool LoginQueryHolder::Initialize() "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, instance_id, speccount, activespec, exploredZones, equipmentCache, ammoId, knownTitles FROM characters WHERE guid = '%u'", GUID_LOPART(m_guid)); + "health, power1, power2, power3, power4, power5, power6, power7, instance_id, speccount, activespec, exploredZones, equipmentCache, ammoId, knownTitles, actionBars 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_mask,recalculate_mask,stackcount,amount0,amount1,amount2,base_amount0,base_amount1,base_amount2,maxduration,remaintime,remaincharges FROM character_aura WHERE guid = '%u'", GUID_LOPART(m_guid)); diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 5dffacb3543..091d8f59428 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -15528,8 +15528,8 @@ bool Player::LoadFromDB(uint32 guid, SqlQueryHolder *holder) //"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," // 39 40 41 42 43 44 45 46 47 48 49 //"arenaPoints, totalHonorPoints, todayHonorPoints, yesterdayHonorPoints, totalKills, todayKills, yesterdayKills, chosenTitle, knownCurrencies, watchedFaction, drunk," - // 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 - //"health, power1, power2, power3, power4, power5, power6, power7, instance_id, speccount, activespec, exploredZones, equipmentCache, ammoId, knownTitles FROM characters WHERE guid = '%u'", guid); + // 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 + //"health, power1, power2, power3, power4, power5, power6, power7, instance_id, speccount, activespec, exploredZones, equipmentCache, ammoId, knownTitles, actionBars FROM characters WHERE guid = '%u'", guid); QueryResult_AutoPtr result = holder->GetResult(PLAYER_LOGIN_QUERY_LOADFROM); if (!result) @@ -15597,6 +15597,9 @@ bool Player::LoadFromDB(uint32 guid, SqlQueryHolder *holder) SetUInt32Value(PLAYER_AMMO_ID, fields[63].GetUInt32()); + // set which actionbars the client has active - DO NOT REMOVE EVER AGAIN (can be changed though, if it does change fieldwise) + SetByteValue(PLAYER_FIELD_BYTES, 2, fields[65].GetUInt8()); + InitDisplayIds(); // cleanup inventory related item value fields (its will be filled correctly in _LoadInventory) @@ -17297,7 +17300,7 @@ void Player::SaveToDB() "trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, " "death_expire_time, taxi_path, arenaPoints, totalHonorPoints, todayHonorPoints, yesterdayHonorPoints, totalKills, " "todayKills, yesterdayKills, chosenTitle, knownCurrencies, watchedFaction, drunk, health, power1, power2, power3, " - "power4, power5, power6, power7, latency, speccount, activespec, exploredZones, equipmentCache, ammoId, knownTitles) VALUES (" + "power4, power5, power6, power7, latency, speccount, activespec, exploredZones, equipmentCache, ammoId, knownTitles, actionBars) VALUES (" << GetGUIDLow() << ", " << GetSession()->GetAccountId() << ", '" << sql_name << "', " @@ -17421,7 +17424,9 @@ void Player::SaveToDB() { ss << GetUInt32Value(PLAYER__FIELD_KNOWN_TITLES + i) << " "; } - ss << "')"; + ss << "',"; + ss << uint32(GetByteValue(PLAYER_FIELD_BYTES, 2)); + ss << ")"; CharacterDatabase.BeginTransaction(); -- cgit v1.2.3