diff options
author | megamage <none@none> | 2009-02-01 16:46:57 -0600 |
---|---|---|
committer | megamage <none@none> | 2009-02-01 16:46:57 -0600 |
commit | 05c07aa74a38e73006ba7106574290179942692c (patch) | |
tree | 70cd33698562658805c3643c22890ce23263c3a8 /src/game/Chat.cpp | |
parent | cd0071ae620f2634f609df8b83b24687f073733e (diff) |
[7214] Phase system continue development - Commands and fixes.
* Fixed creature/gameobject save from game (used in commands code only)
* Implement .modify phase (for player), .npc setphase (for creature/pet), .gobject phase (for gameobjects) commands
for set phasemask of selected object. In player/pet case temporary until in game phase switch/re-login/GM-mode change.
In creature/gameobject case change saved in DB.
* Add to .gps output phasemask value print. Allow use .gps command with creature/gameobject shift-link
(work for objects loaded in game in command time).
Author: VladimirMangos
--HG--
branch : trunk
Diffstat (limited to 'src/game/Chat.cpp')
-rw-r--r-- | src/game/Chat.cpp | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/src/game/Chat.cpp b/src/game/Chat.cpp index 6d9da4ac9af..03f78c3938c 100644 --- a/src/game/Chat.cpp +++ b/src/game/Chat.cpp @@ -150,6 +150,7 @@ ChatCommand * ChatHandler::getCommandTable() { "drunk", SEC_MODERATOR, false, &ChatHandler::HandleDrunkCommand, "", NULL }, { "standstate", SEC_GAMEMASTER, false, &ChatHandler::HandleStandStateCommand, "", NULL }, { "morph", SEC_GAMEMASTER, false, &ChatHandler::HandleMorphCommand, "", NULL }, + { "phase", SEC_GAMEMASTER, false, &ChatHandler::HandleModifyPhaseCommand, "", NULL }, { "gender", SEC_ADMINISTRATOR, false, &ChatHandler::HandleModifyGenderCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; @@ -457,6 +458,7 @@ ChatCommand * ChatHandler::getCommandTable() { "info", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNpcInfoCommand, "", NULL }, { "playemote", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNpcPlayEmoteCommand, "", NULL }, { "follow", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcFollowCommand, "", NULL }, + { "setphase", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcSetPhaseCommand, "", NULL }, { "unfollow", SEC_GAMEMASTER, false, &ChatHandler::HandleNpcUnFollowCommand, "", NULL }, { "whisper", SEC_MODERATOR, false, &ChatHandler::HandleNpcWhisperCommand, "", NULL }, { "yell", SEC_MODERATOR, false, &ChatHandler::HandleNpcYellCommand, "", NULL }, @@ -490,12 +492,13 @@ ChatCommand * ChatHandler::getCommandTable() { { "add", SEC_GAMEMASTER, false, &ChatHandler::HandleGameObjectCommand, "", NULL }, { "delete", SEC_GAMEMASTER, false, &ChatHandler::HandleDelObjectCommand, "", NULL }, - { "target", SEC_GAMEMASTER, false, &ChatHandler::HandleTargetObjectCommand, "", NULL }, - { "turn", SEC_GAMEMASTER, false, &ChatHandler::HandleTurnObjectCommand, "", NULL }, { "move", SEC_GAMEMASTER, false, &ChatHandler::HandleMoveObjectCommand, "", NULL }, { "near", SEC_ADMINISTRATOR, false, &ChatHandler::HandleNearObjectCommand, "", NULL }, { "activate", SEC_GAMEMASTER, false, &ChatHandler::HandleActivateObjectCommand, "", NULL }, { "addtemp", SEC_GAMEMASTER, false, &ChatHandler::HandleTempGameObjectCommand, "", NULL }, + { "setphase", SEC_GAMEMASTER, false, &ChatHandler::HandleGOPhaseCommand, "", NULL }, + { "target", SEC_GAMEMASTER, false, &ChatHandler::HandleTargetObjectCommand, "", NULL }, + { "turn", SEC_GAMEMASTER, false, &ChatHandler::HandleTurnObjectCommand, "", NULL }, { NULL, 0, false, NULL, "", NULL } }; @@ -1405,6 +1408,51 @@ GameTele const* ChatHandler::extractGameTeleFromLink(char* text) return objmgr.GetGameTele(cId); } +enum GuidLinkType +{ + SPELL_LINK_CREATURE = 0, + SPELL_LINK_GAMEOBJECT = 1 +}; + +static char const* const guidKeys[] = +{ + "Hcreature", + "Hgameobject", + 0 +}; + +uint64 ChatHandler::extractGuidFromLink(char* text) +{ + int type = 0; + + // |color|Hcreature:creature_guid|h[name]|h|r + // |color|Hgameobject:go_guid|h[name]|h|r + char* idS = extractKeyFromLink(text,guidKeys,&type); + if(!idS) + return 0; + + uint32 lowguid = (uint32)atol(idS); + + switch(type) + { + case SPELL_LINK_CREATURE: + { + if(CreatureData const* data = objmgr.GetCreatureData(lowguid) ) + return MAKE_NEW_GUID(lowguid,data->id,HIGHGUID_UNIT); + else + return 0; + } + case SPELL_LINK_GAMEOBJECT: + if(GameObjectData const* data = objmgr.GetGOData(lowguid) ) + return MAKE_NEW_GUID(lowguid,data->id,HIGHGUID_GAMEOBJECT); + else + return 0; + } + + // unknown type? + return 0; +} + const char *ChatHandler::GetName() const { return m_session->GetPlayer()->GetName(); |