mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-23 02:25:38 +01:00
Core/Transports
* Rewritten path generation, now uses splines - timers are a lot more accurate now * Implemented stopping transports * Implemented spawning transports in instances * Implemented spawning gameobjects as transport passengers * Transport passengers are now stored in creature/gameobject table using gameobject_template.data6 from transport's template as map id
This commit is contained in:
@@ -31,6 +31,7 @@ EndScriptData */
|
||||
#include "GridNotifiers.h"
|
||||
#include "GridNotifiersImpl.h"
|
||||
#include "GossipDef.h"
|
||||
#include "Transport.h"
|
||||
#include "Language.h"
|
||||
|
||||
#include <fstream>
|
||||
@@ -91,6 +92,7 @@ public:
|
||||
{ "areatriggers", rbac::RBAC_PERM_COMMAND_DEBUG_AREATRIGGERS, false, &HandleDebugAreaTriggersCommand, "", NULL },
|
||||
{ "los", rbac::RBAC_PERM_COMMAND_DEBUG_LOS, false, &HandleDebugLoSCommand, "", NULL },
|
||||
{ "moveflags", rbac::RBAC_PERM_COMMAND_DEBUG_MOVEFLAGS, false, &HandleDebugMoveflagsCommand, "", NULL },
|
||||
{ "transport", rbac::RBAC_PERM_COMMAND_DEBUG_TRANSPORT, false, &HandleDebugTransportCommand, "", NULL },
|
||||
{ NULL, 0, false, NULL, "", NULL }
|
||||
};
|
||||
static ChatCommand commandTable[] =
|
||||
@@ -1363,6 +1365,30 @@ public:
|
||||
handler->PSendSysMessage("Waypoint SQL written to SQL Developer log");
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool HandleDebugTransportCommand(ChatHandler* handler, char const* args)
|
||||
{
|
||||
Transport* transport = handler->GetSession()->GetPlayer()->GetTransport();
|
||||
if (!transport)
|
||||
return false;
|
||||
|
||||
bool start = false;
|
||||
if (!stricmp(args, "stop"))
|
||||
transport->EnableMovement(false);
|
||||
else if (!stricmp(args, "start"))
|
||||
{
|
||||
transport->EnableMovement(true);
|
||||
start = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
handler->PSendSysMessage("Transport %s is %s", transport->GetName().c_str(), transport->GetGoState() == GO_STATE_READY ? "stopped" : "moving");
|
||||
return true;
|
||||
}
|
||||
|
||||
handler->PSendSysMessage("Transport %s %s", transport->GetName().c_str(), start ? "started" : "stopped");
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
void AddSC_debug_commandscript()
|
||||
|
||||
@@ -245,24 +245,22 @@ public:
|
||||
float o = chr->GetOrientation();
|
||||
Map* map = chr->GetMap();
|
||||
|
||||
if (chr->GetTransport())
|
||||
if (Transport* trans = chr->GetTransport())
|
||||
{
|
||||
uint32 tguid = chr->GetTransport()->AddNPCPassenger(0, id, chr->GetTransOffsetX(), chr->GetTransOffsetY(), chr->GetTransOffsetZ(), chr->GetTransOffsetO());
|
||||
if (tguid > 0)
|
||||
{
|
||||
PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_CREATURE_TRANSPORT);
|
||||
uint32 guid = sObjectMgr->GenerateLowGuid(HIGHGUID_UNIT);
|
||||
CreatureData& data = sObjectMgr->NewOrExistCreatureData(guid);
|
||||
data.id = id;
|
||||
data.phaseMask = chr->GetPhaseMaskForSpawn();
|
||||
data.posX = chr->GetTransOffsetX();
|
||||
data.posY = chr->GetTransOffsetY();
|
||||
data.posZ = chr->GetTransOffsetZ();
|
||||
data.orientation = chr->GetTransOffsetO();
|
||||
|
||||
stmt->setInt32(0, int32(tguid));
|
||||
stmt->setInt32(1, int32(id));
|
||||
stmt->setInt32(2, int32(chr->GetTransport()->GetEntry()));
|
||||
stmt->setFloat(3, chr->GetTransOffsetX());
|
||||
stmt->setFloat(4, chr->GetTransOffsetY());
|
||||
stmt->setFloat(5, chr->GetTransOffsetZ());
|
||||
stmt->setFloat(6, chr->GetTransOffsetO());
|
||||
Creature* creature = trans->CreateNPCPassenger(guid, &data);
|
||||
|
||||
WorldDatabase.Execute(stmt);
|
||||
}
|
||||
creature->SaveToDB(trans->GetGOInfo()->moTransport.mapID, 1 << map->GetSpawnMode(), chr->GetPhaseMaskForSpawn());
|
||||
|
||||
sObjectMgr->AddCreatureToGrid(guid, &data);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1337,7 +1335,8 @@ public:
|
||||
{
|
||||
if (!*args)
|
||||
return false;
|
||||
char* charID = strtok((char*)args, " ");
|
||||
|
||||
char* charID = handler->extractKeyFromLink((char*)args, "Hcreature_entry");
|
||||
if (!charID)
|
||||
return false;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user