Guest User

Include para LHouse

a guest
Mar 19th, 2012
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 2.38 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. /*Natives
  4. native CPS_AddCheckpoint(Float:PX,Float:PY,Float:PZ,Float:size,Float:spawn_dist);
  5. native CPS_RemoveCheckpoint(cpid);
  6. native CPS_GetPlayerCheckpoint(playerid);
  7. */
  8.  
  9. #define MAX_CHECKPOINTS 500
  10.  
  11. forward CPSERVICE_Handler();
  12. enum cpinfo
  13. {
  14.     Float:cpX,
  15.     Float:cpY,
  16.     Float:cpZ,
  17.     Float:cpsz,
  18.     cpsd,
  19. };
  20. new CPSERVICE_active;
  21. new Checkpoints[MAX_CHECKPOINTS][cpinfo];
  22. new UsedCPSlot[MAX_CHECKPOINTS];
  23. new CPSERVICE_actualcp[MAX_PLAYERS];
  24.  
  25. stock CPS_AddCheckpoint(Float:PX,Float:PY,Float:PZ,Float:size,spawn_dist)
  26. {
  27.     new cpid=1;
  28.     while(UsedCPSlot[cpid] == 1) cpid++;
  29.     if(CPSERVICE_active == 0){
  30.         SetTimer("CPSERVICE_Handler",500,true);
  31.         CPSERVICE_active=1;
  32.     }
  33.     UsedCPSlot[cpid]=1;
  34.     Checkpoints[cpid][cpX]=PX;
  35.     Checkpoints[cpid][cpY]=PY;
  36.     Checkpoints[cpid][cpZ]=PZ;
  37.     Checkpoints[cpid][cpsz]=size;
  38.     Checkpoints[cpid][cpsd]=spawn_dist;
  39.     return cpid;
  40. }
  41.  
  42. stock CPS_GetPlayerCheckpoint(playerid) if(!IsPlayerInCheckpoint(playerid)) return 0; else return CPSERVICE_actualcp[playerid];
  43.  
  44. stock CPS_RemoveCheckpoint(cpid)
  45. {
  46.     if(cpid == 0 || UsedCPSlot[cpid] == 0) return 0;
  47.     UsedCPSlot[cpid]=0;
  48.     return 1;
  49. }
  50.  
  51. public CPSERVICE_Handler()
  52. {
  53.     for(new i; i<MAX_PLAYERS; i++){
  54.         new Float:prevdist = 100000.000;
  55.         new prevcp;
  56.         for(new cpid=1; cpid < MAX_CHECKPOINTS; cpid++){
  57.             if(UsedCPSlot[cpid]) {
  58.                 new Float:dist;
  59.                 dist = CPSERVICE_getdist(i,Checkpoints[cpid][cpX],Checkpoints[cpid][cpY],Checkpoints[cpid][cpZ]);
  60.                 if(dist < prevdist){
  61.                     prevdist = dist;
  62.                     prevcp = cpid;
  63.                 }
  64.             }
  65.         }
  66.         new cpid=prevcp;
  67.         if(CPSERVICE_getdist(i,Checkpoints[cpid][cpX],Checkpoints[cpid][cpY],Checkpoints[cpid][cpZ]) < Checkpoints[cpid][cpsd]) {
  68.             if(CPSERVICE_actualcp[i] != cpid){
  69.                 SetPlayerCheckpoint(i,Checkpoints[cpid][cpX],Checkpoints[cpid][cpY],Checkpoints[cpid][cpZ],Checkpoints[cpid][cpsz]);
  70.                 CPSERVICE_actualcp[i] = cpid;
  71.             }
  72.         } else {
  73.             if(CPSERVICE_actualcp[i] != 0){
  74.                 CPSERVICE_actualcp[i] = 0;
  75.                 DisablePlayerCheckpoint(i);
  76.             }
  77.         }
  78.     }
  79.     return 1;
  80. }
  81.  
  82. stock CPSERVICE_getdist(playerid,Float:x2,Float:y2,Float:z2)
  83. {
  84.     new Float:x1,Float:y1,Float:z1;
  85.     new Float:tmpdis;
  86.     GetPlayerPos(playerid,x1,y1,z1);
  87.     tmpdis = floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
  88.     return floatround(tmpdis);
  89. }
Advertisement
Add Comment
Please, Sign In to add comment