aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h1
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp72
-rw-r--r--src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp10
3 files changed, 61 insertions, 22 deletions
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h
index a25093579bb..e19054d2f46 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h
+++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/ahnkahet.h
@@ -44,7 +44,6 @@ enum Data
DATA_SPHERE2_EVENT,
DATA_JEDOGA_TRIGGER_SWITCH,
DATA_JEDOGA_RESET_INITIANDS,
- DATA_INITIAND_KILLED,
DATA_ALL_INITIAND_DEAD
};
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
index 68d1272750c..2923359e0fe 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp
@@ -63,6 +63,9 @@ const Position JedogaPosition[2] =
{372.330994f, -705.278015f, -16.179716f, 5.427970f}
};
+#define ACTION_INITIAND_KILLED 1
+#define DATA_VOLUNTEER_WORK 2
+
class boss_jedoga_shadowseeker : public CreatureScript
{
public:
@@ -89,7 +92,7 @@ public:
bool bOnGround;
bool bOpFerokFail;
bool bCanDown;
-
+ bool volunteerWork;
bool bFirstTime;
void Reset()
@@ -104,6 +107,7 @@ public:
bOpFerokFail = false;
bOnGround = false;
bCanDown = false;
+ volunteerWork = true;
if (pInstance)
{
@@ -152,6 +156,20 @@ public:
pInstance->SetData(DATA_JEDOGA_SHADOWSEEKER_EVENT, DONE);
}
+ void DoAction(int32 const action)
+ {
+ if (action == ACTION_INITIAND_KILLED)
+ volunteerWork = false;
+ }
+
+ uint32 GetData(uint32 type)
+ {
+ if (type == DATA_VOLUNTEER_WORK)
+ return volunteerWork ? 1 : 0;
+
+ return 0;
+ }
+
void MoveInLineOfSight(Unit* who)
{
if (!pInstance || !who || (who->GetTypeId() == TYPEID_UNIT && who->GetEntry() == NPC_JEDOGA_CONTROLLER))
@@ -374,43 +392,53 @@ public:
void JustDied(Unit* Killer)
{
- if (!Killer || !pInstance) return;
+ if (!Killer || !pInstance)
+ return;
if (bWalking)
{
- Creature* boss = me->GetMap()->GetCreature(pInstance->GetData64(DATA_JEDOGA_SHADOWSEEKER));
- if (boss && !CAST_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerok) CAST_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerokFail = true;
+ if (Creature* boss = ObjectAccessor::GetCreature(*me, pInstance->GetData64(DATA_JEDOGA_SHADOWSEEKER)))
+ {
+ if (!CAST_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerok)
+ CAST_AI(boss_jedoga_shadowseeker::boss_jedoga_shadowseekerAI, boss->AI())->bOpFerokFail = true;
+
+ boss->AI()->DoAction(ACTION_INITIAND_KILLED);
+ }
- if (Killer->GetTypeId() == TYPEID_PLAYER) pInstance->SetData(DATA_INITIAND_KILLED, 1);
pInstance->SetData64(DATA_ADD_JEDOGA_OPFER, 0);
bWalking = false;
}
- if (Killer->GetTypeId() == TYPEID_PLAYER) pInstance->SetData64(DATA_PL_JEDOGA_TARGET, Killer->GetGUID());
+ if (Killer->GetTypeId() == TYPEID_PLAYER)
+ pInstance->SetData64(DATA_PL_JEDOGA_TARGET, Killer->GetGUID());
}
void EnterCombat(Unit* who)
{
- if ((pInstance && pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) || !who) return;
+ if ((pInstance && pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) || !who)
+ return;
}
void AttackStart(Unit* victim)
{
- if ((pInstance && pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) || !victim) return;
+ if ((pInstance && pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) || !victim)
+ return;
ScriptedAI::AttackStart(victim);
}
void MoveInLineOfSight(Unit* who)
{
- if ((pInstance && pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) || !who) return;
+ if ((pInstance && pInstance->GetData(DATA_JEDOGA_SHADOWSEEKER_EVENT) == IN_PROGRESS) || !who)
+ return;
ScriptedAI::MoveInLineOfSight(who);
}
void MovementInform(uint32 uiType, uint32 uiPointId)
{
- if (uiType != POINT_MOTION_TYPE || !pInstance) return;
+ if (uiType != POINT_MOTION_TYPE || !pInstance)
+ return;
switch(uiPointId)
{
@@ -569,9 +597,27 @@ public:
}
};
+class achievement_volunteer_work : public AchievementCriteriaScript
+{
+ public:
+ achievement_volunteer_work() : AchievementCriteriaScript("achievement_volunteer_work")
+ {
+ }
+
+ bool OnCheck(Player* /*player*/, Unit* target)
+ {
+ if (Creature* Jedoga = target->ToCreature())
+ if (Jedoga->AI()->GetData(DATA_VOLUNTEER_WORK))
+ return true;
+
+ return false;
+ }
+};
+
void AddSC_boss_jedoga_shadowseeker()
{
- new boss_jedoga_shadowseeker;
- new mob_jedoga_initiand;
- new npc_jedogas_aufseher_trigger;
+ new boss_jedoga_shadowseeker();
+ new mob_jedoga_initiand();
+ new npc_jedogas_aufseher_trigger();
+ new achievement_volunteer_work();
}
diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp
index 55346cd8197..b10a49b7116 100644
--- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp
+++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/instance_ahnkahet.cpp
@@ -59,9 +59,8 @@ public:
uint32 m_auiEncounter[MAX_ENCOUNTER];
uint32 spheres[2];
- uint8 InitiandCnt,
- switchtrigger,
- initiandkilled;
+ uint8 InitiandCnt;
+ uint8 switchtrigger;
std::string str_data;
@@ -81,7 +80,6 @@ public:
InitiandCnt = 0;
switchtrigger = 0;
- initiandkilled = 0;
JedogaSacrifices = 0;
JedogaTarget = 0;
}
@@ -200,8 +198,6 @@ public:
cr->RemoveCorpse();
}
}
- if (!initiandkilled && instance->IsHeroic())
- DoCompleteAchievement(ACHIEV_VOLUNTEER_WORK);
}
break;
case DATA_HERALD_VOLAZJ_EVENT: m_auiEncounter[3] = data; break;
@@ -209,7 +205,6 @@ public:
case DATA_SPHERE1_EVENT: spheres[0] = data; break;
case DATA_SPHERE2_EVENT: spheres[1] = data; break;
case DATA_JEDOGA_TRIGGER_SWITCH: switchtrigger = data; break;
- case DATA_INITIAND_KILLED: initiandkilled = data; break;
case DATA_JEDOGA_RESET_INITIANDS:
for (std::set<uint64>::const_iterator itr = InitiandGUIDs.begin(); itr != InitiandGUIDs.end(); ++itr)
{
@@ -245,7 +240,6 @@ public:
}
return 1;
case DATA_JEDOGA_TRIGGER_SWITCH: return switchtrigger;
- case DATA_INITIAND_KILLED: return initiandkilled;
}
return 0;
}