Advertisement
Southclaw

Position Save Slots

Feb 8th, 2014
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <a_samp>
  2. #include <YSI\y_commands>
  3. #include <SII>
  4. #include <sscanf2>
  5.  
  6.  
  7. #define GREEN               0x21DD00FF
  8. #define RED                 0xE60000FF
  9. #define ADMIN_RED           0xFB0000FF
  10. #define WHITE               0xFFFFFFFF
  11. #define ORANGE              0xF97804FF
  12. #define LIGHTRED            0xFF8080FF
  13. #define LIGHTBLUE           0x00C2ECFF
  14. #define PURPLE              0xB360FDFF
  15. #define BLUE                0x1229FAFF
  16. #define LIGHTGREEN          0x38FF06FF
  17. #define DARKPINK            0xE100E1FF
  18. #define DARKGREEN           0x008040FF
  19. #define AQUAGREEN           0x00CACAFB
  20. #define NICESKY             0x99FFFFAA
  21. #define GREY                0xCECECEFF
  22. #define ORANGERED           0xFF4500FF
  23. #define PINK                0xFFC0CBFF
  24.  
  25. #define SAVE_POS_DIALOG     15
  26. #define LOAD_POS_DIALOG     16
  27.  
  28. #define SAVE_POS_SLOT1      17
  29. #define SAVE_POS_SLOT2      18
  30. #define SAVE_POS_SLOT3      19
  31.  
  32. new Float:SPosXS1,
  33.     Float:SPosYS1,
  34.     Float:SPosZS1;
  35.  
  36. // I think i dont even need those two, but puted them just in case
  37. //
  38. new Float:SPosXS2,
  39.     Float:SPosYS2,
  40.     Float:SPosZS2;
  41.    
  42. new Float:SPosXS3,
  43.     Float:SPosYS3,
  44.     Float:SPosZS3;
  45. //
  46.  
  47. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  48. {
  49.     if(dialogid == SAVE_POS_DIALOG)
  50.     {
  51.         if(response == 1)
  52.         {
  53.             switch(listitem)
  54.             {
  55.                 case 0: ShowPlayerDialog(playerid, SAVE_POS_SLOT1, DIALOG_STYLE_INPUT,"{FFFFFF}Type Your Save Location {00FF00}Name", " ", "Save","Cancel");
  56.                 case 1: ShowPlayerDialog(playerid, SAVE_POS_SLOT2, DIALOG_STYLE_INPUT,"{FFFFFF}Type Your Save Location {00FF00}Name", " ", "Save","Cancel");
  57.                 case 2: ShowPlayerDialog(playerid, SAVE_POS_SLOT3, DIALOG_STYLE_INPUT,"{FFFFFF}Type Your Save Location {00FF00}Name", " ", "Save","Cancel");
  58.             }
  59.         }
  60.     }
  61.     if(dialogid == SAVE_POS_SLOT1)
  62.     {
  63.         if(response == 1)
  64.         {
  65.             GetPlayerPos(playerid, SPosXS1, SPosYS1, SPosZS1);
  66.             if(INI_Open(getINI(playerid)))
  67.             {
  68.                 INI_WriteString("SpawnPosSlot1Name", inputtext);
  69.                 INI_WriteFloat("SpawnPosXSlot1",SPosXS1);
  70.                 INI_WriteFloat("SpawnPosYSlot1",SPosYS1);
  71.                 INI_WriteFloat("SpawnPosZSlot1",SPosZS1);
  72.                 INI_Save();
  73.                 INI_Close();
  74.             }
  75.         }
  76.     }
  77.     if(dialogid == SAVE_POS_SLOT2)
  78.     {
  79.         if(response == 1)
  80.         {
  81.             GetPlayerPos(playerid, SPosXS2, SPosYS2, SPosZS2);
  82.             if(INI_Open(getINI(playerid)))
  83.             {
  84.                 INI_WriteString("SpawnPosSlot2Name", inputtext);
  85.                 INI_WriteFloat("SpawnPosXSlot2",SPosXS2);
  86.                 INI_WriteFloat("SpawnPosYSlot2",SPosYS2);
  87.                 INI_WriteFloat("SpawnPosZSlot2",SPosZS2);
  88.                 INI_Save();
  89.                 INI_Close();
  90.             }
  91.         }
  92.     }
  93.     if(dialogid == SAVE_POS_SLOT3)
  94.     {
  95.         if(response == 1)
  96.         {
  97.             GetPlayerPos(playerid, SPosXS3, SPosYS3, SPosZS3);
  98.             if(INI_Open(getINI(playerid)))
  99.             {
  100.                 INI_WriteString("SpawnPosSlot3Name", inputtext);
  101.                 INI_WriteFloat("SpawnPosXSlot3",SPosXS3);
  102.                 INI_WriteFloat("SpawnPosYSlot3",SPosYS3);
  103.                 INI_WriteFloat("SpawnPosZSlot3",SPosZS3);
  104.                 INI_Save();
  105.                 INI_Close();
  106.             }
  107.         }
  108.     }
  109.  
  110.     // The loading slot dialog:
  111.     if(dialogid == LOAD_POS_DIALOG)
  112.     {
  113.         // Run this code if the user pressed 'load'
  114.         if(response)
  115.         {
  116.            
  117.             // Open the file again
  118.             if(INI_Open(getINI(playerid)))
  119.             {
  120.                 // Declare some variables to store the coordinates in.
  121.                 new
  122.                     Float:x,
  123.                     Float:y,
  124.                     Float:z;
  125.  
  126.                 // Run a different code block depending on the listitem:
  127.                 switch(listitem)
  128.                 {
  129.                     case 0:
  130.                     {
  131.                         x = INI_ReadFloat("SpawnPosXSlot1");
  132.                         y = INI_ReadFloat("SpawnPosYSlot1");
  133.                         z = INI_ReadFloat("SpawnPosZSlot1");
  134.                     }
  135.  
  136.                     case 1:
  137.                     {
  138.                         x = INI_ReadFloat("SpawnPosXSlot2");
  139.                         y = INI_ReadFloat("SpawnPosYSlot2");
  140.                         z = INI_ReadFloat("SpawnPosZSlot2");
  141.                     }
  142.  
  143.                     case 2:
  144.                     {
  145.                         x = INI_ReadFloat("SpawnPosXSlot3");
  146.                         y = INI_ReadFloat("SpawnPosYSlot3");
  147.                         z = INI_ReadFloat("SpawnPosZSlot3");
  148.                     }
  149.                 }
  150.  
  151.                 // Perform this check to see if the loaded coordinates are valid.
  152.                 // If all the coordinates are 0.0, the slot probably doesn't exist.
  153.                 // So let the player choose a different slot.
  154.                 if(x == 0.0 && y == 0.0 && z == 0.0)
  155.                 {
  156.                     // Show the menu again so the player can choose a new slot.
  157.                     ShowPlayerSlotList(playerid);
  158.                 }
  159.                 else
  160.                 {
  161.                     // Set the player position to the stored coordinates.
  162.                     SetPlayerPos(playerid, x, y, z);
  163.                 }
  164.  
  165.                 // Close the file to clear memory and allow another file to be opened in the future.
  166.                 INI_Close();
  167.             }
  168.             else
  169.             {
  170.                 // INI_Open returned 0 meaning the file didn't open, warn the player or something.
  171.             }
  172.         }
  173.     }
  174.  
  175.     return 0;
  176. }
  177.  
  178. YCMD:spos(playerid,params[], help)
  179. {
  180.     #pragma unused params
  181.     #pragma unused help
  182.  
  183.     ShowPlayerDialog(playerid, SAVE_POS_DIALOG, DIALOG_STYLE_LIST, "{FFFFFF}Choose {00FF00}Save Slot","Slot 1\nSlot 2\nSlot 3","Save","Cancel");
  184.     return 1;
  185. }
  186.  
  187. YCMD:lpos(playerid,params[], help)
  188. {
  189.     #pragma unused params
  190.     #pragma unused help
  191.  
  192.     // Use a function to display the menu
  193.     // This way, you can display the menu from anywhere without needing to write all the code again.
  194.     ShowPlayerSlotList(playerid);
  195.  
  196.     return 1;
  197. }
  198.  
  199. ShowPlayerSlotList(playerid)
  200. {
  201.     new
  202.         list[(128 + 1) * 3], // 128 is the max-length of the slot name, 1 is the \n character, multiply by 3 for 3 lines.
  203.         tmp[128 + 1]; // Used to store the slot name loaded from the file.
  204.  
  205.     if(INI_Open(getINI(playerid)))
  206.     {
  207.         // Only run this code if INI_Open returned 1, aka the file opened successfully.
  208.  
  209.         // Read the slot name, store it to 'tmp'.
  210.         if(INI_ReadString(tmp, "SpawnPosSlot1Name"))
  211.         {
  212.             // If INI_ReadString returned 1, the string was loaded.
  213.             // Set the last character to a '\n' for the menu newline.
  214.             tmp[strlen(tmp)] = '\n';
  215.             // Stick it onto the end of 'list' with 'strcat'.
  216.             strcat(list, tmp);
  217.         }
  218.         else
  219.         {
  220.             // If INI_ReadString returned 0, insert the slot number instead.
  221.             strcat(list, "Slot 1\n");
  222.         }
  223.  
  224.         // Same as above for the other slots:
  225.         if(INI_ReadString(tmp, "SpawnPosSlot2Name"))
  226.         {
  227.             tmp[strlen(tmp)] = '\n';
  228.             strcat(list, tmp);
  229.         }
  230.         else
  231.         {
  232.             strcat(list, "Slot 2\n");
  233.         }
  234.  
  235.         if(INI_ReadString(tmp, "SpawnPosSlot3Name"))
  236.         {
  237.             tmp[strlen(tmp)] = '\n';
  238.             strcat(list, tmp);
  239.         }
  240.         else
  241.         {
  242.             strcat(list, "Slot 3\n");
  243.         }
  244.  
  245.         // The dialog is also under the INI_Open block so it only shows if the file opened properly.
  246.         ShowPlayerDialog(playerid, LOAD_POS_DIALOG, DIALOG_STYLE_LIST, "{FFFFFF}Choose {00FF00}Save Slot",list,"Load","Cancel");
  247.  
  248.         // Close the file to clear memory and allow another file to be opened in the future.
  249.         INI_Close();
  250.     }
  251.     else
  252.     {
  253.         // INI_Open returned 0 meaning the file didn't open, warn the player or something.
  254.     }
  255. }
  256.  
  257. stock getINI(playerid)
  258. {
  259.     new account[64], pName[MAX_PLAYER_NAME];
  260.     GetPlayerName(playerid, pName, sizeof(pName));
  261.     format(account,30,"Users/%s.ini", pName);
  262.     return account;
  263. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement