Merge branch 'master' of github.com:TrinityCore/TrinityCore into 4.3.4

Conflicts:
	src/server/scripts/Commands/cs_misc.cpp
	src/server/scripts/Commands/cs_modify.cpp
	src/server/scripts/Commands/cs_reload.cpp
This commit is contained in:
Vincent-Michael
2013-09-10 19:53:43 +02:00
61 changed files with 3713 additions and 1844 deletions

View File

@@ -8,109 +8,11 @@
# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
file(GLOB_RECURSE sources_Commands Commands/*.cpp Commands/*.h)
set(scripts_STAT_SRCS
${scripts_STAT_SRCS}
Commands/cs_account.cpp
Commands/cs_achievement.cpp
Commands/cs_arena.cpp
Commands/cs_ban.cpp
Commands/cs_bf.cpp
Commands/cs_cast.cpp
Commands/cs_character.cpp
Commands/cs_cheat.cpp
Commands/cs_debug.cpp
Commands/cs_deserter.cpp
Commands/cs_disable.cpp
Commands/cs_event.cpp
Commands/cs_gm.cpp
Commands/cs_go.cpp
Commands/cs_gobject.cpp
Commands/cs_guild.cpp
Commands/cs_honor.cpp
Commands/cs_instance.cpp
Commands/cs_learn.cpp
Commands/cs_lfg.cpp
Commands/cs_list.cpp
Commands/cs_lookup.cpp
Commands/cs_message.cpp
Commands/cs_misc.cpp
Commands/cs_modify.cpp
Commands/cs_npc.cpp
Commands/cs_quest.cpp
Commands/cs_rbac.cpp
Commands/cs_reload.cpp
Commands/cs_reset.cpp
Commands/cs_tele.cpp
Commands/cs_ticket.cpp
Commands/cs_server.cpp
Commands/cs_titles.cpp
Commands/cs_wp.cpp
Commands/cs_mmaps.cpp
# Commands/cs_pdump.cpp
# Commands/cs_channel.cpp
# Commands/cs_pet.cpp
# Commands/cs_aura.cpp
# Commands/cs_unaura.cpp
# Commands/cs_nameannounce.cpp
# Commands/cs_gmnameannounce.cpp
# Commands/cs_announce.cpp
# Commands/cs_gmannounce.cpp
# Commands/cs_notify.cpp
# Commands/cs_gmnotify.cpp
# Commands/cs_appear.cpp
# Commands/cs_summon.cpp
# Commands/cs_groupsummon.cpp
# Commands/cs_commands.cpp
# Commands/cs_demorph.cpp
# Commands/cs_die.cpp
# Commands/cs_revive.cpp
# Commands/cs_dismount.cpp
# Commands/cs_guid.cpp
# Commands/cs_help.cpp
# Commands/cs_itemmove.cpp
# Commands/cs_cooldown.cpp
# Commands/cs_unlearn.cpp
# Commands/cs_distance.cpp
# Commands/cs_recall.cpp
# Commands/cs_save.cpp
# Commands/cs_saveall.cpp
# Commands/cs_kick.cpp
# Commands/cs_start.cpp
# Commands/cs_taxicheat.cpp
# Commands/cs_linkgrave.cpp
# Commands/cs_neargrave.cpp
# Commands/cs_explorecheat.cpp
# Commands/cs_hover.cpp
# Commands/cs_levelup.cpp
# Commands/cs_showarea.cpp
# Commands/cs_hidearea.cpp
# Commands/cs_additem.cpp
# Commands/cs_additemset.cpp
# Commands/cs_bank.cpp
# Commands/cs_wchange.cpp
# Commands/cs_maxskill.cpp
# Commands/cs_setskill.cpp
# Commands/cs_whispers.cpp
# Commands/cs_pinfo.cpp
# Commands/cs_respawn.cpp
# Commands/cs_send.cpp
# Commands/cs_mute.cpp
# Commands/cs_unmute.cpp
# Commands/cs_movegens.cpp
# Commands/cs_cometome.cpp
# Commands/cs_damage.cpp
# Commands/cs_combatstop.cpp
# Commands/cs_flusharenapoints.cpp
# Commands/cs_repairitems.cpp
# Commands/cs_waterwalk.cpp
# Commands/cs_freeze.cpp
# Commands/cs_unfreeze.cpp
# Commands/cs_listfreeze.cpp
# Commands/cs_possess.cpp
# Commands/cs_unpossess.cpp
# Commands/cs_bindsight.cpp
# Commands/cs_unbindsight.cpp
# Commands/cs_playall.cpp
${sources_Commands}
)
message(" -> Prepared: Commands")

View File

@@ -91,7 +91,7 @@ public:
{ "areatriggers", RBAC_PERM_COMMAND_DEBUG_AREATRIGGERS, false, &HandleDebugAreaTriggersCommand, "", NULL },
{ "los", RBAC_PERM_COMMAND_DEBUG_LOS, false, &HandleDebugLoSCommand, "", NULL },
{ "moveflags", RBAC_PERM_COMMAND_DEBUG_MOVEFLAGS, false, &HandleDebugMoveflagsCommand, "", NULL },
{ "phase", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleDebugPhaseCommand, "", NULL },
{ "phase", RBAC_PERM_COMMAND_DEBUG_PHASE, false, &HandleDebugPhaseCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =

View File

@@ -0,0 +1,338 @@
/*
* Copyright (C) 2008-2013 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/>.
*/
#include "Chat.h"
#include "Language.h"
#include "LFG.h"
#include "Player.h"
#include "ObjectMgr.h"
#include "GroupMgr.h"
#include "ScriptMgr.h"
class group_commandscript : public CommandScript
{
public:
group_commandscript() : CommandScript("group_commandscript") { }
ChatCommand* GetCommands() const OVERRIDE
{
static ChatCommand groupCommandTable[] =
{
{ "leader", RBAC_PERM_COMMAND_GROUP_LEADER, false, &HandleGroupLeaderCommand, "", NULL },
{ "disband", RBAC_PERM_COMMAND_GROUP_DISBAND, false, &HandleGroupDisbandCommand, "", NULL },
{ "remove", RBAC_PERM_COMMAND_GROUP_REMOVE, false, &HandleGroupRemoveCommand, "", NULL },
{ "join", RBAC_PERM_COMMAND_GROUP_JOIN, false, &HandleGroupJoinCommand, "", NULL },
{ "list", RBAC_PERM_COMMAND_GROUP_LIST, false, &HandleGroupListCommand, "", NULL },
{ "summon", RBAC_PERM_COMMAND_GROUP_SUMMON, false, &HandleGroupSummonCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "group", RBAC_PERM_COMMAND_GROUP, false, NULL, "", groupCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
// Summon group of player
static bool HandleGroupSummonCommand(ChatHandler* handler, char const* args)
{
Player* target;
if (!handler->extractPlayerTarget((char*)args, &target))
return false;
// check online security
if (handler->HasLowerSecurity(target, 0))
return false;
Group* group = target->GetGroup();
std::string nameLink = handler->GetNameLink(target);
if (!group)
{
handler->PSendSysMessage(LANG_NOT_IN_GROUP, nameLink.c_str());
handler->SetSentErrorMessage(true);
return false;
}
Player* gmPlayer = handler->GetSession()->GetPlayer();
Group* gmGroup = gmPlayer->GetGroup();
Map* gmMap = gmPlayer->GetMap();
bool toInstance = gmMap->Instanceable();
// we are in instance, and can summon only player in our group with us as lead
if (toInstance && (
!gmGroup || group->GetLeaderGUID() != gmPlayer->GetGUID() ||
gmGroup->GetLeaderGUID() != gmPlayer->GetGUID()))
// the last check is a bit excessive, but let it be, just in case
{
handler->SendSysMessage(LANG_CANNOT_SUMMON_TO_INST);
handler->SetSentErrorMessage(true);
return false;
}
for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
{
Player* player = itr->GetSource();
if (!player || player == gmPlayer || !player->GetSession())
continue;
// check online security
if (handler->HasLowerSecurity(player, 0))
return false;
std::string plNameLink = handler->GetNameLink(player);
if (player->IsBeingTeleported())
{
handler->PSendSysMessage(LANG_IS_TELEPORTED, plNameLink.c_str());
handler->SetSentErrorMessage(true);
return false;
}
if (toInstance)
{
Map* playerMap = player->GetMap();
if (playerMap->Instanceable() && playerMap->GetInstanceId() != gmMap->GetInstanceId())
{
// cannot summon from instance to instance
handler->PSendSysMessage(LANG_CANNOT_SUMMON_TO_INST, plNameLink.c_str());
handler->SetSentErrorMessage(true);
return false;
}
}
handler->PSendSysMessage(LANG_SUMMONING, plNameLink.c_str(), "");
if (handler->needReportToTarget(player))
ChatHandler(player->GetSession()).PSendSysMessage(LANG_SUMMONED_BY, handler->GetNameLink().c_str());
// stop flight if need
if (player->IsInFlight())
{
player->GetMotionMaster()->MovementExpired();
player->CleanupAfterTaxiFlight();
}
// save only in non-flight case
else
player->SaveRecallPosition();
// before GM
float x, y, z;
gmPlayer->GetClosePoint(x, y, z, player->GetObjectSize());
player->TeleportTo(gmPlayer->GetMapId(), x, y, z, player->GetOrientation());
}
return true;
}
static bool HandleGroupLeaderCommand(ChatHandler* handler, char const* args)
{
Player* player = NULL;
Group* group = NULL;
uint64 guid = 0;
char* nameStr = strtok((char*)args, " ");
if (!handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid))
return false;
if (!group)
{
handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, player->GetName().c_str());
handler->SetSentErrorMessage(true);
return false;
}
if (group->GetLeaderGUID() != guid)
{
group->ChangeLeader(guid);
group->SendUpdate();
}
return true;
}
static bool HandleGroupDisbandCommand(ChatHandler* handler, char const* args)
{
Player* player = NULL;
Group* group = NULL;
uint64 guid = 0;
char* nameStr = strtok((char*)args, " ");
if (!handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid))
return false;
if (!group)
{
handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, player->GetName().c_str());
handler->SetSentErrorMessage(true);
return false;
}
group->Disband();
return true;
}
static bool HandleGroupRemoveCommand(ChatHandler* handler, char const* args)
{
Player* player = NULL;
Group* group = NULL;
uint64 guid = 0;
char* nameStr = strtok((char*)args, " ");
if (!handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid))
return false;
if (!group)
{
handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, player->GetName().c_str());
handler->SetSentErrorMessage(true);
return false;
}
group->RemoveMember(guid);
return true;
}
static bool HandleGroupJoinCommand(ChatHandler* handler, char const* args)
{
if (!*args)
return false;
Player* playerSource = NULL;
Player* playerTarget = NULL;
Group* groupSource = NULL;
Group* groupTarget = NULL;
uint64 guidSource = 0;
uint64 guidTarget = 0;
char* nameplgrStr = strtok((char*)args, " ");
char* nameplStr = strtok(NULL, " ");
if (!handler->GetPlayerGroupAndGUIDByName(nameplgrStr, playerSource, groupSource, guidSource, true))
return false;
if (!groupSource)
{
handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, playerSource->GetName().c_str());
handler->SetSentErrorMessage(true);
return false;
}
if (!handler->GetPlayerGroupAndGUIDByName(nameplStr, playerTarget, groupTarget, guidTarget, true))
return false;
if (groupTarget || playerTarget->GetGroup() == groupSource)
{
handler->PSendSysMessage(LANG_GROUP_ALREADY_IN_GROUP, playerTarget->GetName().c_str());
handler->SetSentErrorMessage(true);
return false;
}
if (!groupSource->IsFull())
{
handler->PSendSysMessage(LANG_GROUP_FULL);
handler->SetSentErrorMessage(true);
return false;
}
groupSource->AddMember(playerTarget);
groupSource->BroadcastGroupUpdate();
handler->PSendSysMessage(LANG_GROUP_PLAYER_JOINED, playerTarget->GetName().c_str(), playerSource->GetName().c_str());
return true;
}
static bool HandleGroupListCommand(ChatHandler* handler, char const* args)
{
Player* playerTarget;
uint64 guidTarget;
std::string nameTarget;
uint32 parseGUID = MAKE_NEW_GUID(atol((char*)args), 0, HIGHGUID_PLAYER);
if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget))
{
playerTarget = sObjectMgr->GetPlayerByLowGUID(parseGUID);
guidTarget = parseGUID;
}
else if (!handler->extractPlayerTarget((char*)args, &playerTarget, &guidTarget, &nameTarget))
return false;
Group* groupTarget = NULL;
if (playerTarget)
groupTarget = playerTarget->GetGroup();
if (!groupTarget)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GROUP_MEMBER);
stmt->setUInt32(0, guidTarget);
PreparedQueryResult resultGroup = CharacterDatabase.Query(stmt);
if (resultGroup)
groupTarget = sGroupMgr->GetGroupByDbStoreId((*resultGroup)[0].GetUInt32());
}
if (!groupTarget)
{
handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, nameTarget.c_str());
handler->SetSentErrorMessage(true);
return false;
}
handler->PSendSysMessage(LANG_GROUP_TYPE, (groupTarget->isRaidGroup() ? "raid" : "party"));
Group::MemberSlotList const& members = groupTarget->GetMemberSlots();
for (Group::MemberSlotList::const_iterator itr = members.begin(); itr != members.end(); ++itr)
{
Group::MemberSlot const& slot = *itr;
std::string flags;
if (slot.flags & MEMBER_FLAG_ASSISTANT)
flags = "Assistant";
if (slot.flags & MEMBER_FLAG_MAINTANK)
{
if (!flags.empty())
flags.append(", ");
flags.append("MainTank");
}
if (slot.flags & MEMBER_FLAG_MAINASSIST)
{
if (!flags.empty())
flags.append(", ");
flags.append("MainAssist");
}
if (flags.empty())
flags = "None";
Player* p = ObjectAccessor::FindPlayer((*itr).guid);
const char* onlineState = (p && p->IsInWorld()) ? "online" : "offline";
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());
}
return true;
}
};
void AddSC_group_commandscript()
{
new group_commandscript();
}

View File

@@ -44,84 +44,56 @@ public:
ChatCommand* GetCommands() const OVERRIDE
{
static ChatCommand groupCommandTable[] =
{
{ "leader", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGroupLeaderCommand, "", NULL },
{ "disband", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGroupDisbandCommand, "", NULL },
{ "remove", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGroupRemoveCommand, "", NULL },
{ "join", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGroupJoinCommand, "", NULL },
{ "list", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGroupListCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand petCommandTable[] =
{
{ "create", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleCreatePetCommand, "", NULL },
{ "learn", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandlePetLearnCommand, "", NULL },
{ "unlearn", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandlePetUnlearnCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand sendCommandTable[] =
{
{ "items", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleSendItemsCommand, "", NULL },
{ "mail", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleSendMailCommand, "", NULL },
{ "message", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleSendMessageCommand, "", NULL },
{ "money", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleSendMoneyCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "dev", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDevCommand, "", NULL },
{ "gps", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGPSCommand, "", NULL },
{ "aura", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleAuraCommand, "", NULL },
{ "unaura", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleUnAuraCommand, "", NULL },
{ "appear", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleAppearCommand, "", NULL },
{ "summon", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleSummonCommand, "", NULL },
{ "groupsummon", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleGroupSummonCommand, "", NULL },
{ "commands", RBAC_PERM_PLAYER_COMMANDS, true, &HandleCommandsCommand, "", NULL },
{ "die", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDieCommand, "", NULL },
{ "revive", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReviveCommand, "", NULL },
{ "dismount", RBAC_PERM_PLAYER_COMMANDS, false, &HandleDismountCommand, "", NULL },
{ "guid", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleGUIDCommand, "", NULL },
{ "help", RBAC_PERM_PLAYER_COMMANDS, true, &HandleHelpCommand, "", NULL },
{ "itemmove", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleItemMoveCommand, "", NULL },
{ "cooldown", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleCooldownCommand, "", NULL },
{ "distance", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleGetDistanceCommand, "", NULL },
{ "recall", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleRecallCommand, "", NULL },
{ "save", RBAC_PERM_PLAYER_COMMANDS, false, &HandleSaveCommand, "", NULL },
{ "saveall", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleSaveAllCommand, "", NULL },
{ "kick", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleKickPlayerCommand, "", NULL },
{ "unstuck", RBAC_PERM_PLAYER_COMMANDS, true, &HandleUnstuckCommand, "", NULL },
{ "linkgrave", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleLinkGraveCommand, "", NULL },
{ "neargrave", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNearGraveCommand, "", NULL },
{ "showarea", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleShowAreaCommand, "", NULL },
{ "hidearea", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleHideAreaCommand, "", NULL },
{ "additem", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleAddItemCommand, "", NULL },
{ "additemset", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleAddItemSetCommand, "", NULL },
{ "bank", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleBankCommand, "", NULL },
{ "wchange", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleChangeWeather, "", NULL },
{ "maxskill", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMaxSkillCommand, "", NULL },
{ "setskill", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleSetSkillCommand, "", NULL },
{ "pinfo", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandlePInfoCommand, "", NULL },
{ "respawn", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleRespawnCommand, "", NULL },
{ "send", RBAC_PERM_MODERATOR_COMMANDS, true, NULL, "", sendCommandTable },
{ "pet", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", petCommandTable },
{ "mute", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleMuteCommand, "", NULL },
{ "unmute", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleUnmuteCommand, "", NULL },
{ "movegens", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMovegensCommand, "", NULL },
{ "cometome", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleComeToMeCommand, "", NULL },
{ "damage", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleDamageCommand, "", NULL },
{ "combatstop", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleCombatStopCommand, "", NULL },
{ "repairitems", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleRepairitemsCommand, "", NULL },
{ "freeze", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleFreezeCommand, "", NULL },
{ "unfreeze", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleUnFreezeCommand, "", NULL },
{ "listfreeze", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleListFreezeCommand, "", NULL },
{ "group", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, NULL, "", groupCommandTable },
{ "possess", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, HandlePossessCommand, "", NULL },
{ "unpossess", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, HandleUnPossessCommand, "", NULL },
{ "bindsight", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, HandleBindSightCommand, "", NULL },
{ "unbindsight", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, HandleUnbindSightCommand, "", NULL },
{ "playall", RBAC_PERM_GAMEMASTER_COMMANDS, false, HandlePlayAllCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
{ "additem", RBAC_PERM_COMMAND_ADDITEM, false, &HandleAddItemCommand, "", NULL },
{ "additemset", RBAC_PERM_COMMAND_ADDITEMSET, false, &HandleAddItemSetCommand, "", NULL },
{ "appear", RBAC_PERM_COMMAND_APPEAR, false, &HandleAppearCommand, "", NULL },
{ "aura", RBAC_PERM_COMMAND_AURA, false, &HandleAuraCommand, "", NULL },
{ "bank", RBAC_PERM_COMMAND_BANK, false, &HandleBankCommand, "", NULL },
{ "bindsight", RBAC_PERM_COMMAND_BINDSIGHT, false, &HandleBindSightCommand, "", NULL },
{ "combatstop", RBAC_PERM_COMMAND_COMBATSTOP, true, &HandleCombatStopCommand, "", NULL },
{ "cometome", RBAC_PERM_COMMAND_COMETOME, false, &HandleComeToMeCommand, "", NULL },
{ "commands", RBAC_PERM_COMMAND_COMMANDS, true, &HandleCommandsCommand, "", NULL },
{ "cooldown", RBAC_PERM_COMMAND_COOLDOWN, false, &HandleCooldownCommand, "", NULL },
{ "damage", RBAC_PERM_COMMAND_DAMAGE, false, &HandleDamageCommand, "", NULL },
{ "dev", RBAC_PERM_COMMAND_DEV, false, &HandleDevCommand, "", NULL },
{ "die", RBAC_PERM_COMMAND_DIE, false, &HandleDieCommand, "", NULL },
{ "dismount", RBAC_PERM_COMMAND_DISMOUNT, false, &HandleDismountCommand, "", NULL },
{ "distance", RBAC_PERM_COMMAND_DISTANCE, false, &HandleGetDistanceCommand, "", NULL },
{ "freeze", RBAC_PERM_COMMAND_FREEZE, false, &HandleFreezeCommand, "", NULL },
{ "gps", RBAC_PERM_COMMAND_GPS, false, &HandleGPSCommand, "", NULL },
{ "guid", RBAC_PERM_COMMAND_GUID, false, &HandleGUIDCommand, "", NULL },
{ "help", RBAC_PERM_COMMAND_HELP, true, &HandleHelpCommand, "", NULL },
{ "hidearea", RBAC_PERM_COMMAND_HIDEAREA, false, &HandleHideAreaCommand, "", NULL },
{ "itemmove", RBAC_PERM_COMMAND_ITEMMOVE, false, &HandleItemMoveCommand, "", NULL },
{ "kick", RBAC_PERM_COMMAND_KICK, true, &HandleKickPlayerCommand, "", NULL },
{ "linkgrave", RBAC_PERM_COMMAND_LINKGRAVE, false, &HandleLinkGraveCommand, "", NULL },
{ "listfreeze", RBAC_PERM_COMMAND_LISTFREEZE, false, &HandleListFreezeCommand, "", NULL },
{ "maxskill", RBAC_PERM_COMMAND_MAXSKILL, false, &HandleMaxSkillCommand, "", NULL },
{ "movegens", RBAC_PERM_COMMAND_MOVEGENS, false, &HandleMovegensCommand, "", NULL },
{ "mute", RBAC_PERM_COMMAND_MUTE, true, &HandleMuteCommand, "", NULL },
{ "neargrave", RBAC_PERM_COMMAND_NEARGRAVE, false, &HandleNearGraveCommand, "", NULL },
{ "pinfo", RBAC_PERM_COMMAND_PINFO, true, &HandlePInfoCommand, "", NULL },
{ "playall", RBAC_PERM_COMMAND_PLAYALL, false, &HandlePlayAllCommand, "", NULL },
{ "possess", RBAC_PERM_COMMAND_POSSESS, false, &HandlePossessCommand, "", NULL },
{ "recall", RBAC_PERM_COMMAND_RECALL, false, &HandleRecallCommand, "", NULL },
{ "repairitems", RBAC_PERM_COMMAND_REPAIRITEMS, true, &HandleRepairitemsCommand, "", NULL },
{ "respawn", RBAC_PERM_COMMAND_RESPAWN, false, &HandleRespawnCommand, "", NULL },
{ "revive", RBAC_PERM_COMMAND_REVIVE, true, &HandleReviveCommand, "", NULL },
{ "saveall", RBAC_PERM_COMMAND_SAVEALL, true, &HandleSaveAllCommand, "", NULL },
{ "save", RBAC_PERM_COMMAND_SAVE, false, &HandleSaveCommand, "", NULL },
{ "setskill", RBAC_PERM_COMMAND_SETSKILL, false, &HandleSetSkillCommand, "", NULL },
{ "showarea", RBAC_PERM_COMMAND_SHOWAREA, false, &HandleShowAreaCommand, "", NULL },
{ "summon", RBAC_PERM_COMMAND_SUMMON, false, &HandleSummonCommand, "", NULL },
{ "unaura", RBAC_PERM_COMMAND_UNAURA, false, &HandleUnAuraCommand, "", NULL },
{ "unbindsight", RBAC_PERM_COMMAND_UNBINDSIGHT, false, HandleUnbindSightCommand, "", NULL },
{ "unfreeze", RBAC_PERM_COMMAND_UNFREEZE, false, &HandleUnFreezeCommand, "", NULL },
{ "unmute", RBAC_PERM_COMMAND_UNMUTE, true, &HandleUnmuteCommand, "", NULL },
{ "unpossess", RBAC_PERM_COMMAND_UNPOSSESS, false, &HandleUnPossessCommand, "", NULL },
{ "unstuck", RBAC_PERM_COMMAND_UNSTUCK, true, &HandleUnstuckCommand, "", NULL },
{ "wchange", RBAC_PERM_COMMAND_WCHANGE, false, &HandleChangeWeather, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
@@ -545,97 +517,6 @@ public:
return true;
}
// Summon group of player
static bool HandleGroupSummonCommand(ChatHandler* handler, char const* args)
{
Player* target;
if (!handler->extractPlayerTarget((char*)args, &target))
return false;
// check online security
if (handler->HasLowerSecurity(target, 0))
return false;
Group* group = target->GetGroup();
std::string nameLink = handler->GetNameLink(target);
if (!group)
{
handler->PSendSysMessage(LANG_NOT_IN_GROUP, nameLink.c_str());
handler->SetSentErrorMessage(true);
return false;
}
Map* gmMap = handler->GetSession()->GetPlayer()->GetMap();
bool toInstance = gmMap->Instanceable();
// we are in instance, and can summon only player in our group with us as lead
if (toInstance && (
!handler->GetSession()->GetPlayer()->GetGroup() || (group->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID()) ||
(handler->GetSession()->GetPlayer()->GetGroup()->GetLeaderGUID() != handler->GetSession()->GetPlayer()->GetGUID())))
// the last check is a bit excessive, but let it be, just in case
{
handler->SendSysMessage(LANG_CANNOT_SUMMON_TO_INST);
handler->SetSentErrorMessage(true);
return false;
}
for (GroupReference* itr = group->GetFirstMember(); itr != NULL; itr = itr->next())
{
Player* player = itr->GetSource();
if (!player || player == handler->GetSession()->GetPlayer() || !player->GetSession())
continue;
// check online security
if (handler->HasLowerSecurity(player, 0))
return false;
std::string plNameLink = handler->GetNameLink(player);
if (player->IsBeingTeleported() == true)
{
handler->PSendSysMessage(LANG_IS_TELEPORTED, plNameLink.c_str());
handler->SetSentErrorMessage(true);
return false;
}
if (toInstance)
{
Map* playerMap = player->GetMap();
if (playerMap->Instanceable() && playerMap->GetInstanceId() != gmMap->GetInstanceId())
{
// cannot summon from instance to instance
handler->PSendSysMessage(LANG_CANNOT_SUMMON_TO_INST, plNameLink.c_str());
handler->SetSentErrorMessage(true);
return false;
}
}
handler->PSendSysMessage(LANG_SUMMONING, plNameLink.c_str(), "");
if (handler->needReportToTarget(player))
ChatHandler(player->GetSession()).PSendSysMessage(LANG_SUMMONED_BY, handler->GetNameLink().c_str());
// stop flight if need
if (player->IsInFlight())
{
player->GetMotionMaster()->MovementExpired();
player->CleanupAfterTaxiFlight();
}
// save only in non-flight case
else
player->SaveRecallPosition();
// before GM
float x, y, z;
handler->GetSession()->GetPlayer()->GetClosePoint(x, y, z, player->GetObjectSize());
player->TeleportTo(handler->GetSession()->GetPlayer()->GetMapId(), x, y, z, player->GetOrientation());
}
return true;
}
static bool HandleCommandsCommand(ChatHandler* handler, char const* /*args*/)
{
@@ -2351,380 +2232,6 @@ public:
return true;
}
// Send mail by command
static bool HandleSendMailCommand(ChatHandler* handler, char const* args)
{
// format: name "subject text" "mail text"
Player* target;
uint64 targetGuid;
std::string targetName;
if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
return false;
char* tail1 = strtok(NULL, "");
if (!tail1)
return false;
char const* msgSubject = handler->extractQuotedArg(tail1);
if (!msgSubject)
return false;
char* tail2 = strtok(NULL, "");
if (!tail2)
return false;
char const* msgText = handler->extractQuotedArg(tail2);
if (!msgText)
return false;
// msgSubject, msgText isn't NUL after prev. check
std::string subject = msgSubject;
std::string text = msgText;
// from console show not existed sender
MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
/// @todo Fix poor design
SQLTransaction trans = CharacterDatabase.BeginTransaction();
MailDraft(subject, text)
.SendMailTo(trans, MailReceiver(target, GUID_LOPART(targetGuid)), sender);
CharacterDatabase.CommitTransaction(trans);
std::string nameLink = handler->playerLink(targetName);
handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
return true;
}
// Send items by mail
static bool HandleSendItemsCommand(ChatHandler* handler, char const* args)
{
// format: name "subject text" "mail text" item1[:count1] item2[:count2] ... item12[:count12]
Player* receiver;
uint64 receiverGuid;
std::string receiverName;
if (!handler->extractPlayerTarget((char*)args, &receiver, &receiverGuid, &receiverName))
return false;
char* tail1 = strtok(NULL, "");
if (!tail1)
return false;
char const* msgSubject = handler->extractQuotedArg(tail1);
if (!msgSubject)
return false;
char* tail2 = strtok(NULL, "");
if (!tail2)
return false;
char const* msgText = handler->extractQuotedArg(tail2);
if (!msgText)
return false;
// msgSubject, msgText isn't NUL after prev. check
std::string subject = msgSubject;
std::string text = msgText;
// extract items
typedef std::pair<uint32, uint32> ItemPair;
typedef std::list< ItemPair > ItemPairs;
ItemPairs items;
// get all tail string
char* tail = strtok(NULL, "");
// get from tail next item str
while (char* itemStr = strtok(tail, " "))
{
// and get new tail
tail = strtok(NULL, "");
// parse item str
char const* itemIdStr = strtok(itemStr, ":");
char const* itemCountStr = strtok(NULL, " ");
uint32 itemId = atoi(itemIdStr);
if (!itemId)
return false;
ItemTemplate const* item_proto = sObjectMgr->GetItemTemplate(itemId);
if (!item_proto)
{
handler->PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, itemId);
handler->SetSentErrorMessage(true);
return false;
}
uint32 itemCount = itemCountStr ? atoi(itemCountStr) : 1;
if (itemCount < 1 || (item_proto->MaxCount > 0 && itemCount > uint32(item_proto->MaxCount)))
{
handler->PSendSysMessage(LANG_COMMAND_INVALID_ITEM_COUNT, itemCount, itemId);
handler->SetSentErrorMessage(true);
return false;
}
while (itemCount > item_proto->GetMaxStackSize())
{
items.push_back(ItemPair(itemId, item_proto->GetMaxStackSize()));
itemCount -= item_proto->GetMaxStackSize();
}
items.push_back(ItemPair(itemId, itemCount));
if (items.size() > MAX_MAIL_ITEMS)
{
handler->PSendSysMessage(LANG_COMMAND_MAIL_ITEMS_LIMIT, MAX_MAIL_ITEMS);
handler->SetSentErrorMessage(true);
return false;
}
}
// from console show not existed sender
MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
// fill mail
MailDraft draft(subject, text);
SQLTransaction trans = CharacterDatabase.BeginTransaction();
for (ItemPairs::const_iterator itr = items.begin(); itr != items.end(); ++itr)
{
if (Item* item = Item::CreateItem(itr->first, itr->second, handler->GetSession() ? handler->GetSession()->GetPlayer() : 0))
{
item->SaveToDB(trans); // save for prevent lost at next mail load, if send fail then item will deleted
draft.AddItem(item);
}
}
draft.SendMailTo(trans, MailReceiver(receiver, GUID_LOPART(receiverGuid)), sender);
CharacterDatabase.CommitTransaction(trans);
std::string nameLink = handler->playerLink(receiverName);
handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
return true;
}
/// Send money by mail
static bool HandleSendMoneyCommand(ChatHandler* handler, char const* args)
{
/// format: name "subject text" "mail text" money
Player* receiver;
uint64 receiverGuid;
std::string receiverName;
if (!handler->extractPlayerTarget((char*)args, &receiver, &receiverGuid, &receiverName))
return false;
char* tail1 = strtok(NULL, "");
if (!tail1)
return false;
char* msgSubject = handler->extractQuotedArg(tail1);
if (!msgSubject)
return false;
char* tail2 = strtok(NULL, "");
if (!tail2)
return false;
char* msgText = handler->extractQuotedArg(tail2);
if (!msgText)
return false;
char* moneyStr = strtok(NULL, "");
int32 money = moneyStr ? atoi(moneyStr) : 0;
if (money <= 0)
return false;
// msgSubject, msgText isn't NUL after prev. check
std::string subject = msgSubject;
std::string text = msgText;
// from console show not existed sender
MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
SQLTransaction trans = CharacterDatabase.BeginTransaction();
MailDraft(subject, text)
.AddMoney(money)
.SendMailTo(trans, MailReceiver(receiver, GUID_LOPART(receiverGuid)), sender);
CharacterDatabase.CommitTransaction(trans);
std::string nameLink = handler->playerLink(receiverName);
handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
return true;
}
/// Send a message to a player in game
static bool HandleSendMessageCommand(ChatHandler* handler, char const* args)
{
/// - Find the player
Player* player;
if (!handler->extractPlayerTarget((char*)args, &player))
return false;
char* msgStr = strtok(NULL, "");
if (!msgStr)
return false;
///- Check that he is not logging out.
if (player->GetSession()->isLogingOut())
{
handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
handler->SetSentErrorMessage(true);
return false;
}
/// - Send the message
// Use SendAreaTriggerMessage for fastest delivery.
player->GetSession()->SendAreaTriggerMessage("%s", msgStr);
player->GetSession()->SendAreaTriggerMessage("|cffff0000[Message from administrator]:|r");
// Confirmation message
std::string nameLink = handler->GetNameLink(player);
handler->PSendSysMessage(LANG_SENDMESSAGE, nameLink.c_str(), msgStr);
return true;
}
static bool HandleCreatePetCommand(ChatHandler* handler, char const* /*args*/)
{
Player* player = handler->GetSession()->GetPlayer();
Creature* creatureTarget = handler->getSelectedCreature();
if (!creatureTarget || creatureTarget->IsPet() || creatureTarget->GetTypeId() == TYPEID_PLAYER)
{
handler->PSendSysMessage(LANG_SELECT_CREATURE);
handler->SetSentErrorMessage(true);
return false;
}
CreatureTemplate const* creatrueTemplate = sObjectMgr->GetCreatureTemplate(creatureTarget->GetEntry());
// Creatures with family 0 crashes the server
if (!creatrueTemplate->family)
{
handler->PSendSysMessage("This creature cannot be tamed. (family id: 0).");
handler->SetSentErrorMessage(true);
return false;
}
if (player->GetPetGUID())
{
handler->PSendSysMessage("You already have a pet");
handler->SetSentErrorMessage(true);
return false;
}
// Everything looks OK, create new pet
Pet* pet = new Pet(player, HUNTER_PET);
if (!pet->CreateBaseAtCreature(creatureTarget))
{
delete pet;
handler->PSendSysMessage("Error 1");
return false;
}
creatureTarget->setDeathState(JUST_DIED);
creatureTarget->RemoveCorpse();
creatureTarget->SetHealth(0); // just for nice GM-mode view
pet->SetUInt64Value(UNIT_FIELD_CREATEDBY, player->GetGUID());
pet->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, player->getFaction());
if (!pet->InitStatsForLevel(creatureTarget->getLevel()))
{
TC_LOG_ERROR(LOG_FILTER_GENERAL, "InitStatsForLevel() in EffectTameCreature failed! Pet deleted.");
handler->PSendSysMessage("Error 2");
delete pet;
return false;
}
// prepare visual effect for levelup
pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel()-1);
pet->GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true);
// this enables pet details window (Shift+P)
pet->InitPetCreateSpells();
pet->SetFullHealth();
pet->GetMap()->AddToMap(pet->ToCreature());
// visual effect for levelup
pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel());
player->SetMinion(pet, true);
pet->SavePetToDB(PET_SAVE_AS_CURRENT);
player->PetSpellInitialize();
return true;
}
static bool HandlePetLearnCommand(ChatHandler* handler, char const* args)
{
if (!*args)
return false;
Player* player = handler->GetSession()->GetPlayer();
Pet* pet = player->GetPet();
if (!pet)
{
handler->PSendSysMessage("You have no pet");
handler->SetSentErrorMessage(true);
return false;
}
uint32 spellId = handler->extractSpellIdFromLink((char*)args);
if (!spellId || !sSpellMgr->GetSpellInfo(spellId))
return false;
// Check if pet already has it
if (pet->HasSpell(spellId))
{
handler->PSendSysMessage("Pet already has spell: %u", spellId);
handler->SetSentErrorMessage(true);
return false;
}
// Check if spell is valid
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo))
{
handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId);
handler->SetSentErrorMessage(true);
return false;
}
pet->learnSpell(spellId);
handler->PSendSysMessage("Pet has learned spell %u", spellId);
return true;
}
static bool HandlePetUnlearnCommand(ChatHandler* handler, char const* args)
{
if (!*args)
return false;
Player* player = handler->GetSession()->GetPlayer();
Pet* pet = player->GetPet();
if (!pet)
{
handler->PSendSysMessage("You have no pet");
handler->SetSentErrorMessage(true);
return false;
}
uint32 spellId = handler->extractSpellIdFromLink((char*)args);
if (pet->HasSpell(spellId))
pet->removeSpell(spellId, false);
else
handler->PSendSysMessage("Pet doesn't have that spell");
return true;
}
static bool HandleFreezeCommand(ChatHandler* handler, char const* args)
{
std::string name;
@@ -2887,177 +2394,6 @@ public:
return true;
}
static bool HandleGroupLeaderCommand(ChatHandler* handler, char const* args)
{
Player* player = NULL;
Group* group = NULL;
uint64 guid = 0;
char* nameStr = strtok((char*)args, " ");
if (handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid))
if (group && group->GetLeaderGUID() != guid)
{
group->ChangeLeader(guid);
group->SendUpdate();
}
return true;
}
static bool HandleGroupDisbandCommand(ChatHandler* handler, char const* args)
{
Player* player = NULL;
Group* group = NULL;
uint64 guid = 0;
char* nameStr = strtok((char*)args, " ");
if (handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid))
if (group)
group->Disband();
return true;
}
static bool HandleGroupRemoveCommand(ChatHandler* handler, char const* args)
{
Player* player = NULL;
Group* group = NULL;
uint64 guid = 0;
char* nameStr = strtok((char*)args, " ");
if (handler->GetPlayerGroupAndGUIDByName(nameStr, player, group, guid, true))
if (group)
group->RemoveMember(guid);
return true;
}
static bool HandleGroupJoinCommand(ChatHandler* handler, char const* args)
{
if (!*args)
return false;
Player* playerSource = NULL;
Player* playerTarget = NULL;
Group* groupSource = NULL;
Group* groupTarget = NULL;
uint64 guidSource = 0;
uint64 guidTarget = 0;
char* nameplgrStr = strtok((char*)args, " ");
char* nameplStr = strtok(NULL, " ");
if (handler->GetPlayerGroupAndGUIDByName(nameplgrStr, playerSource, groupSource, guidSource, true))
{
if (groupSource)
{
if (handler->GetPlayerGroupAndGUIDByName(nameplStr, playerTarget, groupTarget, guidTarget, true))
{
if (!groupTarget && playerTarget->GetGroup() != groupSource)
{
if (!groupSource->IsFull())
{
groupSource->AddMember(playerTarget);
groupSource->BroadcastGroupUpdate();
handler->PSendSysMessage(LANG_GROUP_PLAYER_JOINED, playerTarget->GetName().c_str(), playerSource->GetName().c_str());
return true;
}
else
{
// group is full
handler->PSendSysMessage(LANG_GROUP_FULL);
return true;
}
}
else
{
// group is full or target player already in a group
handler->PSendSysMessage(LANG_GROUP_ALREADY_IN_GROUP, playerTarget->GetName().c_str());
return true;
}
}
}
else
{
// specified source player is not in a group
handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, playerSource->GetName().c_str());
return true;
}
}
return true;
}
static bool HandleGroupListCommand(ChatHandler* handler, char const* args)
{
Player* playerTarget;
uint64 guidTarget;
std::string nameTarget;
uint32 parseGUID = MAKE_NEW_GUID(atol((char*)args), 0, HIGHGUID_PLAYER);
if (sObjectMgr->GetPlayerNameByGUID(parseGUID, nameTarget))
{
playerTarget = sObjectMgr->GetPlayerByLowGUID(parseGUID);
guidTarget = parseGUID;
}
else if (!handler->extractPlayerTarget((char*)args, &playerTarget, &guidTarget, &nameTarget))
return false;
Group* groupTarget = NULL;
if (playerTarget)
groupTarget = playerTarget->GetGroup();
if (!groupTarget)
{
PreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_GROUP_MEMBER);
stmt->setUInt32(0, guidTarget);
PreparedQueryResult resultGroup = CharacterDatabase.Query(stmt);
if (resultGroup)
groupTarget = sGroupMgr->GetGroupByDbStoreId((*resultGroup)[0].GetUInt32());
}
if (groupTarget)
{
handler->PSendSysMessage(LANG_GROUP_TYPE, (groupTarget->isRaidGroup() ? "raid" : "party"));
Group::MemberSlotList const& members = groupTarget->GetMemberSlots();
for (Group::MemberSlotList::const_iterator itr = members.begin(); itr != members.end(); ++itr)
{
Group::MemberSlot const& slot = *itr;
std::string flags;
if (slot.flags & MEMBER_FLAG_ASSISTANT)
flags = "Assistant";
if (slot.flags & MEMBER_FLAG_MAINTANK)
{
if (!flags.empty())
flags.append(", ");
flags.append("MainTank");
}
if (slot.flags & MEMBER_FLAG_MAINASSIST)
{
if (!flags.empty())
flags.append(", ");
flags.append("MainAssist");
}
if (flags.empty())
flags = "None";
Player* p = ObjectAccessor::FindPlayer((*itr).guid);
const char* onlineState = (p && p->IsInWorld()) ? "online" : "offline";
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());
}
}
else
handler->PSendSysMessage(LANG_GROUP_NOT_IN_GROUP, nameTarget.c_str());
return true;
}
static bool HandlePlayAllCommand(ChatHandler* handler, char const* args)
{
if (!*args)

View File

@@ -45,18 +45,18 @@ public:
{
static ChatCommand mmapCommandTable[] =
{
{ "path", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMmapPathCommand, "", NULL },
{ "loc", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMmapLocCommand, "", NULL },
{ "loadedtiles", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMmapLoadedTilesCommand, "", NULL },
{ "stats", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMmapStatsCommand, "", NULL },
{ "testarea", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleMmapTestArea, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
{ "loadedtiles", RBAC_PERM_COMMAND_MMAP_LOADEDTILES, false, &HandleMmapLoadedTilesCommand, "", NULL },
{ "loc", RBAC_PERM_COMMAND_MMAP_LOC, false, &HandleMmapLocCommand, "", NULL },
{ "path", RBAC_PERM_COMMAND_MMAP_PATH, false, &HandleMmapPathCommand, "", NULL },
{ "stats", RBAC_PERM_COMMAND_MMAP_STATS, false, &HandleMmapStatsCommand, "", NULL },
{ "testarea", RBAC_PERM_COMMAND_MMAP_TESTAREA, false, &HandleMmapTestArea, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "mmap", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", mmapCommandTable },
{ NULL, 0, false, NULL, "", NULL }
{ "mmap", RBAC_PERM_COMMAND_MMAP, true, NULL, "", mmapCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}

View File

@@ -41,44 +41,44 @@ public:
{
static ChatCommand modifyspeedCommandTable[] =
{
{ "fly", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyFlyCommand, "", NULL },
{ "all", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyASpeedCommand, "", NULL },
{ "walk", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifySpeedCommand, "", NULL },
{ "backwalk", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyBWalkCommand, "", NULL },
{ "swim", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifySwimCommand, "", NULL },
{ "", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyASpeedCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
{ "all", RBAC_PERM_COMMAND_MODIFY_SPEED_ALL, false, &HandleModifyASpeedCommand, "", NULL },
{ "backwalk", RBAC_PERM_COMMAND_MODIFY_SPEED_BACKWALK, false, &HandleModifyBWalkCommand, "", NULL },
{ "fly", RBAC_PERM_COMMAND_MODIFY_SPEED_FLY, false, &HandleModifyFlyCommand, "", NULL },
{ "walk", RBAC_PERM_COMMAND_MODIFY_SPEED_WALK, false, &HandleModifySpeedCommand, "", NULL },
{ "swim", RBAC_PERM_COMMAND_MODIFY_SPEED_SWIM, false, &HandleModifySwimCommand, "", NULL },
{ "", RBAC_PERM_COMMAND_MODIFY_SPEED, false, &HandleModifyASpeedCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand modifyCommandTable[] =
{
{ "hp", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyHPCommand, "", NULL },
{ "mana", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyManaCommand, "", NULL },
{ "rage", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyRageCommand, "", NULL },
{ "runicpower", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyRunicPowerCommand, "", NULL },
{ "energy", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyEnergyCommand, "", NULL },
{ "money", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyMoneyCommand, "", NULL },
{ "scale", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyScaleCommand, "", NULL },
{ "bit", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyBitCommand, "", NULL },
{ "faction", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyFactionCommand, "", NULL },
{ "spell", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifySpellCommand, "", NULL },
{ "talentpoints", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyTalentCommand, "", NULL },
{ "mount", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyMountCommand, "", NULL },
{ "honor", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyHonorCommand, "", NULL },
{ "reputation", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleModifyRepCommand, "", NULL },
{ "drunk", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleModifyDrunkCommand, "", NULL },
{ "standstate", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleModifyStandStateCommand, "", NULL },
{ "phase", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleModifyPhaseCommand, "", NULL },
{ "gender", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleModifyGenderCommand, "", NULL },
{ "currency", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleModifyCurrencyCommand, "", NULL },
{ "speed", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", modifyspeedCommandTable },
{ NULL, 0, false, NULL, "", NULL }
{ "bit", RBAC_PERM_COMMAND_MODIFY_BIT, false, &HandleModifyBitCommand, "", NULL },
{ "currency", RBAC_PERM_COMMAND_MODIFY_CURRENCY, false, &HandleModifyCurrencyCommand, "", NULL },
{ "drunk", RBAC_PERM_COMMAND_MODIFY_DRUNK, false, &HandleModifyDrunkCommand, "", NULL },
{ "energy", RBAC_PERM_COMMAND_MODIFY_ENERGY, false, &HandleModifyEnergyCommand, "", NULL },
{ "faction", RBAC_PERM_COMMAND_MODIFY_FACTION, false, &HandleModifyFactionCommand, "", NULL },
{ "gender", RBAC_PERM_COMMAND_MODIFY_GENDER, false, &HandleModifyGenderCommand, "", NULL },
{ "honor", RBAC_PERM_COMMAND_MODIFY_HONOR, false, &HandleModifyHonorCommand, "", NULL },
{ "hp", RBAC_PERM_COMMAND_MODIFY_HP, false, &HandleModifyHPCommand, "", NULL },
{ "mana", RBAC_PERM_COMMAND_MODIFY_MANA, false, &HandleModifyManaCommand, "", NULL },
{ "money", RBAC_PERM_COMMAND_MODIFY_MONEY, false, &HandleModifyMoneyCommand, "", NULL },
{ "mount", RBAC_PERM_COMMAND_MODIFY_MOUNT, false, &HandleModifyMountCommand, "", NULL },
{ "phase", RBAC_PERM_COMMAND_MODIFY_PHASE, false, &HandleModifyPhaseCommand, "", NULL },
{ "rage", RBAC_PERM_COMMAND_MODIFY_RAGE, false, &HandleModifyRageCommand, "", NULL },
{ "reputation", RBAC_PERM_COMMAND_MODIFY_REPUTATION, false, &HandleModifyRepCommand, "", NULL },
{ "runicpower", RBAC_PERM_COMMAND_MODIFY_RUNICPOWER, false, &HandleModifyRunicPowerCommand, "", NULL },
{ "scale", RBAC_PERM_COMMAND_MODIFY_SCALE, false, &HandleModifyScaleCommand, "", NULL },
{ "speed", RBAC_PERM_COMMAND_MODIFY_SPEED, false, NULL, "", modifyspeedCommandTable },
{ "spell", RBAC_PERM_COMMAND_MODIFY_SPELL, false, &HandleModifySpellCommand, "", NULL },
{ "standstate", RBAC_PERM_COMMAND_MODIFY_STANDSTATE, false, &HandleModifyStandStateCommand, "", NULL },
{ "talentpoints", RBAC_PERM_COMMAND_MODIFY_TALENTPOINTS, false, &HandleModifyTalentCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "morph", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleModifyMorphCommand, "", NULL },
{ "demorph", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleDeMorphCommand, "", NULL },
{ "modify", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", modifyCommandTable },
{ NULL, 0, false, NULL, "", NULL }
{ "morph", RBAC_PERM_COMMAND_MORPH, false, &HandleModifyMorphCommand, "", NULL },
{ "demorph", RBAC_PERM_COMMAND_DEMORPH, false, &HandleDeMorphCommand, "", NULL },
{ "modify", RBAC_PERM_COMMAND_MODIFY, false, NULL, "", modifyCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}

View File

@@ -154,69 +154,65 @@ public:
{
static ChatCommand npcAddCommandTable[] =
{
{ "formation", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleNpcAddFormationCommand, "", NULL },
{ "item", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcAddVendorItemCommand, "", NULL },
{ "move", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcAddMoveCommand, "", NULL },
{ "temp", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcAddTempSpawnCommand, "", NULL },
//{@todo fix or remove this command
{ "weapon", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcAddWeaponCommand, "", NULL },
//}
{ "", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcAddCommand, "", NULL },
{ NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
{ "formation", RBAC_PERM_COMMAND_NPC_ADD_FORMATION, false, &HandleNpcAddFormationCommand, "", NULL },
{ "item", RBAC_PERM_COMMAND_NPC_ADD_ITEM, false, &HandleNpcAddVendorItemCommand, "", NULL },
{ "move", RBAC_PERM_COMMAND_NPC_ADD_MOVE, false, &HandleNpcAddMoveCommand, "", NULL },
{ "temp", RBAC_PERM_COMMAND_NPC_ADD_TEMP, false, &HandleNpcAddTempSpawnCommand, "", NULL },
//{ "weapon", RBAC_PERM_COMMAND_NPC_ADD_WEAPON, false, &HandleNpcAddWeaponCommand, "", NULL },
{ "", RBAC_PERM_COMMAND_NPC_ADD, false, &HandleNpcAddCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand npcDeleteCommandTable[] =
{
{ "item", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcDeleteVendorItemCommand, "", NULL },
{ "", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcDeleteCommand, "", NULL },
{ NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
{ "item", RBAC_PERM_COMMAND_NPC_DELETE_ITEM, false, &HandleNpcDeleteVendorItemCommand, "", NULL },
{ "", RBAC_PERM_COMMAND_NPC_DELETE, false, &HandleNpcDeleteCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand npcFollowCommandTable[] =
{
{ "stop", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcUnFollowCommand, "", NULL },
{ "", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcFollowCommand, "", NULL },
{ NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
{ "stop", RBAC_PERM_COMMAND_NPC_FOLLOW_STOP, false, &HandleNpcUnFollowCommand, "", NULL },
{ "", RBAC_PERM_COMMAND_NPC_FOLLOW, false, &HandleNpcFollowCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand npcSetCommandTable[] =
{
{ "allowmove", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcSetAllowMovementCommand, "", NULL },
{ "entry", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcSetEntryCommand, "", NULL },
{ "factionid", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetFactionIdCommand, "", NULL },
{ "flag", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetFlagCommand, "", NULL },
{ "level", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetLevelCommand, "", NULL },
{ "link", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetLinkCommand, "", NULL },
{ "model", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetModelCommand, "", NULL },
{ "movetype", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetMoveTypeCommand, "", NULL },
{ "phase", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetPhaseCommand, "", NULL },
{ "spawndist", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetSpawnDistCommand, "", NULL },
{ "spawntime", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetSpawnTimeCommand, "", NULL },
{ "data", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcSetDataCommand, "", NULL },
//{ @todo fix or remove these commands
{ "name", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetNameCommand, "", NULL },
{ "subname", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcSetSubNameCommand, "", NULL },
//}
{ NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
{ "allowmove", RBAC_PERM_COMMAND_NPC_SET_ALLOWMOVE, false, &HandleNpcSetAllowMovementCommand, "", NULL },
{ "entry", RBAC_PERM_COMMAND_NPC_SET_ENTRY, false, &HandleNpcSetEntryCommand, "", NULL },
{ "factionid", RBAC_PERM_COMMAND_NPC_SET_FACTIONID, false, &HandleNpcSetFactionIdCommand, "", NULL },
{ "flag", RBAC_PERM_COMMAND_NPC_SET_FLAG, false, &HandleNpcSetFlagCommand, "", NULL },
{ "level", RBAC_PERM_COMMAND_NPC_SET_LEVEL, false, &HandleNpcSetLevelCommand, "", NULL },
{ "link", RBAC_PERM_COMMAND_NPC_SET_LINK, false, &HandleNpcSetLinkCommand, "", NULL },
{ "model", RBAC_PERM_COMMAND_NPC_SET_MODEL, false, &HandleNpcSetModelCommand, "", NULL },
{ "movetype", RBAC_PERM_COMMAND_NPC_SET_MOVETYPE, false, &HandleNpcSetMoveTypeCommand, "", NULL },
{ "phase", RBAC_PERM_COMMAND_NPC_SET_PHASE, false, &HandleNpcSetPhaseCommand, "", NULL },
{ "spawndist", RBAC_PERM_COMMAND_NPC_SET_SPAWNDIST, false, &HandleNpcSetSpawnDistCommand, "", NULL },
{ "spawntime", RBAC_PERM_COMMAND_NPC_SET_SPAWNTIME, false, &HandleNpcSetSpawnTimeCommand, "", NULL },
{ "data", RBAC_PERM_COMMAND_NPC_SET_DATA, false, &HandleNpcSetDataCommand, "", NULL },
//{ "name", RBAC_PERM_COMMAND_NPC_SET_NAME, false, &HandleNpcSetNameCommand, "", NULL },
//{ "subname", RBAC_PERM_COMMAND_NPC_SET_SUBNAME, false, &HandleNpcSetSubNameCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand npcCommandTable[] =
{
{ "info", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcInfoCommand, "", NULL },
{ "near", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcNearCommand, "", NULL },
{ "move", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcMoveCommand, "", NULL },
{ "playemote", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleNpcPlayEmoteCommand, "", NULL },
{ "say", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleNpcSayCommand, "", NULL },
{ "textemote", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleNpcTextEmoteCommand, "", NULL },
{ "whisper", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleNpcWhisperCommand, "", NULL },
{ "yell", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleNpcYellCommand, "", NULL },
{ "tame", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleNpcTameCommand, "", NULL },
{ "add", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", npcAddCommandTable },
{ "delete", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", npcDeleteCommandTable },
{ "follow", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", npcFollowCommandTable },
{ "set", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", npcSetCommandTable },
{ NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
{ "info", RBAC_PERM_COMMAND_NPC_INFO, false, &HandleNpcInfoCommand, "", NULL },
{ "near", RBAC_PERM_COMMAND_NPC_NEAR, false, &HandleNpcNearCommand, "", NULL },
{ "move", RBAC_PERM_COMMAND_NPC_MOVE, false, &HandleNpcMoveCommand, "", NULL },
{ "playemote", RBAC_PERM_COMMAND_NPC_PLAYEMOTE, false, &HandleNpcPlayEmoteCommand, "", NULL },
{ "say", RBAC_PERM_COMMAND_NPC_SAY, false, &HandleNpcSayCommand, "", NULL },
{ "textemote", RBAC_PERM_COMMAND_NPC_TEXTEMOTE, false, &HandleNpcTextEmoteCommand, "", NULL },
{ "whisper", RBAC_PERM_COMMAND_NPC_WHISPER, false, &HandleNpcWhisperCommand, "", NULL },
{ "yell", RBAC_PERM_COMMAND_NPC_YELL, false, &HandleNpcYellCommand, "", NULL },
{ "tame", RBAC_PERM_COMMAND_NPC_TAME, false, &HandleNpcTameCommand, "", NULL },
{ "add", RBAC_PERM_COMMAND_NPC_ADD, false, NULL, "", npcAddCommandTable },
{ "delete", RBAC_PERM_COMMAND_NPC_DELETE, false, NULL, "", npcDeleteCommandTable },
{ "follow", RBAC_PERM_COMMAND_NPC_FOLLOW, false, NULL, "", npcFollowCommandTable },
{ "set", RBAC_PERM_COMMAND_NPC_SET, false, NULL, "", npcSetCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "npc", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", npcCommandTable },
{ NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
{ "npc", RBAC_PERM_COMMAND_NPC, false, NULL, "", npcCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}

View File

@@ -0,0 +1,190 @@
/*
* Copyright (C) 2008-2013 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/>.
*/
#include "Chat.h"
#include "Language.h"
#include "Pet.h"
#include "Player.h"
#include "ObjectMgr.h"
#include "ScriptMgr.h"
class pet_commandscript : public CommandScript
{
public:
pet_commandscript() : CommandScript("pet_commandscript") { }
ChatCommand* GetCommands() const OVERRIDE
{
static ChatCommand petCommandTable[] =
{
{ "create", RBAC_PERM_COMMAND_PET_CREATE, false, &HandlePetCreateCommand, "", NULL },
{ "learn", RBAC_PERM_COMMAND_PET_LEARN, false, &HandlePetLearnCommand, "", NULL },
{ "unlearn", RBAC_PERM_COMMAND_PET_UNLEARN, false, &HandlePetUnlearnCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "pet", RBAC_PERM_COMMAND_PET, false, NULL, "", petCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
static bool HandlePetCreateCommand(ChatHandler* handler, char const* /*args*/)
{
Player* player = handler->GetSession()->GetPlayer();
Creature* creatureTarget = handler->getSelectedCreature();
if (!creatureTarget || creatureTarget->IsPet() || creatureTarget->GetTypeId() == TYPEID_PLAYER)
{
handler->PSendSysMessage(LANG_SELECT_CREATURE);
handler->SetSentErrorMessage(true);
return false;
}
CreatureTemplate const* creatrueTemplate = sObjectMgr->GetCreatureTemplate(creatureTarget->GetEntry());
// Creatures with family 0 crashes the server
if (!creatrueTemplate->family)
{
handler->PSendSysMessage("This creature cannot be tamed. (family id: 0).");
handler->SetSentErrorMessage(true);
return false;
}
if (player->GetPetGUID())
{
handler->PSendSysMessage("You already have a pet");
handler->SetSentErrorMessage(true);
return false;
}
// Everything looks OK, create new pet
Pet* pet = new Pet(player, HUNTER_PET);
if (!pet->CreateBaseAtCreature(creatureTarget))
{
delete pet;
handler->PSendSysMessage("Error 1");
return false;
}
creatureTarget->setDeathState(JUST_DIED);
creatureTarget->RemoveCorpse();
creatureTarget->SetHealth(0); // just for nice GM-mode view
pet->SetUInt64Value(UNIT_FIELD_CREATEDBY, player->GetGUID());
pet->SetUInt32Value(UNIT_FIELD_FACTIONTEMPLATE, player->getFaction());
if (!pet->InitStatsForLevel(creatureTarget->getLevel()))
{
TC_LOG_ERROR(LOG_FILTER_GENERAL, "InitStatsForLevel() in EffectTameCreature failed! Pet deleted.");
handler->PSendSysMessage("Error 2");
delete pet;
return false;
}
// prepare visual effect for levelup
pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel()-1);
pet->GetCharmInfo()->SetPetNumber(sObjectMgr->GeneratePetNumber(), true);
// this enables pet details window (Shift+P)
pet->InitPetCreateSpells();
pet->SetFullHealth();
pet->GetMap()->AddToMap(pet->ToCreature());
// visual effect for levelup
pet->SetUInt32Value(UNIT_FIELD_LEVEL, creatureTarget->getLevel());
player->SetMinion(pet, true);
pet->SavePetToDB(PET_SAVE_AS_CURRENT);
player->PetSpellInitialize();
return true;
}
static bool HandlePetLearnCommand(ChatHandler* handler, char const* args)
{
if (!*args)
return false;
Player* player = handler->GetSession()->GetPlayer();
Pet* pet = player->GetPet();
if (!pet)
{
handler->PSendSysMessage("You have no pet");
handler->SetSentErrorMessage(true);
return false;
}
uint32 spellId = handler->extractSpellIdFromLink((char*)args);
if (!spellId || !sSpellMgr->GetSpellInfo(spellId))
return false;
// Check if pet already has it
if (pet->HasSpell(spellId))
{
handler->PSendSysMessage("Pet already has spell: %u", spellId);
handler->SetSentErrorMessage(true);
return false;
}
// Check if spell is valid
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
if (!spellInfo || !SpellMgr::IsSpellValid(spellInfo))
{
handler->PSendSysMessage(LANG_COMMAND_SPELL_BROKEN, spellId);
handler->SetSentErrorMessage(true);
return false;
}
pet->learnSpell(spellId);
handler->PSendSysMessage("Pet has learned spell %u", spellId);
return true;
}
static bool HandlePetUnlearnCommand(ChatHandler* handler, char const* args)
{
if (!*args)
return false;
Player* player = handler->GetSession()->GetPlayer();
Pet* pet = player->GetPet();
if (!pet)
{
handler->PSendSysMessage("You have no pet");
handler->SetSentErrorMessage(true);
return false;
}
uint32 spellId = handler->extractSpellIdFromLink((char*)args);
if (pet->HasSpell(spellId))
pet->removeSpell(spellId, false);
else
handler->PSendSysMessage("Pet doesn't have that spell");
return true;
}
};
void AddSC_pet_commandscript()
{
new pet_commandscript();
}

View File

@@ -37,16 +37,16 @@ public:
{
static ChatCommand questCommandTable[] =
{
{ "add", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleQuestAdd, "", NULL },
{ "complete", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleQuestComplete, "", NULL },
{ "remove", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleQuestRemove, "", NULL },
{ "reward", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleQuestReward, "", NULL },
{ NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
{ "add", RBAC_PERM_COMMAND_QUEST_ADD, false, &HandleQuestAdd, "", NULL },
{ "complete", RBAC_PERM_COMMAND_QUEST_COMPLETE, false, &HandleQuestComplete, "", NULL },
{ "remove", RBAC_PERM_COMMAND_QUEST_REMOVE, false, &HandleQuestRemove, "", NULL },
{ "reward", RBAC_PERM_COMMAND_QUEST_REWARD, false, &HandleQuestReward, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "quest", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, NULL, "", questCommandTable },
{ NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
{ "quest", RBAC_PERM_COMMAND_QUEST, false, NULL, "", questCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}

View File

@@ -64,7 +64,7 @@ public:
{ "grant", RBAC_PERM_COMMAND_RBAC_ACC_ROLE_GRANT, true, &HandleRBACRoleGrantCommand, "", NULL },
{ "deny", RBAC_PERM_COMMAND_RBAC_ACC_ROLE_DENY, true, &HandleRBACRoleDenyCommand, "", NULL },
{ "revoke", RBAC_PERM_COMMAND_RBAC_ACC_ROLE_REVOKE, true, &HandleRBACRoleRevokeCommand, "", NULL },
{ "", RBAC_PERM_COMMAND_RBAC_ACC_ROLE, true, &HandleRBACRoleListCommand, "", NULL },
{ "", RBAC_PERM_COMMAND_RBAC_ACC_ROLE, true, &HandleRBACRoleListCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
@@ -73,7 +73,7 @@ public:
{ "grant", RBAC_PERM_COMMAND_RBAC_ACC_PERM_GRANT, true, &HandleRBACPermGrantCommand, "", NULL },
{ "deny", RBAC_PERM_COMMAND_RBAC_ACC_PERM_DENY, true, &HandleRBACPermDenyCommand, "", NULL },
{ "revoke", RBAC_PERM_COMMAND_RBAC_ACC_PERM_REVOKE, true, &HandleRBACPermRevokeCommand, "", NULL },
{ "", RBAC_PERM_COMMAND_RBAC_ACC_PERM, true, &HandleRBACPermListCommand, "", NULL },
{ "", RBAC_PERM_COMMAND_RBAC_ACC_PERM, true, &HandleRBACPermListCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};

View File

@@ -50,115 +50,115 @@ public:
{
static ChatCommand reloadAllCommandTable[] =
{
{ "achievement", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllAchievementCommand, "", NULL },
{ "area", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllAreaCommand, "", NULL },
{ "gossips", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllGossipsCommand, "", NULL },
{ "item", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllItemCommand, "", NULL },
{ "locales", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllLocalesCommand, "", NULL },
{ "loot", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllLootCommand, "", NULL },
{ "npc", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllNpcCommand, "", NULL },
{ "quest", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllQuestCommand, "", NULL },
{ "scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllScriptsCommand, "", NULL },
{ "spell", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllSpellCommand, "", NULL },
{ "", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAllCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
{ "achievement", RBAC_PERM_COMMANDS_RELOAD_ALL_ACHIEVEMENT, true, &HandleReloadAllAchievementCommand, "", NULL },
{ "area", RBAC_PERM_COMMANDS_RELOAD_ALL_AREA, true, &HandleReloadAllAreaCommand, "", NULL },
{ "gossips", RBAC_PERM_COMMANDS_RELOAD_ALL_GOSSIP, true, &HandleReloadAllGossipsCommand, "", NULL },
{ "item", RBAC_PERM_COMMANDS_RELOAD_ALL_ITEM, true, &HandleReloadAllItemCommand, "", NULL },
{ "locales", RBAC_PERM_COMMANDS_RELOAD_ALL_LOCALES, true, &HandleReloadAllLocalesCommand, "", NULL },
{ "loot", RBAC_PERM_COMMANDS_RELOAD_ALL_LOOT, true, &HandleReloadAllLootCommand, "", NULL },
{ "npc", RBAC_PERM_COMMANDS_RELOAD_ALL_NPC, true, &HandleReloadAllNpcCommand, "", NULL },
{ "quest", RBAC_PERM_COMMANDS_RELOAD_ALL_QUEST, true, &HandleReloadAllQuestCommand, "", NULL },
{ "scripts", RBAC_PERM_COMMANDS_RELOAD_ALL_SCRIPTS, true, &HandleReloadAllScriptsCommand, "", NULL },
{ "spell", RBAC_PERM_COMMANDS_RELOAD_ALL_SPELL, true, &HandleReloadAllSpellCommand, "", NULL },
{ "", RBAC_PERM_COMMANDS_RELOAD_ALL, true, &HandleReloadAllCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand reloadCommandTable[] =
{
{ "auctions", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAuctionsCommand, "", NULL },
{ "access_requirement", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAccessRequirementCommand, "", NULL },
{ "achievement_criteria_data", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAchievementCriteriaDataCommand, "", NULL },
{ "achievement_reward", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAchievementRewardCommand, "", NULL },
{ "all", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", reloadAllCommandTable },
{ "areatrigger_involvedrelation", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadQuestAreaTriggersCommand, "", NULL },
{ "areatrigger_tavern", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAreaTriggerTavernCommand, "", NULL },
{ "areatrigger_teleport", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAreaTriggerTeleportCommand, "", NULL },
{ "autobroadcast", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadAutobroadcastCommand, "", NULL },
{ "command", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCommandCommand, "", NULL },
{ "conditions", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadConditions, "", NULL },
{ "config", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadConfigCommand, "", NULL },
{ "creature_text", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCreatureText, "", NULL },
{ "creature_questender", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCreatureQuestEnderCommand, "", NULL },
{ "creature_linked_respawn", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleReloadLinkedRespawnCommand, "", NULL },
{ "creature_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesCreatureCommand, "", NULL },
{ "creature_onkill_reputation", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadOnKillReputationCommand, "", NULL },
{ "creature_queststarter", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCreatureQuestStarterCommand, "", NULL },
{ "creature_summon_groups", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCreatureSummonGroupsCommand, "", NULL },
{ "creature_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadCreatureTemplateCommand, "", NULL },
//{ "db_script_string", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadDbScriptStringCommand, "", NULL },
{ "disables", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadDisablesCommand, "", NULL },
{ "disenchant_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesDisenchantCommand, "", NULL },
{ "event_scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadEventScriptsCommand, "", NULL },
{ "fishing_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesFishingCommand, "", NULL },
{ "game_graveyard_zone", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGameGraveyardZoneCommand, "", NULL },
{ "game_tele", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGameTeleCommand, "", NULL },
{ "gameobject_questender", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGOQuestEnderCommand, "", NULL },
{ "gameobject_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesGameobjectCommand, "", NULL },
{ "gameobject_queststarter", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGOQuestStarterCommand, "", NULL },
{ "gm_tickets", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGMTicketsCommand, "", NULL },
{ "gossip_menu", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGossipMenuCommand, "", NULL },
{ "gossip_menu_option", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadGossipMenuOptionCommand, "", NULL },
{ "item_enchantment_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadItemEnchantementsCommand, "", NULL },
{ "item_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesItemCommand, "", NULL },
{ "lfg_dungeon_rewards", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLfgRewardsCommand, "", NULL },
{ "locales_achievement_reward", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesAchievementRewardCommand, "", NULL },
{ "locales_creature", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesCreatureCommand, "", NULL },
{ "locales_creature_text", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesCreatureTextCommand, "", NULL },
{ "locales_gameobject", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesGameobjectCommand, "", NULL },
{ "locales_gossip_menu_option", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesGossipMenuOptionCommand, "", NULL },
{ "locales_item", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesItemCommand, "", NULL },
{ "locales_npc_text", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesNpcTextCommand, "", NULL },
{ "locales_page_text", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesPageTextCommand, "", NULL },
{ "locales_points_of_interest", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesPointsOfInterestCommand, "", NULL },
{ "locales_quest", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLocalesQuestCommand, "", NULL },
{ "mail_level_reward", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadMailLevelRewardCommand, "", NULL },
{ "mail_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesMailCommand, "", NULL },
{ "milling_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesMillingCommand, "", NULL },
{ "npc_spellclick_spells", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellClickSpellsCommand, "", NULL},
{ "npc_trainer", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadNpcTrainerCommand, "", NULL },
{ "npc_vendor", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadNpcVendorCommand, "", NULL },
{ "page_text", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadPageTextsCommand, "", NULL },
{ "pickpocketing_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesPickpocketingCommand, "", NULL},
{ "points_of_interest", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadPointsOfInterestCommand, "", NULL },
{ "prospecting_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesProspectingCommand, "", NULL },
{ "quest_poi", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadQuestPOICommand, "", NULL },
{ "quest_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadQuestTemplateCommand, "", NULL },
{ "rbac", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadRBACCommand, "", NULL },
{ "reference_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesReferenceCommand, "", NULL },
{ "reserved_name", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadReservedNameCommand, "", NULL },
{ "reputation_reward_rate", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadReputationRewardRateCommand, "", NULL },
{ "reputation_spillover_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadReputationRewardRateCommand, "", NULL },
{ "skill_discovery_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSkillDiscoveryTemplateCommand, "", NULL },
{ "skill_extra_item_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSkillExtraItemTemplateCommand, "", NULL },
{ "skill_fishing_base_level", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSkillFishingBaseLevelCommand, "", NULL },
{ "skinning_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesSkinningCommand, "", NULL },
{ "smart_scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSmartScripts, "", NULL },
{ "spell_required", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellRequiredCommand, "", NULL },
{ "spell_area", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellAreaCommand, "", NULL },
{ "spell_bonus_data", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellBonusesCommand, "", NULL },
{ "spell_group", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellGroupsCommand, "", NULL },
{ "spell_learn_spell", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellLearnSpellCommand, "", NULL },
{ "spell_loot_template", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadLootTemplatesSpellCommand, "", NULL },
{ "spell_linked_spell", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellLinkedSpellCommand, "", NULL },
{ "spell_pet_auras", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellPetAurasCommand, "", NULL },
{ "spell_proc_event", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellProcEventCommand, "", NULL },
{ "spell_proc", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellProcsCommand, "", NULL },
{ "spell_scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellScriptsCommand, "", NULL },
{ "spell_target_position", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellTargetPositionCommand, "", NULL },
{ "spell_threats", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellThreatsCommand, "", NULL },
{ "spell_group_stack_rules", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadSpellGroupStackRulesCommand, "", NULL },
{ "trinity_string", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadTrinityStringCommand, "", NULL },
{ "warden_action", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadWardenactionCommand, "", NULL },
{ "waypoint_scripts", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadWpScriptsCommand, "", NULL },
{ "waypoint_data", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadWpCommand, "", NULL },
{ "vehicle_accessory", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadVehicleAccessoryCommand, "", NULL },
{ "vehicle_template_accessory", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleReloadVehicleTemplateAccessoryCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
{ "auctions", RBAC_PERM_COMMANDS_RELOAD_AUCTIONS, true, &HandleReloadAuctionsCommand, "", NULL },
{ "access_requirement", RBAC_PERM_COMMANDS_RELOAD_ACCESS_REQUIREMENT, true, &HandleReloadAccessRequirementCommand, "", NULL },
{ "achievement_criteria_data", RBAC_PERM_COMMANDS_RELOAD_ACHIEVEMENT_CRITERIA_DATA, true, &HandleReloadAchievementCriteriaDataCommand, "", NULL },
{ "achievement_reward", RBAC_PERM_COMMANDS_RELOAD_ACHIEVEMENT_REWARD, true, &HandleReloadAchievementRewardCommand, "", NULL },
{ "all", RBAC_PERM_COMMANDS_RELOAD_ALL, true, NULL, "", reloadAllCommandTable },
{ "areatrigger_involvedrelation", RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_INVOLVEDRELATION, true, &HandleReloadQuestAreaTriggersCommand, "", NULL },
{ "areatrigger_tavern", RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_TAVERN, true, &HandleReloadAreaTriggerTavernCommand, "", NULL },
{ "areatrigger_teleport", RBAC_PERM_COMMANDS_RELOAD_AREATRIGGER_TELEPORT, true, &HandleReloadAreaTriggerTeleportCommand, "", NULL },
{ "autobroadcast", RBAC_PERM_COMMANDS_RELOAD_AUTOBROADCAST, true, &HandleReloadAutobroadcastCommand, "", NULL },
{ "command", RBAC_PERM_COMMANDS_RELOAD_COMMAND, true, &HandleReloadCommandCommand, "", NULL },
{ "conditions", RBAC_PERM_COMMANDS_RELOAD_CONDITIONS, true, &HandleReloadConditions, "", NULL },
{ "config", RBAC_PERM_COMMANDS_RELOAD_CONFIG, true, &HandleReloadConfigCommand, "", NULL },
{ "creature_text", RBAC_PERM_COMMANDS_RELOAD_CREATURE_TEXT, true, &HandleReloadCreatureText, "", NULL },
{ "creature_questender", RBAC_PERM_COMMANDS_RELOAD_CREATURE_QUESTENDER, true, &HandleReloadCreatureQuestEnderCommand, "", NULL },
{ "creature_linked_respawn", RBAC_PERM_COMMANDS_RELOAD_CREATURE_LINKED_RESPAWN, true, &HandleReloadLinkedRespawnCommand, "", NULL },
{ "creature_loot_template", RBAC_PERM_COMMANDS_RELOAD_CREATURE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesCreatureCommand, "", NULL },
{ "creature_onkill_reputation", RBAC_PERM_COMMANDS_RELOAD_CREATURE_ONKILL_REPUTATION, true, &HandleReloadOnKillReputationCommand, "", NULL },
{ "creature_queststarter", RBAC_PERM_COMMANDS_RELOAD_CREATURE_QUESTSTARTER, true, &HandleReloadCreatureQuestStarterCommand, "", NULL },
{ "creature_summon_groups", RBAC_PERM_COMMANDS_RELOAD_CREATURE_SUMMON_GROUPS, true, &HandleReloadCreatureSummonGroupsCommand, "", NULL },
{ "creature_template", RBAC_PERM_COMMANDS_RELOAD_CREATURE_TEMPLATE, true, &HandleReloadCreatureTemplateCommand, "", NULL },
//{ "db_script_string", RBAC_PERM_COMMANDS_RELOAD_, true, &HandleReloadDbScriptStringCommand, "", NULL },
{ "disables", RBAC_PERM_COMMANDS_RELOAD_DISABLES, true, &HandleReloadDisablesCommand, "", NULL },
{ "disenchant_loot_template", RBAC_PERM_COMMANDS_RELOAD_DISENCHANT_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesDisenchantCommand, "", NULL },
{ "event_scripts", RBAC_PERM_COMMANDS_RELOAD_EVENT_SCRIPTS, true, &HandleReloadEventScriptsCommand, "", NULL },
{ "fishing_loot_template", RBAC_PERM_COMMANDS_RELOAD_FISHING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesFishingCommand, "", NULL },
{ "game_graveyard_zone", RBAC_PERM_COMMANDS_RELOAD_GAME_GRAVEYARD_ZONE, true, &HandleReloadGameGraveyardZoneCommand, "", NULL },
{ "game_tele", RBAC_PERM_COMMANDS_RELOAD_GAME_TELE, true, &HandleReloadGameTeleCommand, "", NULL },
{ "gameobject_questender", RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUESTENDER, true, &HandleReloadGOQuestEnderCommand, "", NULL },
{ "gameobject_loot_template", RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUEST_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesGameobjectCommand, "", NULL },
{ "gameobject_queststarter", RBAC_PERM_COMMANDS_RELOAD_GAMEOBJECT_QUESTSTARTER, true, &HandleReloadGOQuestStarterCommand, "", NULL },
{ "gm_tickets", RBAC_PERM_COMMANDS_RELOAD_GM_TICKETS, true, &HandleReloadGMTicketsCommand, "", NULL },
{ "gossip_menu", RBAC_PERM_COMMANDS_RELOAD_GOSSIP_MENU, true, &HandleReloadGossipMenuCommand, "", NULL },
{ "gossip_menu_option", RBAC_PERM_COMMANDS_RELOAD_GOSSIP_MENU_OPTION, true, &HandleReloadGossipMenuOptionCommand, "", NULL },
{ "item_enchantment_template", RBAC_PERM_COMMANDS_RELOAD_ITEM_ENCHANTMENT_TEMPLATE, true, &HandleReloadItemEnchantementsCommand, "", NULL },
{ "item_loot_template", RBAC_PERM_COMMANDS_RELOAD_ITEM_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesItemCommand, "", NULL },
{ "lfg_dungeon_rewards", RBAC_PERM_COMMANDS_RELOAD_LFG_DUNGEON_REWARDS, true, &HandleReloadLfgRewardsCommand, "", NULL },
{ "locales_achievement_reward", RBAC_PERM_COMMANDS_RELOAD_LOCALES_ACHIEVEMENT_REWARD, true, &HandleReloadLocalesAchievementRewardCommand, "", NULL },
{ "locales_creature", RBAC_PERM_COMMANDS_RELOAD_LOCALES_CRETURE, true, &HandleReloadLocalesCreatureCommand, "", NULL },
{ "locales_creature_text", RBAC_PERM_COMMANDS_RELOAD_LOCALES_CRETURE_TEXT, true, &HandleReloadLocalesCreatureTextCommand, "", NULL },
{ "locales_gameobject", RBAC_PERM_COMMANDS_RELOAD_LOCALES_GAMEOBJECT, true, &HandleReloadLocalesGameobjectCommand, "", NULL },
{ "locales_gossip_menu_option", RBAC_PERM_COMMANDS_RELOAD_LOCALES_GOSSIP_MENU_OPTION, true, &HandleReloadLocalesGossipMenuOptionCommand, "", NULL },
{ "locales_item", RBAC_PERM_COMMANDS_RELOAD_LOCALES_ITEM, true, &HandleReloadLocalesItemCommand, "", NULL },
{ "locales_npc_text", RBAC_PERM_COMMANDS_RELOAD_LOCALES_NPC_TEXT, true, &HandleReloadLocalesNpcTextCommand, "", NULL },
{ "locales_page_text", RBAC_PERM_COMMANDS_RELOAD_LOCALES_PAGE_TEXT, true, &HandleReloadLocalesPageTextCommand, "", NULL },
{ "locales_points_of_interest", RBAC_PERM_COMMANDS_RELOAD_LOCALES_POINTS_OF_INTEREST, true, &HandleReloadLocalesPointsOfInterestCommand, "", NULL },
{ "locales_quest", RBAC_PERM_COMMANDS_RELOAD_LOCALES_QUEST, true, &HandleReloadLocalesQuestCommand, "", NULL },
{ "mail_level_reward", RBAC_PERM_COMMANDS_RELOAD_MAIL_LEVEL_REWARD, true, &HandleReloadMailLevelRewardCommand, "", NULL },
{ "mail_loot_template", RBAC_PERM_COMMANDS_RELOAD_MAIL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMailCommand, "", NULL },
{ "milling_loot_template", RBAC_PERM_COMMANDS_RELOAD_MILLING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesMillingCommand, "", NULL },
{ "npc_spellclick_spells", RBAC_PERM_COMMANDS_RELOAD_NPC_SPELLCLICK_SPELLS, true, &HandleReloadSpellClickSpellsCommand, "", NULL},
{ "npc_trainer", RBAC_PERM_COMMANDS_RELOAD_NPC_TRAINER, true, &HandleReloadNpcTrainerCommand, "", NULL },
{ "npc_vendor", RBAC_PERM_COMMANDS_RELOAD_NPC_VENDOR, true, &HandleReloadNpcVendorCommand, "", NULL },
{ "page_text", RBAC_PERM_COMMANDS_RELOAD_PAGE_TEXT, true, &HandleReloadPageTextsCommand, "", NULL },
{ "pickpocketing_loot_template", RBAC_PERM_COMMANDS_RELOAD_PICKPOCKETING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesPickpocketingCommand, "", NULL},
{ "points_of_interest", RBAC_PERM_COMMANDS_RELOAD_POINTS_OF_INTEREST, true, &HandleReloadPointsOfInterestCommand, "", NULL },
{ "prospecting_loot_template", RBAC_PERM_COMMANDS_RELOAD_PROSPECTING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesProspectingCommand, "", NULL },
{ "quest_poi", RBAC_PERM_COMMANDS_RELOAD_QUEST_POI, true, &HandleReloadQuestPOICommand, "", NULL },
{ "quest_template", RBAC_PERM_COMMANDS_RELOAD_QUEST_TEMPLATE, true, &HandleReloadQuestTemplateCommand, "", NULL },
{ "rbac", RBAC_PERM_COMMANDS_RELOAD_RBAC, true, &HandleReloadRBACCommand, "", NULL },
{ "reference_loot_template", RBAC_PERM_COMMANDS_RELOAD_REFERENCE_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesReferenceCommand, "", NULL },
{ "reserved_name", RBAC_PERM_COMMANDS_RELOAD_RESERVED_NAME, true, &HandleReloadReservedNameCommand, "", NULL },
{ "reputation_reward_rate", RBAC_PERM_COMMANDS_RELOAD_REPUTATION_REWARD_RATE, true, &HandleReloadReputationRewardRateCommand, "", NULL },
{ "reputation_spillover_template", RBAC_PERM_COMMANDS_RELOAD_SPILLOVER_TEMPLATE, true, &HandleReloadReputationRewardRateCommand, "", NULL },
{ "skill_discovery_template", RBAC_PERM_COMMANDS_RELOAD_SKILL_DISCOVERY_TEMPLATE, true, &HandleReloadSkillDiscoveryTemplateCommand, "", NULL },
{ "skill_extra_item_template", RBAC_PERM_COMMANDS_RELOAD_SKILL_EXTRA_ITEM_TEMPLATE, true, &HandleReloadSkillExtraItemTemplateCommand, "", NULL },
{ "skill_fishing_base_level", RBAC_PERM_COMMANDS_RELOAD_SKILL_FISHING_BASE_LEVEL, true, &HandleReloadSkillFishingBaseLevelCommand, "", NULL },
{ "skinning_loot_template", RBAC_PERM_COMMANDS_RELOAD_SKINNING_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSkinningCommand, "", NULL },
{ "smart_scripts", RBAC_PERM_COMMANDS_RELOAD_SMART_SCRIPTS, true, &HandleReloadSmartScripts, "", NULL },
{ "spell_required", RBAC_PERM_COMMANDS_RELOAD_SPELL_REQUIRED, true, &HandleReloadSpellRequiredCommand, "", NULL },
{ "spell_area", RBAC_PERM_COMMANDS_RELOAD_SPELL_AREA, true, &HandleReloadSpellAreaCommand, "", NULL },
{ "spell_bonus_data", RBAC_PERM_COMMANDS_RELOAD_SPELL_BONUS_DATA, true, &HandleReloadSpellBonusesCommand, "", NULL },
{ "spell_group", RBAC_PERM_COMMANDS_RELOAD_SPELL_GROUP, true, &HandleReloadSpellGroupsCommand, "", NULL },
{ "spell_learn_spell", RBAC_PERM_COMMANDS_RELOAD_SPELL_LEARN_SPELL, true, &HandleReloadSpellLearnSpellCommand, "", NULL },
{ "spell_loot_template", RBAC_PERM_COMMANDS_RELOAD_SPELL_LOOT_TEMPLATE, true, &HandleReloadLootTemplatesSpellCommand, "", NULL },
{ "spell_linked_spell", RBAC_PERM_COMMANDS_RELOAD_SPELL_LINKED_SPELL, true, &HandleReloadSpellLinkedSpellCommand, "", NULL },
{ "spell_pet_auras", RBAC_PERM_COMMANDS_RELOAD_SPELL_PET_AURAS, true, &HandleReloadSpellPetAurasCommand, "", NULL },
{ "spell_proc_event", RBAC_PERM_COMMANDS_RELOAD_SPELL_PROC_EVENT, true, &HandleReloadSpellProcEventCommand, "", NULL },
{ "spell_proc", RBAC_PERM_COMMANDS_RELOAD_SPELL_PROC, true, &HandleReloadSpellProcsCommand, "", NULL },
{ "spell_scripts", RBAC_PERM_COMMANDS_RELOAD_SPELL_SCRIPTS, true, &HandleReloadSpellScriptsCommand, "", NULL },
{ "spell_target_position", RBAC_PERM_COMMANDS_RELOAD_SPELL_TARGET_POSITION, true, &HandleReloadSpellTargetPositionCommand, "", NULL },
{ "spell_threats", RBAC_PERM_COMMANDS_RELOAD_SPELL_THREATS, true, &HandleReloadSpellThreatsCommand, "", NULL },
{ "spell_group_stack_rules", RBAC_PERM_COMMANDS_RELOAD_SPELL_GROUP_STACK_RULES, true, &HandleReloadSpellGroupStackRulesCommand, "", NULL },
{ "trinity_string", RBAC_PERM_COMMANDS_RELOAD_TRINITY_STRING, true, &HandleReloadTrinityStringCommand, "", NULL },
{ "warden_action", RBAC_PERM_COMMANDS_RELOAD_WARDEN_ACTION, true, &HandleReloadWardenactionCommand, "", NULL },
{ "waypoint_scripts", RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_SCRIPTS, true, &HandleReloadWpScriptsCommand, "", NULL },
{ "waypoint_data", RBAC_PERM_COMMANDS_RELOAD_WAYPOINT_DATA, true, &HandleReloadWpCommand, "", NULL },
{ "vehicle_accessory", RBAC_PERM_COMMANDS_RELOAD_VEHICLE_ACCESORY, true, &HandleReloadVehicleAccessoryCommand, "", NULL },
{ "vehicle_template_accessory", RBAC_PERM_COMMANDS_RELOAD_VEHICLE_TEMPLATE_ACCESSORY, true, &HandleReloadVehicleTemplateAccessoryCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "reload", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", reloadCommandTable },
{ NULL, 0, false, NULL, "", NULL }
{ "reload", RBAC_PERM_COMMANDS_RELOAD, true, NULL, "", reloadCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}

View File

@@ -39,19 +39,19 @@ public:
{
static ChatCommand resetCommandTable[] =
{
{ "achievements", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetAchievementsCommand, "", NULL },
{ "honor", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetHonorCommand, "", NULL },
{ "level", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetLevelCommand, "", NULL },
{ "spells", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetSpellsCommand, "", NULL },
{ "stats", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetStatsCommand, "", NULL },
{ "talents", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetTalentsCommand, "", NULL },
{ "all", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleResetAllCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
{ "achievements", RBAC_PERM_COMMAND_RESET_ACHIEVEMENTS, true, &HandleResetAchievementsCommand, "", NULL },
{ "honor", RBAC_PERM_COMMAND_RESET_HONOR, true, &HandleResetHonorCommand, "", NULL },
{ "level", RBAC_PERM_COMMAND_RESET_LEVEL, true, &HandleResetLevelCommand, "", NULL },
{ "spells", RBAC_PERM_COMMAND_RESET_SPELLS, true, &HandleResetSpellsCommand, "", NULL },
{ "stats", RBAC_PERM_COMMAND_RESET_STATS, true, &HandleResetStatsCommand, "", NULL },
{ "talents", RBAC_PERM_COMMAND_RESET_TALENTS, true, &HandleResetTalentsCommand, "", NULL },
{ "all", RBAC_PERM_COMMAND_RESET_ALL, true, &HandleResetAllCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "reset", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", resetCommandTable },
{ NULL, 0, false, NULL, "", NULL }
{ "reset", RBAC_PERM_COMMAND_RESET, true, NULL, "", resetCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}

View File

@@ -0,0 +1,289 @@
/*
* Copyright (C) 2008-2013 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/>.
*/
#include "Chat.h"
#include "Language.h"
#include "Pet.h"
#include "Player.h"
#include "ObjectMgr.h"
#include "ScriptMgr.h"
class send_commandscript : public CommandScript
{
public:
send_commandscript() : CommandScript("send_commandscript") { }
ChatCommand* GetCommands() const OVERRIDE
{
static ChatCommand sendCommandTable[] =
{
{ "items", RBAC_PERM_COMMAND_SEND_ITEMS, true, &HandleSendItemsCommand, "", NULL },
{ "mail", RBAC_PERM_COMMAND_SEND_MAIL, true, &HandleSendMailCommand, "", NULL },
{ "message", RBAC_PERM_COMMAND_SEND_MESSAGE, true, &HandleSendMessageCommand, "", NULL },
{ "money", RBAC_PERM_COMMAND_SEND_MONEY, true, &HandleSendMoneyCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "send", RBAC_PERM_COMMAND_SEND, false, NULL, "", sendCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}
// Send mail by command
static bool HandleSendMailCommand(ChatHandler* handler, char const* args)
{
// format: name "subject text" "mail text"
Player* target;
uint64 targetGuid;
std::string targetName;
if (!handler->extractPlayerTarget((char*)args, &target, &targetGuid, &targetName))
return false;
char* tail1 = strtok(NULL, "");
if (!tail1)
return false;
char const* msgSubject = handler->extractQuotedArg(tail1);
if (!msgSubject)
return false;
char* tail2 = strtok(NULL, "");
if (!tail2)
return false;
char const* msgText = handler->extractQuotedArg(tail2);
if (!msgText)
return false;
// msgSubject, msgText isn't NUL after prev. check
std::string subject = msgSubject;
std::string text = msgText;
// from console show not existed sender
MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
/// @todo Fix poor design
SQLTransaction trans = CharacterDatabase.BeginTransaction();
MailDraft(subject, text)
.SendMailTo(trans, MailReceiver(target, GUID_LOPART(targetGuid)), sender);
CharacterDatabase.CommitTransaction(trans);
std::string nameLink = handler->playerLink(targetName);
handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
return true;
}
// Send items by mail
static bool HandleSendItemsCommand(ChatHandler* handler, char const* args)
{
// format: name "subject text" "mail text" item1[:count1] item2[:count2] ... item12[:count12]
Player* receiver;
uint64 receiverGuid;
std::string receiverName;
if (!handler->extractPlayerTarget((char*)args, &receiver, &receiverGuid, &receiverName))
return false;
char* tail1 = strtok(NULL, "");
if (!tail1)
return false;
char const* msgSubject = handler->extractQuotedArg(tail1);
if (!msgSubject)
return false;
char* tail2 = strtok(NULL, "");
if (!tail2)
return false;
char const* msgText = handler->extractQuotedArg(tail2);
if (!msgText)
return false;
// msgSubject, msgText isn't NUL after prev. check
std::string subject = msgSubject;
std::string text = msgText;
// extract items
typedef std::pair<uint32, uint32> ItemPair;
typedef std::list< ItemPair > ItemPairs;
ItemPairs items;
// get all tail string
char* tail = strtok(NULL, "");
// get from tail next item str
while (char* itemStr = strtok(tail, " "))
{
// and get new tail
tail = strtok(NULL, "");
// parse item str
char const* itemIdStr = strtok(itemStr, ":");
char const* itemCountStr = strtok(NULL, " ");
uint32 itemId = atoi(itemIdStr);
if (!itemId)
return false;
ItemTemplate const* item_proto = sObjectMgr->GetItemTemplate(itemId);
if (!item_proto)
{
handler->PSendSysMessage(LANG_COMMAND_ITEMIDINVALID, itemId);
handler->SetSentErrorMessage(true);
return false;
}
uint32 itemCount = itemCountStr ? atoi(itemCountStr) : 1;
if (itemCount < 1 || (item_proto->MaxCount > 0 && itemCount > uint32(item_proto->MaxCount)))
{
handler->PSendSysMessage(LANG_COMMAND_INVALID_ITEM_COUNT, itemCount, itemId);
handler->SetSentErrorMessage(true);
return false;
}
while (itemCount > item_proto->GetMaxStackSize())
{
items.push_back(ItemPair(itemId, item_proto->GetMaxStackSize()));
itemCount -= item_proto->GetMaxStackSize();
}
items.push_back(ItemPair(itemId, itemCount));
if (items.size() > MAX_MAIL_ITEMS)
{
handler->PSendSysMessage(LANG_COMMAND_MAIL_ITEMS_LIMIT, MAX_MAIL_ITEMS);
handler->SetSentErrorMessage(true);
return false;
}
}
// from console show not existed sender
MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
// fill mail
MailDraft draft(subject, text);
SQLTransaction trans = CharacterDatabase.BeginTransaction();
for (ItemPairs::const_iterator itr = items.begin(); itr != items.end(); ++itr)
{
if (Item* item = Item::CreateItem(itr->first, itr->second, handler->GetSession() ? handler->GetSession()->GetPlayer() : 0))
{
item->SaveToDB(trans); // save for prevent lost at next mail load, if send fail then item will deleted
draft.AddItem(item);
}
}
draft.SendMailTo(trans, MailReceiver(receiver, GUID_LOPART(receiverGuid)), sender);
CharacterDatabase.CommitTransaction(trans);
std::string nameLink = handler->playerLink(receiverName);
handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
return true;
}
/// Send money by mail
static bool HandleSendMoneyCommand(ChatHandler* handler, char const* args)
{
/// format: name "subject text" "mail text" money
Player* receiver;
uint64 receiverGuid;
std::string receiverName;
if (!handler->extractPlayerTarget((char*)args, &receiver, &receiverGuid, &receiverName))
return false;
char* tail1 = strtok(NULL, "");
if (!tail1)
return false;
char* msgSubject = handler->extractQuotedArg(tail1);
if (!msgSubject)
return false;
char* tail2 = strtok(NULL, "");
if (!tail2)
return false;
char* msgText = handler->extractQuotedArg(tail2);
if (!msgText)
return false;
char* moneyStr = strtok(NULL, "");
int32 money = moneyStr ? atoi(moneyStr) : 0;
if (money <= 0)
return false;
// msgSubject, msgText isn't NUL after prev. check
std::string subject = msgSubject;
std::string text = msgText;
// from console show not existed sender
MailSender sender(MAIL_NORMAL, handler->GetSession() ? handler->GetSession()->GetPlayer()->GetGUIDLow() : 0, MAIL_STATIONERY_GM);
SQLTransaction trans = CharacterDatabase.BeginTransaction();
MailDraft(subject, text)
.AddMoney(money)
.SendMailTo(trans, MailReceiver(receiver, GUID_LOPART(receiverGuid)), sender);
CharacterDatabase.CommitTransaction(trans);
std::string nameLink = handler->playerLink(receiverName);
handler->PSendSysMessage(LANG_MAIL_SENT, nameLink.c_str());
return true;
}
/// Send a message to a player in game
static bool HandleSendMessageCommand(ChatHandler* handler, char const* args)
{
/// - Find the player
Player* player;
if (!handler->extractPlayerTarget((char*)args, &player))
return false;
char* msgStr = strtok(NULL, "");
if (!msgStr)
return false;
///- Check that he is not logging out.
if (player->GetSession()->isLogingOut())
{
handler->SendSysMessage(LANG_PLAYER_NOT_FOUND);
handler->SetSentErrorMessage(true);
return false;
}
/// - Send the message
// Use SendAreaTriggerMessage for fastest delivery.
player->GetSession()->SendAreaTriggerMessage("%s", msgStr);
player->GetSession()->SendAreaTriggerMessage("|cffff0000[Message from administrator]:|r");
// Confirmation message
std::string nameLink = handler->GetNameLink(player);
handler->PSendSysMessage(LANG_SENDMESSAGE, nameLink.c_str(), msgStr);
return true;
}
};
void AddSC_send_commandscript()
{
new send_commandscript();
}

View File

@@ -39,60 +39,60 @@ public:
{
static ChatCommand serverIdleRestartCommandTable[] =
{
{ "cancel", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerShutDownCancelCommand, "", NULL },
{ "" , RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerIdleRestartCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
{ "cancel", RBAC_PERM_COMMAND_SERVER_IDLERESTART_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL },
{ "" , RBAC_PERM_COMMAND_SERVER_IDLERESTART, true, &HandleServerIdleRestartCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand serverIdleShutdownCommandTable[] =
{
{ "cancel", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerShutDownCancelCommand, "", NULL },
{ "" , RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerIdleShutDownCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
{ "cancel", RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL },
{ "" , RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN, true, &HandleServerIdleShutDownCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand serverRestartCommandTable[] =
{
{ "cancel", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerShutDownCancelCommand, "", NULL },
{ "" , RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerRestartCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
{ "cancel", RBAC_PERM_COMMAND_SERVER_RESTART_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL },
{ "" , RBAC_PERM_COMMAND_SERVER_RESTART, true, &HandleServerRestartCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand serverShutdownCommandTable[] =
{
{ "cancel", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerShutDownCancelCommand, "", NULL },
{ "" , RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerShutDownCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
{ "cancel", RBAC_PERM_COMMAND_SERVER_SHUTDOWN_CANCEL, true, &HandleServerShutDownCancelCommand, "", NULL },
{ "" , RBAC_PERM_COMMAND_SERVER_SHUTDOWN, true, &HandleServerShutDownCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand serverSetCommandTable[] =
{
{ "difftime", RBAC_PERM_CONSOLE_COMMANDS, true, &HandleServerSetDiffTimeCommand, "", NULL },
{ "loglevel", RBAC_PERM_CONSOLE_COMMANDS, true, &HandleServerSetLogLevelCommand, "", NULL },
{ "motd", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerSetMotdCommand, "", NULL },
{ "closed", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerSetClosedCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
{ "difftime", RBAC_PERM_COMMAND_SERVER_SET_DIFFTIME, true, &HandleServerSetDiffTimeCommand, "", NULL },
{ "loglevel", RBAC_PERM_COMMAND_SERVER_SET_LOGLEVEL, true, &HandleServerSetLogLevelCommand, "", NULL },
{ "motd", RBAC_PERM_COMMAND_SERVER_SET_MOTD, true, &HandleServerSetMotdCommand, "", NULL },
{ "closed", RBAC_PERM_COMMAND_SERVER_SET_CLOSED, true, &HandleServerSetClosedCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand serverCommandTable[] =
{
{ "corpses", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleServerCorpsesCommand, "", NULL },
{ "exit", RBAC_PERM_CONSOLE_COMMANDS, true, &HandleServerExitCommand, "", NULL },
{ "idlerestart", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverIdleRestartCommandTable },
{ "idleshutdown", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverIdleShutdownCommandTable },
{ "info", RBAC_PERM_PLAYER_COMMANDS, true, &HandleServerInfoCommand, "", NULL },
{ "motd", RBAC_PERM_PLAYER_COMMANDS, true, &HandleServerMotdCommand, "", NULL },
{ "plimit", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleServerPLimitCommand, "", NULL },
{ "restart", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverRestartCommandTable },
{ "shutdown", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverShutdownCommandTable },
{ "set", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverSetCommandTable },
{ NULL, 0, false, NULL, "", NULL }
{ "corpses", RBAC_PERM_COMMAND_SERVER_CORPSES, true, &HandleServerCorpsesCommand, "", NULL },
{ "exit", RBAC_PERM_COMMAND_SERVER_EXIT, true, &HandleServerExitCommand, "", NULL },
{ "idlerestart", RBAC_PERM_COMMAND_SERVER_IDLERESTART, true, NULL, "", serverIdleRestartCommandTable },
{ "idleshutdown", RBAC_PERM_COMMAND_SERVER_IDLESHUTDOWN, true, NULL, "", serverIdleShutdownCommandTable },
{ "info", RBAC_PERM_COMMAND_SERVER_INFO, true, &HandleServerInfoCommand, "", NULL },
{ "motd", RBAC_PERM_COMMAND_SERVER_MOTD, true, &HandleServerMotdCommand, "", NULL },
{ "plimit", RBAC_PERM_COMMAND_SERVER_PLIMIT, true, &HandleServerPLimitCommand, "", NULL },
{ "restart", RBAC_PERM_COMMAND_SERVER_RESTART, true, NULL, "", serverRestartCommandTable },
{ "shutdown", RBAC_PERM_COMMAND_SERVER_SHUTDOWN, true, NULL, "", serverShutdownCommandTable },
{ "set", RBAC_PERM_COMMAND_SERVER_SET, true, NULL, "", serverSetCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "server", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, NULL, "", serverCommandTable },
{ NULL, 0, false, NULL, "", NULL }
{ "server", RBAC_PERM_COMMAND_SERVER, true, NULL, "", serverCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}

View File

@@ -39,17 +39,17 @@ public:
{
static ChatCommand teleCommandTable[] =
{
{ "add", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleTeleAddCommand, "", NULL },
{ "del", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleTeleDelCommand, "", NULL },
{ "name", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleTeleNameCommand, "", NULL },
{ "group", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleTeleGroupCommand, "", NULL },
{ "", RBAC_PERM_MODERATOR_COMMANDS, false, &HandleTeleCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
{ "add", RBAC_PERM_COMMAND_TELE_ADD, false, &HandleTeleAddCommand, "", NULL },
{ "del", RBAC_PERM_COMMAND_TELE_DEL, true, &HandleTeleDelCommand, "", NULL },
{ "name", RBAC_PERM_COMMAND_TELE_NAME, true, &HandleTeleNameCommand, "", NULL },
{ "group", RBAC_PERM_COMMAND_TELE_GROUP, false, &HandleTeleGroupCommand, "", NULL },
{ "", RBAC_PERM_COMMAND_TELE, false, &HandleTeleCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "tele", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", teleCommandTable },
{ NULL, 0, false, NULL, "", NULL }
{ "tele", RBAC_PERM_COMMAND_TELE, false, NULL, "", teleCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}

View File

@@ -40,34 +40,34 @@ public:
{
static ChatCommand ticketResponseCommandTable[] =
{
{ "append", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketResponseAppendCommand, "", NULL },
{ "appendln", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketResponseAppendLnCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
{ "append", RBAC_PERM_COMMAND_TICKET_RESPONSE_APPEND, true, &HandleGMTicketResponseAppendCommand, "", NULL },
{ "appendln", RBAC_PERM_COMMAND_TICKET_RESPONSE_APPENDLN, true, &HandleGMTicketResponseAppendLnCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand ticketCommandTable[] =
{
{ "assign", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleGMTicketAssignToCommand, "", NULL },
{ "close", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketCloseByIdCommand, "", NULL },
{ "closedlist", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketListClosedCommand, "", NULL },
{ "comment", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketCommentCommand, "", NULL },
{ "complete", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketCompleteCommand, "", NULL },
{ "delete", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleGMTicketDeleteByIdCommand, "", NULL },
{ "escalate", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketEscalateCommand, "", NULL },
{ "escalatedlist", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleGMTicketListEscalatedCommand, "", NULL },
{ "list", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketListCommand, "", NULL },
{ "onlinelist", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketListOnlineCommand, "", NULL },
{ "reset", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleGMTicketResetCommand, "", NULL },
{ "response", RBAC_PERM_MODERATOR_COMMANDS, true, NULL, "", ticketResponseCommandTable },
{ "togglesystem", RBAC_PERM_ADMINISTRATOR_COMMANDS, true, &HandleToggleGMTicketSystem, "", NULL },
{ "unassign", RBAC_PERM_GAMEMASTER_COMMANDS, true, &HandleGMTicketUnAssignCommand, "", NULL },
{ "viewid", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketGetByIdCommand, "", NULL },
{ "viewname", RBAC_PERM_MODERATOR_COMMANDS, true, &HandleGMTicketGetByNameCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
{ "assign", RBAC_PERM_COMMAND_TICKET_ASSIGN, true, &HandleGMTicketAssignToCommand, "", NULL },
{ "close", RBAC_PERM_COMMAND_TICKET_CLOSE, true, &HandleGMTicketCloseByIdCommand, "", NULL },
{ "closedlist", RBAC_PERM_COMMAND_TICKET_CLOSEDLIST, true, &HandleGMTicketListClosedCommand, "", NULL },
{ "comment", RBAC_PERM_COMMAND_TICKET_COMMENT, true, &HandleGMTicketCommentCommand, "", NULL },
{ "complete", RBAC_PERM_COMMAND_TICKET_COMPLETE, true, &HandleGMTicketCompleteCommand, "", NULL },
{ "delete", RBAC_PERM_COMMAND_TICKET_DELETE, true, &HandleGMTicketDeleteByIdCommand, "", NULL },
{ "escalate", RBAC_PERM_COMMAND_TICKET_ESCALATE, true, &HandleGMTicketEscalateCommand, "", NULL },
{ "escalatedlist", RBAC_PERM_COMMAND_TICKET_ESCALATEDLIST, true, &HandleGMTicketListEscalatedCommand, "", NULL },
{ "list", RBAC_PERM_COMMAND_TICKET_LIST, true, &HandleGMTicketListCommand, "", NULL },
{ "onlinelist", RBAC_PERM_COMMAND_TICKET_ONLINELIST, true, &HandleGMTicketListOnlineCommand, "", NULL },
{ "reset", RBAC_PERM_COMMAND_TICKET_RESET, true, &HandleGMTicketResetCommand, "", NULL },
{ "response", RBAC_PERM_COMMAND_TICKET_RESPONSE, true, NULL, "", ticketResponseCommandTable },
{ "togglesystem", RBAC_PERM_COMMAND_TICKET_TOGGLESYSTEM, true, &HandleToggleGMTicketSystem, "", NULL },
{ "unassign", RBAC_PERM_COMMAND_TICKET_UNASSIGN, true, &HandleGMTicketUnAssignCommand, "", NULL },
{ "viewid", RBAC_PERM_COMMAND_TICKET_VIEWID, true, &HandleGMTicketGetByIdCommand, "", NULL },
{ "viewname", RBAC_PERM_COMMAND_TICKET_VIEWNAME, true, &HandleGMTicketGetByNameCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "ticket", RBAC_PERM_MODERATOR_COMMANDS, false, NULL, "", ticketCommandTable },
{ NULL, 0, false, NULL, "", NULL }
{ "ticket", RBAC_PERM_COMMAND_TICKET, false, NULL, "", ticketCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}

View File

@@ -37,21 +37,21 @@ public:
{
static ChatCommand titlesSetCommandTable[] =
{
{ "mask", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleTitlesSetMaskCommand, "", NULL },
{ NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
{ "mask", RBAC_PERM_COMMAND_TITLES_SET_MASK, false, &HandleTitlesSetMaskCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand titlesCommandTable[] =
{
{ "add", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleTitlesAddCommand, "", NULL },
{ "current", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleTitlesCurrentCommand, "", NULL },
{ "remove", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleTitlesRemoveCommand, "", NULL },
{ "set", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", titlesSetCommandTable },
{ NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
{ "add", RBAC_PERM_COMMAND_TITLES_ADD, false, &HandleTitlesAddCommand, "", NULL },
{ "current", RBAC_PERM_COMMAND_TITLES_CURRENT, false, &HandleTitlesCurrentCommand, "", NULL },
{ "remove", RBAC_PERM_COMMAND_TITLES_REMOVE, false, &HandleTitlesRemoveCommand, "", NULL },
{ "set", RBAC_PERM_COMMAND_TITLES_SET, false, NULL, "", titlesSetCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "titles", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", titlesCommandTable },
{ NULL, RBAC_PERM_PLAYER_COMMANDS, false, NULL, "", NULL }
{ "titles", RBAC_PERM_COMMAND_TITLES, false, NULL, "", titlesCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}

View File

@@ -38,19 +38,19 @@ public:
{
static ChatCommand wpCommandTable[] =
{
{ "add", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpAddCommand, "", NULL },
{ "event", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpEventCommand, "", NULL },
{ "load", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpLoadCommand, "", NULL },
{ "modify", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpModifyCommand, "", NULL },
{ "unload", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpUnLoadCommand, "", NULL },
{ "reload", RBAC_PERM_ADMINISTRATOR_COMMANDS, false, &HandleWpReloadCommand, "", NULL },
{ "show", RBAC_PERM_GAMEMASTER_COMMANDS, false, &HandleWpShowCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
{ "add", RBAC_PERM_COMMAND_WP_ADD, false, &HandleWpAddCommand, "", NULL },
{ "event", RBAC_PERM_COMMAND_WP_EVENT, false, &HandleWpEventCommand, "", NULL },
{ "load", RBAC_PERM_COMMAND_WP_LOAD, false, &HandleWpLoadCommand, "", NULL },
{ "modify", RBAC_PERM_COMMAND_WP_MODIFY, false, &HandleWpModifyCommand, "", NULL },
{ "unload", RBAC_PERM_COMMAND_WP_UNLOAD, false, &HandleWpUnLoadCommand, "", NULL },
{ "reload", RBAC_PERM_COMMAND_WP_RELOAD, false, &HandleWpReloadCommand, "", NULL },
{ "show", RBAC_PERM_COMMAND_WP_SHOW, false, &HandleWpShowCommand, "", NULL },
{ NULL, 0, false, NULL, "", NULL }
};
static ChatCommand commandTable[] =
{
{ "wp", RBAC_PERM_GAMEMASTER_COMMANDS, false, NULL, "", wpCommandTable },
{ NULL, 0, false, NULL, "", NULL }
{ "wp", RBAC_PERM_COMMAND_WP, false, NULL, "", wpCommandTable },
{ NULL, 0, false, NULL, "", NULL }
};
return commandTable;
}