Merge pull request #8127 from Gacko/childrens_week

Core/DB: Children's Week
This commit is contained in:
Subv
2012-10-25 07:43:02 -07:00
8 changed files with 1772 additions and 85 deletions

View File

@@ -44,6 +44,7 @@ if(SCRIPTS)
include(Kalimdor/CMakeLists.txt)
include(Outland/CMakeLists.txt)
include(Northrend/CMakeLists.txt)
include(Events/CMakeLists.txt)
endif()
message(STATUS "SCRIPT PREPARATION COMPLETE")

View File

@@ -0,0 +1,17 @@
# Copyright (C) 2008-2011 TrinityCore <http://www.trinitycore.org/>
#
# This file is free software; as a special exception the author gives
# unlimited permission to copy and/or distribute it, with or without
# modifications, as long as this notice is preserved.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
set(scripts_STAT_SRCS
${scripts_STAT_SRCS}
Events/childrens_week.cpp
Events/event.cpp
)
message(" -> Prepared: Events")

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,25 @@
/*
* Copyright (C) 2008-2012 TrinityCore <http://www.trinitycore.org/>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "ScriptPCH.h"
void AddSC_event_childrens_week();
void AddSC_event_scripts()
{
AddSC_event_childrens_week();
}

View File

@@ -470,11 +470,27 @@ public:
enum utils
{
NPC_HEMET = 27986,
NPC_HADRIUS = 28047,
NPC_TAMARA = 28568,
SPELL_OFFER = 51962,
QUEST_ENTRY = 12645,
NPC_HEMET = 27986,
NPC_HADRIUS = 28047,
NPC_TAMARA = 28568,
SPELL_OFFER = 51962,
QUEST_ENTRY = 12645,
};
enum NesingwaryChildrensWeek
{
SPELL_ORPHAN_OUT = 58818,
QUEST_THE_MIGHTY_HEMET_NESINGWARY = 13957,
ORPHAN_WOLVAR = 33532,
TEXT_WOLVAR_ORPHAN_6 = 6,
TEXT_WOLVAR_ORPHAN_7 = 7,
TEXT_WOLVAR_ORPHAN_8 = 8,
TEXT_WOLVAR_ORPHAN_9 = 9,
TEXT_NESINGWARY_1 = 1,
};
class npc_jungle_punch_target : public CreatureScript
@@ -486,17 +502,86 @@ public:
{
npc_jungle_punch_targetAI(Creature* creature) : ScriptedAI(creature) {}
uint16 sayTimer;
uint8 sayStep;
void Reset()
{
sayTimer = 3500;
sayStep = 0;
timer = 0;
phase = 0;
playerGUID = 0;
orphanGUID = 0;
}
void MoveInLineOfSight(Unit* who)
{
if (!phase && who && who->GetDistance2d(me) < 10.0f)
if (Player* player = who->ToPlayer())
if (player->GetQuestStatus(QUEST_THE_MIGHTY_HEMET_NESINGWARY) == QUEST_STATUS_INCOMPLETE)
{
playerGUID = player->GetGUID();
if (Aura* orphanOut = player->GetAura(SPELL_ORPHAN_OUT))
if (orphanOut->GetCaster() && orphanOut->GetCaster()->GetEntry() == ORPHAN_WOLVAR)
{
orphanGUID = orphanOut->GetCaster()->GetGUID();
phase = 1;
}
}
}
void proceedCwEvent(const uint32 diff)
{
if (timer <= diff)
{
Player* player = Player::GetPlayer(*me, playerGUID);
Creature* orphan = Creature::GetCreature(*me, orphanGUID);
if(!orphan || !player)
{
Reset();
return;
}
switch(phase)
{
case 1:
orphan->GetMotionMaster()->MovePoint(0, me->GetPositionX() + cos(me->GetOrientation()) * 5, me->GetPositionY() + sin(me->GetOrientation()) * 5, me->GetPositionZ());
orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_6);
timer = 5000;
break;
case 2:
orphan->SetFacingToObject(me);
orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_7);
timer = 5000;
break;
case 3:
Talk(TEXT_NESINGWARY_1);
timer = 5000;
break;
case 4:
orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_8);
timer = 5000;
break;
case 5:
orphan->AI()->Talk(TEXT_WOLVAR_ORPHAN_9);
timer = 5000;
break;
case 6:
orphan->GetMotionMaster()->MoveFollow(player, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE);
player->GroupEventHappens(QUEST_THE_MIGHTY_HEMET_NESINGWARY, me);
Reset();
return;
}
++phase;
}
else
timer -= diff;
}
void UpdateAI(const uint32 uiDiff)
{
if (phase)
proceedCwEvent(uiDiff);
if (!sayStep)
return;
@@ -588,6 +673,14 @@ public:
break;
}
}
private:
uint16 sayTimer;
uint8 sayStep;
uint32 timer;
int8 phase;
uint64 playerGUID;
uint64 orphanGUID;
};
CreatureAI* GetAI(Creature* creature) const

View File

@@ -235,21 +235,19 @@ enum eWaygate
QUEST_THE_MAKERS_OVERLOOK = 12613,
QUEST_THE_MAKERS_PERCH = 12559,
QUEST_MEETING_A_GREAT_ONE = 13956,
};
class AreaTrigger_at_sholazar_waygate : public AreaTriggerScript
{
public:
AreaTrigger_at_sholazar_waygate()
: AreaTriggerScript("at_sholazar_waygate")
{
}
AreaTrigger_at_sholazar_waygate() : AreaTriggerScript("at_sholazar_waygate") {}
bool OnTrigger(Player* player, AreaTriggerEntry const* trigger)
{
if (player->GetQuestStatus(QUEST_THE_MAKERS_OVERLOOK) == QUEST_STATUS_REWARDED && !player->isDead() &&
player->GetQuestStatus(QUEST_THE_MAKERS_PERCH) == QUEST_STATUS_REWARDED)
if (!player->isDead() && (player->GetQuestStatus(QUEST_MEETING_A_GREAT_ONE) != QUEST_STATUS_NONE ||
(player->GetQuestStatus(QUEST_THE_MAKERS_OVERLOOK) == QUEST_STATUS_REWARDED && player->GetQuestStatus(QUEST_THE_MAKERS_PERCH) == QUEST_STATUS_REWARDED)))
{
switch (trigger->id)
{
@@ -302,76 +300,6 @@ class AreaTrigger_at_nats_landing : public AreaTriggerScript
}
};
/*######
## at_bring_your_orphan_to
######*/
enum BringYourOrphanTo
{
QUEST_DOWN_AT_THE_DOCKS = 910,
QUEST_GATEWAY_TO_THE_FRONTIER = 911,
QUEST_LORDAERON_THRONE_ROOM = 1800,
QUEST_BOUGHT_OF_ETERNALS = 1479,
QUEST_SPOOKY_LIGHTHOUSE = 1687,
QUEST_STONEWROUGHT_DAM = 1558,
QUEST_DARK_PORTAL_H = 10951,
QUEST_DARK_PORTAL_A = 10952,
AT_DOWN_AT_THE_DOCKS = 3551,
AT_GATEWAY_TO_THE_FRONTIER = 3549,
AT_LORDAERON_THRONE_ROOM = 3547,
AT_BOUGHT_OF_ETERNALS = 3546,
AT_SPOOKY_LIGHTHOUSE = 3552,
AT_STONEWROUGHT_DAM = 3548,
AT_DARK_PORTAL = 4356,
AURA_ORPHAN_OUT = 58818,
};
class AreaTrigger_at_bring_your_orphan_to : public AreaTriggerScript
{
public:
AreaTrigger_at_bring_your_orphan_to() : AreaTriggerScript("at_bring_your_orphan_to") { }
bool OnTrigger(Player* player, AreaTriggerEntry const* trigger)
{
uint32 questId = 0;
if (player->isDead() || !player->HasAura(AURA_ORPHAN_OUT))
return false;
switch (trigger->id)
{
case AT_DOWN_AT_THE_DOCKS:
questId = QUEST_DOWN_AT_THE_DOCKS;
break;
case AT_GATEWAY_TO_THE_FRONTIER:
questId = QUEST_GATEWAY_TO_THE_FRONTIER;
break;
case AT_LORDAERON_THRONE_ROOM:
questId = QUEST_LORDAERON_THRONE_ROOM;
break;
case AT_BOUGHT_OF_ETERNALS:
questId = QUEST_BOUGHT_OF_ETERNALS;
break;
case AT_SPOOKY_LIGHTHOUSE:
questId = QUEST_SPOOKY_LIGHTHOUSE;
break;
case AT_STONEWROUGHT_DAM:
questId = QUEST_STONEWROUGHT_DAM;
break;
case AT_DARK_PORTAL:
questId = player->GetTeam() == ALLIANCE ? QUEST_DARK_PORTAL_A : QUEST_DARK_PORTAL_H;
break;
}
if (questId && player->GetQuestStatus(questId) == QUEST_STATUS_INCOMPLETE)
player->AreaExploredOrEventHappens(questId);
return true;
}
};
/*######
## at_brewfest
######*/
@@ -505,7 +433,6 @@ void AddSC_areatrigger_scripts()
new AreaTrigger_at_last_rites();
new AreaTrigger_at_sholazar_waygate();
new AreaTrigger_at_nats_landing();
new AreaTrigger_at_bring_your_orphan_to();
new AreaTrigger_at_brewfest();
new AreaTrigger_at_area_52_entrance();
}