Advertisement
Guest User

checkpoint.pwn

a guest
Sep 15th, 2013
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.61 KB | None | 0 0
  1. /*
  2. * Filename: checkpoint.pwn
  3. * Creation: 14 SEP 2013
  4. * Author: Mmartin
  5. * Version: 1.0
  6. *   This file is provided as is. No warranties.
  7. *   (c) Copyright Tumbleweed Productions 2013
  8. */
  9.  
  10. #define MAX_CP 10
  11. #define CP_ICONID_BASE 90
  12. #define REFRESH_INTERVAL 500
  13.  
  14. #define SCP_FINDIT 0
  15.  
  16. forward public Checkpoint_Init();
  17. forward public RefreshCheckpoint();
  18. forward public OnPlayerEnterSpecialCheckpoint(playerid, cpid, extraid);
  19. forward public OnPlayerLeaveSpecialCheckpoint(playerid, cpid, extraid);
  20.  
  21. enum E_PLAYA_SPECIAL_CP{
  22.     cp_extraid,
  23.     Float:cp_x,
  24.     Float:cp_y,
  25.     Float:cp_z,
  26.     cp_world,
  27.     cp_interior,
  28.     cp_color,
  29.     cp_used,
  30.     cp_iconid,
  31.     cp_rendertype,
  32.     cp_icontype,
  33.     cp_drawn,
  34.     cp_isin,
  35.     cp_radius
  36. }
  37.  
  38. new Checkpoint[MAX_PLAYERS][MAX_CP][E_PLAYA_SPECIAL_CP];
  39.  
  40. stock fetchCheckpointID(playerid){
  41.     for(new i = 0; i < MAX_CP; i++){
  42.         if(!Checkpoint[playerid][i][cp_used]) return i;
  43.     }
  44.     return -1;
  45. }
  46.  
  47. stock DrawCheckpoint(playerid, extraid, Float:x, Float:y, Float:z, icon = 0, color = 0xFF0000FF, world = -1, interior = -1, radius = 2, rendertype = MAPICON_GLOBAL_CHECKPOINT){
  48.     new cpid = fetchCheckpointID(playerid);
  49.     if(cpid == -1) return -1;
  50.     Checkpoint[playerid][cpid][cp_extraid] = extraid;
  51.     Checkpoint[playerid][cpid][cp_x] = x;
  52.     Checkpoint[playerid][cpid][cp_y] = y;
  53.     Checkpoint[playerid][cpid][cp_z] = z;
  54.     Checkpoint[playerid][cpid][cp_world] = world;
  55.     Checkpoint[playerid][cpid][cp_interior] = interior;
  56.     Checkpoint[playerid][cpid][cp_color] = color;
  57.     Checkpoint[playerid][cpid][cp_used] = 1;
  58.     Checkpoint[playerid][cpid][cp_iconid] = CP_ICONID_BASE + cpid;
  59.     Checkpoint[playerid][cpid][cp_rendertype] = rendertype;
  60.     Checkpoint[playerid][cpid][cp_icontype] = icon;
  61.     Checkpoint[playerid][cpid][cp_drawn] = 0;
  62.     Checkpoint[playerid][cpid][cp_isin] = 0;
  63.     Checkpoint[playerid][cpid][cp_radius] = radius;
  64.     return 1;
  65. }
  66.  
  67. stock ClearCheckpoint(playerid, cpid){
  68.     if(cpid < 0 || cpid > MAX_CP) return 0;
  69.     RemovePlayerMapIcon(playerid, Checkpoint[playerid][cpid][cp_iconid]);
  70.     Checkpoint[playerid][cpid][cp_extraid] = 0;
  71.     Checkpoint[playerid][cpid][cp_x] = 0.0;
  72.     Checkpoint[playerid][cpid][cp_y] = 0.0;
  73.     Checkpoint[playerid][cpid][cp_z] = 0.0;
  74.     Checkpoint[playerid][cpid][cp_world] = 0;
  75.     Checkpoint[playerid][cpid][cp_interior] = 0;
  76.     Checkpoint[playerid][cpid][cp_color] = 0;
  77.     Checkpoint[playerid][cpid][cp_used] = 0;
  78.     Checkpoint[playerid][cpid][cp_iconid] = 0;
  79.     Checkpoint[playerid][cpid][cp_rendertype] = 0;
  80.     Checkpoint[playerid][cpid][cp_icontype] = 0;
  81.     Checkpoint[playerid][cpid][cp_drawn] = 0;
  82.     Checkpoint[playerid][cpid][cp_isin] = 0;
  83.     Checkpoint[playerid][cpid][cp_radius] = 0;
  84.     return 1;
  85. }
  86.  
  87. stock IsPlayerInSpecialCheckpoint(playerid, extraid = -1, cpid = -1){
  88.     if(cpid != -1){
  89.         if(extraid == -1)
  90.             if(Checkpoint[playerid][cpid][cp_isin] == 1) return true;
  91.         else if(Checkpoint[playerid][cpid][cp_extraid] != extraid) return false; else return true;
  92.     }else{
  93.         for(new i = 0; i < MAX_CP; i++){
  94.             if(Checkpoint[playerid][i][cp_isin]){
  95.                 if(extraid == -1 || Checkpoint[playerid][i][cp_extraid] == extraid) return true;
  96.             }
  97.         }
  98.         return false;
  99.     }
  100. }
  101.  
  102. stock ClearAllCheckpoints(playerid){
  103.     for(new cpid = 0; cpid < MAX_CP; cpid++){
  104.         ClearCheckpoint(playerid, cpid);
  105.     }
  106. }
  107.  
  108. public Checkpoint_Init(){
  109.     SetTimer("RefreshCheckpoint", REFRESH_INTERVAL, 1);
  110.     return 1;
  111. }
  112.  
  113. /*public OnPlayerEnterSpecialCheckpoint(playerid, cpid, extraid){
  114.     return 1;
  115. }
  116.  
  117. public OnPlayerLeaveSpecialCheckpoint(playerid, cpid, extraid){
  118.     return 1;
  119. }*/
  120.  
  121. public RefreshCheckpoint(){
  122.     foreach(playerid){
  123.         if(IsPlayerLogged(playerid)){
  124.             for(new cpid = 0; cpid < MAX_CP; cpid++){
  125.                 if(Checkpoint[playerid][cpid][cp_used]){
  126.                     if(Checkpoint[playerid][cpid][cp_drawn]){
  127.                         if((GetPlayerVirtualWorld(playerid) != Checkpoint[playerid][cpid][cp_world] && Checkpoint[playerid][cpid][cp_world] != -1) || (GetPlayerInterior(playerid) != Checkpoint[playerid][cpid][cp_interior] && Checkpoint[playerid][cpid][cp_interior] != -1)){
  128.                             RemovePlayerMapIcon(playerid, Checkpoint[playerid][cpid][cp_iconid]);
  129.                             if(Checkpoint[playerid][cpid][cp_isin]){
  130.                                 CallLocalFunction("OnPlayerLeaveSpecialCheckpoint", "ddd", playerid, cpid, Checkpoint[playerid][cpid][cp_extraid]);
  131.                                 Checkpoint[playerid][cpid][cp_isin] = 0;
  132.                             }
  133.                             Checkpoint[playerid][cpid][cp_drawn] = 0;
  134.                         }else{
  135.                             if(IsPlayerInRangeOfPoint(playerid, Checkpoint[playerid][cpid][cp_radius], Checkpoint[playerid][cpid][cp_x], Checkpoint[playerid][cpid][cp_y], Checkpoint[playerid][cpid][cp_z])){
  136.                                 if(!Checkpoint[playerid][cpid][cp_isin]){
  137.                                     CallLocalFunction("OnPlayerEnterSpecialCheckpoint", "ddd", playerid, cpid, Checkpoint[playerid][cpid][cp_extraid]);
  138.                                     Checkpoint[playerid][cpid][cp_isin] = 1;
  139.                                 }
  140.                             }else{
  141.                                 if(Checkpoint[playerid][cpid][cp_isin]){
  142.                                     CallLocalFunction("OnPlayerLeaveSpecialCheckpoint", "ddd", playerid, cpid, Checkpoint[playerid][cpid][cp_extraid]);
  143.                                     Checkpoint[playerid][cpid][cp_isin] = 0;
  144.                                 }
  145.                             }
  146.                         }
  147.                     }else{
  148.                         if((GetPlayerVirtualWorld(playerid) == Checkpoint[playerid][cpid][cp_world] || Checkpoint[playerid][cpid][cp_world] == -1) || (GetPlayerInterior(playerid) == Checkpoint[playerid][cpid][cp_interior] || Checkpoint[playerid][cpid][cp_interior] == -1)){
  149.                             SetPlayerMapIcon(playerid, Checkpoint[playerid][cpid][cp_iconid], Checkpoint[playerid][cpid][cp_x], Checkpoint[playerid][cpid][cp_y], Checkpoint[playerid][cpid][cp_z], Checkpoint[playerid][cpid][cp_icontype], Checkpoint[playerid][cpid][cp_color], Checkpoint[playerid][cpid][cp_rendertype]);
  150.                             Checkpoint[playerid][cpid][cp_drawn] = 1;
  151.                         }
  152.                     }
  153.                 }
  154.             }
  155.         }
  156.     }
  157. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement