Reworked EVENT_COMMAND handling and addressed script commands not present during help use

This commit is contained in:
Uleat 2020-01-06 15:41:05 -05:00
parent 4e8aec136e
commit 852d951b65
8 changed files with 54 additions and 10 deletions

View File

@ -3414,6 +3414,12 @@ void bot_command_help(Client *c, const Seperator *sep)
c->Message(m_usage, "%c%s - %s", BOT_COMMAND_CHAR, command_iter.first.c_str(), command_iter.second->desc == nullptr ? "[no description]" : command_iter.second->desc); c->Message(m_usage, "%c%s - %s", BOT_COMMAND_CHAR, command_iter.first.c_str(), command_iter.second->desc == nullptr ? "[no description]" : command_iter.second->desc);
++bot_commands_shown; ++bot_commands_shown;
} }
if (parse->PlayerHasQuestSub(EVENT_BOT_COMMAND)) {
int i = parse->EventPlayer(EVENT_BOT_COMMAND, c, sep->msg, 0);
if (i >= 1) {
bot_commands_shown += i;
}
}
c->Message(m_message, "%d bot command%s listed.", bot_commands_shown, bot_commands_shown != 1 ? "s" : ""); c->Message(m_message, "%d bot command%s listed.", bot_commands_shown, bot_commands_shown != 1 ? "s" : "");
c->Message(m_note, "type %ccommand [help | usage] for more information", BOT_COMMAND_CHAR); c->Message(m_note, "type %ccommand [help | usage] for more information", BOT_COMMAND_CHAR);
} }

View File

@ -1119,14 +1119,11 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s
break; break;
} }
if (EQEmu::ProfanityManager::IsCensorshipActive())
EQEmu::ProfanityManager::RedactMessage(message);
#ifdef BOTS #ifdef BOTS
if (message[0] == BOT_COMMAND_CHAR) { if (message[0] == BOT_COMMAND_CHAR) {
if (bot_command_dispatch(this, message) == -2) { if (bot_command_dispatch(this, message) == -2) {
if (parse->PlayerHasQuestSub(EVENT_COMMAND)) { if (parse->PlayerHasQuestSub(EVENT_BOT_COMMAND)) {
int i = parse->EventPlayer(EVENT_COMMAND, this, message, 0); int i = parse->EventPlayer(EVENT_BOT_COMMAND, this, message, 0);
if (i == 0 && !RuleB(Chat, SuppressCommandErrors)) { if (i == 0 && !RuleB(Chat, SuppressCommandErrors)) {
Message(Chat::Red, "Bot command '%s' not recognized.", message); Message(Chat::Red, "Bot command '%s' not recognized.", message);
} }
@ -1140,6 +1137,10 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s
} }
#endif #endif
if (EQEmu::ProfanityManager::IsCensorshipActive()) {
EQEmu::ProfanityManager::RedactMessage(message);
}
Mob* sender = this; Mob* sender = this;
if (GetPet() && GetTarget() == GetPet() && GetPet()->FindType(SE_VoiceGraft)) if (GetPet() && GetTarget() == GetPet() && GetPet()->FindType(SE_VoiceGraft))
sender = GetPet(); sender = GetPet();

View File

@ -783,6 +783,12 @@ void command_help(Client *c, const Seperator *sep)
commands_shown++; commands_shown++;
c->Message(Chat::White, " %c%s %s", COMMAND_CHAR, cur->first.c_str(), cur->second->desc == nullptr?"":cur->second->desc); c->Message(Chat::White, " %c%s %s", COMMAND_CHAR, cur->first.c_str(), cur->second->desc == nullptr?"":cur->second->desc);
} }
if (parse->PlayerHasQuestSub(EVENT_COMMAND)) {
int i = parse->EventPlayer(EVENT_COMMAND, c, sep->msg, 0);
if (i >= 1) {
commands_shown += i;
}
}
c->Message(Chat::White, "%d command%s listed.", commands_shown, commands_shown!=1?"s":""); c->Message(Chat::White, "%d command%s listed.", commands_shown, commands_shown!=1?"s":"");
} }

View File

