Scripts/Ahn'Kahet: Properly fixed achievement Volunteer Work

This commit is contained in:
Lopin
2011-06-25 13:33:58 +02:00
parent b6283412c6
commit a82a35c655
4 changed files with 67 additions and 22 deletions

View File

@@ -0,0 +1,6 @@
DELETE FROM `disables` WHERE `entry`=7359 AND `sourceType`=4;
DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=7359 AND `type`=11;
INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
VALUES
(7359,11,0,0,'achievement_volunteer_work');

View File

@@ -44,7 +44,6 @@ enum Data
DATA_SPHERE2_EVENT,
DATA_JEDOGA_TRIGGER_SWITCH,
DATA_JEDOGA_RESET_INITIANDS,
DATA_INITIAND_KILLED,
DATA_ALL_INITIAND_DEAD
};

View File

@@ -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();
}

View File

@@ -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;
}