Mensaje de bienvenida
#1

Hola!!

Tengo una duda y espero que puedan ayudarme.
A ver como puedo explicar, es que soy nuevo en esto.
Estoy en un proyecto y hago un script que guarda diversas cosas con include Dini.
Como si fuera una cuenta bбsica de admin y eso. hay todo bien.
Bueno, la idea es esta:
Como puedo hacer que este guarde el nombre del jugador que le de comando, tipo "agregar" en el archivo?
Si A, da a B y en el archivo A quede guardado el nombre de B.

Lo que quiero usar con eso, es que cuando B entre al servir, solo que salga el mensaje de bienvenida a jugador A.
Vamos como si fuese un msn, mas o menos.
dios que mal me explico.. xD

Alguna ayuda con esto?
Gracias
Reply
#2

realmente te explicaste mal, pero x lo que entendi queres hacer algo asi:
Jugador A escribe el cmd (parametro B).
Jugador A se desconecta.
Jugador A se conecta.
Jugador B recibe un mensaje avisandole que el jugador A se conecto.

eso?
Reply
#3

Bueno hise este cуdigo por que me parecio interesante, no lo hise en dini por que seria muy lento pero hace lo que vos querias (si no te funciona da igual a mi si me sirve).
pawn Код:
#include <a_samp>
#define COLOR_YELLOW 0xFFFF00AA

new DB:DB_NAMES;

public OnFilterScriptInit() {
    DB_NAMES = db_open("DB_Nombres.db");
    db_query(DB_NAMES,
        "CREATE TABLE IF NOT EXISTS `NOMBRES` (`ID` INTEGER PRIMARY KEY AUTOINCREMENT,`NOMBRE` TEXT,`CONTACTO` TEXT)");
}

public OnPlayerConnect(playerid) {
    new
        time = GetTickCount(),
        name[MAX_PLAYER_NAME],
        DBResult:result,
        count,
        string[128];

    GetPlayerName(playerid,name,sizeof(name));
    format(string,sizeof(string),"SELECT `NOMBRE` FROM `NOMBRES` WHERE `CONTACTO` = '%s'",name);
    result = db_query(DB_NAMES,string);
    count  = db_num_rows(result);
    if(count > 0) {
        new
            p,
            tmp_name[MAX_PLAYER_NAME],
            result_string[64],
            max_players = GetMaxPlayers();
           
        format(string,sizeof(string)," %s (ID: %d) se ha conectado al servidor",name,playerid);
        print(string);
        for(new i = 0; i < count; i++) {
            db_get_field_assoc(result,"NOMBRE",result_string,sizeof(result_string));
            for(p = 0; p < max_players; p++) {
                if(IsPlayerConnected(p)) {
                    GetPlayerName(p,tmp_name,sizeof(tmp_name));
                    if(!strcmp(tmp_name,result_string)) {
                        SendClientMessage(p,COLOR_YELLOW,string);
                    }
                }
            }
        }
    }
    db_free_result(result);
    printf("OnPlayerConnect Tardу %d milisegundos",GetTickCount()-time);
    return 0;
}
   
public OnPlayerCommandText(playerid,cmdtext[]) {
    //--------------------------------------------------------------------------
    new
        cmd[32],
        params[128],
        bool:pFound,
        len = strlen(cmdtext),
        index = 0;
       
    for( ; index < len; index++) {
        if(cmdtext[index] == ' ') {
            pFound = true;
            break;
        }
    }
    strmid(cmd,cmdtext,0,index);
    if(pFound)
        strmid(params,cmdtext,++index,len);
    //--------------------------------------------------------------------------

    if(strcmp("/agregar",cmd,true) == 0) {
        if(!strlen(params)) {
            SendClientMessage(playerid,COLOR_YELLOW,"** Utiliza /agregar [playerid]");
            return 1;
        }
        len = strlen(params);
        for(new i = 0; i < len; i++) {
            switch(params[i]) {
                case '0'..'9':
                    continue;
                default: {
                    SendClientMessage(playerid,COLOR_YELLOW,"** El ID debe ser nъmerico");
                    return 1;
                }
            }
        }
        new id = strval(params);
        /*
        if(id == playerid) {
            SendClientMessage(playerid,YELLOW,"** No puedes aсadirte tu mismo a tu lista de contactos");
            return 1;
        }
        */

        if(!IsPlayerConnected(id)) {
            SendClientMessage(playerid,COLOR_YELLOW,"** El jugador no estб conectado");
            return 1;
        }
        new
            string[128],
            name[2][MAX_PLAYER_NAME],
            DBResult:result,
            count;

        GetPlayerName(playerid,name[0],sizeof(name[]));
        GetPlayerName(id,      name[1],sizeof(name[]));
        format(string,sizeof(string),"SELECT * FROM `NOMBRES` WHERE `NOMBRE` = '%s' AND `CONTACTO` = '%s' LIMIT 1",name[0],name[1]);
        result = db_query(DB_NAMES,string);
        count  = db_num_rows(result);
        db_free_result(result);
        if(count > 0) {
            format(string,sizeof(string),"** El jugador %s (ID:%d) ya estб en la lista de tus contactos",name[1]);
            SendClientMessage(playerid,COLOR_YELLOW,string);
            db_free_result(result);
            return 1;
        }
        db_query(DB_NAMES,"PRAGMA synchronous=OFF");
        format(string,sizeof(string),"INSERT INTO `NOMBRES` (NOMBRE,CONTACTO) VALUES ('%s','%s')",name[0],name[1]);
        if(db_query(DB_NAMES,string)) {
            format(string,sizeof(string),"Agregastes a %s (ID:%d) a tu lista de contactos",name[1],id);
            SendClientMessage(playerid,COLOR_YELLOW,string);
            format(string,sizeof(string),"** %s (ID:%d) te ha agregado a su lista de contactos",name[0],playerid);
            SendClientMessage(id,COLOR_YELLOW,string);
        }
        else {
            SendClientMessage(playerid,COLOR_YELLOW,"** No se pudo agregar al jugador a lista (Error interno del servidor)");
        }
        db_query(DB_NAMES,"PRAGMA synchronous=ON");
        return 1;
    }
    return 0;
}
Reply
#4

Quote:

realmente te explicaste mal, pero x lo que entendi queres hacer algo asi:
Jugador A escribe el cmd (parametro B).
Jugador A se desconecta.
Jugador A se conecta.
Jugador B recibe un mensaje avisandole que el jugador A se conecto.

eso?

Perdуn, tienes razуn.
Seria como el sistema de messenger.

Quote:

Bueno hise este cуdigo por que me interesante, no lo hise en dini por que seria muy lento pero hace lo que vos querias (si no te funciona da igual a mi si me sirve).

Muchas Gracias Daniel-92, en cuanto pueda pruebo y comento.


> Edito:
Si que funciona, al menos lo poco que probй hizo correctamente.
Sabias como poner una especie de lista para ver la gente agregada?
Desconozco completamente esto de los "DB", a ver si pillo alguna guнa o asн que explique por que si no..
Por cierto, te pondrй en los crйditos del proyecto
Reply
#5

Aquн estб, tiene arreglado algunos bug menores y ahora los comandos usan zcmd, tambien tiene la opcion para eliminar, tu puedes seguirlo editando por que ya practicamente te hise un fs xD (al mio le voy a poner la opcion de mandar mensajes privados, tu tambien puedes intentarlo).
pawn Код:
#include <a_samp>
#include <zcmd>

#define COLOR_YELLOW 0xFFFF00AA

#if !defined isnull
    #define isnull(%1) \
        ((!(%1[0])) || (((%1[0]) == '\1') && (!(%1[1]))))
#endif

new DB:DB_NAMES;

