本文整理汇总了C++中ExecuteCommandInTable函数的典型用法代码示例。如果您正苦于以下问题:C++ ExecuteCommandInTable函数的具体用法?C++ ExecuteCommandInTable怎么用?C++ ExecuteCommandInTable使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了ExecuteCommandInTable函数的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ASSERT
int ChatHandler::ParseCommands(const char* text, WorldSession *session)
{
m_session = session;
ASSERT(text);
ASSERT(*text);
//if(m_session->GetSecurity() == 0)
// return 0;
if(text[0] != '!' && text[0] != '.')
return 0;
// ignore single . and ! in line
if(strlen(text) < 2)
return 0;
// ignore messages staring from many dots.
if(text[0] == '.' && text[1] == '.' || text[0] == '!' && text[1] == '!')
return 0;
text++;
if(!ExecuteCommandInTable(getCommandTable(), text))
{
WorldPacket data;
FillSystemMessageData(&data, m_session, "There is no such command.");
m_session->SendPacket(&data);
}
return 1;
}
示例2: ParseCommands
int ChatHandler::ParseCommands(const char* text, WorldSession *session)
{
if (!session)
return 0;
if(!*text)
return 0;
if(session->GetPermissionCount() == 0)
return 0;
if(text[0] != '!' && text[0] != '.') // let's not confuse users
return 0;
/* skip '..' :P that pisses me off */
if(text[1] == '.')
return 0;
text++;
if(!ExecuteCommandInTable(CommandTableStorage::getSingleton().Get(), text, session))
{
SystemMessage(session, "There is no such command, or you do not have access to it.");
}
return 1;
}
示例3: while
bool ChatHandler::ExecuteCommandInTable(ChatCommand *table, uint8* text)
{
char *cmd = (char*)text;
uint32 AcctLvl = m_pClient->getAccountLvl();
while (*text != ' ' && *text != '\0') text++; // skip command
if(*text != '\0')
{
*text = '\0';
text++;
}
while (*text == ' ') text++; // skip whitespace
if(*cmd == '\0')
return false;
for(uint32 i = 0; table[i].Name != NULL; i++)
{
if(!hasStringAbbr(table[i].Name, cmd))
continue;
if(AcctLvl < table[i].SecurityLevel)
continue;
if(table[i].ChildCommands != NULL)
{
if(!ExecuteCommandInTable(table[i].ChildCommands, text))
{
if(table[i].Help != "")
SendMultilineMessage(table[i].Help.c_str());
else
{
wowWData data;
FillMessageData(&data, 0x09, m_pClient, (uint8*)"There is no such subcommand.");
m_pClient->SendMsg(&data);
}
}
return true;
}
if(!(this->*(table[i].Handler))(text))
{
if(table[i].Help != "")
SendMultilineMessage(table[i].Help.c_str());
else
{
wowWData data;
FillMessageData(&data, 0x09, m_pClient, (uint8*)"Incorrect syntax.");
m_pClient->SendMsg(&data);
}
}
return true;
}
return false;
}
示例4: _ParseCommands
bool ChatHandler::_ParseCommands(char const* text)
{
if (ExecuteCommandInTable(getCommandTable(), text, text))
return true;
// Pretend commands don't exist for regular players
if (m_session && !m_session->HasPermission(rbac::RBAC_PERM_COMMANDS_NOTIFY_COMMAND_NOT_FOUND_ERROR))
return false;
// Send error message for GMs
SendSysMessage(LANG_NO_CMD);
SetSentErrorMessage(true);
return true;
}
示例5: assert
int ChatHandler::ParseCommands(uint8* text, uint16 text_length)
{
assert(text);
// assert(*text);
if(text[0] != '!' && text[0] != '.') // let's not confuse users
return 0;
text++;
if(!ExecuteCommandInTable(LoadHelp(false), text))
{
wowWData data;
FillMessageData(&data, 0x09, m_pClient, (uint8*)"There is no such command.");
m_pClient->SendMsg(&data);
}
return 1;
}
示例6: ASSERT
bool ChatHandler::ParseCommands(const char* text)
{
ASSERT(text);
ASSERT(*text);
std::string fullcmd = text;
if (m_session && AccountMgr::IsPlayerAccount(m_session->GetSecurity()) && !sWorld->getBoolConfig(CONFIG_ALLOW_PLAYER_COMMANDS))
return false;
/// chat case (.command or !command format)
if (m_session)
{
if (text[0] != '!' && text[0] != '.')
return false;
}
/// ignore single . and ! in line
if (strlen(text) < 2)
return false;
// original `text` can't be used. It content destroyed in command code processing.
/// ignore messages staring from many dots.
if ((text[0] == '.' && text[1] == '.') || (text[0] == '!' && text[1] == '!'))
return false;
/// skip first . or ! (in console allowed use command with . and ! and without its)
if (text[0] == '!' || text[0] == '.')
++text;
if (m_session && AccountMgr::IsPlayerAccount(m_session->GetSecurity()) && m_session->HasCommandsCooldown())
return false;
if (!ExecuteCommandInTable(getCommandTable(), text, fullcmd))
{
if (m_session && AccountMgr::IsPlayerAccount(m_session->GetSecurity()))
return false;
SendSysMessage(LANG_NO_CMD);
}
return true;
}
示例7: ASSERT
bool ChatHandler::ParseCommands(char const* text)
{
ASSERT(text);
ASSERT(*text);
std::string fullcmd = text;
/// chat case (.command or !command format)
if (m_session)
{
if (text[0] != '!' && text[0] != '.')
return false;
}
/// ignore single . and ! in line
if (strlen(text) < 2)
return false;
// original `text` can't be used. It content destroyed in command code processing.
/// ignore messages staring from many dots.
if ((text[0] == '.' && text[1] == '.') || (text[0] == '!' && text[1] == '!'))
return false;
/// skip first . or ! (in console allowed use command with . and ! and without its)
if (text[0] == '!' || text[0] == '.')
++text;
if (!ExecuteCommandInTable(getCommandTable(), text, fullcmd))
{
#ifdef ELUNA
if (!sEluna->OnCommand(GetSession() ? GetSession()->GetPlayer() : NULL, text))
return true;
#endif
if (m_session && !m_session->HasPermission(rbac::RBAC_PERM_COMMANDS_NOTIFY_COMMAND_NOT_FOUND_ERROR))
return false;
SendSysMessage(LANG_NO_CMD);
}
return true;
}
示例8: while
bool ChatHandler::ExecuteCommandInTable(std::vector<ChatCommand> const& table, const char* text, std::string const& fullcmd)
{
char const* oldtext = text;
std::string cmd = "";
while (*text != ' ' && *text != '\0')
{
cmd += *text;
++text;
}
while (*text == ' ') ++text;
for (uint32 i = 0; i < table.size(); ++i)
{
if (!hasStringAbbr(table[i].Name, cmd.c_str()))
continue;
bool match = false;
if (strlen(table[i].Name) > cmd.length())
{
for (uint32 j = 0; j < table.size(); ++j)
{
if (!hasStringAbbr(table[j].Name, cmd.c_str()))
continue;
if (strcmp(table[j].Name, cmd.c_str()) == 0)
{
match = true;
break;
}
}
}
if (match)
continue;
// select subcommand from child commands list
if (!table[i].ChildCommands.empty())
{
if (!ExecuteCommandInTable(table[i].ChildCommands, text, fullcmd))
{
#ifdef ELUNA
if (!sEluna->OnCommand(GetSession() ? GetSession()->GetPlayer() : NULL, oldtext))
return true;
#endif
if (text[0] != '\0')
SendSysMessage(LANG_NO_SUBCMD);
else
SendSysMessage(LANG_CMD_SYNTAX);
ShowHelpForCommand(table[i].ChildCommands, text);
}
return true;
}
// must be available and have handler
if (!table[i].Handler || !isAvailable(table[i]))
continue;
SetSentErrorMessage(false);
// table[i].Name == "" is special case: send original command to handler
if ((table[i].Handler)(this, table[i].Name[0] != '\0' ? text : oldtext))
{
if (!m_session) // ignore console
return true;
Player* player = m_session->GetPlayer();
if (!AccountMgr::IsPlayerAccount(m_session->GetSecurity()))
{
ObjectGuid guid = player->GetTarget();
uint32 areaId = player->GetAreaId();
std::string areaName = "Unknown";
std::string zoneName = "Unknown";
if (AreaTableEntry const* area = GetAreaEntryByAreaID(areaId))
{
int locale = GetSessionDbcLocale();
areaName = area->area_name[locale];
if (AreaTableEntry const* zone = GetAreaEntryByAreaID(area->zone))
zoneName = zone->area_name[locale];
}
sLog->outCommand(m_session->GetAccountId(), "Command: %s [Player: %s (%s) (Account: %u) X: %f Y: %f Z: %f Map: %u (%s) Area: %u (%s) Zone: %s Selected: %s (%s)]",
fullcmd.c_str(), player->GetName().c_str(), player->GetGUID().ToString().c_str(),
m_session->GetAccountId(), player->GetPositionX(), player->GetPositionY(),
player->GetPositionZ(), player->GetMapId(),
player->FindMap() ? player->FindMap()->GetMapName() : "Unknown",
areaId, areaName.c_str(), zoneName.c_str(),
(player->GetSelectedUnit()) ? player->GetSelectedUnit()->GetName().c_str() : "",
guid.ToString().c_str());
}
}
// some commands have custom error messages. Don't send the default one in these cases.
else if (!HasSentErrorMessage())
{
if (!table[i].Help.empty())
SendSysMessage(table[i].Help.c_str());
else
SendSysMessage(LANG_CMD_SYNTAX);
//.........这里部分代码省略.........
示例9: while
bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, const std::string& fullcmd)
{
char const* oldtext = text;
std::string cmd = "";
while (*text != ' ' && *text != '\0')
{
cmd += *text;
++text;
}
while (*text == ' ') ++text;
for (uint32 i = 0; table[i].Name != NULL; ++i)
{
if (!hasStringAbbr(table[i].Name, cmd.c_str()))
continue;
bool match = false;
if (strlen(table[i].Name) > cmd.length())
{
for (uint32 j = 0; table[j].Name != NULL; ++j)
{
if (!hasStringAbbr(table[j].Name, cmd.c_str()))
continue;
if (strcmp(table[j].Name, cmd.c_str()) != 0)
continue;
else
{
match = true;
break;
}
}
}
if (match)
continue;
// select subcommand from child commands list
if (table[i].ChildCommands != NULL)
{
if (!ExecuteCommandInTable(table[i].ChildCommands, text, fullcmd))
{
if (text && text[0] != '\0')
SendSysMessage(LANG_NO_SUBCMD);
else
SendSysMessage(LANG_CMD_SYNTAX);
ShowHelpForCommand(table[i].ChildCommands, text);
}
return true;
}
// must be available and have handler
if (!table[i].Handler || !isAvailable(table[i]))
continue;
SetSentErrorMessage(false);
// table[i].Name == "" is special case: send original command to handler
if ((table[i].Handler)(this, table[i].Name[0] != '\0' ? text : oldtext))
{
if (!AccountMgr::IsPlayerAccount(table[i].SecurityLevel))
{
// chat case
if (m_session)
{
Player* p = m_session->GetPlayer();
uint64 sel_guid = p->GetSelection();
sLog->outCommand(m_session->GetAccountId(), "Command: %s [Player: %s (Account: %u) X: %f Y: %f Z: %f Map: %u Selected %s: %s (GUID: %u)]",
fullcmd.c_str(), p->GetName().c_str(), m_session->GetAccountId(), p->GetPositionX(), p->GetPositionY(), p->GetPositionZ(), p->GetMapId(),
GetLogNameForGuid(sel_guid), (p->GetSelectedUnit()) ? p->GetSelectedUnit()->GetName().c_str() : "", GUID_LOPART(sel_guid));
}
}
}
// some commands have custom error messages. Don't send the default one in these cases.
else if (!HasSentErrorMessage())
{
if (!table[i].Help.empty())
SendSysMessage(table[i].Help.c_str());
else
SendSysMessage(LANG_CMD_SYNTAX);
}
return true;
}
return false;
}
示例10: while
bool ChatHandler::ExecuteCommandInTable(ChatCommand *table, const char* text, WorldSession *m_session)
{
std::string cmd = "";
// get command
while (*text != ' ' && *text != '\0')
{
cmd += *text;
text++;
}
while (*text == ' ') text++; // skip whitespace
if(!cmd.length())
return false;
for(uint32 i = 0; table[i].Name != NULL; i++)
{
if(!hasStringAbbr(table[i].Name, cmd.c_str()))
continue;
if(!m_session->CanUseCommand(table[i].CommandGroup))
continue;
if(table[i].ChildCommands != NULL)
{
if(!ExecuteCommandInTable(table[i].ChildCommands, text, m_session))
{
if(table[i].Help != "")
SendMultilineMessage(m_session, table[i].Help.c_str());
else
{
GreenSystemMessage(m_session, "Available Subcommands:");
for(uint32 k=0; table[i].ChildCommands[k].Name;k++)
{
if(m_session->CanUseCommand(table[i].ChildCommands[k].CommandGroup))
BlueSystemMessage(m_session, " %s - %s", table[i].ChildCommands[k].Name, table[i].ChildCommands[k].Help.size() ? table[i].ChildCommands[k].Help.c_str() : "No Help Available");
}
}
}
return true;
}
// Check for field-based commands
if(table[i].Handler == NULL && (table[i].MaxValueField || table[i].NormalValueField))
{
bool result = false;
if(strlen(text) == 0)
{
RedSystemMessage(m_session, "No values specified.");
}
if(table[i].ValueType == 2)
result = CmdSetFloatField(m_session, table[i].NormalValueField, table[i].MaxValueField, table[i].Name, text);
else
result = CmdSetValueField(m_session, table[i].NormalValueField, table[i].MaxValueField, table[i].Name, text);
if(!result)
RedSystemMessage(m_session, "Must be in the form of (command) <value>, or, (command) <value> <maxvalue>");
}
else
{
if(!(this->*(table[i].Handler))(text, m_session))
{
if(table[i].Help != "")
SendMultilineMessage(m_session, table[i].Help.c_str());
else
{
RedSystemMessage(m_session, "Incorrect syntax specified. Try .help %s for the correct syntax.", table[i].Name);
}
}
}
return true;
}
return false;
}
示例11: while
bool ChatHandler::ExecuteCommandInTable(ChatCommand *table, const char* text)
{
char const* oldtext = text;
std::string fullcmd = text; // original `text` can't be used. It content destroyed in command code processing.
std::string cmd = "";
while (*text != ' ' && *text != '\0')
{
cmd += *text;
text++;
}
while (*text == ' ') text++;
if(!cmd.length())
return false;
for(uint32 i = 0; table[i].Name != NULL; i++)
{
// allow pass "" command name in table
if(strlen(table[i].Name) && !hasStringAbbr(table[i].Name, cmd.c_str()))
continue;
// select subcommand from child commands list
if(table[i].ChildCommands != NULL)
{
if(!ExecuteCommandInTable(table[i].ChildCommands, text))
{
if(table[i].Help != "")
SendSysMultilineMessage(table[i].Help.c_str());
else
SendSysMessage(LANG_NO_SUBCMD);
}
return true;
}
// check security level only for simple command (without child commands)
if(m_session->GetSecurity() < table[i].SecurityLevel)
continue;
// table[i].Name == "" is special case: send original command to handler
if((this->*(table[i].Handler))(strlen(table[i].Name)!=0 ? text : oldtext))
{
if(table[i].SecurityLevel > 0)
{
Player* p = m_session->GetPlayer();
uint64 sel_guid = p->GetSelection();
sLog.outCommand("Command: %s [Player: %s (Account: %u) X: %f Y: %f Z: %f Map: %u Selected: %s (GUID: %u)]",
fullcmd.c_str(),p->GetName(),m_session->GetAccountId(),p->GetPositionX(),p->GetPositionY(),p->GetPositionZ(),p->GetMapId(),
(GUID_HIPART(sel_guid)==HIGHGUID_UNIT ? "creature" : (sel_guid !=0 ? "player" : "none")),
GUID_LOPART(sel_guid));
}
}
else
{
if(table[i].Help != "")
SendSysMultilineMessage(table[i].Help.c_str());
else
SendSysMessage(LANG_CMD_SYNTAX);
}
return true;
}
return false;
}
示例12: while
bool ChatHandler::ExecuteCommandInTable(ChatCommand* table, const char* text, std::string const& fullcmd)
{
char const* oldtext = text;
std::string cmd = "";
while (*text != ' ' && *text != '\0')
{
cmd += *text;
++text;
}
while (*text == ' ') ++text;
for (uint32 i = 0; table[i].Name != NULL; ++i)
{
if (!hasStringAbbr(table[i].Name, cmd.c_str()))
continue;
bool match = false;
if (strlen(table[i].Name) > cmd.length())
{
for (uint32 j = 0; table[j].Name != NULL; ++j)
{
if (!hasStringAbbr(table[j].Name, cmd.c_str()))
continue;
if (strcmp(table[j].Name, cmd.c_str()) == 0)
{
match = true;
break;
}
}
}
if (match)
continue;
// select subcommand from child commands list
if (table[i].ChildCommands != NULL)
{
if (!ExecuteCommandInTable(table[i].ChildCommands, text, fullcmd))
{
if (text[0] != '\0')
SendSysMessage(LANG_NO_SUBCMD);
else
SendSysMessage(LANG_CMD_SYNTAX);
ShowHelpForCommand(table[i].ChildCommands, text);
}
return true;
}
// must be available and have handler
if (!table[i].Handler || !isAvailable(table[i]))
continue;
SetSentErrorMessage(false);
// table[i].Name == "" is special case: send original command to handler
if ((table[i].Handler)(this, table[i].Name[0] != '\0' ? text : oldtext))
{
if (!m_session) // ignore console
return true;
Player* player = m_session->GetPlayer();
if (!AccountMgr::IsPlayerAccount(m_session->GetSecurity()))
{
uint64 guid = player->GetTarget();
uint32 areaId = player->GetAreaId();
std::string areaName = "Unknown";
std::string zoneName = "Unknown";
if (AreaTableEntry const* area = GetAreaEntryByAreaID(areaId))
{
int locale = GetSessionDbcLocale();
areaName = area->area_name[locale];
if (AreaTableEntry const* zone = GetAreaEntryByAreaID(area->zone))
zoneName = zone->area_name[locale];
}
sLog->outCommand(m_session->GetAccountId(), "Command: %s [Player: %s (Guid: %u) (Account: %u) X: %f Y: %f Z: %f Map: %u (%s) Area: %u (%s) Zone: %s Selected %s: %s (GUID: %u)]",
fullcmd.c_str(), player->GetName().c_str(), GUID_LOPART(player->GetGUID()),
m_session->GetAccountId(), player->GetPositionX(), player->GetPositionY(),
player->GetPositionZ(), player->GetMapId(),
player->GetMap() ? player->GetMap()->GetMapName() : "Unknown",
areaId, areaName.c_str(), zoneName.c_str(), GetLogNameForGuid(guid),
(player->GetSelectedUnit()) ? player->GetSelectedUnit()->GetName().c_str() : "",
GUID_LOPART(guid));
if ((sIRC->logmask & 2) != 0)
{
std::string logchan = "#";
logchan += sIRC->logchan;
std::stringstream ss;
ss << sIRC->iLog.GetLogDateTimeStr() << ": [ " << player->GetName() << "(" << GetSession()->GetSecurity() << ") ] Used Command: [ " << fullcmd << " ] Target Guid: [" << GUID_LOPART(guid) << "]";
sIRC->Send_IRC_Channel(logchan,ss.str().c_str(), true, "LOG");
}
}
}
// some commands have custom error messages. Don't send the default one in these cases.
else if (!HasSentErrorMessage())
{
if (!table[i].Help.empty())
//.........这里部分代码省略.........