Add option maxPercentHealth to item_required_target to allow setting health percentage a target must be at before item use on item_required_target is allowed. This will allow better scripting of quest item use on some creatures.

--HG--
branch : trunk
This commit is contained in:
2010-04-05 02:05:26 -02:30
parent 160666fa00
commit ce1280627d
4 changed files with 20 additions and 6 deletions
@@ -0,0 +1,2 @@
ALTER TABLE `item_required_target`
ADD `maxPercentHealth` TINYINT(3) UNSIGNED NOT NULL DEFAULT 100;
+10
View File
@@ -1028,12 +1028,22 @@ bool Item::IsBindedNotWith( Player const* player ) const
bool ItemRequiredTarget::IsFitToRequirements( Unit* pUnitTarget ) const bool ItemRequiredTarget::IsFitToRequirements( Unit* pUnitTarget ) const
{ {
float uiPercentHP;
float uiHealth;
float uiMaxHealth;
if (pUnitTarget->GetTypeId() != TYPEID_UNIT) if (pUnitTarget->GetTypeId() != TYPEID_UNIT)
return false; return false;
if (pUnitTarget->GetEntry() != m_uiTargetEntry) if (pUnitTarget->GetEntry() != m_uiTargetEntry)
return false; return false;
uiHealth = pUnitTarget->GetHealth();
uiMaxHealth = pUnitTarget->GetMaxHealth();
uiPercentHP = ((uiHealth / uiMaxHealth) * 100);
if (m_uiMaxPercentHealth <= uiPercentHP)
return false;
switch(m_uiType) switch(m_uiType)
{ {
case ITEM_TARGET_TYPE_CREATURE: case ITEM_TARGET_TYPE_CREATURE:
+2 -1
View File
@@ -208,9 +208,10 @@ enum ItemRequiredTargetType
struct ItemRequiredTarget 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; ItemRequiredTargetType m_uiType;
uint32 m_uiTargetEntry; uint32 m_uiTargetEntry;
float m_uiMaxPercentHealth;
// helpers // helpers
bool IsFitToRequirements(Unit* pUnitTarget) const; bool IsFitToRequirements(Unit* pUnitTarget) const;
+6 -5
View File
@@ -2422,7 +2422,7 @@ void ObjectMgr::LoadItemRequiredTarget()
uint32 count = 0; 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) if (!result)
{ {
@@ -2442,9 +2442,10 @@ void ObjectMgr::LoadItemRequiredTarget()
Field *fields = result->Fetch(); Field *fields = result->Fetch();
bar.step(); bar.step();
uint32 uiItemId = fields[0].GetUInt32(); uint32 uiItemId = fields[0].GetUInt32();
uint32 uiType = fields[1].GetUInt32(); uint32 uiType = fields[1].GetUInt32();
uint32 uiTargetEntry = fields[2].GetUInt32(); uint32 uiTargetEntry = fields[2].GetUInt32();
float uiMaxPercentHealth = fields[3].GetUInt32();
ItemPrototype const* pItemProto = sItemStorage.LookupEntry<ItemPrototype>(uiItemId); ItemPrototype const* pItemProto = sItemStorage.LookupEntry<ItemPrototype>(uiItemId);
@@ -2508,7 +2509,7 @@ void ObjectMgr::LoadItemRequiredTarget()
continue; 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; ++count;
} while (result->NextRow()); } while (result->NextRow());