#include "../client.h" void command_zonevariable(Client *c, const Seperator *sep) { const uint16 arguments = sep->argnum; if (!arguments) { c->Message(Chat::White, "Usage: #zonevariable clear - Clear all zone variables"); c->Message(Chat::White, "Usage: #zonevariable delete [Variable Name] - Delete a zone variable"); c->Message(Chat::White, "Usage: #zonevariable set [Variable Name] [Variable Value] - Set a zone variable"); c->Message(Chat::White, "Usage: #zonevariable view [Variable Name] - View a zone variable"); c->Message(Chat::White, "Note: You can have spaces in variable names and values by wrapping in double quotes like this"); c->Message(Chat::White, "Example: #zonevariable set \"Test Variable\" \"Test Value\""); c->Message(Chat::White, "Note: Variable Value is optional and can be set to empty by not providing a value"); return; } const char* action = arguments >= 1 ? sep->arg[1] : ""; const bool is_clear = !strcasecmp(action, "clear"); const bool is_delete = !strcasecmp(action, "delete"); const bool is_set = !strcasecmp(action, "set"); const bool is_view = !strcasecmp(action, "view"); if (!is_clear && !is_delete && !is_set && !is_view) { c->Message(Chat::White, "Usage: #zonevariable clear - Clear all zone variables"); c->Message(Chat::White, "Usage: #zonevariable delete [Variable Name] - Delete a zone variable"); c->Message(Chat::White, "Usage: #zonevariable set [Variable Name] [Variable Value] - Set a zone variable"); c->Message(Chat::White, "Usage: #zonevariable view [Variable Name] - View a zone variable"); c->Message(Chat::White, "Note: You can have spaces in variable names and values by wrapping in double quotes like this"); c->Message(Chat::White, "Example: #zonevariable set \"Test Variable\" \"Test Value\""); c->Message(Chat::White, "Note: Variable Value is optional and can be set to empty by not providing a value"); return; } if (is_clear) { const bool cleared = zone->ClearVariables(); c->Message(Chat::White, cleared ? "Cleared all zone variables." : "There are no zone variables to clear."); return; } if (is_delete) { const std::string variable_name = arguments >= 2 ? sep->argplus[2] : ""; if (variable_name.empty() || !zone->VariableExists(variable_name)) { c->Message(Chat::White, fmt::format("A zone variable named '{}' does not exist.", variable_name).c_str()); return; } zone->DeleteVariable(variable_name); c->Message(Chat::White, fmt::format("Deleted a zone variable named '{}'.", variable_name).c_str()); return; } if (is_set) { const std::string variable_name = arguments >= 2 ? sep->arg[2] : ""; const std::string variable_value = arguments >= 3 ? sep->arg[3] : ""; zone->SetVariable(variable_name, variable_value); c->Message(Chat::White, fmt::format("Set a zone variable named '{}' to a value of '{}'.", variable_name, variable_value).c_str()); return; } if (is_view) { const auto& l = zone->GetVariables(); const std::string search_criteria = arguments >= 2 ? sep->argplus[2] : ""; uint32 variable_count = 0; uint32 variable_number = 1; for (const auto& e : l) { if (search_criteria.empty() || Strings::Contains(Strings::ToLower(e), Strings::ToLower(search_criteria))) { c->Message(Chat::White, fmt::format( "Variable {} | Name: {} Value: {} | {}", variable_number, e, zone->GetVariable(e), Saylink::Silent(fmt::format("#zonevariable delete {}", e), "Delete") ).c_str()); variable_count++; variable_number++; } } if (!variable_count) { c->Message(Chat::White, fmt::format( "There are no zone variables{}.", (!search_criteria.empty() ? fmt::format(" matching '{}'", search_criteria) : "") ).c_str()); return; } c->Message(Chat::White, fmt::format( "There {} {} zone variable{}{}, would you like to {} zone variables?", variable_count != 1 ? "are" : "is", variable_count, variable_count != 1 ? "s" : "", (!search_criteria.empty() ? fmt::format(" matching '{}'", search_criteria) : ""), Saylink::Silent("#zonevariable clear", "clear") ).c_str()); } }