Guest User

Untitled

a guest
Jan 15th, 2012
553
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. // ---------------------------------------
  3. Incorporated Gaming Release.
  4.     DO NOT REMOVE THE ABOVE OR ANY CREDITS.
  5.         I_Checkpoint.
  6.             By Snowman12.
  7. // ---------------------------------------
  8. */
  9.  
  10. #if defined I_Checkpoint included
  11.     #endinput
  12. #endif
  13. #define I_Checkpoint included
  14.  
  15. #include                        <streamer>
  16. #include                        <YSI\y_hooks>
  17. #include                        <YSI\y_ini>
  18. #include                        <a_samp>
  19.  
  20. #if !defined _streamer_included
  21. #error You will be needing to download streamer.inc.
  22. #endif
  23.  
  24. #define INCLUDE_REVISION        (2)
  25.  
  26. #define MAX_CHECKPOINTS         (300)
  27.  
  28. #define INVALID_CHECKPOINT_ID   (0xFFFF)
  29.  
  30. #define CHECKPOINT_LOCATION     "Checkpoints/check%d.ini"
  31.  
  32. #if !defined COL_YELLOW
  33. #define COL_YELLOW "{F2FF00}"
  34. #endif
  35.  
  36. /* CHANGE LOG */
  37.  
  38. /*
  39.     R1 - Release.
  40.     R2 -
  41.         Saving/Loading System Y_INI.
  42.         DestroyDynamicCheckpoint added.
  43.         Fixed some bugs.
  44.  */
  45.        
  46. /*
  47. native CreateDynamicCheckpoint(CheckpointName[28], Float: X, Float: Y, Float: Z, Float: Size, Float: EX, Float: EY, Float: EZ, Interior = -1,  EInterior = -1);
  48. native DestroyDynamicCheckpoint(ID);
  49. */
  50.  
  51. forward loadCheckpoints_data(ID, name[], value[]);
  52.  
  53. enum E_CHECKPOINT_INFO
  54. {
  55.     E_CHECKPOINT_NAME[30],
  56.     Text3D: E_LABEL,
  57.     E_CHECKPOINT,
  58.     bool: E_CREATED,
  59.     Float: E_LOCX,
  60.     Float: E_LOCY,
  61.     Float: E_LOCZ,
  62.     Float: E_SIZE,
  63.     Float: E_ENTER_X,
  64.     Float: E_ENTER_Y,
  65.     Float: E_ENTER_Z,
  66.     E_INTERIOR,
  67.     E_ENTER_INTERIOR,
  68. };
  69.  
  70. new CheckpointInfo[MAX_CHECKPOINTS][E_CHECKPOINT_INFO];
  71.  
  72. hook OnGameModeInit()
  73. {
  74.     print("====================================");
  75.     print("| CHECKPOINT CREATOR LOADED        |");
  76.     print("| MAX CHECKPOINTS: %d              |");
  77.     print("| (c) Incorporated Gaming 2011     |");
  78.     printf("| VERSION: R%d                    |",INCLUDE_REVISION);
  79.     print("====================================");
  80.     return 1;
  81. }
  82.  
  83. CreateDynamicCheckpoint(CheckpointName[28], Float: X, Float: Y, Float: Z, Float: Size, Float: EX, Float: EY, Float: EZ, Interior = -1,  EInterior = -1)
  84. {
  85.     new ID = GetFreeCheckpointSlot();
  86.     new szString[50];
  87.    
  88.     if(ID != INVALID_CHECKPOINT_ID)
  89.     {
  90.         format(szString,sizeof(szString),""COL_YELLOW"Checkpoint:{FFFFFF}\n%s",CheckpointName);
  91.         format(CheckpointInfo[ID][E_CHECKPOINT_NAME], 30, "%s", CheckpointName);
  92.         CheckpointInfo[ID][E_CHECKPOINT] = CreateDynamicCP(X, Y, Z, Size, VirtualWorld, Interior);
  93.         CheckpointInfo[ID][E_LABEL] = Create3DTextLabel(szString,0xFFFFFFFF, X, Y, Z, 15.0, 0);
  94.         CheckpointInfo[ID][E_LOCX] = X, CheckpointInfo[ID][E_LOCY] = Y, CheckpointInfo[ID][E_LOCZ] = Z;
  95.         CheckpointInfo[ID][E_CREATED] = true;
  96.         CheckpointInfo[ID][E_SIZE] = Size;
  97.         CheckpointInfo[ID][E_ENTER_X] = EX, CheckpointInfo[ID][E_ENTER_Y], CheckpointInfo[ID][E_ENTER_Z];
  98.         CheckpointInfo[ID][E_INTERIOR] = Interior;
  99.         CheckpointInfo[ID][E_ENTER_INTERIOR] = EInterior;
  100.         format(szString, sizeof(szString), CHECKPOINT_LOCATION, ID);
  101.         new INI:File;
  102.         iFile = INI_Open(szString);
  103.         INI_SetTag(iFile, "Checkpoint Information");
  104.         INI_WriteString(iFile, "CheckpointName",CheckpointName);
  105.         INI_WriteFloat(iFile, "X", X);
  106.         INI_WriteFloat(iFile, "Y", Y);
  107.         INI_WriteFloat(iFile, "Z", Z);
  108.         INI_WriteFloat(iFile, "Size", Size);
  109.         INI_WriteFloat(iFile, "EX", EX);
  110.         INI_WriteFloat(iFile, "EY", EY);
  111.         INI_WriteFloat(iFile, "EZ", EZ);
  112.         INI_WriteInt(iFile, "Interior", Interior);
  113.         INI_WriteInt(iFile, "EnterInterior", EInterior);
  114.         INI_Close(iFile);
  115.         return ID;
  116.     }
  117.     return INVALID_CHECKPOINT_ID;
  118. }
  119.  
  120. DestroyDynamicCheckpoint(ID)
  121. {
  122.     if(!CheckpointInfo[ID][E_CREATED])
  123.         return 0;
  124.  
  125.     static szString[30];
  126.     format(szString,28,CHECKPOINT_LOCATION,ID);
  127.     fremove(szString);
  128.     DestroyDynamicCP(CheckpointInfo[ID][E_CHECKPOINT]);
  129.     Delete3DTextLabel(CheckpointInfo[ID][E_LABEL]);
  130.     CheckpointInfo[ID][E_CREATED] = false;
  131.     return 1;
  132. }
  133.  
  134. hook OnPlayerEnterDynamicCP(playerid, checkpointid)
  135. {
  136.     for(new i; i < MAX_CHECKPOINTS; i++)
  137.     {
  138.         if(CheckpointInfo[i][E_CHECKPOINT] == checkpointid)
  139.         {
  140.             if(CheckpointInfo[i][E_ENTER_INTERIOR] >= 1)
  141.             {
  142.                 SetPlayerInterior(playerid, CheckpointInfo[i][E_ENTER_INTERIOR]);
  143.             }
  144.             SetPlayerPos(playerid, CheckpointInfo[i][E_ENTER_X], CheckpointInfo[i][E_ENTER_Y], CheckpointInfo[i][E_ENTER_Z]);
  145.         }
  146.     }
  147.     return 1;
  148. }
  149.  
  150.  
  151.  
  152. stock strmatch(const str1[], const str2[])
  153. {
  154.     if ((strcmp(str1, str2, true, strlen(str2)) == 0) && (strlen(str2) == strlen(str1))) return true;
  155.     return false;
  156. }
  157.  
  158. stock GetFreeCheckpointSlot()
  159. {
  160.     for(new i; i < MAX_CHECKPOINTS; i++)
  161.     {
  162.         if(!CheckpointInfo[i][E_CREATED])
  163.             return i;
  164.     }
  165.     return INVALID_CHECKPOINT_ID;
  166. }
  167.        
  168. stock LoadCheckpointsFromFile()
  169. {
  170.     new
  171.         iFile[50]
  172.     ;
  173.     for(new i; i < MAX_CHECKPOINTS; i++)
  174.     {
  175.         format(iFile, 28, CHECKPOINT_LOCATION, i);
  176.         if(fexist(iFile))
  177.         {
  178.             INI_ParseFile(iFile, "loadCheckpoints_%s", .bExtra = true, .extra = i);
  179.             CheckpointInfo[i][E_CHECKPOINT] = CreateDynamicCP(CheckpointInfo[i][E_LOCX],CheckpointInfo[i][E_LOCY],CheckpointInfo[i][E_LOCZ],CheckpointInfo[i][E_SIZE], -1, CheckpointInfo[i][E_INTERIOR]);
  180.             format(iFile, sizeof(iFile), ""COL_YELLOW"Checkpoint:{FFFFFF}\n%s",CheckpointInfo[i][E_CHECKPOINT_NAME]);
  181.             CheckpointInfo[i][E_LABEL] = Create3DTextLabel(iFile, 0xFFFFFFFF, CheckpointInfo[i][E_LOCX], CheckpointInfo[i][E_LOCY], CheckpointInfo[i][E_LOCZ], 15.0, 0);
  182.             CheckpointInfo[i][E_CREATED] = true;
  183.         }
  184.     }
  185.     return 1;
  186. }
  187.  
  188. public loadCheckpoints_data(ID, name[], value[])
  189. {
  190.     if(strmatch(name, "CheckpointName")) format(CheckpointInfo[ID][E_CHECKPOINT_NAME], 28, "%s", value);
  191.     if(strmatch(name, "X")) CheckpointInfo[ID][E_LOCX] = floatstr(value);
  192.     if(strmatch(name, "Y")) CheckpointInfo[ID][E_LOCY] = floatstr(value);
  193.     if(strmatch(name, "Z")) CheckpointInfo[ID][E_LOCZ] = floatstr(value);
  194.     if(strmatch(name, "Size")) CheckpointInfo[ID][E_SIZE] = floatstr(value);
  195.     if(strmatch(name, "EX")) CheckpointInfo[ID][E_ENTER_X] = floatstr(value);
  196.     if(strmatch(name, "EY")) CheckpointInfo[ID][E_ENTER_Y] = floatstr(value);
  197.     if(strmatch(name, "EZ")) CheckpointInfo[ID][E_ENTER_Z] = floatstr(value);
  198.     if(strmatch(name, "Interior")) CheckpointInfo[ID][E_INTERIOR] = strval(value);
  199.     if(strmatch(name, "EnterInterior")) CheckpointInfo[ID][E_ENTER_INTERIOR] = strval(value);
  200. }
Advertisement
Add Comment
Please, Sign In to add comment