Advertisement
Guest User

iAchieve.inc

a guest
Apr 20th, 2020
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.22 KB | None | 0 0
  1. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
  2. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
  3. /* iAchieve - Dynamic Achievement System, Release by iPLEOMAX 2011(Atualizado por xbruno1000x) ©*/
  4. /* Just another include which saves players achievements */
  5. /* And Notifies them on Unlock. You can also give Money,Score,Car w/e.. */
  6. /* Callback: OnPlayerAchieve( playerid, achid ) {} */
  7. /* */
  8. /* This system uses Y_INI, Y_HOOKS & foreach by Y_Less. (BIG THANKS!) */
  9. /* In order to save things correctly, make sure you create this folder: */
  10. /* >- scriptfiles\achievements\user (Here is where all ach-userfiles save) */
  11. /* */
  12. /* Note: Do not release any other edit of this INC without my permission. */
  13. /* Thanks to; */
  14. /* - Y_Less for his includes */
  15. /* - LCI Ach System by Deskoft for inspiration. Not it's edit btw. */
  16. /* - Me for everything else. */
  17. /* */
  18. /* Please do not remove any credits! Thanks for downloading! */
  19. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
  20. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
  21.  
  22. #if defined iach
  23. #endinput
  24. #endif
  25.  
  26. #if !defined _samp_included
  27. #tryinclude <a_samp>
  28. #if !defined _samp_included
  29. #error Unable to load a_samp.inc
  30. #endif
  31. #endif
  32. #if !defined MAX_INI_STRING
  33. #tryinclude <YSI\y_ini>
  34. #if !defined MAX_INI_STRING
  35. #error Unable to load YSI\y_ini.inc Please check your includes.
  36. #endif
  37. #endif
  38. #if !defined Hook
  39. #tryinclude <YSI\y_hooks>
  40. #if !defined Hook
  41. #error Unable to load YSI\y_hooks.inc Please check your includes.
  42. #endif
  43. #endif
  44. #if !defined foreach
  45. #tryinclude <foreach>
  46. #if !defined foreach
  47. #error Unable to load foreach.inc Please check your includes.
  48. #endif
  49. #endif
  50.  
  51. #define iach //ignore this.
  52. #define MAX_ACHIEVEMENTS 25 //Number of achievements you'll have in your GM.
  53. #define ACH_TIMER_UPDATE 2 //Check for Unlocks Per Player Per Second.
  54. #define ACH_USER_NAME "achievements/user/%s.ini" //Path where user achievements are saving.
  55. #define ACH_SHOW_TIME 8 //Seconds for the "Ach Unlocked" to stay on screen.
  56. //#define ACH_ANIM_ON //use this if you want the textdraw to shine (LAG).
  57.  
  58. enum PLAYER_ACH_DATA
  59. {
  60. achprogress[MAX_ACHIEVEMENTS+1],
  61. achieved[MAX_ACHIEVEMENTS+1]
  62. };
  63.  
  64. enum MAIN_ACH_DATA
  65. {
  66. ACH_WINVALUES,
  67. ACH_TITLE[32],
  68. ACH_INFO[128]
  69. };
  70.  
  71. new
  72. bool:Ach_JustJoined[MAX_PLAYERS],
  73. Text:DynamicAchTD[MAX_PLAYERS][2],
  74. Text:AchTD[6],
  75. ACH_NUM,
  76. ACH_TIMER,
  77. ACH_USER[MAX_PLAYERS][PLAYER_ACH_DATA],
  78. ACH_MAIN[MAX_ACHIEVEMENTS][MAIN_ACH_DATA]
  79. ;
  80.  
  81. /* Achievement Natives:
  82. native CreateAchievement(title[], info[], unlockvalue);
  83. native LoadPlayerAchievements(playerid);
  84. native SetPlayerAchievement(playerid, achid, value);
  85. native GivePlayerAchievement(playerid, achid, value);
  86. native GetPlayerAchievement(playerid, achid);
  87. native bool:DidPlayerAchieve(playerid, achid);
  88. */
  89.  
  90. #if defined FILTERSCRIPT
  91. Hook:ach_OnFilterScriptInit() return Init_AchSystem();
  92. Hook:ach_OnFilterScripExit() return Exit_AchSystem();
  93. #else
  94. Hook:ach_OnGameModeInit() return Init_AchSystem();
  95. Hook:ach_OnGameModeExit() return Exit_AchSystem();
  96. #endif
  97.  
  98.  
  99. Hook:ach_OnPlayerConnect(playerid)
  100. {
  101. Ach_JustJoined[playerid] = true;
  102. SetTimerEx("Ach_CJJ", 5000, false, "d", playerid);
  103.  
  104. LoadPlayerAchievements(playerid);
  105.  
  106. HideAch(playerid);
  107.  
  108. DynamicAchTD[playerid][0] = TextDrawCreate(313.000000, 213.000000, "TITLE");
  109. TextDrawAlignment(DynamicAchTD[playerid][0], 2);
  110. TextDrawBackgroundColor(DynamicAchTD[playerid][0], 255);
  111. TextDrawFont(DynamicAchTD[playerid][0], 3);
  112. TextDrawLetterSize(DynamicAchTD[playerid][0], 0.519999, 1.700000);
  113. TextDrawColor(DynamicAchTD[playerid][0], -1);
  114. TextDrawSetOutline(DynamicAchTD[playerid][0], 0);
  115. TextDrawSetProportional(DynamicAchTD[playerid][0], 1);
  116. TextDrawSetShadow(DynamicAchTD[playerid][0], 0);
  117.  
  118. DynamicAchTD[playerid][1] = TextDrawCreate(313.000000, 235.000000, "INFO");
  119. TextDrawAlignment(DynamicAchTD[playerid][1], 2);
  120. TextDrawBackgroundColor(DynamicAchTD[playerid][1], 255);
  121. TextDrawFont(DynamicAchTD[playerid][1], 3);
  122. TextDrawLetterSize(DynamicAchTD[playerid][1], 0.290000, 1.200000);
  123. TextDrawColor(DynamicAchTD[playerid][1], -1);
  124. TextDrawSetOutline(DynamicAchTD[playerid][1], 0);
  125. TextDrawSetProportional(DynamicAchTD[playerid][1], 1);
  126. TextDrawSetShadow(DynamicAchTD[playerid][1], 0);
  127. return true;
  128. }
  129.  
  130. forward Ach_CJJ(playerid);
  131. public Ach_CJJ(playerid)
  132. {
  133. Ach_JustJoined[playerid] = false;
  134. return true;
  135. }
  136.  
  137. Hook:ach_OnPlayerDisconnect(playerid, reason)
  138. {
  139. SavePlayerAchievements(playerid);
  140.  
  141. for(new a=0; a<MAX_ACHIEVEMENTS; a++)
  142. {
  143.  
  144. ACH_USER[playerid][achprogress][a] = 0;
  145. ACH_USER[playerid][achieved][a] = 0; //Fixed.
  146. }
  147.  
  148. return true;
  149. }
  150.  
  151. forward Init_AchSystem();
  152. public Init_AchSystem()
  153. {
  154. print("\n * iAchieve :: Sistema de conquistas feito por iPLEOMAX, 2011, atualizado por xbruno1000x, 2020 *\n");
  155.  
  156. ACH_TIMER = SetTimer("AchCheck", ACH_TIMER_UPDATE*1000, true);
  157.  
  158. #if defined ACH_ANIM_ON
  159. AnimateAchTD(0);
  160. #endif
  161.  
  162. AchTD[0] = TextDrawCreate(495.000000, 190.000000, "Box0");
  163. TextDrawBackgroundColor(AchTD[0], 255);
  164. TextDrawFont(AchTD[0], 1);
  165. TextDrawLetterSize(AchTD[0], 0.000000, 9.100000);
  166. TextDrawColor(AchTD[0], -1);
  167. TextDrawSetOutline(AchTD[0], 0);
  168. TextDrawSetProportional(AchTD[0], 1);
  169. TextDrawSetShadow(AchTD[0], 1);
  170. TextDrawUseBox(AchTD[0], 1);
  171. TextDrawBoxColor(AchTD[0], 90);
  172. TextDrawTextSize(AchTD[0], 141.000000, 0.000000);
  173.  
  174. AchTD[1] = TextDrawCreate(495.000000, 190.000000, "Box1");
  175. TextDrawBackgroundColor(AchTD[1], 255);
  176. TextDrawFont(AchTD[1], 1);
  177. TextDrawLetterSize(AchTD[1], 0.000000, 4.299999);
  178. TextDrawColor(AchTD[1], -1);
  179. TextDrawSetOutline(AchTD[1], 0);
  180. TextDrawSetProportional(AchTD[1], 1);
  181. TextDrawSetShadow(AchTD[1], 1);
  182. TextDrawUseBox(AchTD[1], 1);
  183. TextDrawBoxColor(AchTD[1], -241);
  184. TextDrawTextSize(AchTD[1], 141.000000, 0.000000);
  185.  
  186. AchTD[2] = TextDrawCreate(187.000000, 191.000000, "~r~TROFEU CONQUISTADO!");
  187. TextDrawBackgroundColor(AchTD[2], 255);
  188. TextDrawFont(AchTD[2], 3);
  189. TextDrawLetterSize(AchTD[2], 0.649999, 2.000000);
  190. TextDrawSetOutline(AchTD[2], 0);
  191. TextDrawSetProportional(AchTD[2], 1);
  192. TextDrawSetShadow(AchTD[2], 0);
  193.  
  194. AchTD[3] = TextDrawCreate(495.000000, 194.000000, "Box2");
  195. TextDrawBackgroundColor(AchTD[3], 255);
  196. TextDrawFont(AchTD[3], 1);
  197. TextDrawLetterSize(AchTD[3], 0.000000, 9.100000);
  198. TextDrawColor(AchTD[3], -1);
  199. TextDrawSetOutline(AchTD[3], 0);
  200. TextDrawSetProportional(AchTD[3], 1);
  201. TextDrawSetShadow(AchTD[3], 1);
  202. TextDrawUseBox(AchTD[3], 1);
  203. TextDrawBoxColor(AchTD[3], 90);
  204. TextDrawTextSize(AchTD[3], 141.000000, 0.000000);
  205.  
  206. AchTD[4] = TextDrawCreate(450.000000, 192.000000, "Box3");
  207. TextDrawBackgroundColor(AchTD[4], 255);
  208. TextDrawFont(AchTD[4], 1);
  209. TextDrawLetterSize(AchTD[4], 0.000000, 1.700000);
  210. TextDrawColor(AchTD[4], -1);
  211. TextDrawSetOutline(AchTD[4], 0);
  212. TextDrawSetProportional(AchTD[4], 1);
  213. TextDrawSetShadow(AchTD[4], 1);
  214. TextDrawUseBox(AchTD[4], 1);
  215. TextDrawBoxColor(AchTD[4], 16711690);
  216. TextDrawTextSize(AchTD[4], 182.000000, 0.000000);
  217.  
  218. AchTD[5] = TextDrawCreate(317.000000, 193.000000, "] ]");
  219. TextDrawAlignment(AchTD[5], 2);
  220. TextDrawBackgroundColor(AchTD[5], 255);
  221. TextDrawFont(AchTD[5], 2);
  222. TextDrawLetterSize(AchTD[5], 0.500000, 1.600000);
  223. TextDrawColor(AchTD[5], 0xF60000AA);
  224. TextDrawSetOutline(AchTD[5], 0);
  225. TextDrawSetProportional(AchTD[5], 1);
  226. TextDrawSetShadow(AchTD[5], 0);
  227.  
  228. return true;
  229. }
  230.  
  231. forward Exit_AchSystem();
  232. public Exit_AchSystem()
  233. {
  234. KillTimer(ACH_TIMER);
  235. return true;
  236. }
  237.  
  238. forward CreateAchievement(title[], info[], unlockvalue);
  239. public CreateAchievement(title[], info[], unlockvalue)
  240. {
  241. format(ACH_MAIN[ACH_NUM][ACH_TITLE], 32, "%s", title);
  242. format(ACH_MAIN[ACH_NUM][ACH_INFO], 128, "%s", info);
  243. ACH_MAIN[ACH_NUM][ACH_WINVALUES] = unlockvalue;
  244.  
  245. if(ACH_NUM > MAX_ACHIEVEMENTS) printf(" **[WARNING] Number of achievements created is exceeding the max allowed limit.");
  246.  
  247. return ACH_NUM, ACH_NUM++;
  248. }
  249.  
  250. stock GivePlayerAchievement(playerid, achid, value)
  251. {
  252. ACH_USER[playerid][achprogress][achid] += value;
  253. return true;
  254. }
  255.  
  256. stock SetPlayerAchievement(playerid, achid, value)
  257. {
  258. ACH_USER[playerid][achprogress][achid] = value; //Fix2
  259. return true;
  260. }
  261. stock GetPlayerAchievement(playerid, achid)
  262. {
  263. return ACH_USER[playerid][achprogress][achid];
  264. }
  265. stock DidPlayerAchieve(playerid, achid)
  266. {
  267. return ACH_USER[playerid][achieved][achid];
  268. }
  269.  
  270. forward SavePlayerAchievements(playerid);
  271. public SavePlayerAchievements(playerid)
  272. {
  273. new achtemp[128], achpname[MAX_PLAYER_NAME];
  274. GetPlayerName( playerid, achpname, sizeof achpname );
  275. format( achtemp, sizeof achtemp, "achievements/user/%s.ini", achpname ); /*IMP*/
  276. new INI:ACHNAME = INI_Open(achtemp);
  277.  
  278. for(new a=0; a<MAX_ACHIEVEMENTS; a++)
  279. {
  280.  
  281. format(achtemp, sizeof achtemp, "ach%i", a);
  282. INI_WriteInt(ACHNAME, achtemp, ACH_USER[playerid][achprogress][a]);
  283. format(achtemp, sizeof achtemp, "unl%i", a);
  284. INI_WriteInt(ACHNAME, achtemp, ACH_USER[playerid][achieved][a]);
  285. }
  286. INI_Close(ACHNAME);
  287. return true;
  288. }
  289.  
  290. forward LoadPlayerAchievements(playerid);
  291. public LoadPlayerAchievements(playerid)
  292. {
  293. new achtemp[128], achpname[MAX_PLAYER_NAME];
  294. GetPlayerName( playerid, achpname, sizeof achpname );
  295. format( achtemp, sizeof achtemp, "achievements/user/%s.ini", achpname );
  296. if(fexist(achtemp))
  297. {
  298.  
  299. INI_ParseFile(achtemp, "load_achfile", .bExtra = true, .extra = playerid);
  300. }
  301. return true;
  302. }
  303.  
  304. forward load_achfile(playerid, name[], value[]);
  305. public load_achfile(playerid, name[], value[])
  306. {
  307. new achentry[6];
  308. for(new a=0; a<MAX_ACHIEVEMENTS; a++)
  309. {
  310.  
  311. format(achentry, sizeof achentry, "ach%i", a);
  312. INI_Int(achentry, ACH_USER[playerid][achprogress][a]);
  313. format(achentry, sizeof achentry, "unl%i", a);
  314. INI_Int(achentry, ACH_USER[playerid][achieved][a]);
  315. }
  316. return true;
  317. }
  318.  
  319. forward AchCheck();
  320. public AchCheck()
  321. {
  322. foreach(Player, i)
  323. {
  324. if(Ach_JustJoined[i]) continue;
  325. for(new a=0; a<MAX_ACHIEVEMENTS; a++)
  326. {
  327.  
  328. if(ACH_USER[i][achieved][a] != 1 && ACH_MAIN[a][ACH_WINVALUES] != 0)
  329. {
  330.  
  331. if(ACH_USER[i][achprogress][a] >= ACH_MAIN[a][ACH_WINVALUES])
  332. {
  333.  
  334. ACH_USER[i][achieved][a] = 1;
  335. ShowPlayerAchievement(i, a);
  336. CallLocalFunction("OnPlayerAchieve", "dd", i, a);
  337. }
  338. }
  339. }
  340. }
  341. return true;
  342. }
  343.  
  344. forward ShowPlayerAchievement(playerid, achid);
  345. public ShowPlayerAchievement(playerid, achid)
  346. {
  347. PlayAudioStreamForPlayer(playerid, "https://dl.dropboxusercontent.com/s/muzs4n0nio458w3/trofeu.mp3?dl=0");
  348. TextDrawShowForPlayer(playerid, AchTD[0]);
  349. TextDrawShowForPlayer(playerid, AchTD[1]);
  350. TextDrawShowForPlayer(playerid, AchTD[2]);
  351. TextDrawShowForPlayer(playerid, AchTD[3]);
  352. TextDrawShowForPlayer(playerid, AchTD[4]);
  353. TextDrawShowForPlayer(playerid, AchTD[5]);
  354. TextDrawSetString(DynamicAchTD[playerid][0], ACH_MAIN[achid][ACH_TITLE]);
  355. TextDrawSetString(DynamicAchTD[playerid][1], ACH_MAIN[achid][ACH_INFO]);
  356. TextDrawShowForPlayer(playerid, DynamicAchTD[playerid][0]);
  357. TextDrawShowForPlayer(playerid, DynamicAchTD[playerid][1]);
  358. SetTimerEx("HideAch", 9000, false, "d", playerid);
  359. return true;
  360. }
  361.  
  362. forward HideAch(playerid);
  363. public HideAch(playerid)
  364. {
  365. PlayerPlaySound(playerid, 0, 0, 0, 0);
  366. TextDrawHideForPlayer(playerid, AchTD[0]);
  367. TextDrawHideForPlayer(playerid, AchTD[1]);
  368. TextDrawHideForPlayer(playerid, AchTD[2]);
  369. TextDrawHideForPlayer(playerid, AchTD[3]);
  370. TextDrawHideForPlayer(playerid, AchTD[4]);
  371. TextDrawHideForPlayer(playerid, AchTD[5]);
  372. TextDrawHideForPlayer(playerid, DynamicAchTD[playerid][0]);
  373. TextDrawHideForPlayer(playerid, DynamicAchTD[playerid][1]);
  374. return true;
  375. }
  376.  
  377. forward AnimateAchTD(var); //(Creates Lag i assume)
  378. public AnimateAchTD(var)
  379. {
  380. switch(var)
  381. {
  382.  
  383. case 0: TextDrawSetString(AchTD[2], "~r~Trofeu Conquistado!");
  384. case 1: TextDrawSetString(AchTD[2], "~r~Trofeu Conquistado!");
  385. }
  386. if(var >= 18 && var != 1337) { var = 0; } else { var++; }
  387. if(var != 1337) { SetTimerEx("AnimateAchTD", 100, false, "d", var); }
  388. else { TextDrawSetString(AchTD[2], "~r~Trofeu Conquistado!");}
  389. return true;
  390. }
  391.  
  392. forward OnPlayerAchieve(playerid, achid);
  393.  
  394. /* ~~~~ ~~~~~~~~~~~~~~~~~~ End of File || ENJOY! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement