aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/Commands
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2013-10-26 17:06:50 +0200
committerShauren <shauren.trinity@gmail.com>2013-10-26 17:06:50 +0200
commit75a790ca475c6af31730d331a3ab185f8abdd6e2 (patch)
treef961f8de614ac7e1dfc1f17c68e83c7d14feff20 /src/server/scripts/Commands
parent8d6aec608f0cd323d291dc12efce32f630590a23 (diff)
parentb81bf7d0250939ee96b942f554c16d950f06c7b1 (diff)
Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4
Diffstat (limited to 'src/server/scripts/Commands')
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp26
-rw-r--r--src/server/scripts/Commands/cs_group.cpp51
-rw-r--r--src/server/scripts/Commands/cs_npc.cpp40
-rw-r--r--src/server/scripts/Commands/cs_tele.cpp2
4 files changed, 89 insertions, 30 deletions
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index dc88366e677..fd6c0b7a149 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -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 },
{ "phase", rbac::RBAC_PERM_COMMAND_DEBUG_PHASE, false, &HandleDebugPhaseCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
@@ -1358,6 +1360,30 @@ public:
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;
+ }
+
static bool HandleDebugPhaseCommand(ChatHandler* handler, char const* /*args*/)
{
Unit* unit = handler->getSelectedUnit();
diff --git a/src/server/scripts/Commands/cs_group.cpp b/src/server/scripts/Commands/cs_group.cpp
index 8c38d954203..fda34586f0c 100644
--- a/src/server/scripts/Commands/cs_group.cpp
+++ b/src/server/scripts/Commands/cs_group.cpp
@@ -260,24 +260,35 @@ public:
static bool HandleGroupListCommand(ChatHandler* handler, char const* args)
{
+ // Get ALL the variables!
Player* playerTarget;
+ uint32 phase = 0;
uint64 guidTarget;
std::string nameTarget;
+ std::string zoneName;
+ const char* onlineState = "";
+ // Parse the guid to uint32...
uint32 parseGUID = MAKE_NEW_GUID(atol((char*)args), 0, HIGHGUID_PLAYER);
+ // ... and try to extract a player out of it.
if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget))
{
playerTarget = sObjectMgr->GetPlayerByLowGUID(parseGUID);
guidTarget = parseGUID;
}
+ // If not, we return false and end right away.
else if (!handler->extractPlayerTarget((char*)args, &playerTarget, &guidTarget, &nameTarget))
return false;
+ // Next, we need a group. So we define a group variable.
Group* groupTarget = NULL;
+
+ // We try to extract a group from an online player.
if (playerTarget)
groupTarget = playerTarget->GetGroup();
+ // If not, we extract it from the SQL.
if (!groupTarget)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GROUP_MEMBER);
@@ -287,6 +298,7 @@ public:
groupTarget = sGroupMgr->GetGroupByDbStoreId((*resultGroup)[0].GetUInt32());
}
+ // If both fails, players simply has no party. Return false.
if (!groupTarget)
{
handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, nameTarget.c_str());
@@ -294,12 +306,20 @@ public:
return false;
}
- handler->PSendSysMessage(LANG_GROUP_TYPE, (groupTarget->isRaidGroup() ? "raid" : "party"));
+ // We get the group members after successfully detecting a group.
Group::MemberSlotList const& members = groupTarget->GetMemberSlots();
+
+ // To avoid a cluster fuck, namely trying multiple queries to simply get a group member count...
+ handler->PSendSysMessage(LANG_GROUP_TYPE, (groupTarget->isRaidGroup() ? "raid" : "party"), members.size());
+ // ... we simply move the group type and member count print after retrieving the slots and simply output it's size.
+
+ // While rather dirty codestyle-wise, it saves space (if only a little). For each member, we look several informations up.
for (Group::MemberSlotList::const_iterator itr = members.begin(); itr != members.end(); ++itr)
{
+ // Define temporary variable slot to iterator.
Group::MemberSlot const& slot = *itr;
+ // Check for given flag and assign it to that iterator
std::string flags;
if (slot.flags & MEMBER_FLAG_ASSISTANT)
flags = "Assistant";
@@ -321,13 +341,38 @@ public:
if (flags.empty())
flags = "None";
+ // Check if iterator is online. If is...
Player* p = ObjectAccessor::FindPlayer((*itr).guid);
- const char* onlineState = (p && p->IsInWorld()) ? "online" : "offline";
+ if (p && p->IsInWorld())
+ {
+ // ... than, it prints information like "is online", where he is, etc...
+ onlineState = "online";
+ phase = (!p->IsGameMaster() ? p->GetPhaseMask() : -1);
+ uint32 locale = handler->GetSessionDbcLocale();
+
+ AreaTableEntry const* area = GetAreaEntryByAreaID(p->GetAreaId());
+ if (area)
+ {
+ AreaTableEntry const* zone = GetAreaEntryByAreaID(area->zone);
+ if (zone)
+ zoneName = zone->area_name[locale];
+ }
+ }
+ else
+ {
+ // ... else, everything is set to offline or neutral values.
+ zoneName = "<ERROR>";
+ onlineState = "Offline";
+ phase = 0;
+ }
+ // Now we can print those informations for every single member of each group!
handler->PSendSysMessage(LANG_GROUP_PLAYER_NAME_GUID, slot.name.c_str(), onlineState,
- GUID_LOPART(slot.guid), flags.c_str(), lfg::GetRolesString(slot.roles).c_str());
+ zoneName.c_str(), phase, GUID_LOPART(slot.guid), flags.c_str(),
+ lfg::GetRolesString(slot.roles).c_str());
}
+ // And finish after every iterator is done.
return true;
}
};
diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp
index 301f37d7acc..422ca31a4c2 100644
--- a/src/server/scripts/Commands/cs_npc.cpp
+++ b/src/server/scripts/Commands/cs_npc.cpp
@@ -246,24 +246,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->GetPhaseMgr().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->GetPhaseMgr().GetPhaseMaskForSpawn());
+ sObjectMgr->AddCreatureToGrid(guid, &data);
return true;
}
@@ -904,17 +902,6 @@ public:
return false;
}
- if (target->GetTransport() && target->GetGUIDTransport())
- {
- PreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_UPD_CREATURE_TRANSPORT_EMOTE);
-
- stmt->setInt32(0, int32(emote));
- stmt->setInt32(1, target->GetTransport()->GetEntry());
- stmt->setInt32(2, target->GetGUIDTransport());
-
- WorldDatabase.Execute(stmt);
- }
-
target->SetUInt32Value(UNIT_NPC_EMOTESTATE, emote);
return true;
@@ -1342,7 +1329,8 @@ public:
{
if (!*args)
return false;
- char* charID = strtok((char*)args, " ");
+
+ char* charID = handler->extractKeyFromLink((char*)args, "Hcreature_entry");
if (!charID)
return false;
diff --git a/src/server/scripts/Commands/cs_tele.cpp b/src/server/scripts/Commands/cs_tele.cpp
index 154da04db6a..ca9f4a59045 100644
--- a/src/server/scripts/Commands/cs_tele.cpp
+++ b/src/server/scripts/Commands/cs_tele.cpp
@@ -65,7 +65,7 @@ public:
std::string name = args;
- if (sObjectMgr->GetGameTele(name))
+ if (sObjectMgr->GetGameTeleExactName(name))
{
handler->SendSysMessage(LANG_COMMAND_TP_ALREADYEXIST);
handler->SetSentErrorMessage(true);