Guest User

SA:MP Movement (c) by Kaliber

a guest
Aug 29th, 2014
367
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.82 KB | None | 0 0
  1. /* SA-MP Include Map Icon & Checkpoint Movement
  2.  *
  3.  * (c) by Kaliber, 2014
  4.  *
  5.  */
  6. #if !defined _samp_included
  7.     #include <a_samp>
  8. #endif
  9. #if defined _map_icon
  10.     #endinput
  11. #endif
  12. #define _map_icon
  13. #define INVALID -1
  14. #if defined _use_BOTH || defined _use_CheckPoint
  15. forward OnPlayerCheckpointMoved(playerid,Float:x,Float:y,Float:z);
  16. native __SetPlayerCheckpoint(playerid,Float:x,Float:y,Float:z,Float:size)=SetPlayerCheckpoint;
  17. enum m_Check {
  18.     Float:c_x, Float:c_y, Float:c_z, Float:c_size
  19. };
  20. static CheckPoint[MAX_PLAYERS][m_Check];
  21. stock _SetPlayerCheckpoint(playerid,Float:x,Float:y,Float:z,Float:size) {
  22.     CheckPoint[playerid][c_x]=x,CheckPoint[playerid][c_y]=y,CheckPoint[playerid][c_z]=z,CheckPoint[playerid][c_size]=size;
  23.     return __SetPlayerCheckpoint(playerid,x,y,z,size);
  24. }
  25. #if defined _ALS_SetPlayerCheckpoint
  26.     #undef SetPlayerCheckpoint
  27. #else
  28.     #define _ALS_SetPlayerCheckpoint
  29. #endif
  30. #define SetPlayerCheckpoint _SetPlayerCheckpoint
  31. #define MovePlayerCheckpoint(%0,%1,%2,%3,%4) @move_check(%0,%1,%2,%3,%4)
  32. @move_check(playerid,Float:x,Float:y,Float:z,Float:speed);
  33. @move_check(playerid,Float:x,Float:y,Float:z,Float:speed) {
  34.     if(IsCheckInRangeOfPoint(playerid,2.0,x,y,z)) {
  35.         CheckPoint[playerid][c_x]=x,CheckPoint[playerid][c_y]=y,CheckPoint[playerid][c_z]=z;
  36.         CallLocalFunction("OnPlayerCheckpointMoved","dfff",playerid,x,y,z);
  37.         return __SetPlayerCheckpoint(playerid,x,y,z,CheckPoint[playerid][c_size]);
  38.     }
  39.     if(!k_Range(CheckPoint[playerid][c_x],x)) {
  40.         CheckPoint[playerid][c_x] = (x < CheckPoint[playerid][c_x]) ? floatsub(CheckPoint[playerid][c_x],float(1)) : floatadd(CheckPoint[playerid][c_x],float(1));
  41.     } if(!k_Range(CheckPoint[playerid][c_y],y)) {
  42.         CheckPoint[playerid][c_y] = (y < CheckPoint[playerid][c_y]) ? floatsub(CheckPoint[playerid][c_y],float(1)) : floatadd(CheckPoint[playerid][c_y],float(1));
  43.     } if(!k_Range(CheckPoint[playerid][c_z],z)) {
  44.         CheckPoint[playerid][c_z] = (z < CheckPoint[playerid][c_z]) ? floatsub(CheckPoint[playerid][c_z],float(1)) : floatadd(CheckPoint[playerid][c_z],float(1));
  45.     }
  46.     __SetPlayerCheckpoint(playerid,CheckPoint[playerid][c_x],CheckPoint[playerid][c_y],CheckPoint[playerid][c_z],CheckPoint[playerid][c_size]);
  47.     return SetTimerEx("@move_check",floatround(250.0/speed),0,"iffff",playerid,x,y,z,speed);
  48. }
  49. stock IsCheckInRangeOfPoint(playerid,Float:r,Float:x,Float:y,Float:z) {
  50.     static Float:p[3];
  51.     p[0] = (CheckPoint[playerid][c_x] -x),p[1] = (CheckPoint[playerid][c_y] -y),p[2] = (CheckPoint[playerid][c_z] -z);
  52.     return (((p[0]<r)&&(p[0]>-r))&&((p[1]<r)&&(p[1]>-r))&&((p[2]<r)&&(p[2]>-r)))?1:0;
  53. }
  54. #endif
  55. #if defined _use_BOTH || defined _use_mapIcon
  56. #define MAX_MAP_ICONS 100
  57. forward OnPlayerMapIconMoved(playerid,iconid,Float:x,Float:y,Float:z);
  58. native __SetPlayerMapIcon(playerid, iconid, Float:x, Float:y, Float:z, markertype, color, style) = SetPlayerMapIcon;
  59. enum m_Icon {
  60.     Float:m_x,Float:m_y,Float:m_z,m_m,m_c,m_s
  61. };
  62. static MapIcon[MAX_PLAYERS][MAX_MAP_ICONS][m_Icon];
  63.  
  64. stock _SetPlayerMapIcon(playerid, iconid, Float:x, Float:y, Float:z, markertype, color, style) {
  65.     if(iconid < 0 || iconid >= MAX_MAP_ICONS) return INVALID;
  66.     MapIcon[playerid][iconid][m_x]=x,MapIcon[playerid][iconid][m_y]=y,MapIcon[playerid][iconid][m_z]=z,
  67.     MapIcon[playerid][iconid][m_m]=markertype,MapIcon[playerid][iconid][m_c]=color,MapIcon[playerid][iconid][m_s]=style;
  68.     return __SetPlayerMapIcon(playerid, iconid, Float:x, Float:y, Float:z, markertype, color, style);
  69. }
  70. #if defined _ALS_SetPlayerMapIcon
  71.     #undef SetPlayerMapIcon
  72. #else
  73.     #define _ALS_SetPlayerMapIcon
  74. #endif
  75. #define SetPlayerMapIcon _SetPlayerMapIcon
  76. stock MovePlayerMapIcon(playerid,iconid,Float:x,Float:y,Float:z,Float:speed) {
  77.     return (iconid < 0 || iconid >= MAX_MAP_ICONS) ? INVALID : @move_icon(playerid,iconid,x,y,z,speed);
  78. }
  79. @move_icon(playerid,iconid,Float:x,Float:y,Float:z,Float:speed);
  80. @move_icon(playerid,iconid,Float:x,Float:y,Float:z,Float:speed) {
  81.     if(IsIconInRangeOfPoint(playerid,iconid,2.0,x,y,z)) {
  82.         MapIcon[playerid][iconid][m_x]=x,MapIcon[playerid][iconid][m_y]=y,MapIcon[playerid][iconid][m_z]=z;
  83.         CallLocalFunction("OnPlayerMapIconMoved","ddfff",playerid,iconid,x,y,z);
  84.         return __SetPlayerMapIcon(playerid,iconid,x,y,z,MapIcon[playerid][iconid][m_m],MapIcon[playerid][iconid][m_c],MapIcon[playerid][iconid][m_s]);
  85.     }
  86.     if(!k_Range(MapIcon[playerid][iconid][m_x],x)) {
  87.         MapIcon[playerid][iconid][m_x] = (x < MapIcon[playerid][iconid][m_x]) ? floatsub(MapIcon[playerid][iconid][m_x],float(1)) : floatadd(MapIcon[playerid][iconid][m_x],float(1));
  88.     } if(!k_Range(MapIcon[playerid][iconid][m_y],y)) {
  89.         MapIcon[playerid][iconid][m_y] = (y < MapIcon[playerid][iconid][m_y]) ? floatsub(MapIcon[playerid][iconid][m_y],float(1)) : floatadd(MapIcon[playerid][iconid][m_y],float(1));
  90.     } if(!k_Range(MapIcon[playerid][iconid][m_z],z)) {
  91.         MapIcon[playerid][iconid][m_z] = (z < MapIcon[playerid][iconid][m_z]) ? floatsub(MapIcon[playerid][iconid][m_z],float(1)) : floatadd(MapIcon[playerid][iconid][m_z],float(1));
  92.     }
  93.     __SetPlayerMapIcon(playerid,iconid,MapIcon[playerid][iconid][m_x],MapIcon[playerid][iconid][m_y],MapIcon[playerid][iconid][m_z],MapIcon[playerid][iconid][m_m],MapIcon[playerid][iconid][m_c],MapIcon[playerid][iconid][m_s]);
  94.     return SetTimerEx("@move_icon",floatround(250.0/speed),0,"iiffff",playerid,iconid,x,y,z,speed);
  95. }
  96. stock IsIconInRangeOfPoint(playerid,iconid,Float:r,Float:x,Float:y,Float:z) {
  97.     static Float:p[3];
  98.     p[0] = (MapIcon[playerid][iconid][m_x] -x),p[1] = (MapIcon[playerid][iconid][m_y] -y),p[2] = (MapIcon[playerid][iconid][m_z] -z);
  99.     return (((p[0]<r)&&(p[0]>-r))&&((p[1]<r)&&(p[1]>-r))&&((p[2]<r)&&(p[2]>-r)))?1:0;
  100. }
  101. #endif
  102. stock k_Range(Float:x,Float:y) return ((x-y) < 2.0 && (x-y) > -2.0) ? 1 : 0;
  103. #undef INVALID
Advertisement
Add Comment
Please, Sign In to add comment