mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-17 05:29:43 -04:00
This is an attempt to proofread standard error messages and system messages from both core and DB. The corrections span typos, grammar and punctuation. Because some of these messages can have multiple meanings depending on context, this PR will stay in "WIP" status until the corrections have been validated and approved. You are welcome to suggest improvements and files not yet included in this list. Thanks to @Kinzcool for suggesting this line of work. :)
247 lines
8.3 KiB
C++
247 lines
8.3 KiB
C++
/*
|
|
* Copyright (C) 2008-2016 TrinityCore <http://www.trinitycore.org/>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2 of the License, or (at your
|
|
* option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
/* ScriptData
|
|
Name: titles_commandscript
|
|
%Complete: 100
|
|
Comment: All titles related commands
|
|
Category: commandscripts
|
|
EndScriptData */
|
|
|
|
#include "Chat.h"
|
|
#include "Language.h"
|
|
#include "ObjectMgr.h"
|
|
#include "Player.h"
|
|
#include "ScriptMgr.h"
|
|
|
|
class titles_commandscript : public CommandScript
|
|
{
|
|
public:
|
|
titles_commandscript() : CommandScript("titles_commandscript") { }
|
|
|
|
std::vector<ChatCommand> GetCommands() const override
|
|
{
|
|
static std::vector<ChatCommand> titlesSetCommandTable =
|
|
{
|
|
{ "mask", rbac::RBAC_PERM_COMMAND_TITLES_SET_MASK, false, &HandleTitlesSetMaskCommand, "" },
|
|
};
|
|
static std::vector<ChatCommand> titlesCommandTable =
|
|
{
|
|
{ "add", rbac::RBAC_PERM_COMMAND_TITLES_ADD, false, &HandleTitlesAddCommand, "" },
|
|
{ "current", rbac::RBAC_PERM_COMMAND_TITLES_CURRENT, false, &HandleTitlesCurrentCommand, "" },
|
|
{ "remove", rbac::RBAC_PERM_COMMAND_TITLES_REMOVE, false, &HandleTitlesRemoveCommand, "" },
|
|
{ "set", rbac::RBAC_PERM_COMMAND_TITLES_SET, false, NULL, "", titlesSetCommandTable },
|
|
};
|
|
static std::vector<ChatCommand> commandTable =
|
|
{
|
|
{ "titles", rbac::RBAC_PERM_COMMAND_TITLES, false, NULL, "", titlesCommandTable },
|
|
};
|
|
return commandTable;
|
|
}
|
|
|
|
static bool HandleTitlesCurrentCommand(ChatHandler* handler, char const* args)
|
|
{
|
|
// number or [name] Shift-click form |color|Htitle:title_id|h[name]|h|r
|
|
char* id_p = handler->extractKeyFromLink((char*)args, "Htitle");
|
|
if (!id_p)
|
|
return false;
|
|
|
|
int32 id = atoi(id_p);
|
|
if (id <= 0)
|
|
{
|
|
handler->PSendSysMessage(LANG_INVALID_TITLE_ID, id);
|
|
handler->SetSentErrorMessage(true);
|
|
return false;
|
|
}
|
|
|
|
Player* target = handler->getSelectedPlayer();
|
|
if (!target)
|
|
{
|
|
handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
|
|
handler->SetSentErrorMessage(true);
|
|
return false;
|
|
}
|
|
|
|
// check online security
|
|
if (handler->HasLowerSecurity(target, ObjectGuid::Empty))
|
|
return false;
|
|
|
|
CharTitlesEntry const* titleInfo = sCharTitlesStore.LookupEntry(id);
|
|
if (!titleInfo)
|
|
{
|
|
handler->PSendSysMessage(LANG_INVALID_TITLE_ID, id);
|
|
handler->SetSentErrorMessage(true);
|
|
return false;
|
|
}
|
|
|
|
std::string tNameLink = handler->GetNameLink(target);
|
|
|
|
target->SetTitle(titleInfo); // to be sure that title now known
|
|
target->SetUInt32Value(PLAYER_CHOSEN_TITLE, titleInfo->bit_index);
|
|
|
|
handler->PSendSysMessage(LANG_TITLE_CURRENT_RES, id, target->getGender() == GENDER_MALE ? titleInfo->nameMale[handler->GetSessionDbcLocale()] : titleInfo->nameFemale[handler->GetSessionDbcLocale()], tNameLink.c_str());
|
|
|
|
return true;
|
|
}
|
|
|
|
static bool HandleTitlesAddCommand(ChatHandler* handler, char const* args)
|
|
{
|
|
// number or [name] Shift-click form |color|Htitle:title_id|h[name]|h|r
|
|
char* id_p = handler->extractKeyFromLink((char*)args, "Htitle");
|
|
if (!id_p)
|
|
return false;
|
|
|
|
int32 id = atoi(id_p);
|
|
if (id <= 0)
|
|
{
|
|
handler->PSendSysMessage(LANG_INVALID_TITLE_ID, id);
|
|
handler->SetSentErrorMessage(true);
|
|
return false;
|
|
}
|
|
|
|
Player* target = handler->getSelectedPlayer();
|
|
if (!target)
|
|
{
|
|
handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
|
|
handler->SetSentErrorMessage(true);
|
|
return false;
|
|
}
|
|
|
|
// check online security
|
|
if (handler->HasLowerSecurity(target, ObjectGuid::Empty))
|
|
return false;
|
|
|
|
CharTitlesEntry const* titleInfo = sCharTitlesStore.LookupEntry(id);
|
|
if (!titleInfo)
|
|
{
|
|
handler->PSendSysMessage(LANG_INVALID_TITLE_ID, id);
|
|
handler->SetSentErrorMessage(true);
|
|
return false;
|
|
}
|
|
|
|
std::string tNameLink = handler->GetNameLink(target);
|
|
|
|
char titleNameStr[80];
|
|
snprintf(titleNameStr, 80, target->getGender() == GENDER_MALE ? titleInfo->nameMale[handler->GetSessionDbcLocale()] : titleInfo->nameFemale[handler->GetSessionDbcLocale()], target->GetName().c_str());
|
|
|
|
target->SetTitle(titleInfo);
|
|
handler->PSendSysMessage(LANG_TITLE_ADD_RES, id, titleNameStr, tNameLink.c_str());
|
|
|
|
return true;
|
|
}
|
|
|
|
static bool HandleTitlesRemoveCommand(ChatHandler* handler, char const* args)
|
|
{
|
|
// number or [name] Shift-click form |color|Htitle:title_id|h[name]|h|r
|
|
char* id_p = handler->extractKeyFromLink((char*)args, "Htitle");
|
|
if (!id_p)
|
|
return false;
|
|
|
|
int32 id = atoi(id_p);
|
|
if (id <= 0)
|
|
{
|
|
handler->PSendSysMessage(LANG_INVALID_TITLE_ID, id);
|
|
handler->SetSentErrorMessage(true);
|
|
return false;
|
|
}
|
|
|
|
Player* target = handler->getSelectedPlayer();
|
|
if (!target)
|
|
{
|
|
handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
|
|
handler->SetSentErrorMessage(true);
|
|
return false;
|
|
}
|
|
|
|
// check online security
|
|
if (handler->HasLowerSecurity(target, ObjectGuid::Empty))
|
|
return false;
|
|
|
|
CharTitlesEntry const* titleInfo = sCharTitlesStore.LookupEntry(id);
|
|
if (!titleInfo)
|
|
{
|
|
handler->PSendSysMessage(LANG_INVALID_TITLE_ID, id);
|
|
handler->SetSentErrorMessage(true);
|
|
return false;
|
|
}
|
|
|
|
target->SetTitle(titleInfo, true);
|
|
|
|
std::string tNameLink = handler->GetNameLink(target);
|
|
|
|
char titleNameStr[80];
|
|
snprintf(titleNameStr, 80, target->getGender() == GENDER_MALE ? titleInfo->nameMale[handler->GetSessionDbcLocale()] : titleInfo->nameFemale[handler->GetSessionDbcLocale()], target->GetName().c_str());
|
|
|
|
handler->PSendSysMessage(LANG_TITLE_REMOVE_RES, id, titleNameStr, tNameLink.c_str());
|
|
|
|
if (!target->HasTitle(target->GetInt32Value(PLAYER_CHOSEN_TITLE)))
|
|
{
|
|
target->SetUInt32Value(PLAYER_CHOSEN_TITLE, 0);
|
|
handler->PSendSysMessage(LANG_CURRENT_TITLE_RESET, tNameLink.c_str());
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
//Edit Player KnownTitles
|
|
static bool HandleTitlesSetMaskCommand(ChatHandler* handler, char const* args)
|
|
{
|
|
if (!*args)
|
|
return false;
|
|
|
|
uint64 titles = 0;
|
|
|
|
sscanf((char*)args, UI64FMTD, &titles);
|
|
|
|
Player* target = handler->getSelectedPlayer();
|
|
if (!target)
|
|
{
|
|
handler->SendSysMessage(LANG_NO_CHAR_SELECTED);
|
|
handler->SetSentErrorMessage(true);
|
|
return false;
|
|
}
|
|
|
|
// check online security
|
|
if (handler->HasLowerSecurity(target, ObjectGuid::Empty))
|
|
return false;
|
|
|
|
uint64 titles2 = titles;
|
|
|
|
for (uint32 i = 1; i < sCharTitlesStore.GetNumRows(); ++i)
|
|
if (CharTitlesEntry const* tEntry = sCharTitlesStore.LookupEntry(i))
|
|
titles2 &= ~(uint64(1) << tEntry->bit_index);
|
|
|
|
titles &= ~titles2; // remove non-existing titles
|
|
|
|
target->SetUInt64Value(PLAYER__FIELD_KNOWN_TITLES, titles);
|
|
handler->SendSysMessage(LANG_DONE);
|
|
|
|
if (!target->HasTitle(target->GetInt32Value(PLAYER_CHOSEN_TITLE)))
|
|
{
|
|
target->SetUInt32Value(PLAYER_CHOSEN_TITLE, 0);
|
|
handler->PSendSysMessage(LANG_CURRENT_TITLE_RESET, handler->GetNameLink(target).c_str());
|
|
}
|
|
|
|
return true;
|
|
}
|
|
};
|
|
|
|
void AddSC_titles_commandscript()
|
|
{
|
|
new titles_commandscript();
|
|
}
|