Skip to content

Commit

Permalink
[7368] Implement unequip unexpected offhand weapons at talent reset (…
Browse files Browse the repository at this point in the history
…mostly for warror talent case).

Signed-off-by: VladimirMangos <vladimir@getmangos.com>

Implemented OffhandCheckAtTalentsReset option for unequip at zone change (default)
and at talent reset itself (can be enabled).
  • Loading branch information
Lightguard authored and VladimirMangos committed Mar 1, 2009
1 parent 7a0d9a7 commit 02224f7
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 4 deletions.
25 changes: 22 additions & 3 deletions src/game/Player.cpp
Expand Up @@ -3342,6 +3342,13 @@ bool Player::resetTalents(bool no_cost)
//FIXME: remove pet before or after unlearn spells? for now after unlearn to allow removing of talent related, pet affecting auras
RemovePet(NULL,PET_SAVE_NOT_IN_SLOT, true);

if(m_canTitanGrip)
{
m_canTitanGrip = false;
if(sWorld.getConfig(CONFIG_OFFHAND_CHECK_AT_TALENTS_RESET))
AutoUnequipOffhandIfNeed();
}

return true;
}

Expand Down Expand Up @@ -6417,6 +6424,9 @@ void Player::UpdateZone(uint32 newZone)
if(isAlive())
DestroyZoneLimitedItem( true, newZone );

// check some item equip limitations (in result lost CanTitanGrip at talent reset, for example)
AutoUnequipOffhandIfNeed();

// recent client version not send leave/join channel packets for built-in local channels
UpdateLocalChannels( newZone );

Expand Down Expand Up @@ -18806,8 +18816,8 @@ void Player::AutoUnequipOffhandIfNeed()
if(!offItem)
return;

// need unequip for 2h-weapon without TitanGrip
if (!IsTwoHandUsed())
// need unequip offhand for 2h-weapon without TitanGrip (in any from hands)
if (CanTitanGrip() || (offItem->GetProto()->InventoryType != INVTYPE_2HWEAPON && !IsTwoHandUsed()))
return;

ItemPosCountVec off_dest;
Expand All @@ -18819,7 +18829,16 @@ void Player::AutoUnequipOffhandIfNeed()
}
else
{
sLog.outError("Player::EquipItem: Can's store offhand item at 2hand item equip for player (GUID: %u).",GetGUIDLow());
MailItemsInfo mi;
mi.AddItem(offItem->GetGUIDLow(), offItem->GetEntry(), offItem);
MoveItemFromInventory(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND, true);
CharacterDatabase.BeginTransaction();
offItem->DeleteFromInventoryDB(); // deletes item from character's inventory
offItem->SaveToDB(); // recursive and not have transaction guard into self, item not in inventory and can be save standalone
CharacterDatabase.CommitTransaction();

std::string subject = GetSession()->GetMangosString(LANG_NOT_EQUIPPED_ITEM);
WorldSession::SendMailTo(this, MAIL_NORMAL, MAIL_STATIONERY_GM, GetGUIDLow(), GetGUIDLow(), subject, 0, &mi, 0, 0, MAIL_CHECK_MASK_NONE);
}
}

Expand Down
2 changes: 2 additions & 0 deletions src/game/World.cpp
Expand Up @@ -940,6 +940,8 @@ void World::LoadConfigSettings(bool reload)
m_configs[CONFIG_ARENA_SEASON_ID] = sConfig.GetIntDefault ("Arena.ArenaSeason.ID", 1);
m_configs[CONFIG_ARENA_SEASON_IN_PROGRESS] = sConfig.GetBoolDefault("Arena.ArenaSeason.InProgress", true);

m_configs[CONFIG_OFFHAND_CHECK_AT_TALENTS_RESET] = sConfig.GetBoolDefault("OffhandCheckAtTalentsReset", false);

m_configs[CONFIG_INSTANT_LOGOUT] = sConfig.GetIntDefault("InstantLogout", SEC_MODERATOR);

m_VisibleUnitGreyDistance = sConfig.GetFloatDefault("Visibility.Distance.Grey.Unit", 1);
Expand Down
1 change: 1 addition & 0 deletions src/game/World.h
Expand Up @@ -195,6 +195,7 @@ enum WorldConfigs
CONFIG_ARENA_QUEUE_ANNOUNCER_ENABLE,
CONFIG_ARENA_SEASON_ID,
CONFIG_ARENA_SEASON_IN_PROGRESS,
CONFIG_OFFHAND_CHECK_AT_TALENTS_RESET,
CONFIG_VALUE_COUNT
};

Expand Down
6 changes: 6 additions & 0 deletions src/mangosd/mangosd.conf.dist.in
Expand Up @@ -546,6 +546,11 @@ LogColors = ""
# Default: 0 - no skilups
# 1 - skilups possible
#
# OffhandCheckAtTalentsReset
# Talent reset can change offhand weapon restrictions for equip slots.
# Default: 0 - recheck offhand slot weapon only at zone update
# 1 - recheck offhand slot weapon at talent reset also
#
# Event.Announce
# Default: 0 (false)
# 1 (true)
Expand Down Expand Up @@ -600,6 +605,7 @@ MaxGroupXPDistance = 74
MailDeliveryDelay = 3600
SkillChance.Prospecting = 0
SkillChance.Milling = 0
OffhandCheckAtTalentsReset = 0
Event.Announce = 0
BeepAtStart = 1
Motd = "Welcome to the Massive Network Game Object Server."
Expand Down
2 changes: 1 addition & 1 deletion src/shared/revision_nr.h
@@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__
#define __REVISION_NR_H__
#define REVISION_NR "7367"
#define REVISION_NR "7368"
#endif // __REVISION_NR_H__

0 comments on commit 02224f7

Please sign in to comment.