07/01/2021, 02:55 PM
[INC] Load Resource
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
#include <amxmisc>
enum _:eLoad
{
FIELD1[512],
FIELD2[512],
FIELD3[512],
FIELD4[512],
FIELD5[512]
}
/**
* 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)
new iFile = fopen(szRoute, "rt")
if(!iFile)
return 0
new szLine[512]
new bool:bfound
while(!feof(iFile))
{
fgets(iFile, szLine, charsmax(szLine))
trim(szLine)
if(!szLine[0] || szLine[0] == ';' || (szLine[0] == '/' && szLine[1] == '/'))
continue
if(szLine[0] == '[')
{
if(bfound)
break
replace_all(szLine, charsmax(szLine), "[", "")
replace_all(szLine, charsmax(szLine), "]", "")
if(equal(szLine, szKey))
bfound = true
continue
}
if(bfound)
ArrayPushString(arrData, szLine)
}
fclose(iFile)
return 1
}
/**
* 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)
new iFile = fopen(szRoute, "rt")
if(!iFile)
return 0
new szLine[512]
new bool:bfound
new dt[eLoad]
while(!feof(iFile))
{
fgets(iFile, szLine, charsmax(szLine))
trim(szLine)
if(!szLine[0] || szLine[0] == ';' || (szLine[0] == '/' && szLine[1] == '/'))
continue
if(szLine[0] == '[')
{
if(bfound)
break
replace_all(szLine, charsmax(szLine), "[", "")
replace_all(szLine, charsmax(szLine), "]", "")
if(equal(szLine, szKey))
bfound = true
continue
}
if(bfound)
{
parse(szLine, dt[FIELD1], iLen, dt[FIELD2], iLen, dt[FIELD3], iLen, dt[FIELD4], iLen, dt[FIELD5], iLen)
ArrayPushArray(arrData, dt)
}
}
fclose(iFile)
return 1
}
Ejemplo de uso:
get_resource_one(const szFile[], const szKey[], &Array:arrData, iLen)
Sin comentarios:
- mi_archivo.ini
- musicas_random.sma
Cita:[MUSICAS]
sound/mi_carpeta/mi_archivo1.mp3
sound/mi_carpeta/mi_archivo2.mp3
sound/mi_carpeta/mi_archivo3.mp3
- musicas_random.sma
Código PHP:
#include <amxmodx>
#include <load_resource>
#define PLUGIN "Ejemplo de uso del INC load_resource (get_resource_one)"
#define VERSION "1.0"
#define AUTHOR "[N]drs"
#define MAX_SOUND_LEN 52
new const szFile[] = "mi_archivo.ini"
new const szKey[] = "MUSICAS"
new Array:arrSounds
new g_szSound[MAX_SOUND_LEN]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /play", "random_play")
}
public plugin_precache()
{
arrSounds = ArrayCreate(MAX_SOUND_LEN)
if(!get_resource_one(szFile, szKey, arrSounds))
set_fail_state("Error, no se pudo cargar los sonidos")
for(new i; i < ArraySize(arrSounds); i++)
{
ArrayGetString(arrSounds, i, g_szSound, charsmax(g_szSound))
precache_generic(g_szSound)
}
}
public random_play(id)
{
new iRandom = random(ArraySize(arrSounds) - 1)
ArrayGetString(arrSounds, iRandom, g_szSound, charsmax(g_szSound))
client_cmd(0, "Mp3 play %s", g_szSound)
return PLUGIN_HANDLED
}
- mi_archivo.ini
- musicas_random.sma
Cita:[MUSICAS]
sound/mi_carpeta/mi_archivo1.mp3
sound/mi_carpeta/mi_archivo2.mp3
sound/mi_carpeta/mi_archivo3.mp3
- musicas_random.sma
Código PHP:
#include <amxmodx>
// Incluimos load_resource
#include <load_resource>
#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
}
get_resource_more(const szFile[], const szKey[], &Array:arrData, iLen)
Sin comentarios:
- mi_archivo.ini
- menu_musicas.sma
Cita:[MENU MUSICAS]
"musica1" "sound/mi_carpeta/mi_archivo1.mp3"
"musica2" "sound/mi_carpeta/mi_archivo2.mp3"
"musica3" "sound/mi_carpeta/mi_archivo3.mp3"
- menu_musicas.sma
Código PHP:
#include <amxmodx>
#include <load_resource>
#define PLUGIN "Ejemplo de uso del INC load_resource (get_resource_more)"
#define VERSION "1.0"
#define AUTHOR "[N]drs"
#define MAX_LEN_STRING 50
#define NAME FIELD1
#define RUTA FIELD2
new const szFile[] = "mi_archivo.ini"
new const szKey[] = "MENU MUSICAS"
new Array:arrArray
new szSound[eLoad]
public plugin_init()
{
register_plugin(PLUGIN, VERSION, AUTHOR)
register_clcmd("say /mp", "menu_play")
}
public plugin_precache()
{
arrArray = ArrayCreate(eLoad)
get_resource_more(szFile, szKey, arrArray, MAX_LEN_STRING)
for(new i; i < ArraySize(arrArray); i++)
{
ArrayGetArray(arrArray, i, szSound)
precache_generic(szSound[RUTA])
}
}
public menu_play(id)
{
new iMenu = menu_create("Menu de Musicas", "handler_menu")
for(new i; i < ArraySize(arrArray); i++)
{
ArrayGetArray(arrArray, i, szSound)
menu_additem(iMenu, szSound[NAME])
}
menu_display(id, iMenu)
}
public handler_menu(id, menu, item)
{
if(item == MENU_EXIT)
{
menu_destroy(menu)
return PLUGIN_HANDLED
}
ArrayGetArray(arrArray, item, szSound)
client_cmd(0, "Mp3 play %s", szSound[RUTA])
menu_destroy(menu)
return PLUGIN_HANDLED
}
- mi_archivo.ini
- menu_musicas.sma
Cita:[MENU MUSICAS]
"musica1" "sound/mi_carpeta/mi_archivo1.mp3"
"musica2" "sound/mi_carpeta/mi_archivo2.mp3"
"musica3" "sound/mi_carpeta/mi_archivo3.mp3"
- menu_musicas.sma
Código PHP:
#include <amxmodx>
// Incluimos load_resource
#include <load_resource>
/* Esto ya está dentro del include, no se debe agregar en el plugin a crear,
* pero para el ejemplo hangan de cuenta que está aqui
enum _:eLoad
{
FIELD1[512],
FIELD2[512],
FIELD3[512],
FIELD4[512],
FIELD5[512]
}
*/
#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])
// Cerramos el menu
menu_destroy(menu)
return PLUGIN_HANDLED
}
Aportes
Bot Discord: CS Server Info Bot Discord 2023Plugins: Admin Expire (With support for MySql) || Simple Publicidad (Con soporte para MySql) v2.0 || Info de Ping en Color || Country Manager
Scripting: [API] Ndrs Player Model || [API] Tienda Avanzada v1.6
Includes: [API] Discord WebHook v2.5 || [INC] CZTutor v1.6 || [INC] Steam Avatar
Tutoriales/Guías: Agregar administradores desde plugin || [Reapi] Reemplazar Modelos de Armas || [TUT] Como instalar/actualizar a amxmodx 1.9.0
No doy ayuda gratis por privado, consulta en los foros.
Si vas a pagar por un plugin, te dejo aquí mi discord: [N]drs#5342