Mensajes: 1,455
Temas: 36
Registro en: Oct 2013
Reputación:
6
04/09/2014, 05:04 PM
(Última modificación: 01/12/2014, 05:42 PM por Destro.)
Tercer tutorial de Advanced Vault System
Para este tutorial vamos a usar la API del Advanced Vault System
Advanced Vault System
Utilizando el ejemplo de [TUT] Guardar/Cargar datos de un player (ejemplo zp) vamos a realizar diferente tipos de búsquedas.
Los Flags:
Código: FINDFLAGS_EQUAL ; Si es igual a
FINDFLAGS_CONTAIN ; Si la cadena contiene
FINDFLAGS_CASE_SENSITIVE ; Si se ignoran las mayúsculas y minúsculas
FINDFLAGS_LESS ; Si es menor a
FINDFLAGS_GREATER, ; Si es mayor a
FINDFLAGS_NOT ; Si no es
FINDFLAGS_AND ; y
FINDFLAGS_OR ; o
Ejemplo #1: (Buscar los registros en el cual el campo ammopack es igual a 5)
Código PHP: new keyindex, keynname[32]
adv_vault_find_start(g_vault, g_campos[CAMPO_AMMOPACKS], 5, FINDFLAGS_EQUAL) // Iniciamos la busqueda
while((keyindex = adv_vault_find_next(g_vault))) // Si se encuentra una coincidencia devuelve el keyindex del registro,de lo contrario 0 { adv_vault_get_keyname(g_vault, keyindex, keyname, 31) server_print("ID: (%d) - Key: (%s)", keyindex, keyname) } adv_vault_find_closed(g_vault) // Finalizamos la busqueda
Código PHP: // Ejemplo #2: (Buscar los registros en el cual el campo ammopack es mayor a 5) adv_vault_find_start(g_vault, g_campos[CAMPO_AMMOPACKS], 5, FINDFLAGS_GREATER)
// Ejemplo #3: (Buscar los registros en el cual el campo ammopack es menor a 5) adv_vault_find_start(g_vault, g_campos[CAMPO_AMMOPACKS], 5, FINDFLAGS_LESS)
// Ejemplo #4: (Buscar los registros en el cual el campo ammopack es menor o igual a 5) adv_vault_find_start(g_vault, g_campos[CAMPO_AMMOPACKS], 5, FINDFLAGS_EQUAL|FINDFLAGS_LESS)
// Ejemplo #5: (Buscar los registros en el cual el campo ammopack no es igual a 5) adv_vault_find_start(g_vault, g_campos[CAMPO_AMMOPACKS], 5, FINDFLAGS_EQUAL|FINDFLAGS_NOT)
// Ejemplo #6: (Buscar los registros en el cual el campo ammopack es igual a 5 o 10) adv_vault_find_start(g_vault, g_campos[CAMPO_AMMOPACKS], 5, FINDFLAGS_EQUAL|FINDFLAGS_OR, g_campos[CAMPO_AMMOPACKS], 10, FINDFLAGS_EQUAL)
// Ejemplo #7: (Buscar los registros en el cual el campo ammopack es igual a 5 y el campo level es igual a 1) adv_vault_find_start(g_vault, g_campos[CAMPO_AMMOPACKS], 5, FINDFLAGS_EQUAL|FINDFLAGS_AND, g_campos[CAMPO_LEVEL], 1, FINDFLAGS_EQUAL)
// Ejemplo #8: (Buscar los registros en el cual la password contenga la palabra hola) adv_vault_find_start(g_vault, g_campos[CAMPO_PASSWORD], "hola", FINDFLAGS_CONTAIN)
// Ejemplo #9: (Buscar los registros en el cual la password contenga la palabra "hola" o sea igual a "prueba") adv_vault_find_start(g_vault, g_campos[CAMPO_PASSWORD], "hola", FINDFLAGS_CONTAIN|FINDFLAGS_OR, g_campos[CAMPO_PASSWORD], "prueba", FINDFLAGS_EQUAL)
Supongo que con la explicación de los flags y esos mini ejemplos es suficiente para que lo entiendan.
Otros tutoriales:
[TUT] Guardar/Cargar datos de un player (ejemplo zp)
[TUT] Crear rank/top15 con Adv-Vault
Mensajes: 965
Temas: 45
Registro en: Oct 2013
Reputación:
19
// Ejemplo #5: (Buscar los registros en el cual el campo ammopack no es igual a 5)
adv_vault_find_start(g_vault, g_campos[CAMPO_AMMOPACKS], 5, FINDFLAGS_EQUAL|FINDFLAGS_NOT)
Equal?
Mensajes: 1,455
Temas: 36
Registro en: Oct 2013
Reputación:
6
!=
si es igual a + negado = si no es igual a
Mensajes: 1,240
Temas: 96
Registro en: Oct 2013
Reputación:
10
Mensajes: 613
Temas: 78
Registro en: Dec 2013
Reputación:
12
04/09/2014, 08:39 PM
(Última modificación: 04/09/2014, 08:39 PM por Evil Spiret.)
Al principio me confundí, pero lo leí un par de veces y lo entendí bien.
Saludos destro ; Espero que sigas aportando
NUEVO ZOMBIE PLAGUE + LVLS!! UNETE A LA COMUNIDAD
Mensajes: 1,867
Temas: 57
Registro en: Oct 2014
Reputación:
16
Destro o alguno que pueda ayudarme, te comento estoy agregando un comando para setearle puntos a un player (aunque no esté dentro del server) hago con zp_puntos <nombre>
Código PHP: new keyindex, keyname[32], g_puntos_index[33][2], sum_puntos; keyindex = adv_vault_get_keyindex(g_vault, keyname) server_print("ID (%d) - Name: (%d)", keyindex, name); adv_vault_get_field(g_vault, g_campo[PUNTOS], g_puntos_index, charsmax(g_puntos_index[])) server_print("ID (%d) - Name: (%d) - Puntos (%d/%d )", keyindex, name, g_puntos_index[keyindex][0], g_puntos_index[keyindex][1]);
name seria el <nombre> que pongo, pero solo obtengo esto
Cita:00:23:19 zp_puntos puchiasda
00:23:19 ID (93) - Name: (112)
ID (93) - Name: (112) - Puntos (0)
El ID que obtengo es el correcto, el name logicamente está mal y los puntos tambien ¿como obtengo los puntos? alguna mejor manera? gracias
Mensajes: 2,176
Temas: 99
Registro en: Dec 2013
Reputación:
42
24/02/2017, 12:54 AM
(Última modificación: 24/02/2017, 12:55 AM por CSAxel.)
Proba lo siguiente:
Código PHP: register_concmd("zp_points", "concmd__Points", ADMIN_LEVEL_A, "<target> <amount> - Give points");
public concmd__Points(const id, const level, const cid) { if(!cmd_access(id, level, cid, 2)) { return PLUGIN_HANDLED; }
new sArg1[32]; read_argv(1, sArg1, 31);
if(!sArg1[0]) { return PLUGIN_HANDLED; }
new iTarget; iTarget = cmd_target(id, sArg1, CMDTARGET_ALLOW_SELF);
if(!iTarget) { return PLUGIN_HANDLED; }
new sArg2[12]; read_argv(2, sArg2, 11);
if(!sArg2[0]) { return PLUGIN_HANDLED; }
new iAmount; iAmount = str_to_num(sArg2);
if(iAmount <= 0) { return PLUGIN_HANDLED; }
new sKeyName[32]; new iKeyId;
iKeyId = adv_vault_get_keyindex(g_Vault, sArg1); adv_vault_get_keyname(g_Vault, iKeyId, sKeyName, 31);
server_cmd("Id: %d - Nombre: %s", iKeyId, sKeyName);
// Si el campo de puntos es un Array new iPoints; iPoints = adv_vault_get_field(g_Vault, g_Columns[C_POINTS], g_Points[iTarget], sizeof(g_points[])); // Si el campo de puntos es un Int iPoints = adv_vault_get_field(g_Vault, g_Columns[C_POINTS]);
server_cmd("Id %d - Nombre: %s - Puntos: %d", iKeyId, sKeyName, iPoints);
new iTotal; iTotal = iAmount + iPoints;
server_print("Id: %d - NombrE: %s - Puntos: %d - A dar: %d - Total: %d", iKeyId, sKeyName, iPoints, iAmount, iTotal);
adv_vault_set_start(g_Vault); adv_vault_set_field(g_Vault, g_Columns[C_POINTS], iTotal); adv_vault_set_end(g_Vault, _, sKeyName);
server_print("Se han otorgado <%d> puntos al usuario <%s>", iTotal, sKeyName); return PLUGIN_HANDLED; }
Obviamente adapta a tus variables, ya que lo hice según mi instinto (?)
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Mensajes: 2,454
Temas: 14
Registro en: Oct 2013
Reputación:
51
24/02/2017, 12:57 AM
(Última modificación: 24/02/2017, 01:04 AM por Manu.)
(24/02/2017, 12:28 AM)matrix123 escribió: Destro o alguno que pueda ayudarme, te comento estoy agregando un comando para setearle puntos a un player (aunque no esté dentro del server) hago con zp_puntos <nombre>
Código PHP: new keyindex, keyname[32], g_puntos_index[33][2], sum_puntos; keyindex = adv_vault_get_keyindex(g_vault, keyname) server_print("ID (%d) - Name: (%d)", keyindex, name); adv_vault_get_field(g_vault, g_campo[PUNTOS], g_puntos_index, charsmax(g_puntos_index[])) server_print("ID (%d) - Name: (%d) - Puntos (%d/%d )", keyindex, name, g_puntos_index[keyindex][0], g_puntos_index[keyindex][1]);
name seria el <nombre> que pongo, pero solo obtengo esto
Cita:00:23:19 zp_puntos puchiasda
00:23:19 ID (93) - Name: (112)
ID (93) - Name: (112) - Puntos (0)
El ID que obtengo es el correcto, el name logicamente está mal y los puntos tambien ¿como obtengo los puntos? alguna mejor manera? gracias
Los campos son case-sensitive, por si las dudas. Si yo me apodo "Manu" y busco "manu" no va a encontrar nada.
Código PHP: register_concmd( "zp_puntos", "CommandPoints", _, "zp_puntos <name> <points>" );
public CommandPoints( iId ) { new szKeyName[32], szNum[8];
read_argv( 1, szKeyName, charsmax( szKeyName ) ); read_argv( 2, szNum, charsmax( szNum ) );
new iKey = adv_vault_get_keyindex( g_vault, szKeyName );
if( adv_vault_get_prepare( g_vault, iKey ) ) { new iPoints[ 2 ]; adv_vault_get_field( g_vault, g_campo[PUNTOS], iPoints, sizeof( iPoints ) ); adv_vault_set_start( g_vault ); iPoints[ 0 ] += str_to_num( szNum ); // No se cual de las dos celdas queres sumar iPoints[ 1 ] += str_to_num( szNum ); // No se cual de las dos celdas queres sumar adv_vault_set_field( g_vault, g_campo[PUNTOS], iPoints, sizeof( iPoints ) ); adv_vault_set_end( g_vault, iKey ); } else console_print( iId, "No se pudo sumar los puntos, usuario inexistente." ); }
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes.
Mensajes: 1,867
Temas: 57
Registro en: Oct 2014
Reputación:
16
24/02/2017, 01:47 AM
(Última modificación: 24/02/2017, 02:02 AM por matrix123.)
(24/02/2017, 12:57 AM)Treki escribió: (24/02/2017, 12:28 AM)matrix123 escribió: Destro o alguno que pueda ayudarme, te comento estoy agregando un comando para setearle puntos a un player (aunque no esté dentro del server) hago con zp_puntos <nombre>
Código PHP: new keyindex, keyname[32], g_puntos_index[33][2], sum_puntos; keyindex = adv_vault_get_keyindex(g_vault, keyname) server_print("ID (%d) - Name: (%d)", keyindex, name); adv_vault_get_field(g_vault, g_campo[PUNTOS], g_puntos_index, charsmax(g_puntos_index[])) server_print("ID (%d) - Name: (%d) - Puntos (%d/%d )", keyindex, name, g_puntos_index[keyindex][0], g_puntos_index[keyindex][1]);
name seria el <nombre> que pongo, pero solo obtengo esto
Cita:00:23:19 zp_puntos puchiasda
00:23:19 ID (93) - Name: (112)
ID (93) - Name: (112) - Puntos (0)
El ID que obtengo es el correcto, el name logicamente está mal y los puntos tambien ¿como obtengo los puntos? alguna mejor manera? gracias
Los campos son case-sensitive, por si las dudas. Si yo me apodo "Manu" y busco "manu" no va a encontrar nada.
Código PHP: register_concmd( "zp_puntos", "CommandPoints", _, "zp_puntos <name> <points>" );
public CommandPoints( iId ) { new szKeyName[32], szNum[8];
read_argv( 1, szKeyName, charsmax( szKeyName ) ); read_argv( 2, szNum, charsmax( szNum ) );
new iKey = adv_vault_get_keyindex( g_vault, szKeyName );
if( adv_vault_get_prepare( g_vault, iKey ) ) { new iPoints[ 2 ]; adv_vault_get_field( g_vault, g_campo[PUNTOS], iPoints, sizeof( iPoints ) ); adv_vault_set_start( g_vault ); iPoints[ 0 ] += str_to_num( szNum ); // No se cual de las dos celdas queres sumar iPoints[ 1 ] += str_to_num( szNum ); // No se cual de las dos celdas queres sumar adv_vault_set_field( g_vault, g_campo[PUNTOS], iPoints, sizeof( iPoints ) ); adv_vault_set_end( g_vault, iKey ); } else console_print( iId, "No se pudo sumar los puntos, usuario inexistente." ); }
son puntos humanos y puntos zombie por eso (es un array), ahora testeo
edit: lo tengo asi
Código PHP: public cmd_puntos(id, level, cid) { if(!(get_user_flags(id)&ADMIN_RCON)) return PLUGIN_HANDLED;
new arg; arg = read_argc() if(arg < 4) { server_print("[ZP v7.0] Uso: zp_puntos <nombre> <zombie/humano> <cantidad>") return PLUGIN_HANDLED; } new szKeyName[32], szNum[8], iTypè[10];
read_argv( 1, szKeyName, charsmax( szKeyName ) ); read_argv( 2, iType, charsmax(iType)) read_argv( 3, szNum, charsmax( szNum ) );
if(!equali(iType, "zombie") || !equali(iType, "humano")) { server_print("[ZP] tenes que poner ZOMBIE o HUMANO"); return; } new iKey = adv_vault_get_keyindex( g_vault, szKeyName );
if( adv_vault_get_prepare( g_vault, iKey ) ) { new iPoints[ 2 ]; adv_vault_get_field( g_vault, g_campo[PUNTOS], iPoints, sizeof( iPoints ) ); server_print("ID (%d) - Name (%s) - Puntos (%d/%d)", iKey, szKeyName, iPoints[0], iPoints[1]); adv_vault_set_start( g_vault ); if(equali(iType, "humano")) iPoints[ 0 ] += str_to_num( szNum ); // No se cual de las dos celdas queres sumar else if(equali(iType, "zombie")) iPoints[ 1 ] += str_to_num( szNum ); // No se cual de las dos celdas queres sumar server_print("ID (%d) - Name (%s) - Puntos (%d/%d)", iKey, szKeyName, iPoints[0], iPoints[1]); adv_vault_set_field( g_vault, g_campo[PUNTOS], iPoints, sizeof( iPoints ) ); adv_vault_set_end( g_vault, iKey ); } else server_print("No se pudo sumar los puntos, usuario inexistente."); }
no me compila ni tira errores, solo dice "[Finished ... seg]" pero no me compila ni dice nada más...
EDIT2: solucionado, era un error de acento (en iTypé) gracias treki
Mensajes: 2,454
Temas: 14
Registro en: Oct 2013
Reputación:
51
24/02/2017, 02:00 AM
(Última modificación: 24/02/2017, 02:00 AM por Manu.)
(24/02/2017, 01:47 AM)matrix123 escribió: son puntos humanos y puntos zombie por eso (es un array), ahora testeo
edit: lo tengo asi
Código PHP: public cmd_puntos(id, level, cid) { if(!(get_user_flags(id)&ADMIN_RCON)) return PLUGIN_HANDLED;
new arg; arg = read_argc() if(arg < 4) { server_print("[ZP v7.0] Uso: zp_puntos <nombre> <zombie/humano> <cantidad>") return PLUGIN_HANDLED; } new szKeyName[32], szNum[8], iTypè[10];
read_argv( 1, szKeyName, charsmax( szKeyName ) ); read_argv( 2, iType, charsmax(iType)) read_argv( 3, szNum, charsmax( szNum ) );
if(!equali(iType, "zombie") || !equali(iType, "humano")) { server_print("[ZP] tenes que poner ZOMBIE o HUMANO"); return; } new iKey = adv_vault_get_keyindex( g_vault, szKeyName );
if( adv_vault_get_prepare( g_vault, iKey ) ) { new iPoints[ 2 ]; adv_vault_get_field( g_vault, g_campo[PUNTOS], iPoints, sizeof( iPoints ) ); server_print("ID (%d) - Name (%s) - Puntos (%d/%d)", iKey, szKeyName, iPoints[0], iPoints[1]); adv_vault_set_start( g_vault ); if(equali(iType, "humano")) iPoints[ 0 ] += str_to_num( szNum ); // No se cual de las dos celdas queres sumar else if(equali(iType, "zombie")) iPoints[ 1 ] += str_to_num( szNum ); // No se cual de las dos celdas queres sumar server_print("ID (%d) - Name (%s) - Puntos (%d/%d)", iKey, szKeyName, iPoints[0], iPoints[1]); adv_vault_set_field( g_vault, g_campo[PUNTOS], iPoints, sizeof( iPoints ) ); adv_vault_set_end( g_vault, iKey ); } else server_print("No se pudo sumar los puntos, usuario inexistente."); }
no me compila ni tira errores, solo dice "[Finished ... seg]" pero no me compila ni dice nada más...
Código PHP: public cmd_puntos(id, level, cid) { if(!(get_user_flags(id)&ADMIN_RCON)) return PLUGIN_HANDLED;
new arg; arg = read_argc() if(arg < 4) { server_print("[ZP v7.0] Uso: zp_puntos <nombre> <zombie/humano> <cantidad>") return PLUGIN_HANDLED; } new szKeyName[32], szNum[8], szType[8];
read_argv( 1, szKeyName, charsmax( szKeyName ) ); read_argv( 2, szType, charsmax( szType ) ); read_argv( 3, szNum, charsmax( szNum ) );
if( !equali( szType, "zombie" ) && !equali( szType, "humano" ) ) { server_print( "[ZP] Tenes que poner ZOMBIE o HUMANO" ); return; } new iKey = adv_vault_get_keyindex( g_vault, szKeyName );
if( adv_vault_get_prepare( g_vault, iKey ) ) { new iPoints[ 2 ]; adv_vault_get_field( g_vault, g_campo[PUNTOS], iPoints, sizeof( iPoints ) ); server_print("ID (%d) - Name (%s) - Puntos (%d/%d)", iKey, szKeyName, iPoints[0], iPoints[1]); adv_vault_set_start( g_vault ); if( equali( szType, "humano" ) ) iPoints[ 0 ] += str_to_num( szNum ); else iPoints[ 1 ] += str_to_num( szNum ); server_print("ID (%d) - Name (%s) - Puntos (%d/%d)", iKey, szKeyName, iPoints[0], iPoints[1]); adv_vault_set_field( g_vault, g_campo[PUNTOS], iPoints, sizeof( iPoints ) ); adv_vault_set_end( g_vault, iKey ); } else server_print("No se pudo sumar los puntos, usuario inexistente."); }
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes.
Mensajes: 1,867
Temas: 57
Registro en: Oct 2014
Reputación:
16
Creo que modificaste lo mismo que yo, gracias treki !
Mensajes: 2,454
Temas: 14
Registro en: Oct 2013
Reputación:
51
24/02/2017, 02:17 AM
(Última modificación: 24/02/2017, 02:18 AM por Manu.)
(24/02/2017, 02:10 AM)matrix123 escribió: Creo que modificaste lo mismo que yo, gracias treki !
Te funcionó? Tenías mal una condición, una condición irrelevante, y mal nombre de una variable (una tenía un carácter parecido a la 'e' que no era actualmente una 'e').
No hago trabajos privados. Si necesitás ayuda, abrí un nuevo tema.
¿Buscás un ejemplo o algún modo de juego? Podés echarle un vistazo a mis aportes.
Mensajes: 1,867
Temas: 57
Registro en: Oct 2014
Reputación:
16
(24/02/2017, 02:17 AM)Treki escribió: (24/02/2017, 02:10 AM)matrix123 escribió: Creo que modificaste lo mismo que yo, gracias treki !
Te funcionó? Tenías mal una condición, una condición irrelevante, y mal nombre de una variable (una tenía un carácter parecido a la 'e' que no era actualmente una 'e').
Habia editado un comentario diciendo q tenia una è y que me funcionó, gracias
Mensajes: 965
Temas: 45
Registro en: Oct 2013
Reputación:
19
Como es para
Condicion & (condicion|condicion)
|