diff options
Diffstat (limited to 'src/server/scripts')
| -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 |
11 files changed, 562 insertions, 11 deletions
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(); +} |
