[TUT]Sistema de Estatнsticas Completo
#1

SISTEMA DE STATUS


Bom, estou hoje a postar meu primeiro tutorial / post aqui no fуrum. Como diz o tнtulo, ensinarei a vocкs construir um sistema de status que mostra:

- Assassinatos
- Mortes
- Ratio
- Dinheiro
- Vida
- Colete
- Vida Veнculo


Pesquisei aqui no fуrum e nгo vi um tгo completo assim. Aqui vai o tutorial:

Primeiramente, faзam define de cores, para que fique mais organizado, ai vai algumas delas:

pawn Код:
#define COR_BRANCO          0xF6F6F6AA
#define COR_CINZA           0xBEBDBEAA
#define COR_VERMELHO    0xF60000AA
#define COR_AMARELO         0xF6DF00AA
Essas defines ficam depois das 'includes'.

Apуs as defines de cores inseridas, criem as 'new' que serгo usadas para definir o nъmero de assassinatos e mortes:

pawn Код:
new Kills[MAX_PLAYERS];
new Deaths[MAX_PLAYERS];
Й necessбrio o uso do 'MAX_PLAYERS' para que nossa variбvel sirva para cada player.

Assim que definido as 'new', vamos para a callback OnPlayerDeath, onde serгo computados os kills e deaths de cada player:

pawn Код:
public OnPlayerDeath(playerid, killerid, reason) // Nessa public, tudo o que vocк colocar de 'playerid', serб uma vнtima, 'killerid', serб o assassino.
{
    Kills[killerid]++; // ++ representa que irб adicionar mais kills.
    Deaths[playerid]++; // Praticamente o mesmo acima, mas irб adicionar deaths.

    GameTextForPlayer(playerid,"~r~Morto!",5000,2); // GameText quando o jogador morrer, ou seja, 'playerid'. Lembrando que isso й opcional.
    return 1;
}
Bom, nosso sistema de computaзгo de kills e deaths jб estб pronto. Vamos agora ao comando que irб mostrar suas estatнsticas/status.
Vб a 'public OnPlayerCommandText' e siga as instruзхes:

pawn Код:
public OnPlayerCommandText(playerid,cmdtext[])
{
    if(strcmp(cmd,"/status",true) == 0)
    {
    new string[256]; // 'string' usada para mostrar nossas variбveis.

    new grana = GetPlayerMoney(playerid); // 'grana' й um, digamos, 'diminuitivo' de GetPlayerMoney.
    new ping = GetPlayerPing(playerid); // 'ping' й tambйm, um 'diminuitivo' de GetPlayerPing.
   
    new Float:vida; // Essa 'float' seria como um 'OnPlayerUpdate', mostrarб as informaзхes em tempo real.
    GetPlayerHealth(playerid,vida); // GetPlayerHealth define o que o 'float' acima mostrarб, no caso, vida (hp - health player).

    new Float:colete; // O mesmo do outro 'float' acima, mas mostrarб seu colete (ap - armour player).
    GetPlayerArmour(playerid,colete); // Definimos o que й o 'float' acima, no caso, colete (ap - armour player).

    new Float:vidav; // Como nos outros, mas esse 'float' mostrarб a vida do veнculo (hc).
    GetVehicleHealth(GetPlayerVehicleID(playerid),vidav); // Definimos o que o 'float' acima mostrarб, no caso, vida veнculo (hc - health car).

    format(string,sizeof(string),"Assassinatos (%d) - Mortes (%d) - Ratio (%00.1f) - Dinheiro (%d)",
    Kills[playerid],Deaths[playerid],Float:Kills[playerid]/Float:Deaths[playerid],grana);
    SendClientMessage(playerid,COR_AMARELO,string); // Irб mostrar ao player nossa 'string'.
    format(string,sizeof(string),"Vida (%0.1f) - Colete (%0.1f) - Vida Veнculo (%0.1f) - Ping (%d)",
    vida,colete,vidav,ping);
    SendClientMessage(playerid,COR_AMARELO,string); // O mesmo acima, irб mostrar nossa 'string', sу que na linha de baixo.
    return 1;
}
    return SendClientMessage(playerid,COR_CINZA,"O comando digitado nгo existe."); // Um pequeno complemento para nгo mostrar 'SERVER: Unknown Command' ao digitar um comando errado.
}
Explicando: Todos caractйres %d, representa um numeral, na nossa 'format', existem vбrias delas, mostrando Assassinatos e mortes, por exemplo. No ъltimo vнrgula, na linha de baixo, percebe-se que inserimos 'Kills[playerid]', isso mostrarб nossa variбvel no primeiro numeral, no caso, no primeiro %d. O mesmo com os outros.

Bom, eu nгo me estou lembrando de mais nada! Viu como nгo й difнcil ? Creio que serб muito ъtil em seu servidor de Deatch Match / Gang War / Team Deatch Match.
Espero postar diferentes tutoriais para vocк dar aquela 'incrementada' no seu gamemode.

Em breve postarei como gravar essas estatнsticas em uma dini.

OBS: Post criado por mim, nгo permitido divulgaзгo do mesmo em outros sites/blogs.

Desenvolvimento: Devastador | Dark.Angel_
Reply
#2

Otimo tutorial. Mais postou na area errada
Reply
#3

Devastador? fг do Devastator?, бrea errada cara.
Reply
#4

Desculpa aн pela бrea errada, mas meu nick sempre foi Devastador.
Reply
#5

pawn Код:
new Float:vida;
    new Float:colete;
    new Float:vidav;
Reply
#6

Corrigido, valeu pela notificaзгo.
Reply
#7

Bom tuto!
Reply
#8

Ficou muito bom, parabens
Reply
#9

nice!!!!
congratulations!
Reply
#10

Bom, desculpa reviver o tуpico, tambйm nгo sei se eu posso pedir ajuda aqui, mas resolvi fazк-lo ao invйs de postar um novo Tуpico.
Eu havia feito um code igualzinho а esse, porйm tive um problema e resolvi procurar aqui a SOLUЗГO.
Fato й que o meu code й igual а esse sу que nгo funciona.
Pra testar ele os deaths eu usei /kill. Quando digito /stats estгo zerados.

Todavia aн tб o CODE:
pawn Код:
new Matou[MAX_PLAYERS];
new Morreu[MAX_PLAYERS];
new Killspree[MAX_PLAYERS];
new Deathspree[MAX_PLAYERS];

public OnPlayerConnect(playerid)
{
SetPlayerColor(playerid, 0xffffffff);
Matou[playerid]=0;
Morreu[playerid]=0;
Killspree[playerid]=0;
Deathspree[playerid]=0;
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
    Matou[killerid]++;
    Morreu[playerid]++;
    Killspree[killerid]++;
    Deathspree[playerid]++;
    Killspree[playerid]=0;
    Deathspree[killerid]=0;
    return 1;
}
if (strcmp("/stats", cmdtext, true) ==0) {
new s[128];
format(s, sizeof(s), "|| Seu Stats || Matou: %d | Morreu: %d | Kill Spree Atual: %d | Death Spree Atual: %d ||", Matou[playerid], Morreu[playerid], Killspree[playerid], Deathspree[playerid]);
SendClientMessage(playerid, COLOR_WHITE, s);
}
POR FAVOR ME AJUDEM :S
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)