16.08.2010, 00:38
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];
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++;
}
}
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++;
}
}
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.
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);
}
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);
}
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;
}
-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;
}
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.