aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/7770_world_item_required_target.sql2
-rw-r--r--src/game/Item.cpp10
-rw-r--r--src/game/Item.h3
-rw-r--r--src/game/ObjectMgr.cpp11
4 files changed, 20 insertions, 6 deletions
diff --git a/sql/updates/7770_world_item_required_target.sql b/sql/updates/7770_world_item_required_target.sql
new file mode 100644
index 00000000000..1a3ba551099
--- /dev/null
+++ b/sql/updates/7770_world_item_required_target.sql
@@ -0,0 +1,2 @@
+ALTER TABLE `item_required_target`
+ADD `maxPercentHealth` TINYINT(3) UNSIGNED NOT NULL DEFAULT 100;
diff --git a/src/game/Item.cpp b/src/game/Item.cpp
index 025a0a629aa..4c247d06be9 100644
--- a/src/game/Item.cpp
+++ b/src/game/Item.cpp
@@ -1028,12 +1028,22 @@ bool Item::IsBindedNotWith( Player const* player ) const
bool ItemRequiredTarget::IsFitToRequirements( Unit* pUnitTarget ) const
{
+ float uiPercentHP;
+ float uiHealth;
+ float uiMaxHealth;
+
if (pUnitTarget->GetTypeId() != TYPEID_UNIT)
return false;
if (pUnitTarget->GetEntry() != m_uiTargetEntry)
return false;
+ uiHealth = pUnitTarget->GetHealth();
+ uiMaxHealth = pUnitTarget->GetMaxHealth();
+ uiPercentHP = ((uiHealth / uiMaxHealth) * 100);
+ if (m_uiMaxPercentHealth <= uiPercentHP)
+ return false;
+
switch(m_uiType)
{
case ITEM_TARGET_TYPE_CREATURE:
diff --git a/src/game/Item.h b/src/game/Item.h
index f1fd798d1e8..7cde4866c29 100644
--- a/src/game/Item.h
+++ b/src/game/Item.h
@@ -208,9 +208,10 @@ enum ItemRequiredTargetType
struct ItemRequiredTarget
{
- ItemRequiredTarget(ItemRequiredTargetType uiType, uint32 uiTargetEntry) : m_uiType(uiType), m_uiTargetEntry(uiTargetEntry) {}
+ ItemRequiredTarget(ItemRequiredTargetType uiType, uint32 uiTargetEntry, float uiMaxPercentHealth) : m_uiType(uiType), m_uiTargetEntry(uiTargetEntry), m_uiMaxPercentHealth(uiMaxPercentHealth) {}
ItemRequiredTargetType m_uiType;
uint32 m_uiTargetEntry;
+ float m_uiMaxPercentHealth;
// helpers
bool IsFitToRequirements(Unit* pUnitTarget) const;
diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp
index c449267e5f5..28b968fe44e 100644
--- a/src/game/ObjectMgr.cpp
+++ b/src/game/ObjectMgr.cpp
@@ -2422,7 +2422,7 @@ void ObjectMgr::LoadItemRequiredTarget()
uint32 count = 0;
- QueryResult_AutoPtr result = WorldDatabase.Query("SELECT entry,type,targetEntry FROM item_required_target");
+ QueryResult_AutoPtr result = WorldDatabase.Query("SELECT entry,type,targetEntry,maxPercentHealth FROM item_required_target");
if (!result)
{
@@ -2442,9 +2442,10 @@ void ObjectMgr::LoadItemRequiredTarget()
Field *fields = result->Fetch();
bar.step();
- uint32 uiItemId = fields[0].GetUInt32();
- uint32 uiType = fields[1].GetUInt32();
- uint32 uiTargetEntry = fields[2].GetUInt32();
+ uint32 uiItemId = fields[0].GetUInt32();
+ uint32 uiType = fields[1].GetUInt32();
+ uint32 uiTargetEntry = fields[2].GetUInt32();
+ float uiMaxPercentHealth = fields[3].GetUInt32();
ItemPrototype const* pItemProto = sItemStorage.LookupEntry<ItemPrototype>(uiItemId);
@@ -2508,7 +2509,7 @@ void ObjectMgr::LoadItemRequiredTarget()
continue;
}
- m_ItemRequiredTarget.insert(ItemRequiredTargetMap::value_type(uiItemId,ItemRequiredTarget(ItemRequiredTargetType(uiType),uiTargetEntry)));
+ m_ItemRequiredTarget.insert(ItemRequiredTargetMap::value_type(uiItemId,ItemRequiredTarget(ItemRequiredTargetType(uiType),uiTargetEntry,uiMaxPercentHealth)));
++count;
} while (result->NextRow());