diff options
author | click <none@none> | 2010-11-13 22:29:46 +0100 |
---|---|---|
committer | click <none@none> | 2010-11-13 22:29:46 +0100 |
commit | c374f3245abcfca2bcf9da375c38dcc60f75d30e (patch) | |
tree | 49944a49605fe352c6bbc04cb4ecdd27bb72d867 /src | |
parent | 72eff3dd0d348ff857de51f3d9b62e59b808856d (diff) |
Scripts/Commands: Add tele and event commands to commandscripts system and streamlining the command selection process to ensure the correct command is run when using abbreviations
Patch by Paradox (some cleanups was needed)
--HG--
branch : trunk
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Chat/Chat.cpp | 58 | ||||
-rwxr-xr-x | src/server/game/Chat/Chat.h | 11 | ||||
-rwxr-xr-x | src/server/game/Chat/Commands/Level1.cpp | 165 | ||||
-rwxr-xr-x | src/server/game/Chat/Commands/Level2.cpp | 160 | ||||
-rwxr-xr-x | src/server/game/Chat/Commands/Level3.cpp | 104 | ||||
-rwxr-xr-x | src/server/game/Scripting/ScriptLoader.cpp | 8 | ||||
-rw-r--r-- | src/server/scripts/Commands/CMakeLists.txt | 4 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_account.cpp | 3 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_achievement.cpp | 2 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_debug.cpp | 9 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_event.cpp | 217 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_gm.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_go.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_learn.cpp | 5 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_modify.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_npc.cpp | 4 | ||||
-rw-r--r-- | src/server/scripts/Commands/cs_tele.cpp | 317 |
17 files changed, 586 insertions, 493 deletions
diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 0aaecd233f5..2aaa3992572 100755 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -160,15 +160,6 @@ ChatCommand * ChatHandler::getCommandTable() { NULL, 0, false, NULL, "", NULL } }; - static ChatCommand eventCommandTable[] = - { - { "activelist", SEC_GAMEMASTER, true, OldHandler<&ChatHandler::HandleEventActiveListCommand>, "", NULL }, - { "start", SEC_GAMEMASTER, true, OldHandler<&ChatHandler::HandleEventStartCommand>, "", NULL }, - { "stop", SEC_GAMEMASTER, true, OldHandler<&ChatHandler::HandleEventStopCommand>, "", NULL }, - { "", SEC_GAMEMASTER, true, OldHandler<&ChatHandler::HandleEventInfoCommand>, "", NULL }, - { NULL, 0, false, NULL, "", NULL } - }; - static ChatCommand gobjectCommandTable[] = { { "activate", SEC_GAMEMASTER, false, OldHandler<&ChatHandler::HandleActivateObjectCommand>, "", NULL }, @@ -465,16 +456,6 @@ ChatCommand * ChatHandler::getCommandTable() { NULL, 0, false, NULL, "", NULL } }; - static ChatCommand teleCommandTable[] = - { - { "add", SEC_ADMINISTRATOR, false, OldHandler<&ChatHandler::HandleTeleAddCommand>, "", NULL }, - { "del", SEC_ADMINISTRATOR, true, OldHandler<&ChatHandler::HandleTeleDelCommand>, "", NULL }, - { "name", SEC_MODERATOR, true, OldHandler<&ChatHandler::HandleTeleNameCommand>, "", NULL }, - { "group", SEC_MODERATOR, false, OldHandler<&ChatHandler::HandleTeleGroupCommand>, "", NULL }, - { "", SEC_MODERATOR, false, OldHandler<&ChatHandler::HandleTeleCommand>, "", NULL }, - { NULL, 0, false, NULL, "", NULL } - }; - static ChatCommand titlesCommandTable[] = { { "add", SEC_GAMEMASTER, false, OldHandler<&ChatHandler::HandleTitlesAddCommand>, "", NULL }, @@ -533,9 +514,7 @@ ChatCommand * ChatHandler::getCommandTable() static ChatCommand commandTable[] = { - { "tele", SEC_MODERATOR, true, NULL, "", teleCommandTable }, { "character", SEC_GAMEMASTER, true, NULL, "", characterCommandTable}, - { "event", SEC_GAMEMASTER, false, NULL, "", eventCommandTable }, { "gobject", SEC_GAMEMASTER, false, NULL, "", gobjectCommandTable }, { "honor", SEC_GAMEMASTER, false, NULL, "", honorCommandTable }, { "wp", SEC_GAMEMASTER, false, NULL, "", wpCommandTable }, @@ -854,6 +833,26 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand *table, const char* text, co if (!hasStringAbbr(table[i].Name, cmd.c_str())) continue; + bool match = false; + if (strlen(table[i].Name) > strlen(cmd.c_str())) + { + for (uint32 j = 0; table[j].Name != NULL; ++j) + { + if (!hasStringAbbr(table[j].Name, cmd.c_str())) + continue; + + if (strcmp(table[j].Name,cmd.c_str()) != 0) + continue; + else + { + match = true; + break; + } + } + } + if (match) + continue; + // select subcommand from child commands list if (table[i].ChildCommands != NULL) { @@ -874,23 +873,6 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand *table, const char* text, co if (!table[i].Handler || !isAvailable(table[i])) continue; - bool match = false; - if (strlen(table[i].Name) > strlen(cmd.c_str())) - { - for (uint32 j = 0; table[j].Name != NULL; ++j) - { - if (strcmp(table[j].Name,cmd.c_str()) != 0) - continue; - else - { - match = true; - break; - } - } - } - if (match) - continue; - SetSentErrorMessage(false); // table[i].Name == "" is special case: send original command to handler if ((table[i].Handler)(this, strlen(table[i].Name) != 0 ? text : oldtext)) diff --git a/src/server/game/Chat/Chat.h b/src/server/game/Chat/Chat.h index 6a90ae9c9a4..5918e79237a 100755 --- a/src/server/game/Chat/Chat.h +++ b/src/server/game/Chat/Chat.h @@ -171,11 +171,6 @@ class ChatHandler bool HandleBindSightCommand(const char* args); bool HandleUnbindSightCommand(const char* args); - bool HandleEventActiveListCommand(const char* args); - bool HandleEventStartCommand(const char* args); - bool HandleEventStopCommand(const char* args); - bool HandleEventInfoCommand(const char* args); - bool HandleGameObjectAddCommand(const char* args); bool HandleGameObjectDeleteCommand(const char* args); bool HandleGameObjectInfoCommand(const char* args); @@ -366,12 +361,6 @@ class ChatHandler bool HandleServerSetLogFileLevelCommand(const char* args); bool HandleServerSetDiffTimeCommand(const char* args); - bool HandleTeleCommand(const char * args); - bool HandleTeleAddCommand(const char * args); - bool HandleTeleDelCommand(const char * args); - bool HandleTeleGroupCommand(const char* args); - bool HandleTeleNameCommand(const char* args); - bool HandleTitlesAddCommand(const char* args); bool HandleTitlesCurrentCommand(const char* args); bool HandleTitlesRemoveCommand(const char* args); diff --git a/src/server/game/Chat/Commands/Level1.cpp b/src/server/game/Chat/Commands/Level1.cpp index 0cd416275f3..23793abf946 100755 --- a/src/server/game/Chat/Commands/Level1.cpp +++ b/src/server/game/Chat/Commands/Level1.cpp @@ -759,171 +759,6 @@ bool ChatHandler::HandleSendMailCommand(const char* args) return true; } -// teleport player to given game_tele.entry -bool ChatHandler::HandleTeleNameCommand(const char * args) -{ - char* nameStr; - char* teleStr; - extractOptFirstArg((char*)args,&nameStr,&teleStr); - if (!teleStr) - return false; - - Player* target; - uint64 target_guid; - std::string target_name; - if (!extractPlayerTarget(nameStr,&target,&target_guid,&target_name)) - return false; - - // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r - GameTele const* tele = extractGameTeleFromLink(teleStr); - if (!tele) - { - SendSysMessage(LANG_COMMAND_TELE_NOTFOUND); - SetSentErrorMessage(true); - return false; - } - -/* MapEntry const * me = sMapStore.LookupEntry(tele->mapId); - if (!me || me->IsBattlegroundOrArena()) - { - SendSysMessage(LANG_CANNOT_TELE_TO_BG); - SetSentErrorMessage(true); - return false; - } - - Player *chr = sObjectMgr.GetPlayer(name.c_str());*/ - - if (target) - { - // check online security - if (HasLowerSecurity(target, 0)) - return false; - - std::string chrNameLink = playerLink(target_name); - - if (target->IsBeingTeleported() == true) - { - PSendSysMessage(LANG_IS_TELEPORTED, chrNameLink.c_str()); - SetSentErrorMessage(true); - return false; - } - - PSendSysMessage(LANG_TELEPORTING_TO, chrNameLink.c_str(),"", tele->name.c_str()); - if (needReportToTarget(target)) - ChatHandler(target).PSendSysMessage(LANG_TELEPORTED_TO_BY, GetNameLink().c_str()); - - // stop flight if need - if (target->isInFlight()) - { - target->GetMotionMaster()->MovementExpired(); - target->CleanupAfterTaxiFlight(); - } - // save only in non-flight case - else - target->SaveRecallPosition(); - - target->TeleportTo(tele->mapId,tele->position_x,tele->position_y,tele->position_z,tele->orientation); - } - else - { - // check offline security - if (HasLowerSecurity(NULL, target_guid)) - return false; - - std::string nameLink = playerLink(target_name); - - PSendSysMessage(LANG_TELEPORTING_TO, nameLink.c_str(), GetTrinityString(LANG_OFFLINE), tele->name.c_str()); - Player::SavePositionInDB(tele->mapId,tele->position_x,tele->position_y,tele->position_z,tele->orientation, - sMapMgr.GetZoneId(tele->mapId,tele->position_x,tele->position_y,tele->position_z),target_guid); - } - - return true; -} - -//Teleport group to given game_tele.entry -bool ChatHandler::HandleTeleGroupCommand(const char * args) -{ - if (!*args) - return false; - - Player *player = getSelectedPlayer(); - if (!player) - { - SendSysMessage(LANG_NO_CHAR_SELECTED); - SetSentErrorMessage(true); - return false; - } - - // check online security - if (HasLowerSecurity(player, 0)) - return false; - - // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r - GameTele const* tele = extractGameTeleFromLink((char*)args); - if (!tele) - { - SendSysMessage(LANG_COMMAND_TELE_NOTFOUND); - SetSentErrorMessage(true); - return false; - } - - MapEntry const * me = sMapStore.LookupEntry(tele->mapId); - if (!me || me->IsBattlegroundOrArena()) - { - SendSysMessage(LANG_CANNOT_TELE_TO_BG); - SetSentErrorMessage(true); - return false; - } - - std::string nameLink = GetNameLink(player); - - Group *grp = player->GetGroup(); - if (!grp) - { - PSendSysMessage(LANG_NOT_IN_GROUP,nameLink.c_str()); - SetSentErrorMessage(true); - return false; - } - - for (GroupReference *itr = grp->GetFirstMember(); itr != NULL; itr = itr->next()) - { - Player *pl = itr->getSource(); - - if (!pl || !pl->GetSession()) - continue; - - // check online security - if (HasLowerSecurity(pl, 0)) - return false; - - std::string plNameLink = GetNameLink(pl); - - if (pl->IsBeingTeleported()) - { - PSendSysMessage(LANG_IS_TELEPORTED, plNameLink.c_str()); - continue; - } - - PSendSysMessage(LANG_TELEPORTING_TO, plNameLink.c_str(),"", tele->name.c_str()); - if (needReportToTarget(pl)) - ChatHandler(pl).PSendSysMessage(LANG_TELEPORTED_TO_BY, nameLink.c_str()); - - // stop flight if need - if (pl->isInFlight()) - { - pl->GetMotionMaster()->MovementExpired(); - pl->CleanupAfterTaxiFlight(); - } - // save only in non-flight case - else - pl->SaveRecallPosition(); - - pl->TeleportTo(tele->mapId, tele->position_x, tele->position_y, tele->position_z, tele->orientation); - } - - return true; -} - //Summon group of player bool ChatHandler::HandleGroupSummonCommand(const char* args) { diff --git a/src/server/game/Chat/Commands/Level2.cpp b/src/server/game/Chat/Commands/Level2.cpp index ae86c290b7b..e291957cd13 100755 --- a/src/server/game/Chat/Commands/Level2.cpp +++ b/src/server/game/Chat/Commands/Level2.cpp @@ -2113,166 +2113,6 @@ bool ChatHandler::HandleLookupEventCommand(const char* args) return true; } -bool ChatHandler::HandleEventActiveListCommand(const char* /*args*/) -{ - uint32 counter = 0; - - GameEventMgr::GameEventDataMap const& events = sGameEventMgr.GetEventMap(); - GameEventMgr::ActiveEvents const& activeEvents = sGameEventMgr.GetActiveEventList(); - - char const* active = GetTrinityString(LANG_ACTIVE); - - for (GameEventMgr::ActiveEvents::const_iterator itr = activeEvents.begin(); itr != activeEvents.end(); ++itr) - { - uint32 event_id = *itr; - GameEventData const& eventData = events[event_id]; - - if (m_session) - PSendSysMessage(LANG_EVENT_ENTRY_LIST_CHAT,event_id,event_id,eventData.description.c_str(),active); - else - PSendSysMessage(LANG_EVENT_ENTRY_LIST_CONSOLE,event_id,eventData.description.c_str(),active); - - ++counter; - } - - if (counter == 0) - SendSysMessage(LANG_NOEVENTFOUND); - - return true; -} - -bool ChatHandler::HandleEventInfoCommand(const char* args) -{ - if (!*args) - return false; - - // id or [name] Shift-click form |color|Hgameevent:id|h[name]|h|r - char* cId = extractKeyFromLink((char*)args,"Hgameevent"); - if (!cId) - return false; - - uint32 event_id = atoi(cId); - - GameEventMgr::GameEventDataMap const& events = sGameEventMgr.GetEventMap(); - - if (event_id >=events.size()) - { - SendSysMessage(LANG_EVENT_NOT_EXIST); - SetSentErrorMessage(true); - return false; - } - - GameEventData const& eventData = events[event_id]; - if (!eventData.isValid()) - { - SendSysMessage(LANG_EVENT_NOT_EXIST); - SetSentErrorMessage(true); - return false; - } - - GameEventMgr::ActiveEvents const& activeEvents = sGameEventMgr.GetActiveEventList(); - bool active = activeEvents.find(event_id) != activeEvents.end(); - char const* activeStr = active ? GetTrinityString(LANG_ACTIVE) : ""; - - std::string startTimeStr = TimeToTimestampStr(eventData.start); - std::string endTimeStr = TimeToTimestampStr(eventData.end); - - uint32 delay = sGameEventMgr.NextCheck(event_id); - time_t nextTime = time(NULL)+delay; - std::string nextStr = nextTime >= eventData.start && nextTime < eventData.end ? TimeToTimestampStr(time(NULL)+delay) : "-"; - - std::string occurenceStr = secsToTimeString(eventData.occurence * MINUTE); - std::string lengthStr = secsToTimeString(eventData.length * MINUTE); - - PSendSysMessage(LANG_EVENT_INFO,event_id,eventData.description.c_str(),activeStr, - startTimeStr.c_str(),endTimeStr.c_str(),occurenceStr.c_str(),lengthStr.c_str(), - nextStr.c_str()); - return true; -} - -bool ChatHandler::HandleEventStartCommand(const char* args) -{ - if (!*args) - return false; - - // id or [name] Shift-click form |color|Hgameevent:id|h[name]|h|r - char* cId = extractKeyFromLink((char*)args,"Hgameevent"); - if (!cId) - return false; - - int32 event_id = atoi(cId); - - GameEventMgr::GameEventDataMap const& events = sGameEventMgr.GetEventMap(); - - if (event_id < 1 || uint32(event_id) >= events.size()) - { - SendSysMessage(LANG_EVENT_NOT_EXIST); - SetSentErrorMessage(true); - return false; - } - - GameEventData const& eventData = events[event_id]; - if (!eventData.isValid()) - { - SendSysMessage(LANG_EVENT_NOT_EXIST); - SetSentErrorMessage(true); - return false; - } - - GameEventMgr::ActiveEvents const& activeEvents = sGameEventMgr.GetActiveEventList(); - if (activeEvents.find(event_id) != activeEvents.end()) - { - PSendSysMessage(LANG_EVENT_ALREADY_ACTIVE,event_id); - SetSentErrorMessage(true); - return false; - } - - sGameEventMgr.StartEvent(event_id,true); - return true; -} - -bool ChatHandler::HandleEventStopCommand(const char* args) -{ - if (!*args) - return false; - - // id or [name] Shift-click form |color|Hgameevent:id|h[name]|h|r - char* cId = extractKeyFromLink((char*)args,"Hgameevent"); - if (!cId) - return false; - - int32 event_id = atoi(cId); - - GameEventMgr::GameEventDataMap const& events = sGameEventMgr.GetEventMap(); - - if (event_id < 1 || uint32(event_id) >= events.size()) - { - SendSysMessage(LANG_EVENT_NOT_EXIST); - SetSentErrorMessage(true); - return false; - } - - GameEventData const& eventData = events[event_id]; - if (!eventData.isValid()) - { - SendSysMessage(LANG_EVENT_NOT_EXIST); - SetSentErrorMessage(true); - return false; - } - - GameEventMgr::ActiveEvents const& activeEvents = sGameEventMgr.GetActiveEventList(); - - if (activeEvents.find(event_id) == activeEvents.end()) - { - PSendSysMessage(LANG_EVENT_NOT_ACTIVE,event_id); - SetSentErrorMessage(true); - return false; - } - - sGameEventMgr.StopEvent(event_id,true); - return true; -} - bool ChatHandler::HandleCombatStopCommand(const char* args) { Player* target; diff --git a/src/server/game/Chat/Commands/Level3.cpp b/src/server/game/Chat/Commands/Level3.cpp index fcb29b623fe..521d8e287cd 100755 --- a/src/server/game/Chat/Commands/Level3.cpp +++ b/src/server/game/Chat/Commands/Level3.cpp @@ -3577,110 +3577,6 @@ bool ChatHandler::HandleChangeWeather(const char *args) return true; } -bool ChatHandler::HandleTeleCommand(const char* args) -{ - if (!*args) - return false; - - Player* me = GetSession()->GetPlayer(); - - // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r - GameTele const* tele = extractGameTeleFromLink((char*)args); - - if (!tele) - { - SendSysMessage(LANG_COMMAND_TELE_NOTFOUND); - SetSentErrorMessage(true); - return false; - } - - if (me->isInCombat()) - { - SendSysMessage(LANG_YOU_IN_COMBAT); - SetSentErrorMessage(true); - return false; - } - - MapEntry const * map = sMapStore.LookupEntry(tele->mapId); - if (!map || map->IsBattlegroundOrArena()) - { - SendSysMessage(LANG_CANNOT_TELE_TO_BG); - SetSentErrorMessage(true); - return false; - } - - // stop flight if need - if (me->isInFlight()) - { - me->GetMotionMaster()->MovementExpired(); - me->CleanupAfterTaxiFlight(); - } - // save only in non-flight case - else - me->SaveRecallPosition(); - - me->TeleportTo(tele->mapId, tele->position_x, tele->position_y, tele->position_z, tele->orientation); - return true; -} - -bool ChatHandler::HandleTeleAddCommand(const char * args) -{ - if (!*args) - return false; - - Player *player=m_session->GetPlayer(); - if (!player) - return false; - - std::string name = args; - - if (sObjectMgr.GetGameTele(name)) - { - SendSysMessage(LANG_COMMAND_TP_ALREADYEXIST); - SetSentErrorMessage(true); - return false; - } - - GameTele tele; - tele.position_x = player->GetPositionX(); - tele.position_y = player->GetPositionY(); - tele.position_z = player->GetPositionZ(); - tele.orientation = player->GetOrientation(); - tele.mapId = player->GetMapId(); - tele.name = name; - - if (sObjectMgr.AddGameTele(tele)) - { - SendSysMessage(LANG_COMMAND_TP_ADDED); - } - else - { - SendSysMessage(LANG_COMMAND_TP_ADDEDERR); - SetSentErrorMessage(true); - return false; - } - - return true; -} - -bool ChatHandler::HandleTeleDelCommand(const char * args) -{ - if (!*args) - return false; - - std::string name = args; - - if (!sObjectMgr.DeleteGameTele(name)) - { - SendSysMessage(LANG_COMMAND_TELE_NOTFOUND); - SetSentErrorMessage(true); - return false; - } - - SendSysMessage(LANG_COMMAND_TP_DELETED); - return true; -} - bool ChatHandler::HandleListAurasCommand (const char * /*args*/) { Unit *unit = getSelectedUnit(); diff --git a/src/server/game/Scripting/ScriptLoader.cpp b/src/server/game/Scripting/ScriptLoader.cpp index d904e171290..5b9e458a6b3 100755 --- a/src/server/game/Scripting/ScriptLoader.cpp +++ b/src/server/game/Scripting/ScriptLoader.cpp @@ -47,12 +47,12 @@ void AddSC_SmartSCripts(); //Commands void AddSC_account_commandscript(); void AddSC_achievement_commandscript(); +void AddSC_debug_commandscript(); void AddSC_gm_commandscript(); -void AddSC_npc_commandscript(); void AddSC_go_commandscript(); void AddSC_learn_commandscript(); void AddSC_modify_commandscript(); -void AddSC_debug_commandscript(); +void AddSC_npc_commandscript(); #ifdef SCRIPTS //world @@ -623,12 +623,12 @@ void AddCommandScripts() { AddSC_account_commandscript(); AddSC_achievement_commandscript(); + AddSC_debug_commandscript(); AddSC_gm_commandscript(); - AddSC_npc_commandscript(); AddSC_go_commandscript(); AddSC_learn_commandscript(); AddSC_modify_commandscript(); - AddSC_debug_commandscript(); + AddSC_npc_commandscript(); } void AddWorldScripts() diff --git a/src/server/scripts/Commands/CMakeLists.txt b/src/server/scripts/Commands/CMakeLists.txt index b16cb182169..1eac1322b0e 100644 --- a/src/server/scripts/Commands/CMakeLists.txt +++ b/src/server/scripts/Commands/CMakeLists.txt @@ -8,9 +8,9 @@ set(scripts_STAT_SRCS Commands/cs_learn.cpp Commands/cs_modify.cpp Commands/cs_debug.cpp -# Commands/cs_tele.cpp + Commands/cs_tele.cpp # Commands/cs_character.cpp -# Commands/cs_event.cpp + Commands/cs_event.cpp # Commands/cs_gobject.cpp # Commands/cs_honor.cpp # Commands/cs_wp.cpp diff --git a/src/server/scripts/Commands/cs_account.cpp b/src/server/scripts/Commands/cs_account.cpp index 1c6bd03f8a4..b9cd6367816 100644 --- a/src/server/scripts/Commands/cs_account.cpp +++ b/src/server/scripts/Commands/cs_account.cpp @@ -22,8 +22,9 @@ Comment: All account related commands Category: commandscripts EndScriptData */ -#include "ScriptPCH.h" +#include "ScriptMgr.h" #include "AccountMgr.h" +#include "Chat.h" class account_commandscript : public CommandScript { diff --git a/src/server/scripts/Commands/cs_achievement.cpp b/src/server/scripts/Commands/cs_achievement.cpp index f3bf0381ecf..06bf2563000 100644 --- a/src/server/scripts/Commands/cs_achievement.cpp +++ b/src/server/scripts/Commands/cs_achievement.cpp @@ -22,7 +22,7 @@ Comment: All achievement related commands Category: commandscripts EndScriptData */ -#include "ScriptPCH.h" +#include "ScriptMgr.h" #include "Chat.h" class achievement_commandscript : public CommandScript diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 027f9d91aab..30f1582acff 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -22,9 +22,14 @@ Comment: All debug related commands Category: commandscripts EndScriptData */ -#include "ScriptPCH.h" -#include <fstream> +#include "ScriptMgr.h" +#include "ObjectMgr.h" +#include "GossipDef.h" +#include "GridNotifiers.h" #include "BattlegroundMgr.h" +#include "Chat.h" + +#include <fstream> class debug_commandscript : public CommandScript { diff --git a/src/server/scripts/Commands/cs_event.cpp b/src/server/scripts/Commands/cs_event.cpp new file mode 100644 index 00000000000..ed445fdccce --- /dev/null +++ b/src/server/scripts/Commands/cs_event.cpp @@ -0,0 +1,217 @@ +/* + * Copyright (C) 2008-2010 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/* ScriptData +Name: event_commandscript +%Complete: 100 +Comment: All event related commands +Category: commandscripts +EndScriptData */ + +#include "ScriptMgr.h" +#include "GameEventMgr.h" +#include "Chat.h" + +class event_commandscript : public CommandScript +{ + public: + event_commandscript() : CommandScript("event_commandscript") { } + + ChatCommand* GetCommands() const + { + static ChatCommand eventCommandTable[] = + { + { "activelist", SEC_GAMEMASTER, true, &HandleEventActiveListCommand, "", NULL }, + { "start", SEC_GAMEMASTER, true, &HandleEventStartCommand, "", NULL }, + { "stop", SEC_GAMEMASTER, true, &HandleEventStopCommand, "", NULL }, + { "", SEC_GAMEMASTER, true, &HandleEventInfoCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } + }; + static ChatCommand commandTable[] = + { + { "event", SEC_GAMEMASTER, false, NULL, "", eventCommandTable }, + { NULL, 0, false, NULL, "", NULL } + }; + return commandTable; + } + + static bool HandleEventActiveListCommand(ChatHandler* handler, const char* /*args*/) + { + uint32 counter = 0; + + GameEventMgr::GameEventDataMap const& events = sGameEventMgr.GetEventMap(); + GameEventMgr::ActiveEvents const& activeEvents = sGameEventMgr.GetActiveEventList(); + + char const* active = handler->GetTrinityString(LANG_ACTIVE); + + for (GameEventMgr::ActiveEvents::const_iterator itr = activeEvents.begin(); itr != activeEvents.end(); ++itr) + { + uint32 event_id = *itr; + GameEventData const& eventData = events[event_id]; + + if (handler->GetSession()) + handler->PSendSysMessage(LANG_EVENT_ENTRY_LIST_CHAT,event_id,event_id,eventData.description.c_str(),active); + else + handler->PSendSysMessage(LANG_EVENT_ENTRY_LIST_CONSOLE,event_id,eventData.description.c_str(),active); + + ++counter; + } + + if (counter == 0) + handler->SendSysMessage(LANG_NOEVENTFOUND); + handler->SetSentErrorMessage(true); + + return true; + } + + static bool HandleEventInfoCommand(ChatHandler* handler, const char* args) + { + if (!*args) + return false; + + // id or [name] Shift-click form |color|Hgameevent:id|h[name]|h|r + char* cId = handler->extractKeyFromLink((char*)args,"Hgameevent"); + if (!cId) + return false; + + uint32 event_id = atoi(cId); + + GameEventMgr::GameEventDataMap const& events = sGameEventMgr.GetEventMap(); + + if (event_id >=events.size()) + { + handler->SendSysMessage(LANG_EVENT_NOT_EXIST); + handler->SetSentErrorMessage(true); + return false; + } + + GameEventData const& eventData = events[event_id]; + if (!eventData.isValid()) + { + handler->SendSysMessage(LANG_EVENT_NOT_EXIST); + handler->SetSentErrorMessage(true); + return false; + } + + GameEventMgr::ActiveEvents const& activeEvents = sGameEventMgr.GetActiveEventList(); + bool active = activeEvents.find(event_id) != activeEvents.end(); + char const* activeStr = active ? handler->GetTrinityString(LANG_ACTIVE) : ""; + + std::string startTimeStr = TimeToTimestampStr(eventData.start); + std::string endTimeStr = TimeToTimestampStr(eventData.end); + + uint32 delay = sGameEventMgr.NextCheck(event_id); + time_t nextTime = time(NULL)+delay; + std::string nextStr = nextTime >= eventData.start && nextTime < eventData.end ? TimeToTimestampStr(time(NULL)+delay) : "-"; + + std::string occurenceStr = secsToTimeString(eventData.occurence * MINUTE); + std::string lengthStr = secsToTimeString(eventData.length * MINUTE); + + handler->PSendSysMessage(LANG_EVENT_INFO,event_id,eventData.description.c_str(),activeStr, + startTimeStr.c_str(),endTimeStr.c_str(),occurenceStr.c_str(),lengthStr.c_str(), + nextStr.c_str()); + return true; + } + + static bool HandleEventStartCommand(ChatHandler* handler, const char* args) + { + if (!*args) + return false; + + // id or [name] Shift-click form |color|Hgameevent:id|h[name]|h|r + char* cId = handler->extractKeyFromLink((char*)args,"Hgameevent"); + if (!cId) + return false; + + int32 event_id = atoi(cId); + + GameEventMgr::GameEventDataMap const& events = sGameEventMgr.GetEventMap(); + + if (event_id < 1 || uint32(event_id) >= events.size()) + { + handler->SendSysMessage(LANG_EVENT_NOT_EXIST); + handler->SetSentErrorMessage(true); + return false; + } + + GameEventData const& eventData = events[event_id]; + if (!eventData.isValid()) + { + handler->SendSysMessage(LANG_EVENT_NOT_EXIST); + handler->SetSentErrorMessage(true); + return false; + } + + GameEventMgr::ActiveEvents const& activeEvents = sGameEventMgr.GetActiveEventList(); + if (activeEvents.find(event_id) != activeEvents.end()) + { + handler->PSendSysMessage(LANG_EVENT_ALREADY_ACTIVE,event_id); + handler->SetSentErrorMessage(true); + return false; + } + + sGameEventMgr.StartEvent(event_id,true); + return true; + } + + static bool HandleEventStopCommand(ChatHandler* handler, const char* args) + { + if (!*args) + return false; + + // id or [name] Shift-click form |color|Hgameevent:id|h[name]|h|r + char* cId = handler->extractKeyFromLink((char*)args,"Hgameevent"); + if (!cId) + return false; + + int32 event_id = atoi(cId); + + GameEventMgr::GameEventDataMap const& events = sGameEventMgr.GetEventMap(); + + if (event_id < 1 || uint32(event_id) >= events.size()) + { + handler->SendSysMessage(LANG_EVENT_NOT_EXIST); + handler->SetSentErrorMessage(true); + return false; + } + + GameEventData const& eventData = events[event_id]; + if (!eventData.isValid()) + { + handler->SendSysMessage(LANG_EVENT_NOT_EXIST); + handler->SetSentErrorMessage(true); + return false; + } + + GameEventMgr::ActiveEvents const& activeEvents = sGameEventMgr.GetActiveEventList(); + + if (activeEvents.find(event_id) == activeEvents.end()) + { + handler->PSendSysMessage(LANG_EVENT_NOT_ACTIVE,event_id); + handler->SetSentErrorMessage(true); + return false; + } + + sGameEventMgr.StopEvent(event_id,true); + return true; + } +}; + +void AddSC_event_commandscript() +{ + new event_commandscript(); +} diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp index c9a36ca2f5b..07846c3cb43 100644 --- a/src/server/scripts/Commands/cs_gm.cpp +++ b/src/server/scripts/Commands/cs_gm.cpp @@ -22,7 +22,9 @@ Comment: All gm related commands Category: commandscripts EndScriptData */ -#include "ScriptPCH.h" +#include "ScriptMgr.h" +#include "ObjectMgr.h" +#include "Chat.h" class gm_commandscript : public CommandScript { diff --git a/src/server/scripts/Commands/cs_go.cpp b/src/server/scripts/Commands/cs_go.cpp index 27cfc5c3268..08a7e992f8c 100644 --- a/src/server/scripts/Commands/cs_go.cpp +++ b/src/server/scripts/Commands/cs_go.cpp @@ -22,9 +22,11 @@ Comment: All go related commands Category: commandscripts EndScriptData */ -#include "ScriptPCH.h" +#include "ScriptMgr.h" +#include "ObjectMgr.h" #include "MapManager.h" #include "TicketMgr.h" +#include "Chat.h" class go_commandscript : public CommandScript { diff --git a/src/server/scripts/Commands/cs_learn.cpp b/src/server/scripts/Commands/cs_learn.cpp index 4ac6c98564b..e68800e85fa 100644 --- a/src/server/scripts/Commands/cs_learn.cpp +++ b/src/server/scripts/Commands/cs_learn.cpp @@ -22,7 +22,10 @@ Comment: All learn related commands Category: commandscripts EndScriptData */ -#include "ScriptPCH.h" +#include "ScriptMgr.h" +#include "ObjectMgr.h" +#include "SpellMgr.h" +#include "Chat.h" class learn_commandscript : public CommandScript { diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index ecca547910f..41017573680 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -22,7 +22,9 @@ Comment: All modify related commands Category: commandscripts EndScriptData */ -#include "ScriptPCH.h" +#include "ScriptMgr.h" +#include "ObjectMgr.h" +#include "Chat.h" class modify_commandscript : public CommandScript { diff --git a/src/server/scripts/Commands/cs_npc.cpp b/src/server/scripts/Commands/cs_npc.cpp index a0c81ae608f..d155eb44377 100644 --- a/src/server/scripts/Commands/cs_npc.cpp +++ b/src/server/scripts/Commands/cs_npc.cpp @@ -22,7 +22,9 @@ Comment: All npc related commands Category: commandscripts EndScriptData */ -#include "ScriptPCH.h" +#include "ScriptMgr.h" +#include "ObjectMgr.h" +#include "Chat.h" #include "Transport.h" #include "CreatureGroups.h" #include "TargetedMovementGenerator.h" // for HandleNpcUnFollowCommand diff --git a/src/server/scripts/Commands/cs_tele.cpp b/src/server/scripts/Commands/cs_tele.cpp new file mode 100644 index 00000000000..aa096bb698e --- /dev/null +++ b/src/server/scripts/Commands/cs_tele.cpp @@ -0,0 +1,317 @@ +/* + * Copyright (C) 2008-2010 TrinityCore <http://www.trinitycore.org/> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +/* ScriptData +Name: tele_commandscript +%Complete: 100 +Comment: All tele related commands +Category: commandscripts +EndScriptData */ + +#include "ScriptMgr.h" +#include "ObjectMgr.h" +#include "MapManager.h" +#include "Chat.h" + +class tele_commandscript : public CommandScript +{ + public: + tele_commandscript() : CommandScript("tele_commandscript") { } + + ChatCommand* GetCommands() const + { + static ChatCommand teleCommandTable[] = + { + { "add", SEC_ADMINISTRATOR, false, &HandleTeleAddCommand, "", NULL }, + { "del", SEC_ADMINISTRATOR, true, &HandleTeleDelCommand, "", NULL }, + { "name", SEC_MODERATOR, true, &HandleTeleNameCommand, "", NULL }, + { "group", SEC_MODERATOR, false, &HandleTeleGroupCommand, "", NULL }, + { "", SEC_MODERATOR, false, &HandleTeleCommand, "", NULL }, + { NULL, 0, false, NULL, "", NULL } + }; + static ChatCommand commandTable[] = + { + { "tele", SEC_MODERATOR, false, NULL, "", teleCommandTable }, + { NULL, 0, false, NULL, "", NULL } + }; + return commandTable; + } + + static bool HandleTeleAddCommand(ChatHandler* handler, const char* args) + { + if (!*args) + return false; + + Player *player = handler->GetSession()->GetPlayer(); + if (!player) + return false; + + std::string name = args; + + if (sObjectMgr.GetGameTele(name)) + { + handler->SendSysMessage(LANG_COMMAND_TP_ALREADYEXIST); + handler->SetSentErrorMessage(true); + return false; + } + + GameTele tele; + tele.position_x = player->GetPositionX(); + tele.position_y = player->GetPositionY(); + tele.position_z = player->GetPositionZ(); + tele.orientation = player->GetOrientation(); + tele.mapId = player->GetMapId(); + tele.name = name; + + if (sObjectMgr.AddGameTele(tele)) + { + handler->SendSysMessage(LANG_COMMAND_TP_ADDED); + } + else + { + handler->SendSysMessage(LANG_COMMAND_TP_ADDEDERR); + handler->SetSentErrorMessage(true); + return false; + } + + return true; + } + + static bool HandleTeleDelCommand(ChatHandler* handler, const char* args) + { + if (!*args) + return false; + + std::string name = args; + + if (!sObjectMgr.DeleteGameTele(name)) + { + handler->SendSysMessage(LANG_COMMAND_TELE_NOTFOUND); + handler->SetSentErrorMessage(true); + return false; + } + + handler->SendSysMessage(LANG_COMMAND_TP_DELETED); + return true; + } + + // teleport player to given game_tele.entry + static bool HandleTeleNameCommand(ChatHandler* handler, const char* args) + { + char* nameStr; + char* teleStr; + handler->extractOptFirstArg((char*)args,&nameStr,&teleStr); + if (!teleStr) + return false; + + Player* target; + uint64 target_guid; + std::string target_name; + if (!handler->extractPlayerTarget(nameStr,&target,&target_guid,&target_name)) + return false; + + // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r + GameTele const* tele = handler->extractGameTeleFromLink(teleStr); + if (!tele) + { + handler->SendSysMessage(LANG_COMMAND_TELE_NOTFOUND); + handler->SetSentErrorMessage(true); + return false; + } + + if (target) + { + // check online security + if (handler->HasLowerSecurity(target, 0)) + return false; + + std::string chrNameLink = handler->playerLink(target_name); + + if (target->IsBeingTeleported() == true) + { + handler->PSendSysMessage(LANG_IS_TELEPORTED, chrNameLink.c_str()); + handler->SetSentErrorMessage(true); + return false; + } + + handler->PSendSysMessage(LANG_TELEPORTING_TO, chrNameLink.c_str(),"", tele->name.c_str()); + if (handler->needReportToTarget(target)) + (ChatHandler(target)).PSendSysMessage(LANG_TELEPORTED_TO_BY, handler->GetNameLink().c_str()); + + // stop flight if need + if (target->isInFlight()) + { + target->GetMotionMaster()->MovementExpired(); + target->CleanupAfterTaxiFlight(); + } + // save only in non-flight case + else + target->SaveRecallPosition(); + + target->TeleportTo(tele->mapId,tele->position_x,tele->position_y,tele->position_z,tele->orientation); + } + else + { + // check offline security + if (handler->HasLowerSecurity(NULL, target_guid)) + return false; + + std::string nameLink = handler->playerLink(target_name); + + handler->PSendSysMessage(LANG_TELEPORTING_TO, nameLink.c_str(), handler->GetTrinityString(LANG_OFFLINE), tele->name.c_str()); + Player::SavePositionInDB(tele->mapId,tele->position_x,tele->position_y,tele->position_z,tele->orientation, + sMapMgr.GetZoneId(tele->mapId,tele->position_x,tele->position_y,tele->position_z),target_guid); + } + + return true; + } + + //Teleport group to given game_tele.entry + static bool HandleTeleGroupCommand(ChatHandler* handler, const char* args) + { + if (!*args) + return false; + + Player *player = handler->getSelectedPlayer(); + if (!player) + { + handler->SendSysMessage(LANG_NO_CHAR_SELECTED); + handler->SetSentErrorMessage(true); + return false; + } + + // check online security + if (handler->HasLowerSecurity(player, 0)) + return false; + + // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r + GameTele const* tele = handler->extractGameTeleFromLink((char*)args); + if (!tele) + { + handler->SendSysMessage(LANG_COMMAND_TELE_NOTFOUND); + handler->SetSentErrorMessage(true); + return false; + } + + MapEntry const * map = sMapStore.LookupEntry(tele->mapId); + if (!map || map->IsBattlegroundOrArena()) + { + handler->SendSysMessage(LANG_CANNOT_TELE_TO_BG); + handler->SetSentErrorMessage(true); + return false; + } + + std::string nameLink = handler->GetNameLink(player); + + Group *grp = player->GetGroup(); + if (!grp) + { + handler->PSendSysMessage(LANG_NOT_IN_GROUP,nameLink.c_str()); + handler->SetSentErrorMessage(true); + return false; + } + + for (GroupReference *itr = grp->GetFirstMember(); itr != NULL; itr = itr->next()) + { + Player *pl = itr->getSource(); + + if (!pl || !pl->GetSession()) + continue; + + // check online security + if (handler->HasLowerSecurity(pl, 0)) + return false; + + std::string plNameLink = handler->GetNameLink(pl); + + if (pl->IsBeingTeleported()) + { + handler->PSendSysMessage(LANG_IS_TELEPORTED, plNameLink.c_str()); + continue; + } + + handler->PSendSysMessage(LANG_TELEPORTING_TO, plNameLink.c_str(),"", tele->name.c_str()); + if (handler->needReportToTarget(pl)) + (ChatHandler(pl)).PSendSysMessage(LANG_TELEPORTED_TO_BY, nameLink.c_str()); + + // stop flight if need + if (pl->isInFlight()) + { + pl->GetMotionMaster()->MovementExpired(); + pl->CleanupAfterTaxiFlight(); + } + // save only in non-flight case + else + pl->SaveRecallPosition(); + + pl->TeleportTo(tele->mapId, tele->position_x, tele->position_y, tele->position_z, tele->orientation); + } + + return true; + } + + static bool HandleTeleCommand(ChatHandler* handler, const char* args) + { + if (!*args) + return false; + + Player* me = handler->GetSession()->GetPlayer(); + + // id, or string, or [name] Shift-click form |color|Htele:id|h[name]|h|r + GameTele const* tele = handler->extractGameTeleFromLink((char*)args); + + if (!tele) + { + handler->SendSysMessage(LANG_COMMAND_TELE_NOTFOUND); + handler->SetSentErrorMessage(true); + return false; + } + + if (me->isInCombat()) + { + handler->SendSysMessage(LANG_YOU_IN_COMBAT); + handler->SetSentErrorMessage(true); + return false; + } + + MapEntry const * map = sMapStore.LookupEntry(tele->mapId); + if (!map || map->IsBattlegroundOrArena()) + { + handler->SendSysMessage(LANG_CANNOT_TELE_TO_BG); + handler->SetSentErrorMessage(true); + return false; + } + + // stop flight if need + if (me->isInFlight()) + { + me->GetMotionMaster()->MovementExpired(); + me->CleanupAfterTaxiFlight(); + } + // save only in non-flight case + else + me->SaveRecallPosition(); + + me->TeleportTo(tele->mapId, tele->position_x, tele->position_y, tele->position_z, tele->orientation); + return true; + } +}; + +void AddSC_tele_commandscript() +{ + new tele_commandscript(); +} |