From ee0be25d0bf98a0d29653d71845087e37f4df59e Mon Sep 17 00:00:00 2001 From: Pedro Henrique Alves Cruz Date: Mon, 21 Oct 2024 12:45:53 -0300 Subject: [PATCH 1/3] fix: forge cores comsumption --- src/creatures/players/player.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/creatures/players/player.cpp b/src/creatures/players/player.cpp index 27e113b852b..46c7ddfbc74 100644 --- a/src/creatures/players/player.cpp +++ b/src/creatures/players/player.cpp @@ -7477,7 +7477,9 @@ void Player::forgeTransferItemTier(ForgeAction_t actionType, uint16_t donorItemI sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR); break; } - auto tierPriecs = itemClassification->tiers.at(donorItem->getTier()); + + const uint8_t toTier = convergence ? donorItem->getTier() : donorItem->getTier() - 1; + auto tierPriecs = itemClassification->tiers.at(toTier); cost = convergence ? tierPriecs.convergenceTransferPrice : tierPriecs.regularPrice; coresAmount = tierPriecs.corePrice; break; From ceb65fd823c395a27ee670fc50728721b135945c Mon Sep 17 00:00:00 2001 From: Pedro Henrique Alves Cruz Date: Mon, 21 Oct 2024 16:21:10 -0300 Subject: [PATCH 2/3] fix: bytes reading error --- src/server/network/protocol/protocolgame.cpp | 21 ++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/server/network/protocol/protocolgame.cpp b/src/server/network/protocol/protocolgame.cpp index e924b489c25..0a39d681915 100644 --- a/src/server/network/protocol/protocolgame.cpp +++ b/src/server/network/protocol/protocolgame.cpp @@ -5596,13 +5596,22 @@ void ProtocolGame::parseForgeEnter(NetworkMessage &msg) { // 0xBF -> 0 = fusion, 1 = transfer, 2 = dust to sliver, 3 = sliver to core, 4 = increase dust limit auto actionType = static_cast(msg.getByte()); - bool convergence = msg.getByte(); - uint16_t firstItem = msg.get(); - uint8_t tier = msg.getByte(); - uint16_t secondItem = msg.get(); - bool usedCore = msg.getByte(); - bool reduceTierLoss = msg.getByte(); + + bool convergence = false; + uint16_t firstItem = 0; + uint8_t tier = 0; + uint16_t secondItem = 0; + + if (actionType == ForgeAction_t::FUSION || actionType == ForgeAction_t::TRANSFER) { + convergence = msg.getByte(); + firstItem = msg.get(); + tier = msg.getByte(); + secondItem = msg.get(); + } + if (actionType == ForgeAction_t::FUSION) { + bool usedCore = convergence ? false : msg.getByte(); + bool reduceTierLoss = convergence ? false : msg.getByte(); g_game().playerForgeFuseItems(player->getID(), actionType, firstItem, tier, secondItem, usedCore, reduceTierLoss, convergence); } else if (actionType == ForgeAction_t::TRANSFER) { g_game().playerForgeTransferItemTier(player->getID(), actionType, firstItem, tier, secondItem, convergence); From b182b8099e5154fbfdfc8e4fbdfd41156d69e13b Mon Sep 17 00:00:00 2001 From: Pedro Henrique Alves Cruz Date: Mon, 21 Oct 2024 16:47:07 -0300 Subject: [PATCH 3/3] fix: using consts --- src/server/network/protocol/protocolgame.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/server/network/protocol/protocolgame.cpp b/src/server/network/protocol/protocolgame.cpp index 0a39d681915..ae67bad447f 100644 --- a/src/server/network/protocol/protocolgame.cpp +++ b/src/server/network/protocol/protocolgame.cpp @@ -5595,7 +5595,7 @@ void ProtocolGame::parseForgeEnter(NetworkMessage &msg) { } // 0xBF -> 0 = fusion, 1 = transfer, 2 = dust to sliver, 3 = sliver to core, 4 = increase dust limit - auto actionType = static_cast(msg.getByte()); + const auto actionType = static_cast(msg.getByte()); bool convergence = false; uint16_t firstItem = 0; @@ -5610,8 +5610,8 @@ void ProtocolGame::parseForgeEnter(NetworkMessage &msg) { } if (actionType == ForgeAction_t::FUSION) { - bool usedCore = convergence ? false : msg.getByte(); - bool reduceTierLoss = convergence ? false : msg.getByte(); + const bool usedCore = convergence ? false : msg.getByte(); + const bool reduceTierLoss = convergence ? false : msg.getByte(); g_game().playerForgeFuseItems(player->getID(), actionType, firstItem, tier, secondItem, usedCore, reduceTierLoss, convergence); } else if (actionType == ForgeAction_t::TRANSFER) { g_game().playerForgeTransferItemTier(player->getID(), actionType, firstItem, tier, secondItem, convergence);