Advertisement
Guest User

Untitled

a guest
Aug 4th, 2013
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.12 KB | None | 0 0
  1. #include <a_samp>
  2. #include <YSI\y_ini>
  3. #include <sscanf2>
  4.  
  5. main() { return 0; }
  6.  
  7. #define MAX_POS_NAME_LENGTH 16
  8. #define MIN_POS_NAME_LENGTH 2
  9.  
  10. new str_tmp[32];
  11.  
  12. stock PlayerPath(playerid) {
  13. new str[MAX_PLAYER_NAME+22], name[MAX_PLAYER_NAME];
  14. GetPlayerName(playerid, name, sizeof(name));
  15. format(str, sizeof(str), "/PlayerPositions/%s.txt", name);
  16. return str;
  17. }
  18.  
  19. enum {
  20. DIALOG_MAIN,
  21. DIALOG_NAME,
  22. DIALOG_NAMEUSED,
  23. DIALOG_REMOVE
  24. }
  25.  
  26. enum e_pos_data {
  27. total_saved_pos,
  28. currIndex,
  29. Float:pos[4],
  30. interior,
  31. virtual_world,
  32. pos_name[MAX_POS_NAME_LENGTH]
  33. }
  34. new pos_arr[MAX_PLAYERS][e_pos_data];
  35.  
  36. SavePlayerPos_data(playerid)
  37. {
  38. new INI:file = INI_Open(PlayerPath(playerid));
  39. INI_WriteInt(file, "total_saved_pos", pos_arr[playerid][total_saved_pos]);
  40. format(str_tmp, sizeof(str_tmp), "pos_x_%d", pos_arr[playerid][currIndex]);
  41. INI_WriteFloat(file, str_tmp, pos_arr[playerid][pos][0]);
  42. format(str_tmp, sizeof(str_tmp), "pos_y_%d", pos_arr[playerid][currIndex]);
  43. INI_WriteFloat(file, str_tmp, pos_arr[playerid][pos][1]);
  44. format(str_tmp, sizeof(str_tmp), "pos_z_%d", pos_arr[playerid][currIndex]);
  45. INI_WriteFloat(file, str_tmp, pos_arr[playerid][pos][2]);
  46. format(str_tmp, sizeof(str_tmp), "pos_a_%d", pos_arr[playerid][currIndex]);
  47. INI_WriteFloat(file, str_tmp, pos_arr[playerid][pos][3]);
  48. format(str_tmp, sizeof(str_tmp), "interior_%d", pos_arr[playerid][currIndex]);
  49. INI_WriteInt(file, str_tmp, pos_arr[playerid][interior]);
  50. format(str_tmp, sizeof(str_tmp), "virtual_world_%d", pos_arr[playerid][currIndex]);
  51. INI_WriteInt(file, str_tmp, pos_arr[playerid][virtual_world]);
  52. format(str_tmp, sizeof(str_tmp), "pos_name_%d", pos_arr[playerid][currIndex]);
  53. INI_WriteString(file, str_tmp, pos_arr[playerid][pos_name]);
  54. INI_Close(file);
  55. return 1;
  56. }
  57.  
  58.  
  59.  
  60. forward LoadPlayerPos_data(playerid,name[],value[]);
  61.  
  62. public LoadPlayerPos_data(playerid,name[],value[])
  63. {
  64. INI_Int("total_saved_pos", pos_arr[playerid][total_saved_pos]);
  65. format(str_tmp, sizeof(str_tmp), "pos_x_%d", pos_arr[playerid][currIndex]);
  66. INI_Float(str_tmp, pos_arr[playerid][pos][0]);
  67. format(str_tmp, sizeof(str_tmp), "pos_y_%d", pos_arr[playerid][currIndex]);
  68. INI_Float(str_tmp, pos_arr[playerid][pos][1]);
  69. format(str_tmp, sizeof(str_tmp), "pos_z_%d", pos_arr[playerid][currIndex]);
  70. INI_Float(str_tmp, pos_arr[playerid][pos][2]);
  71. format(str_tmp, sizeof(str_tmp), "pos_a_%d", pos_arr[playerid][currIndex]);
  72. INI_Float(str_tmp, pos_arr[playerid][pos][3]);
  73. format(str_tmp, sizeof(str_tmp), "interior_%d", pos_arr[playerid][currIndex]);
  74. INI_Int(str_tmp, pos_arr[playerid][interior]);
  75. format(str_tmp, sizeof(str_tmp), "virtual_world_%d", pos_arr[playerid][currIndex]);
  76. INI_Int(str_tmp, pos_arr[playerid][virtual_world]);
  77. format(str_tmp, sizeof(str_tmp), "pos_name_%d", pos_arr[playerid][currIndex]);
  78. INI_String(str_tmp, pos_arr[playerid][pos_name], MAX_POS_NAME_LENGTH+9);
  79. return 1;
  80. }
  81.  
  82. public OnPlayerConnect(playerid)
  83. {
  84. if(!fexist(PlayerPath(playerid)))
  85. {
  86.  
  87. }
  88. else
  89. {
  90. INI_ParseFile(PlayerPath(playerid), "LoadPlayerPos_%s", .bExtra = true, .extra = playerid);
  91. }
  92. return 1;
  93. }
  94.  
  95. GetPosNameFromFile(playerid, f_pos_name[])
  96. {
  97. new fString[32], name[MAX_POS_NAME_LENGTH+9], value[MAX_POS_NAME_LENGTH];
  98. new File:file = fopen(PlayerPath(playerid), io_read);
  99. while(fread(file, fString))
  100. {
  101. if(!sscanf(fString, "s[16]'='s[16]", name, value))
  102. {
  103. if(!strcmp(name, f_pos_name))
  104. {
  105. pos_arr[playerid][pos_name] = value;
  106. //printf("%s", pos_arr[playerid][pos_name]);
  107. return 1;
  108. }
  109. }
  110. }
  111. return 0;
  112. }
  113.  
  114. public OnPlayerCommandText(playerid, cmdtext[])
  115. {
  116. if(!strcmp(cmdtext, "/spos") || !strcmp(cmdtext, "/sp"))
  117. {
  118. if(pos_arr[playerid][total_saved_pos] < 15)
  119. {
  120. ShowPlayerDialog(playerid, DIALOG_NAME, DIALOG_STYLE_INPUT, "~Name your position~", "Give a name to your current position", "Save", "Cancel");
  121. }
  122. else
  123. {
  124. return SendClientMessage(playerid, -1, "ERROR: You've got the maximal amount of saved spots used! Use /rpos to remove a position.");
  125. }
  126. return 1;
  127. }
  128. if(!strcmp(cmdtext, "/lpos") || !strcmp(cmdtext, "/lp"))
  129. {
  130. new str[12], dialog_str[1024];
  131.  
  132. for(new i = 0; i < pos_arr[playerid][total_saved_pos]; i++)
  133. {
  134. format(str, sizeof(str), "pos_name_%d", i);
  135.  
  136. GetPosNameFromFile(playerid, str);
  137.  
  138. format(dialog_str,sizeof(dialog_str), "%s\n%d. %s", dialog_str, i, pos_arr[playerid][pos_name]);
  139. }
  140.  
  141. ShowPlayerDialog(playerid, DIALOG_MAIN, DIALOG_STYLE_LIST, "~Load a position~", dialog_str, "Load", "Cancel");
  142.  
  143. return 1;
  144. }
  145. return 0;
  146. }
  147.  
  148. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
  149. {
  150. if(dialogid == DIALOG_NAME)
  151. {
  152. if(!response)
  153. {
  154. return SendClientMessage(playerid, -1, "FAILURE: Cancelled position saving.");
  155. }
  156. else
  157. {
  158. if(MIN_POS_NAME_LENGTH <= strlen(inputtext) <= MAX_POS_NAME_LENGTH)
  159. {
  160. pos_arr[playerid][currIndex] = pos_arr[playerid][total_saved_pos];
  161.  
  162. pos_arr[playerid][total_saved_pos]++;
  163.  
  164. GetPlayerPos(playerid, pos_arr[playerid][pos][0], pos_arr[playerid][pos][1], pos_arr[playerid][pos][2]);
  165. GetPlayerFacingAngle(playerid, pos_arr[playerid][pos][3]);
  166.  
  167. pos_arr[playerid][interior] = GetPlayerInterior(playerid);
  168. pos_arr[playerid][virtual_world] = GetPlayerVirtualWorld(playerid);
  169.  
  170. new str[128];
  171.  
  172. format(pos_arr[playerid][pos_name], MAX_POS_NAME_LENGTH, "%s", inputtext);
  173.  
  174. SavePlayerPos_data(playerid);
  175.  
  176. format(str, sizeof(str), "SUCCESS: Saved position as %s.(%d)", pos_arr[playerid][pos_name], pos_arr[playerid][currIndex]);
  177. SendClientMessage(playerid, -1, str);
  178. }
  179. }
  180. }
  181. return 1;
  182. }
  183.  
  184. stock SetPlayerPosEx(playerid, Float:x, Float:y , Float:z, Inte, VW, Float:a)
  185. {
  186. if(!IsPlayerInAnyVehicle(playerid)) return SetPlayerPos(playerid, x, y, z), SetPlayerInterior(playerid, Inte), SetPlayerVirtualWorld(playerid, VW), SetPlayerFacingAngle(playerid, a);
  187. else return SetVehiclePos(GetPlayerVehicleID(playerid), x, y, z), SetVehicleZAngle(GetPlayerVehicleID(playerid), a), SetVehicleVirtualWorld(GetPlayerVehicleID(playerid), VW), LinkVehicleToInterior(GetPlayerVehicleID(playerid), Inte);
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement