AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Guías/Tutoriales (https://forums.alliedmods.net/forumdisplay.php?f=137)
-   -   [TUT] Modificar una linea de un archivo (https://forums.alliedmods.net/showthread.php?t=203238)

rak 12-16-2012 17:55

[TUT] Modificar una linea de un archivo
 
Buenas e.e.. aca vengo con un tutorial simple de como modificar una linea de un archivo; solo voy a explicar lo que tiene relacion con este tema; el resto no lo explicare

PHP Code:

#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Tutorial"
#define VERSION "1.0"
#define AUTHOR "[R]ak"


public plugin_init() {
    
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
register_concmd("amx_add_immunity""cmdAddImmunity"ADMIN_RCON"<target>")
        
}

public 
cmdAddImmunity(id,level,cid) {
    
    if(!
cmd_access(idlevelcid2))  
        return
        
    new 
Name[32], player
    
    read_argv
(1Namecharsmax(Name))
    
    
player cmd_target(idNameCMDTARGET_NO_BOTS)
    
    if(!
player)
        return
        
    
/* ahora empezamos el tutorial
    
    .- vamos a ver un ejemplo para agregarle a un admin el flag immunity
    
    */
    
    
if(get_user_flags(id) & ADMIN_IMMUNITY) {
        
        
console_print(id"[AMXX] El player seleccionado ya posee inmunidad")
        
        return
        
    }
    
    new 
Authid[35]
    
    
get_user_authid(idAuthidcharsmax(Authid))
        
    new 
ConfigDir[64// creamos una variable para almacenar la ubicacion del archivo users.ini
    
    
get_configsdir(ConfigDircharsmax(ConfigDir)) // obtenemos la carpeta configs ( normalmente es addons/amxmodx/configs )
    
    
add(ConfigDircharsmax(ConfigDir), "/users.ini"// despues de obtener la carpeta le agregamos el nombre del archivo que queremos obtener los datos ( normalmente users.ini )
    
    
new FileLineData[128], Data1[35], Data2[35], Data3[30], Data4[5]
    
    
// File va a almacenar el handler para obtener los datos del archivo
    // Line va contener las lineas transcurridas hasta llegar a la que queremos modificar
    // Data va a almacenar toda la linea
    // Data1 va a almacenar el steamid
    // Data2 va a almacenar la contraseña( en este caso normalmente no tiene )
    // Data3 va a almacenar los flags de accesos del usuario
    // Data4 va a almacenar los flags de su cuenta
    
    
File fopen(ConfigDir "rt"// abrimos el archivo con los parametros "rt" los cuales significa que vamos a leer/texto
    
    
while(!feof(File)) { // mientras que no este en el final del archivo
        
        
fgets(FileDatacharsmax(Data)) // obtenemos la linea
        
        
trim(Data// removemos los espacios principio/fin
        
        
Line++ // sumamos 1 linea
        
        
if (Data[0] == ';' || !Data[0]) // chequeamos que si no esta habilitado el admin lo ignore o que si la linea esta vacia la ignore
            
continue;
        
        
parse(DataData1charsmax(Data1), Data2charsmax(Data2), Data3charsmax(Data3), Data4charsmax(Data4)) // separamos los datos
        
        
if(equal(Data1Authid)) { // chequeamos que el steamid sea igual al del usuario que queremos agregarle el flag
            
            
format(Data3charsmax(Data3), "a%s"Data3// le agregamos el flag immunity
            
            
replace(Datacharsmax(Data), Data3[1], Data3// reemplazamos los flags viejos por los nuevos
            
            
write_file(ConfigDirDataLine 1// escribimos el archivo para guardar los nuevos flags
            
            
console_print(id"[AMXX] Se le agrego satisfactoriamente la inmunidad")
            
            
server_cmd("amx_reloadadmins"// recargamos los admins para actualizar los flags
            
            
break; // terminamos el bucle para que no siga chequeando
            
        
}
    }
    
    
fclose(File// cerramos el archivo y liberamos el handler
    


Enjoy :3

PD: no lo probe pero si no me equivoco funciona; cualquier cosa me avisan

SaluDDoS

el999gonzalo 12-16-2012 18:56

Re: [TUT] Modificar una linea de un archivo
 
probando por ti -.- . . . xd

seria util en los hats :B , con ello probare

Roccoxx 12-16-2012 19:16

Re: [TUT] Modificar una linea de un archivo
 
buen tuto.

esto en ue parte de la recopilacion lo pongo?

el999gonzalo 12-16-2012 19:34

Re: [TUT] Modificar una linea de un archivo
 
Quote:

Originally Posted by Roccoxx (Post 1855040)
buen tuto.

esto en ue parte de la recopilacion lo pongo?

Rac Acme Inc.

xDDD

PD: Funciono perfecto :B

RauliTop97 12-21-2012 16:00

Re: [TUT] Modificar una linea de un archivo
 
Tambien funciona con .cfg?

r0ma 12-21-2012 16:02

Re: [TUT] Modificar una linea de un archivo
 
Si

YakumoHiratsuhi 12-21-2012 21:10

Re: [TUT] Modificar una linea de un archivo
 
creo que los datanumero no son necesarios, con una sola cadena parsea hasta la separación donde son los flags y luego has la magia, porque no estas usando los demas datos.

PHP Code:

new flags[24]
parse(Dataflagscharsmax(flags), flagscharsmax(flags), flagscharsmax(flags)) 


rak 12-21-2012 21:54

Re: [TUT] Modificar una linea de un archivo
 
Quote:

Originally Posted by YakumoHiratsuhi (Post 1857995)
creo que los datanumero no son necesarios, con una sola cadena parsea hasta la separación donde son los flags y luego has la magia, porque no estas usando los demas datos.

PHP Code:

new flags[24]
parse(Dataflagscharsmax(flags), flagscharsmax(flags), flagscharsmax(flags)) 


lo puse de esa forma para que sepan donde se aloja todas las partes y que sea mucho mas entendible; tranquilamente lo podria averlo hecho mejor acomodando los datos de la cadena "Data" a mi gusto; ahora no estoy en mi pc.. en un ratito edito

edit:
podria averlo hecho asi pero para no complicarlos

PHP Code:

#include <amxmodx>

#define PLUGIN "Test"
#define VERSION "1.0"
#define AUTHOR "[R]ak"


public plugin_init() {
    
    
register_plugin(PLUGINVERSIONAUTHOR)
    
    
set_task(3.0"test")
    
}

public 
test() {
    
    
    new 
Data[128] = "^"STEAM_0:1:38746233^" ^"^" ^"bcdefghijklmnopqrstu^" ^"ce^""
    
    
new Authid[35], Flags[30]
    
    
rak_get_data(DataAuthid1)
    
    
rak_get_data(DataFlags5)
    
    
server_print(Data)
    
    if(
equal(Authid"STEAM_0:1:38746233")) {
        
        
format(Flagscharsmax(Flags), "a%s"Flags)
        
        
replace(Datacharsmax(Data), Flags[1], Flags)
    
        
server_print(Data)
        
    }
}

stock rak_get_data(source[], destination[], quote_num) {
    
    new 
inum
    
    
while(source[i]) {
        
        if(
source[i] == '"')
            
num++
        else if(
num == quote_num) {
                
            
num 0
            
            
while(source[i] != '"')                
                
destination[num++] = source[i++]
                
            break;
            
        }
        
        
i++
        
    }    



Bernii 03-05-2013 06:46

Re: [TUT] Modificar una linea de un archivo
 
buen tuto :D

+10

MexPower 04-20-2013 12:38

Re: [TUT] Modificar una linea de un archivo
 
Yo tengo una duda se podria hacer esto?
set_user_flags(id, get_user_flags(id) & ADMIN_RCON)

Se haria asi? o como?
En caso de que se pudiera se guardaria la flag que se le agrego?


All times are GMT -4. The time now is 07:23.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.