RockFire_

CreateLadder

Nov 8th, 2011
274
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 2.26 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. #define MAX_LADDERS 10
  4.  
  5. enum LadderI_Info
  6. {
  7.     Float:Height,
  8.     Float:pX,
  9.     Float:pY,
  10.     Float:pZ
  11. }
  12.  
  13. new
  14.     LadderInfo[MAX_LADDERS][LadderI_Info],
  15.     DownLadder[MAX_PLAYERS],
  16.     ladders;
  17.  
  18. stock CreateLadder(type, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
  19. {
  20.     CreateObject(!type ? (1428) : (1437), x, y, z, rx, ry, rz);
  21.     LadderInfo[ladders][pX] = x;
  22.     LadderInfo[ladders][pY] = y;
  23.     LadderInfo[ladders][pZ] = z;
  24.     LadderInfo[ladders][Height] = !type ? (2.4402) : (5.8024);
  25.     return (++ladders - 1);
  26. }
  27.  
  28. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  29. {
  30.     if(newkeys & KEY_SUBMISSION)
  31.     {
  32.         if(!DownLadder[playerid] && !IsPlayerInAnyVehicle(playerid))
  33.         {
  34.             for(new i; i < ladders; ++i)
  35.             {
  36.                 if(IsPlayerInRangeOfPoint(playerid, 1.0, LadderInfo[i][pX], LadderInfo[i][pY], LadderInfo[i][pZ] + (LadderInfo[i][Height] / 2)))
  37.                 {
  38.                     return DownLadder[playerid] = SetTimerEx("OnPlayerDownLadders", 30, true, "ddd", playerid, i, _:true);
  39.                 }
  40.                 else if(IsPlayerInRangeOfPoint(playerid, 1.0, LadderInfo[i][pX], LadderInfo[i][pY], LadderInfo[i][pZ] - (LadderInfo[i][Height] / 2)))
  41.                 {
  42.                     return DownLadder[playerid] = SetTimerEx("OnPlayerDownLadders", 30, true, "ddd", playerid, i, _:false);
  43.                 }
  44.             }
  45.         }
  46.     }
  47.     return true;
  48. }
  49.  
  50. forward OnPlayerDownLadders(playerid, ladderid, down);
  51. public OnPlayerDownLadders(playerid, ladderid, down)
  52. {
  53.     new
  54.         Float:p[3],
  55.         Float:angle;
  56.        
  57.     GetPlayerPos(playerid, p[0], p[1], p[2]);
  58.     GetPlayerFacingAngle(playerid, angle);
  59.    
  60.     if(down)
  61.     {
  62.         p[0] -= floatsin(-angle, degrees);
  63.         p[1] -= floatcos(-angle, degrees);
  64.         p[2] -= 0.500000;
  65.     }
  66.     else
  67.     {
  68.         p[0] += floatsin(-angle, degrees);
  69.         p[1] += floatcos(-angle, degrees);
  70.         p[2] += 0.500000;
  71.     }
  72.    
  73.     SetPlayerPos(playerid, p[0], p[1], p[2]);
  74.    
  75.     if(down)
  76.     {
  77.         if((p[2] + 0.500000) >= (LadderInfo[ladderid][pZ] + (LadderInfo[ladderid][Height] / 2)))
  78.         {
  79.             return KillTimer(DownLadder[playerid]);
  80.         }
  81.     }
  82.     else
  83.     {
  84.         if((p[2] + 0.500000) <= (LadderInfo[ladderid][pZ] - (LadderInfo[ladderid][Height] / 2)))
  85.         {
  86.             p[0] += floatsin(-angle, degrees);
  87.             p[1] += floatcos(-angle, degrees);
  88.  
  89.             SetPlayerPos(playerid, p[0], p[1], p[2] - 0.500000);
  90.  
  91.             return KillTimer(DownLadder[playerid]);
  92.         }
  93.     }
  94.     return true;
  95. }
  96.  
Advertisement
Add Comment
Please, Sign In to add comment