public OnFilterScriptInit() {
    DB_NAMES = db_open("DB_Nombres.db");
    db_query(DB_NAMES,
        "CREATE TABLE IF NOT EXISTS `NOMBRES` (`ID` INTEGER PRIMARY KEY AUTOINCREMENT,`NOMBRE` TEXT,`CONTACTO` TEXT)");
}

public OnPlayerConnect(playerid) {
    new
        time = GetTickCount(),
        name[MAX_PLAYER_NAME],
        DBResult:result,
        count,
        string[128];

    GetPlayerName(playerid,name,sizeof(name));
    format(string,sizeof(string),"SELECT `NOMBRE` FROM `NOMBRES` WHERE `CONTACTO` = '%s'",name);
    result = db_query(DB_NAMES,string);
    count  = db_num_rows(result);
    if(count > 0) {
        new
            p,
            tmp_name[MAX_PLAYER_NAME],
            result_string[64],
            max_players = GetMaxPlayers();
           
        format(string,sizeof(string)," %s (ID: %d) se ha conectado al servidor",name,playerid);
        for(new i = 0; i < count; i++) {
            db_get_field_assoc(result,"NOMBRE",result_string,sizeof(result_string));
            for(p = 0; p < max_players; p++) {
                if(IsPlayerConnected(p)) {
                    GetPlayerName(p,tmp_name,sizeof(tmp_name));
                    if(!strcmp(tmp_name,result_string)) {
                        SendClientMessage(p,COLOR_YELLOW,string);
                    }
                }
            }
        }
    }
    db_free_result(result);
    printf("OnPlayerConnect Tardу %d milisegundos",GetTickCount()-time);
    return 0;
}

CMD:agregar(playerid,params[]) {
    if(isnull(params)) {
        SendClientMessage(playerid,COLOR_YELLOW,"** Utiliza /agregar [playerid]");
        return 1;
    }
    new len = strlen(params);
    for(new i = 0; i < len; i++) {
        switch(params[i]) {
            case '0'..'9':
                continue;
            default: {
                SendClientMessage(playerid,COLOR_YELLOW,"** El ID debe ser nъmerico");
                return 1;
            }
        }
    }
    new id = strval(params);
    /*
    if(id == playerid) {
        SendClientMessage(playerid,YELLOW,"** No puedes aсadirte tu mismo a tu lista de contactos");
        return 1;
    }
    */

    if(!IsPlayerConnected(id)) {
        SendClientMessage(playerid,COLOR_YELLOW,"** El jugador no estб conectado");
        return 1;
    }
    new
        name[2][MAX_PLAYER_NAME],
        string[128],
        DBResult:result,
        count;

    GetPlayerName(playerid,name[0],sizeof(name[]));
    GetPlayerName(id,      name[1],sizeof(name[]));
    format(string,sizeof(string),"SELECT * FROM `NOMBRES` WHERE `NOMBRE` = '%s' AND `CONTACTO` = '%s' LIMIT 1",name[0],name[1]);
    result = db_query(DB_NAMES,string);
    count  = db_num_rows(result);
    db_free_result(result);
    if(count > 0) {
        format(string,sizeof(string),"** El jugador %s (ID:%d) ya estб en la lista de tus contactos",name[1]);
        SendClientMessage(playerid,COLOR_YELLOW,string);
        return 1;
    }
    db_query(DB_NAMES,"PRAGMA synchronous=OFF");
    format(string,sizeof(string),"INSERT INTO `NOMBRES` (NOMBRE,CONTACTO) VALUES ('%s','%s')",name[0],name[1]);
    if(db_query(DB_NAMES,string)) {
        format(string,sizeof(string),"Agregastes a %s (ID:%d) a tu lista de contactos",name[1],id);
        SendClientMessage(playerid,COLOR_YELLOW,string);
        format(string,sizeof(string),"** %s (ID:%d) te ha agregado a su lista de contactos",name[0],playerid);
        SendClientMessage(id,COLOR_YELLOW,string);
    }
    else {
        SendClientMessage(playerid,COLOR_YELLOW,"** No se pudo agregar al jugador a lista (Error interno del servidor)");
    }
    db_query(DB_NAMES,"PRAGMA synchronous=ON");
    return 1;
}

