mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-18 14:10:18 -04:00
Core/Items: Removed reforging
This commit is contained in:
@@ -128,7 +128,6 @@ DBCStorage <ImportPriceQualityEntry> sImportPriceQualityStore(ImportPriceQu
|
||||
DBCStorage <ImportPriceShieldEntry> sImportPriceShieldStore(ImportPriceShieldfmt);
|
||||
DBCStorage <ImportPriceWeaponEntry> sImportPriceWeaponStore(ImportPriceWeaponfmt);
|
||||
DBCStorage <ItemPriceBaseEntry> sItemPriceBaseStore(ItemPriceBasefmt);
|
||||
DBCStorage <ItemReforgeEntry> sItemReforgeStore(ItemReforgefmt);
|
||||
DBCStorage <ItemArmorQualityEntry> sItemArmorQualityStore(ItemArmorQualityfmt);
|
||||
DBCStorage <ItemArmorShieldEntry> sItemArmorShieldStore(ItemArmorShieldfmt);
|
||||
DBCStorage <ItemArmorTotalEntry> sItemArmorTotalStore(ItemArmorTotalfmt);
|
||||
@@ -460,8 +459,6 @@ void LoadDBCStores(const std::string& dataPath)
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sImportPriceShieldStore, dbcPath, "ImportPriceShield.dbc"); // 19116
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sImportPriceWeaponStore, dbcPath, "ImportPriceWeapon.dbc"); // 19116
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sItemPriceBaseStore, dbcPath, "ItemPriceBase.dbc"); // 15595
|
||||
// TODO: 6.x remove all reforging stuff
|
||||
//LoadDBC(availableDbcLocales, bad_dbc_files, sItemReforgeStore, dbcPath, "ItemReforge.dbc"); // 19116
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sItemBagFamilyStore, dbcPath, "ItemBagFamily.dbc");//19116
|
||||
LoadDBC(availableDbcLocales, bad_dbc_files, sItemClassStore, dbcPath, "ItemClass.dbc"); // 19116
|
||||
//LoadDBC(dbcCount, availableDbcLocales, bad_dbc_files, sItemDisplayInfoStore, dbcPath, "ItemDisplayInfo.dbc"); -- not used currently
|
||||
@@ -1318,7 +1315,7 @@ std::list<uint32> GetSpellsForLevels(uint32 classId, uint32 raceMask, uint32 spe
|
||||
}
|
||||
if (spellInfo->SpellLevel <= minLevel || spellInfo->SpellLevel > maxLevel)
|
||||
continue;
|
||||
|
||||
|
||||
spellList.push_back(spellInfo->Id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,7 +189,6 @@ extern DBCStorage <ImportPriceQualityEntry> sImportPriceQualityStore;
|
||||
extern DBCStorage <ImportPriceShieldEntry> sImportPriceShieldStore;
|
||||
extern DBCStorage <ImportPriceWeaponEntry> sImportPriceWeaponStore;
|
||||
extern DBCStorage <ItemPriceBaseEntry> sItemPriceBaseStore;
|
||||
extern DBCStorage <ItemReforgeEntry> sItemReforgeStore;
|
||||
extern DBCStorage <ItemArmorQualityEntry> sItemArmorQualityStore;
|
||||
extern DBCStorage <ItemArmorShieldEntry> sItemArmorShieldStore;
|
||||
extern DBCStorage <ItemArmorTotalEntry> sItemArmorTotalStore;
|
||||
|
||||
@@ -1266,16 +1266,6 @@ struct ItemPriceBaseEntry
|
||||
float WeaponFactor; // 4 Price factor for weapons
|
||||
};
|
||||
|
||||
// 6.x - removeme
|
||||
struct ItemReforgeEntry
|
||||
{
|
||||
uint32 Id;
|
||||
uint32 SourceStat;
|
||||
float SourceMultiplier;
|
||||
uint32 FinalStat;
|
||||
float FinalMultiplier;
|
||||
};
|
||||
|
||||
// common struct for:
|
||||
// ItemDamageAmmo.dbc
|
||||
// ItemDamageOneHand.dbc
|
||||
|
||||
@@ -84,7 +84,6 @@ char const ImportPriceQualityfmt[] = "nf";
|
||||
char const ImportPriceShieldfmt[] = "nf";
|
||||
char const ImportPriceWeaponfmt[] = "nf";
|
||||
char const ItemPriceBasefmt[] = "diff";
|
||||
char const ItemReforgefmt[] = "nifif";
|
||||
char const ItemBagFamilyfmt[] = "nx";
|
||||
char const ItemArmorQualityfmt[] = "nfffffffi";
|
||||
char const ItemArmorShieldfmt[] = "nifffffff";
|
||||
|
||||
@@ -167,7 +167,6 @@ enum EnchantmentSlot
|
||||
BONUS_ENCHANTMENT_SLOT = 5,
|
||||
PRISMATIC_ENCHANTMENT_SLOT = 6, // added at apply special permanent enchantment
|
||||
//TODO: 7,
|
||||
REFORGE_ENCHANTMENT_SLOT = 8,
|
||||
TRANSMOGRIFY_ENCHANTMENT_SLOT = 9,
|
||||
MAX_INSPECTED_ENCHANTMENT_SLOT = 10,
|
||||
|
||||
|
||||
@@ -13341,257 +13341,10 @@ void Player::AddEnchantmentDuration(Item* item, EnchantmentSlot slot, uint32 dur
|
||||
}
|
||||
}
|
||||
|
||||
void Player::ApplyReforgeEnchantment(Item* item, bool apply)
|
||||
{
|
||||
if (!item)
|
||||
return;
|
||||
|
||||
ItemReforgeEntry const* reforge = sItemReforgeStore.LookupEntry(item->GetEnchantmentId(REFORGE_ENCHANTMENT_SLOT));
|
||||
if (!reforge)
|
||||
return;
|
||||
|
||||
float removeValue = item->GetReforgableStat(ItemModType(reforge->SourceStat)) * reforge->SourceMultiplier;
|
||||
float addValue = removeValue * reforge->FinalMultiplier;
|
||||
|
||||
switch (reforge->SourceStat)
|
||||
{
|
||||
case ITEM_MOD_MANA:
|
||||
HandleStatModifier(UNIT_MOD_MANA, BASE_VALUE, -removeValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_HEALTH:
|
||||
HandleStatModifier(UNIT_MOD_HEALTH, BASE_VALUE, -removeValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_AGILITY:
|
||||
HandleStatModifier(UNIT_MOD_STAT_AGILITY, TOTAL_VALUE, -removeValue, apply);
|
||||
ApplyStatBuffMod(STAT_AGILITY, -removeValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_STRENGTH:
|
||||
HandleStatModifier(UNIT_MOD_STAT_STRENGTH, TOTAL_VALUE, -removeValue, apply);
|
||||
ApplyStatBuffMod(STAT_STRENGTH, -removeValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_INTELLECT:
|
||||
HandleStatModifier(UNIT_MOD_STAT_INTELLECT, TOTAL_VALUE, -removeValue, apply);
|
||||
ApplyStatBuffMod(STAT_INTELLECT, -removeValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_SPIRIT:
|
||||
HandleStatModifier(UNIT_MOD_STAT_SPIRIT, TOTAL_VALUE, -removeValue, apply);
|
||||
ApplyStatBuffMod(STAT_SPIRIT, -removeValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_STAMINA:
|
||||
HandleStatModifier(UNIT_MOD_STAT_STAMINA, TOTAL_VALUE, -removeValue, apply);
|
||||
ApplyStatBuffMod(STAT_STAMINA, -removeValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_DEFENSE_SKILL_RATING:
|
||||
ApplyRatingMod(CR_DEFENSE_SKILL, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_DODGE_RATING:
|
||||
ApplyRatingMod(CR_DODGE, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_PARRY_RATING:
|
||||
ApplyRatingMod(CR_PARRY, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_BLOCK_RATING:
|
||||
ApplyRatingMod(CR_BLOCK, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_HIT_MELEE_RATING:
|
||||
ApplyRatingMod(CR_HIT_MELEE, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_HIT_RANGED_RATING:
|
||||
ApplyRatingMod(CR_HIT_RANGED, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_HIT_SPELL_RATING:
|
||||
ApplyRatingMod(CR_HIT_SPELL, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_CRIT_MELEE_RATING:
|
||||
ApplyRatingMod(CR_CRIT_MELEE, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_CRIT_RANGED_RATING:
|
||||
ApplyRatingMod(CR_CRIT_RANGED, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_CRIT_SPELL_RATING:
|
||||
ApplyRatingMod(CR_CRIT_SPELL, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_HASTE_SPELL_RATING:
|
||||
ApplyRatingMod(CR_HASTE_SPELL, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_HIT_RATING:
|
||||
ApplyRatingMod(CR_HIT_MELEE, -int32(removeValue), apply);
|
||||
ApplyRatingMod(CR_HIT_RANGED, -int32(removeValue), apply);
|
||||
ApplyRatingMod(CR_HIT_SPELL, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_CRIT_RATING:
|
||||
ApplyRatingMod(CR_CRIT_MELEE, -int32(removeValue), apply);
|
||||
ApplyRatingMod(CR_CRIT_RANGED, -int32(removeValue), apply);
|
||||
ApplyRatingMod(CR_CRIT_SPELL, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_RESILIENCE_RATING:
|
||||
ApplyRatingMod(CR_RESILIENCE_PLAYER_DAMAGE_TAKEN, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_HASTE_RATING:
|
||||
ApplyRatingMod(CR_HASTE_MELEE, -int32(removeValue), apply);
|
||||
ApplyRatingMod(CR_HASTE_RANGED, -int32(removeValue), apply);
|
||||
ApplyRatingMod(CR_HASTE_SPELL, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_EXPERTISE_RATING:
|
||||
ApplyRatingMod(CR_EXPERTISE, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_ATTACK_POWER:
|
||||
HandleStatModifier(UNIT_MOD_ATTACK_POWER, TOTAL_VALUE, -removeValue, apply);
|
||||
HandleStatModifier(UNIT_MOD_ATTACK_POWER_RANGED, TOTAL_VALUE, -removeValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_RANGED_ATTACK_POWER:
|
||||
HandleStatModifier(UNIT_MOD_ATTACK_POWER_RANGED, TOTAL_VALUE, -removeValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_MANA_REGENERATION:
|
||||
ApplyManaRegenBonus(-int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_ARMOR_PENETRATION_RATING:
|
||||
ApplyRatingMod(CR_ARMOR_PENETRATION, -int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_SPELL_POWER:
|
||||
ApplySpellPowerBonus(-int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_HEALTH_REGEN:
|
||||
ApplyHealthRegenBonus(-int32(removeValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_SPELL_PENETRATION:
|
||||
ApplyModInt32Value(PLAYER_FIELD_MOD_TARGET_RESISTANCE, -int32(removeValue), apply);
|
||||
m_spellPenetrationItemMod += apply ? -int32(removeValue) : int32(removeValue);
|
||||
break;
|
||||
case ITEM_MOD_BLOCK_VALUE:
|
||||
HandleBaseModValue(SHIELD_BLOCK_VALUE, FLAT_MOD, -removeValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_MASTERY_RATING:
|
||||
ApplyRatingMod(CR_MASTERY, -int32(removeValue), apply);
|
||||
break;
|
||||
}
|
||||
|
||||
switch (reforge->FinalStat)
|
||||
{
|
||||
case ITEM_MOD_MANA:
|
||||
HandleStatModifier(UNIT_MOD_MANA, BASE_VALUE, addValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_HEALTH:
|
||||
HandleStatModifier(UNIT_MOD_HEALTH, BASE_VALUE, addValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_AGILITY:
|
||||
HandleStatModifier(UNIT_MOD_STAT_AGILITY, TOTAL_VALUE, addValue, apply);
|
||||
ApplyStatBuffMod(STAT_AGILITY, addValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_STRENGTH:
|
||||
HandleStatModifier(UNIT_MOD_STAT_STRENGTH, TOTAL_VALUE, addValue, apply);
|
||||
ApplyStatBuffMod(STAT_STRENGTH, addValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_INTELLECT:
|
||||
HandleStatModifier(UNIT_MOD_STAT_INTELLECT, TOTAL_VALUE, addValue, apply);
|
||||
ApplyStatBuffMod(STAT_INTELLECT, addValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_SPIRIT:
|
||||
HandleStatModifier(UNIT_MOD_STAT_SPIRIT, TOTAL_VALUE, addValue, apply);
|
||||
ApplyStatBuffMod(STAT_SPIRIT, addValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_STAMINA:
|
||||
HandleStatModifier(UNIT_MOD_STAT_STAMINA, TOTAL_VALUE, addValue, apply);
|
||||
ApplyStatBuffMod(STAT_STAMINA, addValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_DEFENSE_SKILL_RATING:
|
||||
ApplyRatingMod(CR_DEFENSE_SKILL, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_DODGE_RATING:
|
||||
ApplyRatingMod(CR_DODGE, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_PARRY_RATING:
|
||||
ApplyRatingMod(CR_PARRY, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_BLOCK_RATING:
|
||||
ApplyRatingMod(CR_BLOCK, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_HIT_MELEE_RATING:
|
||||
ApplyRatingMod(CR_HIT_MELEE, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_HIT_RANGED_RATING:
|
||||
ApplyRatingMod(CR_HIT_RANGED, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_HIT_SPELL_RATING:
|
||||
ApplyRatingMod(CR_HIT_SPELL, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_CRIT_MELEE_RATING:
|
||||
ApplyRatingMod(CR_CRIT_MELEE, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_CRIT_RANGED_RATING:
|
||||
ApplyRatingMod(CR_CRIT_RANGED, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_CRIT_SPELL_RATING:
|
||||
ApplyRatingMod(CR_CRIT_SPELL, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_HASTE_SPELL_RATING:
|
||||
ApplyRatingMod(CR_HASTE_SPELL, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_HIT_RATING:
|
||||
ApplyRatingMod(CR_HIT_MELEE, int32(addValue), apply);
|
||||
ApplyRatingMod(CR_HIT_RANGED, int32(addValue), apply);
|
||||
ApplyRatingMod(CR_HIT_SPELL, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_CRIT_RATING:
|
||||
ApplyRatingMod(CR_CRIT_MELEE, int32(addValue), apply);
|
||||
ApplyRatingMod(CR_CRIT_RANGED, int32(addValue), apply);
|
||||
ApplyRatingMod(CR_CRIT_SPELL, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_RESILIENCE_RATING:
|
||||
ApplyRatingMod(CR_RESILIENCE_PLAYER_DAMAGE_TAKEN, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_HASTE_RATING:
|
||||
ApplyRatingMod(CR_HASTE_MELEE, int32(addValue), apply);
|
||||
ApplyRatingMod(CR_HASTE_RANGED, int32(addValue), apply);
|
||||
ApplyRatingMod(CR_HASTE_SPELL, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_EXPERTISE_RATING:
|
||||
ApplyRatingMod(CR_EXPERTISE, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_ATTACK_POWER:
|
||||
HandleStatModifier(UNIT_MOD_ATTACK_POWER, TOTAL_VALUE, addValue, apply);
|
||||
HandleStatModifier(UNIT_MOD_ATTACK_POWER_RANGED, TOTAL_VALUE, addValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_RANGED_ATTACK_POWER:
|
||||
HandleStatModifier(UNIT_MOD_ATTACK_POWER_RANGED, TOTAL_VALUE, addValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_MANA_REGENERATION:
|
||||
ApplyManaRegenBonus(int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_ARMOR_PENETRATION_RATING:
|
||||
ApplyRatingMod(CR_ARMOR_PENETRATION, int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_SPELL_POWER:
|
||||
ApplySpellPowerBonus(int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_HEALTH_REGEN:
|
||||
ApplyHealthRegenBonus(int32(addValue), apply);
|
||||
break;
|
||||
case ITEM_MOD_SPELL_PENETRATION:
|
||||
ApplyModInt32Value(PLAYER_FIELD_MOD_TARGET_RESISTANCE, int32(addValue), apply);
|
||||
m_spellPenetrationItemMod += apply ? int32(addValue) : -int32(addValue);
|
||||
break;
|
||||
case ITEM_MOD_BLOCK_VALUE:
|
||||
HandleBaseModValue(SHIELD_BLOCK_VALUE, FLAT_MOD, addValue, apply);
|
||||
break;
|
||||
case ITEM_MOD_MASTERY_RATING:
|
||||
ApplyRatingMod(CR_MASTERY, int32(addValue), apply);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Player::ApplyEnchantment(Item* item, bool apply)
|
||||
{
|
||||
for (uint32 slot = 0; slot < MAX_ENCHANTMENT_SLOT; ++slot)
|
||||
{
|
||||
// Apply reforge as last enchant
|
||||
if (slot == REFORGE_ENCHANTMENT_SLOT)
|
||||
continue;
|
||||
|
||||
ApplyEnchantment(item, EnchantmentSlot(slot), apply);
|
||||
}
|
||||
|
||||
ApplyEnchantment(item, REFORGE_ENCHANTMENT_SLOT, apply);
|
||||
}
|
||||
|
||||
void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool apply_dur, bool ignore_condition)
|
||||
@@ -13605,12 +13358,6 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
|
||||
if (slot == TRANSMOGRIFY_ENCHANTMENT_SLOT)
|
||||
return;
|
||||
|
||||
if (slot == REFORGE_ENCHANTMENT_SLOT)
|
||||
{
|
||||
ApplyReforgeEnchantment(item, apply);
|
||||
return;
|
||||
}
|
||||
|
||||
uint32 enchant_id = item->GetEnchantmentId(slot);
|
||||
if (!enchant_id)
|
||||
return;
|
||||
@@ -13954,7 +13701,7 @@ void Player::ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool
|
||||
// visualize enchantment at player and equipped items
|
||||
if (slot == PERM_ENCHANTMENT_SLOT)
|
||||
SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (item->GetSlot() * 3), 0, apply ? item->GetEnchantmentId(slot) : 0);
|
||||
|
||||
|
||||
if (slot == TEMP_ENCHANTMENT_SLOT)
|
||||
SetUInt16Value(PLAYER_VISIBLE_ITEM + VISIBLE_ITEM_ENCHANTMENT_OFFSET + (item->GetSlot() * 3), 1, apply ? item->GetEnchantmentId(slot) : 0);
|
||||
|
||||
@@ -19183,12 +18930,12 @@ void Player::SaveToDB(bool create /*=false*/)
|
||||
ss << item->GetEntry();
|
||||
else
|
||||
ss << '0';
|
||||
ss << " 0 ";
|
||||
ss << " 0 0 ";
|
||||
}
|
||||
stmt->setString(index++, ss.str());
|
||||
|
||||
ss.str("");
|
||||
for (uint32 i = 0; i < KNOWN_TITLES_SIZE*2; ++i)
|
||||
for (uint32 i = 0; i < KNOWN_TITLES_SIZE * 2; ++i)
|
||||
ss << GetUInt32Value(PLAYER__FIELD_KNOWN_TITLES + i) << ' ';
|
||||
stmt->setString(index++, ss.str());
|
||||
|
||||
@@ -19312,7 +19059,7 @@ void Player::SaveToDB(bool create /*=false*/)
|
||||
ss << item->GetEntry();
|
||||
else
|
||||
ss << '0';
|
||||
ss << " 0 ";
|
||||
ss << " 0 0 ";
|
||||
}
|
||||
|
||||
stmt->setString(index++, ss.str());
|
||||
|
||||
@@ -1545,7 +1545,6 @@ class Player : public Unit, public GridObject<Player>
|
||||
void AddEnchantmentDuration(Item* item, EnchantmentSlot slot, uint32 duration);
|
||||
void ApplyEnchantment(Item* item, EnchantmentSlot slot, bool apply, bool apply_dur = true, bool ignore_condition = false);
|
||||
void ApplyEnchantment(Item* item, bool apply);
|
||||
void ApplyReforgeEnchantment(Item* item, bool apply);
|
||||
void UpdateSkillEnchantments(uint16 skill_id, uint16 curr_value, uint16 new_value);
|
||||
void SendEnchantmentDurations();
|
||||
void BuildEnchantmentsInfoData(WorldPacket* data);
|
||||
|
||||
@@ -1534,111 +1534,6 @@ void WorldSession::HandleTransmogrifyItems(WorldPacket& recvData)
|
||||
}
|
||||
}
|
||||
|
||||
void WorldSession::SendReforgeResult(bool success)
|
||||
{
|
||||
WorldPacket data(SMSG_REFORGE_RESULT, 1);
|
||||
data.WriteBit(success);
|
||||
data.FlushBits();
|
||||
SendPacket(&data);
|
||||
}
|
||||
|
||||
void WorldSession::HandleReforgeItemOpcode(WorldPacket& recvData)
|
||||
{
|
||||
uint32 slot, reforgeEntry;
|
||||
ObjectGuid guid;
|
||||
uint32 bag;
|
||||
Player* player = GetPlayer();
|
||||
|
||||
recvData >> reforgeEntry >> slot >> bag;
|
||||
|
||||
guid[2] = recvData.ReadBit();
|
||||
guid[6] = recvData.ReadBit();
|
||||
guid[3] = recvData.ReadBit();
|
||||
guid[4] = recvData.ReadBit();
|
||||
guid[1] = recvData.ReadBit();
|
||||
guid[0] = recvData.ReadBit();
|
||||
guid[7] = recvData.ReadBit();
|
||||
guid[5] = recvData.ReadBit();
|
||||
|
||||
recvData.ReadByteSeq(guid[2]);
|
||||
recvData.ReadByteSeq(guid[3]);
|
||||
recvData.ReadByteSeq(guid[6]);
|
||||
recvData.ReadByteSeq(guid[4]);
|
||||
recvData.ReadByteSeq(guid[1]);
|
||||
recvData.ReadByteSeq(guid[0]);
|
||||
recvData.ReadByteSeq(guid[7]);
|
||||
recvData.ReadByteSeq(guid[5]);
|
||||
|
||||
if (!player->GetNPCIfCanInteractWith(guid, UNIT_NPC_FLAG_REFORGER))
|
||||
{
|
||||
TC_LOG_DEBUG("network", "WORLD: HandleReforgeItemOpcode - %s not found or player can't interact with it.", guid.ToString().c_str());
|
||||
SendReforgeResult(false);
|
||||
return;
|
||||
}
|
||||
|
||||
Item* item = player->GetItemByPos(bag, slot);
|
||||
|
||||
if (!item)
|
||||
{
|
||||
TC_LOG_DEBUG("network", "WORLD: HandleReforgeItemOpcode - Player (%s Name: %s) tried to reforge an invalid/non-existant item.", player->GetGUID().ToString().c_str(), player->GetName().c_str());
|
||||
SendReforgeResult(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!reforgeEntry)
|
||||
{
|
||||
if (!item->GetEnchantmentId(REFORGE_ENCHANTMENT_SLOT))
|
||||
{
|
||||
TC_LOG_ERROR("network", "WORLD: HandleReforgeItemOpcode - Player (%s Name: %s) tried to remove reforge from non-reforged item (Entry: %u)", player->GetGUID().ToString().c_str(), player->GetName().c_str(), item->GetEntry());
|
||||
SendReforgeResult(false);
|
||||
return;
|
||||
}
|
||||
|
||||
// Reset the item
|
||||
if (item->IsEquipped())
|
||||
player->ApplyReforgeEnchantment(item, false);
|
||||
item->ClearEnchantment(REFORGE_ENCHANTMENT_SLOT);
|
||||
SendReforgeResult(true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (item->GetEnchantmentId(REFORGE_ENCHANTMENT_SLOT))
|
||||
{
|
||||
TC_LOG_ERROR("network", "WORLD: HandleReforgeItemOpcode - Player (%s Name: %s) tried to reforge an already reforged item (Entry: %u)", player->GetGUID().ToString().c_str(), player->GetName().c_str(), item->GetEntry());
|
||||
SendReforgeResult(false);
|
||||
return;
|
||||
}
|
||||
|
||||
ItemReforgeEntry const* stats = sItemReforgeStore.LookupEntry(reforgeEntry);
|
||||
if (!stats)
|
||||
{
|
||||
TC_LOG_DEBUG("network", "WORLD: HandleReforgeItemOpcode - Player (%s Name: %s) tried to reforge an item with invalid reforge entry (%u).", player->GetGUID().ToString().c_str(), player->GetName().c_str(), reforgeEntry);
|
||||
SendReforgeResult(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!item->GetReforgableStat(ItemModType(stats->SourceStat)) || item->GetReforgableStat(ItemModType(stats->FinalStat))) // Cheating, you cant reforge to a stat that the item already has, nor reforge from a stat that the item does not have
|
||||
{
|
||||
SendReforgeResult(false);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!player->HasEnoughMoney(uint64(item->GetSpecialPrice()))) // cheating
|
||||
{
|
||||
SendReforgeResult(false);
|
||||
return;
|
||||
}
|
||||
|
||||
player->ModifyMoney(-int64(item->GetSpecialPrice()));
|
||||
|
||||
item->SetEnchantment(REFORGE_ENCHANTMENT_SLOT, reforgeEntry, 0, 0);
|
||||
|
||||
SendReforgeResult(true);
|
||||
|
||||
if (item->IsEquipped())
|
||||
player->ApplyReforgeEnchantment(item, true);
|
||||
}
|
||||
|
||||
bool WorldSession::CanUseBank(ObjectGuid bankerGUID) const
|
||||
{
|
||||
// bankerGUID parameter is optional, set to 0 by default.
|
||||
|
||||
@@ -153,7 +153,6 @@ void WorldSession::SendUpdateTrade(bool trader_data /*= true*/)
|
||||
itemData.WriteByteSeq(creatorGuid[7]);
|
||||
itemData.WriteByteSeq(creatorGuid[4]);
|
||||
|
||||
itemData << uint32(item->GetEnchantmentId(REFORGE_ENCHANTMENT_SLOT));
|
||||
itemData << uint32(item->GetUInt32Value(ITEM_FIELD_DURABILITY));
|
||||
itemData << uint32(item->GetItemRandomPropertyId());
|
||||
|
||||
|
||||
@@ -554,7 +554,6 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_REALM_SPLIT, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleRealmSplitOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_RECLAIM_CORPSE, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleReclaimCorpseOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_RECRUIT_A_FRIEND, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::Handle_NULL );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_REFORGE_ITEM, STATUS_UNHANDLED, PROCESS_INPLACE, &WorldSession::HandleReforgeItemOpcode );
|
||||
DEFINE_HANDLER(CMSG_REORDER_CHARACTERS, STATUS_AUTHED, PROCESS_THREADUNSAFE, WorldPackets::Character::ReorderCharacters, &WorldSession::HandleReorderCharacters);
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_REPAIR_ITEM, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleRepairItemOpcode );
|
||||
DEFINE_OPCODE_HANDLER_OLD(CMSG_REPOP_REQUEST, STATUS_UNHANDLED, PROCESS_THREADUNSAFE, &WorldSession::HandleRepopRequestOpcode );
|
||||
@@ -1257,7 +1256,6 @@ void OpcodeTable::Initialize()
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REDIRECT_CLIENT, STATUS_NEVER, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFER_A_FRIEND_EXPIRED, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFER_A_FRIEND_FAILURE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFORGE_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REFRESH_SPELL_HISTORY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REMOVED_SPELL, STATUS_NEVER, CONNECTION_TYPE_INSTANCE);
|
||||
DEFINE_SERVER_OPCODE_HANDLER(SMSG_REPORT_PVP_AFK_RESULT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
|
||||
|
||||
@@ -503,7 +503,6 @@ enum OpcodeClient : uint32
|
||||
CMSG_REALM_SPLIT = 0xBADD,
|
||||
CMSG_RECLAIM_CORPSE = 0xBADD,
|
||||
CMSG_RECRUIT_A_FRIEND = 0x07BA,
|
||||
CMSG_REFORGE_ITEM = 0xBADD,
|
||||
CMSG_REORDER_CHARACTERS = 0x0DAA,
|
||||
CMSG_REPAIR_ITEM = 0x0B54,
|
||||
CMSG_REPLACE_ACCOUNT_DATA = 0xBADD,
|
||||
@@ -1269,7 +1268,6 @@ enum OpcodeServer : uint32
|
||||
SMSG_REDIRECT_CLIENT = 0x175A,
|
||||
SMSG_REFER_A_FRIEND_EXPIRED = 0xBADD,
|
||||
SMSG_REFER_A_FRIEND_FAILURE = 0xBADD,
|
||||
SMSG_REFORGE_RESULT = 0xBADD,
|
||||
SMSG_REFRESH_SPELL_HISTORY = 0x0A2A,
|
||||
SMSG_REMOVED_SPELL = 0x0B3B,
|
||||
SMSG_REPORT_PVP_AFK_RESULT = 0xBADD,
|
||||
|
||||
@@ -1126,10 +1126,6 @@ class WorldSession
|
||||
// Transmogrification
|
||||
void HandleTransmogrifyItems(WorldPacket& recvData);
|
||||
|
||||
// Reforge
|
||||
void HandleReforgeItemOpcode(WorldPacket& recvData);
|
||||
void SendReforgeResult(bool success);
|
||||
|
||||
// Miscellaneous
|
||||
void HandleSpellClick(WorldPacket& recvData);
|
||||
void HandleMirrorImageDataRequest(WorldPacket& recvData);
|
||||
|
||||
Reference in New Issue
Block a user