Descripción:
- Te ayuda a cargar recursos como por ejemplo mp3, mdl, entre otros desde un archivo .ini o .txt
- Puedes usar un archivo como si fuera una matriz hecha con new const
- A diferencia de otros includes similares, este no necesita instalar ningún plugin adicional
Código load_resource.inc:
Código PHP:
/********************************* *** Load Resource By [N]drs ***/
#if defined _load_resource #endinput #endif #define _load_resource
/** * Obtiene solo un campo por linea de tu archivo * * @parámetro szFile Nombre de nuestro archivo qie debe estar dentro de la carpeta /configs * @parámetro szKey Identificador que estará en nuestro archivo * @parámetro arrData Handler de array inicializado * * @return 0 en caso de fallo, 1 en caso de éxito * @nota En caso de éxito en el array se devolverá la información **/ stock get_resource_one(const szFile[], const szKey[], &Array:arrData) { if(arrData == Invalid_Array) return 0
new szRoute[100] get_configsdir(szRoute, charsmax(szRoute)) format(szRoute, charsmax(szRoute), "%s/%s", szRoute, szFile)
/** * Obtiene hasta un maximo de 5 campos por linea de tu archivo * * @parámetro szFile Nombre de nuestro archivo qie debe estar dentro de la carpeta /configs * @parámetro szKey Identificador que estará en nuestro archivo * @parámetro arrData Handler de array inicializado con eLoad * @parámetro iLen Tamaño máximo de uno de los campos en tu archivo * * @return 0 en caso de fallo, 1 en caso de éxito * @nota En caso de éxito en el array se devolverá la información **/ stock get_resource_more(const szFile[], const szKey[], &Array:arrData, iLen) { if(arrData == Invalid_Array) return 0
new szRoute[100] get_configsdir(szRoute, charsmax(szRoute)) format(szRoute, charsmax(szRoute), "%s/%s", szRoute, szFile)
#define PLUGIN "Ejemplo comentado del uso del INC load_resource (get_resource_one)" #define VERSION "1.0" #define AUTHOR "Author"
// Esto es para definir, cuan largo será la ruta de nuestro sonido #define MAX_SOUND_LEN 52
// Creamos la variable que alamcenará el nombre de nuestro archivo new const szFile[] = "mi_archivo.ini"
// Creamos la variable que alamcenará el identificador que estará en nuestro archivo new const szKey[] = "MUSICAS"
// Creamos el array en donde se guardarán todas nuestras rutas new Array:arrSounds
// Creamos una variable que almacenará una sola ruta temporalmente new g_szSound[MAX_SOUND_LEN]
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR)
// Cuando el usuario escriba /play en el chat, se llamará a la función random_play register_clcmd("say /play", "random_play") }
public plugin_precache() { // Inicializamos el Array // Importante, para usar este include, los arrays siempre deben ser inicializados en plugin_precache() arrSounds = ArrayCreate(MAX_SOUND_LEN)
/** * Obtiene solo un campo por linea de tu archivo * * @parámetro szFile Nombre de nuestro archivo qie debe estar dentro de la carpeta /configs * @parámetro szKey Identificador que estará en nuestro archivo * @parámetro arrData Handler de array inicializado * * @return 0 en caso de fallo, 1 en caso de éxito * @nota En caso de éxito en el array se devolverá la información **/
// Puesto que el stock retorna 1 o 0, lo colocaremos dentro de un if // si get_media_string() retorna 0, detendremos el plugin y mostramos un mensaje if(!get_resource_one(szFile, szKey, arrSounds)) set_fail_state("Error, no se pudo cargar los sonidos")
// Hacemos un bucle // Mientras nuestra variable i sea menor a la cantidad de datos en el array // Realizaremos algo y al terminar aumentamos el valor de la variable i en uno for(new i; i < ArraySize(arrSounds); i++) { // Obtendremos las rutas que estan en nuestro array de uno en uno ArrayGetString(arrSounds, i, g_szSound, charsmax(g_szSound)) // Precacheamos la ruta obtenida precache_generic(g_szSound) } }
// Cuando nuestra función sea llamada public random_play(id) { // Creamos una variable entera con cualquier nombre, le puse iRandom // Usamos la función random() y como párametro le pondremos cantidad de datos en el array menos uno // en iRandom se alamcenará un número aleatorio new iRandom = random(ArraySize(arrSounds) - 1)
// Usaremos ese número random para obtener una ruta al azar y guardarla en nuestra variable g_szSound ArrayGetString(arrSounds, iRandom, g_szSound, charsmax(g_szSound))
// Por último hacemos reproducir el sonido para todos los usuarios client_cmd(0, "Mp3 play %s", g_szSound)
// Esto es para que no se muestre lo que se escribio (o sea /play) return PLUGIN_HANDLED }
#define PLUGIN "Ejemplo comentado del uso del INC load_resource (get_resource_more)" #define VERSION "1.0" #define AUTHOR "[N]drs"
// Esto es para definir, cuan largo será el mayor campo #define MAX_LEN_STRING 50
// Esto es para que en vez de usar FIELD1, usemos nuestro propio identificador de campo #define NAME FIELD1 #define RUTA FIELD2
// Creamos la variable que alamcenará el nombre de nuestro archivo new const szFile[] = "mi_archivo.ini"
// Creamos la variable que alamcenará el identificador que estará en nuestro archivo new const szKey[] = "MENU MUSICAS"
// Creamos una variable de tipo array new Array:arrArray
// Creamos una variable que almacenará nuestros campos new szSound[eLoad]
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR)
// Cuando el usuario escriba /mp en el chat, se llamará a la función menu_play register_clcmd("say /mp", "menu_play") }
public plugin_precache() { // Inicializamos el Array con eLoad // Importante, para usar este include, los arrays siempre deben ser inicializados en plugin_precache() arrArray = ArrayCreate(eLoad)
/** * Obtiene hasta un maximo de 5 campos por linea de tu archivo * * @parámetro szFile Nombre de nuestro archivo qie debe estar dentro de la carpeta /configs * @parámetro szKey Identificador que estará en nuestro archivo * @parámetro arrData Handler de array inicializado con eLoad * @parámetro iLen Tamaño máximo de uno de los campos en tu archivo * * @return 0 en caso de fallo, 1 en caso de éxito * @nota En caso de éxito en el array se devolverá la información **/
// Puesto que el stock retorna 1 o 0, lo colocaremos dentro de un if // si get_media_string() retorna 0, detendremos el plugin y mostramos un mensaje if(!get_resource_more(szFile, szKey, arrArray, MAX_LEN_STRING)) set_fail_state("Error, no se pudo cargar los sonidos")
// Hacemos un bucle // Mientras nuestra variable i sea menor a la cantidad de datos en el array // Realizaremos algo y al terminar aumentamos el valor de la variable i en uno for(new i; i < ArraySize(arrArray); i++) { // Obtendremos los campos que estan en nuestro array ArrayGetArray(arrArray, i, szSound) // Precacheamos el campo que contiene la ruta precache_generic(szSound[RUTA]) } }
public menu_play(id) { // Creamos un menu new iMenu = menu_create("Menu de Musicas", "handler_menu")
// Hacemos un bucle para agregar los nombre de nuestras musicas al menu // Mientras nuestra variable i sea menor a la cantidad de datos en el array // Realizaremos algo y al terminar aumentamos el valor de la variable i en uno for(new i; i < ArraySize(arrArray); i++) { // Obtendremos los campos que estan en nuestro array ArrayGetArray(arrArray, i, szSound) // Agregamos al menu el nombre de nuestra musica mediante el campo correspondiente menu_additem(iMenu, szSound[NAME]) }
// Mostramos el menu al usuario menu_display(id, iMenu) }
public handler_menu(id, menu, item) { if(item == MENU_EXIT) { // Si el usuai dio a la opcion de salir, cerramos el menu menu_destroy(menu) return PLUGIN_HANDLED }
// Obtendremos los campos que estan en nuestro array según el item que eligió el usuario ArrayGetArray(arrArray, item, szSound) // Reproducimos la musica con la ruta que contiene el campo correspondiente client_cmd(0, "Mp3 play %s", szSound[RUTA])
Son de cierta forma diferentes, sé de la existencia de ese include, pero para las cosas que yo quería hacer no me servia, por eso hice este include
desconozco si con Settings API (load/save data to INI files) se pueda usar un archivo como si fuera una matriz hecha con new const, mi include solo es para cargar recursos usando la lógica de matriz hecha con new const, aparte de que mi include tiene poco código y no se necesita instalar ningún plugin adicional xd
Está codeado de cero por si las dudas