[Ajuda] funзгo sу funciona com id 0 e outro bug
#1

Eai galera, estou aqui para pedir ajuda de vocкs entendem melhor do que eu, se eu tiver criando o topico fora do padrхes me corrijam por favor.

Entгo й o seguinte, eu to com um fs aqui que й de criar um tapete de pregos, o tapete tem a funзгo de furar os pneus
Ele ta funcionando e tals, sу que ele so executa a funзгo(que й furar os pneus), para o id 0, e eu quero colocar pra todos id's.
Outro bug й o seguinte, ele tem o comando de criar que й /criartapete e o comando de deletar que й /deletartapete , sу que quando eu crio mais de um tapete e o comando /deletartapete deleta sу o ultimo tapete, eu queria que ele delete um por um, tipo assim, eu crio 3 tapetes, ai eu digito /deletartapete ai ele deleta o ultimo tapete, ai eu digito de novo, ai ele deleta o penultimo, digito denovo o ant penultimo e assim vai.
Pf me ajudem ai

PHP код:
#define FILTERSCRIPT
#include <a_samp>
#define TireDano(%1,%2,%3,%4) %1 | (%2 << 1) | (%3 << 2) | (%4 << 3)
new
Tapete,
Angle,
Float:xx,
Float:yy,
Float:zz;
forward
      PlayerToPoint
(Float:radiplayeridFloat:xFloat:yFloat:z);
forward
      Pneu
(playerid);
public
     
PlayerToPoint(Float:radiplayeridFloat:xFloat:yFloat:z)
{
    if(
IsPlayerConnected(playerid))
    {
        new 
Float:oldposxFloat:oldposyFloat:oldposz;
        new 
Float:tempposxFloat:tempposyFloat:tempposz;
        
GetPlayerPos(playeridoldposxoldposyoldposz);
        
tempposx = (oldposx -x);
        
tempposy = (oldposy -y);
        
tempposz = (oldposz -z);
//        printf("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
        
if (((tempposx radi) && (tempposx > -radi)) && ((tempposy radi) && (tempposy > -radi)) && ((tempposz radi) && (tempposz > -radi)))
        {
            return 
1;
        }
    }
    return 
0;
}
public
     
OnFilterScriptInit()
{
    print(
"\n--------------------------------------");
    print(
" Loaded...");
    print(
"--------------------------------------\n");
    
SetTimer("Pneu",199,1);
    return 
1;
}
public
    
Pneu(playerid)
{
new 
Dano[4];
if (
IsPlayerInAnyVehicle(playerid))
{
if (
PlayerToPoint(5.0playerid,xx,yy,zz))
{
GetVehicleDamageStatus(GetPlayerVehicleID(playerid), Dano[0], Dano[1], Dano[2], Dano[3]);
UpdateVehicleDamageStatus(GetPlayerVehicleID(playerid), Dano[0], Dano[1], Dano[2], TireDano(1111));
GameTextForPlayer(playerid,"Pneu Furado",6000,1);
}
}
}
public
     
OnPlayerCommandText(playeridcmdtext[])
{
if (
strcmp("/criartapete"cmdtexttrue10) == 0)
{
GetPlayerPos(playerid,xx,yy,zz);
GetPlayerFacingAngle(playeridAngle);
Tapete CreateObject(2899xxyyzz-0.900Angle);
GameTextForPlayer(playerid,"Tapede Criado",6000,1);
return 
1;
}
if (
strcmp("/deletartapete"cmdtexttrue10) == 0)
{
DestroyObject(Tapete);
GameTextForPlayer(playerid,"Tapete Deletado",6000,1);
return 
1;
}
return 
0;

Reply
#2

pawn Код:
#include <a_samp>
#define TireDano(%1,%2,%3,%4) %1 | (%2 << 1) | (%3 << 2) | (%4 << 3)
new Tapete, Timer[MAX_PLAYERS], Angle, Float:xx, Float:yy, Float:zz;
forward
      PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z);
forward
      Pneu(playerid);
public
     PlayerToPoint(Float:radi, playerid, Float:x, Float:y, Float:z)
{
    if(IsPlayerConnected(playerid))
    {
        new Float:oldposx, Float:oldposy, Float:oldposz;
        new Float:tempposx, Float:tempposy, Float:tempposz;
        GetPlayerPos(playerid, oldposx, oldposy, oldposz);
        tempposx = (oldposx -x);
        tempposy = (oldposy -y);
        tempposz = (oldposz -z);
//        printf("DEBUG: X:%f Y:%f Z:%f",posx,posy,posz);
        if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))
        {
            return 1;
        }
    }
    return 0;
}
public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate == PLAYER_STATE_DRIVER) Timer[playerid] = SetTimer("Pneu",199,1);
    if(oldstate == PLAYER_STATE_DRIVER) KillTimer(Timer[playerid]);
    return 1;
}
public
    Pneu(playerid)
{
    new Dano[4];
    if (IsPlayerInAnyVehicle(playerid))
    {
        if (PlayerToPoint(5.0, playerid,xx,yy,zz))
        {
            GetVehicleDamageStatus(GetPlayerVehicleID(playerid), Dano[0], Dano[1], Dano[2], Dano[3]);
            UpdateVehicleDamageStatus(GetPlayerVehicleID(playerid), Dano[0], Dano[1], Dano[2], TireDano(1, 1, 1, 1));
            GameTextForPlayer(playerid,"Pneu Furado",6000,1);
        }
    }
    return 1;
}

public
     OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/criartapete", cmdtext, true, 10) == 0)
    {
        GetPlayerPos(playerid,xx,yy,zz);
        GetPlayerFacingAngle(playerid, Angle);
        Tapete = CreateObject(2899, xx, yy, zz-0.9, 0, 0, Angle);
        GameTextForPlayer(playerid,"Tapede Criado",6000,1);
        return 1;
    }
    if (strcmp("/deletartapete", cmdtext, true, 10) == 0)
    {
        DestroyObject(Tapete);
        GameTextForPlayer(playerid,"Tapete Deletado",6000,1);
        return 1;
    }
    return 0;
}
Tente isto.
Obs: Vocк usou SetTimer para chamar uma callback com Parвmetro , enquanto o certo seria utilizar SetTimerEx.

Quanto ao segundo "Bug"(deveriam parar de usar este termo para coisas desse tipo) й sу criar uma variбvel multidimensinal:
pawn Код:
new Tapete[5];
Ai agora vocк tenta fazer por ai porque nгo vou dar todo o cуdigo pronto tambйm...
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)