Cуdigos Ъteis #1

Muitas pessoas verificam, atй vбrias vezes no cуdigo, se o valor de uma variбvel estб entre 2 valores.
Exemplo:
pawn Code:
if(money >= 1 && money <= 9999) { /* codigo */ }
O mais fбcil, para fazer esta verificaзгo, й de criar uma funзгo, como por exemplo:
pawn Code:
stock EntreAB(menor, valor, maior) {
    return (valor >= menor && valor <= maior) ? 1 : 0;
}
E usar assim, nos "if's".
pawn Code:
if(EntreAB(1, money, 9999)) {
     GivePlayerMoney(playerid, money);
}
Й simples, bбsico, e se formos a ver, й uma das funзхes que dб muito jeito para o dia-a-dia de um programador.
Um dos sнtios onde ela iria ser bastante utilizada й, por exemplo, nos comandos para dar dinheiro aos jogadores(exemplo: /givecash <playerid> <valor>), e usamos o EntreAB para verificar se o valor introduzido(neste caso, o dinheiro) й vбlido ou nгo(exemplo: mнnimo de 1, mбximo de 9999).
Reply

Quote:
Originally Posted by GWMPT
View Post
Muitas pessoas verificam, atй vбrias vezes no cуdigo, se o valor de uma variбvel estб entre 2 valores.
Exemplo:
pawn Code:
if(money >= 1 && money <= 9999) { /* codigo */ }
O mais fбcil, para fazer esta verificaзгo, й de criar uma funзгo, como por exemplo:
pawn Code:
stock EntreAB(menor, valor, maior) {
    return (valor >= menor && valor <= maior) ? 1 : 0;
}
E usar assim, nos "if's".
pawn Code:
if(EntreAB(1, money, 9999)) {
     GivePlayerMoney(playerid, money);
}
Й simples, bбsico, e se formos a ver, й uma das funзхes que dб muito jeito para o dia-a-dia de um programador.
Um dos sнtios onde ela iria ser bastante utilizada й, por exemplo, nos comandos para dar dinheiro aos jogadores(exemplo: /givecash <playerid> <valor>), e usamos o EntreAB para verificar se o valor introduzido(neste caso, o dinheiro) й vбlido ou nгo(exemplo: mнnimo de 1, mбximo de 9999).
Transforma esse Stock para #define, ficaria melhor em diversos aspectos :P
Reply

Quote:
Originally Posted by JonathanFeitosa
View Post
Transforma esse Stock para #define, ficaria melhor em diversos aspectos :P
Nгo trabalho jб а algum tempo com as macros do PAWN, e estou a perder o jeito de como trabalhar com o "preprocessor" do PAWN...

Mas em define, se nгo estou em erro, deverб ficar alguma coisa assim:
pawn Code:
#define EntreAB(%0,%1,%2)    (%1 >= %0 && %1 <= %2)
Como disse, estou a perder o jeito...
Reply

Quote:
Originally Posted by GWMPT
View Post
Muitas pessoas verificam, atй vбrias vezes no cуdigo, se o valor de uma variбvel estб entre 2 valores.
Exemplo:
pawn Code:
if(money >= 1 && money <= 9999) { /* codigo */ }
O mais fбcil, para fazer esta verificaзгo, й de criar uma funзгo, como por exemplo:
pawn Code:
stock EntreAB(menor, valor, maior) {
    return (valor >= menor && valor <= maior) ? 1 : 0;
}
E usar assim, nos "if's".
pawn Code:
if(EntreAB(1, money, 9999)) {
     GivePlayerMoney(playerid, money);
}
Й simples, bбsico, e se formos a ver, й uma das funзхes que dб muito jeito para o dia-a-dia de um programador.
Um dos sнtios onde ela iria ser bastante utilizada й, por exemplo, nos comandos para dar dinheiro aos jogadores(exemplo: /givecash <playerid> <valor>), e usamos o EntreAB para verificar se o valor introduzido(neste caso, o dinheiro) й vбlido ou nгo(exemplo: mнnimo de 1, mбximo de 9999).
Realmente pode facilitar o uso, porйm nгo vejo tanta necessidade, em vista posso usar desta maneira, com uma resposta bem mais rбpida:
pawn Code:
if(1 >= money <= 9999) { /* codigo */ }
Reply

COMANDO /salario APENAS PARA ADMIN SO COLOCAR SUA VARIAVEL

pawn Code:
if (strcmp("/salario", cmdtext, true, 10) == 0)
    {
        SendClientMessage(playerid,0xFFB400FF, "[BpL] Todos player onlines receberam salбrio do mes ");
        GivePlayerMoney(playerid, 5000);
        new rand = random(sizeof(Cachorro));
        new string[128];
        format(string, sizeof(string),"[BpL] Todos player onlines receberam salбrio do mes ", Cachorro[rand]);
        SendClientMessage(playerid, 0xFFB400FF,string);
        return 1;
    }
    return 0;
 }
COMANDO /resetmoney PARA RESETAR O MONEY DO PLAYER SУ COLOCAR SUA VARIAVEL DE ADMIN

pawn Code:
CMD:resetmoney(playerid,params[]) {
       ResetPlayerMoney(playerid);
       new id=strval(params);
       if(!strlen(params) || !IsNumeric(params)) {
       SendClientMessage(playerid,0xFFB400FF,"|INFO| /resetmoney [playerid]");
    }
       else if(!IsPlayerConnected(id))
    {
        return SendClientMessage(playerid,0xFFB400FF,"Esse player nгo й um ativo");
    }
    else if(IsPlayerConnected(id)){

        printf("ID: %d",id);
    }
    return 0;
}
TAMO JUNTO
Reply

Quote:
Originally Posted by paulotuto
View Post
COMANDO /salario APENAS PARA ADMIN SO COLOCAR SUA VARIAVEL

pawn Code:
if (strcmp("/salario", cmdtext, true, 10) == 0)
    {
        SendClientMessage(playerid,0xFFB400FF, "[BpL] Todos player onlines receberam salбrio do mes ");
        GivePlayerMoney(playerid, 5000);
        new rand = random(sizeof(Cachorro));
        new string[128];
        format(string, sizeof(string),"[BpL] Todos player onlines receberam salбrio do mes ", Cachorro[rand]);
        SendClientMessage(playerid, 0xFFB400FF,string);
        return 1;
    }
    return 0;
 }
COMANDO /resetmoney PARA RESETAR O MONEY DO PLAYER SУ COLOCAR SUA VARIAVEL DE ADMIN

pawn Code:
CMD:resetmoney(playerid,params[]) {
       ResetPlayerMoney(playerid);
       new id=strval(params);
       if(!strlen(params) || !IsNumeric(params)) {
       SendClientMessage(playerid,0xFFB400FF,"|INFO| /resetmoney [playerid]");
    }
       else if(!IsPlayerConnected(id))
    {
        return SendClientMessage(playerid,0xFFB400FF,"Esse player nгo й um ativo");
    }
    else if(IsPlayerConnected(id)){

        printf("ID: %d",id);
    }
    return 0;
}
TAMO JUNTO
pawn Code:
format(string, sizeof(string),"[BpL] Todos player onlines receberam salбrio do mes ", Cachorro[rand]);
SendClientMessage(playerid, 0xFFB400FF,string);
Se alguйm copiar e colar vai dar erro por faltar a array Cachorro, e ainda que o comando nгo precisa da string, e a unica coisa que eu percebi que o comado faz sem a array й enviar uma mensagem ao servidor e dar 5 mil ao jogador que usar o comando. Eu acho que estб faltando algumas coisa nesse comando.

O segundo comando nгo reseta o dinheiro do jogador escolhido mas reseta do jogador que executou o comando. E se vocк digita o comando e coloca um id vбlido ele sу vai enviar uma mensagem ao console.
Reply

Quote:
Originally Posted by xOrder
Посмотреть сообщение
Na verdade, eu nгo usei "otimizar" no sentido de fluides, eu usei no sentido de nгo precisar escrever "forward" e nem "public", me expressei mal, desculpe!

