Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* SA-MP Include Map Icon & Checkpoint Movement
- *
- * (c) by Kaliber, 2014
- *
- */
- #if !defined _samp_included
- #include <a_samp>
- #endif
- #if defined _map_icon
- #endinput
- #endif
- #define _map_icon
- #define INVALID -1
- #if defined _use_BOTH || defined _use_CheckPoint
- forward OnPlayerCheckpointMoved(playerid,Float:x,Float:y,Float:z);
- native __SetPlayerCheckpoint(playerid,Float:x,Float:y,Float:z,Float:size)=SetPlayerCheckpoint;
- enum m_Check {
- Float:c_x, Float:c_y, Float:c_z, Float:c_size
- };
- static CheckPoint[MAX_PLAYERS][m_Check];
- stock _SetPlayerCheckpoint(playerid,Float:x,Float:y,Float:z,Float:size) {
- CheckPoint[playerid][c_x]=x,CheckPoint[playerid][c_y]=y,CheckPoint[playerid][c_z]=z,CheckPoint[playerid][c_size]=size;
- return __SetPlayerCheckpoint(playerid,x,y,z,size);
- }
- #if defined _ALS_SetPlayerCheckpoint
- #undef SetPlayerCheckpoint
- #else
- #define _ALS_SetPlayerCheckpoint
- #endif
- #define SetPlayerCheckpoint _SetPlayerCheckpoint
- #define MovePlayerCheckpoint(%0,%1,%2,%3,%4) @move_check(%0,%1,%2,%3,%4)
- @move_check(playerid,Float:x,Float:y,Float:z,Float:speed);
- @move_check(playerid,Float:x,Float:y,Float:z,Float:speed) {
- if(IsCheckInRangeOfPoint(playerid,2.0,x,y,z)) {
- CheckPoint[playerid][c_x]=x,CheckPoint[playerid][c_y]=y,CheckPoint[playerid][c_z]=z;
- CallLocalFunction("OnPlayerCheckpointMoved","dfff",playerid,x,y,z);
- return __SetPlayerCheckpoint(playerid,x,y,z,CheckPoint[playerid][c_size]);
- }
- if(!k_Range(CheckPoint[playerid][c_x],x)) {
- CheckPoint[playerid][c_x] = (x < CheckPoint[playerid][c_x]) ? floatsub(CheckPoint[playerid][c_x],float(1)) : floatadd(CheckPoint[playerid][c_x],float(1));
- } if(!k_Range(CheckPoint[playerid][c_y],y)) {
- CheckPoint[playerid][c_y] = (y < CheckPoint[playerid][c_y]) ? floatsub(CheckPoint[playerid][c_y],float(1)) : floatadd(CheckPoint[playerid][c_y],float(1));
- } if(!k_Range(CheckPoint[playerid][c_z],z)) {
- CheckPoint[playerid][c_z] = (z < CheckPoint[playerid][c_z]) ? floatsub(CheckPoint[playerid][c_z],float(1)) : floatadd(CheckPoint[playerid][c_z],float(1));
- }
- __SetPlayerCheckpoint(playerid,CheckPoint[playerid][c_x],CheckPoint[playerid][c_y],CheckPoint[playerid][c_z],CheckPoint[playerid][c_size]);
- return SetTimerEx("@move_check",floatround(250.0/speed),0,"iffff",playerid,x,y,z,speed);
- }
- stock IsCheckInRangeOfPoint(playerid,Float:r,Float:x,Float:y,Float:z) {
- static Float:p[3];
- p[0] = (CheckPoint[playerid][c_x] -x),p[1] = (CheckPoint[playerid][c_y] -y),p[2] = (CheckPoint[playerid][c_z] -z);
- return (((p[0]<r)&&(p[0]>-r))&&((p[1]<r)&&(p[1]>-r))&&((p[2]<r)&&(p[2]>-r)))?1:0;
- }
- #endif
- #if defined _use_BOTH || defined _use_mapIcon
- #define MAX_MAP_ICONS 100
- forward OnPlayerMapIconMoved(playerid,iconid,Float:x,Float:y,Float:z);
- native __SetPlayerMapIcon(playerid, iconid, Float:x, Float:y, Float:z, markertype, color, style) = SetPlayerMapIcon;
- enum m_Icon {
- Float:m_x,Float:m_y,Float:m_z,m_m,m_c,m_s
- };
- static MapIcon[MAX_PLAYERS][MAX_MAP_ICONS][m_Icon];
- stock _SetPlayerMapIcon(playerid, iconid, Float:x, Float:y, Float:z, markertype, color, style) {
- if(iconid < 0 || iconid >= MAX_MAP_ICONS) return INVALID;
- MapIcon[playerid][iconid][m_x]=x,MapIcon[playerid][iconid][m_y]=y,MapIcon[playerid][iconid][m_z]=z,
- MapIcon[playerid][iconid][m_m]=markertype,MapIcon[playerid][iconid][m_c]=color,MapIcon[playerid][iconid][m_s]=style;
- return __SetPlayerMapIcon(playerid, iconid, Float:x, Float:y, Float:z, markertype, color, style);
- }
- #if defined _ALS_SetPlayerMapIcon
- #undef SetPlayerMapIcon
- #else
- #define _ALS_SetPlayerMapIcon
- #endif
- #define SetPlayerMapIcon _SetPlayerMapIcon
- stock MovePlayerMapIcon(playerid,iconid,Float:x,Float:y,Float:z,Float:speed) {
- return (iconid < 0 || iconid >= MAX_MAP_ICONS) ? INVALID : @move_icon(playerid,iconid,x,y,z,speed);
- }
- @move_icon(playerid,iconid,Float:x,Float:y,Float:z,Float:speed);
- @move_icon(playerid,iconid,Float:x,Float:y,Float:z,Float:speed) {
- if(IsIconInRangeOfPoint(playerid,iconid,2.0,x,y,z)) {
- MapIcon[playerid][iconid][m_x]=x,MapIcon[playerid][iconid][m_y]=y,MapIcon[playerid][iconid][m_z]=z;
- CallLocalFunction("OnPlayerMapIconMoved","ddfff",playerid,iconid,x,y,z);
- return __SetPlayerMapIcon(playerid,iconid,x,y,z,MapIcon[playerid][iconid][m_m],MapIcon[playerid][iconid][m_c],MapIcon[playerid][iconid][m_s]);
- }
- if(!k_Range(MapIcon[playerid][iconid][m_x],x)) {
- 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));
- } if(!k_Range(MapIcon[playerid][iconid][m_y],y)) {
- 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));
- } if(!k_Range(MapIcon[playerid][iconid][m_z],z)) {
- 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));
- }
- __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]);
- return SetTimerEx("@move_icon",floatround(250.0/speed),0,"iiffff",playerid,iconid,x,y,z,speed);
- }
- stock IsIconInRangeOfPoint(playerid,iconid,Float:r,Float:x,Float:y,Float:z) {
- static Float:p[3];
- p[0] = (MapIcon[playerid][iconid][m_x] -x),p[1] = (MapIcon[playerid][iconid][m_y] -y),p[2] = (MapIcon[playerid][iconid][m_z] -z);
- return (((p[0]<r)&&(p[0]>-r))&&((p[1]<r)&&(p[1]>-r))&&((p[2]<r)&&(p[2]>-r)))?1:0;
- }
- #endif
- stock k_Range(Float:x,Float:y) return ((x-y) < 2.0 && (x-y) > -2.0) ? 1 : 0;
- #undef INVALID
Advertisement
Add Comment
Please, Sign In to add comment