aboutsummaryrefslogtreecommitdiff
path: root/src/bindings/scripts
diff options
context:
space:
mode:
authormegamage <none@none>2009-04-04 13:11:03 -0600
committermegamage <none@none>2009-04-04 13:11:03 -0600
commite53521d228df1e53d63b5e0fd53c414b5dff7866 (patch)
tree7355319aff1b53b8616866b07c3c2f4bac4f6b02 /src/bindings/scripts
parentb858dd535a67cda80ac8adb91dadedfb70e0628a (diff)
parent19f725cd5127a565850d9de28ec5f12bf5af4e33 (diff)
*Merge.
--HG-- branch : trunk
Diffstat (limited to 'src/bindings/scripts')
-rw-r--r--src/bindings/scripts/scripts/npc/npc_escortAI.cpp53
-rw-r--r--src/bindings/scripts/scripts/npc/npc_escortAI.h15
-rw-r--r--src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp55
-rw-r--r--src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp4
-rw-r--r--src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp3
5 files changed, 82 insertions, 48 deletions
diff --git a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp b/src/bindings/scripts/scripts/npc/npc_escortAI.cpp
index 2a0f5e16a1d..34179378b06 100644
--- a/src/bindings/scripts/scripts/npc/npc_escortAI.cpp
+++ b/src/bindings/scripts/scripts/npc/npc_escortAI.cpp
@@ -13,7 +13,7 @@ EndScriptData */
#include "npc_escortAI.h"
#define WP_LAST_POINT -1
-#define MAX_PLAYER_DISTANCE 50
+extern std::list<PointMovement> PointMovementList;
bool npc_escortAI::IsVisible(Unit* who) const
{
@@ -132,21 +132,29 @@ void npc_escortAI::UpdateAI(const uint32 diff)
//End of the line, Despawn self then immediatly respawn
if (CurrentWP == WaypointList.end())
{
- debug_log("SD2: EscortAI reached end of waypoints");
+ if(DespawnAtEnd)
+ {
+ debug_log("SD2: EscortAI reached end of waypoints");
- m_creature->setDeathState(JUST_DIED);
- m_creature->SetHealth(0);
- m_creature->CombatStop();
- m_creature->DeleteThreatList();
- m_creature->Respawn();
- m_creature->GetMotionMaster()->Clear(true);
+ m_creature->setDeathState(JUST_DIED);
+ m_creature->SetHealth(0);
+ m_creature->CombatStop();
+ m_creature->DeleteThreatList();
+ m_creature->Respawn();
+ m_creature->GetMotionMaster()->Clear(true);
- //Re-Enable gossip
- m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
+ //Re-Enable gossip
+ m_creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP);
- IsBeingEscorted = false;
- WaitTimer = 0;
- return;
+ IsBeingEscorted = false;
+ WaitTimer = 0;
+ return;
+ }else{
+ debug_log("SD2: EscortAI reached end of waypoints with Despawn off");
+ IsBeingEscorted = false;
+ WaitTimer = 0;
+ return;
+ }
}
if( !IsOnHold )
@@ -165,7 +173,7 @@ void npc_escortAI::UpdateAI(const uint32 diff)
{
Unit* p = Unit::GetUnit(*m_creature, PlayerGUID);
- if (!p || m_creature->GetDistance(p) > MAX_PLAYER_DISTANCE)
+ if (DespawnAtFar && (!p || m_creature->GetDistance(p) > GetMaxPlayerDistance()))
{
JustDied(m_creature);
IsBeingEscorted = false;
@@ -187,16 +195,19 @@ void npc_escortAI::UpdateAI(const uint32 diff)
}else PlayerTimer -= diff;
}
- //Check if we have a current target
- if( m_creature->isAlive() && UpdateVictim())
+ if(CanMelee)
{
- //If we are within range melee the target
- if( m_creature->IsWithinMeleeRange(m_creature->getVictim()))
+ //Check if we have a current target
+ if( m_creature->isAlive() && UpdateVictim())
{
- if( m_creature->isAttackReady() )
+ //If we are within range melee the target
+ if( m_creature->IsWithinMeleeRange(m_creature->getVictim()))
{
- m_creature->AttackerStateUpdate(m_creature->getVictim());
- m_creature->resetAttackTimer();
+ if( m_creature->isAttackReady() )
+ {
+ m_creature->AttackerStateUpdate(m_creature->getVictim());
+ m_creature->resetAttackTimer();
+ }
}
}
}
diff --git a/src/bindings/scripts/scripts/npc/npc_escortAI.h b/src/bindings/scripts/scripts/npc/npc_escortAI.h
index ca284bd1b21..6e4f22e1c01 100644
--- a/src/bindings/scripts/scripts/npc/npc_escortAI.h
+++ b/src/bindings/scripts/scripts/npc/npc_escortAI.h
@@ -5,7 +5,7 @@
#ifndef SC_ESCORTAI_H
#define SC_ESCORTAI_H
-extern std::list<PointMovement> PointMovementList;
+#define DEFAULT_MAX_PLAYER_DISTANCE 50
struct Escort_Waypoint
{
@@ -37,7 +37,7 @@ struct TRINITY_DLL_DECL npc_escortAI : public ScriptedAI
virtual void Reset() = 0;
// CreatureAI functions
- npc_escortAI(Creature *c) : ScriptedAI(c), IsBeingEscorted(false), PlayerTimer(1000) {m_creature->GetPosition(LastPos.x, LastPos.y, LastPos.z);}
+ npc_escortAI(Creature *c) : ScriptedAI(c), IsBeingEscorted(false), PlayerTimer(1000), MaxPlayerDistance(DEFAULT_MAX_PLAYER_DISTANCE), CanMelee(true), DespawnAtEnd(true), DespawnAtFar(true) {m_creature->GetPosition(LastPos.x, LastPos.y, LastPos.z);}
bool IsVisible(Unit*) const;
@@ -62,6 +62,13 @@ struct TRINITY_DLL_DECL npc_escortAI : public ScriptedAI
void Start(bool bAttack, bool bDefend, bool bRun, uint64 pGUID = 0);
+ void SetMaxPlayerDistance(float newMax) { MaxPlayerDistance = newMax; }
+ float GetMaxPlayerDistance() { return MaxPlayerDistance; }
+
+ void SetCanMelee(bool usemelee) { CanMelee = usemelee; }
+ void SetDespawnAtEnd(bool despawn) { DespawnAtEnd = despawn; }
+ void SetDespawnAtFar(bool despawn) { DespawnAtFar = despawn; }
+
// EscortAI variables
protected:
uint64 PlayerGUID;
@@ -71,6 +78,7 @@ struct TRINITY_DLL_DECL npc_escortAI : public ScriptedAI
private:
uint32 WaitTimer;
uint32 PlayerTimer;
+ float MaxPlayerDistance;
struct
{
@@ -87,6 +95,9 @@ struct TRINITY_DLL_DECL npc_escortAI : public ScriptedAI
bool Returning;
bool ReconnectWP;
bool Run;
+ bool CanMelee;
+ bool DespawnAtEnd;
+ bool DespawnAtFar;
};
#endif
diff --git a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp
index 4769ac68be1..1d5b7934bd6 100644
--- a/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp
+++ b/src/bindings/scripts/scripts/zone/caverns_of_time/old_hillsbrad/old_hillsbrad.cpp
@@ -211,6 +211,7 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
npc_thrall_old_hillsbradAI(Creature *c) : npc_escortAI(c)
{
pInstance = ((ScriptedInstance*)c->GetInstanceData());
+ m_creature->setActive(true);
}
ScriptedInstance *pInstance;
@@ -354,32 +355,39 @@ struct TRINITY_DLL_DECL npc_thrall_old_hillsbradAI : public npc_escortAI
//trigger epoch Yell("Thrall! Come outside and face your fate! ....")
//from here, thrall should not never be allowed to move to point 106 which he currently does.
break;
- case 106:
- if (!PlayerGUID)
- break;
- //trigger taretha to run down outside
- if (uint64 TarethaGUID = pInstance->GetData64(DATA_TARETHA))
+ case 106:
{
- if (Creature* Taretha = ((Creature*)Unit::GetUnit(*m_creature, TarethaGUID)))
- ((npc_escortAI*)(Taretha->AI()))->Start(false, false, true, PlayerGUID);
- }
+ if (!PlayerGUID)
+ break;
- //kill credit creature for quest
- Map *map = m_creature->GetMap();
- Map::PlayerList const& players = map->GetPlayers();
- if (!players.isEmpty() && map->IsDungeon())
- {
- for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ //trigger taretha to run down outside
+ if (uint64 TarethaGUID = pInstance->GetData64(DATA_TARETHA))
{
- if (Player* pPlayer = itr->getSource())
- pPlayer->KilledMonster(20156,m_creature->GetGUID());
+ if (Creature* Taretha = ((Creature*)Unit::GetUnit(*m_creature, TarethaGUID)))
+ ((npc_escortAI*)(Taretha->AI()))->Start(false, false, true, PlayerGUID);
}
- }
- //alot will happen here, thrall and taretha talk, erozion appear at spot to explain
- m_creature->SummonCreature(EROZION_ENTRY,2646.47,680.416,55.38,4.16,TEMPSUMMON_TIMED_DESPAWN,120000);
- break;
+ //kill credit creature for quest
+ Map *map = m_creature->GetMap();
+ Map::PlayerList const& players = map->GetPlayers();
+ if (!players.isEmpty() && map->IsDungeon())
+ {
+ for(Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
+ {
+ if (Player* pPlayer = itr->getSource())
+ pPlayer->KilledMonster(20156,m_creature->GetGUID());
+ }
+ }
+
+ //alot will happen here, thrall and taretha talk, erozion appear at spot to explain
+ m_creature->SummonCreature(EROZION_ENTRY,2646.47,680.416,55.38,4.16,TEMPSUMMON_TIMED_DESPAWN,120000);
+ }
+ break;
+ case 108:
+ //last waypoint, just set Thrall invisible, respawn is turned off
+ m_creature->SetVisibility(VISIBILITY_OFF);
+ break;
}
}
@@ -704,6 +712,9 @@ bool GossipSelect_npc_thrall_old_hillsbrad(Player *player, Creature *_Creature,
DoScriptText(SAY_TH_START_EVENT_PART1, _Creature);
((npc_escortAI*)(_Creature->AI()))->Start(true, true, true, player->GetGUID());
+ ((npc_escortAI*)(_Creature->AI()))->SetMaxPlayerDistance(100.0f);//not really needed, because it will not despawn if player is too far
+ ((npc_escortAI*)(_Creature->AI()))->SetDespawnAtEnd(false);
+ ((npc_escortAI*)(_Creature->AI()))->SetDespawnAtFar(false);
break;
case GOSSIP_ACTION_INFO_DEF+2:
@@ -810,8 +821,8 @@ bool GossipSelect_npc_taretha(Player *player, Creature *_Creature, uint32 sender
if( pInstance->GetData(TYPE_THRALL_EVENT) == IN_PROGRESS )
{
pInstance->SetData(TYPE_THRALL_PART4,IN_PROGRESS);
- if(pInstance->GetData64(DATA_EPOCH) == 0)
- _Creature->SummonCreature(ENTRY_EPOCH,2639.13,698.55,65.43,4.59,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,120000);
+ if(pInstance->GetData64(DATA_EPOCH) == 0)
+ _Creature->SummonCreature(ENTRY_EPOCH,2639.13,698.55,65.43,4.59,TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,120000);
if (uint64 ThrallGUID = pInstance->GetData64(DATA_THRALL))
{
diff --git a/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp b/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp
index af7a4501dc7..b8c6162a809 100644
--- a/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp
+++ b/src/bindings/scripts/scripts/zone/hellfire_citadel/shattered_halls/boss_warbringer_omrogg.cpp
@@ -287,13 +287,13 @@ struct TRINITY_DLL_DECL boss_warbringer_omroggAI : public ScriptedAI
{
Delay_Timer = 3500;
- if (!LeftHead && !RightHead)
+ if (!LeftHead || !RightHead)
return;
Unit *Left = Unit::GetUnit(*m_creature,LeftHead);
Unit *Right = Unit::GetUnit(*m_creature,RightHead);
- if (!Left && !Right)
+ if (!Left || !Right)
return;
if (AggroYell)
diff --git a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp
index b03ec2f7d42..3f839300f3f 100644
--- a/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp
+++ b/src/bindings/scripts/scripts/zone/magisters_terrace/boss_priestess_delrissa.cpp
@@ -341,7 +341,8 @@ struct TRINITY_DLL_DECL boss_priestess_guestAI : public ScriptedAI
boss_priestess_guestAI(Creature* c) : ScriptedAI(c)
{
Group.clear();
- pInstance = ((ScriptedInstance*)c->GetInstanceData()); AcquireGUIDs();
+ pInstance = ((ScriptedInstance*)c->GetInstanceData());
+ AcquireGUIDs();
}
ScriptedInstance* pInstance;