aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/base/characters_database.sql9
-rw-r--r--sql/updates/characters/cata_classic/2024_03_19_00_characters.sql1
-rw-r--r--src/server/game/Entities/Player/Player.cpp10
-rw-r--r--src/server/game/Entities/Player/Player.h18
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp4
-rw-r--r--src/server/game/Server/Packets/SpellPackets.h2
6 files changed, 23 insertions, 21 deletions
diff --git a/sql/base/characters_database.sql b/sql/base/characters_database.sql
index 3c767dcf735..759f207e814 100644
--- a/sql/base/characters_database.sql
+++ b/sql/base/characters_database.sql
@@ -460,7 +460,7 @@ CREATE TABLE `character_action` (
`spec` tinyint unsigned NOT NULL DEFAULT '0',
`traitConfigId` int NOT NULL DEFAULT '0',
`button` tinyint unsigned NOT NULL DEFAULT '0',
- `action` bigint unsigned NOT NULL DEFAULT '0',
+ `action` int unsigned NOT NULL DEFAULT '0',
`type` tinyint unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`guid`,`spec`,`traitConfigId`,`button`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
@@ -3473,9 +3473,10 @@ INSERT INTO `updates` VALUES
('2023_11_02_00_characters.sql','1A76A843F204901C8598DA5682029E815477E427','ARCHIVED','2023-11-02 18:59:41',0),
('2023_11_09_00_characters.sql','1A3D7CA6890353DA55793FE8D925CC8C54965A69','ARCHIVED','2023-11-09 00:56:31',0),
('2023_11_15_00_characters.sql','441E0F17DE3E3945307AC400DF86FCDF06C61653','ARCHIVED','2023-11-15 00:53:47',0),
-('2024_02_08_00_characters.sql','743A11042AA17CDBD5F3D510D24509A10838DB5A','ARCHIVED','2024-02-08 00:56:26',0),
-('2024_03_12_00_characters.sql','C91A51EA86C26F3AB60445FE147B0E4B220716A0','ARCHIVED','2024-03-13 17:10:46',0),
-('2024_03_13_00_characters.sql','6360F50059E5DB1F248FA8A270CDC4788A03A0EC','ARCHIVED','2024-03-13 17:10:46',0);
+('2024_02_08_00_characters.sql','743A11042AA17CDBD5F3D510D24509A10838DB5A','RELEASED','2024-02-08 00:56:26',0),
+('2024_03_12_00_characters.sql','C91A51EA86C26F3AB60445FE147B0E4B220716A0','RELEASED','2024-03-13 17:10:46',0),
+('2024_03_13_00_characters.sql','6360F50059E5DB1F248FA8A270CDC4788A03A0EC','RELEASED','2024-03-13 17:10:46',0),
+('2024_03_19_00_characters.sql','1D200630578074A4E3A373F891323DB867D00B02','RELEASED','2024-03-19 19:59:26',0);
/*!40000 ALTER TABLE `updates` ENABLE KEYS */;
UNLOCK TABLES;
diff --git a/sql/updates/characters/cata_classic/2024_03_19_00_characters.sql b/sql/updates/characters/cata_classic/2024_03_19_00_characters.sql
new file mode 100644
index 00000000000..f770c867236
--- /dev/null
+++ b/sql/updates/characters/cata_classic/2024_03_19_00_characters.sql
@@ -0,0 +1 @@
+ALTER TABLE `character_action` MODIFY `action` int unsigned NOT NULL DEFAULT 0;
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index fb2b8c0d78e..3c02bd2371d 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -6065,7 +6065,7 @@ void Player::SendActionButtons(uint32 state) const
SendDirectMessage(packet.Write());
}
-bool Player::IsActionButtonDataValid(uint8 button, uint64 action, uint8 type) const
+bool Player::IsActionButtonDataValid(uint8 button, uint32 action, uint8 type) const
{
if (button >= MAX_ACTION_BUTTONS)
{
@@ -6141,7 +6141,7 @@ bool Player::IsActionButtonDataValid(uint8 button, uint64 action, uint8 type) co
return true;
}
-ActionButton* Player::AddActionButton(uint8 button, uint64 action, uint8 type)
+ActionButton* Player::AddActionButton(uint8 button, uint32 action, uint8 type)
{
if (!IsActionButtonDataValid(button, action, type))
return nullptr;
@@ -18205,7 +18205,7 @@ void Player::_LoadActions(PreparedQueryResult result)
{
Field* fields = result->Fetch();
uint8 button = fields[0].GetUInt8();
- uint64 action = fields[1].GetUInt64();
+ uint32 action = fields[1].GetUInt32();
uint8 type = fields[2].GetUInt8();
if (ActionButton* ab = AddActionButton(button, action, type))
@@ -19999,7 +19999,7 @@ void Player::_SaveActions(CharacterDatabaseTransaction trans)
stmt->setUInt8(1, GetActiveTalentGroup());
stmt->setInt32(2, traitConfigId);
stmt->setUInt8(3, itr->first);
- stmt->setUInt64(4, itr->second.GetAction());
+ stmt->setUInt32(4, itr->second.GetAction());
stmt->setUInt8(5, uint8(itr->second.GetType()));
trans->Append(stmt);
@@ -20008,7 +20008,7 @@ void Player::_SaveActions(CharacterDatabaseTransaction trans)
break;
case ACTIONBUTTON_CHANGED:
stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_CHAR_ACTION);
- stmt->setUInt64(0, itr->second.GetAction());
+ stmt->setUInt32(0, itr->second.GetAction());
stmt->setUInt8(1, uint8(itr->second.GetType()));
stmt->setUInt64(2, GetGUID().GetCounter());
stmt->setUInt8(3, itr->first);
diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h
index f8079305193..8b496f0bb0f 100644
--- a/src/server/game/Entities/Player/Player.h
+++ b/src/server/game/Entities/Player/Player.h
@@ -310,9 +310,9 @@ enum ReputationSource
REPUTATION_SOURCE_SPELL
};
-#define ACTION_BUTTON_ACTION(X) (uint64(X) & 0x00FFFFFFFFFFFFFF)
-#define ACTION_BUTTON_TYPE(X) ((uint64(X) & 0xFF00000000000000) >> 56)
-#define MAX_ACTION_BUTTON_ACTION_VALUE UI64LIT(0xFFFFFFFFFFFFFF)
+#define ACTION_BUTTON_ACTION(X) (uint32(X) & 0x00FFFFFF)
+#define ACTION_BUTTON_TYPE(X) ((uint32(X) & 0xFF000000) >> 24)
+#define MAX_ACTION_BUTTON_ACTION_VALUE (0x00FFFFFF+1)
struct ActionButton
{
@@ -323,10 +323,10 @@ struct ActionButton
// helpers
ActionButtonType GetType() const { return ActionButtonType(ACTION_BUTTON_TYPE(packedData)); }
- uint64 GetAction() const { return ACTION_BUTTON_ACTION(packedData); }
- void SetActionAndType(uint64 action, ActionButtonType type)
+ uint32 GetAction() const { return ACTION_BUTTON_ACTION(packedData); }
+ void SetActionAndType(uint32 action, ActionButtonType type)
{
- uint64 newData = uint64(action) | (uint64(type) << 56);
+ uint32 newData = uint32(action) | (uint32(type) << 24);
if (newData != packedData || uState == ACTIONBUTTON_DELETED)
{
packedData = newData;
@@ -336,7 +336,7 @@ struct ActionButton
}
};
-#define MAX_ACTION_BUTTONS 180
+#define MAX_ACTION_BUTTONS 180 //checked in 4.4.0
typedef std::map<uint8, ActionButton> ActionButtonList;
@@ -1918,12 +1918,12 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
uint32 GetMovie() const { return m_movie; }
void SetMovie(uint32 movie) { m_movie = movie; }
- ActionButton* AddActionButton(uint8 button, uint64 action, uint8 type);
+ ActionButton* AddActionButton(uint8 button, uint32 action, uint8 type);
void RemoveActionButton(uint8 button);
ActionButton const* GetActionButton(uint8 button);
void SendInitialActionButtons() const { SendActionButtons(0); }
void SendActionButtons(uint32 state) const;
- bool IsActionButtonDataValid(uint8 button, uint64 action, uint8 type) const;
+ bool IsActionButtonDataValid(uint8 button, uint32 action, uint8 type) const;
void SetMultiActionBars(uint8 mask) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::MultiActionBars), mask); }
PvPInfo pvpInfo;
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp
index fcb0ed610ed..d67c146c2f2 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -748,8 +748,8 @@ void WorldSession::HandleRequestAccountData(WorldPackets::ClientConfig::RequestA
void WorldSession::HandleSetActionButtonOpcode(WorldPackets::Spells::SetActionButton& packet)
{
- uint64 action = ACTION_BUTTON_ACTION(packet.Action);
- uint8 type = ACTION_BUTTON_TYPE(packet.Action);
+ uint32 action = ACTION_BUTTON_ACTION(packet.Action);
+ uint32 type = ACTION_BUTTON_TYPE(packet.Action);
TC_LOG_DEBUG("network", "CMSG_SET_ACTION_BUTTON Button: {} Action: {} Type: {}", packet.Index, action, uint32(type));
diff --git a/src/server/game/Server/Packets/SpellPackets.h b/src/server/game/Server/Packets/SpellPackets.h
index 4d874db30cf..357487f92e4 100644
--- a/src/server/game/Server/Packets/SpellPackets.h
+++ b/src/server/game/Server/Packets/SpellPackets.h
@@ -141,7 +141,7 @@ namespace WorldPackets
void Read() override;
- uint64 Action = 0; ///< two packed values (action and type)
+ uint32 Action = 0; ///< two packed values (action and type)
uint8 Index = 0;
};