Skip to content

Commit

Permalink
* Fix forge fuse and transfer check
Browse files Browse the repository at this point in the history
  • Loading branch information
jprzimba committed Dec 21, 2024
1 parent 8982bfe commit d61b1dd
Showing 1 changed file with 55 additions and 39 deletions.
94 changes: 55 additions & 39 deletions src/creatures/players/player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8958,55 +8958,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 @@ -9173,7 +9182,7 @@ void Player::forgeFuseItems(ForgeAction_t actionType, uint16_t firstItemId, uint

returnValue = g_game().internalAddItem(static_self_cast<Player>(), exaltationContainer, INDEX_WHEREEVER);
if (returnValue != RETURNVALUE_NOERROR) {
g_logger().error("Failed to add exaltation chest to player with name {}", getName());
g_logger().error("Failed to add exaltation chest to player with name {}", fmt::underlying(ITEM_EXALTATION_CHEST), getName());
sendCancelMessage(getReturnMessage(returnValue));
sendForgeError(RETURNVALUE_CONTACTADMINISTRATOR);
return;
Expand All @@ -9200,13 +9209,33 @@ 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) {
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 @@ -9228,19 +9257,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 d61b1dd

Please sign in to comment.