Advertisement
Guest User

Untitled

a guest
Jun 24th, 2009
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.83 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. new keydown[MAX_PLAYERS] = {false, ...};
  4. new rampid[MAX_PLAYERS] = {-1, ...};
  5. forward Keys();
  6. forward RemoveRamp(playerid);
  7. forward Float:GetOptimumRampDistance(playerid);
  8. forward Float:GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance);
  9.  
  10. new ramptypes[] = {
  11.     1503, // curvy normal one
  12.     1660, // concrete one with pipes
  13.     1245, // plank of wood against a box
  14.     1631, // water ramp with rocks
  15.     1632, // normal water ramp
  16.     1655  // wide water ramp
  17. //  16395 // desert jump
  18. };
  19.  
  20. new playerramptypes[MAX_PLAYERS] = {0, ...};
  21.  
  22. public OnFilterScriptInit()
  23. {
  24.     SetTimer("Keys", 100, 1);
  25.     return 1;
  26. }
  27.  
  28. public Keys()
  29. {
  30.     new keys, updown, leftright, playerid;
  31.     new Float:x, Float:y, Float:z, Float:angle;
  32.     for (playerid = 0; playerid < MAX_PLAYERS; playerid++) {
  33.         if (IsPlayerConnected(playerid)) {
  34.             GetPlayerKeys(playerid, keys, updown, leftright);
  35.             if (keys & KEY_CROUCH && IsPlayerInAnyVehicle(playerid)) {
  36.                 if (!keydown[playerid]) {
  37.                     keydown[playerid] = true;
  38.                     if (rampid[playerid] == -1) {
  39.                         GetPlayerPos(playerid, x, y, z);
  40.                         angle = GetXYInFrontOfPlayer(playerid, x, y, GetOptimumRampDistance(playerid));
  41.                         switch (playerramptypes[playerid]) {
  42.                             case 2:
  43.                             {
  44.                             angle -= 90.0;
  45.                             if (angle < 0.0) angle += 360.0;
  46.                             z += 0.5;
  47.                             }
  48.                             case 1:
  49.                             {
  50.                                 z -= 0.5;
  51.                             }
  52.                         }
  53.                         rampid[playerid] = CreateObject(ramptypes[playerramptypes[playerid]], x, y, z - 0.5, 0.0, 0.0, angle);
  54.                         SetTimerEx("RemoveRamp", 2000, 0, "d", playerid);
  55.                     }
  56.                 }
  57.             } else keydown[playerid] = false;
  58.         }
  59.     }
  60. }
  61.  
  62. public OnPlayerCommandText(playerid, cmdtext[])
  63. {
  64.     if (strcmp("/setramp ", cmdtext, true, 9) == 0)
  65.     {
  66.         new ramp = strval(cmdtext[9]);
  67.         if (ramp < 0 || ramp >= sizeof(ramptypes)) {
  68.             SendClientMessage(playerid, 0xFFFFFFAA, "Invalid ramp ID.");
  69.         } else {
  70.             playerramptypes[playerid] = ramp;
  71.         }
  72.         return 1;
  73.     }
  74.     return 0;
  75. }
  76.  
  77. public RemoveRamp(playerid)
  78. {
  79.     if (rampid[playerid] != -1) {
  80.         DestroyObject(rampid[playerid]);
  81.         rampid[playerid] = -1;
  82.     }
  83. }
  84.  
  85. public OnFilterScriptExit()
  86. {
  87.     for (new i=0; i<MAX_PLAYERS; i++)
  88.     {
  89.         if (rampid[i] != -1) DestroyObject(rampid[i]);
  90.     }
  91. }
  92.  
  93. Float:GetOptimumRampDistance(playerid)
  94. {
  95.     new ping = GetPlayerPing(playerid), Float:dist;
  96.     dist = floatpower(ping, 0.25);
  97.     dist = dist*4.0;
  98.     dist = dist+5.0;
  99.     return dist;
  100. }
  101.  
  102. Float:GetXYInFrontOfPlayer(playerid, &Float:x, &Float:y, Float:distance)
  103. {
  104.     new Float:a;
  105.     GetPlayerPos(playerid, x, y, a);
  106.     if (IsPlayerInAnyVehicle(playerid)) GetVehicleZAngle(GetPlayerVehicleID(playerid), a);
  107.     else GetPlayerFacingAngle(playerid, a);
  108.     x += (distance * floatsin(-a, degrees));
  109.     y += (distance * floatcos(-a, degrees));
  110.     return a;
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement