Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
instance_old_hillsbrad.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6/* ScriptData
7SDName: Instance_Old_Hillsbrad
8SD%Complete: 75
9SDComment: If thrall escort fail, all parts will reset. In future, save sub-parts and continue from last known.
10SDCategory: Caverns of Time, Old Hillsbrad Foothills
11EndScriptData */
12
13#include "ScriptMgr.h"
14#include "ScriptedCreature.h"
15#include "InstanceScript.h"
16#include "old_hillsbrad.h"
17#include "Player.h"
18
19#define MAX_ENCOUNTER 6
20
21#define THRALL_ENTRY 17876
22#define TARETHA_ENTRY 18887
23#define EPOCH_ENTRY 18096
24
25#define DRAKE_ENTRY 17848
26
27#define QUEST_ENTRY_DIVERSION 10283
28#define LODGE_QUEST_TRIGGER 20155
29
31{
32public:
33 instance_old_hillsbrad() : InstanceMapScript("instance_old_hillsbrad", 560) { }
34
39
41 {
43
47
51
53 {
54 memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
55
56 mBarrelCount = 0;
58 ThrallGUID = 0;
59 TarethaGUID = 0;
60 EpochGUID = 0;
61 }
62
64 {
65 Map::PlayerList const& players = instance->GetPlayers();
66
67 if (!players.isEmpty())
68 {
69 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
70 {
71 if (Player* player = itr->GetSource())
72 return player;
73 }
74 }
75
76 SF_LOG_DEBUG("scripts", "Instance Old Hillsbrad: GetPlayerInMap, but PlayerList is empty!");
77 return NULL;
78 }
79
81 {
82 Map::PlayerList const& players = instance->GetPlayers();
83
84 if (!players.isEmpty())
85 {
86 for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
87 {
88 if (Player* player = itr->GetSource())
89 player->KilledMonsterCredit(LODGE_QUEST_TRIGGER, 0);
90 }
91 }
92 }
93
95 {
96 switch (creature->GetEntry())
97 {
98 case THRALL_ENTRY:
99 ThrallGUID = creature->GetGUID();
100 break;
101 case TARETHA_ENTRY:
102 TarethaGUID = creature->GetGUID();
103 break;
104 case EPOCH_ENTRY:
105 EpochGUID = creature->GetGUID();
106 break;
107 }
108 }
109
110 void SetData(uint32 type, uint32 data) OVERRIDE
111 {
112 Player* player = GetPlayerInMap();
113
114 if (!player)
115 {
116 SF_LOG_DEBUG("scripts", "Instance Old Hillsbrad: SetData (Type: %u Data %u) cannot find any player.", type, data);
117 return;
118 }
119
120 switch (type)
121 {
123 {
124 if (data == IN_PROGRESS)
125 {
126 if (mBarrelCount >= 5)
127 return;
128
129 ++mBarrelCount;
131
132 SF_LOG_DEBUG("scripts", "Instance Old Hillsbrad: go_barrel_old_hillsbrad count %u", mBarrelCount);
133
135
136 if (mBarrelCount == 5)
137 {
139 player->SummonCreature(DRAKE_ENTRY, 2128.43f, 71.01f, 64.42f, 1.74f, TempSummonType::TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 1800000);
140 m_auiEncounter[0] = DONE;
141 }
142 }
143 break;
144 }
146 {
147 if (data == FAIL)
148 {
149 if (mThrallEventCount <= 20)
150 {
153 SF_LOG_DEBUG("scripts", "Instance Old Hillsbrad: Thrall event failed %u times. Resetting all sub-events.", mThrallEventCount);
158 }
159 else if (mThrallEventCount > 20)
160 {
161 m_auiEncounter[1] = data;
162 m_auiEncounter[2] = data;
163 m_auiEncounter[3] = data;
164 m_auiEncounter[4] = data;
165 m_auiEncounter[5] = data;
166 SF_LOG_DEBUG("scripts", "Instance Old Hillsbrad: Thrall event failed %u times. Resetting all sub-events.", mThrallEventCount);
167 }
168 }
169 else
170 m_auiEncounter[1] = data;
171 SF_LOG_DEBUG("scripts", "Instance Old Hillsbrad: Thrall escort event adjusted to data %u.", data);
172 break;
173 }
175 m_auiEncounter[2] = data;
176 SF_LOG_DEBUG("scripts", "Instance Old Hillsbrad: Thrall event part I adjusted to data %u.", data);
177 break;
179 m_auiEncounter[3] = data;
180 SF_LOG_DEBUG("scripts", "Instance Old Hillsbrad: Thrall event part II adjusted to data %u.", data);
181 break;
183 m_auiEncounter[4] = data;
184 SF_LOG_DEBUG("scripts", "Instance Old Hillsbrad: Thrall event part III adjusted to data %u.", data);
185 break;
187 m_auiEncounter[5] = data;
188 SF_LOG_DEBUG("scripts", "Instance Old Hillsbrad: Thrall event part IV adjusted to data %u.", data);
189 break;
190 }
191 }
192
194 {
195 switch (data)
196 {
198 return m_auiEncounter[0];
200 return m_auiEncounter[1];
202 return m_auiEncounter[2];
204 return m_auiEncounter[3];
206 return m_auiEncounter[4];
208 return m_auiEncounter[5];
209 }
210 return 0;
211 }
212
214 {
215 switch (data)
216 {
217 case DATA_THRALL:
218 return ThrallGUID;
219 case DATA_TARETHA:
220 return TarethaGUID;
221 case DATA_EPOCH:
222 return EpochGUID;
223 }
224 return 0;
225 }
226 };
227};
228
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
std::uint64_t uint64
Definition Define.h:76
@ IN_PROGRESS
@ FAIL
@ DONE
@ NOT_STARTED
#define SF_LOG_DEBUG(filterType__,...)
Definition Log.h:134
@ TEMPSUMMON_TIMED_OR_DEAD_DESPAWN
Definition Object.h:68
InstanceMapScript(const char *name, uint32 mapId)
InstanceScript(Map *map)
void DoUpdateWorldState(uint32 worldstateId, uint32 worldstateValue)
bool isEmpty() const
Definition LinkedList.h:86
Definition Map.h:238
MapRefManager PlayerList
Definition Map.h:406
iterator end()
iterator begin()
LinkedListHead::Iterator< MapReference const > const_iterator
TempSummon * SummonCreature(uint32 id, Position const &pos, TempSummonType spwtype=TempSummonType::TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0) const
Definition Object.cpp:2703
InstanceScript * GetInstanceScript(InstanceMap *map) const OVERRIDE
@ DATA_THRALL
Definition hyjal.h:26
void AddSC_instance_old_hillsbrad()
#define THRALL_ENTRY
#define LODGE_QUEST_TRIGGER
#define EPOCH_ENTRY
#define TARETHA_ENTRY
#define DRAKE_ENTRY
#define MAX_ENCOUNTER
@ WORLD_STATE_OH
@ TYPE_THRALL_PART1
@ TYPE_THRALL_PART4
@ TYPE_THRALL_EVENT
@ DATA_TARETHA
@ TYPE_THRALL_PART3
@ TYPE_THRALL_PART2
@ TYPE_BARREL_DIVERSION