* Merged ScriptDev2 928
--HG-- branch : trunk
This commit is contained in:
@@ -16,7 +16,6 @@
|
||||
# define _TRINITY_SCRIPT_CONFIG "trinitycore.conf"
|
||||
#endif _TRINITY_SCRIPT_CONFIG
|
||||
|
||||
//*** Global data ***
|
||||
int num_sc_scripts;
|
||||
Script *m_scripts[MAX_SCRIPTS];
|
||||
|
||||
@@ -48,20 +47,16 @@ enum ChatType
|
||||
// Text Maps
|
||||
UNORDERED_MAP<int32, StringTextData> TextMap;
|
||||
|
||||
//*** End Global data ***
|
||||
// Waypoint lists
|
||||
std::list<PointMovement> PointMovementList;
|
||||
|
||||
//*** EventAI data ***
|
||||
//Event AI structure. Used exclusivly by mob_event_ai.cpp (60 bytes each)
|
||||
std::list<EventAI_Event> EventAI_Event_List;
|
||||
|
||||
//Event AI summon structure. Used exclusivly by mob_event_ai.cpp.
|
||||
UNORDERED_MAP<uint32, EventAI_Summon> EventAI_Summon_Map;
|
||||
|
||||
//Event AI error prevention structure. Used at runtime to prevent error log spam of same creature id.
|
||||
//UNORDERED_MAP<uint32, EventAI_CreatureError> EventAI_CreatureErrorPreventionList;
|
||||
|
||||
uint32 EAI_ErrorLevel;
|
||||
//*** End EventAI data ***
|
||||
|
||||
void FillSpellSummary();
|
||||
void LoadOverridenSQLData();
|
||||
@@ -858,6 +853,67 @@ void LoadDatabase()
|
||||
outstring_log("");
|
||||
outstring_log(">> Loaded 0 additional Custom Texts data. DB table `custom_texts` is empty.");
|
||||
}
|
||||
|
||||
// Drop Existing Waypoint list
|
||||
PointMovementList.clear();
|
||||
uint64 uiCreatureCount = 0;
|
||||
|
||||
// Load Waypoints
|
||||
result = TScriptDB.PQuery("SELECT COUNT(entry) FROM script_waypoint GROUP BY entry");
|
||||
if (result)
|
||||
{
|
||||
uiCreatureCount = result->GetRowCount();
|
||||
delete result;
|
||||
}
|
||||
|
||||
outstring_log("SD2: Loading Script Waypoints for %u creature(s)...", uiCreatureCount);
|
||||
|
||||
result = TScriptDB.PQuery("SELECT entry, pointid, location_x, location_y, location_z, waittime FROM script_waypoint ORDER BY pointid");
|
||||
|
||||
if (result)
|
||||
{
|
||||
barGoLink bar(result->GetRowCount());
|
||||
uint32 uiNodeCount = 0;
|
||||
|
||||
do
|
||||
{
|
||||
bar.step();
|
||||
Field* pFields = result->Fetch();
|
||||
PointMovement pTemp;
|
||||
|
||||
pTemp.m_uiCreatureEntry = pFields[0].GetUInt32();
|
||||
pTemp.m_uiPointId = pFields[1].GetUInt32();
|
||||
pTemp.m_fX = pFields[2].GetFloat();
|
||||
pTemp.m_fY = pFields[3].GetFloat();
|
||||
pTemp.m_fZ = pFields[4].GetFloat();
|
||||
pTemp.m_uiWaitTime = pFields[5].GetUInt32();
|
||||
|
||||
CreatureInfo const* pCInfo = GetCreatureTemplateStore(pTemp.m_uiCreatureEntry);
|
||||
if (!pCInfo)
|
||||
{
|
||||
error_db_log("SD2: DB table script_waypoint has waypoint for non-existant creature entry %u", pTemp.m_uiCreatureEntry);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!pCInfo->ScriptID)
|
||||
error_db_log("SD2: DB table script_waypoint has waypoint for creature entry %u, but creature does not have ScriptName defined and then useless.", pTemp.m_uiCreatureEntry);
|
||||
|
||||
PointMovementList.push_back(pTemp);
|
||||
++uiNodeCount;
|
||||
} while (result->NextRow());
|
||||
|
||||
delete result;
|
||||
|
||||
outstring_log("");
|
||||
outstring_log(">> Loaded %u Script Waypoint nodes.", uiNodeCount);
|
||||
}
|
||||
else
|
||||
{
|
||||
barGoLink bar(1);
|
||||
bar.step();
|
||||
outstring_log("");
|
||||
outstring_log(">> Loaded 0 Script Waypoints. DB table `script_waypoint` is empty.");
|
||||
}
|
||||
|
||||
//Gather additional data for EventAI
|
||||
result = TScriptDB.PQuery("SELECT id, position_x, position_y, position_z, orientation, spawntimesecs FROM eventai_summons");
|
||||
@@ -913,6 +969,12 @@ void LoadDatabase()
|
||||
delete result;
|
||||
}
|
||||
|
||||
outstring_log("SD2: Loading EventAI scripts for %u creature(s)...", uiEAICreatureCount);
|
||||
if (result)
|
||||
{
|
||||
uiEAICreatureCount = result->GetRowCount();
|
||||
delete result;
|
||||
}
|
||||
|
||||
//Gather event data
|
||||
result = TScriptDB.PQuery("SELECT id, creature_id, event_type, event_inverse_phase_mask, event_chance, event_flags, "
|
||||
@@ -1037,7 +1099,6 @@ void LoadDatabase()
|
||||
}
|
||||
break;
|
||||
|
||||
case EVENT_T_RANGE:
|
||||
case EVENT_T_FRIENDLY_HP:
|
||||
case EVENT_T_FRIENDLY_IS_CC:
|
||||
{
|
||||
|
||||
@@ -31,6 +31,16 @@ Unit* FindCreature(uint32 entry, float range, Unit* Finder);
|
||||
//Get a single gameobject of given entry
|
||||
GameObject* FindGameObject(uint32 entry, float range, Unit* Finder);
|
||||
|
||||
struct PointMovement
|
||||
{
|
||||
uint32 m_uiCreatureEntry;
|
||||
uint32 m_uiPointId;
|
||||
float m_fX;
|
||||
float m_fY;
|
||||
float m_fZ;
|
||||
uint32 m_uiWaitTime;
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL ScriptedAI : public CreatureAI
|
||||
{
|
||||
ScriptedAI(Creature* creature) : CreatureAI(creature), m_creature(creature), InCombat(false), IsFleeing(false) {}
|
||||
|
||||
@@ -64,7 +64,7 @@ struct TRINITY_DLL_DECL example_escortAI : public npc_escortAI
|
||||
{
|
||||
DoScriptText(SAY_WP_2, m_creature);
|
||||
Creature* temp = m_creature->SummonCreature(21878, m_creature->GetPositionX()+5, m_creature->GetPositionY()+7, m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 3000);
|
||||
|
||||
if(temp)
|
||||
temp->AI()->AttackStart(m_creature);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -22,6 +22,7 @@ SDCategory: Game Objects
|
||||
EndScriptData */
|
||||
|
||||
/* ContentData
|
||||
go_cat_figurine (the "trap" version of GO, two different exist)
|
||||
go_northern_crystal_pylon
|
||||
go_eastern_crystal_pylon
|
||||
go_western_crystal_pylon
|
||||
@@ -34,6 +35,21 @@ EndContentData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
/*######
|
||||
## go_cat_figurine
|
||||
######*/
|
||||
|
||||
enum
|
||||
{
|
||||
SPELL_SUMMON_GHOST_SABER = 5968,
|
||||
};
|
||||
|
||||
bool GOHello_go_cat_figurine(Player *player, GameObject* _GO)
|
||||
{
|
||||
player->CastSpell(player,SPELL_SUMMON_GHOST_SABER,true);
|
||||
return false;
|
||||
}
|
||||
|
||||
/*######
|
||||
## go_crystal_pylons (3x)
|
||||
######*/
|
||||
@@ -106,6 +122,26 @@ bool GOHello_go_field_repair_bot_74A(Player *player, GameObject* _GO)
|
||||
return true;
|
||||
}
|
||||
|
||||
/*######
|
||||
## go_gilded_brazier
|
||||
######*/
|
||||
|
||||
enum
|
||||
{
|
||||
NPC_STILLBLADE = 17716,
|
||||
};
|
||||
|
||||
bool GOHello_go_gilded_brazier(Player* pPlayer, GameObject* pGO)
|
||||
{
|
||||
if (pGO->GetGoType() == GAMEOBJECT_TYPE_GOOBER)
|
||||
{
|
||||
if (Creature* pCreature = pPlayer->SummonCreature(NPC_STILLBLADE, 8087.632, -7542.740, 151.568, 0.122, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 5000))
|
||||
pCreature->AI()->AttackStart(pPlayer);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*######
|
||||
## go_orb_of_command
|
||||
######*/
|
||||
@@ -151,6 +187,11 @@ void AddSC_go_scripts()
|
||||
{
|
||||
Script *newscript;
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "go_cat_figurine";
|
||||
newscript->pGOHello = &GOHello_go_cat_figurine;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="go_northern_crystal_pylon";
|
||||
newscript->pGOHello = &GOHello_go_northern_crystal_pylon;
|
||||
@@ -176,6 +217,11 @@ void AddSC_go_scripts()
|
||||
newscript->pGOHello = &GOHello_go_field_repair_bot_74A;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "go_gilded_brazier";
|
||||
newscript->pGOHello = &GOHello_go_gilded_brazier;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="go_orb_of_command";
|
||||
newscript->pGOHello = &GOHello_go_orb_of_command;
|
||||
|
||||
@@ -261,6 +261,20 @@ void npc_escortAI::AddWaypoint(uint32 id, float x, float y, float z, uint32 Wait
|
||||
WaypointList.push_back(t);
|
||||
}
|
||||
|
||||
void npc_escortAI::FillPointMovementListForCreature()
|
||||
{
|
||||
std::list<PointMovement>::iterator itr;
|
||||
|
||||
for (itr = PointMovementList.begin(); itr != PointMovementList.end(); ++itr)
|
||||
{
|
||||
if (itr->m_uiCreatureEntry == m_creature->GetEntry())
|
||||
{
|
||||
Escort_Waypoint pPoint(itr->m_uiPointId,itr->m_fX,itr->m_fY,itr->m_fZ,itr->m_uiWaitTime);
|
||||
WaypointList.push_back(pPoint);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void npc_escortAI::Start(bool bAttack, bool bDefend, bool bRun, uint64 pGUID)
|
||||
{
|
||||
if (InCombat)
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
#ifndef SC_ESCORTAI_H
|
||||
#define SC_ESCORTAI_H
|
||||
|
||||
extern std::list<PointMovement> PointMovementList;
|
||||
|
||||
struct Escort_Waypoint
|
||||
{
|
||||
Escort_Waypoint(uint32 _id, float _x, float _y, float _z, uint32 _w)
|
||||
@@ -55,6 +57,8 @@ struct TRINITY_DLL_DECL npc_escortAI : public ScriptedAI
|
||||
|
||||
// EscortAI functions
|
||||
void AddWaypoint(uint32 id, float x, float y, float z, uint32 WaitTimeMs = 0);
|
||||
|
||||
void FillPointMovementListForCreature();
|
||||
|
||||
void Start(bool bAttack, bool bDefend, bool bRun, uint64 pGUID = 0);
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
/* ScriptData
|
||||
SDName: Npcs_Special
|
||||
SD%Complete: 100
|
||||
SDComment: To be used for special NPCs that are located globally. Support for quest 3861 (Cluck!), 6622 and 6624 (Triage)
|
||||
SDComment: To be used for special NPCs that are located globally.
|
||||
SDCategory: NPCs
|
||||
EndScriptData
|
||||
*/
|
||||
@@ -26,6 +26,7 @@ EndScriptData
|
||||
npc_chicken_cluck 100% support for quest 3861 (Cluck!)
|
||||
npc_dancing_flames 100% midsummer event NPC
|
||||
npc_guardian 100% guardianAI used to prevent players from accessing off-limits areas. Not in use by SD2
|
||||
npc_garments_of_quests 80% NPC's related to all Garments of-quests 5621, 5624, 5625, 5648, 565
|
||||
npc_injured_patient 100% patients for triage-quests (6622 and 6624)
|
||||
npc_doctor 100% Gustaf Vanhowzen and Gregory Victor, quest 6622 and 6624 (Triage)
|
||||
npc_mount_vendor 100% Regular mount vendors all over the world. Display gossip if player doesn't meet the requirements to buy
|
||||
@@ -586,6 +587,258 @@ CreatureAI* GetAI_npc_doctor(Creature *_Creature)
|
||||
return new npc_doctorAI (_Creature);
|
||||
}
|
||||
|
||||
/*######
|
||||
## npc_garments_of_quests
|
||||
######*/
|
||||
|
||||
//TODO: get text for each NPC
|
||||
|
||||
enum
|
||||
{
|
||||
SPELL_LESSER_HEAL_R2 = 2052,
|
||||
SPELL_FORTITUDE_R1 = 1243,
|
||||
|
||||
QUEST_MOON = 5621,
|
||||
QUEST_LIGHT_1 = 5624,
|
||||
QUEST_LIGHT_2 = 5625,
|
||||
QUEST_SPIRIT = 5648,
|
||||
QUEST_DARKNESS = 5650,
|
||||
|
||||
ENTRY_SHAYA = 12429,
|
||||
ENTRY_ROBERTS = 12423,
|
||||
ENTRY_DOLF = 12427,
|
||||
ENTRY_KORJA = 12430,
|
||||
ENTRY_DG_KEL = 12428,
|
||||
|
||||
SAY_COMMON_HEALED = -1000164,
|
||||
SAY_DG_KEL_THANKS = -1000165,
|
||||
SAY_DG_KEL_GOODBYE = -1000166,
|
||||
SAY_ROBERTS_THANKS = -1000167,
|
||||
SAY_ROBERTS_GOODBYE = -1000168,
|
||||
SAY_KORJA_THANKS = -1000169,
|
||||
SAY_KORJA_GOODBYE = -1000170,
|
||||
SAY_DOLF_THANKS = -1000171,
|
||||
SAY_DOLF_GOODBYE = -1000172,
|
||||
SAY_SHAYA_THANKS = -1000173,
|
||||
SAY_SHAYA_GOODBYE = -1000174,
|
||||
};
|
||||
|
||||
float fRunTo[5][3]=
|
||||
{
|
||||
{9661.724, 869.803, 1270.742}, //shaya
|
||||
{-9543.747, -117.770, 57.893}, //roberts
|
||||
{-5650.226, -473.517, 397.027}, //dolf
|
||||
{189.175, -4747.069, 11.215}, //kor'ja
|
||||
{2471.303, 371.101, 30.919}, //kel
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL npc_garments_of_questsAI : public ScriptedAI
|
||||
{
|
||||
npc_garments_of_questsAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
|
||||
uint64 caster;
|
||||
|
||||
bool bIsHealed;
|
||||
bool bCanRun;
|
||||
|
||||
uint32 RunAwayTimer;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
caster = 0;
|
||||
|
||||
bIsHealed = false;
|
||||
bCanRun = false;
|
||||
|
||||
RunAwayTimer = 5000;
|
||||
|
||||
m_creature->SetStandState(UNIT_STAND_STATE_KNEEL);
|
||||
//expect database to have RegenHealth=0
|
||||
m_creature->SetHealth(int(m_creature->GetMaxHealth()*0.7));
|
||||
m_creature->SetVisibility(VISIBILITY_ON);
|
||||
}
|
||||
|
||||
void Aggro(Unit *who) {}
|
||||
|
||||
void SpellHit(Unit* pCaster, const SpellEntry *Spell)
|
||||
{
|
||||
if (Spell->Id == SPELL_LESSER_HEAL_R2 || Spell->Id == SPELL_FORTITUDE_R1)
|
||||
{
|
||||
//not while in combat
|
||||
if (InCombat)
|
||||
return;
|
||||
|
||||
//nothing to be done now
|
||||
if (bIsHealed && bCanRun)
|
||||
return;
|
||||
|
||||
if (pCaster->GetTypeId() == TYPEID_PLAYER)
|
||||
{
|
||||
switch(m_creature->GetEntry())
|
||||
{
|
||||
case ENTRY_SHAYA:
|
||||
if (((Player*)pCaster)->GetQuestStatus(QUEST_MOON) == QUEST_STATUS_INCOMPLETE)
|
||||
{
|
||||
if (bIsHealed && !bCanRun && Spell->Id == SPELL_FORTITUDE_R1)
|
||||
{
|
||||
DoScriptText(SAY_SHAYA_THANKS,m_creature,pCaster);
|
||||
bCanRun = true;
|
||||
}
|
||||
else if (!bIsHealed && Spell->Id == SPELL_LESSER_HEAL_R2)
|
||||
{
|
||||
caster = pCaster->GetGUID();
|
||||
m_creature->SetStandState(UNIT_STAND_STATE_STAND);
|
||||
DoScriptText(SAY_COMMON_HEALED,m_creature,pCaster);
|
||||
bIsHealed = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ENTRY_ROBERTS:
|
||||
if (((Player*)pCaster)->GetQuestStatus(QUEST_LIGHT_1) == QUEST_STATUS_INCOMPLETE)
|
||||
{
|
||||
if (bIsHealed && !bCanRun && Spell->Id == SPELL_FORTITUDE_R1)
|
||||
{
|
||||
DoScriptText(SAY_ROBERTS_THANKS,m_creature,pCaster);
|
||||
bCanRun = true;
|
||||
}
|
||||
else if (!bIsHealed && Spell->Id == SPELL_LESSER_HEAL_R2)
|
||||
{
|
||||
caster = pCaster->GetGUID();
|
||||
m_creature->SetStandState(UNIT_STAND_STATE_STAND);
|
||||
DoScriptText(SAY_COMMON_HEALED,m_creature,pCaster);
|
||||
bIsHealed = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ENTRY_DOLF:
|
||||
if (((Player*)pCaster)->GetQuestStatus(QUEST_LIGHT_2) == QUEST_STATUS_INCOMPLETE)
|
||||
{
|
||||
if (bIsHealed && !bCanRun && Spell->Id == SPELL_FORTITUDE_R1)
|
||||
{
|
||||
DoScriptText(SAY_DOLF_THANKS,m_creature,pCaster);
|
||||
bCanRun = true;
|
||||
}
|
||||
else if (!bIsHealed && Spell->Id == SPELL_LESSER_HEAL_R2)
|
||||
{
|
||||
caster = pCaster->GetGUID();
|
||||
m_creature->SetStandState(UNIT_STAND_STATE_STAND);
|
||||
DoScriptText(SAY_COMMON_HEALED,m_creature,pCaster);
|
||||
bIsHealed = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ENTRY_KORJA:
|
||||
if (((Player*)pCaster)->GetQuestStatus(QUEST_SPIRIT) == QUEST_STATUS_INCOMPLETE)
|
||||
{
|
||||
if (bIsHealed && !bCanRun && Spell->Id == SPELL_FORTITUDE_R1)
|
||||
{
|
||||
DoScriptText(SAY_KORJA_THANKS,m_creature,pCaster);
|
||||
bCanRun = true;
|
||||
}
|
||||
else if (!bIsHealed && Spell->Id == SPELL_LESSER_HEAL_R2)
|
||||
{
|
||||
caster = pCaster->GetGUID();
|
||||
m_creature->SetStandState(UNIT_STAND_STATE_STAND);
|
||||
DoScriptText(SAY_COMMON_HEALED,m_creature,pCaster);
|
||||
bIsHealed = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ENTRY_DG_KEL:
|
||||
if (((Player*)pCaster)->GetQuestStatus(QUEST_DARKNESS) == QUEST_STATUS_INCOMPLETE)
|
||||
{
|
||||
if (bIsHealed && !bCanRun && Spell->Id == SPELL_FORTITUDE_R1)
|
||||
{
|
||||
DoScriptText(SAY_DG_KEL_THANKS,m_creature,pCaster);
|
||||
bCanRun = true;
|
||||
}
|
||||
else if (!bIsHealed && Spell->Id == SPELL_LESSER_HEAL_R2)
|
||||
{
|
||||
caster = pCaster->GetGUID();
|
||||
m_creature->SetStandState(UNIT_STAND_STATE_STAND);
|
||||
DoScriptText(SAY_COMMON_HEALED,m_creature,pCaster);
|
||||
bIsHealed = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
//give quest credit, not expect any special quest objectives
|
||||
if (bCanRun)
|
||||
((Player*)pCaster)->TalkedToCreature(m_creature->GetEntry(),m_creature->GetGUID());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MovementInform(uint32 type, uint32 id)
|
||||
{
|
||||
if (type != POINT_MOTION_TYPE)
|
||||
return;
|
||||
|
||||
//we reached destination, kill ourselves
|
||||
if (id == 0)
|
||||
{
|
||||
m_creature->SetVisibility(VISIBILITY_OFF);
|
||||
m_creature->setDeathState(JUST_DIED);
|
||||
m_creature->SetHealth(0);
|
||||
m_creature->CombatStop();
|
||||
m_creature->DeleteThreatList();
|
||||
m_creature->RemoveCorpse();
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if (bCanRun && !InCombat)
|
||||
{
|
||||
if (RunAwayTimer <= diff)
|
||||
{
|
||||
if (Unit *pUnit = Unit::GetUnit(*m_creature,caster))
|
||||
{
|
||||
switch(m_creature->GetEntry())
|
||||
{
|
||||
case ENTRY_SHAYA:
|
||||
DoScriptText(SAY_SHAYA_GOODBYE,m_creature,pUnit);
|
||||
m_creature->GetMotionMaster()->MovePoint(0, fRunTo[0][0], fRunTo[0][1], fRunTo[0][2]);
|
||||
break;
|
||||
case ENTRY_ROBERTS:
|
||||
DoScriptText(SAY_ROBERTS_GOODBYE,m_creature,pUnit);
|
||||
m_creature->GetMotionMaster()->MovePoint(0, fRunTo[1][0], fRunTo[1][1], fRunTo[1][2]);
|
||||
break;
|
||||
case ENTRY_DOLF:
|
||||
DoScriptText(SAY_DOLF_GOODBYE,m_creature,pUnit);
|
||||
m_creature->GetMotionMaster()->MovePoint(0, fRunTo[2][0], fRunTo[2][1], fRunTo[2][2]);
|
||||
break;
|
||||
case ENTRY_KORJA:
|
||||
DoScriptText(SAY_KORJA_GOODBYE,m_creature,pUnit);
|
||||
m_creature->GetMotionMaster()->MovePoint(0, fRunTo[3][0], fRunTo[3][1], fRunTo[3][2]);
|
||||
break;
|
||||
case ENTRY_DG_KEL:
|
||||
DoScriptText(SAY_DG_KEL_GOODBYE,m_creature,pUnit);
|
||||
m_creature->GetMotionMaster()->MovePoint(0, fRunTo[4][0], fRunTo[4][1], fRunTo[4][2]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
EnterEvadeMode(); //something went wrong
|
||||
|
||||
RunAwayTimer = 30000;
|
||||
}else RunAwayTimer -= diff;
|
||||
}
|
||||
|
||||
//Return since we have no target
|
||||
if (!UpdateVictim())
|
||||
return;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_npc_garments_of_quests(Creature* pCreature)
|
||||
{
|
||||
return new npc_garments_of_questsAI(pCreature);
|
||||
}
|
||||
|
||||
/*######
|
||||
## npc_guardian
|
||||
######*/
|
||||
@@ -1155,6 +1408,11 @@ void AddSC_npcs_special()
|
||||
newscript->pQuestAccept = &QuestAccept_npc_doctor;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "npc_garments_of_quests";
|
||||
newscript->GetAI = &GetAI_npc_garments_of_quests;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="npc_guardian";
|
||||
newscript->GetAI = &GetAI_npc_guardian;
|
||||
|
||||
+1
-1
@@ -201,7 +201,7 @@ CreatureAI* GetAI_boss_nexusprince_shaffar(Creature *_Creature)
|
||||
|
||||
struct TRINITY_DLL_DECL mob_ethereal_beaconAI : public ScriptedAI
|
||||
{
|
||||
mob_ethereal_beaconAI(Creature *c) : ScriptedAI(c)
|
||||
mob_ethereal_beaconAI(Creature *c) : ScriptedAI(c), CanEvade(false)
|
||||
{
|
||||
HeroicMode = m_creature->GetMap()->IsHeroic();
|
||||
Reset();
|
||||
|
||||
@@ -89,50 +89,55 @@ bool GossipSelect_npc_sputtervalve(Player *player, Creature *_Creature, uint32 s
|
||||
## npc_taskmaster_fizzule
|
||||
######*/
|
||||
|
||||
//#define FACTION_HOSTILE_F 430
|
||||
#define FACTION_HOSTILE_F 16
|
||||
#define FACTION_FRIENDLY_F 35
|
||||
|
||||
#define SPELL_FLARE 10113
|
||||
#define SPELL_FOLLY 10137
|
||||
enum
|
||||
{
|
||||
FACTION_FRIENDLY_F = 35,
|
||||
SPELL_FLARE = 10113,
|
||||
SPELL_FOLLY = 10137,
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL npc_taskmaster_fizzuleAI : public ScriptedAI
|
||||
{
|
||||
npc_taskmaster_fizzuleAI(Creature* c) : ScriptedAI(c) { Reset(); }
|
||||
npc_taskmaster_fizzuleAI(Creature* c) : ScriptedAI(c)
|
||||
{
|
||||
factionNorm = c->getFaction();
|
||||
Reset();
|
||||
}
|
||||
|
||||
uint32 factionNorm;
|
||||
bool IsFriend;
|
||||
uint32 Reset_Timer;
|
||||
uint32 FlareCount;
|
||||
uint8 FlareCount;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
IsFriend = false;
|
||||
Reset_Timer = 120000;
|
||||
FlareCount = 0;
|
||||
m_creature->setFaction(FACTION_HOSTILE_F);
|
||||
m_creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
|
||||
m_creature->setFaction(factionNorm);
|
||||
}
|
||||
|
||||
//This is a hack. Spellcast will make creature aggro but that is not
|
||||
//supposed to happen (Trinity not implemented/not found way to detect this spell kind)
|
||||
void DoUglyHack()
|
||||
void DoFriend()
|
||||
{
|
||||
m_creature->RemoveAllAuras();
|
||||
m_creature->DeleteThreatList();
|
||||
m_creature->CombatStop();
|
||||
|
||||
m_creature->StopMoving();
|
||||
m_creature->GetMotionMaster()->MoveIdle();
|
||||
|
||||
m_creature->setFaction(FACTION_FRIENDLY_F);
|
||||
m_creature->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE);
|
||||
}
|
||||
|
||||
void SpellHit(Unit *caster, const SpellEntry *spell)
|
||||
{
|
||||
if( spell->Id == SPELL_FLARE || spell->Id == SPELL_FOLLY )
|
||||
if (spell->Id == SPELL_FLARE || spell->Id == SPELL_FOLLY)
|
||||
{
|
||||
DoUglyHack();
|
||||
++FlareCount;
|
||||
if( FlareCount >= 2 )
|
||||
{
|
||||
m_creature->setFaction(FACTION_FRIENDLY_F);
|
||||
|
||||
if (FlareCount >= 2)
|
||||
IsFriend = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,9 +145,9 @@ struct TRINITY_DLL_DECL npc_taskmaster_fizzuleAI : public ScriptedAI
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if( IsFriend )
|
||||
if (IsFriend)
|
||||
{
|
||||
if( Reset_Timer < diff )
|
||||
if (Reset_Timer < diff)
|
||||
{
|
||||
EnterEvadeMode();
|
||||
} else Reset_Timer -= diff;
|
||||
@@ -154,19 +159,22 @@ struct TRINITY_DLL_DECL npc_taskmaster_fizzuleAI : public ScriptedAI
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
CreatureAI* GetAI_npc_taskmaster_fizzule(Creature *_Creature)
|
||||
|
||||
CreatureAI* GetAI_npc_taskmaster_fizzule(Creature* pCreature)
|
||||
{
|
||||
return new npc_taskmaster_fizzuleAI (_Creature);
|
||||
return new npc_taskmaster_fizzuleAI(pCreature);
|
||||
}
|
||||
|
||||
bool ReciveEmote_npc_taskmaster_fizzule(Player *player, Creature *_Creature, uint32 emote)
|
||||
bool ReciveEmote_npc_taskmaster_fizzule(Player* pPlayer, Creature* pCreature, uint32 emote)
|
||||
{
|
||||
if( emote == TEXTEMOTE_SALUTE )
|
||||
if (emote == TEXTEMOTE_SALUTE)
|
||||
{
|
||||
if( ((npc_taskmaster_fizzuleAI*)_Creature->AI())->FlareCount >= 2 )
|
||||
if (((npc_taskmaster_fizzuleAI*)pCreature->AI())->FlareCount >= 2)
|
||||
{
|
||||
_Creature->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_QUESTGIVER);
|
||||
_Creature->HandleEmoteCommand(EMOTE_ONESHOT_SALUTE);
|
||||
if (pCreature->getFaction() == FACTION_FRIENDLY_F)
|
||||
return true;
|
||||
else
|
||||
((npc_taskmaster_fizzuleAI*)pCreature->AI())->DoFriend();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -103,8 +103,10 @@ struct TRINITY_DLL_DECL boss_overlordwyrmthalakAI : public ScriptedAI
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
|
||||
SummonedCreature = m_creature->SummonCreature(9216,ADD_1X,ADD_1Y,ADD_1Z,ADD_1O,TEMPSUMMON_TIMED_DESPAWN,300000);
|
||||
if(SummonedCreature)
|
||||
((CreatureAI*)SummonedCreature->AI())->AttackStart(target);
|
||||
SummonedCreature = m_creature->SummonCreature(9268,ADD_2X,ADD_2Y,ADD_2Z,ADD_2O,TEMPSUMMON_TIMED_DESPAWN,300000);
|
||||
if(SummonedCreature)
|
||||
((CreatureAI*)SummonedCreature->AI())->AttackStart(target);
|
||||
Summoned = true;
|
||||
}
|
||||
|
||||
@@ -69,6 +69,7 @@ void hyjalAI::Reset()
|
||||
|
||||
// Misc
|
||||
WaveCount = 0;
|
||||
EnemyCount = 0;
|
||||
|
||||
// Set faction properly based on creature entry
|
||||
switch(m_creature->GetEntry())
|
||||
|
||||
@@ -135,17 +135,21 @@ bool GOHello_gilded_brazier(Player *player, GameObject* _GO)
|
||||
## npc_ranger_lilatha
|
||||
######*/
|
||||
|
||||
#define SAY_START -1000140
|
||||
#define SAY_PROGRESS1 -1000141
|
||||
#define SAY_PROGRESS2 -1000142
|
||||
#define SAY_PROGRESS3 -1000143
|
||||
#define SAY_END1 -1000144
|
||||
#define SAY_END2 -1000145
|
||||
#define SAY_CAPTAIN_ANSWER -1000146
|
||||
enum
|
||||
{
|
||||
SAY_START = -1000140,
|
||||
SAY_PROGRESS1 = -1000141,
|
||||
SAY_PROGRESS2 = -1000142,
|
||||
SAY_PROGRESS3 = -1000143,
|
||||
SAY_END1 = -1000144,
|
||||
SAY_END2 = -1000145,
|
||||
SAY_CAPTAIN_ANSWER = -1000146,
|
||||
|
||||
#define QUEST_ESCAPE_FROM_THE_CATACOMBS 9212
|
||||
#define GO_CAGE 181152
|
||||
#define NPC_CAPTAIN_HELIOS 16220
|
||||
QUEST_ESCAPE_FROM_THE_CATACOMBS = 9212,
|
||||
GO_CAGE = 181152,
|
||||
NPC_CAPTAIN_HELIOS = 16220,
|
||||
FACTION_SMOON_E = 1603,
|
||||
};
|
||||
|
||||
struct TRINITY_DLL_DECL npc_ranger_lilathaAI : public npc_escortAI
|
||||
{
|
||||
@@ -249,41 +253,7 @@ CreatureAI* GetAI_npc_ranger_lilathaAI(Creature *_Creature)
|
||||
{
|
||||
npc_ranger_lilathaAI* ranger_lilathaAI = new npc_ranger_lilathaAI(_Creature);
|
||||
|
||||
ranger_lilathaAI->AddWaypoint(0, 7545.07, -7359.87, 162.354, 4000); // Say0
|
||||
ranger_lilathaAI->AddWaypoint(1, 7550.048340, -7362.237793, 162.235657);
|
||||
ranger_lilathaAI->AddWaypoint(2, 7566.976074, -7364.315430, 161.738770);
|
||||
ranger_lilathaAI->AddWaypoint(3, 7578.830566, -7361.677734, 161.738770);
|
||||
ranger_lilathaAI->AddWaypoint(4, 7590.969238, -7359.053711, 162.257660);
|
||||
ranger_lilathaAI->AddWaypoint(5, 7598.354004, -7362.815430, 162.256683, 4000); // Say1
|
||||
ranger_lilathaAI->AddWaypoint(6, 7605.861328, -7380.424316, 161.937073);
|
||||
ranger_lilathaAI->AddWaypoint(7, 7605.295410, -7387.382813, 157.253998);
|
||||
ranger_lilathaAI->AddWaypoint(8, 7606.131836, -7393.893555, 156.941925);
|
||||
ranger_lilathaAI->AddWaypoint(9, 7615.207520, -7400.187012, 157.142639);
|
||||
ranger_lilathaAI->AddWaypoint(10, 7618.956543, -7402.652832, 158.202042);
|
||||
ranger_lilathaAI->AddWaypoint(11, 7636.850586, -7401.756836, 162.144791);
|
||||
ranger_lilathaAI->AddWaypoint(12, 7637.058105, -7404.944824, 162.206970, 4000);// Say2
|
||||
ranger_lilathaAI->AddWaypoint(13, 7636.910645, -7412.585449, 162.366425);
|
||||
ranger_lilathaAI->AddWaypoint(14, 7637.607910, -7425.591797, 162.630661);
|
||||
ranger_lilathaAI->AddWaypoint(15, 7637.816895, -7459.057129, 163.302704);
|
||||
ranger_lilathaAI->AddWaypoint(16, 7638.859863, -7470.902344, 162.517059);
|
||||
ranger_lilathaAI->AddWaypoint(17, 7641.395996, -7488.217285, 157.381287);
|
||||
ranger_lilathaAI->AddWaypoint(18, 7634.455566, -7505.451660, 154.682159);
|
||||
ranger_lilathaAI->AddWaypoint(19, 7631.906738, -7516.948730, 153.597382); // say3
|
||||
ranger_lilathaAI->AddWaypoint(20, 7622.231445, -7537.037598, 151.587112);
|
||||
ranger_lilathaAI->AddWaypoint(21, 7610.921875, -7550.670410, 149.639374);
|
||||
ranger_lilathaAI->AddWaypoint(22, 7598.229004, -7562.551758, 145.953888);
|
||||
ranger_lilathaAI->AddWaypoint(23, 7588.509277, -7577.755371, 148.294479);
|
||||
ranger_lilathaAI->AddWaypoint(24, 7567.339355, -7608.456055, 146.006485);
|
||||
ranger_lilathaAI->AddWaypoint(25, 7562.547852, -7617.417969, 148.097504);
|
||||
ranger_lilathaAI->AddWaypoint(26, 7561.508789, -7645.064453, 151.245163);
|
||||
ranger_lilathaAI->AddWaypoint(27, 7563.337402, -7654.652344, 151.227158);
|
||||
ranger_lilathaAI->AddWaypoint(28, 7565.533691, -7658.296387, 151.248886);
|
||||
ranger_lilathaAI->AddWaypoint(29, 7571.155762, -7659.118652, 151.244568);
|
||||
ranger_lilathaAI->AddWaypoint(30, 7579.119629, -7662.213867, 151.651505);
|
||||
ranger_lilathaAI->AddWaypoint(31, 7603.768066, -7667.000488, 153.997726);
|
||||
ranger_lilathaAI->AddWaypoint(32, 7603.768066, -7667.000488, 153.997726, 4000); // Say4 & Set orientation
|
||||
ranger_lilathaAI->AddWaypoint(33, 7603.768066, -7667.000488, 153.997726, 8000); // Say5 & Set orientation
|
||||
ranger_lilathaAI->AddWaypoint(34, 7603.768066, -7667.000488, 153.997726);
|
||||
ranger_lilathaAI->FillPointMovementListForCreature();
|
||||
|
||||
return (CreatureAI*)ranger_lilathaAI;
|
||||
}
|
||||
|
||||
+3
-4
@@ -256,15 +256,14 @@ struct TRINITY_DLL_DECL boss_warchief_kargath_bladefistAI : public ScriptedAI
|
||||
if (Summon_Assistant_Timer < diff)
|
||||
{
|
||||
Unit* target = NULL;
|
||||
Creature* Assistance;
|
||||
|
||||
for(int i = 0; i < summoned; i++)
|
||||
{
|
||||
switch(rand()%3)
|
||||
{
|
||||
case 0: Assistance = m_creature->SummonCreature(MOB_HEARTHEN_GUARD,AddsEntrance[0],AddsEntrance[1], AddsEntrance[2], 0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,30000); break;
|
||||
case 1: Assistance = m_creature->SummonCreature(MOB_SHARPSHOOTER_GUARD,AddsEntrance[0],AddsEntrance[1], AddsEntrance[2], 0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,30000); break;
|
||||
case 2: Assistance = m_creature->SummonCreature(MOB_REAVER_GUARD,AddsEntrance[0],AddsEntrance[1], AddsEntrance[2], 0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,30000); break;
|
||||
case 0: m_creature->SummonCreature(MOB_HEARTHEN_GUARD,AddsEntrance[0],AddsEntrance[1], AddsEntrance[2], 0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,30000); break;
|
||||
case 1: m_creature->SummonCreature(MOB_SHARPSHOOTER_GUARD,AddsEntrance[0],AddsEntrance[1], AddsEntrance[2], 0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,30000); break;
|
||||
case 2: m_creature->SummonCreature(MOB_REAVER_GUARD,AddsEntrance[0],AddsEntrance[1], AddsEntrance[2], 0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,30000); break;
|
||||
}
|
||||
}
|
||||
if(rand()%100 < 20) summoned++;
|
||||
|
||||
@@ -544,7 +544,7 @@ struct TRINITY_DLL_DECL boss_baron_rafe_dreugerAI : public boss_moroes_guestAI
|
||||
struct TRINITY_DLL_DECL boss_lady_catriona_von_indiAI : public boss_moroes_guestAI
|
||||
{
|
||||
//Holy Priest
|
||||
boss_lady_catriona_von_indiAI(Creature *c) : boss_moroes_guestAI(c) {}
|
||||
boss_lady_catriona_von_indiAI(Creature *c) : boss_moroes_guestAI(c) {Reset();}
|
||||
|
||||
uint32 DispelMagic_Timer;
|
||||
uint32 GreaterHeal_Timer;
|
||||
@@ -614,7 +614,7 @@ struct TRINITY_DLL_DECL boss_lady_catriona_von_indiAI : public boss_moroes_guest
|
||||
struct TRINITY_DLL_DECL boss_lady_keira_berrybuckAI : public boss_moroes_guestAI
|
||||
{
|
||||
//Holy Pally
|
||||
boss_lady_keira_berrybuckAI(Creature *c) : boss_moroes_guestAI(c) {}
|
||||
boss_lady_keira_berrybuckAI(Creature *c) : boss_moroes_guestAI(c) {Reset();}
|
||||
|
||||
uint32 Cleanse_Timer;
|
||||
uint32 GreaterBless_Timer;
|
||||
@@ -731,7 +731,7 @@ struct TRINITY_DLL_DECL boss_lord_robin_darisAI : public boss_moroes_guestAI
|
||||
struct TRINITY_DLL_DECL boss_lord_crispin_ferenceAI : public boss_moroes_guestAI
|
||||
{
|
||||
//Arms Warr
|
||||
boss_lord_crispin_ferenceAI(Creature *c) : boss_moroes_guestAI(c) {}
|
||||
boss_lord_crispin_ferenceAI(Creature *c) : boss_moroes_guestAI(c) {Reset();}
|
||||
|
||||
uint32 Disarm_Timer;
|
||||
uint32 HeroicStrike_Timer;
|
||||
|
||||
@@ -160,6 +160,8 @@ struct TRINITY_DLL_DECL boss_terestianAI : public ScriptedAI
|
||||
{
|
||||
boss_terestianAI(Creature *c) : ScriptedAI(c)
|
||||
{
|
||||
for(uint8 i = 0; i < 2; ++i)
|
||||
PortalGUID[i] = 0;
|
||||
pInstance = ((ScriptedInstance*)c->GetInstanceData());
|
||||
Reset();
|
||||
}
|
||||
|
||||
@@ -190,13 +190,16 @@ struct TRINITY_DLL_DECL boss_priestess_delrissaAI : public ScriptedAI
|
||||
if (resummon)
|
||||
{
|
||||
pAdd = m_creature->SummonCreature(Adds[i]->entry, LackeyLocations[i][0], LackeyLocations[i][1], POS_Z, ORIENT, TEMPSUMMON_DEAD_DESPAWN, 0);
|
||||
if (pAdd)
|
||||
{
|
||||
Add* nAdd = new Add(Adds[i]->entry, pAdd->GetGUID());
|
||||
Adds.erase(Adds.begin() + i);
|
||||
Adds.push_back(nAdd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void KilledUnit(Unit* victim)
|
||||
{
|
||||
if (victim->GetTypeId() != TYPEID_PLAYER)
|
||||
|
||||
@@ -225,6 +225,7 @@ struct TRINITY_DLL_DECL boss_ragnarosAI : public Scripted_NoMovementAI
|
||||
{
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
Summoned = m_creature->SummonCreature(12143,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0,TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN,900000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
}
|
||||
|
||||
@@ -242,6 +243,7 @@ struct TRINITY_DLL_DECL boss_ragnarosAI : public Scripted_NoMovementAI
|
||||
{
|
||||
target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
Summoned = m_creature->SummonCreature(12143,target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(),0,TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN,900000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
}
|
||||
|
||||
|
||||
@@ -258,7 +258,7 @@ struct TRINITY_DLL_DECL boss_kelthuzadAI : public ScriptedAI
|
||||
Walk_Pos_Z = ADDZ_RIGHT_NEAR;
|
||||
break;
|
||||
}
|
||||
pUnit->SendMonsterMoveWithSpeed(Walk_Pos_X, Walk_Pos_Y, Walk_Pos_Z,MOVEMENTFLAG_WALK_MODE);
|
||||
pUnit->SendMonsterMoveWithSpeed(Walk_Pos_X, Walk_Pos_Y, Walk_Pos_Z);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -408,7 +408,7 @@ struct TRINITY_DLL_DECL boss_kelthuzadAI : public ScriptedAI
|
||||
{
|
||||
//if we find no one to figth walk to the center
|
||||
if(!pUnit->isInCombat())
|
||||
pUnit->SendMonsterMoveWithSpeed(Walk_Pos_X,Walk_Pos_Y,Walk_Pos_Z,MOVEMENTFLAG_WALK_MODE);
|
||||
pUnit->SendMonsterMoveWithSpeed(Walk_Pos_X,Walk_Pos_Y,Walk_Pos_Z);
|
||||
|
||||
//Safe storing of creatures
|
||||
GuardiansOfIcecrown[GuardiansOfIcecrown_Count] = pUnit->GetGUID();
|
||||
|
||||
@@ -127,59 +127,79 @@ struct TRINITY_DLL_DECL boss_darkmaster_gandlingAI : public ScriptedAI
|
||||
case 0:
|
||||
DoTeleportPlayer(target, 250.0696,0.3921,84.8408,3.149);
|
||||
Summoned = m_creature->SummonCreature(16119,254.2325,0.3417,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(16119,257.7133,4.0226,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(16119,258.6702,-2.60656,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
break;
|
||||
case 1:
|
||||
DoTeleportPlayer(target, 181.4220,-91.9481,84.8410,1.608);
|
||||
Summoned = m_creature->SummonCreature(16119,184.0519,-73.5649,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(16119,179.5951,-73.7045,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(16119,180.6452,-78.2143,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(16119,283.2274,-78.1518,84.8407,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
break;
|
||||
case 2:
|
||||
DoTeleportPlayer(target, 95.1547,-1.8173,85.2289,0.043);
|
||||
Summoned = m_creature->SummonCreature(16119,100.9404,-1.8016,85.2289,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(16119,101.3729,0.4882,85.2289,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(16119,101.4596,-4.4740,85.2289,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
break;
|
||||
case 3:
|
||||
DoTeleportPlayer(target, 250.0696,0.3921,72.6722,3.149);
|
||||
Summoned = m_creature->SummonCreature(16119,240.34481,0.7368,72.6722,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(16119,240.3633,-2.9520,72.6722,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(16119,240.6702,3.34949,72.6722,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
break;
|
||||
case 4:
|
||||
DoTeleportPlayer(target, 181.4220,-91.9481,70.7734,1.608);
|
||||
Summoned = m_creature->SummonCreature(16119,184.0519,-73.5649,70.7734,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(16119,179.5951,-73.7045,70.7734,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(16119,180.6452,-78.2143,70.7734,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(16119,283.2274,-78.1518,70.7734,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
break;
|
||||
case 5:
|
||||
DoTeleportPlayer(target, 106.1541,-1.8994,75.3663,0.043);
|
||||
Summoned = m_creature->SummonCreature(16119,115.3945,-1.5555,75.3663,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(16119,257.7133,1.8066,75.3663,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
Summoned = m_creature->SummonCreature(16119,258.6702,-5.1001,75.3663,0,TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT,10000);
|
||||
if (Summoned)
|
||||
((CreatureAI*)Summoned->AI())->AttackStart(target);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -135,34 +135,46 @@ struct TRINITY_DLL_DECL boss_fankrissAI : public ScriptedAI
|
||||
case 0:
|
||||
DoTeleportPlayer(target, -8106.0142,1289.2900,-74.419533,5.112);
|
||||
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()-3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Hatchling)
|
||||
((CreatureAI*)Hatchling->AI())->AttackStart(target);
|
||||
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()+3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Hatchling)
|
||||
((CreatureAI*)Hatchling->AI())->AttackStart(target);
|
||||
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()-5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Hatchling)
|
||||
((CreatureAI*)Hatchling->AI())->AttackStart(target);
|
||||
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()+5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Hatchling)
|
||||
((CreatureAI*)Hatchling->AI())->AttackStart(target);
|
||||
break;
|
||||
case 1:
|
||||
DoTeleportPlayer(target, -7990.135354,1155.1907,-78.849319,2.608);
|
||||
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()-3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Hatchling)
|
||||
((CreatureAI*)Hatchling->AI())->AttackStart(target);
|
||||
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()+3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Hatchling)
|
||||
((CreatureAI*)Hatchling->AI())->AttackStart(target);
|
||||
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()-5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Hatchling)
|
||||
((CreatureAI*)Hatchling->AI())->AttackStart(target);
|
||||
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()+5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Hatchling)
|
||||
((CreatureAI*)Hatchling->AI())->AttackStart(target);
|
||||
break;
|
||||
case 2:
|
||||
DoTeleportPlayer(target,-8159.7753,1127.9064,-76.868660,0.675);
|
||||
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()-3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Hatchling)
|
||||
((CreatureAI*)Hatchling->AI())->AttackStart(target);
|
||||
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-3, target->GetPositionY()+3, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Hatchling)
|
||||
((CreatureAI*)Hatchling->AI())->AttackStart(target);
|
||||
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()-5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Hatchling)
|
||||
((CreatureAI*)Hatchling->AI())->AttackStart(target);
|
||||
Hatchling = m_creature->SummonCreature(15962, target->GetPositionX()-5, target->GetPositionY()+5, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Hatchling)
|
||||
((CreatureAI*)Hatchling->AI())->AttackStart(target);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -262,6 +262,9 @@ struct TRINITY_DLL_DECL boss_skeramAI : public ScriptedAI
|
||||
m_creature->SetVisibility(VISIBILITY_OFF);
|
||||
m_creature->Relocate(bossc->x, bossc->y, bossc->z, bossc->r);
|
||||
Invisible = true;
|
||||
delete place1;
|
||||
delete place2;
|
||||
delete place3;
|
||||
DoResetThreat();
|
||||
DoStopAttack();
|
||||
|
||||
@@ -275,20 +278,24 @@ struct TRINITY_DLL_DECL boss_skeramAI : public ScriptedAI
|
||||
Unit* target = SelectUnit(SELECT_TARGET_RANDOM,0);
|
||||
|
||||
Image1 = m_creature->SummonCreature(15263, i1->x, i1->y, i1->z, i1->r, TEMPSUMMON_CORPSE_DESPAWN, 30000);
|
||||
Image1->SetMaxHealth(m_creature->GetMaxHealth() / 5);
|
||||
Image1->SetHealth(m_creature->GetHealth() / 5);
|
||||
if (target)
|
||||
Image1->AI()->AttackStart(target);
|
||||
if (Image1)
|
||||
{
|
||||
Image1->SetMaxHealth(m_creature->GetMaxHealth() / 5);
|
||||
Image1->SetHealth(m_creature->GetHealth() / 5);
|
||||
if (target)
|
||||
Image1->AI()->AttackStart(target);
|
||||
((boss_skeramAI*)Image1->AI())->IsImage = true;
|
||||
}
|
||||
|
||||
Image2 = m_creature->SummonCreature(15263,i2->x, i2->y, i2->z, i2->r, TEMPSUMMON_CORPSE_DESPAWN, 30000);
|
||||
Image2->SetMaxHealth(m_creature->GetMaxHealth() / 5);
|
||||
Image2->SetHealth(m_creature->GetHealth() / 5);
|
||||
if (target)
|
||||
Image2->AI()->AttackStart(target);
|
||||
|
||||
((boss_skeramAI*)Image1->AI())->IsImage = true;
|
||||
((boss_skeramAI*)Image2->AI())->IsImage = true;
|
||||
|
||||
if (Image2)
|
||||
{
|
||||
Image2->SetMaxHealth(m_creature->GetMaxHealth() / 5);
|
||||
Image2->SetHealth(m_creature->GetHealth() / 5);
|
||||
if (target)
|
||||
Image2->AI()->AttackStart(target);
|
||||
((boss_skeramAI*)Image2->AI())->IsImage = true;
|
||||
}
|
||||
Invisible = true;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -221,6 +221,8 @@ struct TRINITY_DLL_DECL aqsentinelAI : public ScriptedAI
|
||||
DoYell("I dont have enough buddies.", LANG_NEUTRAL, 0);*/
|
||||
SendMyListToBuddies();
|
||||
CallBuddiesToAttack(who);
|
||||
|
||||
delete[] chosenAbilities;
|
||||
}
|
||||
|
||||
bool gatherOthersWhenAggro;
|
||||
|
||||
@@ -174,7 +174,7 @@ struct TRINITY_DLL_DECL npc_highborne_lamenterAI : public ScriptedAI
|
||||
{
|
||||
if( EventMove_Timer < diff )
|
||||
{
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->AddUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT | MOVEMENTFLAG_LEVITATING);
|
||||
m_creature->SendMonsterMoveWithSpeed(m_creature->GetPositionX(),m_creature->GetPositionY(),HIGHBORNE_LOC_Y_NEW,5000);
|
||||
m_creature->GetMap()->CreatureRelocation(m_creature,m_creature->GetPositionX(),m_creature->GetPositionY(),HIGHBORNE_LOC_Y_NEW,m_creature->GetOrientation());
|
||||
EventMove = false;
|
||||
|
||||
@@ -23,7 +23,7 @@ EndScriptData */
|
||||
|
||||
#include "precompiled.h"
|
||||
|
||||
#define SPELL_FROSTBREATH 21099
|
||||
#define SPELL_FROSTBREATH 16099
|
||||
#define SPELL_MASSIVEGEYSER 22421 //Not working. Cause its a summon...
|
||||
#define SPELL_SLAM 24326
|
||||
|
||||
|
||||
@@ -55,10 +55,6 @@ struct TRINITY_DLL_DECL boss_jindoAI : public ScriptedAI
|
||||
uint32 Delusions_Timer;
|
||||
uint32 Teleport_Timer;
|
||||
|
||||
Creature *Shade;
|
||||
Creature *Skeletons;
|
||||
Creature *HealingWard;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
BrainWashTotem_Timer = 20000;
|
||||
@@ -89,7 +85,7 @@ struct TRINITY_DLL_DECL boss_jindoAI : public ScriptedAI
|
||||
if (HealingWard_Timer < diff)
|
||||
{
|
||||
//DoCast(m_creature, SPELL_POWERFULLHEALINGWARD);
|
||||
HealingWard = m_creature->SummonCreature(14987, m_creature->GetPositionX()+3, m_creature->GetPositionY()-2, m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,30000);
|
||||
m_creature->SummonCreature(14987, m_creature->GetPositionX()+3, m_creature->GetPositionY()-2, m_creature->GetPositionZ(), 0, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN,30000);
|
||||
HealingWard_Timer = 14000 + rand()%6000;
|
||||
}else HealingWard_Timer -= diff;
|
||||
|
||||
@@ -111,7 +107,8 @@ struct TRINITY_DLL_DECL boss_jindoAI : public ScriptedAI
|
||||
{
|
||||
DoCast(target, SPELL_DELUSIONSOFJINDO);
|
||||
|
||||
Shade = m_creature->SummonCreature(14986, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
Creature *Shade = m_creature->SummonCreature(14986, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Shade)
|
||||
Shade->AI()->AttackStart(target);
|
||||
}
|
||||
|
||||
@@ -130,23 +127,33 @@ struct TRINITY_DLL_DECL boss_jindoAI : public ScriptedAI
|
||||
if(DoGetThreat(m_creature->getVictim()))
|
||||
DoModifyThreatPercent(target,-100);
|
||||
|
||||
Creature *Skeletons;
|
||||
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()+2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Skeletons)
|
||||
Skeletons->AI()->AttackStart(target);
|
||||
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()-2, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Skeletons)
|
||||
Skeletons->AI()->AttackStart(target);
|
||||
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()+4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Skeletons)
|
||||
Skeletons->AI()->AttackStart(target);
|
||||
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()-4, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Skeletons)
|
||||
Skeletons->AI()->AttackStart(target);
|
||||
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()+2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Skeletons)
|
||||
Skeletons->AI()->AttackStart(target);
|
||||
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()-2, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Skeletons)
|
||||
Skeletons->AI()->AttackStart(target);
|
||||
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()+4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Skeletons)
|
||||
Skeletons->AI()->AttackStart(target);
|
||||
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX(), target->GetPositionY()-4, target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Skeletons)
|
||||
Skeletons->AI()->AttackStart(target);
|
||||
Skeletons = m_creature->SummonCreature(14826, target->GetPositionX()+3, target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 15000);
|
||||
if (Skeletons)
|
||||
Skeletons->AI()->AttackStart(target);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user