24.01.2013, 20:08
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;
}
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];