Portal SAMP
Fixado: Códigos Úteis - 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: Fixado: Códigos Úteis (/showthread.php?tid=73)

Páginas: 1 2 3 4 5


RE: Códigos Úteis - Calenzo - 04/10/2020

Usar acentuação em GameText.

Código:
Código PHP:
stock TextConverter(string[])
{
    for(new arraysize 0arraysize strlen(string); arraysize++)
    {
        if(strfind(string"â"true) != -1){new pos strfind(string"â"true); strdel(stringpospos+strlen("â")); strins(string"™"possizeof(pos));}
        if(strfind(string"ã"true) != -1){new pos strfind(string"ã"true); strdel(stringpospos+strlen("ã")); strins(string"š"possizeof(pos));}
        if(strfind(string"á"true) != -1){new pos strfind(string"á"true); strdel(stringpospos+strlen("á")); strins(string"˜"possizeof(pos));}
        if(strfind(string"é"true) != -1){new pos strfind(string"é"true); strdel(stringpospos+strlen("é")); strins(string"ž"possizeof(pos));}
        if(strfind(string"ú"true) != -1){new pos strfind(string"ú"true); strdel(stringpospos+strlen("ú")); strins(string"“"possizeof(pos));}
        if(strfind(string"ó"true) != -1){new pos strfind(string"ó"true); strdel(stringpospos+strlen("ó")); strins(string"¦"possizeof(pos));}
        if(strfind(string"ê"true) != -1){new pos strfind(string"ê"true); strdel(stringpospos+strlen("ê")); strins(string"Ÿ"possizeof(pos));}
        if(strfind(string"í"true) != -1){new pos strfind(string"í"true); strdel(stringpospos+strlen("í")); strins(string"¢"possizeof(pos));}
        if(strfind(string"ç"true) != -1){new pos strfind(string"ç"true); strdel(stringpospos+strlen("ç")); strins(string"œ"possizeof(pos));}
        if(strfind(string"ô"true) != -1){new pos strfind(string"ô"true); strdel(stringpospos+strlen("ô")); strins(string"§"possizeof(pos));}
    }
    return 1;


Exemplo:
Código PHP:
CMD:cnn(playeridparams[])
{
    if(!IsPlayerHelper(playerid))
        return SendClientMessage(playeridErro"Comando Inválido");

    new tmp[128];

    if(sscanf(params"s[128]"tmp))
        return SendClientMessage(playeridErro"Digite: /Cnn [mensagem]");

    TextConverter(tmp); //Convertendo

    format(Stringsizeof(String), "~r~# ~p~%s~w~: %s ~r~#"PlayerInfo[playerid][Nome], tmp);
    GameTextForPlayer(playeridString30002);
    return 1;




Random com Min e Max - RosaScripter - 07/10/2020

Eu estive procurando por um random de min e máx até que achei o do Y_Less, Hoje to trazendo para quem não conhece ou não tem.
Código:
stock randomEx(minnum = cellmin, maxnum = cellmax)
    return random(maxnum - minnum + 1) + minnum;// by Y_Less

Modo de uso por exemplo: Para definir quanto de dinheiro o player pode ganhar, Quanto de Level, Setar em uma org aleatoria.
Código:
Dinheiro = randomEx(100, 800);

GivePlayerMoney(playerid, Dinheiro);
Código:
Level  = randomEx(3, 8);

SetPlayerScore(playerid, Level);
Código:
Team = randomEx(1, 10);

SetPlayerTeam(playerid, Team);
Agora é só felicidades criando e editando sua gamemode
______________________________________________________
+REP  [Imagem: heart.png]
O sucesso é a soma de pequenos esforços, repetidos dias após dias.


RE: Códigos Úteis - sinux - 01/11/2020

Código PHP:
#define TAB 9999
CMD:tab(playerid)
{
    foreach(new 
Player)
     
ShowPlayerDialog(playeridTABDIALOG_STYLE_TABLIST_HEADERS"Teu server porra""Id\tNome\tLevel\tPing\n\
     %d\t%s\t%d\t%d"
"Fechar"#, i, ReturnName(i), GetPlayerScore(i), GetPlayerPing(i));
    
return 1;


tô com preguiça de converter foreach por for(new fds


RE: Códigos Úteis - Chainksain - 02/11/2020

(03/10/2020 06:47)NelsonC. Escreveu:
(03/10/2020 00:26)willttoonn Escreveu: SendClientMessageEx - Funciona como um SendClientMessage, so que você pode formatar o texto com os atributos na própria função, eliminando a necessidade de um format a parte.

Código:
SendClientMessageEx(playerid, color, const str[], {Float,_}:...)
{
    static
        args,
        start,
        end,
        string[144]
    ;
    #emit LOAD.S.pri 8
    #emit STOR.pri args

    if (args > 12)
    {
        #emit ADDR.pri str
        #emit STOR.pri start

        for (end = start + (args - 12); end > start; end -= 4)
        {
            #emit LREF.pri end
            #emit PUSH.pri
        }
        #emit PUSH.S str
        #emit PUSH.C 144
        #emit PUSH.C string
        #emit PUSH.C args
        #emit SYSREQ.C format

        SendClientMessage(playerid, color, string);

        #emit LCTRL 5
        #emit SCTRL 4
        #emit RETN
    }
    return SendClientMessage(playerid, color, str);
}

Exemplo de uso (-1 é a cor, nesse caso branca):
Código:
new player_name[MAX_PLAYER_NAME];
GetPlayerName(playerid, player_name);
SendClientMessageEx(playerid, -1, "O meu nome é %s.", playername);


Mais fácil assim mano
Código PHP:
// macro
new __message[280];
#define SendClientMessage(%0,%1,%2,%3)             \
        
(format(__message,sizeof(__message),%2,%3),SendClientMessage(%0,%1,__message))

#define SendClientMessageToAll(%0,%1,%2)             \
        
(format(__message,sizeof(__message),%1,%2),SendClientMessageToAll(%0,__message)) 


Exemplos:

Código PHP:
new player_name[MAX_PLAYER_NAME];
    
GetPlayerName(playeridplayer_name);
    
SendClientMessage(playerid, -1"Você tem %d de dinheiro"GetPlayerMoney(playerid));
    
SendClientMessageToAll(-1"O jogador %s tem %d de dinheiro."player_nameGetPlayerMoney(playerid)); 

para quem usa o pacote do YSI, nele tem a biblioteca do y_va que tbm simplifica bastante esta função:
Código:
stock SendClientMessageEx(playerid, colour, const fmat[], va_args<>)
{
    static str[145];
    va_format(str, sizeof (str), fmat, va_start<3>);
    return SendClientMessage(playerid, colour, str);
}



RE: Códigos Úteis - Hazard - 10/11/2020

função de crashar player

Código:
stock Crashar(playerid) {
GameTextForPlayer(playerid, "$!#{]{]??**&~w", 1000, 6);
return 1; }


uso:

Código PHP:
CMD:crasharme(playerid) {
Crashar(playerid);
return 
1; } 



RE: Códigos Úteis (Bodygun) - willttoonn - 11/11/2020

Fiz este código de Bodygun em 2017 aproximadamente, não utilizo desde 2018 e dei release nele neste mesmo ano no fórum do mod, como não tem mais ele lá, vou disponibilizar aqui.


Código:
#include <a_samp>
#include <zcmd>
#include <foreach>

//No topo do gamemode, você pode adaptar tal varivel para as suas array de jogador.
new pWeaponHold[MAX_PLAYERS];


//Este é o comando de ativação do sistema, qualquer jogador possuindo as armas citadas abaixo (Shotgun, SPAS, MP5, AK-47, M4A1, Sniper e Rifle) poderá usa-lo.
CMD:armac(playerid, params[])
{
    if(GetPlayerWeapon(playerid) == -1)
        return SendClientMessage(playerid, 0xFF6347FF, "Você não possui nenhuma arma na mão.");
    
    new gunname[128], string[128];
    
    if(!pWeaponHold[playerid])
    {
        if(GetPlayerWeapon(playerid) == 25 || GetPlayerWeapon(playerid) == 27 || GetPlayerWeapon(playerid) == 29 || GetPlayerWeapon(playerid) == 30 || GetPlayerWeapon(playerid) == 31 || GetPlayerWeapon(playerid) == 33 || GetPlayerWeapon(playerid) == 34)
        {
            if(!pWeaponHold[playerid])
            {
                pWeaponHold[playerid] = GetPlayerWeapon(playerid);
                 GetWeaponName(GetPlayerWeapon(playerid), gunname, sizeof(gunname));
                format(string, sizeof(string),"SERVIDOR: A sua %s foi acoplada ao seu corpo!",gunname);
                SendClientMessage(playerid, 0xFFFF00FF, string);
                return 1;
            }
            else
            {
                GetWeaponName(pWeaponHold[playerid], gunname, sizeof(gunname));
                RemovePlayerAttachedObject(playerid, 4);
                format(string, sizeof(string),"SERVIDOR: A sua %s foi desacoplada do seu corpo!",gunname);
                SendClientMessage(playerid, 0xFFFF00FF, string);
                pWeaponHold[playerid] = 0;
            }
        }
        else
        {
            SendClientMessage(playerid, 0xFF6347FF, "Esta arma não pode ser acoplada a seu corpo.");
        }
    }
    else
    {
        RemovePlayerAttachedObject(playerid, 4);
        format(string, sizeof(string),"SERVIDOR: A arma em seu corpo foi desacoplada!");
        SendClientMessage(playerid, 0xFFFF00FF, string);
        pWeaponHold[playerid] = 0;
    }
    return 1;
}

//Esta stock deverá ser utilizada nos comandos nos quais você vai resetar as armas do jogador, /resetararmas, ou quando ele vende uma arma ou morre, ou seja
//sempre que suas armas sumir você deverá colocar essa função, independente se ele tiver com /armac ativo ele irá checar.
stock RemoveWeaponHold(playerid, weaponid)
{
    if(weaponid == pWeaponHold[playerid])
    {
        RemovePlayerAttachedObject(playerid, 4);
        pWeaponHold[playerid] = 0;
    }
    return 1;
}

public OnGameModeInit()
{
    //No OnGameModeInit você irá colocar o seu timer da public criada abaixo, leia o que está escrito acima dela se quiser fazer algo melhor.
    SetTimer("CheckArmaC", 1000, true);//1s
    return 1;
}

//Você deverá utilizar essa public como um timer global ou adapta-la em um timer global existente de no máximo 1s de loop.
forward CheckArmaC();
public CheckArmaC()
{
    foreach (new i : Player)
    {
        if(pWeaponHold[playerid])
        {
            new weapon;
            switch(pWeaponHold[playerid])
            {
                case 22: weapon = 346;
                case 23: weapon = 347;
                case 24: weapon = 348;
                case 25: weapon = 349;
                case 27: weapon = 351;
                case 29: weapon = 353;
                case 30: weapon = 355;
                case 31: weapon = 356;
            }
            if(GetPlayerWeapon(i) != pWeaponHold[playerid])
            {
                switch(pWeaponHold[playerid])
                {
                    case 25:
                    {
                        SetPlayerAttachedObject(i, 4, weapon, 1, 0.2049, 0.2430, -0.1359, -176.0000, 160.1999,6.5998);
                    }
                    case 27,29,30,31,33,34:
                    {
                        SetPlayerAttachedObject(i, 4, weapon, 1, 0.1298, 0.2230, -0.1500, 5.0998, 23.8999, -177.4998);
                    }
                }
            }
            else
            {
                RemovePlayerAttachedObject(i, 4);
            }
        }
    }
    return 1;
}



RE: Códigos Úteis - NelsonC. - 03/12/2020

Olá a todos, vou estar deixando um código do meu gm aqui para vocês poderem usar que eu acho bastante útil para servidores que gostam de ter "TAGS" admin no game sem registrar com a tag.

Bom, o código é o seguinte:

Código:
GetUserName(playerid, bool:usetag = false)
{
    new
        __pName[MAX_PLAYER_NAME + 6];
    if(IsPlayerConnected(playerid))
    {
        GetPlayerName(playerid, __pName, sizeof(__pName));
        if(Jogador[playerid][Trabalhando] && Jogador[playerid][Admin] > 0 && usetag == true){
            strins(__pName, "[SUA TAG AQUI]", 0);
        }
    }
    return __pName;
}

Na parte de 
Citar:Jogador[playerid][Trabalhando] && Jogador[playerid][Admin]

Jogador[playerid][Trabalhando] quer dizer que entrou / saiu do modo admin
Jogador[playerid][Admin] é admin kk
Só vocês trocarem as variáveis e gg ez

Vou estar deixando um comando aqui de exemplo



Código:
CMD:trabalharadm(playerid, params[])
{
    if(Jogador[playerid][Admin] < 1)
        return SendClientMessage(playerid, 0xFF0000FF, "| ERRO | Você não tem permissão!");

    if(Jogador[playerid][Trabalhando] == 0) {
        Jogador[playerid][Trabalhando] = 1;
        foreach(new i: Player)
        {
            SendClientFormat(i, 0x00BBFFFF, "| PC - ADMIN | O(A) {ffffff}%s %s{00bbff} está trabalhando no momento!", JogadorTag(playerid), GetUserName(playerid, true));
        }
        return true;
    }
    if(Jogador[playerid][Trabalhando] == 1) {
        Jogador[playerid][Trabalhando] = 0;
        foreach(new i: Player)
        {
               SendClientFormat(i, 0x00BBFFFF, "| PC - ADMIN | O(A) {ffffff}%s %s{00bbff} não está mais trabalhando!", JogadorTag(playerid), GetUserName(playerid, true));
        }
        return true;
    }
    return true;
}

o comando está do jeito q ta no meu gm, é só como exemplo para vocês

Para você colocar a tag no comando, basta você pegar o nome do player assim: GetUserName(playerid, true)
caso queira deixar o comando sem tag, é só colocar: GetUserName(playerid)

acho que vcs entenderam, n sei explicar mto bem


bj na bunda de vcs


RE: Códigos Úteis - Dr Editor - 09/12/2020

Alinhamento de texto de caixas de diálogo:

[Imagem: Screen-Shot-20201209105848.png]


Código:
enum
{
    ALIGN_LEFT,
    ALIGN_RIGHT,
    ALIGN_CENTER
}

stock DialogTextAling(input_text[], align, output_text[][])
{
    static lines[25][150];
    new idx = -1;
    new lastIdx = 0;
    new count = 0;

    while(count < sizeof(lines))
    {
        lastIdx = idx;
        idx = strfind(input_text, "\n", true, lastIdx + 1);
        strmid(lines[count], input_text, count == 0 ? 0 : lastIdx + 1, idx);

        if(idx == -1)
        {
            strmid(lines[count], input_text, count == 0 ? 0 : lastIdx + 1, strlen(input_text));
            break;
        }
        count ++;
    }

    if(align == ALIGN_LEFT)
    {
        for(new i = 0; i < sizeof(lines); i ++)
        {
            if(!strlen(lines[i]))
                break;
            strcat(output_text[i], lines[i], strlen(lines[i]) + 1);
        }
    }
    else if(align == ALIGN_RIGHT)
    {
        new major = 0;
        for(new i = 0, siz = sizeof(lines); i < siz; i ++)
        {
            if(!strlen(lines[i]))
                break;
            
            new len = strlen(lines[i]);
            if(len > major)
                major = len;
        }

        for(new i = 0; i < sizeof(lines); i ++)
        {
            if(!strlen(lines[i]))
                break;

            new len = strlen(lines[i]);
            new maxLen = (major - len);
            if(len < major)
            {
                for(new ii = 0; ii < maxLen; ii ++)
                    strins(lines[i], " ", 0);
            }
            strcat(output_text[i], lines[i], len + maxLen + 1);
        }
    }
    else if(align == ALIGN_CENTER)
    {
        new major = 0;
        for(new i = 0, siz = sizeof(lines); i < siz; i ++)
        {
            if(!strlen(lines[i]))
                break;
            
            new len = strlen(lines[i]);
            if(len > major)
                major = len;
        }

        for(new i = 0; i < sizeof(lines); i ++)
        {
            if(!strlen(lines[i]))
                break;

            new len = strlen(lines[i]);
            new maxLen = (major - len) / 2;
            if(len < major)
            {
                for(new ii = 0; ii < maxLen; ii ++)
                    strins(lines[i], " ", 0);
            }
            strcat(output_text[i], lines[i], len + maxLen + 1);
        }
    }
}



Código testado:

Código:
print("\n\n");
    print("ALING_LEFT (default)");
    new input_text[] = "* linha 1 *\n** linha 2 **\n** ** linha 3 ** **";
    new output_text[6][150];

    DialogTextAling(input_text, ALIGN_LEFT, output_text);

    for(new i = 0; i < 10; i ++)
    {
        if(!strlen(output_text[i]))
            break;

        printf(output_text[i]);
    }
    print("\n\n");

    print("ALING_RIGHT");
    new input_text2[] = "* linha 1 *\n** linha 2 **\n** ** linha 3 ** **";
    new output_text2[6][150];

    DialogTextAling(input_text2, ALIGN_RIGHT, output_text2);

    for(new i = 0; i < 10; i ++)
    {
        if(!strlen(output_text2[i]))
            break;

        printf(output_text2[i]);
    }
    print("\n\n");

    print("ALING_CENTER");
    new input_text3[] = "* linha 1 *\n** linha 2 **\n** ** linha 3 ** **";
    new output_text3[6][150];

    DialogTextAling(input_text3, ALIGN_CENTER, output_text3);

    for(new i = 0; i < 10; i ++)
    {
        if(!strlen(output_text3[i]))
            break;

        printf(output_text3[i]);
    }



RE: Códigos Úteis - Dr Editor - 09/12/2020

Conversor de caracteres de texto: maiúsculas, minúsculas, intercala, inverte e converte para maiúscula a primeira letra de cada palavra.

[Imagem: Screen-Shot-20201209144525.png]

Código:
enum
{
    TO_LOWER,
    TO_UPPER,
    INTERCALATE,
    INVERT,
    UPPER_FIRST_CHAR
}

stock ChangeStringCase(input_text[], output_text[], case_type)
{
    new count = 0;
    if(case_type == TO_LOWER)
    {
        while(count < strlen(input_text))
        {
            new _char[2];
            format(_char, 2, "%c", tolower(input_text[count]));
            strcat(output_text, _char, strlen(input_text) + 1);
            count ++;
        }
    }
    else if(case_type == TO_UPPER)
    {
        while(count < strlen(input_text))
        {
            new _char[2];
            format(_char, 2, "%c", toupper(input_text[count]));
            strcat(output_text, _char, strlen(input_text) + 1);
            count ++;
        }
    }
    else if(case_type == INTERCALATE)
    {
        new bool:intercalate = true;
        while(count < strlen(input_text))
        {
            new _char[2];
            format(_char, 2, "%c", intercalate ? toupper(input_text[count]) : tolower(input_text[count]));
            strcat(output_text, _char, strlen(input_text) + 1);
            intercalate = !intercalate;
            count ++;
        }
    }
    else if(case_type == INVERT)
    {
        while(count < strlen(input_text))
        {
            new _char[2];
            switch(input_text[count])
            {
                case 'a'..'z':
                {
                    format(_char, 2, "%c", toupper(input_text[count]));
                    strcat(output_text, _char, strlen(input_text) + 1);
                }
                case 'A'..'Z':
                {
                    format(_char, 2, "%c", tolower(input_text[count]));
                    strcat(output_text, _char, strlen(input_text) + 1);
                }
                default:
                {
                    format(_char, 2, "%c", input_text[count]);
                    strcat(output_text, _char, strlen(input_text) + 1);
                }
            }
            count ++;
        }
    }
    else if(case_type == UPPER_FIRST_CHAR)
    {
        new bool:upper = false;
        while(count < strlen(input_text))
        {
            new _char[2];
            switch(input_text[count])
            {
                case 'a'..'z', 'A'..'Z':
                {
                    if(upper)
                    {
                        format(_char, 2, "%c", toupper(input_text[count]));
                        strcat(output_text, _char, strlen(input_text) + 1);
                        upper = false;
                    }
                    else
                    {
                        format(_char, 2, "%c", input_text[count]);
                        strcat(output_text, _char, strlen(input_text) + 1);
                    }
                }
                default:
                {
                    format(_char, 2, "%c", input_text[count]);
                    strcat(output_text, _char, strlen(input_text) + 1);
                    upper = true;
                }
            }
            count ++;
        }
    }
}



RE: Códigos Úteis - NelsonC. - 09/12/2020

Comando de Localizar com o checkpoint atualizando.

Lembrando, os comandos são do meu gm antigo, basta você colocar suas próprias variáveis.

Código:
CMD:localizar(playerid, params[])
{
    new id;
    if(Jogador[playerid][Admin] > 0 || Jogador[playerid][Profissao] == Taxista || Jogador[playerid][Profissao] == PMilitar || Jogador[playerid][Profissao] == Mecanico)
    {
        if(sscanf(params, "u", id)) return SendClientMessage(playerid, 0xFF0000FF, "* Use: /Localizar (id)");
        if(IsPlayerConnected(id))
        {
            if(playerid == id) return SendClientMessage(playerid, COLOR_ERROR, "* Você não pode localizar você mesmo!");
            if(Localizando[playerid] == 0)
            {
                Localizando[playerid] = 1;
                SendClientFormat(playerid, 0x00FF00FF, "| INFO | Você está localizando o(a) jogador(a) %s(%d).", GetUserName(id), id);
                TimerLocalizar[playerid] = SetTimerEx("LocalizarPlayer", 500, true, "ii", playerid, id);
                return true;
            }
            else SendClientMessage(playerid, 0xFF0000FF, "* Você já está localizando alguém!");
            return true;
        }
        else SendClientMessage(playerid, 0xFF0000FF, "* Jogador não conectado!");
        return true;
    }
    else SendClientMessage(playerid, COLOR_ERROR, "* Você não tem permissão!");
    return true;
}

Código:
CMD:deslocalizar(playerid, params[])
{
    if(Jogador[playerid][Admin] > 0 || Jogador[playerid][Profissao] == Taxista || Jogador[playerid][Profissao] == PMilitar || Jogador[playerid][Profissao] == Mecanico)
    {
        if(Localizando[playerid] == 1)
        {
            DisablePlayerCheckpoint(playerid);
            Localizando[playerid] = 0;
            SendClientMessage(playerid, 0x00FF00FF, "| INFO | Jogador(a) deslocalizado(a) com sucesso!");
            KillTimer(TimerLocalizar[playerid]);
            return true;
        }
        else SendClientMessage(playerid, COLOR_ERROR, "* Você não está localizando um player!");
        return true;
    }
    else SendClientMessage(playerid, COLOR_ERROR, "* Você não tem permissão!");
    return true;
}


Código:
forward LocalizarPlayer(playerid, giveplayerid);
public LocalizarPlayer(playerid, giveplayerid)
{
    new
        Float: X,
        Float: Y,
        Float: Z;
    GetPlayerPos(giveplayerid, X, Y, Z);
    SetPlayerCheckpoint(playerid, X, Y, Z, 0.0);
    return true;
}