#pragma semicolon 1
#include <amxmodx>
#include <reapi>
#include <json>
new const PLUGIN_VERSION[] = "0.0.1";
new const CONFIG_PATH[] = "/GameName/GameName.json";
#define MAX_GAME_NAME_LENGTH 64
enum Config_Struct {
bool:DYNAMIC_ENABLED,
Float:CHANGE_INTERVAL,
Array:NAMES_ARRAY
};
new SettingsConfig[Config_Struct],
g_NamePtr;
public plugin_init() {
register_plugin("[ReAPI] Game Name Changer", PLUGIN_VERSION, "mIDnight");
SettingsConfig[NAMES_ARRAY] = ArrayCreate(MAX_GAME_NAME_LENGTH);
LoadJsonConfig();
if(SettingsConfig[DYNAMIC_ENABLED]) {
SetGameName(true);
set_task(SettingsConfig[CHANGE_INTERVAL], "task_Change", .flags = "b");
}
else {
SetGameName(false);
}
}
public plugin_end() {
ArrayDestroy(SettingsConfig[NAMES_ARRAY]);
}
SetGameName(bool:dynamicMode) {
new game_name[MAX_GAME_NAME_LENGTH];
new index = dynamicMode ? g_NamePtr : 0;
ArrayGetString(SettingsConfig[NAMES_ARRAY], index, game_name, charsmax(game_name));
set_member_game(m_GameDesc, game_name);
if(dynamicMode) {
if(++g_NamePtr >= ArraySize(SettingsConfig[NAMES_ARRAY])) {
g_NamePtr = 0;
}
}
}
public task_Change() {
SetGameName(true);
}
LoadJsonConfig() {
new path[PLATFORM_MAX_PATH];
get_localinfo("amxx_configsdir", path, charsmax(path));
add(path, charsmax(path), CONFIG_PATH);
new JSON:settings = json_parse(path, true, true);
if(settings == Invalid_JSON) {
set_fail_state("[GameName] JSON syntax error in config file (%s)", path);
}
if(!json_is_object(settings)) {
set_fail_state("[GameName] JSON config must contain a valid object (%s).", path);
json_free(settings);
}
SettingsConfig[DYNAMIC_ENABLED] = json_object_get_bool(settings, "game_name_settings.dynamic_enabled", .dot_not = true);
SettingsConfig[CHANGE_INTERVAL] = json_object_get_real(settings, "game_name_settings.change_interval", .dot_not = true);
new JSON:names_array = json_object_get_value(settings, "game_name_settings.game_names", .dot_not = true);
if(json_is_array(names_array)) {
new buffer[MAX_GAME_NAME_LENGTH];
new num_names = json_array_get_count(names_array);
for(new i = 0; i < num_names; i++) {
new JSON:entry = json_array_get_value(names_array, i);
if(json_is_string(entry) && json_get_string(entry, buffer, charsmax(buffer)) && buffer[0]) {
ArrayPushString(SettingsConfig[NAMES_ARRAY], buffer);
}
json_free(entry);
}
}
if(names_array != Invalid_JSON) {
json_free(names_array);
}
json_free(settings);
server_print("[GameName] Configuration loaded successfully.");
}