Hey Leute,
will grad ein Blitzer System machen,
und ich hab das mal so gelöst:
Am Anfang des Scripts:
forward BlitzTimer();
new Blitzer[MAX_PLAYERS];
new HatBlitzer[MAX_PLAYERS];
new BlitzerSpeed[MAX_PLAYERS];
Bei OnGameModeInit:
SetTimer("BlitzTimer", 300, 1);
das ist das Command:
dcmd_blitzer(playerid, params[])
{
if(IstCop(playerid) == 0) { return SendClientMessage(playerid, COLOR_RED, "Du bist kein Polizist."); }
if(FrakDuty[playerid] == 0) { return SendClientMessage(playerid, COLOR_RED, "Du bist nicht im Dienst."); }
if(HatBlitzer[playerid] == 1)
{
DestroyObject(Blitzer[playerid]);
SendClientMessage(playerid, COLOR_ORANGE, "Der Blitzer wurde erfolgreich entfernt.");
}
new speed;
if(sscanf(params, "d", speed))
{ return SendClientMessage(playerid, COLOR_RED, "USAGE: /blitzer [Geschwindigkeit]"); }
new Float: px, Float: py, Float: pz, Float: pa;
GetPlayerPos(playerid, px, py, pz);
GetPlayerFacingAngle(playerid, pa);
Blitzer[playerid] = CreateObject(3031, px, py, pz - 3, pa, 0, 0, 300.0);
MoveObject(Blitzer[playerid], px, py, pz, 3);
HatBlitzer[playerid] = 1;
BlitzerSpeed[playerid] = speed;
SendClientMessage(playerid, COLOR_ORANGE, "Der Blitzer wurde erfolgreich erstellt.");
return 1;
}
Und hier ist das public
public BlitzTimer()
{
new Float: ox, Float: oy, Float: oz;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(HatBlitzer[i] == 1)
{
GetObjectPos(Blitzer[i], ox, oy, oz);
for(new p = 0; p < MAX_PLAYERS; p++)
{
if(IsPlayerConnected(p))
{
if(IsPlayerInRangeOfPoint(p, 100, ox, oy, oz))
{
if(GetPlayerState(p) == PLAYER_STATE_DRIVER)
{
new Float:xfloat,Float:yfloat,Float:zfloat;
new Float:distance,value;
GetPlayerPos(i, xfloat, yfloat, zfloat);
distance = floatsqroot(floatpower(floatabs(floatsub(xfloat,TachoX[p])),2)+floatpower(floatabs(floatsub(yfloat,TachoY[p])),2)+floatpower(floatabs(floatsub(zfloat,TachoZ[p])),2));
value = floatround(distance * 11000);
TachoX[p] = xfloat;
TachoY[p] = yfloat;
TachoZ[p] = zfloat;
if(floatround(value/3500) > BlitzerSpeed[i])
{
new speed[128], string[127];
format(speed, sizeof(speed), "%d", floatround(value/3500));
format(string, sizeof(string), "Du wurdest mit einer Geschwindigkeit von %s km/h geblitzt. Du bezahlst: 500$", speed);
GivePlayerMoney(p, -50000);
SendClientMessage(p, COLOR_RED, string);
}
}
}
}
}
}
}
}
return 1;
}
Okey,
nun zum Problem:
Wenn man weiter weg steht vom Blitzer, wird man dauerhaft mit einer überhöhten Geschwindigkeit geblitzt.
Wenn man aber näher kommt wird man dann richtig geblitzt.
Ich bin mir nicht sicher was ich hier falsch gemacht hab, ich hab eigentlich noch nicht viel mit Abfrage von geschwindigkeiten gemacht,
desshalb frag ich ja auch euch hier wie das am besten funktioniert
Währe nett wenn mir möglichst schnell jemand helfen könnte.
Mfg