[Tutorial]3DTextLabels e Arrays.
#1

Como criar 3DTextLabels para arrays.
Criado por: LeLeTe.
Informaзхes:
-Criando 3DTextLabel para arrays estбticas;
-Criando 3DTextLabel para arrays veiculares;
-Criando 3DTextLabel para arrays de player;

Criando 3DTextLabel para arrays estбticas

Irei comeзar por definir 3 3DTextLabels, que serгo:
pawn Код:
new Text3D:HouseLabel[MAX_CASAS]
new Text3D:Placa[MAX_CARROS];
new Text3D:note[MAX_PLAYERS];
Agora, irei mover para uma array estбtica, no caso, HouseLabel.


Em GM's baseados em LARP, pode ser encontrada uma linha(exatamente ou parecida) como essa, em OnGameModeInit:
pawn Код:
for(new h = 0; h < sizeof(HouseInfo); h++)
    {
        if(HouseInfo[h][hOwned] == 0)
        {
            AddStaticPickup(1273, 2, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]);
            pickups++;
        }
        if(HouseInfo[h][hOwned] == 1)
        {
            AddStaticPickup(1318, 2, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]);
            pickups++;
        }
    }
O cуdigo acima cria um Pickup para cada array da enum HouseInfo. (No meu caso, sгo 255.)

Agora, vamos criar um 3DTextLabel que fique encima deste pickup para cada casa.

pawn Код:
for(new h = 0; h < sizeof(HouseInfo); h++)
    {
        if(HouseInfo[h][hOwned] == 0)
        {
            new Casa[128];
            format(Casa, sizeof(Casa), "[CASA A VENDA]\n|Nome: %s |\n|Nнvel: %d|\n|Preзo: US$%d|\n|Use /comprarcasa para esta propriedade.|",HouseInfo[h][hDiscription],HouseInfo[h][hLevel],HouseInfo[h][hValue]);
            HouseLabel[h] = Create3DTextLabel(Casa,0x006400FF,HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez],60,0,1);
            AddStaticPickup(1273, 2, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]);
            pickups++;
        }
        if(HouseInfo[h][hOwned] == 1)
        {
            new Casa2[128];
            format(Casa2, sizeof(Casa2), "[CASA]\n|Nome: %s |\n|Nнvel: %d|\n|Dono: %s|\n|Use /alugarquarto para alugar um quarto nesta propriedade.|",HouseInfo[h][hDiscription],HouseInfo[h][hLevel],HouseInfo[h][hOwner]);
            HouseLabel[h] = Create3DTextLabel(Casa2,0x006400FF,HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez],60,0,1);
            AddStaticPickup(1318, 2, HouseInfo[h][hEntrancex], HouseInfo[h][hEntrancey], HouseInfo[h][hEntrancez]);
            pickups++;
        }
    }
Em Create3DTextLabel temos:
pawn Код:
Create3DTextLabel([Texto],[Cor],[Posiзгo X],[Posiзгo Y],[Posiзгo Z],[Draw Distance],[Virtual World],[LineOfSight])
//Draw Distance = Distвncia de visгo da 3DTextLabel.
//LineOfSight = 0 para ver a 3dTextLabel pelas paredes, objetos, etcetera. 1 para NГO poder ver a 3DTextLabel por paredes, objetos, etc.
Agora, toda a casa terб um 3DTextLabel, como a figura mostra:



Criando 3DTextLabels para arrays Veiculares
Em Edits do LARP, para spawnar carros que sгo para a venda, em OnGameModeInit, й usada uma linha como essa:
pawn Код:
for(new h = 183; h < sizeof(CarInfo); h++)
    {
        AddStaticVehicleEx(CarInfo[h][cModel],CarInfo[h][cLocationx],CarInfo[h][cLocationy],CarInfo[h][cLocationz]+1.0,CarInfo[h][cAngle],CarInfo[h][cColorOne],CarInfo[h][cColorTwo],60000);
    }
Iremos mudar esta linha, para ficar como a abaixo:
pawn Код:
for(new h = 183; h < sizeof(CarInfo); h++)
    {
        AddStaticVehicleEx(CarInfo[h][cModel],CarInfo[h][cLocationx],CarInfo[h][cLocationy],CarInfo[h][cLocationz]+1.0,CarInfo[h][cAngle],CarInfo[h][cColorOne],CarInfo[h][cColorTwo],60000);
        new result[128];
        format(result, sizeof(result), "[Placa]\n[|LS - %d|]", h);
        Placa[h] = Create3DTextLabel(result, 0x6D3636FF, 0.0, 0.0, 0.0, 50.0, -1, 0);
        DescricaoOwnCarro[h] = Create3DTextLabel(result, 0x6D3636FF, 0.0, 0.0, 0.0, 50.0, -1, 0);
        DescricaoCarro[h] = Create3DTextLabel(result, 0x6D3636FF, 0.0, 0.0, 0.0, 50.0, -1, 0);
        MusicaCarro[h] = Create3DTextLabel(result, 0x6D3636FF, 0.0, 0.0, 0.0, 50.0, -1, 0);
        Attach3DTextLabelToVehicle(Placa[h], h, 0.0,-2.9,0.0);
    }
Antes de me perguntarem o que sгo as arrays DescricaoOwnCarro, DescricaoCarro, e MusicaCarro, sгo arrays do meu servidor. Com a prбtica e, se ocorrer como planejado, ao final desse tutorial vocк vai saber como fazer essas arrays tambйm

Voltando ao assunto...

O Attach3DTextLabelToVehicle funciona assim:
Attach3DTextLabelToVehicle([Nome do seu Text3D],[ID do Veнculo que vai ficar a Text3DLabel],[Offset X],[Offset Y],[Offset Z]);

