diff options
| author | silinoron <none@none> | 2010-07-30 21:54:46 -0700 |
|---|---|---|
| committer | silinoron <none@none> | 2010-07-30 21:54:46 -0700 |
| commit | 71b1c781e3d05bf208c4b0886a1c8f0f474d6a10 (patch) | |
| tree | eb0c5a10bcb60ed83921f23d1f5526484f268595 /src/server/game/Chat/Commands | |
| parent | b3bca2743ef2312d443055e9389dc9f999215563 (diff) | |
Add basic support for NPCs on transports; DB data required.
Currently no support for combat while the transport is in motion.
Based on a patch by Socolin.
Fixes issue #168
--HG--
branch : trunk
Diffstat (limited to 'src/server/game/Chat/Commands')
| -rw-r--r-- | src/server/game/Chat/Commands/Level2.cpp | 25 | ||||
| -rw-r--r-- | src/server/game/Chat/Commands/Level3.cpp | 5 |
2 files changed, 29 insertions, 1 deletions
diff --git a/src/server/game/Chat/Commands/Level2.cpp b/src/server/game/Chat/Commands/Level2.cpp index 26b754e23d2..c66311f1277 100644 --- a/src/server/game/Chat/Commands/Level2.cpp +++ b/src/server/game/Chat/Commands/Level2.cpp @@ -42,7 +42,7 @@ #include <map> #include "GlobalEvents.h" #include "OutdoorPvPMgr.h" - +#include "Transport.h" #include "TargetedMovementGenerator.h" // for HandleNpcUnFollowCommand #include "CreatureGroups.h" @@ -1005,6 +1005,29 @@ bool ChatHandler::HandleNpcAddCommand(const char* args) float o = chr->GetOrientation(); Map *map = chr->GetMap(); + if (chr->GetTransport()) + { + uint32 tguid = chr->GetTransport()->AddNPCPassenger(0, id, chr->GetTransOffsetX(), chr->GetTransOffsetY(), chr->GetTransOffsetZ(), chr->GetTransOffsetO()); + if (tguid > 0) + { + WorldDatabase.PQuery("INSERT INTO creature_transport (guid, npc_entry, transport_entry, TransOffsetX, TransOffsetY, TransOffsetZ, TransOffsetO) values (%u, %u, %f, %f, %f, %f, %u)", tguid, id, chr->GetTransport()->GetEntry(), chr->GetTransOffsetX(), chr->GetTransOffsetY(), chr->GetTransOffsetZ(), chr->GetTransOffsetO()); + + TransportCreatureProto *transportCreatureProto = new TransportCreatureProto; + transportCreatureProto->guid = tguid; + transportCreatureProto->npc_entry = id; + uint32 transportEntry = chr->GetTransport()->GetEntry(); + transportCreatureProto->TransOffsetX = chr->GetTransOffsetX(); + transportCreatureProto->TransOffsetY = chr->GetTransOffsetY(); + transportCreatureProto->TransOffsetZ = chr->GetTransOffsetZ(); + transportCreatureProto->TransOffsetO = chr->GetTransOffsetO(); + transportCreatureProto->emote = 0; + + sMapMgr.m_TransportNPCMap[transportEntry].insert(transportCreatureProto); + sMapMgr.m_TransportNPCs.insert(transportCreatureProto); + } + return true; + } + Creature* pCreature = new Creature; if (!pCreature->Create(objmgr.GenerateLowGuid(HIGHGUID_UNIT), map, chr->GetPhaseMaskForSpawn(), id, 0, (uint32)teamval, x, y, z, o)) { diff --git a/src/server/game/Chat/Commands/Level3.cpp b/src/server/game/Chat/Commands/Level3.cpp index fb68581ad89..0d54e4f77ae 100644 --- a/src/server/game/Chat/Commands/Level3.cpp +++ b/src/server/game/Chat/Commands/Level3.cpp @@ -57,6 +57,7 @@ #include "DBCEnums.h" #include "ConditionMgr.h" #include "DisableMgr.h" +#include "Transport.h" bool ChatHandler::HandleAHBotOptionsCommand(const char *args) { @@ -4801,6 +4802,10 @@ bool ChatHandler::HandleNpcPlayEmoteCommand(const char *args) return false; } + if (target->GetTransport()) + if (target->GetGUIDTransport()) + WorldDatabase.PQuery("UPDATE creature_transport SET emote=%u WHERE transport_entry=%u AND guid=%u", emote, target->GetTransport()->GetEntry(), target->GetGUIDTransport()); + target->SetUInt32Value(UNIT_NPC_EMOTESTATE,emote); return true; |
