mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-20 01:15:35 +01:00
*Two sql queries are included. Converter is used to convert the existing path id to new path id. "...creature_add..." is used to change table structure. You can first run the converter, then run the other one. Or run the other one directly and get the new data from the db team. Because it may take hours to run the converter. *If you have custom data, you may need to run the converter. We suggest you use console to run it It is extremely slow to run the query. If you have multiple paths for a creature in your db, you need to do more work to convert it. However, if you know how to use multiple paths, you should already have more db knowledge than I do and you should know how to convert it. *There may be a faster query to convert the db. If you know, please tell us. I am no sql expert. *Backup your db first! *Thanks to X-Savior and subhuman_bob. --HG-- branch : trunk
120 lines
4.1 KiB
C++
120 lines
4.1 KiB
C++
/*
|
|
* Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/>
|
|
*
|
|
* Copyright (C) 2008-2009 Trinity <http://www.trinitycore.org/>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef TRINITY_WAYPOINTMOVEMENTGENERATOR_H
|
|
#define TRINITY_WAYPOINTMOVEMENTGENERATOR_H
|
|
|
|
/** @page PathMovementGenerator is used to generate movements
|
|
* of waypoints and flight paths. Each serves the purpose
|
|
* of generate activities so that it generates updated
|
|
* packets for the players.
|
|
*/
|
|
|
|
#include "MovementGenerator.h"
|
|
#include "DestinationHolder.h"
|
|
#include "WaypointManager.h"
|
|
#include "Path.h"
|
|
#include "Traveller.h"
|
|
|
|
#include "Player.h"
|
|
|
|
#include <vector>
|
|
#include <set>
|
|
|
|
#define FLIGHT_TRAVEL_UPDATE 100
|
|
#define STOP_TIME_FOR_PLAYER 3 * 60 * 1000 // 3 Minutes
|
|
|
|
template<class T, class P = Path>
|
|
class TRINITY_DLL_SPEC PathMovementBase
|
|
{
|
|
public:
|
|
PathMovementBase() : i_currentNode(0) {}
|
|
virtual ~PathMovementBase() {};
|
|
|
|
bool MovementInProgress(void) const { return i_currentNode < i_path.Size(); }
|
|
|
|
void SetWaypointPathId(T &);
|
|
void ReloadPath(T &);
|
|
uint32 GetCurrentNode() const { return i_currentNode; }
|
|
|
|
protected:
|
|
uint32 i_currentNode;
|
|
DestinationHolder< Traveller<T> > i_destinationHolder;
|
|
P i_path;
|
|
};
|
|
|
|
template<class T>
|
|
|
|
class TRINITY_DLL_SPEC WaypointMovementGenerator
|
|
: public MovementGeneratorMedium< T, WaypointMovementGenerator<T> >, public PathMovementBase<T>
|
|
{
|
|
public:
|
|
WaypointMovementGenerator(uint32 _path_id = 0, bool _repeating = true) :
|
|
i_nextMoveTime(0), path_id(_path_id), repeating(_repeating), StopedByPlayer(false), node(NULL) {}
|
|
|
|
void Initialize(T &);
|
|
void Finalize(T &);
|
|
void MovementInform(T &);
|
|
void InitTraveller(T &, const WaypointData &);
|
|
void GeneratePathId(T &);
|
|
void Reset(T &unit);
|
|
bool Update(T &, const uint32 &);
|
|
bool GetDestination(float &x, float &y, float &z) const;
|
|
MovementGeneratorType GetMovementGeneratorType() { return WAYPOINT_MOTION_TYPE; }
|
|
|
|
private:
|
|
WaypointData *node;
|
|
uint32 path_id;
|
|
TimeTrackerSmall i_nextMoveTime;
|
|
WaypointPath *waypoints;
|
|
bool repeating, StopedByPlayer;
|
|
};
|
|
|
|
/** FlightPathMovementGenerator generates movement of the player for the paths
|
|
* and hence generates ground and activities for the player.
|
|
*/
|
|
class TRINITY_DLL_SPEC FlightPathMovementGenerator
|
|
: public MovementGeneratorMedium< Player, FlightPathMovementGenerator >,
|
|
public PathMovementBase<Player>
|
|
{
|
|
uint32 i_pathId;
|
|
std::vector<uint32> i_mapIds;
|
|
public:
|
|
explicit FlightPathMovementGenerator(uint32 id, uint32 startNode = 0) : i_pathId(id) { i_currentNode = startNode; }
|
|
void Initialize(Player &);
|
|
void Finalize(Player &);
|
|
void Reset(Player &) {}
|
|
bool Update(Player &, const uint32 &);
|
|
MovementGeneratorType GetMovementGeneratorType() { return FLIGHT_MOTION_TYPE; }
|
|
|
|
void SetWaypointPathId(Player &);
|
|
void ReloadPath(Player &) { /* don't reload flight path */ }
|
|
|
|
Path& GetPath() { return i_path; }
|
|
uint32 GetPathAtMapEnd() const;
|
|
bool HasArrived() const { return (i_currentNode >= i_path.Size()); }
|
|
void SetCurrentNodeAfterTeleport();
|
|
void SkipCurrentNode() { ++i_currentNode; }
|
|
bool GetDestination(float& x, float& y, float& z) const { i_destinationHolder.GetDestination(x,y,z); return true; }
|
|
|
|
};
|
|
#endif
|
|
|