Skip to content

Commit

Permalink
fix: forge fuse and transfer check queryAdd
Browse files Browse the repository at this point in the history
  • Loading branch information
dudantas committed Dec 21, 2024
1 parent 34b6fa8 commit 270a643
Showing 1 changed file with 55 additions and 38 deletions.
93 changes: 55 additions & 38 deletions src/creatures/players/player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8858,55 +8858,64 @@ void Player::forgeFuseItems(ForgeAction_t actionType, uint16_t firstItemId, uint
history.success = success;
history.tierLoss = reduceTierLoss;

const auto &firstForgingItem = getForgeItemFromId(firstItemId, tier);
if (!firstForgingItem) {
g_logger().error("[Log 1] Player with name {} failed to fuse item with id {}", getName(), firstItemId);
const auto &exaltationChest = Item::CreateItem(ITEM_EXALTATION_CHEST, 1);
if (!exaltationChest) {
g_logger().error("Failed to create exaltation chest");
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
}
const auto &exaltationContainer = exaltationChest->getContainer();
if (!exaltationContainer) {
g_logger().error("Failed to create exaltation container");
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
}
auto returnValue = g_game().internalRemoveItem(firstForgingItem, 1);

auto returnValue = queryAdd(CONST_SLOT_BACKPACK, exaltationContainer, 1, 0);
if (returnValue != RETURNVALUE_NOERROR) {
g_logger().error("[Log 1] Failed to remove forge item {} from player with name {}", firstItemId, getName());
g_logger().error("[Log 1] Failed to add forge item {} from player with name {}", firstItemId, getName());
sendCancelMessage(getReturnMessage(returnValue));
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
}
const auto &secondForgingItem = getForgeItemFromId(secondItemId, tier);
if (!secondForgingItem) {
g_logger().error("[Log 2] Player with name {} failed to fuse item with id {}", getName(), secondItemId);

const auto &firstForgedItem = Item::CreateItem(firstItemId, 1);
if (!firstForgedItem) {
g_logger().error("[Log 3] Player with name {} failed to fuse item with id {}", getName(), firstItemId);
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
}
if (returnValue = g_game().internalRemoveItem(secondForgingItem, 1);
returnValue != RETURNVALUE_NOERROR) {
g_logger().error("[Log 2] Failed to remove forge item {} from player with name {}", secondItemId, getName());

returnValue = g_game().internalAddItem(exaltationContainer, firstForgedItem, INDEX_WHEREEVER);
if (returnValue != RETURNVALUE_NOERROR) {
g_logger().error("[Log 1] Failed to add forge item {} from player with name {}", firstItemId, getName());
sendCancelMessage(getReturnMessage(returnValue));
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
}

const auto &exaltationChest = Item::CreateItem(ITEM_EXALTATION_CHEST, 1);
if (!exaltationChest) {
g_logger().error("Failed to create exaltation chest");
const auto &firstForgingItem = getForgeItemFromId(firstItemId, tier);
if (!firstForgingItem) {
g_logger().error("[Log 1] Player with name {} failed to fuse item with id {}", getName(), firstItemId);
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
}
const auto &exaltationContainer = exaltationChest->getContainer();
if (!exaltationContainer) {
g_logger().error("Failed to create exaltation container");
returnValue = g_game().internalRemoveItem(firstForgingItem, 1);
if (returnValue != RETURNVALUE_NOERROR) {
g_logger().error("[Log 1] Failed to remove forge item {} from player with name {}", firstItemId, getName());
sendCancelMessage(getReturnMessage(returnValue));
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
}

const auto &firstForgedItem = Item::CreateItem(firstItemId, 1);
if (!firstForgedItem) {
g_logger().error("[Log 3] Player with name {} failed to fuse item with id {}", getName(), firstItemId);
const auto &secondForgingItem = getForgeItemFromId(secondItemId, tier);
if (!secondForgingItem) {
g_logger().error("[Log 2] Player with name {} failed to fuse item with id {}", getName(), secondItemId);
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
}
returnValue = g_game().internalAddItem(exaltationContainer, firstForgedItem, INDEX_WHEREEVER);
if (returnValue != RETURNVALUE_NOERROR) {
g_logger().error("[Log 1] Failed to add forge item {} from player with name {}", firstItemId, getName());
if (returnValue = g_game().internalRemoveItem(secondForgingItem, 1);
returnValue != RETURNVALUE_NOERROR) {
g_logger().error("[Log 2] Failed to remove forge item {} from player with name {}", secondItemId, getName());
sendCancelMessage(getReturnMessage(returnValue));
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
Expand Down Expand Up @@ -9100,13 +9109,34 @@ void Player::forgeTransferItemTier(ForgeAction_t actionType, uint16_t donorItemI
history.tier = tier;
history.success = true;

const auto &exaltationChest = Item::CreateItem(ITEM_EXALTATION_CHEST, 1);
if (!exaltationChest) {
g_logger().error("Exaltation chest is nullptr");
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
}
const auto &exaltationContainer = exaltationChest->getContainer();
if (!exaltationContainer) {
g_logger().error("Exaltation container is nullptr");
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
}

auto returnValue = queryAdd(CONST_SLOT_BACKPACK, exaltationContainer, 1, 0);
if (returnValue != RETURNVALUE_NOERROR) {
g_logger().error("[Log 1] Failed to add forge item {} from player with name {}", donorItemId, getName());
sendCancelMessage(getReturnMessage(returnValue));
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
}

const auto &donorItem = getForgeItemFromId(donorItemId, tier);
if (!donorItem) {
g_logger().error("[Log 1] Player with name {} failed to transfer item with id {}", getName(), donorItemId);
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
}
auto returnValue = g_game().internalRemoveItem(donorItem, 1);
returnValue = g_game().internalRemoveItem(donorItem, 1);
if (returnValue != RETURNVALUE_NOERROR) {
g_logger().error("[Log 1] Failed to remove transfer item {} from player with name {}", donorItemId, getName());
sendCancelMessage(getReturnMessage(returnValue));
Expand All @@ -9128,19 +9158,6 @@ void Player::forgeTransferItemTier(ForgeAction_t actionType, uint16_t donorItemI
return;
}

const auto &exaltationChest = Item::CreateItem(ITEM_EXALTATION_CHEST, 1);
if (!exaltationChest) {
g_logger().error("Exaltation chest is nullptr");
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
}
const auto &exaltationContainer = exaltationChest->getContainer();
if (!exaltationContainer) {
g_logger().error("Exaltation container is nullptr");
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
}

const auto &newReceiveItem = Item::CreateItem(receiveItemId, 1);
if (!newReceiveItem) {
g_logger().error("[Log 6] Player with name {} failed to fuse item with id {}", getName(), receiveItemId);
Expand Down

0 comments on commit 270a643

Please sign in to comment.