rendered paste body#define FILTERSCRIPT#include <a_samp>#include <foreach>#define SPEEDO_UPDATE_INTERVAL 100#define INVALID_TEXTDRAW (Text:-1)new Text:player_hud[MAX_PLAYERS] = {INVALID_TEXTDRAW, ...};new bool:is_air_driver[MAX_PLAYERS];forward RedrawSpeedoForAll(playerid);forward Float:GetPlayerZ(playerid);forward Float:GetVehicleSpeed(vehicleid);Itter_Create(SpeedoUser, MAX_PLAYERS);public OnFilterScriptInit(){ foreach (Player, i) { if (IsPlayerInAnyVehicle(i)) { TogglePlayerSpeedo(i, true); } } SetTimer("RedrawSpeedoForAll", SPEEDO_UPDATE_INTERVAL, true); return 1;}public OnFilterScriptExit(){ foreach (Player, i) { TogglePlayerSpeedo(i, false); } return 1;}public OnPlayerDisconnect(playerid, reason){ #pragma unused reason if (!IsPlayerNPC(playerid)) { TogglePlayerSpeedo(playerid, false); } return 1;}public OnPlayerStateChange(playerid, newstate, oldstate){ #pragma unused oldstate if (!IsPlayerNPC(playerid)) { if (newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER) { TogglePlayerSpeedo(playerid, true); } else { TogglePlayerSpeedo(playerid, false); } } return 1;}public RedrawSpeedoForAll(playerid){ new text[30]; foreach (SpeedoUser, i) { if (player_hud[i] != INVALID_TEXTDRAW) { if (is_air_driver[i]) { format(text, sizeof(text), "%0.0f km/h ~n~ ~n~%0.0f m", 200 * GetVehicleSpeed(GetPlayerVehicleID(i)), GetPlayerZ(i)); } else { format(text, sizeof(text), "%0.0f km/h", 200 * GetVehicleSpeed(GetPlayerVehicleID(i))); } TextDrawSetString(player_hud[i], text); } } return 1;}Float:GetPlayerZ(playerid){ new Float:z; GetPlayerPos(playerid, z, z, z); return z;}Float:GetVehicleSpeed(vehicleid){ new Float:vX; new Float:vY; new Float:vZ; GetVehicleVelocity(vehicleid, vX, vY, vZ); return floatsqroot(vX*vX + vY*vY + vZ*vZ);}TogglePlayerSpeedo(playerid, bool:toggle){ if (toggle) { new Text:td = TextDrawCreate(620, 390, "0 km/h"); TextDrawColor(td, 0xEDFFDBFF); TextDrawSetProportional(td, true); TextDrawSetOutline(td, 1); TextDrawAlignment(td, 3); TextDrawLetterSize(td, 0.5, 1.6); TextDrawFont(td, 3); TextDrawShowForPlayer(playerid, td); player_hud[playerid] = td; Itter_Add(SpeedoUser, playerid); is_air_driver[playerid] = bool:IsAirVehicle(GetPlayerVehicleID(playerid)); } else { if (player_hud[playerid] != INVALID_TEXTDRAW) { TextDrawDestroy(player_hud[playerid]); player_hud[playerid] = INVALID_TEXTDRAW; } Itter_Remove(SpeedoUser, playerid); } return 1;}IsAirVehicle(vehicleid){ switch (GetVehicleModel(vehicleid)) { case 592, 577, 511, 512, 593, 520, 553, 476, 519, 460, 513, 548, 425, 417, 487, 488, 497, 563, 447, 469: return 1; } return 0;}