aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/Player.cpp25
-rw-r--r--src/game/World.cpp2
-rw-r--r--src/game/World.h1
-rw-r--r--src/mangosd/mangosd.conf.dist.in6
-rw-r--r--src/shared/revision_nr.h2
5 files changed, 32 insertions, 4 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index 83047741625..a8b5becff99 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -3443,6 +3443,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;
}
@@ -6575,6 +6582,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 );
@@ -19366,8 +19376,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;
@@ -19379,7 +19389,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);
}
}
diff --git a/src/game/World.cpp b/src/game/World.cpp
index 25cf3c1d85e..ff1e5f616a7 100644
--- a/src/game/World.cpp
+++ b/src/game/World.cpp
@@ -951,6 +951,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);
diff --git a/src/game/World.h b/src/game/World.h
index 02577e5e767..f8a587e7edd 100644
--- a/src/game/World.h
+++ b/src/game/World.h
@@ -215,6 +215,7 @@ enum WorldConfigs
CONFIG_INTERVAL_LOG_UPDATE,
CONFIG_MIN_LOG_UPDATE,
CONFIG_ENABLE_SINFO_LOGIN,
+ CONFIG_OFFHAND_CHECK_AT_TALENTS_RESET,
CONFIG_VALUE_COUNT
};
diff --git a/src/mangosd/mangosd.conf.dist.in b/src/mangosd/mangosd.conf.dist.in
index ee07906372c..1dc5605bb24 100644
--- a/src/mangosd/mangosd.conf.dist.in
+++ b/src/mangosd/mangosd.conf.dist.in
@@ -566,6 +566,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)
@@ -626,6 +631,7 @@ MaxGroupXPDistance = 74
MailDeliveryDelay = 3600
SkillChance.Prospecting = 0
SkillChance.Milling = 0
+OffhandCheckAtTalentsReset = 0
Event.Announce = 0
BeepAtStart = 1
Motd = "Welcome to a Trinity Core server."
diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h
index 926ee348538..e7c5ed337c3 100644
--- a/src/shared/revision_nr.h
+++ b/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__