[svn] Script for quest 1719. Patch provided by ckegg.

--HG--
branch : trunk
This commit is contained in:
megamage
2008-10-19 23:56:06 -05:00
parent 0f816f22fb
commit a1d00528a3
2 changed files with 198 additions and 0 deletions

View File

@@ -164,7 +164,199 @@ bool ReciveEmote_npc_taskmaster_fizzule(Player *player, Creature *_Creature, uin
}
return true;
}
/*#####
## npc_twiggy_flathead
#####*/
#define BIG_WILL 6238
#define AFFRAY_CHALLENGER 6240
#define SAY_BIG_WILL_READY "Ready when you are, warrior"
#define SAY_TWIGGY_FLATHEAD_BEGIN "The Affray has begun, get ready to fight!"
#define SAY_TWIGGY_FLATHEAD_FRAY "You! Enter the fray!"
#define SAY_TWIGGY_FLATHEAD_DOWN "Challenger is down!"
#define SAY_TWIGGY_FLATHEAD_OVER "The Affray is over"
float AffrayChallengerLoc[6][4]=
{
{-1683, -4326, 2.79, 0},
{-1682, -4329, 2.79, 0},
{-1683, -4330, 2.79, 0},
{-1680, -4334, 2.79, 1.49},
{-1674, -4326, 2.79, 3.49},
{-1677, -4334, 2.79, 1.66}
};
struct TRINITY_DLL_DECL npc_twiggy_flatheadAI : public ScriptedAI
{
npc_twiggy_flatheadAI(Creature *c) : ScriptedAI(c) {Reset();}
bool EventInProgress;
bool EventGrate;
bool EventBigWill;
bool Challenger_down[6];
uint32 Wave;
uint32 Wave_Timer;
uint32 Challenger_checker;
uint64 PlayerGUID;
uint64 AffrayChallenger[6];
uint64 BigWill;
void Reset()
{
EventInProgress = false;
EventGrate = false;
EventBigWill = false;
Wave_Timer = 600000;
Challenger_checker = 0;
Wave = 0;
PlayerGUID = 0;
for(uint8 i = 0; i < 6; i++) {
AffrayChallenger[i] = 0;
Challenger_down[i] = false;
}
BigWill = 0;
}
void Aggro(Unit *who) { }
void MoveInLineOfSight(Unit *who)
{
if(!who || (!who->isAlive())) return;
if (m_creature->IsWithinDistInMap(who, 10.0f) && (who->GetTypeId() == TYPEID_PLAYER) && ((Player*)who)->GetQuestStatus(1719) == QUEST_STATUS_INCOMPLETE && !EventInProgress)
{
PlayerGUID = who->GetGUID();
EventInProgress = true;
}
}
void KilledUnit(Unit *victim) { }
void UpdateAI(const uint32 diff)
{
if (EventInProgress) {
Player* pWarrior = NULL;
if(PlayerGUID)
pWarrior = ((Player*)Unit::GetUnit((*m_creature), PlayerGUID));
if(!pWarrior)
return;
if(!pWarrior->isAlive() && pWarrior->GetQuestStatus(1719) == QUEST_STATUS_INCOMPLETE) {
EventInProgress = false;
DoYell(SAY_TWIGGY_FLATHEAD_DOWN,LANG_UNIVERSAL,NULL);
pWarrior->FailQuest(1719);
for(uint8 i = 0; i < 6; i++) {
if (AffrayChallenger[i]) {
Creature* pCreature = (Creature*)Unit::GetUnit((*m_creature), AffrayChallenger[i]);
if(pCreature) {
if(pCreature->isAlive()) {
pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
pCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
pCreature->setDeathState(JUST_DIED);
}
}
}
AffrayChallenger[i] = 0;
Challenger_down[i] = false;
}
if (BigWill) {
Creature* pCreature = (Creature*)Unit::GetUnit((*m_creature), BigWill);
if(pCreature) {
if(pCreature->isAlive()) {
pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IN_COMBAT);
pCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
pCreature->setDeathState(JUST_DIED);
}
}
}
BigWill = 0;
}
if (!EventGrate && EventInProgress) {
float x,y,z;
pWarrior->GetPosition(x, y, z);
if (x >= -1684 && x <= -1674 && y >= -4334 && y <= -4324) {
pWarrior->AreaExploredOrEventHappens(1719);
DoYell(SAY_TWIGGY_FLATHEAD_BEGIN,LANG_UNIVERSAL,NULL);
for(uint8 i = 0; i < 6; i++) {
Creature* pCreature = m_creature->SummonCreature(AFFRAY_CHALLENGER, AffrayChallengerLoc[i][0], AffrayChallengerLoc[i][1], AffrayChallengerLoc[i][2], AffrayChallengerLoc[i][3], TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 600000);
pCreature->setFaction(35);
pCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
pCreature->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
pCreature->HandleEmoteCommand(15);
AffrayChallenger[i] = pCreature->GetGUID();
}
Wave_Timer = 5000;
Challenger_checker = 1000;
EventGrate = true;
}
}
else if (EventInProgress) {
if (Challenger_checker < diff) {
for(uint8 i = 0; i < 6; i++) {
if (AffrayChallenger[i]) {
Creature* pCreature = (Creature*)Unit::GetUnit((*m_creature), AffrayChallenger[i]);
if((!pCreature || (!pCreature->isAlive())) && !Challenger_down[i]) {
DoYell(SAY_TWIGGY_FLATHEAD_DOWN,LANG_UNIVERSAL,NULL);
Challenger_down[i] = true;
}
}
}
Challenger_checker = 1000;
} else Challenger_checker -= diff;
if(Wave_Timer < diff) {
if (AffrayChallenger[Wave] && Wave < 6 && !EventBigWill) {
DoYell(SAY_TWIGGY_FLATHEAD_FRAY,LANG_UNIVERSAL,NULL);
Creature* pCreature = (Creature*)Unit::GetUnit((*m_creature), AffrayChallenger[Wave]);
if(pCreature || (pCreature->isAlive())) {
pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
pCreature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
pCreature->HandleEmoteCommand(15);
pCreature->setFaction(14);
((CreatureAI*)pCreature->AI())->AttackStart(pWarrior);
Wave++;
Wave_Timer = 20000;
}
}
else if (Wave >= 6 && !EventBigWill) {
Creature* pCreature = m_creature->SummonCreature(BIG_WILL, -1722, -4341, 6.12, 6.26, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 480000);
BigWill = pCreature->GetGUID();
//pCreature->GetMotionMaster()->MovePoint(0, -1693, -4343, 4.32);
//pCreature->GetMotionMaster()->MovePoint(1, -1684, -4333, 2.78);
pCreature->GetMotionMaster()->MovePoint(2, -1682, -4329, 2.79);
//pCreature->HandleEmoteCommand(15);
pCreature->HandleEmoteCommand(27);
EventBigWill = true;
Wave_Timer = 1000;
}
else if (Wave >= 6 && EventBigWill && BigWill) {
Creature* pCreature = (Creature*)Unit::GetUnit((*m_creature), BigWill);
if (!pCreature->isAlive()) {
DoYell(SAY_TWIGGY_FLATHEAD_OVER,LANG_UNIVERSAL,NULL);
EventInProgress = false;
EventBigWill = false;
EventGrate = false;
PlayerGUID = 0;
Wave = 0;
}
}
} else Wave_Timer -= diff;
}
}
}
};
CreatureAI* GetAI_npc_twiggy_flathead(Creature *_Creature)
{
return new npc_twiggy_flatheadAI (_Creature);
}
void AddSC_the_barrens()
{
Script *newscript;
@@ -186,4 +378,9 @@ void AddSC_the_barrens()
newscript->GetAI = GetAI_npc_taskmaster_fizzule;
newscript->pReceiveEmote = &ReciveEmote_npc_taskmaster_fizzule;
m_scripts[nrscripts++] = newscript;
newscript = new Script;
newscript->Name="npc_twiggy_flathead";
newscript->GetAI = GetAI_npc_twiggy_flathead;
m_scripts[nrscripts++] = newscript;
}

View File

@@ -0,0 +1 @@
UPDATE `creature_template` SET `ScriptName` = 'npc_twiggy_flathead' WHERE `entry` =6248;