mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 13:37:05 +00:00
[10086] Implement use .go command with shiftlinks or player name.
* Now if for .go command provided no X Y Z args command will not teleport player to nowhere. * Instead command allow used with player name and work as simplifed .goname (teleport to player _point_ in user instance binding, not to player instance) * Also command can be used with diferent point coordinates provided shift-links: - player (result for example .lookup player account) - creature (result .list creature command) - gameobject (result .list object command) - tele (result .lookup tele) - taxinode (result .lookup taxinode)
This commit is contained in:
parent
f28bc74e66
commit
619f01e150
8 changed files with 239 additions and 113 deletions
|
|
@ -24,7 +24,7 @@ CREATE TABLE `db_version` (
|
||||||
`version` varchar(120) default NULL,
|
`version` varchar(120) default NULL,
|
||||||
`creature_ai_version` varchar(120) default NULL,
|
`creature_ai_version` varchar(120) default NULL,
|
||||||
`cache_id` int(10) default '0',
|
`cache_id` int(10) default '0',
|
||||||
`required_10056_01_mangos_spell_proc_event` bit(1) default NULL
|
`required_10086_01_mangos_command` bit(1) default NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
@ -577,6 +577,7 @@ INSERT INTO `command` VALUES
|
||||||
('gm ingame',0,'Syntax: .gm ingame\r\n\r\nDisplay a list of available in game Game Masters.'),
|
('gm ingame',0,'Syntax: .gm ingame\r\n\r\nDisplay a list of available in game Game Masters.'),
|
||||||
('gm list',3,'Syntax: .gm list\r\n\r\nDisplay a list of all Game Masters accounts and security levels.'),
|
('gm list',3,'Syntax: .gm list\r\n\r\nDisplay a list of all Game Masters accounts and security levels.'),
|
||||||
('gm visible',1,'Syntax: .gm visible on/off\r\n\r\nOutput current visibility state or make GM visible(on) and invisible(off) for other players.'),
|
('gm visible',1,'Syntax: .gm visible on/off\r\n\r\nOutput current visibility state or make GM visible(on) and invisible(off) for other players.'),
|
||||||
|
('go',1,'Syntax: .go [$playername|pointlink|#x #y #z [#mapid]]\r\nTeleport your character to point with coordinates of player $playername, or coordinates of one from shift-link types: player, tele, taxinode, creature, gameobject, or explicit #x #y #z #mapid coordinates.'),
|
||||||
('go creature',1,'Syntax: .go creature #creature_guid\r\nTeleport your character to creature with guid #creature_guid.\r\n.gocreature #creature_name\r\nTeleport your character to creature with this name.\r\n.gocreature id #creature_id\r\nTeleport your character to a creature that was spawned from the template with this entry.\r\n*If* more than one creature is found, then you are teleported to the first that is found inside the database.'),
|
('go creature',1,'Syntax: .go creature #creature_guid\r\nTeleport your character to creature with guid #creature_guid.\r\n.gocreature #creature_name\r\nTeleport your character to creature with this name.\r\n.gocreature id #creature_id\r\nTeleport your character to a creature that was spawned from the template with this entry.\r\n*If* more than one creature is found, then you are teleported to the first that is found inside the database.'),
|
||||||
('go graveyard',1,'Syntax: .go graveyard #graveyardId\r\n Teleport to graveyard with the graveyardId specified.'),
|
('go graveyard',1,'Syntax: .go graveyard #graveyardId\r\n Teleport to graveyard with the graveyardId specified.'),
|
||||||
('go grid',1,'Syntax: .go grid #gridX #gridY [#mapId]\r\n\r\nTeleport the gm to center of grid with provided indexes at map #mapId (or current map if it not provided).'),
|
('go grid',1,'Syntax: .go grid #gridX #gridY [#mapId]\r\n\r\nTeleport the gm to center of grid with provided indexes at map #mapId (or current map if it not provided).'),
|
||||||
|
|
|
||||||
5
sql/updates/10086_01_mangos_command.sql
Normal file
5
sql/updates/10086_01_mangos_command.sql
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
ALTER TABLE db_version CHANGE COLUMN required_10056_01_mangos_spell_proc_event required_10086_01_mangos_command bit;
|
||||||
|
|
||||||
|
DELETE FROM command WHERE name IN('go');
|
||||||
|
INSERT INTO command (name, security, help) VALUES
|
||||||
|
('go',1,'Syntax: .go [$playername|pointlink|#x #y #z [#mapid]]\r\nTeleport your character to point with coordinates of player $playername, or coordinates of one from shift-link types: player, tele, taxinode, creature, gameobject, or explicit #x #y #z #mapid coordinates.');
|
||||||
|
|
@ -89,6 +89,7 @@ pkgdata_DATA = \
|
||||||
10045_01_mangos_spell_proc_event.sql \
|
10045_01_mangos_spell_proc_event.sql \
|
||||||
10051_01_characters_character_aura.sql \
|
10051_01_characters_character_aura.sql \
|
||||||
10056_01_mangos_spell_proc_event.sql \
|
10056_01_mangos_spell_proc_event.sql \
|
||||||
|
10086_01_mangos_command.sql \
|
||||||
README
|
README
|
||||||
|
|
||||||
## Additional files to include when running 'make dist'
|
## Additional files to include when running 'make dist'
|
||||||
|
|
@ -158,4 +159,5 @@ EXTRA_DIST = \
|
||||||
10045_01_mangos_spell_proc_event.sql \
|
10045_01_mangos_spell_proc_event.sql \
|
||||||
10051_01_characters_character_aura.sql \
|
10051_01_characters_character_aura.sql \
|
||||||
10056_01_mangos_spell_proc_event.sql \
|
10056_01_mangos_spell_proc_event.sql \
|
||||||
|
10086_01_mangos_command.sql \
|
||||||
README
|
README
|
||||||
|
|
|
||||||
|
|
@ -216,7 +216,7 @@ ChatCommand * ChatHandler::getCommandTable()
|
||||||
{ "zonexy", SEC_MODERATOR, false, &ChatHandler::HandleGoZoneXYCommand, "", NULL },
|
{ "zonexy", SEC_MODERATOR, false, &ChatHandler::HandleGoZoneXYCommand, "", NULL },
|
||||||
{ "xy", SEC_MODERATOR, false, &ChatHandler::HandleGoXYCommand, "", NULL },
|
{ "xy", SEC_MODERATOR, false, &ChatHandler::HandleGoXYCommand, "", NULL },
|
||||||
{ "xyz", SEC_MODERATOR, false, &ChatHandler::HandleGoXYZCommand, "", NULL },
|
{ "xyz", SEC_MODERATOR, false, &ChatHandler::HandleGoXYZCommand, "", NULL },
|
||||||
{ "", SEC_MODERATOR, false, &ChatHandler::HandleGoXYZCommand, "", NULL },
|
{ "", SEC_MODERATOR, false, &ChatHandler::HandleGoCommand, "", NULL },
|
||||||
{ NULL, 0, false, NULL, "", NULL }
|
{ NULL, 0, false, NULL, "", NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -2133,6 +2133,130 @@ uint64 ChatHandler::extractGuidFromLink(char* text)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum LocationLinkType
|
||||||
|
{
|
||||||
|
LOCATION_LINK_PLAYER = 0, // must be first for selection in not link case
|
||||||
|
LOCATION_LINK_TELE = 1,
|
||||||
|
LOCATION_LINK_TAXINODE = 2,
|
||||||
|
LOCATION_LINK_CREATURE = 3,
|
||||||
|
LOCATION_LINK_GAMEOBJECT = 4
|
||||||
|
};
|
||||||
|
|
||||||
|
static char const* const locationKeys[] =
|
||||||
|
{
|
||||||
|
"Htele",
|
||||||
|
"Htaxinode",
|
||||||
|
"Hplayer",
|
||||||
|
"Hcreature",
|
||||||
|
"Hgameobject",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
bool ChatHandler::extractLocationFromLink(char* text, uint32& mapid, float& x, float& y, float& z)
|
||||||
|
{
|
||||||
|
int type = 0;
|
||||||
|
|
||||||
|
// |color|Hplayer:name|h[name]|h|r
|
||||||
|
// |color|Htele:id|h[name]|h|r
|
||||||
|
// |color|Htaxinode:id|h[name]|h|r
|
||||||
|
// |color|Hcreature:creature_guid|h[name]|h|r
|
||||||
|
// |color|Hgameobject:go_guid|h[name]|h|r
|
||||||
|
char* idS = extractKeyFromLink(text,locationKeys,&type);
|
||||||
|
if(!idS)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
switch(type)
|
||||||
|
{
|
||||||
|
// it also fail case
|
||||||
|
case LOCATION_LINK_PLAYER:
|
||||||
|
{
|
||||||
|
// not link and not name, possible coordinates/etc
|
||||||
|
if (isNumeric(idS[0]))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
std::string name = idS;
|
||||||
|
if(!normalizePlayerName(name))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(Player* player = sObjectMgr.GetPlayer(name.c_str()))
|
||||||
|
{
|
||||||
|
mapid = player->GetMapId();
|
||||||
|
x = player->GetPositionX();
|
||||||
|
y = player->GetPositionY();
|
||||||
|
z = player->GetPositionZ();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(uint64 guid = sObjectMgr.GetPlayerGUIDByName(name))
|
||||||
|
{
|
||||||
|
// to point where player stay (if loaded)
|
||||||
|
float o;
|
||||||
|
bool in_flight;
|
||||||
|
return Player::LoadPositionFromDB(mapid, x, y, z, o, in_flight, guid);
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
case LOCATION_LINK_TELE:
|
||||||
|
{
|
||||||
|
uint32 id = (uint32)atol(idS);
|
||||||
|
GameTele const* tele = sObjectMgr.GetGameTele(id);
|
||||||
|
if (!tele)
|
||||||
|
return false;
|
||||||
|
mapid = tele->mapId;
|
||||||
|
x = tele->position_x;
|
||||||
|
y = tele->position_y;
|
||||||
|
z = tele->position_z;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case LOCATION_LINK_TAXINODE:
|
||||||
|
{
|
||||||
|
uint32 id = (uint32)atol(idS);
|
||||||
|
TaxiNodesEntry const* node = sTaxiNodesStore.LookupEntry(id);
|
||||||
|
if (!node)
|
||||||
|
return false;
|
||||||
|
mapid = node->map_id;
|
||||||
|
x = node->x;
|
||||||
|
y = node->y;
|
||||||
|
z = node->z;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case LOCATION_LINK_CREATURE:
|
||||||
|
{
|
||||||
|
uint32 lowguid = (uint32)atol(idS);
|
||||||
|
|
||||||
|
if(CreatureData const* data = sObjectMgr.GetCreatureData(lowguid) )
|
||||||
|
{
|
||||||
|
mapid = data->mapid;
|
||||||
|
x = data->posX;
|
||||||
|
y = data->posY;
|
||||||
|
z = data->posZ;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
case LOCATION_LINK_GAMEOBJECT:
|
||||||
|
{
|
||||||
|
uint32 lowguid = (uint32)atol(idS);
|
||||||
|
|
||||||
|
if(GameObjectData const* data = sObjectMgr.GetGOData(lowguid) )
|
||||||
|
{
|
||||||
|
mapid = data->mapid;
|
||||||
|
x = data->posX;
|
||||||
|
y = data->posY;
|
||||||
|
z = data->posZ;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// unknown type?
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
std::string ChatHandler::extractPlayerNameFromLink(char* text)
|
std::string ChatHandler::extractPlayerNameFromLink(char* text)
|
||||||
{
|
{
|
||||||
// |color|Hplayer:name|h[name]|h|r
|
// |color|Hplayer:name|h[name]|h|r
|
||||||
|
|
|
||||||
|
|
@ -535,6 +535,7 @@ class ChatHandler
|
||||||
uint32 extractSpellIdFromLink(char* text);
|
uint32 extractSpellIdFromLink(char* text);
|
||||||
uint64 extractGuidFromLink(char* text);
|
uint64 extractGuidFromLink(char* text);
|
||||||
GameTele const* extractGameTeleFromLink(char* text);
|
GameTele const* extractGameTeleFromLink(char* text);
|
||||||
|
bool extractLocationFromLink(char* text, uint32& mapid, float& x, float& y, float& z);
|
||||||
std::string extractPlayerNameFromLink(char* text);
|
std::string extractPlayerNameFromLink(char* text);
|
||||||
// select by arg (name/link) or in-game selection online/offline player
|
// select by arg (name/link) or in-game selection online/offline player
|
||||||
bool extractPlayerTarget(char* args, Player** player, uint64* player_guid = NULL, std::string* player_name = NULL);
|
bool extractPlayerTarget(char* args, Player** player, uint64* player_guid = NULL, std::string* player_name = NULL);
|
||||||
|
|
@ -558,6 +559,8 @@ class ChatHandler
|
||||||
void HandleCharacterLevel(Player* player, uint64 player_guid, uint32 oldlevel, uint32 newlevel);
|
void HandleCharacterLevel(Player* player, uint64 player_guid, uint32 oldlevel, uint32 newlevel);
|
||||||
void HandleLearnSkillRecipesHelper(Player* player,uint32 skill_id);
|
void HandleLearnSkillRecipesHelper(Player* player,uint32 skill_id);
|
||||||
void ShowSpellListHelper(Player* target, SpellEntry const* spellInfo, LocaleConstant loc);
|
void ShowSpellListHelper(Player* target, SpellEntry const* spellInfo, LocaleConstant loc);
|
||||||
|
bool HandleGoHelper(Player* _player, uint32 mapid, float x, float y, float const* zPtr = NULL);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores informations about a deleted character
|
* Stores informations about a deleted character
|
||||||
|
|
|
||||||
|
|
@ -2226,6 +2226,51 @@ bool ChatHandler::HandleGroupgoCommand(const char* args)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ChatHandler::HandleGoHelper( Player* player, uint32 mapid, float x, float y, float const* zPtr )
|
||||||
|
{
|
||||||
|
float z;
|
||||||
|
|
||||||
|
if (zPtr)
|
||||||
|
{
|
||||||
|
z = *zPtr;
|
||||||
|
|
||||||
|
// check full provided coordinates
|
||||||
|
if(!MapManager::IsValidMapCoord(mapid,x,y,z))
|
||||||
|
{
|
||||||
|
PSendSysMessage(LANG_INVALID_TARGET_COORD,x,y,mapid);
|
||||||
|
SetSentErrorMessage(true);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// we need check x,y before ask Z or can crash at invalide coordinates
|
||||||
|
if(!MapManager::IsValidMapCoord(mapid,x,y))
|
||||||
|
{
|
||||||
|
PSendSysMessage(LANG_INVALID_TARGET_COORD,x,y,mapid);
|
||||||
|
SetSentErrorMessage(true);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Map const *map = sMapMgr.CreateBaseMap(mapid);
|
||||||
|
z = std::max(map->GetHeight(x, y, MAX_HEIGHT), map->GetWaterLevel(x, y));
|
||||||
|
}
|
||||||
|
|
||||||
|
// stop flight if need
|
||||||
|
if(player->isInFlight())
|
||||||
|
{
|
||||||
|
player->GetMotionMaster()->MovementExpired();
|
||||||
|
player->m_taxi.ClearTaxiDestinations();
|
||||||
|
}
|
||||||
|
// save only in non-flight case
|
||||||
|
else
|
||||||
|
player->SaveRecallPosition();
|
||||||
|
|
||||||
|
player->TeleportTo(mapid, x, y, z, player->GetOrientation());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool ChatHandler::HandleGoTaxinodeCommand(const char* args)
|
bool ChatHandler::HandleGoTaxinodeCommand(const char* args)
|
||||||
{
|
{
|
||||||
Player* _player = m_session->GetPlayer();
|
Player* _player = m_session->GetPlayer();
|
||||||
|
|
@ -2249,28 +2294,55 @@ bool ChatHandler::HandleGoTaxinodeCommand(const char* args)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((node->x == 0.0f && node->y == 0.0f && node->z == 0.0f) ||
|
if (node->x == 0.0f && node->y == 0.0f && node->z == 0.0f)
|
||||||
!MapManager::IsValidMapCoord(node->map_id,node->x,node->y,node->z))
|
|
||||||
{
|
{
|
||||||
PSendSysMessage(LANG_INVALID_TARGET_COORD,node->x,node->y,node->map_id);
|
PSendSysMessage(LANG_INVALID_TARGET_COORD,node->x,node->y,node->map_id);
|
||||||
SetSentErrorMessage(true);
|
SetSentErrorMessage(true);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// stop flight if need
|
return HandleGoHelper(_player, node->map_id, node->x, node->y, &node->z);
|
||||||
if (_player->isInFlight())
|
|
||||||
{
|
|
||||||
_player->GetMotionMaster()->MovementExpired();
|
|
||||||
_player->m_taxi.ClearTaxiDestinations();
|
|
||||||
}
|
|
||||||
// save only in non-flight case
|
|
||||||
else
|
|
||||||
_player->SaveRecallPosition();
|
|
||||||
|
|
||||||
_player->TeleportTo(node->map_id, node->x, node->y, node->z, _player->GetOrientation());
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ChatHandler::HandleGoCommand(const char* args)
|
||||||
|
{
|
||||||
|
if(!*args)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
Player* _player = m_session->GetPlayer();
|
||||||
|
|
||||||
|
uint32 mapid;
|
||||||
|
float x, y, z;
|
||||||
|
|
||||||
|
// raw coordinates case
|
||||||
|
if (isNumeric(args[0]))
|
||||||
|
{
|
||||||
|
char* px = strtok((char*)args, " ");
|
||||||
|
char* py = strtok(NULL, " ");
|
||||||
|
char* pz = strtok(NULL, " ");
|
||||||
|
char* pmapid = strtok(NULL, " ");
|
||||||
|
|
||||||
|
if (!px || !py || !pz)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
x = (float)atof(px);
|
||||||
|
y = (float)atof(py);
|
||||||
|
z = (float)atof(pz);
|
||||||
|
if (pmapid)
|
||||||
|
mapid = (uint32)atoi(pmapid);
|
||||||
|
else
|
||||||
|
mapid = _player->GetMapId();
|
||||||
|
|
||||||
|
}
|
||||||
|
// link case
|
||||||
|
else if (!extractLocationFromLink((char*)args, mapid, x, y, z))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return HandleGoHelper(_player, mapid, x, y, &z);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//teleport at coordinates
|
//teleport at coordinates
|
||||||
bool ChatHandler::HandleGoXYCommand(const char* args)
|
bool ChatHandler::HandleGoXYCommand(const char* args)
|
||||||
{
|
{
|
||||||
|
|
@ -2293,29 +2365,7 @@ bool ChatHandler::HandleGoXYCommand(const char* args)
|
||||||
mapid = (uint32)atoi(pmapid);
|
mapid = (uint32)atoi(pmapid);
|
||||||
else mapid = _player->GetMapId();
|
else mapid = _player->GetMapId();
|
||||||
|
|
||||||
if(!MapManager::IsValidMapCoord(mapid,x,y))
|
return HandleGoHelper(_player, mapid, x, y);
|
||||||
{
|
|
||||||
PSendSysMessage(LANG_INVALID_TARGET_COORD,x,y,mapid);
|
|
||||||
SetSentErrorMessage(true);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// stop flight if need
|
|
||||||
if(_player->isInFlight())
|
|
||||||
{
|
|
||||||
_player->GetMotionMaster()->MovementExpired();
|
|
||||||
_player->m_taxi.ClearTaxiDestinations();
|
|
||||||
}
|
|
||||||
// save only in non-flight case
|
|
||||||
else
|
|
||||||
_player->SaveRecallPosition();
|
|
||||||
|
|
||||||
Map const *map = sMapMgr.CreateBaseMap(mapid);
|
|
||||||
float z = std::max(map->GetHeight(x, y, MAX_HEIGHT), map->GetWaterLevel(x, y));
|
|
||||||
|
|
||||||
_player->TeleportTo(mapid, x, y, z, _player->GetOrientation());
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//teleport at coordinates, including Z
|
//teleport at coordinates, including Z
|
||||||
|
|
@ -2343,26 +2393,7 @@ bool ChatHandler::HandleGoXYZCommand(const char* args)
|
||||||
else
|
else
|
||||||
mapid = _player->GetMapId();
|
mapid = _player->GetMapId();
|
||||||
|
|
||||||
if(!MapManager::IsValidMapCoord(mapid,x,y,z))
|
return HandleGoHelper(_player, mapid, x, y, &z);
|
||||||
{
|
|
||||||
PSendSysMessage(LANG_INVALID_TARGET_COORD,x,y,mapid);
|
|
||||||
SetSentErrorMessage(true);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// stop flight if need
|
|
||||||
if(_player->isInFlight())
|
|
||||||
{
|
|
||||||
_player->GetMotionMaster()->MovementExpired();
|
|
||||||
_player->m_taxi.ClearTaxiDestinations();
|
|
||||||
}
|
|
||||||
// save only in non-flight case
|
|
||||||
else
|
|
||||||
_player->SaveRecallPosition();
|
|
||||||
|
|
||||||
_player->TeleportTo(mapid, x, y, z, _player->GetOrientation());
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//teleport at coordinates
|
//teleport at coordinates
|
||||||
|
|
@ -2403,49 +2434,33 @@ bool ChatHandler::HandleGoZoneXYCommand(const char* args)
|
||||||
// update to parent zone if exist (client map show only zones without parents)
|
// update to parent zone if exist (client map show only zones without parents)
|
||||||
AreaTableEntry const* zoneEntry = areaEntry->zone ? GetAreaEntryByAreaID(areaEntry->zone) : areaEntry;
|
AreaTableEntry const* zoneEntry = areaEntry->zone ? GetAreaEntryByAreaID(areaEntry->zone) : areaEntry;
|
||||||
|
|
||||||
Map const *map = sMapMgr.CreateBaseMap(zoneEntry->mapid);
|
MapEntry const *mapEntry = sMapStore.LookupEntry(zoneEntry->mapid);
|
||||||
|
|
||||||
if(map->Instanceable())
|
if (mapEntry->Instanceable())
|
||||||
{
|
{
|
||||||
PSendSysMessage(LANG_INVALID_ZONE_MAP,areaEntry->ID,areaEntry->area_name[GetSessionDbcLocale()],map->GetId(),map->GetMapName());
|
PSendSysMessage(LANG_INVALID_ZONE_MAP, areaEntry->ID, areaEntry->area_name[GetSessionDbcLocale()],
|
||||||
|
mapEntry->MapID, mapEntry->name[GetSessionDbcLocale()]);
|
||||||
SetSentErrorMessage(true);
|
SetSentErrorMessage(true);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Zone2MapCoordinates(x,y,zoneEntry->ID))
|
if (!Zone2MapCoordinates(x,y,zoneEntry->ID))
|
||||||
{
|
{
|
||||||
PSendSysMessage(LANG_INVALID_ZONE_MAP,areaEntry->ID,areaEntry->area_name[GetSessionDbcLocale()],map->GetId(),map->GetMapName());
|
PSendSysMessage(LANG_INVALID_ZONE_MAP, areaEntry->ID, areaEntry->area_name[GetSessionDbcLocale()],
|
||||||
|
mapEntry->MapID, mapEntry->name[GetSessionDbcLocale()]);
|
||||||
SetSentErrorMessage(true);
|
SetSentErrorMessage(true);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!MapManager::IsValidMapCoord(zoneEntry->mapid,x,y))
|
return HandleGoHelper(_player, mapEntry->MapID, x, y);
|
||||||
{
|
|
||||||
PSendSysMessage(LANG_INVALID_TARGET_COORD,x,y,zoneEntry->mapid);
|
|
||||||
SetSentErrorMessage(true);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// stop flight if need
|
|
||||||
if(_player->isInFlight())
|
|
||||||
{
|
|
||||||
_player->GetMotionMaster()->MovementExpired();
|
|
||||||
_player->m_taxi.ClearTaxiDestinations();
|
|
||||||
}
|
|
||||||
// save only in non-flight case
|
|
||||||
else
|
|
||||||
_player->SaveRecallPosition();
|
|
||||||
|
|
||||||
float z = std::max(map->GetHeight(x, y, MAX_HEIGHT), map->GetWaterLevel(x, y));
|
|
||||||
_player->TeleportTo(zoneEntry->mapid, x, y, z, _player->GetOrientation());
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//teleport to grid
|
//teleport to grid
|
||||||
bool ChatHandler::HandleGoGridCommand(const char* args)
|
bool ChatHandler::HandleGoGridCommand(const char* args)
|
||||||
{
|
{
|
||||||
if(!*args) return false;
|
if (!*args)
|
||||||
|
return false;
|
||||||
|
|
||||||
Player* _player = m_session->GetPlayer();
|
Player* _player = m_session->GetPlayer();
|
||||||
|
|
||||||
char* px = strtok((char*)args, " ");
|
char* px = strtok((char*)args, " ");
|
||||||
|
|
@ -2457,37 +2472,13 @@ bool ChatHandler::HandleGoGridCommand(const char* args)
|
||||||
|
|
||||||
float grid_x = (float)atof(px);
|
float grid_x = (float)atof(px);
|
||||||
float grid_y = (float)atof(py);
|
float grid_y = (float)atof(py);
|
||||||
uint32 mapid;
|
uint32 mapid = pmapid ? (uint32)atoi(pmapid) : _player->GetMapId();
|
||||||
if (pmapid)
|
|
||||||
mapid = (uint32)atoi(pmapid);
|
|
||||||
else mapid = _player->GetMapId();
|
|
||||||
|
|
||||||
// center of grid
|
// center of grid
|
||||||
float x = (grid_x-CENTER_GRID_ID+0.5f)*SIZE_OF_GRIDS;
|
float x = (grid_x-CENTER_GRID_ID+0.5f)*SIZE_OF_GRIDS;
|
||||||
float y = (grid_y-CENTER_GRID_ID+0.5f)*SIZE_OF_GRIDS;
|
float y = (grid_y-CENTER_GRID_ID+0.5f)*SIZE_OF_GRIDS;
|
||||||
|
|
||||||
if(!MapManager::IsValidMapCoord(mapid,x,y))
|
return HandleGoHelper(_player, mapid, x, y);
|
||||||
{
|
|
||||||
PSendSysMessage(LANG_INVALID_TARGET_COORD,x,y,mapid);
|
|
||||||
SetSentErrorMessage(true);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// stop flight if need
|
|
||||||
if(_player->isInFlight())
|
|
||||||
{
|
|
||||||
_player->GetMotionMaster()->MovementExpired();
|
|
||||||
_player->m_taxi.ClearTaxiDestinations();
|
|
||||||
}
|
|
||||||
// save only in non-flight case
|
|
||||||
else
|
|
||||||
_player->SaveRecallPosition();
|
|
||||||
|
|
||||||
Map const *map = sMapMgr.CreateBaseMap(mapid);
|
|
||||||
float z = std::max(map->GetHeight(x, y, MAX_HEIGHT), map->GetWaterLevel(x, y));
|
|
||||||
_player->TeleportTo(mapid, x, y, z, _player->GetOrientation());
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ChatHandler::HandleModifyDrunkCommand(const char* args)
|
bool ChatHandler::HandleModifyDrunkCommand(const char* args)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "10085"
|
#define REVISION_NR "10086"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#ifndef __REVISION_SQL_H__
|
#ifndef __REVISION_SQL_H__
|
||||||
#define __REVISION_SQL_H__
|
#define __REVISION_SQL_H__
|
||||||
#define REVISION_DB_CHARACTERS "required_10051_01_characters_character_aura"
|
#define REVISION_DB_CHARACTERS "required_10051_01_characters_character_aura"
|
||||||
#define REVISION_DB_MANGOS "required_10056_01_mangos_spell_proc_event"
|
#define REVISION_DB_MANGOS "required_10086_01_mangos_command"
|
||||||
#define REVISION_DB_REALMD "required_10008_01_realmd_realmd_db_version"
|
#define REVISION_DB_REALMD "required_10008_01_realmd_realmd_db_version"
|
||||||
#endif // __REVISION_SQL_H__
|
#endif // __REVISION_SQL_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue