Portal SAMP
[Ajuda] ajuda no rcon senha - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] ajuda no rcon senha (/showthread.php?tid=4900)



ajuda no rcon senha - André Santos - 16/10/2024

pessoal como eu posso criar dentro da minha gamemode um pequeno sistema de seguranca rcon ? pois  nao queria usar a senha que se coloca na   serve.cfg  queria colocar para eu mesmo poder usar o comando rcon com o nick permitido e a senha mas que seja dentro da gamemode pois muitos usam a do server.cfg e queria deixar minha gm mais segura isso e possivel?


RE: ajuda no rcon senha - BitSain - 17/10/2024

Adapte as suas necessidades:

Código:
#define FILTERSCRIPT

#include <a_samp>
#include <YSI_Data\y_iterate>

#define MAX_NICKS 4
#define RCON_PASSWORD_SIZE 256

new const NICKS_PERMITIDOS[MAX_NICKS][MAX_PLAYER_NAME] = {
    "Nick1",
    "Nick2",
    "Nick3",
    "Nick4"
};

const RCON_PASSWORD[RCON_PASSWORD_SIZE] = "sua_senha_segura"; // Definindo o tamanho da senha RCON

#define COLOR_SUCCESS 0x00FF00FF // Verde
#define COLOR_ERROR 0xFF0000FF   // Vermelho
#define COLOR_WARNING 0xFFFF00FF  // Amarelo

#define MESSAGE_LOGIN_SUCCESS "Login RCON bem-sucedido."
#define MESSAGE_LOGIN_FAILED "Senha incorreta. Acesso negado."
#define MESSAGE_NO_PERMISSION "Você não tem permissão para acessar o RCON."

// Função que verifica se o nick é permitido
stock bool IsNickPermitted(const nick[]) {
    for (new j = 0; j < MAX_NICKS; j++) {
        if (!strcmp(nick, NICKS_PERMITIDOS[j], true)) {
            return true; // Nick permitido
        }
    }
    return false; // Nick não permitido
}

#if defined FILTERSCRIPT

public OnFilterScriptInit() {
    print("\n--------------------------------------");
    print(" [FS] Sistema de Segurança RCON Ativado");
    print("--------------------------------------\n");
    return 1;
}

// Função que gerencia a tentativa de login RCON
public OnRconLoginAttempt(ip[], password[], success) {
    new bool hasAccess = false; // Variável para controle de acesso
    new senderName[MAX_PLAYER_NAME], senderIp[16];

    foreach (new playerId : Player) {
        GetPlayerName(playerId, senderName, sizeof(senderName));
        GetPlayerIp(playerId, senderIp, sizeof(senderIp));

        // Verifica se o IP do cliente corresponde ao IP da tentativa de login
        if (!strcmp(ip, senderIp, true)) {
            if (IsNickPermitted(senderName)) {
                if (!strcmp(password, RCON_PASSWORD, true)) {
                    SendClientMessage(playerId, COLOR_SUCCESS, MESSAGE_LOGIN_SUCCESS);
                    hasAccess = true; // Acesso concedido
                } else {
                    SendClientMessage(playerId, COLOR_ERROR, MESSAGE_LOGIN_FAILED);
                }
            } else {
                SendClientMessage(playerId, COLOR_WARNING, MESSAGE_NO_PERMISSION);
            }
            break; // Para sair do loop assim que o IP correspondente for encontrado
        }
    }
    
    return hasAccess ? 1 : 0; // Retorna 1 se o acesso foi concedido, caso contrário retorna 0
}

#endif