Sobre as variбveis, obrigado, nem tinha reparado, arrumado
Quote:
Originally Posted by smiiir
Посмотреть сообщение
E o que tem a ver com isso com otimizaзгo? й muito melhor utilizar um macro do que ficar utilizando forward, public, eu mesmo utilizo FUNCAO:: em vez de ficar declarando.
Poderia confundir outras pessoas que o codigo seria mais rapido so por usar o macro, o que nao й verdade. So esclareci isso nada de mais.

Cada um usa como quer.

Quote:
Originally Posted by Cor3y
Посмотреть сообщение
@PT, quando ele diz otimizar, ele diz no sentido de nгo precisar "escrever forward, public" e etc.
Entendi so expliquei porque poderia ter gente que podesse se confundir. vlw
Reply

· Sistema Bбsico de Arco iris nos nomes dos players


E aн galera, criei uma codigo para deixar os player com o nick colorido no formato de arco iris
ele funciona assim, quando alguйm player logar ela vai setar uma cor para ele com
o determinado id dele quanto mais players mais cores vejam o exemplo abaixo.
(CAPACIDADE PARA APROXIMADAMENTE 120 PLAYERS)

Exemplo:
Joгo
Taнs
Marcelo
Lucas
Marcos
Jonas
Alberto

Acho que essa FilterScript й um pouco gay.
pawn Код:
//
// FilterScript - Arco Iris nos Nomes
// Desenvolvida por Heisen/Biel
//

#include <a_samp>

new CoresDoNome[] =
{
    0xFF0000FF,
    0xFF1500FF,
    0xFF3000FF,
    0xFF4500FF,
    0xFF6000FF,
    0xFF7500FF,
    0xFF9000FF,
    0xFFA500FF,
    0xFFC000FF,
    0xFFD500FF,
    0xFFFF00FF,
    0xD5FF00FF,
    0xC0FF00FF,
    0xA5FF00FF,
    0x90FF00FF,
    0x75FF00FF,
    0x60FF00FF,
    0x45FF00FF,
    0x30FF00FF,
    0x15FF00FF,
    0x00FF00FF,
    0x00FF15FF,
    0x00FF30FF,
    0x00FF45FF,
    0x00FF60FF,
    0x00FF75FF,
    0x00FF90FF,
    0x00FFA5FF,
    0x00FFC0FF,
    0x00FFD5FF,
    0x00FFFFFF,
    0x00D5FFFF,
    0x00C0FFFF,
    0x00A5FFFF,
    0x0090FFFF,
    0x0075FFFF,
    0x0060FFFF,
    0x0045FFFF,
    0x0030FFFF,
    0x0015FFFF,
    0x0000FFFF
};

public OnPlayerConnect(playerid)
{
    if(playerid>123)
    {
        SetPlayerColor(playerid,CoresDoNome[playerid-123]);
    }
    else if(playerid>82)
    {
        SetPlayerColor(playerid,CoresDoNome[playerid-82]);
    }
    else if(playerid>41)
    {
        SetPlayerColor(playerid,CoresDoNome[playerid-41]);
    }
    else
    {
        SetPlayerColor(playerid,CoresDoNome[playerid]);
    }
    return 1;
}
Obrigado.

Reply

Quote:
Originally Posted by Heisen
Посмотреть сообщение
· Sistema Bбsico de Arco iris nos nomes dos players


E aн galera, criei uma codigo para deixar os player com o nick colorido no formato de arco iris
ele funciona assim, quando alguйm player logar ela vai setar uma cor para ele com
o determinado id dele quanto mais players mais cores vejam o exemplo abaixo.

Exemplo:
Joгo
Taнs
Marcelo
Lucas
Marcos
Jonas
Alberto

Acho que essa FilterScript й um pouco gay.
pawn Код:
//
// FilterScript - Arco Iris nos Nomes
// Desenvolvida por Heisen/Biel
//

#include <a_samp>

