Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- new keydown[MAX_PLAYERS] = {false, ...};
- new rampid[MAX_PLAYERS] = {-1, ...};
- forward Keys();
- forward 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
- // 16395 // desert jump
- };
- 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_CROUCH && 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<MAX_PLAYERS; i++)
- {
- if (rampid[i] != -1) DestroyObject(rampid[i]);
- }
- }
- Float:GetOptimumRampDistance(playerid)
- {
- new ping = GetPlayerPing(playerid), Float:dist;
- dist = floatpower(ping, 0.25);
- dist = dist*4.0;
- dist = dist+5.0;
- return dist;
- }
- Float:GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
- {
- new Float:a;
- GetPlayerPos(playerid, x, y, a);
- if (IsPlayerInAnyVehicle(playerid)) GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
- else GetPlayerFacingAngle(playerid, a);
- x += (distance * floatsin(-a, degrees));
- y += (distance * floatcos(-a, degrees));
- return a;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement