AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
transport_zeppelins.cpp File Reference
#include "CreatureScript.h"
#include "GameObjectAI.h"
#include "GameObjectScript.h"
#include "Map.h"
#include "Player.h"
#include "ScriptedGossip.h"
#include "TaskScheduler.h"
#include "Transport.h"
#include "TransportMgr.h"
#include "WorldState.h"
#include "transport_zeppelin.h"

Go to the source code of this file.

Classes

struct  go_transport_the_iron_eagle
 
struct  go_transport_the_thundercaller
 
struct  go_transport_the_purple_princess
 
struct  go_transport_westguard_zeppelin
 
class  npc_harrowmeiser
 
class  npc_bombardier_petrov
 

Enumerations

enum  WestguardZeppelinGossip {
  GOSSIP_TEXT_PETROV_EN_ROUTE = 11322 ,
  GOSSIP_TEXT_PETROV_ARRIVING = 11324 ,
  GOSSIP_TEXT_HARROWMEISER_DOCKED = 11328 ,
  GOSSIP_TEXT_HARROWMEISER_ARRIVING = 11330 ,
  GOSSIP_TEXT_HARROWMEISER_EN_ROUTE = 11332
}
 
enum  WestguardZeppelinWorldState { WORLD_STATE_ZEPPELIN_ETA = 3078 }
 
enum  WestguardZeppelinState {
  ZEPPELIN_STATE_EN_ROUTE ,
  ZEPPELIN_STATE_ARRIVING ,
  ZEPPELIN_STATE_DOCKED
}
 

Functions

WestguardZeppelinState GetWestguardZeppelinState (Player *player, Map *map)
 
void AddSC_transport_zeppelins ()
 

Enumeration Type Documentation

◆ WestguardZeppelinGossip

Enumerator
GOSSIP_TEXT_PETROV_EN_ROUTE 
GOSSIP_TEXT_PETROV_ARRIVING 
GOSSIP_TEXT_HARROWMEISER_DOCKED 
GOSSIP_TEXT_HARROWMEISER_ARRIVING 
GOSSIP_TEXT_HARROWMEISER_EN_ROUTE 
143{
149};
@ GOSSIP_TEXT_HARROWMEISER_DOCKED
Definition transport_zeppelins.cpp:146
@ GOSSIP_TEXT_HARROWMEISER_EN_ROUTE
Definition transport_zeppelins.cpp:148
@ GOSSIP_TEXT_PETROV_ARRIVING
Definition transport_zeppelins.cpp:145
@ GOSSIP_TEXT_PETROV_EN_ROUTE
Definition transport_zeppelins.cpp:144
@ GOSSIP_TEXT_HARROWMEISER_ARRIVING
Definition transport_zeppelins.cpp:147

◆ WestguardZeppelinState

Enumerator
ZEPPELIN_STATE_EN_ROUTE 
ZEPPELIN_STATE_ARRIVING 
ZEPPELIN_STATE_DOCKED 
160{
164};
@ ZEPPELIN_STATE_DOCKED
Definition transport_zeppelins.cpp:163
@ ZEPPELIN_STATE_ARRIVING
Definition transport_zeppelins.cpp:162
@ ZEPPELIN_STATE_EN_ROUTE
Definition transport_zeppelins.cpp:161

◆ WestguardZeppelinWorldState

Enumerator
WORLD_STATE_ZEPPELIN_ETA 
155{
157};
@ WORLD_STATE_ZEPPELIN_ETA
Definition transport_zeppelins.cpp:156

Function Documentation

◆ AddSC_transport_zeppelins()

void AddSC_transport_zeppelins ( )
266{
271 new npc_harrowmeiser();
273}
#define RegisterGameObjectAI(ai_name)
Definition GameObjectScript.h:77
Definition transport_zeppelins.cpp:246
Definition transport_zeppelins.cpp:220
Definition transport_zeppelins.cpp:32
Definition transport_zeppelins.cpp:86
Definition transport_zeppelins.cpp:56
Definition transport_zeppelins.cpp:113

References RegisterGameObjectAI.

Referenced by AddWorldScripts().

◆ GetWestguardZeppelinState()

WestguardZeppelinState GetWestguardZeppelinState ( Player player,
Map map 
)
169{
170 MotionTransport const* zeppelin = nullptr;
171 for (Transport* transport : map->GetAllTransports())
172 if (transport->GetEntry() == GO_WESTGUARD_ZEPPELIN)
173 {
174 zeppelin = transport->ToMotionTransport();
175 break;
176 }
177
178 if (!zeppelin || !zeppelin->GetPeriod())
180
181 uint32 dockArriveTime = 0;
182 uint32 dockDepartTime = 0;
183 for (KeyFrame const& frame : zeppelin->GetKeyFrames())
184 {
185 if (frame.Node->arrivalEventID == EVENT_WK_ARRIVAL)
186 dockArriveTime = frame.ArriveTime;
187 else if (frame.Node->departureEventID == EVENT_WK_DEPARTURE)
188 dockDepartTime = frame.DepartureTime;
189 }
190
191 if (!dockArriveTime)
193
194 uint32 const period = zeppelin->GetPeriod();
195 uint32 const timer = zeppelin->GetPathProgress() % period;
196
197 // the dock is covered by the last and the first stop frame of the path, so the docked
198 // window normally wraps the end of one period into the start of the next
199 bool const docked = dockArriveTime > dockDepartTime
200 ? timer >= dockArriveTime || timer < dockDepartTime
201 : timer >= dockArriveTime && timer < dockDepartTime;
202
203 if (docked)
205
206 // modular so it stays correct whichever way around the two stop frames sit
207 uint32 const msUntilArrival = (dockArriveTime + period - timer) % period;
208 if (msUntilArrival <= MINUTE * IN_MILLISECONDS)
210
211 // the texts read "less than X minutes", so round up
213 (msUntilArrival + MINUTE * IN_MILLISECONDS - 1) / (MINUTE * IN_MILLISECONDS));
214
216}
constexpr auto IN_MILLISECONDS
Definition Common.h:53
constexpr auto MINUTE
Definition Common.h:47
std::uint32_t uint32
Definition Define.h:107
MotionTransport * ToMotionTransport()
Definition GameObject.h:328
Definition Transport.h:51
uint32 GetPeriod() const
Definition Transport.h:81
void SendUpdateWorldState(uint32 variable, uint32 value) const
Definition PlayerUpdates.cpp:2247
Definition Transport.h:30
uint32 GetPathProgress() const
Definition Transport.h:43
Definition TransportMgr.h:42
@ EVENT_WK_ARRIVAL
Definition transport_zeppelin.h:26
@ EVENT_WK_DEPARTURE
Definition transport_zeppelin.h:39
@ GO_WESTGUARD_ZEPPELIN
Definition transport_zeppelin.h:61

References EVENT_WK_ARRIVAL, EVENT_WK_DEPARTURE, Map::GetAllTransports(), MotionTransport::GetKeyFrames(), Transport::GetPathProgress(), MotionTransport::GetPeriod(), GO_WESTGUARD_ZEPPELIN, IN_MILLISECONDS, MINUTE, Player::SendUpdateWorldState(), GameObject::ToMotionTransport(), WORLD_STATE_ZEPPELIN_ETA, ZEPPELIN_STATE_ARRIVING, ZEPPELIN_STATE_DOCKED, and ZEPPELIN_STATE_EN_ROUTE.

Referenced by npc_harrowmeiser::OnGossipHello(), and npc_bombardier_petrov::OnGossipHello().