new CoresDoNome[] =
{
    0xFF0000FF,
    0xFF1500FF,
    0xFF3000FF,
    0xFF4500FF,
    0xFF6000FF,
    0xFF7500FF,
    0xFF9000FF,
    0xFFA500FF,
    0xFFC000FF,
    0xFFD500FF,
    0xFFFF00FF,
    0xD5FF00FF,
    0xC0FF00FF,
    0xA5FF00FF,
    0x90FF00FF,
    0x75FF00FF,
    0x60FF00FF,
    0x45FF00FF,
    0x30FF00FF,
    0x15FF00FF,
    0x00FF00FF,
    0x00FF15FF,
    0x00FF30FF,
    0x00FF45FF,
    0x00FF60FF,
    0x00FF75FF,
    0x00FF90FF,
    0x00FFA5FF,
    0x00FFC0FF,
    0x00FFD5FF,
    0x00FFFFFF,
    0x00D5FFFF,
    0x00C0FFFF,
    0x00A5FFFF,
    0x0090FFFF,
    0x0075FFFF,
    0x0060FFFF,
    0x0045FFFF,
    0x0030FFFF,
    0x0015FFFF,
    0x0000FFFF
};

public OnPlayerConnect(playerid)
{
    SetPlayerColor(playerid,CoresDoNome[playerid]);
    return 1;
}
Obrigado.

pawn Код:
public OnPlayerConnect(playerid)
{
    SetPlayerColor(playerid,CoresDoNome[playerid]);
    return 1;
}
Isso vai bugar... Entra alguйm com um id maior que numero maximo de definiзхes em CoresDoNome e vai dar problema, simplesmente nгo vai setar nada.
Reply

