Advertisement
iPLEOMAX

<ach.inc> //iPLEOMAX, 2011

Aug 18th, 2011
830
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 14.37 KB | None | 0 0
  1. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
  2. /*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
  3. /*     iAchieve - Dynamic Achievement System, Release by iPLEOMAX 2011 ©      */
  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        10                                              //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_SOUND_ID            1130                                            //You can put a music id here..
  57. //#define ACH_ANIM_ON                                                           //use this if you want the textdraw to shine (LAG).
  58.  
  59. enum PLAYER_ACH_DATA
  60. {
  61.     achprogress[MAX_ACHIEVEMENTS+1],
  62.     achieved[MAX_ACHIEVEMENTS+1]
  63. };
  64.  
  65. enum MAIN_ACH_DATA
  66. {
  67.     ACH_WINVALUES,
  68.     ACH_TITLE[32],
  69.     ACH_INFO[128]
  70. };
  71.  
  72. new
  73.     bool:Ach_JustJoined[MAX_PLAYERS],
  74.     Text:DynamicAchTD[MAX_PLAYERS][2],
  75.     Text:AchTD[6],
  76.     ACH_NUM,
  77.     ACH_TIMER,
  78.     ACH_USER[MAX_PLAYERS][PLAYER_ACH_DATA],
  79.     ACH_MAIN[MAX_ACHIEVEMENTS][MAIN_ACH_DATA]
  80. ;
  81.  
  82. /* Achievement Natives:
  83. native CreateAchievement(title[], info[], unlockvalue);
  84. native LoadPlayerAchievements(playerid);
  85. native SetPlayerAchievement(playerid, achid, value);
  86. native GivePlayerAchievement(playerid, achid, value);
  87. native GetPlayerAchievement(playerid, achid);
  88. native bool:DidPlayerAchieve(playerid, achid);
  89. */
  90.  
  91. #if defined FILTERSCRIPT
  92. Hook:ach_OnFilterScriptInit() return Init_AchSystem();
  93. Hook:ach_OnFilterScripExit() return Exit_AchSystem();
  94. #else
  95. Hook:ach_OnGameModeInit() return Init_AchSystem();
  96. Hook:ach_OnGameModeExit() return Exit_AchSystem();
  97. #endif
  98.  
  99.  
  100. Hook:ach_OnPlayerConnect(playerid)
  101. {
  102.     Ach_JustJoined[playerid] = true;
  103.     SetTimerEx("Ach_CJJ", 5000, false, "d", playerid);
  104.    
  105.     LoadPlayerAchievements(playerid);
  106.  
  107.     HideAch(playerid);
  108.  
  109.     DynamicAchTD[playerid][0] = TextDrawCreate(313.000000, 213.000000, "TITLE");
  110.     TextDrawAlignment(DynamicAchTD[playerid][0], 2);
  111.     TextDrawBackgroundColor(DynamicAchTD[playerid][0], 255);
  112.     TextDrawFont(DynamicAchTD[playerid][0], 2);
  113.     TextDrawLetterSize(DynamicAchTD[playerid][0], 0.519999, 1.700000);
  114.     TextDrawColor(DynamicAchTD[playerid][0], -1);
  115.     TextDrawSetOutline(DynamicAchTD[playerid][0], 0);
  116.     TextDrawSetProportional(DynamicAchTD[playerid][0], 1);
  117.     TextDrawSetShadow(DynamicAchTD[playerid][0], 0);
  118.  
  119.     DynamicAchTD[playerid][1] = TextDrawCreate(313.000000, 235.000000, "INFO");
  120.     TextDrawAlignment(DynamicAchTD[playerid][1], 2);
  121.     TextDrawBackgroundColor(DynamicAchTD[playerid][1], 255);
  122.     TextDrawFont(DynamicAchTD[playerid][1], 2);
  123.     TextDrawLetterSize(DynamicAchTD[playerid][1], 0.290000, 1.200000);
  124.     TextDrawColor(DynamicAchTD[playerid][1], -1);
  125.     TextDrawSetOutline(DynamicAchTD[playerid][1], 0);
  126.     TextDrawSetProportional(DynamicAchTD[playerid][1], 1);
  127.     TextDrawSetShadow(DynamicAchTD[playerid][1], 0);
  128.     return true;
  129. }
  130.  
  131. forward Ach_CJJ(playerid);
  132. public Ach_CJJ(playerid)
  133. {
  134.     Ach_JustJoined[playerid] = false;
  135.     return true;
  136. }
  137.  
  138. Hook:ach_OnPlayerDisconnect(playerid, reason)
  139. {
  140.     SavePlayerAchievements(playerid);
  141.    
  142.     for(new a=1; a<=MAX_ACHIEVEMENTS; a++)
  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 :: Advanced Achievement System by iPLEOMAX, 2011 *\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, "ACHIEVEMENT UNLOCKED");
  187.     TextDrawBackgroundColor(AchTD[2], 255);
  188.     TextDrawFont(AchTD[2], 1);
  189.     TextDrawLetterSize(AchTD[2], 0.649999, 2.000000);
  190.     TextDrawColor(AchTD[2], 16711935);
  191.     TextDrawSetOutline(AchTD[2], 0);
  192.     TextDrawSetProportional(AchTD[2], 1);
  193.     TextDrawSetShadow(AchTD[2], 0);
  194.  
  195.     AchTD[3] = TextDrawCreate(495.000000, 194.000000, "Box2");
  196.     TextDrawBackgroundColor(AchTD[3], 255);
  197.     TextDrawFont(AchTD[3], 1);
  198.     TextDrawLetterSize(AchTD[3], 0.000000, 9.100000);
  199.     TextDrawColor(AchTD[3], -1);
  200.     TextDrawSetOutline(AchTD[3], 0);
  201.     TextDrawSetProportional(AchTD[3], 1);
  202.     TextDrawSetShadow(AchTD[3], 1);
  203.     TextDrawUseBox(AchTD[3], 1);
  204.     TextDrawBoxColor(AchTD[3], 90);
  205.     TextDrawTextSize(AchTD[3], 141.000000, 0.000000);
  206.  
  207.     AchTD[4] = TextDrawCreate(450.000000, 192.000000, "Box3");
  208.     TextDrawBackgroundColor(AchTD[4], 255);
  209.     TextDrawFont(AchTD[4], 1);
  210.     TextDrawLetterSize(AchTD[4], 0.000000, 1.700000);
  211.     TextDrawColor(AchTD[4], -1);
  212.     TextDrawSetOutline(AchTD[4], 0);
  213.     TextDrawSetProportional(AchTD[4], 1);
  214.     TextDrawSetShadow(AchTD[4], 1);
  215.     TextDrawUseBox(AchTD[4], 1);
  216.     TextDrawBoxColor(AchTD[4], 16711690);
  217.     TextDrawTextSize(AchTD[4], 182.000000, 0.000000);
  218.  
  219.     AchTD[5] = TextDrawCreate(317.000000, 193.000000, "]                                            ]");
  220.     TextDrawAlignment(AchTD[5], 2);
  221.     TextDrawBackgroundColor(AchTD[5], 255);
  222.     TextDrawFont(AchTD[5], 2);
  223.     TextDrawLetterSize(AchTD[5], 0.500000, 1.600000);
  224.     TextDrawColor(AchTD[5], 16711935);
  225.     TextDrawSetOutline(AchTD[5], 0);
  226.     TextDrawSetProportional(AchTD[5], 1);
  227.     TextDrawSetShadow(AchTD[5], 0);
  228.  
  229.     return true;
  230. }
  231.  
  232. forward Exit_AchSystem();
  233. public Exit_AchSystem()
  234. {
  235.     KillTimer(ACH_TIMER);
  236.     return true;
  237. }
  238.  
  239. forward CreateAchievement(title[], info[], unlockvalue);
  240. public CreateAchievement(title[], info[], unlockvalue)
  241. {
  242.     ACH_NUM++;
  243.  
  244.     format(ACH_MAIN[ACH_NUM][ACH_TITLE], 32, "%s", title);
  245.     format(ACH_MAIN[ACH_NUM][ACH_INFO], 128, "%s", info);
  246.     ACH_MAIN[ACH_NUM][ACH_WINVALUES] = unlockvalue;
  247.  
  248.     if(ACH_NUM > MAX_ACHIEVEMENTS) printf("  **[WARNING] Number of achievements created is exceeding the max allowed limit.");
  249.  
  250.     return ACH_NUM;
  251. }
  252.  
  253. stock GivePlayerAchievement(playerid, achid, value)
  254. {
  255.     ACH_USER[playerid][achprogress][achid] += value;
  256.     return true;
  257. }
  258.  
  259. stock SetPlayerAchievement(playerid, achid, value)
  260. {
  261.     ACH_USER[playerid][achprogress][achid] = value; //Fix2
  262.     return true;
  263. }
  264. stock GetPlayerAchievement(playerid, achid)
  265. {
  266.     return ACH_USER[playerid][achprogress][achid];
  267. }
  268. stock DidPlayerAchieve(playerid, achid)
  269. {
  270.     return ACH_USER[playerid][achieved][achid];
  271. }
  272.  
  273. forward SavePlayerAchievements(playerid);
  274. public SavePlayerAchievements(playerid)
  275. {
  276.     new achtemp[128], achpname[MAX_PLAYER_NAME];
  277.     GetPlayerName( playerid, achpname, sizeof achpname );
  278.     format( achtemp, sizeof achtemp, "achievements/user/%s.ini", achpname ); /*IMP*/
  279.     new INI:ACHNAME = INI_Open(achtemp);
  280.  
  281.     for(new a=1; a<=MAX_ACHIEVEMENTS; a++)
  282.     {
  283.         format(achtemp, sizeof achtemp, "ach%i", a);
  284.         INI_WriteInt(ACHNAME, achtemp, ACH_USER[playerid][achprogress][a]);
  285.         format(achtemp, sizeof achtemp, "unl%i", a);
  286.         INI_WriteInt(ACHNAME, achtemp, ACH_USER[playerid][achieved][a]);
  287.     }
  288.     INI_Close(ACHNAME);
  289.     return true;
  290. }
  291.  
  292. forward LoadPlayerAchievements(playerid);
  293. public LoadPlayerAchievements(playerid)
  294. {
  295.     new achtemp[128], achpname[MAX_PLAYER_NAME];
  296.     GetPlayerName( playerid, achpname, sizeof achpname );
  297.     format( achtemp, sizeof achtemp, "achievements/user/%s.ini", achpname );
  298.     if(fexist(achtemp))
  299.     {
  300.         INI_ParseFile(achtemp, "load_achfile", .bExtra = true, .extra = playerid);
  301.     }
  302.     return true;
  303. }
  304.  
  305. forward load_achfile(playerid, name[], value[]);
  306. public load_achfile(playerid, name[], value[])
  307. {
  308.     new achentry[6];
  309.     for(new a=1; a<=MAX_ACHIEVEMENTS; a++)
  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=1; a<=MAX_ACHIEVEMENTS; a++)
  326.         {
  327.             if(ACH_USER[i][achieved][a] != 1 && ACH_MAIN[a][ACH_WINVALUES] != 0)
  328.             {
  329.                 if(ACH_USER[i][achprogress][a] >= ACH_MAIN[a][ACH_WINVALUES])
  330.                 {
  331.                     ACH_USER[i][achieved][a] = 1;
  332.                     ShowPlayerAchievement(i, a);
  333.                     CallLocalFunction("OnPlayerAchieve", "dd", i, a);
  334.                 }
  335.             }
  336.         }
  337.     }
  338.     return true;
  339. }
  340.  
  341. forward ShowPlayerAchievement(playerid, achid);
  342. public ShowPlayerAchievement(playerid, achid)
  343. {
  344.     TextDrawShowForPlayer(playerid, AchTD[0]);
  345.     TextDrawShowForPlayer(playerid, AchTD[1]);
  346.     TextDrawShowForPlayer(playerid, AchTD[2]);
  347.     TextDrawShowForPlayer(playerid, AchTD[3]);
  348.     TextDrawShowForPlayer(playerid, AchTD[4]);
  349.     TextDrawShowForPlayer(playerid, AchTD[5]);
  350.     TextDrawSetString(DynamicAchTD[playerid][0], ACH_MAIN[achid][ACH_TITLE]);
  351.     TextDrawSetString(DynamicAchTD[playerid][1], ACH_MAIN[achid][ACH_INFO]);
  352.     TextDrawShowForPlayer(playerid, DynamicAchTD[playerid][0]);
  353.     TextDrawShowForPlayer(playerid, DynamicAchTD[playerid][1]);
  354.     PlayerPlaySound(playerid, ACH_SOUND_ID, 0, 0, 0);
  355.     SetTimerEx("HideAch", 7000, false, "d", playerid);
  356.     return true;
  357. }
  358.  
  359. forward HideAch(playerid);
  360. public HideAch(playerid)
  361. {
  362.     PlayerPlaySound(playerid, 0, 0, 0, 0);
  363.     TextDrawHideForPlayer(playerid, AchTD[0]);
  364.     TextDrawHideForPlayer(playerid, AchTD[1]);
  365.     TextDrawHideForPlayer(playerid, AchTD[2]);
  366.     TextDrawHideForPlayer(playerid, AchTD[3]);
  367.     TextDrawHideForPlayer(playerid, AchTD[4]);
  368.     TextDrawHideForPlayer(playerid, AchTD[5]);
  369.     TextDrawHideForPlayer(playerid, DynamicAchTD[playerid][0]);
  370.     TextDrawHideForPlayer(playerid, DynamicAchTD[playerid][1]);
  371.     return true;
  372. }
  373.  
  374. forward AnimateAchTD(var); //(Creates Lag i assume)
  375. public AnimateAchTD(var)
  376. {
  377.     switch(var)
  378.     {
  379.         case 0: TextDrawSetString(AchTD[2], "~g~~w~A~g~CHIEVEMENT UNLOCKED");
  380.         case 1: TextDrawSetString(AchTD[2], "~g~A~w~C~g~HIEVEMENT UNLOCKED");
  381.         case 2: TextDrawSetString(AchTD[2], "~g~AC~w~H~g~IEVEMENT UNLOCKED");
  382.         case 3: TextDrawSetString(AchTD[2], "~g~ACH~w~I~g~EVEMENT UNLOCKED");
  383.         case 4: TextDrawSetString(AchTD[2], "~g~ACHI~w~E~g~VEMENT UNLOCKED");
  384.         case 5: TextDrawSetString(AchTD[2], "~g~ACHIE~w~V~g~EMENT UNLOCKED");
  385.         case 6: TextDrawSetString(AchTD[2], "~g~ACHIEV~w~E~g~MENT UNLOCKED");
  386.         case 7: TextDrawSetString(AchTD[2], "~g~ACHIEVE~w~M~g~ENT UNLOCKED");
  387.         case 8: TextDrawSetString(AchTD[2], "~g~ACHIEVEM~w~E~g~NT UNLOCKED");
  388.         case 9: TextDrawSetString(AchTD[2], "~g~ACHIEVEME~w~N~g~T UNLOCKED");
  389.         case 10: TextDrawSetString(AchTD[2], "~g~ACHIEVEMEN~w~T~g~ UNLOCKED");
  390.         case 11: TextDrawSetString(AchTD[2], "~g~ACHIEVEMENT ~w~U~g~NLOCKED");
  391.         case 12: TextDrawSetString(AchTD[2], "~g~ACHIEVEMENT U~w~N~g~LOCKED");
  392.         case 13: TextDrawSetString(AchTD[2], "~g~ACHIEVEMENT UN~w~L~g~OCKED");
  393.         case 14: TextDrawSetString(AchTD[2], "~g~ACHIEVEMENT UNL~w~O~g~CKED");
  394.         case 15: TextDrawSetString(AchTD[2], "~g~ACHIEVEMENT UNLO~w~C~g~KED");
  395.         case 16: TextDrawSetString(AchTD[2], "~g~ACHIEVEMENT UNLOC~w~K~g~ED");
  396.         case 17: TextDrawSetString(AchTD[2], "~g~ACHIEVEMENT UNLOCK~w~E~g~D");
  397.         case 18: TextDrawSetString(AchTD[2], "~g~ACHIEVEMENT UNLOCKE~w~D");
  398.     }
  399.     if(var >= 18 && var != 1337) { var = 0; } else { var++; }
  400.     if(var != 1337) { SetTimerEx("AnimateAchTD", 100, false, "d", var); }
  401.     else { TextDrawSetString(AchTD[2], "~g~ACHIEVEMENT UNLOCKED");}
  402.     return true;
  403. }
  404.  
  405. forward OnPlayerAchieve(playerid, achid);
  406.  
  407. /* ~~~~  ~~~~~~~~~~~~~~~~~~ End of File || ENJOY! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement