// Simple speedo by ZeeX, 17/10/2009 #define FILTERSCRIPT #include #include "YSI/Core/YSI_bit.own" #define HUD_UPDATE_TICKS 5 new Text:gPlayerHUD[MAX_PLAYERS], Bit:gIsHUDShownBit[MAX_PLAYERS / cellbits + 1]; forward Float:GetVehicleSpeed(vehicleid); public OnPlayerUpdate(playerid) { static playerTick[MAX_PLAYERS]; if (++playerTick[playerid] == HUD_UPDATE_TICKS) { playerTick[playerid] = 0; if (Bit_Get(gIsHUDShownBit, playerid)) { new text[8]; format(text, sizeof(text), "%.0f kmh", 200 * GetVehicleSpeed(GetPlayerVehicleID(playerid))); TextDrawSetString(gPlayerHUD[playerid], text); } } return 1; } public OnFilterScriptInit() { for (new i; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i) && !IsPlayerNPC(i)) { CreatePlayerHUD(i); ShowPlayerHUD(i, (GetPlayerState(i) == PLAYER_STATE_DRIVER)); } } return 1; } public OnFilterScriptExit() { for (new i; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i) && !IsPlayerNPC(i)) { DestroyPlayerHUD(i); } } return 1; } public OnPlayerConnect(playerid) { if (!IsPlayerNPC(playerid)) { CreatePlayerHUD(playerid); } return 1; } public OnPlayerDisconnect(playerid, reason) { #pragma unused reason if (!IsPlayerNPC(playerid)) { DestroyPlayerHUD(playerid); } return 1; } public OnPlayerStateChange(playerid, newstate, oldstate) { #pragma unused oldstate if (!IsPlayerNPC(playerid)) { ShowPlayerHUD(playerid, (newstate == PLAYER_STATE_DRIVER)); } return 1; } CreatePlayerHUD(playerid) { gPlayerHUD[playerid] = TextDrawCreate(620, 410, "0 kmh"); TextDrawSetProportional(gPlayerHUD[playerid], true); TextDrawUseBox(gPlayerHUD[playerid], false); TextDrawSetOutline(gPlayerHUD[playerid], 2); TextDrawAlignment(gPlayerHUD[playerid], 3); TextDrawLetterSize(gPlayerHUD[playerid], 0.7, 2.0); TextDrawFont(gPlayerHUD[playerid], 3); TextDrawColor(gPlayerHUD[playerid], 0x000000FF); TextDrawBackgroundColor(gPlayerHUD[playerid], 0xC71919FF); return 1; } DestroyPlayerHUD(playerid) { TextDrawHideForPlayer(playerid, gPlayerHUD[playerid]); TextDrawDestroy(gPlayerHUD[playerid]); return 1; } ShowPlayerHUD(playerid, bool:show) { if (show) { TextDrawShowForPlayer(playerid, gPlayerHUD[playerid]); } else { TextDrawHideForPlayer(playerid, gPlayerHUD[playerid]); } Bit_Set(gIsHUDShownBit, playerid, show, MAX_PLAYERS); return 1; } Float:GetVehicleSpeed(vehicleid) { new Float:vX, Float:vY, Float:vZ; GetVehicleVelocity(vehicleid, vX, vY, vZ); return floatsqroot(vX*vX + vY*vY + vZ*vZ); }