Guest User

Untitled

a guest
Aug 12th, 2010
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 29.38 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. /*Natives:
  4.  
  5. Starting of the whole streamer,MUST have under OnGameModeInit/OnFilterScriptInit :
  6.  
  7. native STO_Start();
  8.  
  9. Ending,MUST have under OnGameModeExit/OnFilterScriptExit:
  10.  
  11. native STO_End();
  12.  
  13. Checkpoints:
  14.  
  15. native CreateCheckpointToStream(Float:x,Float:y,Float:z,Float:size,Float:viewdistance);
  16. native DestroyStreamedCheckpoint(checkpointid);
  17. native IsValidStreamedCheckpoint(checkpointid);
  18. native IsPlayerInCheckpoint(playerid,checkpointid);
  19. native SetStreamedCheckpointPos(checkpointid, Float:x,Float:y,Float:z);
  20. native GetClosestCheckpoint(playerid);
  21.  
  22. Race Checkpoints:
  23.  
  24. native CreateRaceCheckpointToStream(type,Float:x,Float:y,Float:z,Float:NextX,Float:NextY,Float:NextZ,Float:size,Float:viewdistance);
  25. native DestroyStreamedRaceCheckpoint(checkpointid);
  26. native IsValidStreamedRaceCheckpoint(checkpointid);
  27. native SetStreamedRaceCheckpointPos(checkpointid, Float:x,Float:y,Float:z);
  28. native GetClosestRaceCheckpoint(playerid);
  29.  
  30. Map Icons:
  31.  
  32. native CreateMapIconToStream(Float:x,Float:y,Float:z,markertype,color,Float:distance);
  33. native RemoveStreamedMapIcon(iconid);
  34. native IsPlayerInStreamedMapIcon(playerid,iconid);
  35. native SetStreamedMapIconColor(iconid,color);
  36. native SetStreamedMapIconPos(iconid,Float:x,Float:y,Float:z);
  37.  
  38. Objects:
  39.  
  40. native CreateObjectToStream(modelid,Float:x,Float:y,Float:z,Float:xrot,Float:yrot:Float:zrot,Float:viewdistance);
  41. native DestroyStreamedObject(objectid);
  42. native GetStreamedObjectPos(objectid, &Float:x, &Float:y, &Float:z);
  43. native GetStreamedObjectRot(objectid, &Float:rotx, &Float:roty, &Float:rotz);
  44. native SetStreamedObjectPos(objectid, Float:x, Float:y, Float:z);
  45. native SetStreamedObjectRot(objectid, Float:rotx,Float:roty,Float:rotz);
  46. native AttachStreamedObjectToPlayer(playerid,objectid,Float:offsetX,Float:offsetY,Float:offsetZ,Float:rotx,Float:roty,Float:rotz);
  47. native MoveStreamedObject(objectid,Float:x,Float:y,Float:z,Float:speed);
  48.  
  49. Auto object:
  50. native CreateAutoObjectToStream(modelid,Float:closedx,Float:closedy,Float:closedz,Float:closedrotX,Float:closedrotY,Float:closedrotZ,Float:openedx,Float:openedy,Float:openedz,Float:distance,Float:speed);
  51.  
  52. */
  53.  
  54. #define MAX_STREAMED_CHECKPOINTS 550
  55. #define MAX_STREAMED_RACE_CHECKPOINTS 500
  56. #define MAX_STREAMED_MAP_ICONS 600
  57. #define MAX_STREAMED_MAP_ICONS_UNSTREAMED 100
  58. #define MAX_STREAMED_OBJECTS 3100
  59. #define MAX_AUTO_OBJECTS 500
  60.  
  61. enum cInfo2 //Checkpoint info
  62. {
  63.     Float:C_X,
  64.     Float:C_Y,
  65.     Float:C_Z,
  66.     Float:C_SIZE,
  67.     Float:C_VIEWDISTANCE,
  68.     bool:Exist
  69. }
  70.  
  71. new cInfo[MAX_STREAMED_CHECKPOINTS][cInfo2]; //Variable of the checkpoint info enumeration,same with rInfo.
  72. new cp = -1; // Checkpoint count,I want the checkpoint ID's to start from 0,that's why we have placed here '-1',same with rcp.
  73. new cpshowen[MAX_PLAYERS]; //Checkpoint that shown for a certain player,same with rcpshowen.
  74.  
  75. enum rInfo2 // Race checkpoint info
  76. {
  77.     type,
  78.     Float:RC_X,
  79.     Float:RC_Y,
  80.     Float:RC_Z,
  81.     Float:RC_X2,
  82.     Float:RC_Y2,
  83.     Float:RC_Z2,
  84.     Float:RC_SIZE,
  85.     Float:RC_VIEWD,
  86.     bool:rExist
  87. }
  88.  
  89. new rInfo[MAX_STREAMED_RACE_CHECKPOINTS][rInfo2];
  90. new rcp = -1;
  91. new rcpshowen[MAX_PLAYERS];
  92.  
  93. enum mInfo2 //Map icons info
  94. {
  95.     Float:M_X,
  96.     Float:M_Y,
  97.     Float:M_Z,
  98.     mtype,
  99.     mcolor,
  100.     Float:view,
  101.     bool:mExist
  102. }
  103. new mInfo[MAX_STREAMED_MAP_ICONS][mInfo2];
  104. new mcp = -1;
  105. new sfp[MAX_PLAYERS][MAX_STREAMED_MAP_ICONS];
  106. new msu[MAX_PLAYERS][MAX_STREAMED_MAP_ICONS_UNSTREAMED];
  107. new pmk[MAX_PLAYERS][MAX_STREAMED_MAP_ICONS];
  108.  
  109. enum oInfo2
  110. {
  111.     bool:IsMoving,
  112.     objectID,
  113.     modelID,
  114.     Float:O_X,
  115.     Float:O_Y,
  116.     Float:O_Z,
  117.     Float:O_XR,
  118.     Float:O_YR,
  119.     Float:O_ZR,
  120.     Float:O_VD,
  121.     O_A,
  122.     Float:O_Ox,
  123.     Float:O_Oy,
  124.     Float:O_Oz,
  125.     Float:O_Mx,
  126.     Float:O_My,
  127.     Float:O_Mz,
  128.     Float:O_MSp,
  129.     O_T
  130. }
  131.  
  132. new oInfo[MAX_STREAMED_OBJECTS][oInfo2];
  133. new O_Exist;
  134.  
  135. enum pInfo2
  136. {
  137.     bool:O_S[MAX_STREAMED_OBJECTS],
  138.     P_O[MAX_STREAMED_OBJECTS],
  139.     P_S
  140. }
  141.  
  142. new pInfo[MAX_PLAYERS][pInfo2];
  143.  
  144. enum aInfo2
  145. {
  146.     bool:aExist,
  147.     model,
  148.     Float:closedx,
  149.     Float:closedy,
  150.     Float:closedz,
  151.     Float:closedrotx,
  152.     Float:closedroty,
  153.     Float:closedrotz,
  154.     Float:openedx,
  155.     Float:openedy,
  156.     Float:openedz,
  157.     Float:distance3,
  158.     Float:ospeed,
  159.     gID
  160. }
  161.  
  162. new aInfo[MAX_AUTO_OBJECTS][aInfo2];
  163. new gCount = -1;
  164. new gTimer = -1;
  165. new bool:isAr[MAX_AUTO_OBJECTS];
  166.  
  167. forward STO_AddAutoMO(modelid,Float:closedX,Float:closedY,Float:closedZ,Float:closedrotX,Float:closedrotY,Float:closedrotZ,Float:openedX,Float:openedY,Float:openedZ,Float:distance,Float:speed);
  168. public STO_AddAutoMO(modelid,Float:closedX,Float:closedY,Float:closedZ,Float:closedrotX,Float:closedrotY,Float:closedrotZ,Float:openedX,Float:openedY,Float:openedZ,Float:distance,Float:speed)
  169. {
  170.     gCount++;
  171.     new g = gCount;
  172.     aInfo[g][aExist] = true;
  173.     aInfo[g][model] = modelid;
  174.     aInfo[g][closedx] = closedX;
  175.     aInfo[g][closedy] = closedY;
  176.     aInfo[g][closedz] = closedZ;
  177.     aInfo[g][closedrotx] = closedrotX;
  178.     aInfo[g][closedroty] = closedrotY;
  179.     aInfo[g][closedrotz] = closedrotZ;
  180.     aInfo[g][openedx] = openedX;
  181.     aInfo[g][openedy] = openedY;
  182.     aInfo[g][openedz] = openedZ;
  183.     aInfo[g][distance3] = distance;
  184.     aInfo[g][ospeed] = speed;
  185.     aInfo[g][gID] = CreateObjectToStream(modelid,closedX,closedY,closedZ,closedrotX,closedrotY,closedrotZ,500.0);
  186.     if(gTimer == -1) gTimer = SetTimer("CheckPos5",300,true);
  187.     return 1;
  188. }
  189.  
  190. stock CreateAutoObjectToStream(modelid,Float:closedX,Float:closedY,Float:closedZ,Float:closedrotX,Float:closedrotY,Float:closedrotZ,Float:openedX,Float:openedY,Float:openedZ,Float:distance,Float:speed)
  191. {
  192.     return CallLocalFunction("STO_AddAutoMO","dfffffffffff",modelid,closedX,closedY,closedZ,closedrotX,closedrotY,closedrotZ,openedX,openedY,openedZ,distance,speed);
  193. }
  194. forward STO_SetCheckpoint(Float:x,Float:y,Float:z,Float:size,Float:viewdistance);
  195. public STO_SetCheckpoint(Float:x,Float:y,Float:z,Float:size,Float:viewdistance) //CreateCheckpointToStream
  196. {
  197.     cp++;
  198.     cInfo[cp][C_X] = x;
  199.     cInfo[cp][C_Y] = y;
  200.     cInfo[cp][C_Z] = z;
  201.     cInfo[cp][C_SIZE] = size;
  202.     cInfo[cp][C_VIEWDISTANCE] = viewdistance;
  203.     cInfo[cp][Exist] = true;
  204.     return cp;
  205. }
  206.  
  207. forward STO_SetRaceCheckpoint(type2,Float:x,Float:y,Float:z,Float:nextx,Float:nexty,Float:nextz,Float:size,Float:viewdistance);
  208. public STO_SetRaceCheckpoint(type2,Float:x,Float:y,Float:z,Float:nextx,Float:nexty,Float:nextz,Float:size,Float:viewdistance) //CreateRaceCheckpointToStream
  209. {
  210.     rcp++;
  211.     rInfo[rcp][type] = type2;
  212.     rInfo[rcp][RC_X] = x;
  213.     rInfo[rcp][RC_Y] = y;
  214.     rInfo[rcp][RC_Z] = z;
  215.     rInfo[rcp][RC_X2] = nextx;
  216.     rInfo[rcp][RC_Y2] = nexty;
  217.     rInfo[rcp][RC_Z2] = nextz;
  218.     rInfo[rcp][RC_SIZE] = size;
  219.     rInfo[rcp][RC_VIEWD] = viewdistance;
  220.     rInfo[rcp][rExist] = true;
  221.     return rcp;
  222. }
  223. forward STO_DestroyCheckpoint(checkpointid);
  224. public STO_DestroyCheckpoint(checkpointid)//DestroyStreamedCheckpoint
  225. {
  226.     cp--;
  227.     cInfo[checkpointid][C_X] = 0.0;
  228.     cInfo[checkpointid][C_Y] = 0.0;
  229.     cInfo[checkpointid][C_Z] = 0.0;
  230.     cInfo[checkpointid][C_SIZE] = 0;
  231.     cInfo[checkpointid][C_VIEWDISTANCE] = 0;
  232.     cInfo[checkpointid][Exist] = false;
  233.     return checkpointid;
  234. }
  235. forward STO_DestroyRaceCheckpoint(checkpointid);
  236. public STO_DestroyRaceCheckpoint(checkpointid) //DestroyStreamedRaceCheckpoint
  237. {
  238.     rcp--;
  239.     rInfo[checkpointid][type] = -1;
  240.     rInfo[checkpointid][RC_X] = 0.0;
  241.     rInfo[checkpointid][RC_Y] = 0.0;
  242.     rInfo[checkpointid][RC_Z] = 0.0;
  243.     rInfo[checkpointid][RC_X2] = 0.0;
  244.     rInfo[checkpointid][RC_Y2] = 0.0;
  245.     rInfo[checkpointid][RC_Z2] = 0.0;
  246.     rInfo[checkpointid][RC_SIZE] = 0;
  247.     rInfo[checkpointid][RC_VIEWD] = 0;
  248.     rInfo[checkpointid][rExist] = false;
  249.     return checkpointid;
  250. }
  251. stock STO_Start()
  252. {
  253.     SetTimer("CheckPos",300,true);
  254.     SetTimer("CheckPos2",300,true);
  255.     SetTimer("CheckPos3",300,true);
  256.     SetTimer("CheckPos4",300,true);
  257.     return 1;
  258. }
  259. stock STO_End()
  260. {
  261.     for(new i = 0; i < MAX_PLAYERS; i++)
  262.     {
  263.         for(new j = 0; j <= O_Exist; j++)
  264.         {
  265.             if(pInfo[i][O_S][j] == true)
  266.             {
  267.                 DestroyPlayerObject(i,pInfo[i][P_O][j]);
  268.             }
  269.         }
  270.         DisablePlayerCheckpoint(i);
  271.         DisablePlayerRaceCheckpoint(i);
  272.         for(new m = 0; m < MAX_STREAMED_MAP_ICONS; m++)
  273.         {
  274.             if(mInfo[m][mExist] == true)
  275.             {
  276.                 RemovePlayerMapIcon(i,m);
  277.                 mInfo[m][mExist] = false;
  278.             }
  279.         }
  280.     }
  281.     return 1;
  282. }
  283. forward CheckPos();
  284. public CheckPos()
  285. {
  286.     for(new i = 0; i < MAX_PLAYERS; i++)
  287.     {
  288.         if(IsPlayerConnected(i))
  289.         {
  290.             for(new j = 0; j < MAX_STREAMED_CHECKPOINTS; j++)
  291.             {
  292.                 if(IsPlayerInRangeOfPoint(i,cInfo[j][C_VIEWDISTANCE],cInfo[j][C_X],cInfo[j][C_Y],cInfo[j][C_Z]))
  293.                 {
  294.                     if(cInfo[j][Exist] == true && cpshowen[i] != j)
  295.                     {
  296.                         SetPlayerCheckpoint(i,cInfo[j][C_X],cInfo[j][C_Y],cInfo[j][C_Z],cInfo[j][C_SIZE]);
  297.                         cpshowen[i] = j;
  298.                     }
  299.                 }
  300.                 else
  301.                 {
  302.                     if(cpshowen[i] == j)
  303.                     {
  304.                         DisablePlayerCheckpoint(i);
  305.                         cpshowen[i] = -1;
  306.                     }
  307.                 }
  308.             }
  309.         }
  310.     }
  311.     return 1;
  312. }
  313.  
  314. forward CheckPos2();
  315. public CheckPos2()
  316. {
  317.     for(new i = 0; i < MAX_PLAYERS; i++)
  318.     {
  319.         if(IsPlayerConnected(i))
  320.         {
  321.             for(new j = 0; j < MAX_STREAMED_RACE_CHECKPOINTS; j++)
  322.             {
  323.                 if(IsPlayerInRangeOfPoint(i,rInfo[j][RC_VIEWD],rInfo[j][RC_X],rInfo[j][RC_Y],rInfo[j][RC_Z]))
  324.                 {
  325.                     if(rInfo[j][rExist] == true && rcpshowen[i] != j)
  326.                     {
  327.                         SetPlayerRaceCheckpoint(i,rInfo[j][type],rInfo[j][RC_X],rInfo[j][RC_Y],rInfo[j][RC_Z],rInfo[j][RC_X2],rInfo[j][RC_Y2],rInfo[j][RC_Z2],rInfo[j][RC_SIZE]);
  328.                         rcpshowen[i] = j;
  329.                     }
  330.                 }
  331.                 else
  332.                 {
  333.                     if(rcpshowen[i] == j)
  334.                     {
  335.                         DisablePlayerRaceCheckpoint(i);
  336.                         rcpshowen[i] = -1;
  337.                     }
  338.                 }
  339.             }
  340.         }
  341.     }
  342.     return 1;
  343. }
  344.  
  345. forward STO_IsValidStreamedCheckpoint(checkpointid);
  346. public STO_IsValidStreamedCheckpoint(checkpointid) //IsValidStreamedCheckpoint
  347. {
  348.     new bool:result;
  349.     if(cInfo[checkpointid][C_X] != 0.0 && cInfo[checkpointid][C_Y] != 0.0 && cInfo[checkpointid][C_Z] != 0.0 && cInfo[checkpointid][C_SIZE] > 0 && cInfo[checkpointid][C_VIEWDISTANCE] > 0)
  350.     {
  351.         result = true;
  352.     }
  353.     else if(cInfo[checkpointid][Exist] == true)
  354.     {
  355.         result = true;
  356.     }
  357.     else
  358.     {
  359.         result = false;
  360.     }
  361.     return result;
  362. }
  363.  
  364. forward STO_IsValidStreamedRCheckpoint(checkpointid);
  365. public STO_IsValidStreamedRCheckpoint(checkpointid) //IsValidStreamedRaceCheckpoint
  366. {
  367.     new bool:result;
  368.     if(rInfo[checkpointid][RC_X] != 0.0 && rInfo[checkpointid][RC_Y] != 0.0 && rInfo[checkpointid][RC_Z] != 0.0 && rInfo[checkpointid][RC_SIZE] > 0 && rInfo[checkpointid][RC_VIEWD] > 0)
  369.     {
  370.         result = true;
  371.     }
  372.     else if(rInfo[checkpointid][rExist] == true)
  373.     {
  374.         result = true;
  375.     }
  376.     else if(rInfo[checkpointid][type] >= 0 && rInfo[checkpointid][type] <= 4)
  377.     {
  378.         result = true;
  379.     }
  380.     else
  381.     {
  382.         result = false;
  383.     }
  384.     return result;
  385. }
  386.  
  387. forward STO_SetStreamedCheckpointPos(checkpointid,Float:x,Float:y,Float:z);
  388. public STO_SetStreamedCheckpointPos(checkpointid,Float:x,Float:y,Float:z) //SetStreamedCheckpointPos
  389. {
  390.     cInfo[checkpointid][C_X] = x;
  391.     cInfo[checkpointid][C_Y] = y;
  392.     cInfo[checkpointid][C_Z] = z;
  393. }
  394.  
  395. forward STO_SetStreamedRCheckpointPos(checkpointid,Float:x,Float:y,Float:z);
  396. public STO_SetStreamedRCheckpointPos(checkpointid,Float:x,Float:y,Float:z) //SetStreamedRaceCheckpointPos
  397. {
  398.     rInfo[checkpointid][RC_X] = x;
  399.     rInfo[checkpointid][RC_Y] = y;
  400.     rInfo[checkpointid][RC_Z] = z;
  401. }
  402.  
  403. forward STO_IsPlayerInStreamedCpoint(playerid,checkpointid);
  404. public STO_IsPlayerInStreamedCpoint(playerid,checkpointid) // IsPlayerInStreamedCheckpoint
  405. {
  406.     new bool:result[MAX_PLAYERS];
  407.     if(IsPlayerInRangeOfPoint(playerid,cInfo[checkpointid][C_SIZE],cInfo[checkpointid][C_X],cInfo[checkpointid][C_Y],cInfo[checkpointid][C_Z]) && STO_IsValidStreamedCheckpoint(checkpointid))
  408.     {
  409.         result[playerid] = true;
  410.     }
  411.     else
  412.     {
  413.         result[playerid] = false;
  414.     }
  415.     return result[playerid];
  416. }
  417.  
  418. forward CheckpointToPlayerPoint(playerid,checkpointid);
  419. public CheckpointToPlayerPoint(playerid,checkpointid)
  420. {
  421.     new Float:distance,Float:px,Float:py,Float:pz;
  422.     GetPlayerPos(playerid,px,py,pz);
  423.     distance = floatsqroot(floatpower(floatabs(floatsub(cInfo[checkpointid][C_X],px)),2) + floatpower(floatabs(floatsub(cInfo[checkpointid][C_Y],py)),2) + floatpower(floatabs(floatsub(cInfo[checkpointid][C_Z],pz)),2));
  424.     return floatround(distance);
  425. }
  426.  
  427. forward RaceCheckpointToPlayerPoint(playerid,checkpointid);
  428. public RaceCheckpointToPlayerPoint(playerid,checkpointid)
  429. {
  430.     new Float:distance,Float:px,Float:py,Float:pz;
  431.     GetPlayerPos(playerid,px,py,pz);
  432.     distance = floatsqroot(floatpower(floatabs(floatsub(rInfo[checkpointid][RC_X],px)),2) + floatpower(floatabs(floatsub(rInfo[checkpointid][RC_Y],py)),2) + floatpower(floatabs(floatsub(rInfo[checkpointid][RC_Z],pz)),2));
  433.     return floatround(distance);
  434. }
  435.  
  436. forward STO_GetClosestCheckpoint(playerid); // GetClosestCheckpoint
  437. public STO_GetClosestCheckpoint(playerid)
  438. {
  439.     new Float:distance = 99999.000+1,Float:distance2,closest = -1;
  440.     for(new i = 0; i < cp; i++)
  441.     {
  442.         distance2 = CheckpointToPlayerPoint(playerid, i);
  443.         if(distance2 < distance)
  444.         {
  445.             distance = distance2;
  446.             closest = i;
  447.         }
  448.     }
  449.     return closest;
  450. }
  451.  
  452. forward STO_GetClosestRaceCheckpoint(playerid);
  453. public STO_GetClosestRaceCheckpoint(playerid)
  454. {
  455.     new Float:distance = 99999.000+1,Float:distance2,closest = -1;
  456.     for(new i = 0; i < rcp; i++)
  457.     {
  458.         distance2 = RaceCheckpointToPlayerPoint(playerid, i);
  459.         if(distance2 < distance)
  460.         {
  461.             distance = distance2;
  462.             closest = i;
  463.         }
  464.     }
  465.     return closest;
  466. }
  467.  
  468.  
  469. public OnPlayerEnterCheckpoint(playerid)
  470. {
  471.     if(cpshowen[playerid] != -1) return OnPlayerEnterStreamCheckpoint(playerid,cpshowen[playerid]);
  472.     return 1;
  473. }
  474.  
  475. public OnPlayerLeaveCheckpoint(playerid)
  476. {
  477.     if(cpshowen[playerid] != -1) return OnPlayerLeaveStreamCheckpoint(playerid,cpshowen[playerid]);
  478.     return 1;
  479. }
  480.  
  481. public OnPlayerEnterRaceCheckpoint(playerid)
  482. {
  483.     if(rcpshowen[playerid] != -1) return OnPlayerEnterStreamRCheckpoint(playerid,rcpshowen[playerid]);
  484.     return 1;
  485. }
  486.  
  487. public OnPlayerLeaveRaceCheckpoint(playerid)
  488. {
  489.     if(rcpshowen[playerid] != -1) return OnPlayerLeaveStreamRCheckpoint(playerid,rcpshowen[playerid]);
  490.     return 1;
  491. }
  492.  
  493.  
  494. stock CreateCheckpointToStream(Float:x,Float:y,Float:z,Float:size,Float:viewdistance)
  495. {
  496.     return CallLocalFunction("STO_SetCheckpoint","fffff",x,y,z,size,viewdistance);
  497. }
  498.  
  499. stock DestroyStreamedCheckpoint(checkpointid)
  500. {
  501.     return CallLocalFunction("STO_DestroyCheckpoint","d",checkpointid);
  502. }
  503.  
  504. stock CreateRaceCheckpointToStream(ctype,Float:x,Float:y,Float:z,Float:nextx,Float:nexty,Float:nextz,Float:size,Float:viewdistance)
  505. {
  506.     return CallLocalFunction("STO_SetRaceCheckpoint","dffffffff",ctype,x,y,z,nextx,nexty,nextz,size,viewdistance);
  507. }
  508.  
  509. stock DestroyStreamedRaceCheckpoint(checkpointid)
  510. {
  511.     return CallLocalFunction("STO_DestroyRaceCheckpoint","d",checkpointid);
  512. }
  513.  
  514. stock IsValidStreamedCheckpoint(checkpointid)
  515. {
  516.     return CallLocalFunction("STO_IsValidStreamedCheckpoint","d",checkpointid);
  517. }
  518.  
  519. stock IsValidStreamedRaceCheckpoint(checkpointid)
  520. {
  521.     return CallLocalFunction("STO_IsValidStreamedRCheckpoint","d",checkpointid);
  522. }
  523.  
  524. stock SetStreamedCheckpointPos(checkpointid,Float:x,Float:y,Float:z)
  525. {
  526.     return CallLocalFunction("STO_SetStreamedCheckpointPos","dfff",checkpointid,x,y,z);
  527. }
  528.  
  529. stock SetStreamedRaceCheckpointPos(checkpointid,Float:x,Float:y,Float:z)
  530. {
  531.     return CallLocalFunction("STO_SetStreamedRCheckpointPos","dfff",checkpointid,x,y,z);
  532. }
  533.  
  534. stock IsPlayerInStreamedCheckpoint(playerid,checkpointid)
  535. {
  536.     return CallLocalFunction("STO_IsPlayerInStreamedCpoint","id",playerid,checkpointid);
  537. }
  538.  
  539. stock GetClosestCheckpoint(playerid)
  540. {
  541.     return CallLocalFunction("STO_GetClosestCheckpoint","i",playerid);
  542. }
  543.  
  544. stock GetClosestRaceCheckpoint(playerid)
  545. {
  546.     return CallLocalFunction("STO_GetClosestRaceCheckpoint","i",playerid);
  547. }
  548.  
  549. forward OnPlayerEnterStreamCheckpoint(playerid,checkpointid);
  550. forward OnPlayerLeaveStreamCheckpoint(playerid,checkpointid);
  551. forward OnPlayerEnterStreamRCheckpoint(playerid,checkpointid);
  552. forward OnPlayerLeaveStreamRCheckpoint(playerid,checkpointid);
  553.  
  554.  
  555. forward STO_AddMapIcon(Float:x,Float:y,Float:z,markertype,color,Float:distance);
  556. public STO_AddMapIcon(Float:x,Float:y,Float:z,markertype,color,Float:distance)
  557. {
  558.     mcp++;
  559.     mInfo[mcp][mtype] = markertype;
  560.     mInfo[mcp][M_X] = x;
  561.     mInfo[mcp][M_Y] = y;
  562.     mInfo[mcp][M_Z] = z;
  563.     mInfo[mcp][mcolor] = color;
  564.     mInfo[mcp][view] = distance;
  565.     mInfo[mcp][mExist] = true;
  566. }
  567. forward STO_RemMapIcon(iconid);
  568. public STO_RemMapIcon(iconid)
  569. {
  570.     mInfo[iconid][mExist] = false;
  571.     for(new i = 0; i < MAX_PLAYERS; i++)
  572.     {
  573.         if(pmk[i][iconid] == 1)
  574.         {
  575.             pmk[i][iconid] = 0;
  576.             RemovePlayerMapIcon(i,sfp[i][iconid]);
  577.             msu[i][sfp[i][iconid]] = 0;
  578.          }
  579.     }
  580. }
  581. Float:GetDistanceEx(Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2)
  582. {
  583.     return Float:floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2) + floatpower(floatabs(floatsub(y2,y1)),2) + floatpower(floatabs(floatsub(z2,z1)),2));
  584. }
  585. forward STO_IsInMapIcon(playerid,iconid);
  586. public STO_IsInMapIcon(playerid,iconid)
  587. {
  588.     new Float:px,Float:py,Float:pz,res;
  589.     GetPlayerPos(playerid,px,py,pz);
  590.     if(px == mInfo[iconid][M_X] && py == mInfo[iconid][M_Y] && pz == mInfo[iconid][M_Z] && mInfo[iconid][mExist] == true)
  591.     {
  592.         res = 1;
  593.     }
  594.     else
  595.     {
  596.         res = 0;
  597.     }
  598.     return res;
  599. }
  600.  
  601. forward STO_SetColOfMapIcon(iconid,color);
  602. public STO_SetColOfMapIcon(iconid,color)
  603. {
  604.     return mInfo[iconid][mcolor] = color;
  605. }
  606.  
  607. forward STO_SetPosOfMi(iconid,Float:x,Float:y,Float:z);
  608. public STO_SetPosOfMi(iconid,Float:x,Float:y,Float:z)
  609. {
  610.     mInfo[iconid][M_X] = x;
  611.     mInfo[iconid][M_Y] = y;
  612.     mInfo[iconid][M_Z] = z;
  613.     return 1;
  614. }
  615. stock CreateMapIconToStream(Float:x,Float:y,Float:z,markertype,color,Float:distance)
  616. {
  617.     return CallLocalFunction("STO_AddMapIcon","fffddf",x,y,z,markertype,color,distance);
  618. }
  619. stock RemoveStreamedMapIcon(iconid)
  620. {
  621.     return CallLocalFunction("STO_RemMapIcon","d",iconid);
  622. }
  623. stock IsPlayerInStreamedMapIcon(playerid,iconid)
  624. {
  625.     return CallLocalFunction("STO_IsInMapIcon","id",playerid,iconid);
  626. }
  627.  
  628. stock SetStreamedMapIconColor(iconid,color)
  629. {
  630.     return CallLocalFunction("STO_SetColOfMapIcon","dx",iconid,color);
  631. }
  632.  
  633. stock SetStreamedMapIconPos(iconid,Float:x,Float:y,Float:z)
  634. {
  635.     return CallLocalFunction("STO_SetPosOfMi","dfff",iconid,x,y,z);
  636. }
  637. forward CheckPos3();
  638. public CheckPos3()
  639. {
  640.     for(new i = 0; i < MAX_PLAYERS; i++)
  641.     {
  642.         if(IsPlayerConnected(i))
  643.         {
  644.             for(new j = 0; j < MAX_STREAMED_MAP_ICONS+1; j++)
  645.             {
  646.                 if(mInfo[j][mExist] == true)
  647.                 {
  648.                     if(IsPlayerInRangeOfPoint(i,mInfo[j][view],mInfo[j][M_X],mInfo[j][M_Y],mInfo[j][M_Z]))
  649.                     {
  650.                         for(new z = 0; z < MAX_STREAMED_MAP_ICONS_UNSTREAMED; z++)
  651.                         {
  652.                             if(msu[i][z] == 0)
  653.                             {
  654.                                 msu[i][z]++;
  655.                                 sfp[i][j] = z;
  656.                                 break;
  657.                             }
  658.                         }
  659.                         SetPlayerMapIcon(i,sfp[i][j],mInfo[j][M_X],mInfo[j][M_Y],mInfo[j][M_Z],mInfo[j][mtype],mInfo[j][mcolor]);
  660.                         pmk[i][j] = 1;
  661.                         continue;
  662.                     }
  663.                 }
  664.                 if(!IsPlayerInRangeOfPoint(i,mInfo[j][view],mInfo[j][M_X],mInfo[j][M_Y],mInfo[j][M_Z]))
  665.                 {
  666.                     msu[i][sfp[i][j]] = 0;
  667.                     pmk[i][j] = 0;
  668.                     RemovePlayerMapIcon(i,sfp[i][j]);
  669.                     continue;
  670.                 }
  671.             }
  672.         }
  673.     }
  674.     return 1;
  675. }
  676.  
  677.  
  678. stock CreateObjectToStream(modelid,Float:x,Float:y,Float:z,Float:xrot,Float:yrot,Float:zrot,Float:viewdis)
  679. {
  680.     return CallLocalFunction("STO_CreateObjectToStream","dfffffff",modelid,x,y,z,xrot,yrot,zrot,viewdis);
  681. }
  682. stock DestroyStreamedObject(objectid)
  683. {
  684.     return CallLocalFunction("STO_DestroyStreamedObject","d",objectid);
  685. }
  686. stock GetStreamedObjectPos(objectid, &Float:x, &Float:y, &Float:z)
  687. {
  688.     return CallLocalFunction("STO_GetObjPos","dfff",objectid,x,y,z);
  689. }
  690. stock GetStreamedObjectRot(objectid, &Float:rotx, &Float:roty, &Float:rotz)
  691. {
  692.     return CallLocalFunction("STO_GetObjRot","dfff",objectid,rotx,roty,rotz);
  693. }
  694. stock SetStreamedObjectPos(objectid, Float:x,Float:y,Float:z)
  695. {
  696.     return CallLocalFunction("STO_SetObjPos","dfff",objectid,x,y,z);
  697. }
  698. stock SetStreamedObjectRot(objectid, Float:rotx,Float:roty,Float:rotz)
  699. {
  700.     return CallLocalFunction("STO_SetObjRot","dfff",objectid,rotx,roty,rotz);
  701. }
  702. stock AttachStreamedObjectToPlayer(playerid,objectid,Float:offsetX,Float:offsetY,Float:offsetZ,Float:rotx,Float:roty,Float:rotz)
  703. {
  704.     return CallLocalFunction("O_AttachStreamedObjectToPlayer","idffffff",playerid,objectid,offsetX,offsetY,offsetZ,rotx,roty,rotz);
  705. }
  706. stock MoveStreamedObject(objectid,Float:x,Float:y,Float:z,Float:speed)
  707. {
  708.     return CallLocalFunction("STO_ObjectMove","dffff",objectid,x,y,z,speed);
  709. }
  710. forward STO_CreateObjectToStream(modelid,Float:x,Float:y,Float:z,Float:xrot,Float:yrot,Float:zrot,Float:viewdis);
  711. public STO_CreateObjectToStream(modelid,Float:x,Float:y,Float:z,Float:xrot,Float:yrot,Float:zrot,Float:viewdis)
  712. {
  713.     new j;
  714.     for( j = 0; j < MAX_STREAMED_OBJECTS; j++)
  715.     {
  716.         if(oInfo[j][modelID] == 0)
  717.         {
  718.             oInfo[j][modelID] = modelid;
  719.             oInfo[j][O_X] = x;
  720.             oInfo[j][O_Y] = y;
  721.             oInfo[j][O_Z] = z;
  722.             oInfo[j][O_XR] = xrot;
  723.             oInfo[j][O_YR] = yrot;
  724.             oInfo[j][O_ZR] = zrot;
  725.             oInfo[j][O_VD] = viewdis;
  726.             oInfo[j][O_A] = -1;
  727.             oInfo[j][objectID] = j;
  728.             oInfo[j][IsMoving] = false;
  729.             if(O_Exist < j)
  730.             {
  731.                 O_Exist = j;
  732.             }
  733.             else break;
  734.         }
  735.     }
  736.     return j;
  737. }
  738.  
  739. forward STO_DestroyStreamedObject(objectid);
  740. public STO_DestroyStreamedObject(objectid)
  741. {
  742.     oInfo[objectid][modelID] = -1;
  743.     if(oInfo[objectid][IsMoving] == true)
  744.     {
  745.         KillTimer(oInfo[objectid][O_T]);
  746.         oInfo[objectid][IsMoving] = false;
  747.     }
  748.     for(new i = 0; i < MAX_PLAYERS; i++)
  749.     {
  750.         if(IsPlayerConnected(i) && pInfo[i][O_S][objectid] == true)
  751.         {
  752.             pInfo[i][O_S][objectid] = false;
  753.             pInfo[i][P_S] -= 1;
  754.             DestroyPlayerObject(i,pInfo[i][P_O][objectid]);
  755.         }
  756.     }
  757. }
  758.  
  759. forward STO_GetObjPos(objectid, &Float:x, &Float:y, &Float:z);
  760. public STO_GetObjPos(objectid, &Float:x, &Float:y, &Float:z)
  761. {
  762.     x = oInfo[objectid][O_X];
  763.     y = oInfo[objectid][O_Y];
  764.     z = oInfo[objectid][O_Z];
  765.     return 1;
  766. }
  767.  
  768. forward STO_GetObjRot(objectid, &Float:rx, &Float:ry, &Float:rz);
  769. public STO_GetObjRot(objectid, &Float:rx, &Float:ry, &Float:rz)
  770. {
  771.     rx = oInfo[objectid][O_XR];
  772.     ry = oInfo[objectid][O_YR];
  773.     rz = oInfo[objectid][O_ZR];
  774.     return 1;
  775. }
  776.  
  777. forward STO_SetObjPos(objectid, Float:x,Float:y,Float:z);
  778. public STO_SetObjPos(objectid, Float:x,Float:y,Float:z)
  779. {
  780.     oInfo[objectid][O_X] = x;
  781.     oInfo[objectid][O_Y] = y;
  782.     oInfo[objectid][O_Z] = z;
  783.     for(new i = 0; i < MAX_PLAYERS; i++)
  784.     {
  785.         if(IsPlayerConnected(i) && pInfo[i][O_S][objectid] == true)
  786.         {
  787.             SetPlayerObjectPos(i,pInfo[i][P_O][objectid],x,y,z);
  788.         }
  789.     }
  790. }
  791.  
  792. forward STO_SetObjRot(objectid, Float:rotx,Float:roty,Float:rotz);
  793. public STO_SetObjRot(objectid, Float:rotx,Float:roty,Float:rotz)
  794. {
  795.     oInfo[objectid][O_XR] = rotx;
  796.     oInfo[objectid][O_YR] = roty;
  797.     oInfo[objectid][O_ZR] = rotz;
  798.     for(new i = 0; i < MAX_PLAYERS; i++)
  799.     {
  800.         if(IsPlayerConnected(i) && pInfo[i][O_S][objectid] == true)
  801.         {
  802.             SetPlayerObjectRot(i,pInfo[i][P_O][objectid],rotx,roty,rotz);
  803.         }
  804.     }
  805. }
  806.  
  807. forward O_AttachStreamedObjectToPlayer(playerid,objectid,Float:offsetX,Float:offsetY,Float:offsetZ,Float:rotx,Float:roty,Float:rotz);
  808. public O_AttachStreamedObjectToPlayer(playerid,objectid,Float:offsetX,Float:offsetY,Float:offsetZ,Float:rotx,Float:roty,Float:rotz)
  809. {
  810.     oInfo[objectid][O_A] = playerid;
  811.     oInfo[objectid][O_Ox] = offsetX;
  812.     oInfo[objectid][O_Oy] = offsetY;
  813.     oInfo[objectid][O_Oz] = offsetZ;
  814.     oInfo[objectid][O_XR] = rotx;
  815.     oInfo[objectid][O_YR] = roty;
  816.     oInfo[objectid][O_ZR] = rotz;
  817.     for(new i = 0; i < MAX_PLAYERS; i++)
  818.     {
  819.         if(IsPlayerConnected(i) && pInfo[i][O_S][objectid] == true)
  820.         {
  821.             AttachPlayerObjectToPlayer(i,pInfo[i][P_O][objectid],playerid,offsetX,offsetY,offsetZ,rotx,roty,rotz);
  822.         }
  823.     }
  824. }
  825.  
  826. forward STO_ObjectMove(objectid,Float:newx,Float:newy,Float:newz,Float:speed);
  827. public STO_ObjectMove(objectid,Float:newx,Float:newy,Float:newz,Float:speed)
  828. {
  829.     oInfo[objectid][O_Mx] = newx;
  830.     oInfo[objectid][O_My] = newy;
  831.     oInfo[objectid][O_Mz] = newz;
  832.     oInfo[objectid][O_MSp] = speed;
  833.     oInfo[objectid][IsMoving] = true;
  834.     for(new i = 0; i < MAX_PLAYERS; i++)
  835.     {
  836.         if(IsPlayerConnected(i) && pInfo[i][O_S][objectid] == true)
  837.         {
  838.             MovePlayerObject(i,pInfo[i][P_O][objectid],newx,newy,newz,speed);
  839.         }
  840.     }
  841.     new Float:t;
  842.     t = (GetDistanceEx(oInfo[objectid][O_X],oInfo[objectid][O_Y],oInfo[objectid][O_Z],newx,newy,newz)/speed)/1.21;
  843.     new bool:isx = (newx >= oInfo[objectid][O_X]) ? true : false;
  844.     new bool:isy = (newy >= oInfo[objectid][O_Y]) ? true : false;
  845.     new bool:isz = (newz >= oInfo[objectid][O_Z]) ? true : false;
  846.     new xplus = (t == 0.0) ? 0 : (isx) ? floatround(((newx - oInfo[objectid][O_X])/t),floatround_ceil) : floatround(((newx - oInfo[objectid][O_X])/t),floatround_floor);
  847.     new yplus = (t == 0.0) ? 0 : (isy) ? floatround(((newy - oInfo[objectid][O_Y])/t),floatround_ceil) : floatround(((newy - oInfo[objectid][O_Y])/t),floatround_floor);
  848.     new zplus = (t == 0.0) ? 0 : (isz) ? floatround(((newz - oInfo[objectid][O_Z])/t),floatround_ceil) : floatround(((newz - oInfo[objectid][O_Z])/t),floatround_floor);
  849.     KillTimer(oInfo[objectid][O_T]);
  850.     oInfo[objectid][O_T] = SetTimerEx("Mtimer",1*1000,true,"diiibbb",objectid,xplus,yplus,zplus,isx,isy,isz);
  851. }
  852.  
  853. forward Mtimer(objectid,xplus,yplus,zplus,bool:isx,bool:isy,bool:isz);
  854. public Mtimer(objectid,xplus,yplus,zplus,bool:isx,bool:isy,bool:isz)
  855. {
  856.     new bool: ist = false;
  857.     ist = isx ? ((oInfo[objectid][O_X] >= oInfo[objectid][O_Mx]) ? true : false) : ((oInfo[objectid][O_X] <= oInfo[objectid][O_Mx]) ? true : false);
  858.     if(ist)
  859.     {
  860.         ist = isy ? ((oInfo[objectid][O_Y] >= oInfo[objectid][O_My]) ? true : false) : ((oInfo[objectid][O_Y] <= oInfo[objectid][O_My]) ? true : false);
  861.         if(ist)
  862.         {
  863.             ist = isz ? ((oInfo[objectid][O_Z] >= oInfo[objectid][O_Mz]) ? true : false) : ((oInfo[objectid][O_Z] <= oInfo[objectid][O_Mz]) ? true : false);
  864.         }
  865.     }
  866.     if(ist)
  867.     {
  868.         oInfo[objectid][IsMoving] = false;
  869.         for(new i = 0; i < MAX_PLAYERS; i++)
  870.         {
  871.             if(IsPlayerConnected(i) && pInfo[i][O_S][objectid] == true && oInfo[objectid][IsMoving] == true)
  872.             {
  873.                 MovePlayerObject(i,pInfo[i][P_O][objectid],oInfo[objectid][O_Mx],oInfo[objectid][O_My],oInfo[objectid][O_Mz],oInfo[objectid][O_MSp]);
  874.             }
  875.         }
  876.         oInfo[objectid][O_X] = oInfo[objectid][O_Mx];
  877.         oInfo[objectid][O_Y] = oInfo[objectid][O_My];
  878.         oInfo[objectid][O_Z] = oInfo[objectid][O_Mz];
  879.         KillTimer(oInfo[objectid][O_T]);
  880.     }
  881.     else
  882.     {
  883.         new bool:isf = false;
  884.         for(new i = 0; i < MAX_PLAYERS; i++)
  885.         {
  886.             if(IsPlayerConnected(i) && pInfo[i][O_S][objectid] == true)
  887.             {
  888.                 GetPlayerObjectPos(i,pInfo[i][O_S][objectid],oInfo[objectid][O_X],oInfo[objectid][O_Y],oInfo[objectid][O_Z]);
  889.                 isf = true;
  890.                 break;
  891.             }
  892.         }
  893.         if(!isf)
  894.         {
  895.             oInfo[objectid][O_X] = oInfo[objectid][O_X] + xplus;
  896.             oInfo[objectid][O_Y] = oInfo[objectid][O_Y] + yplus;
  897.             oInfo[objectid][O_Z] = oInfo[objectid][O_Z] + zplus;
  898.         }
  899.     }
  900. }
  901. PosToPos(Float:x1, Float:y1, Float:z1, Float:x2, Float:y2, Float:z2, Float:rad)
  902. {
  903.     x1 -= x2;
  904.     y1 -= y2;
  905.     z1 -= z2;
  906.     return ((x1 * x1) + (y1 * y1) + (z1 * z1) <= rad * rad);
  907. }
  908. forward CheckPos4();
  909. public CheckPos4()
  910. {
  911.     new Float:posS[3],Float:posS2[3];
  912.     for(new i = 0; i < MAX_PLAYERS; i++)
  913.     {
  914.         if(IsPlayerConnected(i))
  915.         GetPlayerPos(i,posS[0],posS[1],posS[2]);
  916.         for(new j = 0; j <= O_Exist; j++)
  917.         {
  918.             if(oInfo[j][modelID] > 0)
  919.             {
  920.                 if(oInfo[j][O_A] != -1)
  921.                 {
  922.                     GetPlayerPos(oInfo[j][O_A],posS2[0],posS2[1],posS2[2]);
  923.                     oInfo[j][O_X] = posS2[0]+oInfo[j][O_Ox]; oInfo[j][O_Y] = posS2[1]+oInfo[j][O_Oy]; oInfo[j][O_Z] = posS2[2]+oInfo[j][O_Oz];
  924.                 }
  925.                 if(PosToPos(posS[0],posS[1],posS[2],oInfo[j][O_X],oInfo[j][O_Y],oInfo[j][O_Z],oInfo[j][O_VD]))
  926.                 {
  927.                     if(pInfo[i][O_S][j] == false && pInfo[i][P_S] <= 400) //New SA:MP see-at-once-per-play limit is 400 as the old one was around 250
  928.                     {
  929.                         pInfo[i][P_O][j] = CreatePlayerObject(i,oInfo[j][modelID],oInfo[j][O_X],oInfo[j][O_Y],oInfo[j][O_Z],oInfo[j][O_XR],oInfo[j][O_YR],oInfo[j][O_ZR]);
  930.                         if(oInfo[j][O_A] != -1)
  931.                         {
  932.                             AttachPlayerObjectToPlayer(i,pInfo[i][P_O][j],oInfo[j][O_A],oInfo[j][O_Ox],oInfo[j][O_Oy],oInfo[j][O_Oz],oInfo[j][O_XR],oInfo[j][O_YR],oInfo[j][O_ZR]);
  933.                         }
  934.                         else if(oInfo[j][IsMoving] == true)
  935.                         {
  936.                             MovePlayerObject(i,pInfo[i][P_O][j],oInfo[j][O_Mx],oInfo[j][O_My],oInfo[j][O_Mz],oInfo[j][O_MSp]);
  937.                         }
  938.                         pInfo[i][O_S][j] = true;
  939.                         pInfo[i][P_S] += 1;
  940.                     }
  941.                 }
  942.                 else if(pInfo[i][O_S][j] == true)
  943.                 {
  944.                     DestroyPlayerObject(i,pInfo[i][P_O][j]);
  945.                     pInfo[i][O_S][j] = false;
  946.                     pInfo[i][P_S] -= 1;
  947.                 }
  948.             }
  949.         }
  950.     }
  951. }
  952. forward CheckPos5();
  953. public CheckPos5()
  954. {
  955.     for(new j = 0; j < MAX_AUTO_OBJECTS; j++)
  956.     {
  957.         if(aInfo[j][aExist] == true)
  958.         {
  959.             for(new i = 0; i < MAX_PLAYERS; i++)
  960.             {
  961.                 if(IsPlayerConnected(i))
  962.                 {
  963.                     if(IsPlayerInRangeOfPoint(i,aInfo[j][distance3],aInfo[j][closedx],aInfo[j][closedy],aInfo[j][closedz]))
  964.                     {
  965.                         isAr[j] = true;
  966.                     }
  967.                     else
  968.                     {
  969.                         if(isAr[j] == false)
  970.                         {
  971.                             MoveStreamedObject(aInfo[j][gID],aInfo[j][closedx],aInfo[j][closedy],aInfo[j][closedz],aInfo[j][ospeed]);
  972.                         }
  973.                     }
  974.                 }
  975.             }
  976.             if(isAr[j] == true)
  977.             {
  978.                 MoveStreamedObject(aInfo[j][gID],aInfo[j][openedx],aInfo[j][openedy],aInfo[j][openedz],aInfo[j][ospeed]);
  979.             }
  980.             isAr[j] = false;
  981.         }
  982.     }
  983.     return 1;
  984. }
Advertisement
Add Comment
Please, Sign In to add comment