[svn] Fix a crash caused by gruul script.

Change in EffectSummonWild and DoZoneInCombat.

--HG--
branch : trunk
This commit is contained in:
megamage
2008-10-24 17:37:40 -05:00
parent 67f95a5281
commit 0a3057972c
4 changed files with 34 additions and 16 deletions
+3 -4
View File
@@ -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)
+5 -2
View File
@@ -3489,9 +3489,12 @@ 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;
m_caster->SummonCreature(creature_entry,px,py,pz,m_caster->GetOrientation(),summonType,duration); 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);
} }
} }