[FilterScript] MeetScript - Conheзa pessoas
#1

Esse й um script que eu desenvolvi hoje cedo, pensando em servidores RolePlay.
Ao entrar no jogo, todos sгo estranhos em suas nametags, basta /apresentar e a pessoa aceitar e vocкs agora se reconhecem!

Esse script foi feito em 15 minutos, usando zcmd, sscanf e SQLite, para maior versatilidade dos dados.

Script:
pawn Код:
#include <a_samp>
#include <zcmd>
#include <sscanf>
#define CMD_COLOR 0xFF4791FF

new DB:meetdb;
main() {}

public OnFilterScriptInit() {
    meetdb = db_open("meetdb.db");
    return 1;
}

public OnFilterScriptExit() {
    db_close(meetdb);
}

public OnGameModeInit() {
    ShowNameTags(0);
    return 1;
}

/* --------------------------- */
new
    playerInvite[MAX_PLAYERS],
    PlayerText3D:playerTag[MAX_PLAYERS][MAX_PLAYERS];
    // A primeira dimensгo й jogador da tag
    // a segunda sгo as tags daquele jogador para
    // todos os players

public OnPlayerSpawn(playerid) {
    new index = -1,
        szDName[MAX_PLAYER_NAME],
        szTempName[MAX_PLAYER_NAME],
        buffer[200];

    GetPlayerName(playerid, szDName, sizeof szDName);
    while(++index < MAX_PLAYERS) { // setando as tags do playerid para todos index
        if(playerTag[playerid][index]) {
            DeletePlayer3DTextLabel(playerid, playerTag[playerid][index]);
            playerTag[playerid][index] = PlayerText3D:0;
        }
        if(index == playerid) {
            continue;
        }
        if(!IsPlayerConnected(index)) {
            continue;
        }
        new DBResult:result;
        GetPlayerName(index, szTempName, sizeof szTempName);
        format(buffer, sizeof buffer,
            "select `id` from `player_know` where (`player1`='%s' and `player2`='%s') or (`player1`='%s' and `player2`='%s')",
            szDName,
            szTempName,
            szTempName,
            szDName
        );
        result = db_query(meetdb, buffer);
        if(db_num_rows(result) > 0) {
            playerTag[playerid][index] = CreatePlayer3DTextLabel(index, ReturnLabelString(playerid, szDName), 0xFFFFFFFF, 0.0, 0.0, 0.0, 40.0, playerid);
        } else {
            playerTag[playerid][index] = CreatePlayer3DTextLabel(index, "Estranho", 0xFFFFFFFF, 0.0, 0.0, 0.0, 40.0, playerid);
        }
        db_free_result(result);
    } index = -1;
    while(++index < MAX_PLAYERS) { // setando as tags dos outros jogadores para este
        if(playerTag[index][playerid]) {
            DeletePlayer3DTextLabel(playerid, playerTag[index][playerid]);
            playerTag[index][playerid] = PlayerText3D:0;
        }
        if(index == playerid) {
            continue;
        }
        if(!IsPlayerConnected(index)) {
            continue;
        }
        new DBResult:result;
        GetPlayerName(index, szTempName, sizeof szTempName);
        format(buffer, sizeof buffer,
            "select `id` from `player_know` where (`player1`='%s' and `player2`='%s') or (`player1`='%s' and `player2`='%s')",
            szDName,
            szTempName,
            szTempName,
            szDName
        );
        result = db_query(meetdb, buffer);
        if(db_num_rows(result) > 0) {
            playerTag[index][playerid] = CreatePlayer3DTextLabel(playerid, ReturnLabelString(index, szTempName), 0xFFFFFFFF, 0.0, 0.0, 0.0, 40.0, index);
        } else {
            playerTag[index][playerid] = CreatePlayer3DTextLabel(playerid, "Estranho", 0xFFFFFFFF, 0.0, 0.0, 0.0, 40.0, index);
        }
        db_free_result(result);
    }
    return 1;
}
/* --------------------------- */
CMD:apresentar(playerid, params[]) {
    new aplayer;
    if(sscanf(params, "u", aplayer)) {
        SendClientMessage(playerid, CMD_COLOR, "MeetCmd: {FFFFFF}/apresentar [jogador] -{C0C0C0} O Jogador nгo existe, ou й invбlido.");
        return 1;
    }
    new
        szDName[MAX_PLAYER_NAME],
        szTempName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, szDName, sizeof szDName);
    GetPlayerName(aplayer, szTempName, sizeof szTempName);
   
    new DBResult:result,
        buffer[200];
    format(buffer, sizeof buffer,
        "select `id` from `player_know` where (`player1`='%s' and `player2`='%s') or (`player1`='%s' and `player2`='%s')",
        szDName,
        szTempName,
        szTempName,
        szDName
    );
    result = db_query(meetdb, buffer);
    if(db_num_rows(result) > 0) {
        SendClientMessage(playerid, CMD_COLOR, "MeetCmd: {FFFFFF}/apresentar -{C0C0C0} Vocкs jб se conhecem.");
    } else {
        SendClientMessage(playerid, CMD_COLOR, "MeetCmd: {FFFFFF}/apresentar -{C0C0C0} O convite foi enviado.");
        SendClientMessage(playerid, -1, "      Digite {C0C0C0}/cancelarapres {FFFFFF}para voltar atrбs.");
        playerInvite[playerid] = aplayer;

        SendClientMessage(playerid, CMD_COLOR, "MeetCmd: {FFFFFF}O jogador Estranho quer te conhecer -{C0C0C0} Digite /conhecer [player] para aceitar.");
    }
    db_free_result(result);

    return 1;
}

