mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-11 16:51:29 +00:00
Reworked EVENT_COMMAND handling and addressed script commands not present during help use
This commit is contained in:
parent
4e8aec136e
commit
852d951b65
@ -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);
|
||||
++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_note, "type %ccommand [help | usage] for more information", BOT_COMMAND_CHAR);
|
||||
}
|
||||
|
||||
@ -1119,14 +1119,11 @@ void Client::ChannelMessageReceived(uint8 chan_num, uint8 language, uint8 lang_s
|
||||
break;
|
||||
}
|
||||
|
||||
if (EQEmu::ProfanityManager::IsCensorshipActive())
|
||||
EQEmu::ProfanityManager::RedactMessage(message);
|
||||
|
||||
#ifdef BOTS
|
||||
if (message[0] == BOT_COMMAND_CHAR) {
|
||||
if (bot_command_dispatch(this, message) == -2) {
|
||||
if (parse->PlayerHasQuestSub(EVENT_COMMAND)) {
|
||||
int i = parse->EventPlayer(EVENT_COMMAND, this, message, 0);
|
||||
if (parse->PlayerHasQuestSub(EVENT_BOT_COMMAND)) {
|
||||
int i = parse->EventPlayer(EVENT_BOT_COMMAND, this, message, 0);
|
||||
if (i == 0 && !RuleB(Chat, SuppressCommandErrors)) {
|
||||
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
|
||||
|
||||
if (EQEmu::ProfanityManager::IsCensorshipActive()) {
|
||||
EQEmu::ProfanityManager::RedactMessage(message);
|
||||
}
|
||||
|
||||
Mob* sender = this;
|
||||
if (GetPet() && GetTarget() == GetPet() && GetPet()->FindType(SE_VoiceGraft))
|
||||
sender = GetPet();
|
||||
|
||||
@ -783,6 +783,12 @@ void command_help(Client *c, const Seperator *sep)
|
||||
commands_shown++;
|
||||
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":"");
|
||||
|
||||
}
|
||||
|
||||
@ -98,7 +98,7 @@ const char *QuestEventSubroutines[_LargestEventID] = {
|
||||
"EVENT_DUEL_LOSE",
|
||||
"EVENT_ENCOUNTER_LOAD",
|
||||
"EVENT_ENCOUNTER_UNLOAD",
|
||||
"EVENT_SAY",
|
||||
"EVENT_COMMAND",
|
||||
"EVENT_DROP_ITEM",
|
||||
"EVENT_DESTROY_ITEM",
|
||||
"EVENT_FEIGN_DEATH",
|
||||
@ -119,6 +119,7 @@ const char *QuestEventSubroutines[_LargestEventID] = {
|
||||
"EVENT_DEATH_ZONE",
|
||||
"EVENT_USE_SKILL",
|
||||
"EVENT_COMBINE_VALIDATE",
|
||||
"EVENT_BOT_COMMAND"
|
||||
};
|
||||
|
||||
PerlembParser::PerlembParser() : perl(nullptr)
|
||||
@ -1542,9 +1543,9 @@ void PerlembParser::ExportEventVariables(
|
||||
}
|
||||
|
||||
case EVENT_COMMAND: {
|
||||
ExportVar(package_name.c_str(), "text", data);
|
||||
ExportVar(package_name.c_str(), "data", "0");
|
||||
ExportVar(package_name.c_str(), "langid", "0");
|
||||
Seperator sep(data);
|
||||
ExportVar(package_name.c_str(), "command", (sep.arg[0] + 1));
|
||||
ExportVar(package_name.c_str(), "args", (sep.argnum > 1 ? (&data[strlen(sep.arg[0]) + 1]) : "0"));
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1610,6 +1611,12 @@ void PerlembParser::ExportEventVariables(
|
||||
ExportVar(package_name.c_str(), "tradeskill_id", tradeskill_id.c_str());
|
||||
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: {
|
||||
break;
|
||||
|
||||
@ -87,6 +87,7 @@ typedef enum {
|
||||
EVENT_DEATH_ZONE,
|
||||
EVENT_USE_SKILL,
|
||||
EVENT_COMBINE_VALIDATE,
|
||||
EVENT_BOT_COMMAND,
|
||||
_LargestEventID
|
||||
} QuestEventID;
|
||||
|
||||
|
||||
@ -124,7 +124,8 @@ const char *LuaEvents[_LargestEventID] = {
|
||||
"event_spawn_zone",
|
||||
"event_death_zone",
|
||||
"event_use_skill",
|
||||
"event_combine_validate"
|
||||
"event_combine_validate",
|
||||
"event_bot_command"
|
||||
};
|
||||
|
||||
extern Zone *zone;
|
||||
@ -208,6 +209,7 @@ LuaParser::LuaParser() {
|
||||
PlayerArgumentDispatch[EVENT_UNHANDLED_OPCODE] = handle_player_packet;
|
||||
PlayerArgumentDispatch[EVENT_USE_SKILL] = handle_player_use_skill;
|
||||
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_CAST] = handle_item_click;
|
||||
|
||||
@ -539,6 +539,25 @@ void handle_player_combine_validate(QuestInterface* parse, lua_State* L, Client*
|
||||
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
|
||||
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) {
|
||||
|
||||
@ -99,6 +99,8 @@ void handle_player_use_skill(QuestInterface *parse, lua_State* L, Client* client
|
||||
std::vector<EQEmu::Any> *extra_pointers);
|
||||
void handle_player_combine_validate(QuestInterface* parse, lua_State* L, Client* client, std::string data, uint32 extra_data,
|
||||
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
|
||||
void handle_item_click(QuestInterface *parse, lua_State* L, Client* client, EQEmu::ItemInstance* item, Mob *mob, std::string data, uint32 extra_data,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user