aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bindings/scripts/CMakeLists.txt2
-rw-r--r--src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp6
-rw-r--r--src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp7
-rw-r--r--src/game/Creature.h1
-rw-r--r--src/game/Spell.cpp6
-rw-r--r--src/game/Unit.cpp46
-rw-r--r--src/game/Unit.h5
7 files changed, 46 insertions, 27 deletions
diff --git a/src/bindings/scripts/CMakeLists.txt b/src/bindings/scripts/CMakeLists.txt
index 511eec691c0..e9bb6212d5a 100644
--- a/src/bindings/scripts/CMakeLists.txt
+++ b/src/bindings/scripts/CMakeLists.txt
@@ -379,6 +379,8 @@ SET(trinityscript_LIB_SRCS
add_library(trinityscript SHARED ${trinityscript_LIB_SRCS})
+add_definitions(-D_TRINITY_SCRIPT_CONFIG='"${CONF_DIR}/trinitycore.conf"')
+
target_link_libraries(trinityscript)
set_target_properties(trinityscript PROPERTIES VERSION 4.2.0 SOVERSION 4)
diff --git a/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp b/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp
index 3f0d6dd7a27..99283ca7097 100644
--- a/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp
+++ b/src/bindings/scripts/scripts/zone/karazhan/boss_moroes.cpp
@@ -276,13 +276,13 @@ struct TRINITY_DLL_DECL boss_moroesAI : public ScriptedAI
{
for (uint8 i = 0; i < 4; ++i)
{
- Unit* Temp = NULL;
+ Creature* Temp = NULL;
if (AddGUID[i])
{
- Temp = Unit::GetUnit((*m_creature),AddGUID[i]);
+ Temp = (Creature*)Unit::GetUnit((*m_creature),AddGUID[i]);
if (Temp && Temp->isAlive())
if (!Temp->SelectHostilTarget() || !Temp->getVictim() )
- ((Creature*)Temp)->AI()->AttackStart(m_creature->getVictim());
+ Temp->AI()->AttackStart(m_creature->getVictim());
}
}
CheckAdds_Timer = 5000;
diff --git a/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp b/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp
index 14f3702354d..a440ba4a575 100644
--- a/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp
+++ b/src/bindings/scripts/scripts/zone/zulgurub/boss_mandokir.cpp
@@ -131,7 +131,8 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI
void UpdateAI(const uint32 diff)
{
- if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
+ Unit *victim = m_creature->SelectHostilTarget();
+ if(!victim)
return;
if( m_creature->getVictim() && m_creature->isAlive())
@@ -234,11 +235,11 @@ struct TRINITY_DLL_DECL boss_mandokirAI : public ScriptedAI
}else Fear_Timer -=diff;
//Mortal Strike if target below 50% hp
- if (m_creature->getVictim()->GetHealth() < m_creature->getVictim()->GetMaxHealth()*0.5)
+ if (victim && victim->GetHealth() < victim->GetMaxHealth()*0.5)
{
if (MortalStrike_Timer < diff)
{
- DoCast(m_creature->getVictim(),SPELL_MORTAL_STRIKE);
+ DoCast(victim,SPELL_MORTAL_STRIKE);
MortalStrike_Timer = 15000;
}else MortalStrike_Timer -= diff;
}
diff --git a/src/game/Creature.h b/src/game/Creature.h
index 1ae41b86776..563a9ddb80c 100644
--- a/src/game/Creature.h
+++ b/src/game/Creature.h
@@ -630,6 +630,7 @@ class TRINITY_DLL_SPEC Creature : public Unit
bool IsFormationLeader() {return (GetDBTableGUIDLow() && GetDBTableGUIDLow() == m_formationID);}
uint32 GetFormationID(){return m_formationID;}
+ Unit *SelectHostilTarget();
protected:
bool CreateFromProto(uint32 guidlow,uint32 Entry,uint32 team, const CreatureData *data = NULL);
bool InitEntry(uint32 entry, uint32 team=ALLIANCE, const CreatureData* data=NULL);
diff --git a/src/game/Spell.cpp b/src/game/Spell.cpp
index 7dc138dcff4..f6b326b17d9 100644
--- a/src/game/Spell.cpp
+++ b/src/game/Spell.cpp
@@ -3684,6 +3684,12 @@ uint8 Spell::CanCast(bool strict)
if(m_targets.getUnitTarget() && !m_caster->IsFriendlyTo(m_targets.getUnitTarget()) && !m_caster->HasInArc( M_PI, target ))
return SPELL_FAILED_UNIT_NOT_INFRONT;
}
+ else if (m_spellInfo->Id == 19938) // Awaken Peon
+ {
+ Unit *unit = m_targets.getUnitTarget();
+ if(!unit || !unit->HasAura(17743, 0))
+ return SPELL_FAILED_BAD_TARGETS;
+ }
break;
}
case SPELL_EFFECT_SCHOOL_DAMAGE:
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index d46d77f8703..35b45c2750e 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -261,8 +261,17 @@ Unit::~Unit()
if(m_uint32Values)
{
sLog.outDetail("Deconstruct Unit Entry = %u", GetEntry());
- if(m_scAuras.size())
+ /*for(int i = 0; i < TOTAL_AURAS; ++i)
+ {
+ if(m_modAuras[i].begin() != m_modAuras[i].end())
+ sLog.outError("Unit %u has mod auras during deconstruction", GetEntry());
+ }
+ if(m_scAuras.begin() != m_scAuras.end())
sLog.outError("Unit %u has sc auras during deconstruction", GetEntry());
+ if(m_interruptableAuras.begin() != m_interruptableAuras.end())
+ sLog.outError("Unit %u has interruptable auras during deconstruction", GetEntry());
+ if(m_ccAuras.begin() != m_ccAuras.end())
+ sLog.outError("Unit %u has cc auras during deconstruction", GetEntry());*/
}
}
@@ -10390,18 +10399,17 @@ void Unit::TauntFadeOut(Unit *taunter)
//======================================================================
-bool Unit::SelectHostilTarget()
+Unit* Creature::SelectHostilTarget()
{
//function provides main threat functionality
//next-victim-selection algorithm and evade mode are called
//threat list sorting etc.
- assert(GetTypeId()== TYPEID_UNIT);
Unit* target = NULL;
//This function only useful once AI has been initialized
- if (!((Creature*)this)->AI())
- return false;
+ if (!AI())
+ return NULL;
if(!m_ThreatManager.isThreatListEmpty())
{
@@ -10417,36 +10425,36 @@ bool Unit::SelectHostilTarget()
{
if(!hasUnitState(UNIT_STAT_STUNNED))
SetInFront(target);
- ((Creature*)this)->AI()->AttackStart(target);
- return true;
+ AI()->AttackStart(target);
+ return getVictim();
}
// no target but something prevent go to evade mode
if( !isInCombat() /*|| HasAuraType(SPELL_AURA_MOD_TAUNT)*/ )
- return false;
+ return NULL;
// last case when creature don't must go to evade mode:
// it in combat but attacker not make any damage and not enter to aggro radius to have record in threat list
// for example at owner command to pet attack some far away creature
// Note: creature not have targeted movement generator but have attacker in this case
- if( GetMotionMaster()->GetCurrentMovementGeneratorType() != TARGETED_MOTION_TYPE )
+ /*if( GetMotionMaster()->GetCurrentMovementGeneratorType() != TARGETED_MOTION_TYPE )
{
for(AttackerSet::const_iterator itr = m_attackers.begin(); itr != m_attackers.end(); ++itr)
{
if( (*itr)->IsInMap(this) && canAttack(*itr) && (*itr)->isInAccessiblePlaceFor((Creature*)this) )
return false;
}
- }
+ }*/
// search nearby enemy before enter evade mode
- if(((Creature*)this)->HasReactState(REACT_AGGRESSIVE))
+ if(HasReactState(REACT_AGGRESSIVE))
{
- if(Unit *target = ((Creature*)this)->SelectNearestTarget())
+ if(target = SelectNearestTarget())
{
- if(!((Creature*)this)->IsOutOfThreatArea(target))
+ if(!IsOutOfThreatArea(target))
{
- ((Creature*)this)->AI()->AttackStart(target);
- return true;
+ AI()->AttackStart(target);
+ return getVictim();
}
}
}
@@ -10457,16 +10465,16 @@ bool Unit::SelectHostilTarget()
for(Unit::AuraList::const_iterator itr = iAuras.begin(); itr != iAuras.end(); ++itr)
if((*itr)->IsPermanent())
{
- ((Creature*)this)->AI()->EnterEvadeMode();
+ AI()->EnterEvadeMode();
break;
}
- return false;
+ return NULL;
}
// enter in evade mode in other case
- ((Creature*)this)->AI()->EnterEvadeMode();
+ AI()->EnterEvadeMode();
- return false;
+ return NULL;
}
//======================================================================
diff --git a/src/game/Unit.h b/src/game/Unit.h
index 077e82a2143..83cb1900506 100644
--- a/src/game/Unit.h
+++ b/src/game/Unit.h
@@ -1238,7 +1238,7 @@ class TRINITY_DLL_SPEC Unit : public WorldObject
void AddThreat(Unit* pVictim, float threat, SpellSchoolMask schoolMask = SPELL_SCHOOL_MASK_NORMAL, SpellEntry const *threatSpell = NULL);
float ApplyTotalThreatModifier(float threat, SpellSchoolMask schoolMask = SPELL_SCHOOL_MASK_NORMAL);
void DeleteThreatList();
- bool SelectHostilTarget();
+ //bool SelectHostilTarget();
void TauntApply(Unit* pVictim);
void TauntFadeOut(Unit *taunter);
ThreatManager& getThreatManager() { return m_ThreatManager; }
@@ -1450,6 +1450,7 @@ class TRINITY_DLL_SPEC Unit : public WorldObject
uint32 m_reactiveTimer[MAX_REACTIVE];
+ ThreatManager m_ThreatManager;
private:
void SendAttackStop(Unit* victim); // only from AttackStop(Unit*)
//void SendAttackStart(Unit* pVictim); // only from Unit::AttackStart(Unit*)
@@ -1469,7 +1470,7 @@ class TRINITY_DLL_SPEC Unit : public WorldObject
Diminishing m_Diminishing;
// Manage all Units threatening us
- ThreatManager m_ThreatManager;
+// ThreatManager m_ThreatManager;
// Manage all Units that are threatened by us
HostilRefManager m_HostilRefManager;