CMD:conhecer(playerid, params[]) {
    new aplayer;
    if(sscanf(params, "u", aplayer)) {
        SendClientMessage(playerid, CMD_COLOR, "MeetCmd: {FFFFFF}/conhecer [jogador] -{C0C0C0} O Jogador nгo existe, ou й invбlido.");
        return 1;
    }
    if(playerInvite[aplayer] == playerid) {
        DeletePlayer3DTextLabel(playerid, playerTag[aplayer][playerid]);
        DeletePlayer3DTextLabel(aplayer, playerTag[playerid][aplayer]);
       
        new
            szDName[MAX_PLAYER_NAME],
            szTempName[MAX_PLAYER_NAME];
        GetPlayerName(playerid, szDName, sizeof szDName);
        GetPlayerName(aplayer, szTempName, sizeof szTempName);
       
        playerTag[aplayer][playerid] = CreatePlayer3DTextLabel(playerid, szTempName, 0xFFFFFFFF, 0.0, 0.0, 0.0, 40.0, aplayer);
        playerTag[playerid][aplayer] = CreatePlayer3DTextLabel(aplayer, szDName, 0xFFFFFFFF, 0.0, 0.0, 0.0, 40.0, playerid);

        new buffer[80];
        format(buffer, sizeof buffer,
            "insert into `player_know` (player1, player2) values ('%s','%s')",
            szDName,
            szTempName
        );
        db_free_result(db_query(meetdb, buffer));
        playerInvite[aplayer] = -1;
    }
    return 1;
}

CMD:cancelarapres(playerid) {
    playerInvite[playerid] = -1;
}
/* --------------------------- */
stock ReturnLabelString(playerid, name[]) {
    new string[60];
    format(string, sizeof string,
        "%s (%d)",
        name, playerid
    );
    return string;
}
meetdb.db (deve ser colocado em scriptfiles)
http://www.solidfiles.com/d/470be7820a/

Abraзo e bom proveito!
Pode ser usado da maneira que quiser. Se quiser retirar os crйditos, vб em frente.
Reply
#2

Legal. Bom trabalho.

Reply
#3

Quote:
Originally Posted by jpeg
Посмотреть сообщение
Legal. Bom trabalho.


ІІІІІІ


#edit

Quando for lanзar esse RioRPG avisa que vo jogar
Reply
#4

esse sistema ficou na minha cabeзa por dias a algum tempo atrбs, mas nunca botei em prбtica, gostei muito da iniciativa! Totalmente roleplay.
Reply
#5

muito good!
Reply
#6

Muito Bom parabйns.
Reply
#7

Quote:
Originally Posted by Don_Speed
Посмотреть сообщение


ІІІІІІ


#edit

Quando for lanзar esse RioRPG avisa que vo jogar :)
Obrigado. Eu crio um tуpico Off. Bem fora da lei. Ninguйm vai se importar aheuahuea.

Quote:
Originally Posted by [JD]BlackFire
Посмотреть сообщение
esse sistema ficou na minha cabeзa por dias a algum tempo atrбs, mas nunca botei em prбtica, gostei muito da iniciativa! Totalmente roleplay.
Esse sistema й bem prova de conceito, nгo acho que й um sistema bom para por em prбtica, mas acredito que, da maneira que fiz, seria a maneira mais eficiente.

Quote:
Originally Posted by Bruno Pereira
Посмотреть сообщение
muito good!
Obrigado!

Quote:
Originally Posted by alexcordeiro
Посмотреть сообщение
Muito Bom parabйns.:p
:D
Reply
#8

Stewie` e seus scripts confusos xD

Muito bom
Reply
#9

Interessante, dб atй pra adicionar outro sistema em cima com "vantagens" ao conhecer o carinha.

Belo trabalho, Miki.
Reply
#10

Muito bom
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)