Core/Items: Implemented item upgrades

Closes #17432
This commit is contained in:
frozen4
2016-06-21 20:33:51 +02:00
committed by Shauren
parent 5f2c62392c
commit ed00534e7c
14 changed files with 194 additions and 5 deletions

View File

@@ -1292,3 +1292,65 @@ void WorldSession::HandleUseCritterItem(WorldPackets::Item::UseCritterItem& useC
GetBattlePetMgr()->AddPet(battlePetSpecies->ID, battlePetSpecies->CreatureID, BattlePetMgr::RollPetBreed(battlePetSpecies->ID), BattlePetMgr::GetDefaultPetQuality(battlePetSpecies->ID));
_player->DestroyItem(item->GetBagSlot(), item->GetSlot(), true);
}
void WorldSession::HandleUpgradeItem(WorldPackets::Item::UpgradeItem& upgradeItem)
{
WorldPackets::Item::ItemUpgradeResult itemUpgradeResult;
if (!_player->GetNPCIfCanInteractWith(upgradeItem.ItemMaster, UNIT_NPC_FLAG_ITEM_UPGRADE_MASTER))
{
TC_LOG_DEBUG("network", "WORLD: HandleUpgradeItems - %s not found or player can't interact with it.", upgradeItem.ItemMaster.ToString().c_str());
itemUpgradeResult.Success = false;
SendPacket(itemUpgradeResult.Write());
return;
}
Item* item = _player->GetItemByGuid(upgradeItem.ItemGUID);
if (!item)
{
TC_LOG_DEBUG("network", "WORLD: HandleUpgradeItems: Item %s not found!", upgradeItem.ItemGUID.ToString().c_str());
itemUpgradeResult.Success = false;
SendPacket(itemUpgradeResult.Write());
return;
}
ItemUpgradeEntry const* itemUpgradeEntry = sItemUpgradeStore.LookupEntry(upgradeItem.UpgradeID);
if (!itemUpgradeEntry)
{
TC_LOG_DEBUG("network", "WORLD: HandleUpgradeItems - ItemUpgradeEntry (%u) not found.", upgradeItem.UpgradeID);
itemUpgradeResult.Success = false;
SendPacket(itemUpgradeResult.Write());
return;
}
// Check if player has enough currency
if (!_player->HasCurrency(itemUpgradeEntry->CurrencyID, itemUpgradeEntry->CurrencyCost))
{
TC_LOG_DEBUG("network", "WORLD: HandleUpgradeItems - Player has not enougth currency (ID: %u, Cost: %u) not found.", itemUpgradeEntry->CurrencyID, itemUpgradeEntry->CurrencyCost);
itemUpgradeResult.Success = false;
SendPacket(itemUpgradeResult.Write());
return;
}
uint32 currentUpgradeId = item->GetModifier(ITEM_MODIFIER_UPGRADE_ID);
if (currentUpgradeId != itemUpgradeEntry->PrevItemUpgradeID)
{
TC_LOG_DEBUG("network", "WORLD: HandleUpgradeItems - ItemUpgradeEntry (%u) is not related to this ItemUpgradePath (%u).", itemUpgradeEntry->ID, currentUpgradeId);
itemUpgradeResult.Success = false;
SendPacket(itemUpgradeResult.Write());
return;
}
itemUpgradeResult.Success = true;
SendPacket(itemUpgradeResult.Write());
if (item->IsEquipped())
_player->_ApplyItemBonuses(item, item->GetSlot(), false);
item->SetModifier(ITEM_MODIFIER_UPGRADE_ID, itemUpgradeEntry->ID);
if (item->IsEquipped())
_player->_ApplyItemBonuses(item, item->GetSlot(), true);
item->SetState(ITEM_CHANGED, _player);
_player->ModifyCurrency(itemUpgradeEntry->CurrencyID, -int32(itemUpgradeEntry->CurrencyCost));
}