ANIMAЗХES
PHP код:
if(strcmp("/renderse"cmdtrue) == 0)
{
SetPlayerSpecialAction(playerid10);
return 
1;
}
if(
strcmp("/ligar"cmdtrue) == 0)
{
SetPlayerSpecialAction(playerid11);
return 
1;
}
if(
strcmp("/desligar"cmdtrue) == 0)
{
SetPlayerSpecialAction(playerid13);
return 
1;
}
if(
strcmp("/bebado"cmdtrue) == 0)
{
ApplyAnimation(playerid"PED""WALK_DRUNK"4.011110);
return 
1;
}
if(
strcmp("/bomba"cmdtrue) == 0)
{
ClearAnimations(playerid);
ApplyAnimation(playerid"BOMBER""BOM_Plant"4.000000);
return 
1;
}
if(
strcmp("/apontar"cmdtrue) == 0)
{
ApplyAnimation(playerid"ped""ARRESTgun"4.00111, -1);
return 
1;
}
if(
strcmp("/merda"cmdtrue) == 0)
{
ApplyAnimation(playerid"RAPPING""Laugh_01"4.000000);
return 
1;
}
if(
strcmp("/mascararse"cmdtrue) == 0)
{
ApplyAnimation(playerid"SHOP""ROB_Shifty"4.000000);
return 
1;
}
if(
strcmp("/roubar"cmdtrue) == 0)
{
ApplyAnimation(playerid"SHOP""ROB_Loop_Threat"4.010000);
return 
1;
}
if(
strcmp("/cruzarb"cmdtrue) == 0)
{
ApplyAnimation(playerid"COP_AMBIENT""Coplook_loop"4.00111, -1);
return 
1;
}
if(
strcmp("/deitar"cmdtrue) == 0)
{
ApplyAnimation(playerid"BEACH""bather"4.010000);
return 
1;
}
if(
strcmp("/abaixar"cmdtrue) == 0)
{
ApplyAnimation(playerid"ped""cower"3.010000);
return 
1;
}
if(
strcmp("/vomitar"cmdtrue) == 0)
{
ApplyAnimation(playerid"FOOD""EAT_Vomit_P"3.000000);
return 
1;
}
if(
strcmp("/comer"cmdtrue) == 0)
{
ApplyAnimation(playerid"FOOD""EAT_Burger"3.000000);
return 
1;
}
if(
strcmp("/rap"cmdtrue) == 0)
{
ApplyAnimation(playerid"ON_LOOKERS""wave_loop"4.010000);
return 
1;
}
if(
strcmp("/passaramao"cmdtrue) == 0)
{
ApplyAnimation(playerid"SWEET""sweet_ass_slap"4.000000);
return 
1;
}
if(
strcmp("/cobrar"cmdtrue) == 0)
{
ApplyAnimation(playerid"DEALER""DEALER_DEAL"4.000000);
return 
1;
}
if(
strcmp("/overdose"cmdtrue) == 0)
{
ApplyAnimation(playerid"CRACK""crckdeth2"4.010000);
return 
1;
}
if(
strcmp("/fumar"cmdtrue) == 0)
{
ApplyAnimation(playerid"SMOKING""M_smklean_loop"4.010000);
return 
1;
}
if(
strcmp("/fumar2"cmdtrue) == 0)
{
ApplyAnimation(playerid"SMOKING""F_smklean_loop"4.010000);
return 
1;
}
if(
strcmp("/sentar"cmdtrue) == 0)
{
ApplyAnimation(playerid"BEACH""ParkSit_M_loop"4.010000);
return 
1;
}
if(
strcmp("/conversar"cmdtrue) == 0)
{
ApplyAnimation(playerid"PED""IDLE_CHAT"4.000000);
return 
1;
}
if(
strcmp("/fodase"cmdtrue) == 0)
{
ApplyAnimation(playerid"PED""****u"4.000000);
return 
1;
}
if(
strcmp("/taichi"cmdtrue) == 0)
{
ApplyAnimation(playerid"PARK""Tai_Chi_Loop"4.010000);
return 
1;
}
if(
strcmp("/observar"cmdtrue) == 0)
{
ApplyAnimation(playerid"BAR""dnk_stndF_loop"4.010000);
return 
1;
}
//---------------------Lista Animaзхes------------------------------------
if(strcmp("/animes"cmdtrue) == 0)
{
SendClientMessage(playeridADMINFS_MESSAGE_COLOR"Lista de Animes :");
SendClientMessage(playeridADMINFS_MESSAGE_COLOR"/renderse /ligar /desligar /bebado /bomba /apontar /merda /mascararse");
SendClientMessage(playeridADMINFS_MESSAGE_COLOR"/roubar /cruzarb /deitar /abaixar /vomitar /comer /rap /passaramao");
SendClientMessage(playeridADMINFS_MESSAGE_COLOR"/cobrar /overdose /fumar /fumar2 /sentar /conversar /fodase /taichi");
SendClientMessage(playeridADMINFS_MESSAGE_COLOR"/observar ");
return 
1;

Reply

Pegue o maior ou o menor valor de uma array.

PHP код:
stock GetTypeValueArray(array[], typemValues) {
    new 
tempValue = array[0];
    for(new 
imValuesi++) {
        switch(
type) {
            case 
0: {
                if(
tempValue < array[i]) {
                    
tempValue = array[i];
                }
            }
            case 
1: {
                if(
tempValue > array[i]) {
                    
tempValue = array[i];
                }
            }
        }
    } return 
tempValue;

Exemplo:

PHP код:
new n_array[4] = {-1012};
main() {
    
printf("%i"GetTypeValueArray(n_array14)); // Type 1 = Pegue o menor valor da array.
    
printf("%i"GetTypeValueArray(n_array04)); // Type 2 = Pegue o maior valor da array.
      // OUTPUT: -1, 2.

Reply

Um bom mйtodo (pra mim) de criar entradas e saнda prй-definidas.

pawn Код:
enum drInfo
{
    Nome[32],  
    Float:Porta[6],
    Interior[2]
    // Adicione нcones do mapa, modelos da pickup, virtual world, se quiser.
}

new const
    PortasPreDefinidas[3][drInfo] = {
    {{"Banco"}, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, {0, 3}},
    {{"Prefeitura"}, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, {0, 8}},
    {{"Hotel"}, {0.0, 0.0, 0.0, 0.0, 0.0, 0.0}, {0, 14}}
    // Vou explicar um pouquinho sobre isso que estб acima:
    /*
        {
            {
                "Hotel" // NOME QUE APARECERБ NO 3DTEXTLABEL DA ENTRADA (ONDE /ENTRAR SERБ DIGITADO)
            },
            {
                0.0, // COORDENADA X DA ENTRADA (ONDE /ENTRAR SERБ DIGITADO)
                0.0, // COORDENADA Y DA ENTRADA (ONDE /ENTRAR SERБ DIGITADO)
                0.0, // COORDENADA Z DA ENTRADA (ONDE /ENTRAR SERБ DIGITADO)
                0.0, // COORDENADA X DA SAНDA (ONDE /SAIR SERБ DIGITADO)
                0.0, // COORDENADA Y DA SAНDA (ONDE /SAIR SERБ DIGITADO)
                0.0  // COORDENADA Z DA SAНDA (ONDE /SAIR SERБ DIGITADO)
            },
            {
                0, // INTERIOR DA ENTRADA (ONDE /ENTRAR SERБ DIGITADO)
                14 // INTERIOR DA SAНDA (ONDE /SAIR SERБ DIGITADO)
            }
        }
    */

};

public OnGameModeInit()
{
    for(new i = 0; i < sizeof(PortasPreDefinidas); ++i)
    {
        // ENTRADA
        AddStaticPickup(1318, 1, PortasPreDefinidas[j][Porta][0], PortasPreDefinidas[j][Porta][1], PortasPreDefinidas[j][Porta][2]);
        CreateDynamic3DTextLabel(PortasPreDefinidas[j][Nome], 0x00FF00FF, PortasPreDefinidas[j][Porta][0], PortasPreDefinidas[j][Porta][1], PortasPreDefinidas[j][Porta][2] + 1, 10);

        // SAНDA
        AddStaticPickup(1318, 1, PortasPreDefinidas[j][Porta][3], PortasPreDefinidas[j][Porta][4], PortasPreDefinidas[j][Porta][5]);
        CreateDynamic3DTextLabel("Saнda", 0xFF0000FF, PortasPreDefinidas[j][Porta][3], PortasPreDefinidas[j][Porta][4], PortasPreDefinidas[j][Porta][5] + 1, 10);
    }

    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if(!strcmp("/entrar", cmdtext, true))
    {
        for(new i = 0; i < sizeof(PortasPreDefinidas); ++i)
        {
            if(IsPlayerInRangeOfPoint(playerid, 1.0, PortasPreDefinidas[i][Porta][0], PortasPreDefinidas[i][Porta][1], PortasPreDefinidas[i][Porta][2]))
            {
                SetPlayerPos(playerid, PortasPreDefinidas[i][Porta][3], PortasPreDefinidas[i][Porta][4], PortasPreDefinidas[i][Porta][5]);
                SetPlayerInterior(playerid, PortasPreDefinidas[i][Interior][1]);
                break;
            }
        }
    }

    else if(!strcmp("/sair", cmdtext, true))
    {
        for(new i = 0; i < sizeof(PortasPreDefinidas); ++i)
        {
            if(IsPlayerInRangeOfPoint(playerid, 1.0, PortasPreDefinidas[i][Porta][3], PortasPreDefinidas[i][Porta][4], PortasPreDefinidas[i][Porta][5]))
            {
                SetPlayerPos(playerid, PortasPreDefinidas[i][Porta][0], PortasPreDefinidas[i][Porta][1], PortasPreDefinidas[i][Porta][2]);
                SetPlayerInterior(playerid, PortasPreDefinidas[i][Interior][0]);
                break;
            }
        }
    }

    return 1;
}
Reply

Veja quantas cйlulas esta a desperdiзar de suas strings e as redefina!

pawn Код:
stock CellsNull(array[], size = sizeof(array))
{
    for(new i; i < size; i++)
    {
        if(array[i] == '\0')
        {
            printf("Estas desperdiзando %d cйlulas", size-i);
            break;
        }
    }
}
Como usar:
pawn Код:
new string[50];

string = "бgua";

CellsNull(string);
Lembrando que isto sу й valido se vocк estб igualando cada valor de sua cйlula suscetivamente, ou seja, nгo terбs um resultado exato se fizer assim:
pawn Код:
string[0] = 'a';
string[5] = 'b';
Reply

Quote:
Originally Posted by Nickvj7
Посмотреть сообщение
pawn Код:
public OnPlayerConnect(playerid)
{
    SetPlayerColor(playerid,CoresDoNome[playerid]);
    return 1;
}
Isso vai bugar... Entra alguйm com um id maior que numero maximo de definiзхes em CoresDoNome e vai dar problema, simplesmente nгo vai setar nada.
O certo seria criar uma rand para escolher cores aleatуrias independente do ID da pessoa ou da ordem das cores. Apenas um comentбrio.
Reply

Quote:
Originally Posted by pWesley
Посмотреть сообщение
O certo seria criar uma rand para escolher cores aleatуrias independente do ID da pessoa ou da ordem das cores. Apenas um comentбrio.
Claro
pawn Код:
public OnPlayerConnect(playerid)
{
    SetPlayerColor(playerid, ConvertToColor(random(99),random(99),random(99),255) );

    return 1;
}

stock ConvertToColor(RR,GG,BB,AA) return (RR*16777216)+(GG*65536)+(BB*256)+AA;
@EDIT Esqueci de setar a cor...
Reply

Fala Galera, vim postar este sistema AFK que fiz apartir do 0, com algumas ajudas:
PHP код:
//Sistema AFK By: MatheusSpohr
new bool:AFK[MAX_PLAYERS], TaAFK[300], NaoTaAFK[300], Nome[24], MotivoAFK[30], PlayersAFK[128], Text3D:label[MAX_PLAYERS], texto3d[70];
CMD:afk(playeridparams[])
{
    if(
sscanf(params"s[30]"MotivoAFK)) return SendClientMessage(playeridBranco"{FFFF00}[INFO]:{FF0000} Use: /AFK [Motivo]");
    if(
AFK[playerid] == true) return SendClientMessage(playeridBranco"{FFFF00}[INFO]:{FF0000} Vocк Jб Estб AFK, Use: /SairAFK");
    
//if(APlayerData[playerid][JobStarted] == true) return SendClientMessage(playerid, Branco, "{FFFF00}[INFO]:{FF0000} Vocк Nгo Pode Utilizar Este Comando Enquanto Estiver Realizando Um Trabalho.");
    
AFK[playerid] = true;
    
TogglePlayerControllable(playerid0);
    
GetPlayerName(playeridNomesizeof(Nome));
    
SendAdminText(playerid"/Afk"params);
    
format(TaAFKsizeof(TaAFK), "{FFFF00}[Sistema AFK]: {FF1493}O Jogador {FFFFFF}%s [ID:%d] {FF1493}Estб Ausente.(Razгo:%s)"NomeplayeridMotivoAFK);
    
SendClientMessageToAll(BrancoTaAFK);
    
format(texto3dsizeof(texto3d),"{00FFFF}%s [ID:%d] Esta AFK\nMotivo: %s",NomeplayeridMotivoAFK);
    
label[playerid] = Create3DTextLabel(texto3d0xFFFFFFFF30.040.050.040.00);
    
Attach3DTextLabelToPlayer(label[playerid], playerid0.00.00.7);
    return 
1;
}
CMD:sairafk(playeridparams[])
{
    if(
AFK[playerid] == false) return SendClientMessage(playeridBranco"{FFFF00}[INFO]:{FF0000} Vocк Nгo Estб AFK!");
    
AFK[playerid] = false;
    
TogglePlayerControllable(playerid1);
    
GetPlayerName(playeridNomesizeof(Nome));
    
SendAdminText(playerid"/SairAfk"params);
    
format(NaoTaAFKsizeof(NaoTaAFK), "{FFFF00}[Sistema AFK]: {FF1493}O Jogador {FFFFFF}%s [ID:%d] {FF1493}Voltou Ao Jogo."Nomeplayerid);
    
GameTextForPlayer(playerid"~W~Voce Saiu Do Modo AFK!"50001);
    
SendClientMessageToAll(BrancoNaoTaAFK);
    
Delete3DTextLabel(label[playerid]);
    return 
1;
}
CMD:playersafk(playeridparams[])
{
    
SendAdminText(playerid"/PlayersAfk"params);
    
SendClientMessage(playeridBranco"{FFFF00}[Sistema AFK]: {FF1493} Players AFK:");
    for(new 
0MAX_PLAYERSi++)
    {
        if(
IsPlayerConnected(i))
        {
            if((
AFK[i] == true))
            {
                 
GetPlayerName(iNomesizeof(Nome));
                 
GameTextForPlayer(playerid"~w~Players AFK:"50005);
                   
format(PlayersAFK128"{FFFF00}[AFK]:{FFFFFF} %s {FF1493}(Razгo:%s)"NomeMotivoAFK);
                 
SendClientMessage(playeridBrancoPlayersAFK);
            }
       }
    }
    return 
1;
}
//Sistema AFK By: MatheusSpohr 
Crйditos:
matheusspohr - Pela Criaзгo.
TenhoUmaDuvida - Pela Ajuda Prestada.
mau.tito - Pelas Label's & Comando /PlayersAFK.
Forum Samp - Por Dъvidas Exclarecidas.

@Edit:
A Linha:
PHP код:
if(APlayerData[playerid][JobStarted] == true) return SendClientMessage(playeridBranco"{FFFF00}[INFO]:{FF0000} Vocк Nгo Pode Utilizar Este Comando Enquanto Estiver Realizando Um Trabalho."); 
estб como comentбrio pois se seu servidor que vocк irб utilizar este cуdigo for da base PPC_Trucking, vocк poderб retirar dos comentбrios, pois ele inibe um bug que й comum os players descobrirem facil.
Reply

Quote:
Originally Posted by PT
Посмотреть сообщение
Meu deus, sabes ao menos o que estas a fazer?
claro, qual problema?
Reply

Quote:
Originally Posted by iTakelot
Посмотреть сообщение
claro, qual problema?
Por mais simples que seja o cуdigo, й bom testar antes de compartilhar.
Reply

PHP код:
/* 

    ipsLuan - http://forum.sa-mp.com/member.php?u=194873

*/

stock Ler(name[], playerid)
{
    new 
nomes[255];
    new 
File:archive;
    
archive fopen(nameio_read);
    while(
fread(archivenomes)) 
        
SendClientMessage(playerid0xFFFFFFFFnomes);
    
fclose(archive);
}

stock Escrever(name[], text[])
{
    new 
string[128];
    
format(stringsizeof(string), "%s\r\n"text);
    new 
File:archive;
    
archive fopen(nameio_append);
    
fwrite(archivestring);
    
fclose(archive);

Exemplos de uso:
PHP код:
for(new 06i++)
        
Escrever("admins.cfg""Luan_Argolo");

Ler("admins.cfg"playerid); 
Reply

Tutorial de introduзгo ao servidor:

PHP код:
#define ETAPAS_TUTORIAL 5
forward Tutorial(playeridetapa);
new const
    
tempoTutorial[ETAPAS_TUTORIAL] = {
        
1000// duraзгo da etapa 1
        
2000// duraзгo da etapa 2
        
3000// duraзгo da etapa 3
        
4000// duraзгo da etapa 4
        
5000 // duraзгo da etapa 5
    
};
public 
Tutorial(playeridetapa) {
    if(
etapa || etapa ETAPAS_TUTORIAL) {
        return 
1;
    }
    if(
etapa == ETAPAS_TUTORIAL) {
        
// Fim do tutorial
        
return 1;
    }
    switch(
etapa) {
        case 
0: {
            
// etapa 1
        
}
        case 
1: {
            
// etapa 2
        
}
        case 
2: {
            
// etapa 3
        
}
        case 
3: {
            
// etapa 4
        
}
        case 
4: {
            
// etapa 5
        
}
    }
    return 
SetTimerEx("Tutorial"tempoTutorial[etapa], 0"ii"playerid, (etapa 1));

Reply


Forum Jump:


Users browsing this thread: 8 Guest(s)