[svn] Fix a crash caused by gruul script.
Change in EffectSummonWild and DoZoneInCombat. --HG-- branch : trunk
This commit is contained in:
@@ -458,18 +458,17 @@ void ScriptedAI::DoZoneInCombat(Unit* pUnit)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pUnit->CanHaveThreatList() || pUnit->getThreatManager().isThreatListEmpty())
|
/*if (!pUnit->CanHaveThreatList() || pUnit->getThreatManager().isThreatListEmpty())
|
||||||
{
|
{
|
||||||
error_log("SD2: DoZoneInCombat called for creature that either cannot have threat list or has empty threat list (pUnit entry = %d)", pUnit->GetTypeId() == TYPEID_UNIT ? ((Creature*)pUnit)->GetEntry() : 0);
|
error_log("SD2: DoZoneInCombat called for creature that either cannot have threat list or has empty threat list (pUnit entry = %d)", pUnit->GetTypeId() == TYPEID_UNIT ? ((Creature*)pUnit)->GetEntry() : 0);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
InstanceMap::PlayerList const &PlayerList = ((InstanceMap*)map)->GetPlayers();
|
InstanceMap::PlayerList const &PlayerList = ((InstanceMap*)map)->GetPlayers();
|
||||||
InstanceMap::PlayerList::const_iterator i;
|
InstanceMap::PlayerList::const_iterator i;
|
||||||
for (i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
for (i = PlayerList.begin(); i != PlayerList.end(); ++i)
|
||||||
{
|
{
|
||||||
if(!(*i)->isGameMaster())
|
if((*i)->isAlive())
|
||||||
pUnit->AddThreat(*i, 0.0f);
|
pUnit->AddThreat(*i, 0.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -585,7 +585,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
|
|||||||
case 1://lift off
|
case 1://lift off
|
||||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
|
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF);
|
||||||
//m_creature->GetMotionMaster()->Clear(false);
|
//m_creature->GetMotionMaster()->Clear(false);
|
||||||
m_creature->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING);
|
m_creature->SetUnitMovementFlags(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||||
//m_creature->GetMotionMaster()->MovePoint(0, m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ());
|
//m_creature->GetMotionMaster()->MovePoint(0, m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ());
|
||||||
m_creature->StopMoving();
|
m_creature->StopMoving();
|
||||||
DoYell(SAY_TAKEOFF, LANG_UNIVERSAL, NULL);
|
DoYell(SAY_TAKEOFF, LANG_UNIVERSAL, NULL);
|
||||||
@@ -594,9 +594,9 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
|
|||||||
break;
|
break;
|
||||||
case 2://move to center
|
case 2://move to center
|
||||||
//m_creature->GetMotionMaster()->Clear(false);
|
//m_creature->GetMotionMaster()->Clear(false);
|
||||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
//m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
||||||
m_creature->GetMotionMaster()->MovePoint(0, CENTER_X + 5, CENTER_Y, CENTER_Z); //+5, for SPELL_THROW_GLAIVE bug
|
m_creature->GetMotionMaster()->MovePoint(0, CENTER_X + 5, CENTER_Y, CENTER_Z); //+5, for SPELL_THROW_GLAIVE bug
|
||||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
//m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
||||||
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
|
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
|
||||||
break;
|
break;
|
||||||
case 3://throw one glaive
|
case 3://throw one glaive
|
||||||
@@ -636,15 +636,15 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
|
|||||||
Timer[EVENT_FLIGHT_SEQUENCE] = 3000;
|
Timer[EVENT_FLIGHT_SEQUENCE] = 3000;
|
||||||
break;
|
break;
|
||||||
case 6://fly to hover point
|
case 6://fly to hover point
|
||||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
//m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
||||||
m_creature->GetMotionMaster()->MovePoint(0, HoverPosition[HoverPoint].x, HoverPosition[HoverPoint].y, HoverPosition[HoverPoint].z);
|
m_creature->GetMotionMaster()->MovePoint(0, HoverPosition[HoverPoint].x, HoverPosition[HoverPoint].y, HoverPosition[HoverPoint].z);
|
||||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
//m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
||||||
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
|
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
|
||||||
break;
|
break;
|
||||||
case 7://return to center
|
case 7://return to center
|
||||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
//m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
||||||
m_creature->GetMotionMaster()->MovePoint(0, CENTER_X, CENTER_Y, CENTER_Z);
|
m_creature->GetMotionMaster()->MovePoint(0, CENTER_X, CENTER_Y, CENTER_Z);
|
||||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
//m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT);
|
||||||
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
|
Timer[EVENT_FLIGHT_SEQUENCE] = 0;
|
||||||
break;
|
break;
|
||||||
case 8://glaive return
|
case 8://glaive return
|
||||||
@@ -664,7 +664,7 @@ struct TRINITY_DLL_DECL boss_illidan_stormrageAI : public ScriptedAI
|
|||||||
break;
|
break;
|
||||||
case 9://land
|
case 9://land
|
||||||
//m_creature->GetMotionMaster()->Clear(false);
|
//m_creature->GetMotionMaster()->Clear(false);
|
||||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||||
//m_creature->GetMotionMaster()->MovePoint(0, m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ());
|
//m_creature->GetMotionMaster()->MovePoint(0, m_creature->GetPositionX(),m_creature->GetPositionY(),m_creature->GetPositionZ());
|
||||||
m_creature->StopMoving();
|
m_creature->StopMoving();
|
||||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
|
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_LAND);
|
||||||
@@ -1616,7 +1616,8 @@ struct TRINITY_DLL_DECL boss_maievAI : public ScriptedAI
|
|||||||
|
|
||||||
void UpdateAI(const uint32 diff)
|
void UpdateAI(const uint32 diff)
|
||||||
{
|
{
|
||||||
if((!m_creature->SelectHostilTarget() || !m_creature->getVictim()) && !Timer[1])
|
if((!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||||
|
&& !Timer[EVENT_MAIEV_STEALTH])
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Event = EVENT_MAIEV_NULL;
|
Event = EVENT_MAIEV_NULL;
|
||||||
@@ -2107,7 +2108,7 @@ void boss_illidan_stormrageAI::Reset()
|
|||||||
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
m_creature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||||
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY, 0);
|
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY, 0);
|
||||||
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY+1, 0);
|
m_creature->SetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_DISPLAY+1, 0);
|
||||||
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
m_creature->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING + MOVEMENTFLAG_ONTRANSPORT);
|
||||||
|
|
||||||
DoCast(m_creature, SPELL_DUAL_WIELD, true);
|
DoCast(m_creature, SPELL_DUAL_WIELD, true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -238,7 +238,10 @@ struct TRINITY_DLL_DECL boss_high_king_maulgarAI : public ScriptedAI
|
|||||||
|
|
||||||
//someone evaded!
|
//someone evaded!
|
||||||
if(pInstance && !pInstance->GetData(DATA_MAULGAREVENT))
|
if(pInstance && !pInstance->GetData(DATA_MAULGAREVENT))
|
||||||
|
{
|
||||||
EnterEvadeMode();
|
EnterEvadeMode();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//ArcingSmash_Timer
|
//ArcingSmash_Timer
|
||||||
if (ArcingSmash_Timer < diff)
|
if (ArcingSmash_Timer < diff)
|
||||||
@@ -365,7 +368,10 @@ struct TRINITY_DLL_DECL boss_olm_the_summonerAI : public ScriptedAI
|
|||||||
|
|
||||||
//someone evaded!
|
//someone evaded!
|
||||||
if(pInstance && !pInstance->GetData(DATA_MAULGAREVENT))
|
if(pInstance && !pInstance->GetData(DATA_MAULGAREVENT))
|
||||||
|
{
|
||||||
EnterEvadeMode();
|
EnterEvadeMode();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//DarkDecay_Timer
|
//DarkDecay_Timer
|
||||||
if(DarkDecay_Timer < diff)
|
if(DarkDecay_Timer < diff)
|
||||||
@@ -489,7 +495,10 @@ struct TRINITY_DLL_DECL boss_kiggler_the_crazedAI : public ScriptedAI
|
|||||||
|
|
||||||
//someone evaded!
|
//someone evaded!
|
||||||
if(pInstance && !pInstance->GetData(DATA_MAULGAREVENT))
|
if(pInstance && !pInstance->GetData(DATA_MAULGAREVENT))
|
||||||
|
{
|
||||||
EnterEvadeMode();
|
EnterEvadeMode();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//GreaterPolymorph_Timer
|
//GreaterPolymorph_Timer
|
||||||
if(GreaterPolymorph_Timer < diff)
|
if(GreaterPolymorph_Timer < diff)
|
||||||
@@ -616,7 +625,10 @@ struct TRINITY_DLL_DECL boss_blindeye_the_seerAI : public ScriptedAI
|
|||||||
|
|
||||||
//someone evaded!
|
//someone evaded!
|
||||||
if(pInstance && !pInstance->GetData(DATA_MAULGAREVENT))
|
if(pInstance && !pInstance->GetData(DATA_MAULGAREVENT))
|
||||||
|
{
|
||||||
EnterEvadeMode();
|
EnterEvadeMode();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//GreaterPowerWordShield_Timer
|
//GreaterPowerWordShield_Timer
|
||||||
if(GreaterPowerWordShield_Timer < diff)
|
if(GreaterPowerWordShield_Timer < diff)
|
||||||
@@ -727,7 +739,10 @@ struct TRINITY_DLL_DECL boss_krosh_firehandAI : public ScriptedAI
|
|||||||
|
|
||||||
//someone evaded!
|
//someone evaded!
|
||||||
if(pInstance && !pInstance->GetData(DATA_MAULGAREVENT))
|
if(pInstance && !pInstance->GetData(DATA_MAULGAREVENT))
|
||||||
|
{
|
||||||
EnterEvadeMode();
|
EnterEvadeMode();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//GreaterFireball_Timer
|
//GreaterFireball_Timer
|
||||||
if(GreaterFireball_Timer < diff || m_creature->GetDistance(m_creature->getVictim()) < 30)
|
if(GreaterFireball_Timer < diff || m_creature->GetDistance(m_creature->getVictim()) < 30)
|
||||||
|
|||||||
@@ -3489,8 +3489,11 @@ void Spell::EffectSummonWild(uint32 i)
|
|||||||
|
|
||||||
int32 duration = GetSpellDuration(m_spellInfo);
|
int32 duration = GetSpellDuration(m_spellInfo);
|
||||||
|
|
||||||
TempSummonType summonType = (duration == 0) ? TEMPSUMMON_DEAD_DESPAWN : TEMPSUMMON_TIMED_OR_DEAD_DESPAWN;
|
TempSummonType summonType = (duration == 0) ? TEMPSUMMON_DEAD_DESPAWN : TEMPSUMMON_TIMED_DESPAWN;
|
||||||
|
|
||||||
|
if(m_originalCaster)
|
||||||
|
m_originalCaster->SummonCreature(creature_entry,px,py,pz,m_caster->GetOrientation(),summonType,duration);
|
||||||
|
else
|
||||||
m_caster->SummonCreature(creature_entry,px,py,pz,m_caster->GetOrientation(),summonType,duration);
|
m_caster->SummonCreature(creature_entry,px,py,pz,m_caster->GetOrientation(),summonType,duration);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user