Scripts/VioletHold: Properly fixed achievement Defenseless

This commit is contained in:
Lopin
2011-06-24 08:20:56 +02:00
parent 08d5dd5a65
commit 7954d9a099
4 changed files with 34 additions and 7 deletions
@@ -0,0 +1,6 @@
DELETE FROM `disables` WHERE `entry`=6803 AND `sourceType`=4;
DELETE FROM `achievement_criteria_data` WHERE `criteria_id`=6803 AND `type`=11;
INSERT INTO `achievement_criteria_data` (`criteria_id`,`type`,`value1`,`value2`,`ScriptName`)
VALUES
(6803,11,0,0,'achievement_defenseless');
@@ -159,7 +159,28 @@ public:
}; };
class achievement_defenseless : public AchievementCriteriaScript
{
public:
achievement_defenseless() : AchievementCriteriaScript("achievement_defenseless")
{
}
bool OnCheck(Player* /*player*/, Unit* target)
{
InstanceScript* instance = target->GetInstanceScript();
if (!instance)
return false;
if (!instance->GetData(DATA_DEFENSELESS))
return false;
return true;
}
};
void AddSC_boss_cyanigosa() void AddSC_boss_cyanigosa()
{ {
new boss_cyanigosa(); new boss_cyanigosa();
new achievement_defenseless();
} }
@@ -93,15 +93,12 @@ enum Yells
{ {
CYANIGOSA_SAY_SPAWN = -1608005 CYANIGOSA_SAY_SPAWN = -1608005
}; };
enum Spells enum Spells
{ {
CYANIGOSA_SPELL_TRANSFORM = 58668, CYANIGOSA_SPELL_TRANSFORM = 58668,
CYANIGOSA_BLUE_AURA = 47759, CYANIGOSA_BLUE_AURA = 47759,
}; };
enum Achievements
{
ACHIEV_DEFENSELESS = 1816
};
class instance_violet_hold : public InstanceMapScript class instance_violet_hold : public InstanceMapScript
{ {
@@ -165,6 +162,7 @@ public:
bool bWiped; bool bWiped;
bool bIsDoorSpellCasted; bool bIsDoorSpellCasted;
bool bCrystalActivated; bool bCrystalActivated;
bool defenseless;
std::list<uint8> NpcAtDoorCastingList; std::list<uint8> NpcAtDoorCastingList;
@@ -214,6 +212,7 @@ public:
bActive = false; bActive = false;
bIsDoorSpellCasted = false; bIsDoorSpellCasted = false;
bCrystalActivated = false; bCrystalActivated = false;
defenseless = true;
uiMainEventPhase = NOT_STARTED; uiMainEventPhase = NOT_STARTED;
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter)); memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
@@ -334,8 +333,6 @@ public:
uiMainEventPhase = DONE; uiMainEventPhase = DONE;
if (GameObject* pMainDoor = instance->GetGameObject(uiMainDoor)) if (GameObject* pMainDoor = instance->GetGameObject(uiMainDoor))
pMainDoor->SetGoState(GO_STATE_ACTIVE); pMainDoor->SetGoState(GO_STATE_ACTIVE);
if (!bCrystalActivated && uiDoorIntegrity == 100)
DoCompleteAchievement(ACHIEV_DEFENSELESS);
} }
break; break;
case DATA_WAVE_COUNT: case DATA_WAVE_COUNT:
@@ -350,6 +347,7 @@ public:
break; break;
case DATA_DOOR_INTEGRITY: case DATA_DOOR_INTEGRITY:
uiDoorIntegrity = data; uiDoorIntegrity = data;
defenseless = false;
DoUpdateWorldState(WORLD_STATE_VH_PRISON_STATE, uiDoorIntegrity); DoUpdateWorldState(WORLD_STATE_VH_PRISON_STATE, uiDoorIntegrity);
break; break;
case DATA_NPC_PRESENCE_AT_DOOR_ADD: case DATA_NPC_PRESENCE_AT_DOOR_ADD:
@@ -432,6 +430,7 @@ public:
case DATA_FIRST_BOSS: return uiFirstBoss; case DATA_FIRST_BOSS: return uiFirstBoss;
case DATA_SECOND_BOSS: return uiSecondBoss; case DATA_SECOND_BOSS: return uiSecondBoss;
case DATA_MAIN_EVENT_PHASE: return uiMainEventPhase; case DATA_MAIN_EVENT_PHASE: return uiMainEventPhase;
case DATA_DEFENSELESS: return defenseless ? 1 : 0;
} }
return 0; return 0;
@@ -52,7 +52,8 @@ enum Data
DATA_FIRST_BOSS, DATA_FIRST_BOSS,
DATA_SECOND_BOSS, DATA_SECOND_BOSS,
DATA_ACTIVATE_CRYSTAL, DATA_ACTIVATE_CRYSTAL,
DATA_MAIN_EVENT_PHASE DATA_MAIN_EVENT_PHASE,
DATA_DEFENSELESS,
}; };
enum Data64 enum Data64