@ -98,7 +98,7 @@ const char *QuestEventSubroutines[_LargestEventID] = {
"EVENT_DUEL_LOSE", "EVENT_DUEL_LOSE",
"EVENT_ENCOUNTER_LOAD", "EVENT_ENCOUNTER_LOAD",
"EVENT_ENCOUNTER_UNLOAD", "EVENT_ENCOUNTER_UNLOAD",
"EVENT_SAY", "EVENT_COMMAND",
"EVENT_DROP_ITEM", "EVENT_DROP_ITEM",
"EVENT_DESTROY_ITEM", "EVENT_DESTROY_ITEM",
"EVENT_FEIGN_DEATH", "EVENT_FEIGN_DEATH",
@ -119,6 +119,7 @@ const char *QuestEventSubroutines[_LargestEventID] = {
"EVENT_DEATH_ZONE", "EVENT_DEATH_ZONE",
"EVENT_USE_SKILL", "EVENT_USE_SKILL",
"EVENT_COMBINE_VALIDATE", "EVENT_COMBINE_VALIDATE",
"EVENT_BOT_COMMAND"
}; };
PerlembParser::PerlembParser() : perl(nullptr) PerlembParser::PerlembParser() : perl(nullptr)
@ -1542,9 +1543,9 @@ void PerlembParser::ExportEventVariables(
} }
case EVENT_COMMAND: { case EVENT_COMMAND: {
ExportVar(package_name.c_str(), "text", data); Seperator sep(data);
ExportVar(package_name.c_str(), "data", "0"); ExportVar(package_name.c_str(), "command", (sep.arg[0] + 1));
ExportVar(package_name.c_str(), "langid", "0"); ExportVar(package_name.c_str(), "args", (sep.argnum > 1 ? (&data[strlen(sep.arg[0]) + 1]) : "0"));
break; break;
} }
@ -1610,6 +1611,12 @@ void PerlembParser::ExportEventVariables(
ExportVar(package_name.c_str(), "tradeskill_id", tradeskill_id.c_str()); ExportVar(package_name.c_str(), "tradeskill_id", tradeskill_id.c_str());
break; break;
} }
case EVENT_BOT_COMMAND: {
Seperator sep(data);
ExportVar(package_name.c_str(), "bot_command", (sep.arg[0] + 1));
ExportVar(package_name.c_str(), "args", (sep.argnum > 1 ? (&data[strlen(sep.arg[0]) + 1]) : "0"));
break;
}
default: { default: {
break; break;

View File

@ -87,6 +87,7 @@ typedef enum {
EVENT_DEATH_ZONE, EVENT_DEATH_ZONE,
EVENT_USE_SKILL, EVENT_USE_SKILL,
EVENT_COMBINE_VALIDATE, EVENT_COMBINE_VALIDATE,
EVENT_BOT_COMMAND,
_LargestEventID _LargestEventID
} QuestEventID; } QuestEventID;

View File

@ -124,7 +124,8 @@ const char *LuaEvents[_LargestEventID] = {
"event_spawn_zone", "event_spawn_zone",
"event_death_zone", "event_death_zone",
"event_use_skill", "event_use_skill",
"event_combine_validate" "event_combine_validate",
"event_bot_command"
}; };
extern Zone *zone; extern Zone *zone;
@ -208,6 +209,7 @@ LuaParser::LuaParser() {
PlayerArgumentDispatch[EVENT_UNHANDLED_OPCODE] = handle_player_packet; PlayerArgumentDispatch[EVENT_UNHANDLED_OPCODE] = handle_player_packet;
PlayerArgumentDispatch[EVENT_USE_SKILL] = handle_player_use_skill; PlayerArgumentDispatch[EVENT_USE_SKILL] = handle_player_use_skill;
PlayerArgumentDispatch[EVENT_COMBINE_VALIDATE] = handle_player_combine_validate; PlayerArgumentDispatch[EVENT_COMBINE_VALIDATE] = handle_player_combine_validate;
PlayerArgumentDispatch[EVENT_BOT_COMMAND] = handle_player_bot_command;
ItemArgumentDispatch[EVENT_ITEM_CLICK] = handle_item_click; ItemArgumentDispatch[EVENT_ITEM_CLICK] = handle_item_click;
ItemArgumentDispatch[EVENT_ITEM_CLICK_CAST] = handle_item_click; ItemArgumentDispatch[EVENT_ITEM_CLICK_CAST] = handle_item_click;

View File

@ -539,6 +539,25 @@ void handle_player_combine_validate(QuestInterface* parse, lua_State* L, Client*
lua_setfield(L, -2, "tradeskill_id"); lua_setfield(L, -2, "tradeskill_id");
} }
void handle_player_bot_command(QuestInterface* parse, lua_State* L, Client* client, std::string data, uint32 extra_data,
std::vector<EQEmu::Any>* extra_pointers) {
Seperator sep(data.c_str(), ' ', 10, 100, true);
std::string bot_command(sep.arg[0] + 1);
lua_pushstring(L, bot_command.c_str());
lua_setfield(L, -2, "bot_command");
luabind::adl::object args = luabind::newtable(L);
int max_args = sep.GetMaxArgNum();
for (int i = 1; i < max_args; ++i) {
if (strlen(sep.arg[i]) > 0) {
args[i] = std::string(sep.arg[i]);
}
}
args.push(L);
lua_setfield(L, -2, "args");
}
//Item //Item
void handle_item_click(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, void handle_item_click(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
std::vector<EQEmu::Any> *extra_pointers) { std::vector<EQEmu::Any> *extra_pointers) {

View File

@ -99,6 +99,8 @@ void handle_player_use_skill(QuestInterface *parse, lua_State* L, Client* client
std::vector<EQEmu::Any> *extra_pointers); std::vector<EQEmu::Any> *extra_pointers);
void handle_player_combine_validate(QuestInterface* parse, lua_State* L, Client* client, std::string data, uint32 extra_data, void handle_player_combine_validate(QuestInterface* parse, lua_State* L, Client* client, std::string data, uint32 extra_data,
std::vector<EQEmu::Any>* extra_pointers); std::vector<EQEmu::Any>* extra_pointers);
void handle_player_bot_command(QuestInterface *parse, lua_State* L, Client* client, std::string data, uint32 extra_data,
std::vector<EQEmu::Any> *extra_pointers);
//Item //Item
void handle_item_click(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data, void handle_item_click(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,