mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 02:25:38 +01:00
Update to Trinity 863.
--HG-- branch : trunk
This commit is contained in:
@@ -41,6 +41,7 @@ item_voodoo_charm Provide proper error message and target(q256
|
||||
item_vorenthals_presence(i30259) Prevents abuse of this item
|
||||
item_yehkinyas_bramble(i10699) Allow cast spell on vale screecher only and remove corpse if cast sucessful (q3520)
|
||||
item_zezzak_shard(i31463) Quest The eyes of Grillok (q10813). Prevents abuse
|
||||
item_inoculating_crystal Quest Inoculating. Prevent abuse
|
||||
EndContentData */
|
||||
|
||||
#include "precompiled.h"
|
||||
@@ -285,6 +286,25 @@ bool ItemUse_item_muiseks_vessel(Player *player, Item* _Item, SpellCastTargets c
|
||||
return true;
|
||||
}
|
||||
|
||||
/*#####
|
||||
# item_inoculating_crystal
|
||||
#####*/
|
||||
|
||||
bool ItemUse_item_inoculating_crystal(Player *player, Item* _Item, SpellCastTargets const& targets)
|
||||
{
|
||||
if( targets.getUnitTarget() && targets.getUnitTarget()->GetTypeId()==TYPEID_UNIT &&
|
||||
targets.getUnitTarget()->GetEntry() == 16518 )
|
||||
return false;
|
||||
|
||||
WorldPacket data(SMSG_CAST_FAILED, (4+2)); // prepare packet error message
|
||||
data << uint32(_Item->GetEntry()); // itemId
|
||||
data << uint8(SPELL_FAILED_BAD_TARGETS); // reason
|
||||
player->GetSession()->SendPacket(&data); // send message: Invalid target
|
||||
|
||||
player->SendEquipError(EQUIP_ERR_NONE,_Item,NULL); // break spell
|
||||
return true;
|
||||
}
|
||||
|
||||
/*#####
|
||||
# item_razorthorn_flayer_gland
|
||||
#####*/
|
||||
@@ -519,6 +539,11 @@ void AddSC_item_scripts()
|
||||
newscript->pItemUse = &ItemUse_item_muiseks_vessel;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="item_inoculating_crystal";
|
||||
newscript->pItemUse = &ItemUse_item_inoculating_crystal;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="item_razorthorn_flayer_gland";
|
||||
newscript->pItemUse = &ItemUse_item_razorthorn_flayer_gland;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
/* ScriptData
|
||||
SDName: Azuremyst_Isle
|
||||
SD%Complete: 75
|
||||
SDComment: Quest support: 9283, 9537, 9582, 9554, 9531(special flight path, proper model for mount missing). Injured Draenei cosmetic only
|
||||
SDComment: Quest support: 9283, 9537, 9582, 9554, 9531, 9303(special flight path, proper model for mount missing). Injured Draenei cosmetic only
|
||||
SDCategory: Azuremyst Isle
|
||||
EndScriptData */
|
||||
|
||||
@@ -28,6 +28,7 @@ npc_injured_draenei
|
||||
npc_magwin
|
||||
npc_susurrus
|
||||
npc_geezle
|
||||
mob_nestlewood_owlkin
|
||||
EndContentData */
|
||||
|
||||
#include "precompiled.h"
|
||||
@@ -608,9 +609,60 @@ CreatureAI* GetAI_npc_geezleAI(Creature *_Creature)
|
||||
}
|
||||
|
||||
/*######
|
||||
##
|
||||
## mob_nestlewood_owlkin
|
||||
######*/
|
||||
|
||||
#define INOCULATION_CHANNEL 29528
|
||||
#define INOCULATED_OWLKIN 16534
|
||||
|
||||
struct TRINITY_DLL_DECL mob_nestlewood_owlkinAI : public ScriptedAI
|
||||
{
|
||||
mob_nestlewood_owlkinAI(Creature *c) : ScriptedAI(c) {Reset();}
|
||||
|
||||
uint32 ChannelTimer;
|
||||
bool Channeled;
|
||||
bool Hitted;
|
||||
|
||||
void Reset()
|
||||
{
|
||||
ChannelTimer = 0;
|
||||
Channeled = false;
|
||||
Hitted = false;
|
||||
}
|
||||
|
||||
void Aggro(Unit *who){}
|
||||
|
||||
void SpellHit(Unit* caster, const SpellEntry* spell)
|
||||
{
|
||||
if(!caster)
|
||||
return;
|
||||
|
||||
if(caster->GetTypeId() == TYPEID_PLAYER && spell->Id == INOCULATION_CHANNEL)
|
||||
{
|
||||
ChannelTimer = 3000;
|
||||
Hitted = true;
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
if(ChannelTimer < diff && !Channeled && Hitted)
|
||||
{
|
||||
m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
m_creature->RemoveCorpse();
|
||||
m_creature->SummonCreature(INOCULATED_OWLKIN, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), 0.0f, TEMPSUMMON_TIMED_DESPAWN, 180000);
|
||||
Channeled = true;
|
||||
}else ChannelTimer -= diff;
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mob_nestlewood_owlkinAI(Creature *_Creature)
|
||||
{
|
||||
return new mob_nestlewood_owlkinAI (_Creature);
|
||||
}
|
||||
|
||||
void AddSC_azuremyst_isle()
|
||||
{
|
||||
Script *newscript;
|
||||
@@ -649,4 +701,9 @@ void AddSC_azuremyst_isle()
|
||||
newscript->GetAI = &GetAI_npc_geezleAI;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="mob_nestlewood_owlkin";
|
||||
newscript->GetAI = &GetAI_mob_nestlewood_owlkinAI;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
}
|
||||
|
||||
@@ -366,7 +366,7 @@ CreatureAI* GetAI_npc_twiggy_flathead(Creature *_Creature)
|
||||
}
|
||||
|
||||
/*#####
|
||||
## npc_wizzlecrank_shredder TODO: Pilot scripting
|
||||
## npc_wizzlecrank_shredder NOTE: Part2 will be in ACID
|
||||
#####*/
|
||||
|
||||
#define SAY_PROGRESS_1 "Alright, alright I think I can figure out how to operate this thing..."
|
||||
@@ -380,9 +380,6 @@ CreatureAI* GetAI_npc_twiggy_flathead(Creature *_Creature)
|
||||
#define SAY_PROGRESS_7 "That was a close one! Well, let's get going, it's still a ways to Ratchet!"
|
||||
#define SAY_PROGRESS_8 "Hmm... I don't think this blinking red light is a good thing..."
|
||||
|
||||
#define SAY_PILOT_9 "Looks like you'll have to go ahead to Ratchet and tell Sputtervalve that I've wrecked the shredder."
|
||||
#define SAY_PILOT_10 "I'll stay behind and guard the wreck. Hurry! Hopefully no one will notice the smoke..."
|
||||
|
||||
#define QUEST_ESCAPE 863
|
||||
#define NPC_PILOT 3451
|
||||
#define MOB_MERCENARY 3282
|
||||
@@ -422,13 +419,7 @@ struct TRINITY_DLL_DECL npc_wizzlecrank_shredderAI : public npc_escortAI
|
||||
m_creature->setDeathState(JUST_DIED);
|
||||
if (player && player->GetTypeId() == TYPEID_PLAYER)
|
||||
((Player*)player)->GroupEventHappens(QUEST_ESCAPE, m_creature);
|
||||
break;
|
||||
case 32: {Unit* Pilot = FindCreature(NPC_PILOT, 30);
|
||||
if(Pilot)
|
||||
((Creature*)Pilot)->Say(SAY_PILOT_9, LANG_UNIVERSAL, NULL);}break;
|
||||
case 33:{ Unit* Pilot = FindCreature(NPC_PILOT, 30);
|
||||
if(Pilot)
|
||||
((Creature*)Pilot)->Say(SAY_PILOT_10, LANG_UNIVERSAL, NULL);} break;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -501,8 +492,6 @@ CreatureAI* GetAI_npc_wizzlecrank_shredderAI(Creature *_Creature)
|
||||
thisAI->AddWaypoint(29, 1091.28, -2985.82, 91.74, 3000);//7
|
||||
thisAI->AddWaypoint(30, 1091.28, -2985.82, 91.74, 7000);//8
|
||||
thisAI->AddWaypoint(31, 1091.28, -2985.82, 91.74, 3000);//justdied summon creature
|
||||
thisAI->AddWaypoint(32, 1091.28, -2985.82, 91.74, 2000);//9
|
||||
thisAI->AddWaypoint(33, 1091.28, -2985.82, 91.74, 7000);//10
|
||||
|
||||
return (CreatureAI*)thisAI;
|
||||
}
|
||||
|
||||
@@ -230,6 +230,13 @@ void hyjalAI::StartEvent(Player* player)
|
||||
if(!player)
|
||||
return;
|
||||
|
||||
Map* Hyjal = m_creature->GetMap();
|
||||
if(Hyjal->GetPlayersCountExceptGMs() < 15) //check if there are more than 15 players in hyjal (abuse prevent)
|
||||
{
|
||||
//error_log("Some Players try to farm in Hyjal (less than 15 people)");
|
||||
return;
|
||||
}
|
||||
|
||||
Talk(BEGIN);
|
||||
|
||||
EventBegun = true;
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
/* ScriptData
|
||||
SDName: Netherstorm
|
||||
SD%Complete: 75
|
||||
SDComment: Quest support: 10438, 10652 (special flight paths), 10299,10321,10322,10323,10329,10330,10338,10365(Shutting Down Manaforge), 10198
|
||||
SDComment: Quest support: 10337, 10438, 10652 (special flight paths), 10299,10321,10322,10323,10329,10330,10338,10365(Shutting Down Manaforge), 10198
|
||||
SDCategory: Netherstorm
|
||||
EndScriptData */
|
||||
|
||||
@@ -27,9 +27,11 @@ go_manaforge_control_console
|
||||
npc_commander_dawnforge
|
||||
npc_protectorate_nether_drake
|
||||
npc_veronia
|
||||
npc_bessy
|
||||
EndContentData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "../../npc/npc_escortAI.h"
|
||||
|
||||
/*######
|
||||
## npc_manaforge_control_console
|
||||
@@ -790,9 +792,10 @@ struct TRINITY_DLL_DECL mob_phase_hunterAI : public ScriptedAI
|
||||
|
||||
bool Weak;
|
||||
bool Materialize;
|
||||
bool Drained;
|
||||
|
||||
int WeakPercent;
|
||||
uint32 PlayerGUID;
|
||||
uint64 PlayerGUID;
|
||||
uint32 Health;
|
||||
uint32 Level;
|
||||
uint32 PhaseSlipVulnerabilityTimer;
|
||||
@@ -802,6 +805,7 @@ struct TRINITY_DLL_DECL mob_phase_hunterAI : public ScriptedAI
|
||||
{
|
||||
Weak = false;
|
||||
Materialize = false;
|
||||
Drained = false;
|
||||
|
||||
WeakPercent = 25 + (rand()%16); // 25-40
|
||||
PlayerGUID = 0;
|
||||
@@ -820,60 +824,64 @@ struct TRINITY_DLL_DECL mob_phase_hunterAI : public ScriptedAI
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
|
||||
if(!Materialize)
|
||||
{
|
||||
DoCast(m_creature, SPELL_MATERIALIZE);
|
||||
Materialize = true;
|
||||
}
|
||||
|
||||
Player* target = NULL;
|
||||
target = ((Player*)Unit::GetUnit((*m_creature), PlayerGUID));
|
||||
if(m_creature->HasAuraType(SPELL_AURA_MOD_DECREASE_SPEED) || m_creature->hasUnitState(UNIT_STAT_ROOT)) // if the mob is rooted/slowed by spells eg.: Entangling Roots, Frost Nova, Hamstring, Crippling Poison, etc. => remove it
|
||||
DoCast(m_creature, SPELL_PHASE_SLIP);
|
||||
|
||||
if(!target)
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
|
||||
if(m_creature->HasAuraType(SPELL_AURA_MOD_DECREASE_SPEED) || m_creature->hasUnitState(UNIT_STAT_ROOT)) // if the mob is rooted/slowed by spells eg.: Entangling Roots, Frost Nova, Hamstring, Crippling Poison, etc. => remove it
|
||||
DoCast(m_creature, SPELL_PHASE_SLIP);
|
||||
if(ManaBurnTimer < diff) // cast Mana Burn
|
||||
{
|
||||
if(target->GetCreateMana() > 0)
|
||||
|
||||
if(ManaBurnTimer < diff) // cast Mana Burn
|
||||
{
|
||||
if(m_creature->getVictim()->GetCreateMana() > 0)
|
||||
{
|
||||
DoCast(m_creature->getVictim(), SPELL_MANA_BURN);
|
||||
ManaBurnTimer = 8000 + (rand()%10 * 1000); // 8-18 sec cd
|
||||
}
|
||||
}else ManaBurnTimer -= diff;
|
||||
|
||||
if(PlayerGUID) // start: support for quest 10190
|
||||
{
|
||||
Unit* target = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
|
||||
if(target && !Weak && m_creature->GetHealth() < (m_creature->GetMaxHealth() / 100 * WeakPercent) && ((Player*)target)->GetQuestStatus(10190) == QUEST_STATUS_INCOMPLETE)
|
||||
{
|
||||
DoCast(target, SPELL_MANA_BURN);
|
||||
ManaBurnTimer = 8000 + (rand()%10 * 1000); // 8-18 sec cd
|
||||
DoTextEmote(EMOTE_WEAK, 0);
|
||||
Weak = true;
|
||||
}
|
||||
}else ManaBurnTimer -= diff;
|
||||
|
||||
if(!Weak && m_creature->GetHealth() < (m_creature->GetMaxHealth() / 100 * WeakPercent) && target->GetQuestStatus(10190) == QUEST_STATUS_INCOMPLETE) // start: support for quest 10190
|
||||
{
|
||||
DoTextEmote(EMOTE_WEAK, 0);
|
||||
Weak = true;
|
||||
}
|
||||
if(Weak && m_creature->HasAura(34219, 0))
|
||||
{
|
||||
Health = m_creature->GetHealth(); // get the normal mob's data
|
||||
Level = m_creature->getLevel();
|
||||
|
||||
if(Weak && !Drained && m_creature->HasAura(34219, 0))
|
||||
{
|
||||
Drained = true;
|
||||
|
||||
Health = m_creature->GetHealth(); // get the normal mob's data
|
||||
Level = m_creature->getLevel();
|
||||
|
||||
m_creature->AttackStop(); // delete the normal mob
|
||||
m_creature->DealDamage(m_creature, m_creature->GetHealth(), NULL, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, NULL, false);
|
||||
m_creature->RemoveCorpse();
|
||||
|
||||
|
||||
Creature* DrainedPhaseHunter = NULL;
|
||||
|
||||
|
||||
if(!DrainedPhaseHunter)
|
||||
DrainedPhaseHunter = m_creature->SummonCreature(SUMMONED_MOB, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), m_creature->GetOrientation(), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000); // summon the mob
|
||||
|
||||
DrainedPhaseHunter = m_creature->SummonCreature(SUMMONED_MOB, m_creature->GetPositionX(), m_creature->GetPositionY(), m_creature->GetPositionZ(), m_creature->GetOrientation(), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 60000); // summon the mob
|
||||
|
||||
if(DrainedPhaseHunter)
|
||||
{
|
||||
DrainedPhaseHunter->SetLevel(Level); // set the summoned mob's data
|
||||
DrainedPhaseHunter->SetHealth(Health);
|
||||
DrainedPhaseHunter->AddThreat(target, 10000.0f);
|
||||
DrainedPhaseHunter->AI()->AttackStart(target);
|
||||
}
|
||||
} // end: support for quest 10190
|
||||
}
|
||||
}
|
||||
}// end: support for quest 10190
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CreatureAI* GetAI_mob_phase_hunter(Creature *_Creature)
|
||||
@@ -881,6 +889,121 @@ CreatureAI* GetAI_mob_phase_hunter(Creature *_Creature)
|
||||
return new mob_phase_hunterAI (_Creature);
|
||||
}
|
||||
|
||||
/*######
|
||||
## npc_bessy
|
||||
######*/
|
||||
|
||||
#define Q_ALMABTRIEB 10337
|
||||
#define N_THADELL 20464
|
||||
#define SPAWN_FIRST 20512
|
||||
#define SPAWN_SECOND 19881
|
||||
#define SAY_THADELL_1 "Bessy, is that you?"
|
||||
#define SAY_THADELL_2 "Thank you for bringing back my Bessy, $N. I couldn't live without her!"
|
||||
|
||||
struct TRINITY_DLL_DECL npc_bessyAI : public npc_escortAI
|
||||
{
|
||||
|
||||
npc_bessyAI(Creature *c) : npc_escortAI(c) {Reset();}
|
||||
|
||||
bool Completed;
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
if (PlayerGUID)
|
||||
{
|
||||
if (Unit* player = Unit::GetUnit((*m_creature), PlayerGUID))
|
||||
((Player*)player)->FailQuest(Q_ALMABTRIEB);
|
||||
}
|
||||
}
|
||||
|
||||
void WaypointReached(uint32 i)
|
||||
{
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
switch(i)
|
||||
{
|
||||
case 3: //first spawn
|
||||
m_creature->SummonCreature(SPAWN_FIRST, 2449.67, 2183.11, 96.85, 6.20, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
|
||||
m_creature->SummonCreature(SPAWN_FIRST, 2449.53, 2184.43, 96.36, 6.27, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
|
||||
m_creature->SummonCreature(SPAWN_FIRST, 2449.85, 2186.34, 97.57, 6.08, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
|
||||
break;
|
||||
|
||||
case 7:
|
||||
m_creature->SummonCreature(SPAWN_SECOND, 2309.64, 2186.24, 92.25, 6.06, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
|
||||
m_creature->SummonCreature(SPAWN_SECOND, 2309.25, 2183.46, 91.75, 6.22, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
|
||||
break;
|
||||
|
||||
case 12:
|
||||
if (player)
|
||||
{
|
||||
((Player*)player)->GroupEventHappens(Q_ALMABTRIEB, m_creature);
|
||||
Completed = true;
|
||||
}
|
||||
{Unit* Thadell = FindCreature(N_THADELL, 30);
|
||||
if(Thadell)
|
||||
((Creature*)Thadell)->Say(SAY_THADELL_1, LANG_UNIVERSAL, NULL);}break;
|
||||
case 13:
|
||||
{Unit* Thadell = FindCreature(N_THADELL, 30);
|
||||
if(Thadell)
|
||||
((Creature*)Thadell)->Say(SAY_THADELL_2, LANG_UNIVERSAL, NULL);}break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summoned)
|
||||
{
|
||||
summoned->AI()->AttackStart(m_creature);
|
||||
}
|
||||
|
||||
void Aggro(Unit* who){}
|
||||
|
||||
void Reset()
|
||||
{
|
||||
Completed = false;
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
bool QuestAccept_npc_bessy(Player* player, Creature* creature, Quest const* quest)
|
||||
{
|
||||
if (quest->GetQuestId() == Q_ALMABTRIEB)
|
||||
{
|
||||
creature->setFaction(113);
|
||||
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
|
||||
((npc_escortAI*)(creature->AI()))->Start(true, true, false, player->GetGUID());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_npc_bessy(Creature *_Creature)
|
||||
{
|
||||
npc_bessyAI* bessyAI = new npc_bessyAI(_Creature);
|
||||
|
||||
bessyAI->AddWaypoint(0, 2488.77, 2184.89, 104.64);
|
||||
bessyAI->AddWaypoint(1, 2478.72, 2184.77, 98.58);
|
||||
bessyAI->AddWaypoint(2, 2473.52, 2184.71, 99.00);
|
||||
bessyAI->AddWaypoint(3, 2453.15, 2184.96, 97.09,4000);
|
||||
bessyAI->AddWaypoint(4, 2424.18, 2184.15, 94.11);
|
||||
bessyAI->AddWaypoint(5, 2413.18, 2184.15, 93.42);
|
||||
bessyAI->AddWaypoint(6, 2402.02, 2183.90, 87.59);
|
||||
bessyAI->AddWaypoint(7, 2333.31, 2181.63, 90.03,4000);
|
||||
bessyAI->AddWaypoint(8, 2308.73, 2184.34, 92.04);
|
||||
bessyAI->AddWaypoint(9, 2303.10, 2196.89, 94.94);
|
||||
bessyAI->AddWaypoint(10, 2304.58, 2272.23, 96.67);
|
||||
bessyAI->AddWaypoint(11, 2297.09, 2271.40, 95.16);
|
||||
bessyAI->AddWaypoint(12, 2297.68, 2266.79, 95.07,4000);
|
||||
bessyAI->AddWaypoint(13, 2297.67, 2266.76, 95.07,4000);
|
||||
|
||||
return (CreatureAI*)bessyAI;
|
||||
}
|
||||
|
||||
/*######
|
||||
##
|
||||
######*/
|
||||
@@ -931,5 +1054,11 @@ void AddSC_netherstorm()
|
||||
newscript = new Script;
|
||||
newscript->Name = "mob_phase_hunter";
|
||||
newscript->GetAI = &GetAI_mob_phase_hunter;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "npc_bessy";
|
||||
newscript->GetAI = &GetAI_npc_bessy;
|
||||
newscript->pQuestAccept = &QuestAccept_npc_bessy;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -17,11 +17,17 @@
|
||||
/* ScriptData
|
||||
SDName: Stonetalon_Mountains
|
||||
SD%Complete: 95
|
||||
SDComment: Quest support: 6627 (Braug Dimspirits questions/'answers' might have more to it, need more info)
|
||||
SDComment: Quest support: 6627, 6523
|
||||
SDCategory: Stonetalon Mountains
|
||||
EndScriptData */
|
||||
|
||||
/* ContentData
|
||||
npc_braug_dimspirit
|
||||
npc_kaya_flathoof
|
||||
EndContentData */
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "../../npc/npc_escortAI.h"
|
||||
|
||||
/*######
|
||||
## npc_braug_dimspirit
|
||||
@@ -64,6 +70,115 @@ bool GossipSelect_npc_braug_dimspirit(Player *player, Creature *_Creature, uint3
|
||||
return true;
|
||||
}
|
||||
|
||||
/*######
|
||||
## npc_kaya_flathoof
|
||||
######*/
|
||||
|
||||
#define SAY_START "Let's go before they find out I'm free!"
|
||||
#define SAY_AMBUSH "Look out! We're under attack!"
|
||||
#define SAY_END "Thank you for helping me. I know my way back from here."
|
||||
|
||||
#define QUEST_PK 6523
|
||||
#define MOB_GB 11912
|
||||
#define MOB_GR 11910
|
||||
#define MOB_GS 11913
|
||||
|
||||
struct TRINITY_DLL_DECL npc_kaya_flathoofAI : public npc_escortAI
|
||||
{
|
||||
npc_kaya_flathoofAI(Creature* c) : npc_escortAI(c) {Reset();}
|
||||
|
||||
void WaypointReached(uint32 i)
|
||||
{
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
|
||||
if(!player)
|
||||
return;
|
||||
|
||||
switch(i)
|
||||
{
|
||||
case 22:
|
||||
DoSay(SAY_AMBUSH, LANG_UNIVERSAL, NULL);
|
||||
m_creature->SummonCreature(MOB_GB, -48.53, -503.34, -46.31, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
|
||||
m_creature->SummonCreature(MOB_GR, -38.85, -503.77, -45.90, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
|
||||
m_creature->SummonCreature(MOB_GS, -36.37, -496.23, -45.71, 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
|
||||
break;
|
||||
case 23: m_creature->SetInFront(player);
|
||||
DoSay(SAY_END, LANG_UNIVERSAL, player, true);
|
||||
if (player && player->GetTypeId() == TYPEID_PLAYER)
|
||||
((Player*)player)->GroupEventHappens(QUEST_PK, m_creature);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summoned)
|
||||
{
|
||||
summoned->AI()->AttackStart(m_creature);
|
||||
}
|
||||
|
||||
void Reset(){}
|
||||
|
||||
void Aggro(Unit* who){}
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
if (PlayerGUID)
|
||||
{
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
if (player)
|
||||
((Player*)player)->FailQuest(QUEST_PK);
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
}
|
||||
};
|
||||
|
||||
bool QuestAccept_npc_kaya_flathoof(Player* player, Creature* creature, Quest const* quest)
|
||||
{
|
||||
if (quest->GetQuestId() == QUEST_PK)
|
||||
{
|
||||
((npc_escortAI*)(creature->AI()))->Start(true, true, false, player->GetGUID());
|
||||
creature->Say(SAY_START, LANG_UNIVERSAL, NULL);
|
||||
creature->setFaction(113);
|
||||
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_npc_kaya_flathoofAI(Creature *_Creature)
|
||||
{
|
||||
npc_kaya_flathoofAI* thisAI = new npc_kaya_flathoofAI(_Creature);
|
||||
|
||||
thisAI->AddWaypoint(0, 122.37, -345.80, 3.59);
|
||||
thisAI->AddWaypoint(1, 113.69, -350.01, 4.54);
|
||||
thisAI->AddWaypoint(2, 107.32, -353.09, 3.33);
|
||||
thisAI->AddWaypoint(3, 99.25, -342.43, 2.87);
|
||||
thisAI->AddWaypoint(4, 111.19, -315.60, 3.71);
|
||||
thisAI->AddWaypoint(5, 109.99, -293.92, 5.16);
|
||||
thisAI->AddWaypoint(6, 104.59, -268.27, 4.78);
|
||||
thisAI->AddWaypoint(7, 82.80, -247.28, 5.73);
|
||||
thisAI->AddWaypoint(8, 66.44, -245.99, 5.85);
|
||||
thisAI->AddWaypoint(9, 34.36, -246.01, 5.97);
|
||||
thisAI->AddWaypoint(10, 13.24, -245.61, 5.25);
|
||||
thisAI->AddWaypoint(11, -10.27, -248.66, 4.69);
|
||||
thisAI->AddWaypoint(12, -26.07, -262.76, 0.01);
|
||||
thisAI->AddWaypoint(13, -33.15, -282.03, -4.12);
|
||||
thisAI->AddWaypoint(14, -28.42, -315.52, -8.56);
|
||||
thisAI->AddWaypoint(15, -32.05, -339.34, -10.84);
|
||||
thisAI->AddWaypoint(16, -35.22, -358.11, -16.20);
|
||||
thisAI->AddWaypoint(17, -51.57, -391.63, -24.85);
|
||||
thisAI->AddWaypoint(18, -58.58, -409.08, -29.97);
|
||||
thisAI->AddWaypoint(19, -60.37, -441.23, -36.80);
|
||||
thisAI->AddWaypoint(20, -59.03, -476.39, -44.98);
|
||||
thisAI->AddWaypoint(21, -53.18, -490.31, -46.11);
|
||||
thisAI->AddWaypoint(22, -43.77, -497.99, -46.13, 3000);// summon
|
||||
thisAI->AddWaypoint(23, -41.77, -518.15, -46.13, 5000);//end
|
||||
|
||||
return (CreatureAI*)thisAI;
|
||||
}
|
||||
|
||||
/*######
|
||||
## AddSC
|
||||
######*/
|
||||
@@ -77,4 +192,10 @@ void AddSC_stonetalon_mountains()
|
||||
newscript->pGossipHello = &GossipHello_npc_braug_dimspirit;
|
||||
newscript->pGossipSelect = &GossipSelect_npc_braug_dimspirit;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name="npc_kaya_flathoof";
|
||||
newscript->GetAI = &GetAI_npc_kaya_flathoofAI;
|
||||
newscript->pQuestAccept = &QuestAccept_npc_kaya_flathoof;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
/* ScriptData
|
||||
SDName: Tanaris
|
||||
SD%Complete: 80
|
||||
SDComment: Quest support: 2954, 4005, 10277, 10279(Special flight path). Noggenfogger vendor
|
||||
SDComment: Quest support: 2954, 4005, 10277, 648, 10279(Special flight path). Noggenfogger vendor
|
||||
SDCategory: Tanaris
|
||||
EndScriptData */
|
||||
|
||||
@@ -27,6 +27,7 @@ npc_custodian_of_time
|
||||
npc_marin_noggenfogger
|
||||
npc_steward_of_time
|
||||
npc_stone_watcher_of_norgannon
|
||||
npc_OOX17
|
||||
EndContentData */
|
||||
|
||||
#include "precompiled.h"
|
||||
@@ -365,6 +366,208 @@ bool GossipSelect_npc_stone_watcher_of_norgannon(Player *player, Creature *_Crea
|
||||
return true;
|
||||
}
|
||||
|
||||
/*######
|
||||
## npc_OOX17
|
||||
######*/
|
||||
|
||||
#define Q_OOX17 648
|
||||
#define SPAWN_FIRST 7803
|
||||
#define SPAWN_SECOND_1 5617
|
||||
#define SPAWN_SECOND_2 7805
|
||||
#define SAY_SCOFF -1060004
|
||||
#define SAY_CHICKEN_ACC -1060000
|
||||
#define SAY_CHICKEN_AGGRO_1 -1060001
|
||||
#define SAY_CHICKEN_AGGRO_2 -1060002
|
||||
#define SAY_CHICKEN_AMB -1060003
|
||||
#define SAY_CHICKEN_COMP -1060005
|
||||
|
||||
struct TRINITY_DLL_DECL npc_OOX17AI : public npc_escortAI
|
||||
{
|
||||
npc_OOX17AI(Creature *c) : npc_escortAI(c) {Reset();}
|
||||
|
||||
void WaypointReached(uint32 i)
|
||||
{
|
||||
Unit* player = Unit::GetUnit((*m_creature), PlayerGUID);
|
||||
|
||||
if (!player)
|
||||
return;
|
||||
|
||||
switch(i) {
|
||||
case 23:
|
||||
m_creature->SummonCreature(SPAWN_FIRST, -8350.96, -4445.79, 10.10, 6.20, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
|
||||
m_creature->SummonCreature(SPAWN_FIRST, -8355.96, -4447.79, 10.10, 6.27, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
|
||||
m_creature->SummonCreature(SPAWN_FIRST, -8353.96, -4442.79, 10.10, 6.08, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
|
||||
m_creature->Say(SAY_CHICKEN_AMB, LANG_UNIVERSAL, NULL);
|
||||
break;
|
||||
|
||||
case 56:
|
||||
m_creature->SummonCreature(SPAWN_SECOND_1, -7510.07, -4795.50, 9.35, 6.06, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
|
||||
m_creature->SummonCreature(SPAWN_SECOND_2, -7515.07, -4797.50, 9.35, 6.22, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
|
||||
m_creature->SummonCreature(SPAWN_SECOND_2, -7518.07, -4792.50, 9.35, 6.22, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000);
|
||||
m_creature->Say(SAY_CHICKEN_AMB, LANG_UNIVERSAL, NULL);
|
||||
{Unit* scoff = FindCreature(SPAWN_SECOND_2, 30);
|
||||
if(scoff)
|
||||
((Creature*)scoff)->Say(SAY_SCOFF, LANG_UNIVERSAL, NULL);}break;
|
||||
break;
|
||||
|
||||
case 86:
|
||||
if (player)
|
||||
{
|
||||
m_creature->Say(SAY_CHICKEN_COMP, LANG_UNIVERSAL, NULL);
|
||||
((Player*)player)->GroupEventHappens(Q_OOX17, m_creature);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void Reset(){}
|
||||
|
||||
void Aggro(Unit* who)
|
||||
{
|
||||
switch (rand()%2) {
|
||||
case 0:
|
||||
m_creature->Say(SAY_CHICKEN_AGGRO_1, LANG_UNIVERSAL, 0);
|
||||
break;
|
||||
case 1:
|
||||
m_creature->Say(SAY_CHICKEN_AGGRO_2, LANG_UNIVERSAL, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void JustSummoned(Creature* summoned)
|
||||
{
|
||||
summoned->AI()->AttackStart(m_creature);
|
||||
}
|
||||
|
||||
void JustDied(Unit* killer)
|
||||
{
|
||||
if (PlayerGUID)
|
||||
{
|
||||
if (Unit* player = Unit::GetUnit((*m_creature), PlayerGUID))
|
||||
((Player*)player)->FailQuest(Q_OOX17);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void UpdateAI(const uint32 diff)
|
||||
{
|
||||
npc_escortAI::UpdateAI(diff);
|
||||
if (!m_creature->SelectHostilTarget() || !m_creature->getVictim())
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
bool QuestAccept_npc_OOX17(Player* player, Creature* creature, Quest const* quest)
|
||||
{
|
||||
if (quest->GetQuestId() == Q_OOX17)
|
||||
{
|
||||
creature->setFaction(113);
|
||||
creature->SetHealth(creature->GetMaxHealth());
|
||||
creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0);
|
||||
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_ATTACKABLE_2);
|
||||
creature->Say(SAY_CHICKEN_ACC, LANG_UNIVERSAL, NULL);
|
||||
((npc_escortAI*)(creature->AI()))->Start(true, true, false, player->GetGUID());
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
CreatureAI* GetAI_npc_OOX17(Creature *_Creature)
|
||||
{
|
||||
npc_OOX17AI* OOX17AI = new npc_OOX17AI(_Creature);
|
||||
|
||||
OOX17AI->AddWaypoint(0, -8843.73, -4374.44, 43.71);
|
||||
OOX17AI->AddWaypoint(1, -8834.68, -4373.88, 45.71);
|
||||
OOX17AI->AddWaypoint(2, -8832.93, -4373.85, 45.67);
|
||||
OOX17AI->AddWaypoint(3, -8829.21, -4373.72, 44.14);
|
||||
OOX17AI->AddWaypoint(4, -8825.10, -4373.56, 41.44);
|
||||
OOX17AI->AddWaypoint(5, -8818.88, -4372.75, 36.43);
|
||||
OOX17AI->AddWaypoint(6, -8803.37, -4369.68, 30.06);
|
||||
OOX17AI->AddWaypoint(7, -8786.68, -4366.18, 23.91);
|
||||
OOX17AI->AddWaypoint(8, -8764.97, -4366.94, 25.23);
|
||||
OOX17AI->AddWaypoint(9, -8745.49, -4363.16, 22.80);
|
||||
OOX17AI->AddWaypoint(10, -8724.13, -4353.55, 20.72);
|
||||
OOX17AI->AddWaypoint(11, -8706.77, -4346.14, 16.12);
|
||||
OOX17AI->AddWaypoint(12, -8688.27, -4372.85, 13.64);
|
||||
OOX17AI->AddWaypoint(13, -8668.76, -4380.38, 11.69);
|
||||
OOX17AI->AddWaypoint(14, -8645.19, -4388.62, 12.56);
|
||||
OOX17AI->AddWaypoint(15, -8614.73, -4398.60, 9.86);
|
||||
OOX17AI->AddWaypoint(16, -8560.33, -4411.27, 13.17);
|
||||
OOX17AI->AddWaypoint(17, -8536.45, -4416.49, 11.84);
|
||||
OOX17AI->AddWaypoint(18, -8503.48, -4423.70, 13.59);
|
||||
OOX17AI->AddWaypoint(19, -8471.91, -4430.60, 9.56);
|
||||
OOX17AI->AddWaypoint(20, -8441.36, -4435.31, 9.40);
|
||||
OOX17AI->AddWaypoint(21, -8403.41, -4441.16, 11.83);
|
||||
OOX17AI->AddWaypoint(22, -8371.24, -4446.13, 9.47);
|
||||
OOX17AI->AddWaypoint(23, -8353.96, -4448.79, 10.10); //Scorpid
|
||||
OOX17AI->AddWaypoint(24, -8336.40, -4446.39, 8.98);
|
||||
OOX17AI->AddWaypoint(25, -8303.78, -4441.96, 11.89);
|
||||
OOX17AI->AddWaypoint(26, -8272.20, -4433.31, 9.60);
|
||||
OOX17AI->AddWaypoint(27, -8224.76, -4419.39, 13.03);
|
||||
OOX17AI->AddWaypoint(28, -8193.31, -4406.04, 10.17);
|
||||
OOX17AI->AddWaypoint(29, -8155.65, -4397.74, 8.99);
|
||||
OOX17AI->AddWaypoint(30, -8129.25, -4394.57, 10.92);
|
||||
OOX17AI->AddWaypoint(31, -8104.86, -4399.03, 8.93);
|
||||
OOX17AI->AddWaypoint(32, -8063.15, -4423.40, 10.07);
|
||||
OOX17AI->AddWaypoint(33, -8032.15, -4443.47, 9.97);
|
||||
OOX17AI->AddWaypoint(34, -8015.39, -4454.33, 9.39);
|
||||
OOX17AI->AddWaypoint(35, -7981.64, -4482.44, 10.32);
|
||||
OOX17AI->AddWaypoint(36, -7958.83, -4503.98, 9.69);
|
||||
OOX17AI->AddWaypoint(37, -7932.45, -4528.91, 10.08);
|
||||
OOX17AI->AddWaypoint(38, -7904.09, -4566.67, 12.59);
|
||||
OOX17AI->AddWaypoint(39, -7883.33, -4593.91, 12.15);
|
||||
OOX17AI->AddWaypoint(40, -7862.83, -4624.53, 10.21);
|
||||
OOX17AI->AddWaypoint(41, -7840.79, -4654.26, 9.45);
|
||||
OOX17AI->AddWaypoint(42, -7826.17, -4673.99, 10.61);
|
||||
OOX17AI->AddWaypoint(43, -7807.86, -4698.69, 11.24);
|
||||
OOX17AI->AddWaypoint(44, -7793.88, -4717.55, 10.48);
|
||||
OOX17AI->AddWaypoint(45, -7778.68, -4738.05, 8.89);
|
||||
OOX17AI->AddWaypoint(46, -7746.42, -4780.39, 9.84);
|
||||
OOX17AI->AddWaypoint(47, -7724.11, -4772.75, 10.28);
|
||||
OOX17AI->AddWaypoint(48, -7697.98, -4763.80, 9.52);
|
||||
OOX17AI->AddWaypoint(49, -7665.33, -4752.62, 10.56);
|
||||
OOX17AI->AddWaypoint(50, -7641.47, -4750.33, 8.94);
|
||||
OOX17AI->AddWaypoint(51, -7620.08, -4753.96, 8.93);
|
||||
OOX17AI->AddWaypoint(52, -7603.15, -4757.53, 9.06);
|
||||
OOX17AI->AddWaypoint(53, -7579.43, -4767.07, 8.93);
|
||||
OOX17AI->AddWaypoint(54, -7558.51, -4779.01, 9.64);
|
||||
OOX17AI->AddWaypoint(55, -7536.40, -4789.32, 8.92);
|
||||
OOX17AI->AddWaypoint(56, -7512.07, -4793.50, 9.35); //Wastewander
|
||||
OOX17AI->AddWaypoint(57, -7490.79, -4788.80, 10.53);
|
||||
OOX17AI->AddWaypoint(58, -7469.10, -4785.11, 10.42);
|
||||
OOX17AI->AddWaypoint(59, -7453.18, -4782.41, 9.15);
|
||||
OOX17AI->AddWaypoint(60, -7426.27, -4777.83, 9.54);
|
||||
OOX17AI->AddWaypoint(61, -7393.84, -4770.19, 12.57);
|
||||
OOX17AI->AddWaypoint(62, -7367.25, -4764.17, 11.92);
|
||||
OOX17AI->AddWaypoint(63, -7341.00, -4752.11, 10.17);
|
||||
OOX17AI->AddWaypoint(64, -7321.62, -4744.97, 11.58);
|
||||
OOX17AI->AddWaypoint(65, -7302.35, -4744.35, 11.97);
|
||||
OOX17AI->AddWaypoint(66, -7281.00, -4743.66, 11.21);
|
||||
OOX17AI->AddWaypoint(67, -7258.33, -4742.93, 9.64);
|
||||
OOX17AI->AddWaypoint(68, -7236.70, -4742.24, 10.16);
|
||||
OOX17AI->AddWaypoint(69, -7217.52, -4743.87, 10.79);
|
||||
OOX17AI->AddWaypoint(70, -7201.86, -4746.32, 9.58);
|
||||
OOX17AI->AddWaypoint(71, -7182.01, -4749.41, 9.09);
|
||||
OOX17AI->AddWaypoint(72, -7159.61, -4752.90, 9.52);
|
||||
OOX17AI->AddWaypoint(73, -7139.58, -4756.02, 9.53);
|
||||
OOX17AI->AddWaypoint(74, -7122.60, -4754.91, 9.66);
|
||||
OOX17AI->AddWaypoint(75, -7101.06, -4753.87, 8.92);
|
||||
OOX17AI->AddWaypoint(76, -7082.79, -4752.99, 9.97);
|
||||
OOX17AI->AddWaypoint(77, -7061.81, -4751.98, 9.26);
|
||||
OOX17AI->AddWaypoint(78, -7035.12, -4754.39, 9.19);
|
||||
OOX17AI->AddWaypoint(79, -7013.90, -4758.64, 10.28);
|
||||
OOX17AI->AddWaypoint(80, -7001.71, -4769.73, 10.59);
|
||||
OOX17AI->AddWaypoint(81, -6984.95, -4788.61, 9.30);
|
||||
OOX17AI->AddWaypoint(82, -6970.41, -4788.77, 9.42);
|
||||
OOX17AI->AddWaypoint(83, -6957.16, -4788.92, 6.26);
|
||||
OOX17AI->AddWaypoint(84, -6951.29, -4802.73, 4.45);
|
||||
OOX17AI->AddWaypoint(85, -6944.81, -4816.58, 1.60);
|
||||
OOX17AI->AddWaypoint(86, -6942.06, -4839.40, 0.66,5000);
|
||||
|
||||
return (CreatureAI*)OOX17AI;
|
||||
}
|
||||
|
||||
/*######
|
||||
## AddSC
|
||||
######*/
|
||||
@@ -400,5 +603,11 @@ void AddSC_tanaris()
|
||||
newscript->Name="npc_stone_watcher_of_norgannon";
|
||||
newscript->pGossipHello = &GossipHello_npc_stone_watcher_of_norgannon;
|
||||
newscript->pGossipSelect = &GossipSelect_npc_stone_watcher_of_norgannon;
|
||||
newscript->RegisterSelf();
|
||||
|
||||
newscript = new Script;
|
||||
newscript->Name = "npc_OOX17";
|
||||
newscript->GetAI = &GetAI_npc_OOX17;
|
||||
newscript->pQuestAccept = &QuestAccept_npc_OOX17;
|
||||
newscript->RegisterSelf();
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
/* ScriptData
|
||||
SDName: Undercity
|
||||
SD%Complete: 95
|
||||
SDComment: Quest support: 6628(Parqual Fintallas questions/'answers' might have more to it, need more info), 9180(post-event).
|
||||
SDComment: Quest support: 6628, 9180(post-event).
|
||||
SDCategory: Undercity
|
||||
EndScriptData */
|
||||
|
||||
|
||||
@@ -126,8 +126,9 @@ bool QuestAccept_npc_ame(Player* player, Creature* creature, Quest const* quest)
|
||||
{
|
||||
((npc_escortAI*)(creature->AI()))->Start(false, true, false, player->GetGUID());
|
||||
DoScriptText(SAY_READY, creature, player);
|
||||
creature->SetUInt32Value(UNIT_FIELD_BYTES_1,0);
|
||||
// Change faction so mobs attack
|
||||
creature->setFaction(775);
|
||||
creature->setFaction(113);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user