From 9b8c50bb3b628f28db6eec01f7186916bff75f00 Mon Sep 17 00:00:00 2001 From: megamage Date: Fri, 9 Jan 2009 12:06:08 -0600 Subject: *Add script function DoGetThreat and DoModifyThreatPercent and check if !pUnit to prevent crash. *Note: it is always possible that getVictim() becomes NULL during updateAI! --HG-- branch : trunk --- src/bindings/scripts/include/sc_creature.cpp | 16 ++++++++++++++-- src/bindings/scripts/include/sc_creature.h | 3 +++ 2 files changed, 17 insertions(+), 2 deletions(-) (limited to 'src/bindings/scripts/include') diff --git a/src/bindings/scripts/include/sc_creature.cpp b/src/bindings/scripts/include/sc_creature.cpp index 20c5600dc02..12992eedc52 100644 --- a/src/bindings/scripts/include/sc_creature.cpp +++ b/src/bindings/scripts/include/sc_creature.cpp @@ -711,11 +711,23 @@ void ScriptedAI::DoResetThreat() { Unit* pUnit = NULL; pUnit = Unit::GetUnit((*m_creature), (*itr)->getUnitGuid()); - if(pUnit && m_creature->getThreatManager().getThreat(pUnit)) - m_creature->getThreatManager().modifyThreatPercent(pUnit, -100); + if(pUnit && DoGetThreat(pUnit)) + DoModifyThreatPercent(pUnit, -100); } } +float ScriptedAI::DoGetThreat(Unit* pUnit) +{ + if(!pUnit) return 0.0f; + return m_creature->getThreatManager().getThreat(pUnit); +} + +void ScriptedAI::DoModifyThreatPercent(Unit *pUnit, int32 pct) +{ + if(!pUnit) return; + m_creature->getThreatManager().modifyThreatPercent(pUnit, pct); +} + void ScriptedAI::DoTeleportPlayer(Unit* pUnit, float x, float y, float z, float o) { if(!pUnit || pUnit->GetTypeId() != TYPEID_PLAYER) diff --git a/src/bindings/scripts/include/sc_creature.h b/src/bindings/scripts/include/sc_creature.h index 9c7ffc022eb..12ec3f0cbf5 100644 --- a/src/bindings/scripts/include/sc_creature.h +++ b/src/bindings/scripts/include/sc_creature.h @@ -144,6 +144,9 @@ struct TRINITY_DLL_DECL ScriptedAI : public CreatureAI //Drops all threat to 0%. Does not remove players from the threat list void DoResetThreat(); + float DoGetThreat(Unit *u); + void DoModifyThreatPercent(Unit *pUnit, int32 pct); + //Teleports a player without dropping threat (only teleports to same map) void DoTeleportPlayer(Unit* pUnit, float x, float y, float z, float o); void DoTeleportAll(float x, float y, float z, float o); -- cgit v1.2.3