#include new keydown[MAX_PLAYERS] = {false, ...}; new rampid[MAX_PLAYERS] = {-1, ...}; forward Keys() forwars RemoveRamp(playerid) forward Float:GetOptimumRampDistance(playerid); forward Float:GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance); new ramptypes[] = { 1503, // curvy normal one 1660, // concrete one with pipes 1245, // plank of wood against a box 1631, // water ramp with rocks 1632, // normal water ramp 1655, // wide water ramp }; new playerramptypes[MAX_PLAYERS] = {0, ...}; public OnFilterScriptInit() { SetTimer("Keys", 100, 1); return 1; } public Keys() { new keys, updown, leftright, playerid; new Float:x, Float:y, Float:z, Float:angle; for (playerid = 0; playerid < MAX_PLAYERS; playerid++) { if (IsPlayerConnected(playerid)) { GetPlayerKeys(playerid, keys, updown, leftright); if (keys & KEY_ACTION && IsPlayerInAnyVehicle(playerid)) { if (!keydown[playerid]) { keydown[playerid] = true; if (rampid[playerid] == -1) { GetPlayerPos(playerid, x, y, z); angle = GetXYInFrontOfPlayer(playerid, x, y, GetOptimumRampDistance(playerid)); switch (playerramptypes[playerid]) { case 2: { angle -= 90.0; if (angle < 0.0) angle += 360.0; z += 0.5; } case 1: { z -= 0.5; } } rampid[playerid] = CreateObject(ramptypes[playerramptypes[playerid]], x, y, z - 0.5, 0.0, 0.0, angle); SetTimerEx("RemoveRamp", 2000, 0, "d", playerid); } } } else keydown[playerid] = false; } } } public OnPlayerCommandText(playerid, cmdtext[]) { if (strcmp("/setramp ", cmdtext, true, 9) == 0) { new ramp = strval(cmdtext[9]); if (ramp < 0 || ramp >= sizeof(ramptypes)) { SendClientMessage(playerid, 0xFFFFFFAA, "Invalid ramp ID."); } else { playerramptypes[playerid] = ramp; } return 1; } return 0; } public RemoveRamp(playerid) { if (rampid[playerid] != -1) { DestroyObject(rampid[playerid]); rampid[playerid] = -1; } } public OnFilterScriptExit() { for (new i=0; i