mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-16 07:30:42 +01:00
Scripts/Ahn'Kahet: Properly fixed achievement Volunteer Work
This commit is contained in:
@@ -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');
|
||||
@@ -44,7 +44,6 @@ enum Data
|
||||
DATA_SPHERE2_EVENT,
|
||||
DATA_JEDOGA_TRIGGER_SWITCH,
|
||||
DATA_JEDOGA_RESET_INITIANDS,
|
||||
DATA_INITIAND_KILLED,
|
||||
DATA_ALL_INITIAND_DEAD
|
||||
};
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user