S4T3K

s_streamer_extended [not over]

May 11th, 2014
410
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 36.47 KB | None | 0 0
  1. #include <a_samp>
  2. #tryinclude <streamer>
  3.  
  4. /******************
  5.     Defines
  6. ******************/
  7.  
  8.     /****************
  9.         Maximums
  10.     ****************/
  11.  
  12. #if defined MAX_OBJECTS
  13.     #undef MAX_OBJECTS
  14. #endif
  15. #if defined MAX_PICKUPS
  16.     #undef MAX_PICKUPS
  17. #endif
  18. #if defined MAX_3DTEXT_GLOBAL
  19.     #undef MAX_3DTEXT_GLOBAL
  20. #endif
  21.        
  22. #define MAX_OBJECTS 500
  23. #define MAX_PICKUPS 1024
  24. #define MAX_CP 1000
  25. #define MAX_RACE_CP 1000
  26. #define MAX_CIRCLES 250
  27. #define MAX_SPHERES 250
  28. #define MAX_RECTANGLES 250
  29. #define MAX_CUBES 250
  30. #define MAX_POLYGONS 250
  31. #define MAX_3DTEXT_GLOBAL 1024
  32. #define MAX_MAP_ICONS 1000
  33. #define MAX_POLYGON_POINTS 100
  34. #define MAX_TEXT_LABEL_SIZE 1024
  35.  
  36.  
  37.  
  38. /**************
  39.     Enums
  40. **************/
  41.  
  42. enum oInfo
  43. {
  44.     model,
  45.     Float:pos[6],
  46.     integer[3],
  47.     Float:distance[2],
  48.     objet,
  49. };
  50.  
  51. enum pInfo
  52. {
  53.     Float:pos[3],
  54.     model,
  55.     ptype,
  56.     integer[3],
  57.     Float:distance,
  58.     pickup,
  59. };
  60.  
  61. enum cpInfo
  62. {
  63.     Float:pos[3],
  64.     Float:taille,
  65.     Float:distance,
  66.     integer[3],
  67.     cp,
  68. };
  69.  
  70. enum rcpInfo
  71. {
  72.     ctype,
  73.     Float:pos[6],
  74.     Float:taille,
  75.     integer[3],
  76.     Float:distance,
  77.     rcp,
  78. };
  79.  
  80. enum miInfo
  81. {
  82.     Float:pos[3],
  83.     mtype,
  84.     couleur,
  85.     integer[3],
  86.     Float:distance,
  87.     cstyle,
  88.     mapicon,
  89. };
  90.  
  91. enum tInfo
  92. {
  93.     texte[MAX_TEXT_LABEL_SIZE],
  94.     Float:pos[3],
  95.     couleur,
  96.     Float:distance[2],
  97.     attachedp,
  98.     attachedv,
  99.     integer[4],
  100.     Text3D:label,
  101. };
  102.  
  103. enum cInfo
  104. {
  105.     Float:pos[2],
  106.     Float:taille,
  107.     integer[3],
  108.     circle,
  109. };
  110.  
  111. enum rInfo
  112. {
  113.     Float:pos[4],
  114.     integer[3],
  115.     rectangle,
  116. };
  117.  
  118. enum sInfo
  119. {
  120.     Float:pos[3],
  121.     Float:taille,
  122.     integer[3],
  123.     sphere,
  124. };
  125.  
  126. enum cuInfo
  127. {
  128.     Float:pos[6],
  129.     integer[3],
  130.     cube,
  131. };
  132.  
  133. enum poInfo
  134. {
  135.     Float:point[MAX_POLYGON_POINTS],
  136.     Float:minmax[2],
  137.     maxpoint,
  138.     integer[3],
  139.     polygon,
  140. };
  141.  
  142. /****************************
  143.     Arrays - Initialisation
  144. ****************************/
  145.  
  146. new InfoObjet[MAX_OBJECTS][oInfo];
  147. new InfoPickup[MAX_PICKUPS][pInfo];
  148. new InfoCP[MAX_CP][cpInfo];
  149. new InfoRCP[MAX_RACE_CP][rcpInfo];
  150. new InfoCircle[MAX_CIRCLES][cInfo];
  151. new InfoRectangle[MAX_RECTANGLES][rInfo];
  152. new InfoSphere[MAX_SPHERES][sInfo];
  153. new InfoCube[MAX_CUBES][cuInfo];
  154. new InfoPoly[MAX_POLYGONS][poInfo];
  155. new InfoMapIcon[MAX_MAP_ICONS][miInfo];
  156. new InfoLabel[MAX_3DTEXT_GLOBAL][tInfo];
  157.  
  158.  
  159. /*************************************
  160.     Refonte/Ajouts de fonctions
  161.     Partie "principale" de l'include
  162. *************************************/
  163.  
  164.     /*********************************************
  165.         Crédits : Vince, Gabriel Larcus Cordes
  166.     *********************************************/
  167. new p, o, c, r;
  168.  
  169. stock Float:GetDistanceBetweenPoints(Float:x1,Float:y1,Float:z1, Float:x2,Float:y2,Float:z2)
  170. {
  171.     return VectorSize(x1-x2, y1-y2, z1-z2);
  172. }
  173.     /*******************************
  174.         Modification - Create
  175.     *******************************/
  176.  
  177. stock S_CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 200.0, Float:drawdistance = 0.0)
  178. {
  179.     if(CountDynamicObjects() == MAX_OBJECTS) return -1;
  180.     for(o = 0; o < MAX_OBJECTS; o++)
  181.     {
  182.         if(!IsValidDynamicObject(InfoObjet[o][objet])) break;
  183.     }
  184.     InfoObjet[o][model] = modelid;
  185.     InfoObjet[o][pos][0] = x;
  186.     InfoObjet[o][pos][1] = y;
  187.     InfoObjet[o][pos][2] = z;
  188.     InfoObjet[o][pos][3] = rx;
  189.     InfoObjet[o][pos][4] = ry;
  190.     InfoObjet[o][pos][5] = rz;
  191.     InfoObjet[o][integer][0] = worldid;
  192.     InfoObjet[o][integer][1] = interiorid;
  193.     InfoObjet[o][integer][2] = playerid;
  194.     InfoObjet[o][distance][0] = streamdistance;
  195.     InfoObjet[o][distance][1] = drawdistance;
  196.     InfoObjet[o][objet] = CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 200.0, Float:drawdistance = 0.0);
  197.     if(IsValidDynamicObject(InfoObjet[o][objet])) return 1;
  198.     else return 0;
  199. }
  200.  
  201. #if defined _ALS_CreateDynamicObject
  202.     #undef CreateDynamicObject
  203. #else
  204.     #define _ALS_CreateDynamicObject
  205. #endif
  206.  
  207. #define CreateDynamicObject S_CreateDynamicObject
  208.  
  209. stock S_CreateDynamicPickup(modelid, type, Float:x, Float:y, Float:z, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0)
  210. {
  211.     if(CountDynamicPickups() == MAX_PICKUPS) return -1;
  212.     for(p = 0; p < MAX_PICKUPS; p++)
  213.     {
  214.         if(!IsValidDynamicPickup(InfoPickup[p][pickup])) break;
  215.     }
  216.     InfoPickup[p][pos][0] = x;
  217.     InfoPickup[p][pos][1] = y;
  218.     InfoPickup[p][pos][2] = z;
  219.     InfoPickup[p][model] = modelid;
  220.     InfoPickup[p][ptype] = type;
  221.     InfoPickup[p][integer][0] = worldid;
  222.     InfoPickup[p][integer][1] = interiorid;
  223.     InfoPickup[p][integer][2] = playerid;
  224.     InfoPickup[p][distance] = streamdistance;
  225.     InfoPickup[p][pickup] = CreateDynamicPickup(modelid, type, x, y, z, worldid, interiorid, playerid, streamdistance);
  226.     if(IsValidDynamicPickup(InfoPickup[p][pickup])) return 1;
  227.     else return 0;
  228. }
  229.  
  230. #if defined _ALS_CreateDynamicPickup
  231.     #undef CreateDynamicPickup
  232. #else
  233.     #define _ALS_CreateDynamicPickup
  234. #endif
  235.  
  236. #define CreateDynamicPickup S_CreateDynamicPickup
  237.  
  238. stock S_CreateDynamicCP(x, y, z, Float:size, virtualworld = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0)
  239. {
  240.     if(CountDynamicCPs() == MAX_CP) return -1;
  241.      
  242.     for(p = 0; p < MAX_CP; p++)
  243.     {
  244.         if(!IsValidDynamicCP(InfoCP[p][cp])) break;
  245.     }
  246.     InfoCP[p][pos][0] = x;
  247.     InfoCP[p][pos][1] = y;
  248.     InfoCP[p][pos][2] = z;
  249.     InfoCP[p][taille] = size;
  250.     InfoCP[p][distance] = streamdistance;
  251.     InfoCP[p][integer][0] = virtualworld;
  252.     InfoCP[p][integer][1] = interiorid;
  253.     InfoCP[p][integer][2] = playerid;
  254.     InfoCP[p][cp] = CreateDynamicCP(x, y, z, size, virtualworld, interiorid, playerid, streamdistance);
  255.     if(IsValidDynamicCP(InfoCP[p][cp])) return 1;
  256.     else return 0;
  257. }
  258.  
  259. #if defined _ALS_CreateDynamicCP
  260.     #undef CreateDynamicCP
  261. #else
  262.     #define _ALS_CreateDynamicCP
  263. #endif
  264.  
  265. #define CreateDynamicCP S_CreateDynamicCP
  266.  
  267. stock S_CreateDynamicRaceCP(type, Float:x, Float:y, Float:z, Float:nextx, Float:nexty, Float:nextz, Float:size, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0)
  268. {
  269.     if(CountDynamicRaceCPs() == MAX_RACE_CP) return -1;
  270.    
  271.     for(p = 0; p < MAX_RACE_CP; p++)
  272.     {
  273.         if(!IsValidDynamicRaceCP(InfoRCP[p][rcp])) break;
  274.     }
  275.     InfoRCP[p][ctype] = type;
  276.     InfoRCP[p][pos][0] = x;
  277.     InfoRCP[p][pos][1] = y;
  278.     InfoRCP[p][pos][2] = z;
  279.     InfoRCP[p][pos][3] = nextx;
  280.     InfoRCP[p][pos][4] = nexty;
  281.     InfoRCP[p][pos][5] = nextz;
  282.     InfoRCP[p][taille] = size;
  283.     InfoRCP[p][integer][0] = worldid;
  284.     InfoRCP[p][integer][1] = interiorid;
  285.     InfoRCP[p][integer][2] = playerid;
  286.     InfoRCP[p][distance] = streamdistance;
  287.     InfoRCP[p][rcp] = CreateDynamicRaceCP(type, x, y, z, nextx, nexty, nextz, size, worldid, interiorid, playerid, streamdistance);
  288.     if(IsValidDynamicRaceCP(InfoRCP[p][rcp])) return 1;
  289.     else return 0;
  290. }
  291.  
  292. #if defined _ALS_CreateDynamicRaceCP
  293.     #undef CreateDynamicRaceCP
  294. #else
  295.     #define _ALS_CreateDynamicRaceCP
  296. #endif
  297.  
  298. #define CreateDynamicRaceCP S_CreateDynamicRaceCP
  299.  
  300. stock S_CreateDynamicCircle(Float:x, Float:y, Float:size, worldid = -1, interiorid = -1, playerid = -1)
  301. {
  302.     if(CountDynamicCircles() == MAX_CIRCLES) return -1;
  303.     for(c = 0; c < MAX_CIRCLES; c++)
  304.     {
  305.         if(!IsValidDynamicArea(InfoCircle[c][circle])) break;
  306.     }
  307.     InfoCircle[c][pos][0] = x;
  308.     InfoCircle[c][pos][1] = y;
  309.     InfoCircle[c][taille] = size;
  310.     InfoCircle[c][integer][0] = worldid;
  311.     InfoCircle[c][integer][1] = interiorid;
  312.     InfoCircle[c][integer][2] = playerid;
  313.     InfoCircle[c][circle] = CreateDynamicCircle(x, y, size, worldid, interiorid, playerid);
  314.     if(IsValidDynamicArea(InfoCircle[c][circle])) return 1;
  315.     else return 0;
  316. }
  317.  
  318. #if defined _ALS_CreateDynamicCircle
  319.     #undef CreateDynamicCircle
  320. #else
  321.     #define _ALS_CreateDynamicCircle
  322. #endif
  323.  
  324. #define CreateDynamicCircle S_CreateDynamicCircle
  325.  
  326. stock S_CreateDynamicRectangle(Float:minx, Float:miny, Float:maxx, Float:maxy, worldid = -1, interiorid = -1, playerid = -1)
  327. {
  328.     if(CountDynamicRectangles() == MAX_RECTANGLES) return -1;
  329.     for(r = 0; r < MAX_RECTANGLES; r++)
  330.     {
  331.         if(!IsValidDynamicArea(InfoRectangle[r][rectangle])) break;
  332.     }
  333.     InfoRectangle[r][pos][0] = minx;
  334.     InfoRectangle[r][pos][1] = miny;
  335.     InfoRectangle[r][pos][2] = maxx;
  336.     InfoRectangle[r][pos][3] = maxy;
  337.     InfoRectangle[r][integer][0] = worldid;
  338.     InfoRectangle[r][integer][1] = interiorid;
  339.     InfoRectangle[r][integer][2] = playerid;
  340.     InfoRectangle[r][rectangle] = CreateDynamicRectangle(minx, miny, maxx, maxy, worldid, interiorid, playerid);
  341.     if(IsValidDynamicArea(InfoRectangle[r][rectangle])) return 1;
  342.     else return 0;
  343. }
  344.  
  345. #if defined _ALS_CreateDynamicRectangle
  346.     #undef CreateDynamicRectangle
  347. #else
  348.     #define _ALS_CreateDynamicRectangle
  349. #endif
  350.  
  351. #define CreateDynamicRectangle S_CreateDynamicRectangle
  352.  
  353. stock S_CreateDynamicSphere(Float:x, Float:y, Float:z, Float:size, worldid = -1, interiorid = -1, playerid = -1)
  354. {
  355.     if(CountDynamicSpheres() == MAX_SPHERES) return -1;
  356.     new s;
  357.     for(s = 0; s < MAX_SPHERES; s++)
  358.     {
  359.         if(!IsValidDynamicArea(InfoSphere[s][sphere])) break;
  360.     }
  361.     InfoSphere[s][pos][0] = x;
  362.     InfoSphere[s][pos][1] = y;
  363.     InfoSphere[s][pos][2] = z;
  364.     InfoSphere[s][taille] = size;
  365.     InfoSphere[s][integer][0] = worldid;
  366.     InfoSphere[s][integer][1] = interiorid;
  367.     InfoSphere[s][integer][2] = playerid;
  368.     InfoSphere[s][sphere] = CreateDynamicSphere(x, y, z, size, worldid, interiorid, playerid);
  369.     if(IsValidDynamicArea(InfoSphere[s][sphere])) return 1;
  370.     else return 0;
  371. }
  372.  
  373. #if defined _ALS_CreateDynamicSphere
  374.     #undef CreateDynamicSphere
  375. #else
  376.     #define _ALS_CreateDynamicSphere
  377. #endif
  378.  
  379. #define CreateDynamicSphere S_CreateDynamicSphere
  380.  
  381. stock S_CreateDynamicCube(Float:minx, Float:miny, Float:minz, Float:maxx, Float:maxy, Float:maxz, worldid = -1, interiorid = -1, playerid = -1)
  382. {
  383.     if(CountDynamicCubes() == MAX_CUBES) return -1;
  384.     for(c = 0; c < MAX_CUBES; c++)
  385.     {
  386.         if(!IsValidDynamicArea(InfoCube[c][cube])) break;
  387.     }
  388.     InfoCube[c][pos][0] = minx;
  389.     InfoCube[c][pos][1] = miny;
  390.     InfoCube[c][pos][2] = minz;
  391.     InfoCube[c][pos][3] = maxx;
  392.     InfoCube[c][pos][4] = maxy;
  393.     InfoCube[c][pos][5] = maxz;
  394.     InfoCube[c][integer][0] = worldid;
  395.     InfoCube[c][integer][1] = interiorid;
  396.     InfoCube[c][integer][2] = playerid;
  397.     InfoCube[c][cube] = CreateDynamicCube(minx, miny, minz, maxx, maxy, maxz, worldid, interiorid, playerid);
  398.     if(IsValidDynamicArea(InfoCube[c][cube])) return 1;
  399.     else return 0;
  400. }
  401.  
  402. #if defined _ALS_CreateDynamicCube
  403.     #undef CreateDynamicCube
  404. #else
  405.     #define _ALS_CreateDynamicCube
  406. #endif
  407.  
  408. #define CreateDynamicCube S_CreateDynamicCube
  409.  
  410. stock S_CreateDynamicPolygon(Float:points[], Float:minz = -FLOAT_INFINITY, Float:maxz = FLOAT_INFINITY, maxpoints = MAX_POLYGON_POINTS, worldid = -1, interiorid = -1, playerid = -1)
  411. {
  412.     if(CountDynamicPolygons() == MAX_POLYGONS) return -1;
  413.     new i;
  414.     for(p = 0; p < MAX_POLYGONS; p++)
  415.     {
  416.         if(!IsValidDynamicArea(InfoPoly[p][polygon])) break;
  417.     }
  418.     for(i = 0; i < MAX_POLYGON_POINTS; i++)
  419.     {
  420.         InfoPoly[p][point][i] = points[i];
  421.     }
  422.     InfoPoly[p][minmax][0] = minz;
  423.     InfoPoly[p][minmax][1] = maxz;
  424.     InfoPoly[p][maxpoint] = maxpoints;
  425.     InfoPoly[p][integer][0] = worldid;
  426.     InfoPoly[p][integer][1] = interiorid;
  427.     InfoPoly[p][integer][2] = playerid;
  428.     InfoPoly[p][polygon] = CreateDynamicPolygon(points, minz, maxz, maxpoints, worldid, interiorid, playerid);
  429.     if(IsValidDynamicArea(InfoPoly[p][polygon])) return 1;
  430.     else return 0;
  431. }
  432.  
  433. #if defined _ALS_CreateDynamicPolygon
  434.     #undef CreateDynamicPolygon
  435. #else
  436.     #define _ALS_CreateDynamicPolygon
  437. #endif
  438.  
  439. #define CreateDynamicPolygon S_CreateDynamicPolygon
  440.  
  441. stock Text3D:S_CreateDynamic3DTextLabel(const text[MAX_TEXT_LABEL_SIZE], color, Float:x, Float:y, Float:z, Float:drawdistance, attachedplayer = INVALID_PLAYER_ID, attachedvehicle = INVALID_VEHICLE_ID, testlos = 0, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0)
  442. {
  443.     if(CountDynamic3DTextLabels() == MAX_3DTEXT_GLOBAL) return -1;
  444.     new l;
  445.     for(l = 0; l < MAX_3DTEXT_GLOBAL; l++)
  446.     {
  447.         if(!IsValidDynamic3DTextLabel(InfoLabel[l][label])) break;
  448.     }
  449.     InfoLabel[l][texte] = text;
  450.     InfoLabel[l][couleur] = color;
  451.     InfoLabel[l][pos][0] = x;
  452.     InfoLabel[l][pos][1] = y;
  453.     InfoLabel[l][pos][2] = z;
  454.     InfoLabel[l][distance][0] = drawdistance;
  455.     InfoLabel[l][attachedp] = attachedplayer;
  456.     InfoLabel[l][attachedv] = attachedvehicle;
  457.     InfoLabel[l][integer][0] = worldid;
  458.     InfoLabel[l][integer][1] = interiorid;
  459.     InfoLabel[l][integer][2] = playerid;
  460.     InfoLabel[l][integer][3] = testlos;
  461.     InfoLabel[l][distance][1] = streamdistance;
  462.     return InfoLabel[l][label];
  463. }
  464.  
  465. #if defined _ALS_CreateDynamic3DTextLabel
  466.     #undef CreateDynamic3DTextLabel
  467. #else
  468.     #define _ALS_CreateDynamic3DTextLabel
  469. #endif
  470.  
  471. #define CreateDynamic3DTextLabel S_CreateDynamic3DTextLabel
  472.  
  473. stock S_CreateDynamicMapIcon(Float:x, Float:y, Float:z, type, color, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 100.0, style = MAPICON_LOCAL)
  474. {
  475.     if(CountDynamicMapIcons() == MAX_MAP_ICONS) return -1;
  476.     new m;
  477.     for(m = 0; m < MAX_MAP_ICONS; m++)
  478.     {
  479.         if(!IsValidDynamicMapIcon(InfoMapIcon[m][mapicon])) break;
  480.     }
  481.     InfoMapIcon[m][pos][0] = x;
  482.     InfoMapIcon[m][pos][1] = y;
  483.     InfoMapIcon[m][pos][2] = z;
  484.     InfoMapIcon[m][mtype] = type;
  485.     InfoMapIcon[m][couleur] = color;
  486.     InfoMapIcon[m][integer][0] = worldid;
  487.     InfoMapIcon[m][integer][1] = interiorid;
  488.     InfoMapIcon[m][integer][2] = playerid;
  489.     InfoMapIcon[m][distance] = streamdistance;
  490.     InfoMapIcon[m][cstyle] = style;
  491.     InfoMapIcon[m][mapicon] = CreateDynamicMapIcon(x, y, z, type, color, worldid, interiorid, playerid, streamdistance, style);
  492.     if(IsValidDynamicMapIcon(InfoMapIcon[m][mapicon])) return 1;
  493.     else return 0;
  494. }
  495.  
  496. #if defined _ALS_CreateDynamicMapIcon
  497.     #undef CreateDynamicMapIcon
  498. #else
  499.     #define _ALS_CreateDynamicMapIcon
  500. #endif
  501.  
  502. #define CreateDynamicMapIcon S_CreateDynamicMapIcon
  503.  
  504.     /**************************
  505.         Création - CountItems
  506.     **************************/
  507.  
  508. stock CountDynamicPolygons()
  509. {
  510.     new po;
  511.     for(p = 0; p < MAX_POLYGONS; p++)
  512.     {
  513.         if(!IsValidDynamicArea(InfoPoly[p][polygon])) po++;
  514.     }
  515.     return po;
  516. }
  517.  
  518. stock CountDynamicCubes()
  519. {
  520.     new cu;
  521.     for(c = 0; c < MAX_CUBES; c++)
  522.     {
  523.         if(IsValidDynamicArea(InfoCube[c][cube])) cu++;
  524.     }
  525.     return cu;
  526. }
  527.  
  528. stock CountDynamicSpheres()
  529. {
  530.     new sp;
  531.     for(new s = 0; s < MAX_SPHERES; s++)
  532.     {
  533.         if(IsValidDynamicArea(InfoSphere[s][sphere])) sp++;
  534.     }
  535.     return sp;
  536. }
  537.  
  538. stock CountDynamicRectangles()
  539. {
  540.     new re;
  541.     for(r = 0; r < MAX_RECTANGLES; r++)
  542.     {
  543.         if(IsValidDynamicArea(InfoRectangle[r][rectangle])) re++;
  544.     }
  545.     return re;
  546. }
  547.  
  548. stock CountDynamicCircles()
  549. {
  550.     new ci;
  551.     for(c = 0; c < MAX_CIRCLES; c++)
  552.     {
  553.         if(IsValidDynamicArea(InfoCircle[c][circle])) ci++;
  554.     }
  555.     return ci;
  556. }
  557.  
  558.     /******************************
  559.         J'trouve pas de nom
  560.         à donner à cette partie
  561.     ******************************/
  562.  
  563.         /*******************
  564.             Objets
  565.         *******************/
  566.  
  567. stock GetDynamicObjectModel(objectid)
  568. {
  569.     if(!IsValidDynamicObject(objectid)) return -1;
  570.     for(o = 0; o < MAX_OBJECTS; o++)
  571.     {
  572.         if(InfoObjet[o][objet] == objectid) return InfoObjet[o][model];
  573.     }
  574.     return -1;
  575. }
  576.  
  577. stock SetDynamicObjectModel(objectid, modelid)
  578. {
  579.     if(!IsValidDynamicObject(objectid)) return -1;
  580.     for(o = 0; o < MAX_OBJECTS; o++)
  581.     {
  582.         if(InfoObjet[o][objet] == objectid)
  583.         {
  584.             InfoObjet[o][model] = modelid;
  585.             DestroyDynamicObject(InfoObjet[o][objet]);
  586.             InfoObjet[o][objet] = CreateDynamicObject(InfoObjet[o][model], InfoObjet[o][pos][0], InfoObjet[o][pos][1], InfoObjet[o][pos][2], InfoObjet[o][pos][3], InfoObjet[o][pos][4], InfoObjet[o][pos][5], InfoObjet[o][integer][0], InfoObjet[o][integer][1], InfoObjet[o][integer][2], InfoObjet[o][distance][0], InfoObjet[o][distance][1]);
  587.             if(IsValidDynamicObject(InfoObjet[o][objet])) return 1;
  588.             else return 0;
  589.         }
  590.     }
  591. }
  592.  
  593. stock GetDynamicObjectStreamParams(objectid, &worldid, &interiorid, &playerid)
  594. {
  595.     if(!IsValidDynamicObject(objectid)) return -1;
  596.     for(o = 0; o < MAX_OBJECTS; o++)
  597.     {
  598.         if(InfoObjet[o][objet] == objectid)
  599.         {
  600.             worldid = InfoObjet[o][integer][0];
  601.             interiorid = InfoObjet[o][integer][1];
  602.             playerid = InfoObjet[o][integer][2];
  603.         }
  604.     }
  605.     return -1;
  606. }
  607.  
  608. stock SetDynamicObjectStreamParams(objectid, worldid = -1, interiorid = -1, playerid = -1)
  609. {
  610.     if(!IsValidDynamicObject(objectid)) return -1;
  611.     for(o = 0; o < MAX_OBJECTS; o++)
  612.     {
  613.         if(InfoObjet[o][objet] == objectid)
  614.         {
  615.             InfoObjet[o][integer][0] = worldid;
  616.             InfoObjet[o][integer][1] = interiorid;
  617.             InfoObjet[o][integer][2] = playerid;
  618.             DestroyDynamicObject(InfoObjet[o][objet]);
  619.             InfoObjet[o][objet] = CreateDynamicObject(InfoObjet[o][model], InfoObjet[o][pos][0], InfoObjet[o][pos][1], InfoObjet[o][pos][2], InfoObjet[o][pos][3], InfoObjet[o][pos][4], InfoObjet[o][pos][5], InfoObjet[o][integer][0], InfoObjet[o][integer][1], InfoObjet[o][integer][2], InfoObjet[o][distance][0], InfoObjet[o][distance][1]);
  620.             if(IsValidDynamicObject(InfoObjet[o][objet])) return 1;
  621.             else return 0;
  622.         }
  623.     }
  624. }
  625.  
  626. stock Float:GetDynamicObjectStreamDistance(objectid)
  627. {
  628.     if(!IsValidDynamicObject(objectid)) return -1;
  629.     for(o = 0; o < MAX_OBJECTS; o++)
  630.     {
  631.         if(InfoObjet[o][objet] == objectid) return InfoObjet[o][distance][0];
  632.     }
  633.     return -1.0;
  634. }
  635.  
  636. stock Float:GetDynamicObjectDrawDistance(objectid)
  637. {
  638.     if(!IsValidDynamicObject(objectid)) return -1;
  639.     for(o = 0; o < MAX_OBJECTS; o++)
  640.     {
  641.         if(InfoObjet[o][objet] == objectid) return InfoObjet[o][distance][1];
  642.     }
  643.     return -1.0;
  644. }
  645.  
  646. stock SetDynamicObjectStreamDistance(objectid, Float:streamdistance)
  647. {
  648.     if(!IsValidDynamicObject(objectid)) return -1;
  649.     for(o = 0; o < MAX_OBJECTS; o++)
  650.     {
  651.         if(InfoObjet[o][objet] == objectid)
  652.         {
  653.             InfoObjet[o][distance][0] = streamdistance;
  654.             DestroyDynamicObject(InfoObjet[o][objet]);
  655.             InfoObjet[o][objet] = CreateDynamicObject(InfoObjet[o][model], InfoObjet[o][pos][0], InfoObjet[o][pos][1], InfoObjet[o][pos][2], InfoObjet[o][pos][3], InfoObjet[o][pos][4], InfoObjet[o][pos][5], InfoObjet[o][integer][0], InfoObjet[o][integer][1], InfoObjet[o][integer][2], InfoObjet[o][distance][0], InfoObjet[o][distance][1]);
  656.             if(IsValidDynamicObject(InfoObjet[o][objet])) return 1;
  657.             else return 0;
  658.         }
  659.     }
  660. }
  661.  
  662. stock SetDynamicObjectDrawDistance(objectid, Float:drawdistance)
  663. {
  664.     if(!IsValidDynamicObject(objectid)) return -1;
  665.     for(o = 0; o < MAX_OBJECTS; o++)
  666.     {
  667.         if(InfoObjet[o][objet] == objectid)
  668.         {
  669.             InfoObjet[o][distance][1] = drawdistance;
  670.             DestroyDynamicObject(InfoObjet[o][objet]);
  671.             InfoObjet[o][objet] = CreateDynamicObject(InfoObjet[o][model], InfoObjet[o][pos][0], InfoObjet[o][pos][1], InfoObjet[o][pos][2], InfoObjet[o][pos][3], InfoObjet[o][pos][4], InfoObjet[o][pos][5], InfoObjet[o][integer][0], InfoObjet[o][integer][1], InfoObjet[o][integer][2], InfoObjet[o][distance][0], InfoObjet[o][distance][1]);
  672.             if(IsValidDynamicObject(InfoObjet[o][objet])) return 1;
  673.             else return 0;
  674.         }
  675.     }
  676.  
  677. }
  678.  
  679. stock IsPlayerInRangeOfDynamicObject(playerid, objectid, Float:radi = 5.0)
  680. {
  681.     if(!IsValidDynamicObject(objectid)) return -1;
  682.     new Float:pos[3];
  683.     GetDynamicObjectPos(objectid, pos[0], pos[1], pos[2]);
  684.     if(IsPlayerInRangeOfPoint(playerid, radi, pos[0], pos[1], pos[2])) return true;
  685.     else return false;
  686. }
  687.  
  688. stock IsDynamicObjectInRangeOfPoint(objectid, Float:x, Float:y, Float:z, Float:radi = 5.0)
  689. {
  690.     if(!IsValidDynamicObject(objectid)) return -1;
  691.     new pos[3];
  692.     GetDynamicObjectPos(objectid, pos[0], pos[1], pos[2]);
  693.     if(GetDistanceBetweenPoints(pos[0], pos[1], pos[2], x, y, z) <= radi) return true;
  694.     else return false;
  695. }
  696.  
  697. stock GetNearestObjectFromObject(objectid, Float:radi = 0.3)
  698. {
  699.     if(!IsValidDynamicObject(objectid)) return -1;
  700.     new Float:opos[3];
  701.     GetDynamicObjectPos(objectid, opos[0], opos[1], opos[2]);
  702.     for(o = 0; o < MAX_OBJECTS; o++)
  703.     {
  704.         if(InfoObjet[o][objet] == objectid) continue;
  705.         if(GetDistanceBetweenPoints(opos[0], opos[1], opos[2], InfoObjet[o][pos][0], InfoObjet[o][pos][1], InfoObjet[o][pos][2]) <= radi) return InfoObjet[o][objet];
  706.     }
  707.     return -1;
  708. }
  709.  
  710. stock GetNearestObjectFromVehicle(objectid, vehicleid, Float:radi = 1.0)
  711. {
  712.     if(!IsValidDynamicObject(objectid)) return -1;
  713.     new Float:vpos[3];
  714.     GetVehiclePos(vehicleid, vpos[0], vpos[1], vpos[2]);
  715.     for(o = 0; o < MAX_OBJECTS; o++)
  716.     {
  717.         if(InfoObjet[o][objet] == objectid) continue;
  718.         if(GetDistanceBetweenPoints(vpos[0], vpos[1], vpos[2], InfoObjet[o][pos][0], InfoObjet[o][pos][1], InfoObjet[o][pos][2]) <= radi) return InfoObjet[o][objet];
  719.     }
  720.     return -1;
  721. }
  722.  
  723. stock GetNearestObjectFromPlayer(objectid, playerid, Float:radi = 0.5)
  724. {
  725.     if(!IsValidDynamicObject(objectid)) return -1;
  726.     new Float:ppos[3];
  727.     GetPlayerPos(playerid, ppos[0], ppos[1], ppos[2]);
  728.     for(o = 0; o < MAX_OBJECTS; o++)
  729.     {
  730.         if(InfoObjet[o][objet] == objectid) continue;
  731.         if(GetDistanceBetweenPoints(ppos[0], ppos[1], ppos[2], InfoObjet[o][pos][0], InfoObjet[o][pos][1], InfoObjet[o][pos][2]) <= radi) return InfoObjet[o][objet];
  732.     }
  733.     return -1;
  734. }
  735.  
  736. stock GetNearestObjectFromPickup(objectid, pickupid, Float:radi = 1.0)
  737. {
  738.     if(!IsValidDynamicObject(objectid)) return -1;
  739.     new Float:ppos[3];
  740.     GetDynamicPickupPos(pickupid, ppos[0], ppos[1], ppos[2]);
  741.     for(o = 0; o < MAX_OBJECTS; o++)
  742.     {
  743.         if(InfoObjet[o][objet] == objectid) continue;
  744.         if(GetDistanceBetweenPoints(ppos[0], ppos[1], ppos[2], InfoObjet[o][pos][0], InfoObjet[o][pos][1], InfoObjet[o][pos][2]) <= radi) return InfoObjet[o][objet];
  745.     }
  746.     return -1;
  747. }
  748.  
  749.         /*******************
  750.             Pickups
  751.         *******************/
  752.  
  753. stock GetDynamicPickupPos(pickupid, &Float:x, &Float:y, &Float:z)
  754. {
  755.     if(!IsValidDynamicPickup(pickupid)) return -1;
  756.     for(p = 0; p < MAX_PICKUPS; p++)
  757.     {
  758.         if(pickupid == InfoPickup[p][pickup])
  759.         {
  760.             x = InfoPickup[p][pos][0];
  761.             y = InfoPickup[p][pos][1];
  762.             z = InfoPickup[p][pos][2];
  763.             break;
  764.         }
  765.     }
  766.     return -1;
  767. }
  768.  
  769. stock SetDynamicPickupPos(pickupid, Float:x, Float:y, Float:z)
  770. {
  771.     if(!IsValidDynamicPickup(pickupid)) return -1;
  772.     for(p = 0; p < MAX_PICKUPS; p++)
  773.     {
  774.         if(pickupid == InfoPickup[p][pickup])
  775.         {
  776.             InfoPickup[p][pos][0] = x;
  777.             InfoPickup[p][pos][1] = y;
  778.             InfoPickup[p][pos][2] = z;
  779.             DestroyDynamicPickup(InfoPickup[p][pickup]);
  780.             InfoPickup[p][pickup] = CreateDynamicPickup(InfoPickup[p][model], InfoPickup[p][ptype], InfoPickup[p][pos][0], InfoPickup[p][pos][1], InfoPickup[p][pos][2], InfoPickup[p][integer][0], InfoPickup[p][integer][1], InfoPickup[p][integer][2], InfoPickup[p][distance]);
  781.             if(IsValidDynamicPickup(InfoPickup[p][pickup])) return 1;
  782.             else return 0;
  783.         }
  784.     }
  785. }
  786.  
  787. stock GetDynamicPickupType(pickupid)
  788. {
  789.     if(!IsValidDynamicPickup(pickupid)) return -1;
  790.     for(p = 0; p < MAX_PICKUPS; p++)
  791.     {
  792.         if(pickupid == InfoPickup[p][pickup])
  793.         {
  794.             return InfoPickup[p][type];
  795.         }
  796.     }
  797.     return -1;
  798. }
  799.  
  800. stock SetDynamicPickupType(pickupid, type)
  801. {
  802.     if(!IsValidDynamicPickup(pickupid)) return -1;
  803.     for(p = 0; p < MAX_PICKUPS; p++)
  804.     {
  805.         if(pickupid == InfoPickup[p][pickup])
  806.         {
  807.             InfoPickup[p][ptype] = type;
  808.             DestroyDynamicPickup(InfoPickup[p][pickup]);
  809.             InfoPickup[p][pickup] = CreateDynamicPickup(InfoPickup[p][model], InfoPickup[p][ptype], InfoPickup[p][pos][0], InfoPickup[p][pos][1], InfoPickup[p][pos][2], InfoPickup[p][integer][0], InfoPickup[p][integer][1], InfoPickup[p][integer][2], InfoPickup[p][distance]);
  810.             if(IsValidDynamicPickup(InfoPickup[p][pickup])) return 1;
  811.             else return 0;
  812.         }
  813.     }
  814. }
  815.  
  816. stock GetDynamicPickupStreamParams(pickupid, &worldid, &interiorid, &playerid)
  817. {
  818.     if(!IsValidDynamicPickup(pickupid)) return -1;
  819.     for(p = 0; p < MAX_PICKUPS; p++)
  820.     {
  821.         if(pickupid == InfoPickup[p][pickup])
  822.         {
  823.             worldid = InfoPickup[p][integer][0];
  824.             interiorid = InfoPickup[p][integer][1];
  825.             playerid = InfoPickup[p][integer][2];
  826.             break;
  827.         }
  828.     }
  829.     worldid = -1;
  830.     interiorid = -1;
  831.     playerid = -1;
  832. }
  833.  
  834. stock SetDynamicPickupStreamParams(pickupid, worldid, interiorid, playerid)
  835. {
  836.     if(!IsValidDynamicPickup(pickupid)) return -1;
  837.     for(p = 0; p < MAX_PICKUPS; p++)
  838.     {
  839.         if(pickupid == InfoPickup[p][pickup])
  840.         {
  841.             InfoPickup[p][integer][0] = worldid;
  842.             InfoPickup[p][integer][1] = interiorid;
  843.             InfoPickup[p][integer][2] = playerid;
  844.             DestroyDynamicPickup(InfoPickup[p][pickup]);
  845.             InfoPickup[p][pickup] = CreateDynamicPickup(InfoPickup[p][model], InfoPickup[p][ptype], InfoPickup[p][pos][0], InfoPickup[p][pos][1], InfoPickup[p][pos][2], InfoPickup[p][integer][0], InfoPickup[p][integer][1], InfoPickup[p][integer][2], InfoPickup[p][distance]);
  846.             if(IsValidDynamicPickup(InfoPickup[p][pickup])) return 1;
  847.             else return 0;
  848.         }
  849.     }
  850. }
  851.  
  852. stock GetDynamicPickupModel(pickupid)
  853. {
  854.     if(!IsValidDynamicPickup(pickupid)) return -1;
  855.     for(p = 0; p < MAX_PICKUPS; p++)
  856.     {
  857.         if(pickupid == InfoPickup[p][pickup]) return InfoPickup[p][model];
  858.     }
  859.     return -1;
  860. }
  861.  
  862. stock SetDynamicPickupModel(pickupid, modelid)
  863. {
  864.     if(!IsValidDynamicPickup(pickupid)) return -1;
  865.     for(p = 0; p < MAX_PICKUPS; p++)
  866.     {
  867.         if(pickupid == InfoPickup[p][pickup])
  868.         {
  869.             InfoPickup[p][model] = modelid;
  870.             DestroyDynamicPickup(InfoPickup[p][pickup]);
  871.             InfoPickup[p][pickup] = CreateDynamicPickup(InfoPickup[p][model], InfoPickup[p][ptype], InfoPickup[p][pos][0], InfoPickup[p][pos][1], InfoPickup[p][pos][2], InfoPickup[p][integer][0], InfoPickup[p][integer][1], InfoPickup[p][integer][2], InfoPickup[p][distance]);
  872.             if(IsValidDynamicPickup(InfoPickup[p][pickup])) return 1;
  873.             else return 0;
  874.         }
  875.     }
  876. }
  877.  
  878. stock Float:GetDynamicPickupStreamDistance(pickupid)
  879. {
  880.     if(!IsValidDynamicPickup(pickupid)) return -1;
  881.     for(p = 0; p < MAX_PICKUPS; p++)
  882.     {
  883.         if(pickupid == InfoPickup[p][pickup]) return InfoPickup[p][distance];
  884.     }
  885. }
  886.  
  887. stock SetDynamicPickupStreamDistance(pickupid, Float:strdistance)
  888. {
  889.     if(!IsValidDynamicPickup(pickupid)) return -1;
  890.     for(p = 0; p < MAX_PICKUPS; p++)
  891.     {
  892.         if(pickupid == InfoPickup[p][pickup])
  893.         {
  894.             InfoPickup[p][distance] = strdistance;
  895.             DestroyDynamicPickup(InfoPickup[p][pickup]);
  896.             InfoPickup[p][pickup] = CreateDynamicPickup(InfoPickup[p][model], InfoPickup[p][ptype], InfoPickup[p][pos][0], InfoPickup[p][pos][1], InfoPickup[p][pos][2], InfoPickup[p][integer][0], InfoPickup[p][integer][1], InfoPickup[p][integer][2], InfoPickup[p][distance]);
  897.             if(IsValidDynamicPickup(InfoPickup[p][pickup])) return 1;
  898.             else return 0;
  899.         }
  900.     }
  901. }
  902.  
  903. stock IsPlayerInRangeOfDynamicPickup(playerid, pickupid, Float:range = 3.0)
  904. {
  905.     if(!IsValidDynamicPickup(pickupid)) return -1;
  906.     new Float:pos[3];
  907.     GetDynamicPickupPos(pickupid, pos[0], pos[1], pos[2]);
  908.     if(IsPlayerInRangeOfPoint(playerid, range, pos[0], pos[1], pos[2])) return true;
  909.     else return false;
  910. }
  911.  
  912. stock IsDynamicPickupInRangeOfPoint(pickupid, Float:x, Float:y, Float:z, Float:range = 3.0)
  913. {
  914.     if(!IsValidDynamicPickup(pickupid)) return -1;
  915.     new Float:pos[3];
  916.     GetDynamicPickupPos(pickupid, pos[0], pos[1], pos[2]);
  917.     if(GetDistanceBetweenPoints(pos[0], pos[1], pos[2], x, y, z) <= range) return true;
  918.     else return false;
  919. }
  920.  
  921.         /******************
  922.             Checkpoints
  923.         ******************/
  924.  
  925. stock GetDynamicCPPos(checkpointid, &Float:x, &Float:y, &Float:z)
  926. {
  927.     if(!IsValidDynamicCP(checkpointid)) return -1;
  928.     for(c = 0; c < MAX_CP; c++)
  929.     {
  930.         if(InfoCP[c][cp] == checkpointid)
  931.         {
  932.             x = InfoCP[p][pos][0];
  933.             y = InfoCP[p][pos][1];
  934.             z = InfoCP[p][pos][2];  
  935.             break;
  936.         }
  937.     }
  938. }
  939.  
  940. stock SetDynamicCPPos(checkpointid, Float:x, Float:y, Float:z)
  941. {
  942.     if(!IsValidDynamicCP(checkpointid)) return -1;
  943.     for(p = 0; p < MAX_CP; p++)
  944.     {
  945.         if(InfoCP[p][cp] == checkpointid)
  946.         {
  947.             InfoCP[p][pos][0] = x;
  948.             InfoCP[p][pos][1] = y;
  949.             InfoCP[p][pos][2] = z;
  950.             DestroyDynamicCP(InfoCP[p][cp]);
  951.             InfoCP[p][cp] = CreateDynamicCP(InfoCP[p][pos][0], InfoCP[p][pos][1], InfoCP[p][pos][2], InfoCP[p][taille], InfoCP[p][integer][0], InfoCP[p][integer][1], InfoCP[p][integer][2], InfoCP[p][distance]);  
  952.             if(IsValidDynamicCP(InfoCP[p][cp])) return 1;
  953.             else return 0;
  954.         }
  955.     }
  956. }
  957.  
  958. stock Float:GetDynamicCPSize(checkpointid)
  959. {
  960.     if(!IsValidDynamicCP(checkpointid)) return -1;
  961.     for(c = 0; c < MAX_CP; c++)
  962.     {
  963.         if(InfoCP[c][cp] == checkpointid) return InfoCP[c][taille];
  964.     }
  965. }
  966.  
  967. stock SetDynamicCPSize(checkpointid, Float:size)
  968. {
  969.     if(!IsValidDynamicCP(checkpointid)) return -1;
  970.     for(c = 0; c < MAX_CP; c++)
  971.     {
  972.         if(InfoCP[c][cp] == checkpointid)
  973.         {
  974.             InfoCP[c][taille] = size;
  975.             DestroyDynamicCP(InfoCP[p][cp]);
  976.             InfoCP[p][cp] = CreateDynamicCP(InfoCP[p][pos][0], InfoCP[p][pos][1], InfoCP[p][pos][2], InfoCP[p][taille], InfoCP[p][integer][0], InfoCP[p][integer][1], InfoCP[p][integer][2], InfoCP[p][distance]);  
  977.             if(IsValidDynamicCP(InfoCP[p][cp])) return 1;
  978.             else return 0;
  979.         }
  980.     }
  981. }
  982.  
  983. stock GetDynamicCPStreamParams(checkpointid, &worldid, &interiorid, &playerid)
  984. {
  985.     if(!IsValidDynamicCP(checkpointid)) return -1;
  986.     for(c = 0; c < MAX_CP; c++)
  987.     {
  988.         if(InfoCP[c][cp] == checkpointid)
  989.         {
  990.             worldid = InfoCP[c][integer][0];
  991.             interiorid = InfoCP[c][integer][1];
  992.             playerid = InfoCP[c][integer][2];
  993.         }
  994.     }
  995. }
  996.  
  997. stock SetDynamicCPStreamParams(checkpointid, worldid, interiorid, playerid)
  998. {
  999.     if(!IsValidDynamicCP(checkpointid)) return -1;
  1000.     for(c = 0; c < MAX_CP; c++)
  1001.     {
  1002.         if(InfoCP[c][cp] == checkpointid)
  1003.         {
  1004.             InfoCP[c][integer][0] = worldid;
  1005.             InfoCP[c][integer][1] = interiorid;
  1006.             InfoCP[c][integer][2] = playerid;
  1007.             DestroyDynamicCP(InfoCP[p][cp]);
  1008.             InfoCP[p][cp] = CreateDynamicCP(InfoCP[p][pos][0], InfoCP[p][pos][1], InfoCP[p][pos][2], InfoCP[p][taille], InfoCP[p][integer][0], InfoCP[p][integer][1], InfoCP[p][integer][2], InfoCP[p][distance]);  
  1009.             if(IsValidDynamicCP(InfoCP[p][cp])) return 1;
  1010.             else return 0;
  1011.         }
  1012.     }
  1013. }
  1014.  
  1015. stock Float:GetDynamicCPStreamDistance(checkpointid)
  1016. {
  1017.     if(!IsValidDynamicCP(checkpointid)) return -1;
  1018.     for(c = 0; c < MAX_CP; c++)
  1019.     {
  1020.         if(InfoCP[c][cp] == checkpointid) return InfoCP[c][distance];
  1021.     }
  1022. }
  1023.  
  1024. stock SetDynamicCPStreamDistance(checkpointid, Float:streamdistance)
  1025. {
  1026.     if(!IsValidDynamicCP(checkpointid)) return -1;
  1027.     for(c = 0; c < MAX_CP; c++)
  1028.     {
  1029.         if(InfoCP[c][cp] == checkpointid)
  1030.         {
  1031.             InfoCP[c][distance] = streamdistance;
  1032.             DestroyDynamicCP(InfoCP[p][cp]);
  1033.             InfoCP[p][cp] = CreateDynamicCP(InfoCP[p][pos][0], InfoCP[p][pos][1], InfoCP[p][pos][2], InfoCP[p][taille], InfoCP[p][integer][0], InfoCP[p][integer][1], InfoCP[p][integer][2], InfoCP[p][distance]);  
  1034.             if(IsValidDynamicCP(InfoCP[p][cp])) return 1;
  1035.             else return 0;
  1036.         }
  1037.     }
  1038. }
  1039.  
  1040. stock IsDynamicObjectInRangeOfCP(objectid, checkpointid, Float:range = 5.0)
  1041. {
  1042.     if(!IsValidDynamicCP(checkpointid)) return -1;
  1043.     new Float:pos[6];
  1044.     GetDynamicObjectPos(objectid, pos[0], pos[1], pos[2]);
  1045.     GetDynamicCPPos(checkpointid, pos[3], pos[4], pos[5]);
  1046.     if(GetDistanceBetweenPoints(pos[0], pos[1], pos[2], pos[3], pos[4], pos[5]) <= radius) return true;
  1047.     else return false;
  1048. }
  1049.  
  1050. stock IsDynamicCPInRangeOfPoint(checkpointid, Float:x, Float:y, Float:z, Float:range = 5.0)
  1051. {
  1052.     if(!IsValidDynamicCP(checkpointid)) return -1;
  1053.     new Float:pos[4];
  1054.     GetDynamicCPPos(checkpointid, pos[0], pos[1], pos[2]);
  1055.     pos[3] = GetDynamicCPSize(checkpointid);
  1056.     if(floatadd(GetDistanceBetweenPoints(pos[0], pos[1], pos[2], x, y, z), pos[3]) <= radius) return true;
  1057.     else return false;
  1058. }
  1059.  
  1060.         /**********************
  1061.             Race checkpoints
  1062.         **********************/
  1063.  
  1064. stock GetDynamicRaceCPType(checkpointid)
  1065. {
  1066.     if(!IsValidDynamicRaceCP(checkpointid)) return -1;
  1067.     for(r = 0; r < MAX_RACE_CP; r++)
  1068.     {
  1069.         if(InfoRCP[r][rcp] == checkpointid) return InfoRCP[r][type];
  1070.     }
  1071. }
  1072.  
  1073. stock SetDynamicRaceTPType(checkpointid, type)
  1074. {
  1075.     if(!IsValidDynamicRaceCP(checkpointid)) return -1;
  1076.     for(r = 0; r < MAX_RACE_CP; r++)
  1077.     {
  1078.         if(InfoRCP[r][rcp] == checkpointid)
  1079.         {
  1080.             InfoRCP[r][type] = type;
  1081.             DestroyDynamicRaceCP(InfoRCP[r][rcp]);
  1082.             InfoRCP[r][rcp] = CreateDynamicRaceCP(InfoRCP[r][type], InfoRCP[r][pos][0], InfoRCP[r][pos][1], InfoRCP[r][pos][2], InfoRCP[r][pos][3], InfoRCP[r][pos][4], InfoRCP[r][pos][5], InfoRCP[r][taille], InfoRCP[r][integer][0], InfoRCP[r][integer][1], InfoRCP[r][integer][2], InfoRCP[r][distance]);
  1083.             if(IsValidDynamicRaceCP(InfoRCP[r][rcp])) return 1;
  1084.             else return 0;
  1085.         }
  1086.     }
  1087. }
  1088.  
  1089. stock GetDynamicRCPPos(checkpointid, &Float:x, &Float:y, &Float:z)
  1090. {
  1091.     if(!IsValidDynamicRaceCP(checkpointid)) return -1;
  1092.     for(r = 0; r < MAX_RACE_CP; r++)
  1093.     {
  1094.         if(InfoRCP[r][rcp] == checkpointid)
  1095.         {
  1096.             x = InfoRCP[r][pos][0];
  1097.             y = InfoRCP[r][pos][1];
  1098.             z = InfoRCP[r][pos][2];
  1099.             break;
  1100.         }
  1101.     }
  1102. }
  1103.  
  1104. stock GetDynamicRCPNextPos(checkpointid, &Float:x, &Float:y, &Float:z)
  1105. {
  1106.     if(!IsValidDynamicRaceCP(checkpointid)) return -1;
  1107.     for(r = 0; r < MAX_RACE_CP; r++)
  1108.     {
  1109.         if(InfoRCP[r][rcp] == checkpointid)
  1110.         {
  1111.             x = InfoRCP[r][pos][3];
  1112.             y = InfoRCP[r][pos][4];
  1113.             z = InfoRCP[r][pos][5];
  1114.             break;
  1115.         }
  1116.     }
  1117. }
  1118.  
  1119. stock SetDynamicRCPPos(checkpointid, Float:x, Float:y, Float:z)
  1120. {
  1121.     if(!IsValidDynamicRaceCP(checkpointid)) return -1;
  1122.     for(r = 0; r < MAX_RACE_CP; r++)
  1123.     {
  1124.         if(InfoRCP[r][rcp] == checkpointid)
  1125.         {
  1126.             InfoRCP[r][pos][0] = x;
  1127.             InfoRCP[r][pos][1] = y;
  1128.             InfoRCP[r][pos][2] = z;
  1129.             DestroyDynamicRaceCP(InfoRCP[r][rcp]);
  1130.             InfoRCP[r][rcp] = CreateDynamicRaceCP(InfoRCP[r][type], InfoRCP[r][pos][0], InfoRCP[r][pos][1], InfoRCP[r][pos][2], InfoRCP[r][pos][3], InfoRCP[r][pos][4], InfoRCP[r][pos][5], InfoRCP[r][taille], InfoRCP[r][integer][0], InfoRCP[r][integer][1], InfoRCP[r][integer][2], InfoRCP[r][distance]);
  1131.             if(IsValidDynamicRaceCP(InfoRCP[r][rcp])) return 1;
  1132.             else return 0;
  1133.         }
  1134.     }
  1135. }
  1136.  
  1137. stock SetDynamicRCPNextPos(checkpointid, Float:x, Float:y, Float:z)
  1138. {
  1139.     if(!IsValidDynamicRaceCP(checkpointid)) return -1;
  1140.     for(r = 0; r < MAX_RACE_CP; r++)
  1141.     {
  1142.         if(InfoRCP[r][rcp] == checkpointid)
  1143.         {
  1144.             InfoRCP[r][pos][3] = x;
  1145.             InfoRCP[r][pos][4] = y;
  1146.             InfoRCP[r][pos][5] = z;
  1147.             DestroyDynamicRaceCP(InfoRCP[r][rcp]);
  1148.             InfoRCP[r][rcp] = CreateDynamicRaceCP(InfoRCP[r][type], InfoRCP[r][pos][0], InfoRCP[r][pos][1], InfoRCP[r][pos][2], InfoRCP[r][pos][3], InfoRCP[r][pos][4], InfoRCP[r][pos][5], InfoRCP[r][taille], InfoRCP[r][integer][0], InfoRCP[r][integer][1], InfoRCP[r][integer][2], InfoRCP[r][distance]);
  1149.             if(IsValidDynamicRaceCP(InfoRCP[r][rcp])) return 1;
  1150.             else return 0;
  1151.         }
  1152.     }
  1153. }
  1154.  
  1155. stock Float:GetDynamicRCPSize(checkpointid)
  1156. {
  1157.     if(!IsValidDynamicRaceCP(checkpointid)) return -1;
  1158.     for(r = 0; r < MAX_RACE_CP; r++)
  1159.     {
  1160.         if(InfoRCP[r][rcp] == checkpointid) return InfoRCP[r][taille];
  1161.     }
  1162. }
  1163.  
  1164. stock SetDynamicRCPSize(checkpointid, Float:size)
  1165. {
  1166.     if(!IsValidDynamicRaceCP(checkpointid)) return -1;
  1167.     for(r = 0; r < MAX_RACE_CP; r++)
  1168.     {
  1169.         if(InfoRCP[r][rcp] == checkpointid)
  1170.         {
  1171.             InfoRCP[r][taille] = size;
  1172.             DestroyDynamicRaceCP(InfoRCP[r][rcp]);
  1173.             InfoRCP[r][rcp] = CreateDynamicRaceCP(InfoRCP[r][type], InfoRCP[r][pos][0], InfoRCP[r][pos][1], InfoRCP[r][pos][2], InfoRCP[r][pos][3], InfoRCP[r][pos][4], InfoRCP[r][pos][5], InfoRCP[r][taille], InfoRCP[r][integer][0], InfoRCP[r][integer][1], InfoRCP[r][integer][2], InfoRCP[r][distance]);
  1174.             if(IsValidDynamicRaceCP(InfoRCP[r][rcp])) return 1;
  1175.             else return 0;
  1176.         }
  1177.     }
  1178. }
  1179.  
  1180. stock GetDynamicRCPStreamParams(checkpointid, &worldid, &interiorid, &playerid)
  1181. {
  1182.     if(!IsValidDynamicRaceCP(checkpointid)) return -1;
  1183.     for(r = 0; r < MAX_RACE_CP; r++)
  1184.     {
  1185.         if(InfoRCP[r][rcp] == checkpointid)
  1186.         {
  1187.             worldid = InfoRCP[r][integer][0];
  1188.             interiorid = InfoRCP[r][integer][1];
  1189.             playerid = InfoRCP[r][integer][2];
  1190.             break;
  1191.         }
  1192.     }
  1193. }
  1194.  
  1195. stock SetDynamicRCPStreamParams(checkpointid, worldid, interiorid, playerid)
  1196. {
  1197.     if(!IsValidDynamicRaceCP(checkpointid)) return -1;
  1198.     for(r = 0; r < MAX_RACE_CP; r++)
  1199.     {
  1200.         if(InfoRCP[r][rcp] == checkpointid)
  1201.         {
  1202.             InfoRCP[r][integer][0] = worldid;
  1203.             InfoRCP[r][integer][1] = interiorid;
  1204.             InfoRCP[r][integer][2] = playerid;
  1205.             DestroyDynamicRaceCP(InfoRCP[r][rcp]);
  1206.             InfoRCP[r][rcp] = CreateDynamicRaceCP(InfoRCP[r][type], InfoRCP[r][pos][0], InfoRCP[r][pos][1], InfoRCP[r][pos][2], InfoRCP[r][pos][3], InfoRCP[r][pos][4], InfoRCP[r][pos][5], InfoRCP[r][taille], InfoRCP[r][integer][0], InfoRCP[r][integer][1], InfoRCP[r][integer][2], InfoRCP[r][distance]);
  1207.             if(IsValidDynamicRaceCP(InfoRCP[r][rcp])) return 1;
  1208.             else return 0;
  1209.         }
  1210.     }
  1211. }
  1212.  
  1213. stock Float:GetDynamicRCPStreamDistance(checkpointid)
  1214. {
  1215.     if(!IsValidDynamicRaceCP(checkpointid)) return -1;
  1216.     for(r = 0; r < MAX_RACE_CP; r++)
  1217.     {
  1218.         if(InfoRCP[r][rcp] == checkpointid) return InfoRCP[r][distance];
  1219.     }
  1220. }
  1221.  
  1222. stock SetDynamicRCPStreamDistance(checkpointid, Float:streamdistance)
  1223. {
  1224.     if(!IsValidDynamicRaceCP(checkpointid)) return -1;
  1225.     for(r = 0; r < MAX_RACE_CP; r++)
  1226.     {
  1227.         if(InfoRCP[r][rcp] == checkpointid)
  1228.         {
  1229.             InfoRCP[r][distance] = streamdistance;
  1230.             DestroyDynamicRaceCP(InfoRCP[r][rcp]);
  1231.             InfoRCP[r][rcp] = CreateDynamicRaceCP(InfoRCP[r][type], InfoRCP[r][pos][0], InfoRCP[r][pos][1], InfoRCP[r][pos][2], InfoRCP[r][pos][3], InfoRCP[r][pos][4], InfoRCP[r][pos][5], InfoRCP[r][taille], InfoRCP[r][integer][0], InfoRCP[r][integer][1], InfoRCP[r][integer][2], InfoRCP[r][distance]);
  1232.             if(IsValidDynamicRaceCP(InfoRCP[r][rcp])) return 1;
  1233.             else return 0;
  1234.         }
  1235.     }
  1236. }
Add Comment
Please, Sign In to add comment