Offsets:

Os Offsets sгo coordenadas de movimento de sua 3DTextLabel.

Offest X - Move sua 3DtextLabel para os lados. Valores negativos movem para esquerda, valores positivos, para direita.

Offset Y - Move sua 3DTextLabel para frente para trбs. Valors negativos movem para trбs, valores positivos, para frente.

Offset Z - Move sua 3DTextLabel para cima e para baixo. Valores negativos movem para trбs, valores positivos, para frente.

Um valor de -2.9 no Offset Y deixa o seu 3DTextLabel na placa traseira de seu carro, na maioria dos carros.

Agora, vamos para um comando qualquer.

pawn Код:
if(strcmp(cmd,"/musica",true)==0) // By LeLeTe
    {
        if(IsPlayerConnected(playerid))
        {
            new length = strlen(cmdtext);
            while ((idx < length) && (cmdtext[idx] <= ' '))
            {
                idx++;
            }
            new offset = idx;
            new result[128];
            while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
            {
                result[idx - offset] = cmdtext[idx];
                idx++;
            }
            result[idx - offset] = EOS;
            if(length > 124)
            {
                SendClientMessage(playerid, COLOR_GREY, "    Nome Da Mъsica muito longa! ");
                return 1;
            }
            if(!strlen(result))
            {
                SendClientMessage(playerid, COLOR_GRAD2, "USO: /musica [texto]");
                return 1;
            }
            new carid = GetPlayerVehicleID(playerid);
            format(string,sizeof(string),"[MЪSICA TOCANDO]\n[%s]",(result));
            Update3DTextLabelText(MusicaCarro[carid], 0xFFFFFFFF, string);
            Attach3DTextLabelToVehicle(MusicaCarro[carid],carid, 0.0, -2.9, 1.0)
        }
        return 1;
    }
Porquк nгo usar Create3DTextLabel para a descriзгo, e sim Update3DTextLabelText?

-Pelo fato de que a cada vez que eu digitar o comando, ele irб criar uma 3DTextLabel, e se eu errar, nгo tem como apagar. (Nгo sei se й noobice minha ou fato, mais sempre quando eu uso Delete3DTextLabel com uma 3DTextLabel de array, ela deleta TODAS as 3DTextLabels.).

Com o Update3DTextLabelText, ele deleta e cria de novo a 3DTextLabel automaticamente.

Update3DTextLabelText([Nome da sua 3Dtextlabel],[Cor],[Texto]);

Apуs isso, ela й colocada no carro, com o Attach3DTextLabelToVehicle.

E irб ficar como na imagem:



Criando 3DTextLabels para arrays de Players.
Vamos pegar como base um comando como este:
pawn Код:
if(strcmp(cmd,"/descricao",true)==0) // By LeLeTe
    {
        if(IsPlayerConnected(playerid))
        {
            new length = strlen(cmdtext);
            while ((idx < length) && (cmdtext[idx] <= ' '))
            {
                idx++;
            }
            new offset = idx;
            new result[128];
            while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
            {
                result[idx - offset] = cmdtext[idx];
                idx++;
            }
            result[idx - offset] = EOS;
            if(length > 124)
            {
                SendClientMessage(playerid, COLOR_GREY, "    Descriзгo Muito Longa ! ");
                return 1;
            }
            if(!strlen(result))
            {
                SendClientMessage(playerid, COLOR_GRAD2, "USO: /descricao [texto]");
                return 1;
            }
            format(string,sizeof(string),"[DESCRIЗГO]\n[%s]",(result));
            Update3DTextLabelText(note[playerid],0xC2A2DAFF,string);
            Attach3DTextLabelToPlayer(note[playerid],playerid, 0.0, 0.0, 1.0)
        }
        return 1;
    }
No exemplo acima, qualquer coisa que vocк digitar no comando /descricao, irб aparecer em cima da sua cabeзa. (Offset Z - 1.0.)

Em OnPlayerConnect, vocк deve adicionar:
note[playerid] = Create3DTextLabel(string,0xC2A2DAFF,0,0,0,40,0,-1);

E entгo, sua 3DTextLabel irб ficar como a da foto:




E assim, acaba o tutorial.

Espero que tenham gostado, e aprendido algo.


Duvidas, Sugestхes, e Crнticas, bem vindas.
Reply
#2

Код:
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[128];
Quando vi a Strtok dentro do Comando pensei em Thug/God Father..

Enfim bom Tutorial

Explica Melhor FIkDIk =D
Reply
#3

Como assim explicar melhor?


Fiz o melhor que pude


Fala aн as partes que vocк quer que eu explique melhor, tio.


@strtok

Bem lembrado, preciso fazer MUITOS strtok's.
Reply
#4

Eu Entendi o Cуdigo,mais tem gente que nгo entende,tem que ser explicativo ..
Reply
#5

Exatamente, espilicar mais ou menos o que faz a funcao ((eu ja sei isso tudo neh, eu uso isso)) mas como o DraKoN disse e muito bem, tem muita gente que nao sabe

mesmo assim parabens
Reply
#6

Tem o 3DTextLabels das empresas?? se tive pode postar ai eu ficarei grato =D
Reply
#7

Tenho sim.


Й o mesmo esquema do de casas, Gabriel
Reply
#8

posta ai eu tentei no msm esquema mas sу ta dando warnings ajuda =D
@@@ edit
Presisa nгo ja consegui arumar =D
Reply
#9

Axei foda ^^ Й legal para quem se interessa.

PS. Malz por postar 4 dias dpois d tu ter feito.
Reply
#10

Como criar uma label com texto: R.I.P. %s ja tentei mas fala que nгo defini "s" :S
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)