CMD:lista(playerid,params[]) {
    new
        string[768],
        name[MAX_PLAYER_NAME],
        DBResult:result,
        count;

    GetPlayerName(playerid,name,sizeof(name));
    format(string,sizeof(string),"SELECT `CONTACTO` FROM `NOMBRES` WHERE NOMBRE = '%s'",name);
    result = db_query(DB_NAMES,string);
    count = db_num_rows(result);
    if(count > 0) {
        new
            result_string[64],
            i = 0;
        string[0] = '\0';
        for(  ; i < count; i++) {
            db_get_field_assoc(result,"CONTACTO",result_string,sizeof(result_string));
            format(result_string,sizeof(result_string),"%s\n",result_string);
            strcat(string,result_string);
            db_next_row(result);
        }
        SetPVarString(playerid,"V_CONTACTOS",string);
        format(result_string,sizeof(result_string),"%d %s",i, i > 1 ? ("Amigos agregados"):("Amigo agregado"));
        ShowPlayerDialog(playerid,1221,DIALOG_STYLE_LIST,result_string,string,"Aceptar","Eliminar");
    }
    else {
        ShowPlayerDialog(playerid,1221,DIALOG_STYLE_LIST,"0 Amigios agregados","No has agregado a ningun contacto","Aceptar","");
    }
    db_free_result(result);
    return 1;
}


public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == 1221)
    {
        if(!response) {
            new string[768];
            GetPVarString(playerid,"V_CONTACTOS",string,sizeof(string));
            if(isnull(string))
                return 1;

            new
                len = strlen(string),
                name[2][MAX_PLAYER_NAME],
                list = 0,
                l_index = 0;
               
            for(new index=0; index < len; index++) {
                if(string[index] == '\n') {
                    if(list == listitem) {
                        strmid(name[1],string,l_index,index);
                        break;
                    }
                    l_index = index+1;
                    list++;
                }
            }
            GetPlayerName(playerid,name[0],sizeof(name[]));
            format(string,sizeof(string),"DELETE FROM `NOMBRES` WHERE `NOMBRE` = '%s' AND `CONTACTO` = '%s'",name[0],name[1]);
            if(db_query(DB_NAMES,string)) {
                format(string,sizeof(string),"El nombre %s fue eliminado de tus contactos",name[1]);
                SendClientMessage(playerid,COLOR_YELLOW,string);
            }
            else {
                format(string,sizeof(string),"** Error no se puede eliminar el nombre %s",name[1]);
                SendClientMessage(playerid,COLOR_YELLOW,string);
            }
            DeletePVar(playerid,"V_CONTACTOS");
        }
    }
    return 0;
}
Reply
#6

Quote:

Aquн estб, tiene arreglado algunos bug menores y ahora los comandos usan zcmd, tambien tiene la opcion para eliminar, tu puedes seguirlo editando por que ya practicamente te hise un fs xD (al mio le voy a poner la opcion de mandar mensajes privados, tu tambien puedes intentarlo).

Eres de p.. madre tнo!! Muchas gracias, de verdad xD
El primero en crйditos sin duda

La verdad que algo he hecho, pero mas bien bбsico. Intentare eso que comentas, pero no prometo que salga bien xD
Lo que si hice con en el anterior que pusistes, que cuando un agregado conecta o desconecta, sale un texdraw justo en la parte inferior de la pantalla de lado a lado. Una tira verde asн ancha y justo encima la tira:
__________________________________________________ ____________________
fulanito ha iniciado sesiуn.
--------------------------------------------------------------------------------
Nada tio, muchas gracias =D
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)