[DUVIDA] Objeto Tapetes de prego realistico
#1

Pessoal, sei que muitos vao de cara falar: "PQ VC NAO PROCURA NO SISTEMA DE BUSCA!"

Mas calma... й algo diferente... eu nao queria um sistema de adicionamento de tapete, e muito menos um comando para furar os pneus...

Eu queria algo mais dinamico... Tipo, todo objeto de id 2899 (tapete de pregos) que estivesse adicionado no mapa, ja tivesse sua funзгo normal (de furar pneus) ou seja, ta la dentro dos meus objetos adicionados no ongamemodinit e no server quando o jogador passa em cima ja fura... nao sei se й o caso pra fazer uma include... nao sei nem se й possivel...

Uma outra forma que pensei foi fazendo como um pickup que teria a seguinte funзгo:

pawn Код:
new pbpvluzes,pbpvpneus,pbpvpainel,pbpvportas;
new vehicleid = GetPlayerVehicleID(playerid);
GetVehicleDamageStatus(v,pbpvpainel,pbpvportas,pbpvluzes,pbpvpneus);
UpdateVehicleDamageStatus(v, pbpvpainel, pbpvportas, pbpvluzes, 15);
Porem й possivel fazer um pickup apartir de um objeto? Fiquei em duvida pq no CreatePickup, nao tem a coordenada da rotaзгo...

Bom aguardo por respostas
Obrigado
Reply
#2

Nгo sei Muito bem '-', mas tenta usar o IsPlayerInRangeOfPoint
Reply
#3

Isso nao seria para checkpoints? sem contar que ele define uma "range" ou seja um circulo... tanto que vc esolhe o diametro e tal... e o tapete de pregos й retangular...

Alguma outra idйia?
Reply
#4

Vc ainda nгo aprendeu pois nгo?
IsPlayerInRangeOfPoint irб defenir se o player esta na posiзгo, ou seja se voce usar assim:
pawn Код:
if(IsPlayerInRangeOfPoint(playerid,1.0,CordX,CordZ,CordY);
ou seja o 1.0 й o Radios, entгo significa que se que ele tem que estar a 1m do local, como se vc usar 100.0 ele o maximo й 100m, exemplo

o Ponto sгo as Coordenadas...
o R & o C й o maximo, sendo que vc definiu o Radius para 100m por exemplo, caso ele esteja a 50m de destancia do ponto a funзгo serб executada...

um exemplo...

pawn Код:
forward IsPlayerInRangeOfPoint(playerid ,Float:Radius ,Float:PX ,Float:PY ,Float:PZ);
public IsPlayerInRangeOfPoint(playerid ,Float:Radius ,Float:PX ,Float:PY ,Float:PZ)
{
//Funзгo do Damadge
return;
}
Reply
#5

claro que eu sei isso... e й por isso que й um problema... pq o tapete de pregos como й um retangulo ele fica dentro desse cirulo. ou seja, sу do cara aproximas do tapete ele ja vai ter a roda furada...

й um caminho...

alguem tem ourta idйia?
Reply
#6

pawn Код:
IsPlayerInLocation( playerid , Float:MinX , Float:MaxX ,  Float:MinY , Float:MaxY ,  Float:MinZ , Float:MaxZ ) // Em retвngulo
{
    static
        Float:x,
        Float:y,
        Float:z
    ;

    GetPlayerPos( playerid , x , y , z );

    if( MinX > x && MaxX < x && MinY > y && MaxY < y && MinZ > z && MaxZ < z )
        return 1;

    return 0;  
}
Reply
#7

Boa rock... E tipo, vc tem alguma dica de como vou pegar certinho o tamanhos do objeto 2899... e tipo, existe alguma forma deu meio que por esse retangulo relacionado com o objeto 2899 para sempre que eu por um objeto 2899 no mapa ele ja interpretar a funзгo de furar?
Reply
#8

Usa a include SpikeStrip.inc:
PHP код:
#include <a_samp>

#define MAX_SPIKESTRIPS 200

enum sInfo
{
    
sCreated,
    
Float:sX,
    
Float:sY,
    
Float:sZ,
    
sObject,
};
new 
SpikeInfo[MAX_SPIKESTRIPS][sInfo];

public 
OnPlayerUpdate(playerid)
{
    if(!
IsPlayerConnected(playerid)) return 0;

    if(
GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
        for(new 
0sizeof(SpikeInfo); i++)
          {
              if(
IsPlayerInRangeOfPoint(playerid3.0SpikeInfo[i][sX], SpikeInfo[i][sY], SpikeInfo[i][sZ]))
            {
                  if(
SpikeInfo[i][sCreated] == 1)
                  {
                      new 
panelsdoorslightstires;
                      new 
carid GetPlayerVehicleID(playerid);
                    
GetVehicleDamageStatus(caridpanelsdoorslightstires);
                    
tires encode_tires(1111);
                    
UpdateVehicleDamageStatus(caridpanelsdoorslightstires);
                      return 
0;
                  }
              }
          }
      }

    return 
1;
}

stock CreateStrip(Float:x,Float:y,Float:z,Float:Angle)
{
    for(new 
0sizeof(SpikeInfo); i++)
      {
          if(
SpikeInfo[i][sCreated] == 0)
          {
            
SpikeInfo[i][sCreated]=1;
            
SpikeInfo[i][sX]=x;
            
SpikeInfo[i][sY]=y;
            
SpikeInfo[i][sZ]=z-0.7;
            
SpikeInfo[i][sObject] = CreateObject(2899xyz-0.900Angle-90);
            return 
1;
          }
      }
      return 
0;
}

stock DeleteAllStrip()
{
    for(new 
0sizeof(SpikeInfo); i++)
      {
          if(
SpikeInfo[i][sCreated] == 1)
          {
              
SpikeInfo[i][sCreated]=0;
            
SpikeInfo[i][sX]=0.0;
            
SpikeInfo[i][sY]=0.0;
            
SpikeInfo[i][sZ]=0.0;
            
DestroyObject(SpikeInfo[i][sObject]);
          }
    }
    return 
0;
}

stock DeleteClosestStrip(playerid)
{
    for(new 
0sizeof(SpikeInfo); i++)
      {
          if(
IsPlayerInRangeOfPoint(playerid2.0SpikeInfo[i][sX], SpikeInfo[i][sY], SpikeInfo[i][sZ]))
        {
              if(
SpikeInfo[i][sCreated] == 1)
            {
                
SpikeInfo[i][sCreated]=0;
                
SpikeInfo[i][sX]=0.0;
                
SpikeInfo[i][sY]=0.0;
                
SpikeInfo[i][sZ]=0.0;
                
DestroyObject(SpikeInfo[i][sObject]);
                return 
1;
              }
          }
      }
    return 
0;
}

encode_tires(tires1tires2tires3tires4) {

    return 
tires1 | (tires2 << 1) | (tires3 << 2) | (tires4 << 3);


As funзхes sгo:
Код:
CreateStrip(Float:x,Float:y,Float:z,Float:Angle) 
DeleteClosestStrip(playerid) 
DeleteAllStrip()
Reply
#9

SHADOWW vc й o cara! *-*

era exatamente o que eu queria! doble reputation!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)