Rejack

Achievements v0.1b by Rejack

Mar 19th, 2013 (edited)
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 27.13 KB | None | 0 0
  1. #include < amxmodx >
  2. #include < fakemeta >
  3. #include < fakemeta_util >
  4. #include < hamsandwich >
  5. #include < xs >
  6. #include < nvault >
  7.  
  8. /* Defines and Pragma */
  9. #define gPrefix "Galactic"
  10.  
  11. /* Natives */
  12. native get_user_cash( id );
  13. native set_user_cash( id, gCash );
  14. /* Enums */
  15. enum _:Teams
  16. {
  17.     FM_TEAM_UNASSIGNED,
  18.     FM_TEAM_T,
  19.     FM_TEAM_CT,
  20.     FM_TEAM_SPECTATOR
  21. };
  22.  
  23. /* Variables */
  24. new Title[ 512 ];
  25. new gVault;
  26.  
  27. /* Booleans */
  28. new bool:Escape;
  29.  
  30. /* Arrays */
  31. new Achievements[ 33 ];
  32. new Sprayed[ 33 ];
  33. new Decal1[ 33 ];
  34. new Decal2[ 33 ];
  35. new Decal3[ 33 ];
  36. new SecretI[ 33 ];
  37. new Nerd[ 33 ];
  38. new Bully[ 33 ];
  39. new KnifeDamage[ 33 ];
  40. new Connect[ 33 ];
  41. new Escaper[ 33 ];
  42. new CTKills[ 33 ];
  43. new TKills[ 33 ];
  44. new SkullBasher[ 33 ];
  45. new Kills[ 33 ];
  46. new Assassin[ 33 ];
  47.  
  48. new Sound[ 33 ];
  49. new msg_Spray[ 33 ];
  50. new msg_Connect[ 33 ];
  51. new msg_Disconnect[ 33 ];
  52. new ScreenFlash[ 33 ];
  53. new LavaSplash[ 33 ];
  54.  
  55. /* Float */
  56. new Float:MakeDamage[ 33 ];
  57. new Float:TakeDamage[ 33 ];
  58.  
  59. new const g_szAchievementSound[] = "Galactic-Jail/earned.wav";
  60.  
  61. public plugin_init()
  62. {
  63.     register_plugin( "JailBreak Achievements", "0.1b", "Rejack" );
  64.    
  65.     gVault      = nvault_open( "jbach" );
  66.    
  67.     register_event( "23",       "FwdDecal",     "a", "1=112" );
  68.    
  69.     register_event( "23",       "FwdSpray",     "a", "1=112" );
  70.    
  71.     register_event( "HLTV",     "FwdNewRound",      "a", "1=0", "2=0" );
  72.    
  73.     register_event( "DeathMsg", "FwdDeathMsg",  "a" );
  74.    
  75.     register_event( "DeathMsg", "FwdDeathMsg2", "a" );
  76.    
  77.     register_event( "DeathMsg", "FwdDeathMsg3", "a" );
  78.    
  79.     register_event( "DeathMsg", "FwdDeathMsg4", "a" );
  80.    
  81.     register_clcmd( "say /ach", "cmdAch" );
  82.    
  83.     register_clcmd( "say citcalaG", "cmdSecretI" );
  84.    
  85.     register_clcmd( "add_decal", "adddecal" );
  86.    
  87.     RegisterHam( Ham_TakeDamage,    "player", "FwdTakeDamage", 0 );
  88.    
  89.     RegisterHam( Ham_TakeDamage,    "player", "FwdKnifeDamage", 0 );
  90.    
  91.     new szAddress[ 22 ]
  92.     get_user_ip( 0, szAddress, charsmax(szAddress) )
  93.     if( !equal( "81.218.109.90:8886", szAddress ) )
  94.         set_fail_state( "You canno't steal this mod mother fucker :D" );
  95. }
  96. public plugin_end( )
  97. {
  98.     nvault_close( gVault );
  99. }
  100.  
  101. public plugin_precache( )
  102. {
  103.     precache_sound( g_szAchievementSound );
  104. }
  105.  
  106.  
  107. public Save( id )
  108. {
  109.     new gVaultKey[ 64 ], gVaultData[ 256 ];
  110.    
  111.     new SaveID[ 32 ], SaveIP[ 32 ];
  112.    
  113.     get_user_authid( id, SaveID, 31 );
  114.    
  115.     get_user_ip( id, SaveIP, 31 );
  116.    
  117.    
  118.     if ( equal( "STEAM_ID_LAN", SaveID ) )  format( gVaultKey, 63, "%s-Achievements", SaveIP );
  119.    
  120.     else    format( gVaultKey, 63, "%s-Achievements", SaveID );
  121.    
  122.    
  123.     format( gVaultData, 255, "%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%f#%f#%i#%i#%i#%i#%i",
  124.     Achievements[ id ], Sprayed[ id ], Decal1[ id ], Decal2[ id ], Decal3[ id ],
  125.     SecretI[ id ], Nerd[ id ], Bully[ id ], KnifeDamage[ id ], Connect[ id ],
  126.     Escaper[ id ], CTKills[ id ], TKills[ id ], SkullBasher[ id ], Assassin[ id ],
  127.     MakeDamage[ id ], TakeDamage[ id ],
  128.     Sound[ id ], msg_Spray[ id ], msg_Connect[ id ], msg_Disconnect[ id ], ScreenFlash[ id ], LavaSplash[ id ] );
  129.    
  130.     nvault_set( gVault, gVaultKey, gVaultData );
  131. }
  132.  
  133. public Load( id )
  134. {
  135.     new gVaultKey[ 64 ], gVaultData[ 256 ];
  136.     new SaveID[ 32 ], SaveIP[ 32 ];
  137.     get_user_authid( id, SaveID, 31 );
  138.     get_user_ip( id, SaveIP, 31 );
  139.  
  140.    
  141.     if ( equal( "STEAM_ID_LAN", SaveID ) )  format( gVaultKey, 63, "%s-Achievements", SaveIP );
  142.    
  143.     else    format( gVaultKey, 63, "%s-Achievements", SaveID );
  144.    
  145.    
  146.     format( gVaultData, 255, "%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%i#%f#%f#%i#%i#%i#%i#%i",
  147.     Achievements[ id ], Sprayed[ id ], Decal1[ id ], Decal2[ id ], Decal3[ id ],
  148.     SecretI[ id ], Nerd[ id ], Bully[ id ], KnifeDamage[ id ], Connect[ id ],
  149.     Escaper[ id ], CTKills[ id ], TKills[ id ], SkullBasher[ id ], Assassin[ id ],
  150.     MakeDamage[ id ], TakeDamage[ id ],
  151.     Sound[ id ], msg_Spray[ id ], msg_Connect[ id ], msg_Disconnect[ id ], ScreenFlash[ id ], LavaSplash[ id ] );
  152.    
  153.     nvault_get( gVault, gVaultKey, gVaultData, 255 );
  154.    
  155.     replace_all( gVaultData, 255, "#", " " );
  156.    
  157.     new set1[ 32 ];
  158.     new set2[ 32 ];
  159.     new set3[ 32 ];
  160.     new set4[ 32 ];
  161.     new set5[ 32 ];
  162.     new set6[ 32 ];
  163.     new set7[ 32 ];
  164.     new set8[ 32 ];
  165.     new set9[ 32 ];
  166.     new set10[ 32 ];
  167.     new set11[ 32 ];
  168.     new set12[ 32 ];
  169.     new set13[ 32 ];
  170.     new set14[ 32 ];
  171.     new set15[ 32 ];
  172.     new set16[ 32 ];
  173.     new set17[ 32 ];
  174.    
  175.     new setSound[ 32 ];
  176.     new setSpray[ 32 ];
  177.     new setConnect[ 32 ];
  178.     new setDisconnect[ 32 ];
  179.     new setFlash[ 32 ];
  180.     new setLava[ 32 ];
  181.    
  182.     parse( gVaultData, set1, 31, set2, 31, set3, 31, set4, 31, set5, 31, set6, 31, set7, 31, set8, 31, set9, 31, set10, 31,
  183.     set11, 31, set12, 31, set13, 31, set14, 31, set15, 31, set16, 31, set17, 31, setSound, 31, setSpray, 31, setConnect, 31, setDisconnect, 31, setFlash, 31, setLava, 31 );
  184.      
  185.     Achievements[ id ]  = str_to_num( set1 );   // Total...
  186.     Sprayed[ id ]       = str_to_num( set2 );   // 1 | 2 | 3
  187.     Decal1[ id ]        = str_to_num( set3 );   // 4
  188.     Decal2[ id ]        = str_to_num( set4 );   // 5
  189.     Decal3[ id ]        = str_to_num( set5 );   // 6
  190.     SecretI[ id ]       = str_to_num( set6 );   // 7
  191.     Nerd[ id ]      = str_to_num( set7 );   // 8
  192.     Bully[ id ]     = str_to_num( set8 );   // 9
  193.     KnifeDamage[ id ]   = str_to_num( set9 );   // 10
  194.     Connect[ id ]       = str_to_num( set10 );  // 11 | 12
  195.     Escaper[ id ]       = str_to_num( set11 );  // 13
  196.     CTKills[ id ]       = str_to_num( set12 );  // 16
  197.     TKills[ id ]        = str_to_num( set13 );  // 15
  198.     SkullBasher[ id ]   = str_to_num( set14 );  // 14
  199.     Assassin[ id ]      = str_to_num( set15 );  // 17
  200.    
  201.     MakeDamage[ id ]        = str_to_float( set16 );    // 9
  202.     TakeDamage[ id ]        = str_to_float( set17 );    // 10
  203.    
  204.     Sound[ id ]     = str_to_num( setSound );
  205.     msg_Spray[ id ]     = str_to_num( setSpray );
  206.     msg_Connect[ id ]   = str_to_num( setConnect );
  207.     msg_Disconnect[ id ]    = str_to_num( setDisconnect );
  208.     ScreenFlash[ id ]   = str_to_num( setFlash );
  209.     LavaSplash[ id ]        = str_to_num( setLava );
  210. }
  211. public client_putinserver( id )
  212. {
  213.     Load( id );
  214.    
  215.     set_task( 2.0, "CheckConnect", id );
  216. }
  217.  
  218. public client_disconnect( id )
  219. {
  220.     Save( id );
  221.    
  222.     static maxp;
  223.     maxp = get_maxplayers( );
  224.    
  225.     for( new i=1; i<=maxp; i+=1 )
  226.     {
  227.         if ( msg_Disconnect[ i ] == 0 )
  228.             ColorChat( i, "^4%s^1 has disconnected from the server! ^3(^4 %d/17 Achievements ^3)", szName( id ), Achievements[ id ] );
  229.     }
  230. }
  231. public CheckConnect( id )
  232. {
  233.     static maxp;
  234.     maxp = get_maxplayers( );
  235.    
  236.     for( new i=1; i<=maxp; i+=1 )
  237.     {
  238.         if ( msg_Connect[ i ] == 0 )
  239.             ColorChat( i, "^4%s^1 has connected to the server! ^3(^4 %d/17 Achievements ^3)", szName( id ), Achievements[ id ] );
  240.     }
  241.    
  242.     if ( Connect[ id ] == 500 )     return PLUGIN_HANDLED;
  243.    
  244.     Connect[ id ] += 1;
  245.    
  246.     if ( Connect[ id ] == 1 )
  247.     {
  248.         LevelUp( id );
  249.        
  250.         Achievements[ id ] += 1;
  251.        
  252.         ColorChat( 0, "^4%s^1 has earned the^3 Baby Steps ^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( id ), Achievements[ id ]  );
  253.        
  254.         set_user_cash( id, get_user_cash( id ) + 3000 );
  255.        
  256.         Save( id );
  257.     }
  258.    
  259.     if ( Connect[ id ] == 500 )
  260.     {
  261.         LevelUp( id );
  262.        
  263.         Achievements[ id ] += 1;
  264.        
  265.         ColorChat( 0, "^4%s^1 has earned the^3 Galactic Fan ^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( id ), Achievements[ id ]  );
  266.        
  267.         set_user_cash( id, get_user_cash( id ) + 65000 );
  268.        
  269.         Save( id );
  270.     }
  271.    
  272.     return PLUGIN_CONTINUE;
  273. }
  274.  
  275.  
  276. public FwdNewRound( )
  277. {
  278.     remove_task( 989 );
  279.     Escape = true;
  280.     set_task( 30.0, "cmdEscape", 989 );
  281.    
  282.     static maxp;
  283.     maxp = get_maxplayers( );
  284.    
  285.     for( new i=1; i<=maxp; i+=1 )   Kills[ i ] = 0;
  286. }
  287.  
  288. public FwdDeathMsg( )
  289. {
  290.     new attacker    = read_data( 1 );
  291.    
  292.     new victim  = read_data( 2 );
  293.    
  294.     new Headshot    = read_data( 3 );
  295.    
  296.    
  297.     if ( attacker == victim )       return PLUGIN_HANDLED;
  298.    
  299.     if ( !is_user_alive( attacker ) )   return PLUGIN_HANDLED;
  300.    
  301.    
  302.     if ( Headshot )
  303.     {
  304.         if ( SkullBasher[ attacker ] == 50 )    return PLUGIN_HANDLED;
  305.        
  306.         SkullBasher[ attacker ] += 1;
  307.        
  308.         if ( SkullBasher[ attacker ] == 50 )
  309.         {
  310.             LevelUp( attacker );
  311.            
  312.             Achievements[ attacker ] += 1;
  313.            
  314.             ColorChat( 0, "^4%s^1 has earned the^3 Skull Basher ^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( attacker ), Achievements[ attacker ]  );
  315.        
  316.             set_user_cash( attacker, get_user_cash( attacker ) + 25000 );
  317.        
  318.             Save( attacker );
  319.         }
  320.     }
  321.    
  322.     return PLUGIN_CONTINUE;
  323. }
  324.  
  325. public FwdDeathMsg2( )
  326. {
  327.     new attacker    = read_data( 1 );
  328.    
  329.     new victim  = read_data( 2 );
  330.    
  331.    
  332.     if ( attacker == victim )       return PLUGIN_HANDLED;
  333.    
  334.     if ( !is_user_alive( attacker ) )   return PLUGIN_HANDLED;
  335.    
  336.    
  337.     if ( fm_get_user_team( victim ) == FM_TEAM_CT )
  338.     {
  339.         if ( CTKills[ attacker ] == 100 )   return PLUGIN_HANDLED;
  340.        
  341.         CTKills[ attacker ] += 1;
  342.        
  343.         if ( CTKills[ attacker ] == 100 )
  344.         {
  345.             LevelUp( attacker );
  346.            
  347.             Achievements[ attacker ] += 1;
  348.            
  349.             ColorChat( 0, "^4%s^1 has earned the^3 Bribed Guard ^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( attacker ), Achievements[ attacker ]  );
  350.        
  351.             set_user_cash( attacker, get_user_cash( attacker ) + 22500 );
  352.        
  353.             Save( attacker );
  354.         }
  355.     }
  356.     if ( fm_get_user_team( victim ) == FM_TEAM_T )
  357.     {
  358.         if ( TKills[ attacker ] == 500 )    return PLUGIN_HANDLED;
  359.        
  360.         TKills[ attacker ] += 1;
  361.        
  362.         if ( TKills[ attacker ] == 500 )
  363.         {
  364.             LevelUp( attacker );
  365.            
  366.             Achievements[ attacker ] += 1;
  367.            
  368.             ColorChat( 0, "^4%s^1 has earned the^3 Convicted Prisoner ^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( attacker ), Achievements[ attacker ]  );
  369.        
  370.             set_user_cash( attacker, get_user_cash( attacker ) + 22500 );
  371.        
  372.             Save( attacker );
  373.         }
  374.     }
  375.    
  376.     return PLUGIN_CONTINUE;
  377.        
  378. }
  379.  
  380. public FwdDeathMsg3( )
  381. {
  382.     new attacker    = read_data( 1 );
  383.    
  384.     new victim  = read_data( 2 );
  385.    
  386.    
  387.     if ( attacker == victim )       return PLUGIN_HANDLED;
  388.    
  389.     if ( !is_user_alive( attacker ) )   return PLUGIN_HANDLED;
  390.    
  391.    
  392.     if ( fm_get_user_team( victim ) == FM_TEAM_CT )
  393.     {
  394.         if ( Assassin[ attacker ] == 1 )    return PLUGIN_HANDLED;
  395.        
  396.         Kills[ attacker ] += 1;
  397.        
  398.         if ( Kills[ attacker ] == 3 )
  399.         {
  400.             LevelUp( attacker );
  401.            
  402.             Assassin[ attacker ] = 1;
  403.            
  404.             Achievements[ attacker ] += 1;
  405.            
  406.             ColorChat( 0, "^4%s^1 has earned the^3 3 With 1 Stone^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( attacker ), Achievements[ attacker ]  );
  407.        
  408.             set_user_cash( attacker, get_user_cash( attacker ) + 12500 );
  409.        
  410.             Save( attacker );
  411.         }
  412.     }
  413.    
  414.     return PLUGIN_CONTINUE;
  415.        
  416. }
  417.  
  418. public FwdDeathMsg4( )
  419. {
  420.     new attacker    = read_data( 1 );
  421.    
  422.     new victim  = read_data( 2 );
  423.    
  424.    
  425.     if ( attacker == victim )       return PLUGIN_HANDLED;
  426.    
  427.     if ( !is_user_alive( attacker ) )   return PLUGIN_HANDLED;
  428.    
  429.     if ( Escape )
  430.     {
  431.         if ( Escaper[ attacker ] == 1 ) return PLUGIN_HANDLED;
  432.        
  433.         if ( fm_get_user_team( victim ) != FM_TEAM_CT ) return PLUGIN_HANDLED;
  434.        
  435.         Escaper[ attacker ] = 1;
  436.        
  437.         if ( Escaper[ attacker ] == 1 )
  438.         {
  439.             LevelUp( attacker );
  440.            
  441.             Achievements[ attacker ] += 1;
  442.            
  443.             ColorChat( 0, "^4%s^1 has earned the^3 Escaper ^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( attacker ), Achievements[ attacker ]  );
  444.        
  445.             set_user_cash( attacker, get_user_cash( attacker ) + 17500 );
  446.        
  447.             Save( attacker );
  448.         }
  449.     }
  450.    
  451.     return PLUGIN_CONTINUE;
  452.        
  453. }
  454. public cmdEscape( ) Escape = false;
  455.    
  456. public FwdTakeDamage( victim, inflictor, attacker, Float:damage, damage_bits )
  457. {
  458.     if ( TakeDamage[ victim ] >= 75000.0 )      return PLUGIN_HANDLED;
  459.    
  460.     if ( MakeDamage[ attacker ] >= 50000.0 )    return PLUGIN_HANDLED;
  461.    
  462.     if ( !is_user_alive( attacker ) )       return PLUGIN_HANDLED;
  463.    
  464.    
  465.     TakeDamage[ victim ] += damage;
  466.    
  467.     MakeDamage[ attacker ] += damage;
  468.    
  469.    
  470.     if ( TakeDamage[ victim ] >= 75000.0 )
  471.     {
  472.         LevelUp( victim );
  473.        
  474.         Nerd[ victim ] = 1;
  475.        
  476.         Achievements[ victim ] += 1;
  477.        
  478.         ColorChat( 0, "^4%s^1 has earned the^3 Nerd^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( victim ), Achievements[ victim ]  );
  479.        
  480.         set_user_cash( victim, get_user_cash( victim ) + 17000 );
  481.        
  482.         Save( victim );
  483.     }
  484.    
  485.     if ( MakeDamage[ attacker ] >= 50000.0 )
  486.     {
  487.         LevelUp( attacker );
  488.        
  489.         Bully[ attacker ] = 1;
  490.        
  491.         Achievements[ attacker ] += 1;
  492.        
  493.         ColorChat( 0, "^4%s^1 has earned the^3 Bully ^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( attacker ), Achievements[ attacker ]  );
  494.        
  495.         set_user_cash( attacker, get_user_cash( attacker ) + 17000 );
  496.        
  497.         Save( attacker );
  498.     }
  499.    
  500.     return PLUGIN_CONTINUE;
  501. }
  502. public FwdKnifeDamage( victim, inflictor, attacker, Float:damage, damage_bits )
  503. {
  504.     if ( KnifeDamage[ attacker ] == 1 )     return PLUGIN_HANDLED;
  505.    
  506.     if ( !is_user_alive( attacker ) )       return PLUGIN_HANDLED;
  507.    
  508.     if ( damage > 750.0 )
  509.     {
  510.         LevelUp( attacker );
  511.        
  512.         KnifeDamage[ attacker ] = 1;
  513.        
  514.         Achievements[ attacker ] += 1;
  515.        
  516.         ColorChat( 0, "^4%s^1 has earned the^3 Hulk ^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( attacker ), Achievements[ attacker ]  );
  517.        
  518.         set_user_cash( attacker, get_user_cash( attacker ) + 6500 );
  519.        
  520.         Save( attacker );
  521.     }
  522.    
  523.     return PLUGIN_CONTINUE;
  524. }
  525. public client_say( id )
  526. {  
  527.     new szMsg[ 192 ];
  528.     read_argv( 1, szMsg, charsmax( szMsg ) );
  529.    
  530.     if ( equali( szMsg, "esarhp terces eht yas" ) )
  531.     {
  532.         ColorChat( id, "YES!" );
  533.        
  534.         return PLUGIN_HANDLED;
  535.     }
  536.     return PLUGIN_CONTINUE;
  537. }
  538. public cmdSecretI( id )
  539. {
  540.     if ( SecretI[ id ] == 0 )
  541.     {
  542.         LevelUp( id );
  543.        
  544.         SecretI[ id ] = 1;
  545.        
  546.         Achievements[ id ] += 1;
  547.        
  548.         ColorChat( 0, "^4%s^1 has earned the^3 Secret Phrase I^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( id ), Achievements[ id ]  );
  549.        
  550.         set_user_cash( id, get_user_cash( id ) + 35000 );
  551.        
  552.         Save( id );
  553.     }
  554.    
  555.     return PLUGIN_HANDLED;
  556. }
  557. public cmdOpen( )
  558. {
  559.     PushEntity( "func_button" );
  560.    
  561.     return PLUGIN_HANDLED;
  562. }
  563.  
  564. public adddecal( id )
  565.     Sprayed[ id ] += 10;
  566.  
  567. public cmdAch( id )
  568. {
  569.     formatex( Title, sizeof (Title) - 1, "Achievements Menu^n\yAuthor:\r Rejack^n^n\wCompleted Achievements: %s%d\w/17^nPage:\r", (Achievements[id]==17)?"\w":"\d", Achievements[id] );
  570.    
  571.     new gMenu = menu_create( Title, "subAch" );
  572.    
  573.     menu_additem( gMenu, "View Self Stats^n", "0" );
  574.     menu_additem( gMenu, "View Players Stats^n", "1" );
  575.     menu_additem( gMenu, "Options", "2" );
  576.    
  577.     menu_display( id, gMenu );
  578. }
  579.  
  580. public subAch( id, gMenu, gItem )
  581. {
  582.     if ( gItem == MENU_EXIT )
  583.     {
  584.         menu_destroy( gMenu );
  585.        
  586.         return PLUGIN_HANDLED;
  587.     }
  588.    
  589.     switch ( gItem )
  590.     {
  591.         case 0:     AchMenu( id );
  592.         case 1:     cmdPlayers( id );
  593.         case 2:     cmdOptions( id );
  594.     }
  595.    
  596.     menu_destroy( gMenu );
  597.    
  598.     return PLUGIN_HANDLED;
  599. }
  600.  
  601. public cmdPlayers( id )
  602. {
  603.     new szItem[ 128 ];
  604.    
  605.     new gMenu = menu_create("Players Achievements Menu^n\yAuthor:\r Rejack^n", "subPlayers");
  606.    
  607.     new players[ 32 ], pnum, tempid, szTempid[ 10 ];
  608.    
  609.     get_players( players, pnum );
  610.    
  611.     for( new i ; i < pnum; i++ )
  612.     {
  613.         tempid = players[ i ];
  614.        
  615.         num_to_str(tempid, szTempid, charsmax(szTempid));
  616.        
  617.         formatex( szItem, sizeof (szItem) - 1, "%s \y(\d %d/17 Achievements \y)", szName( tempid ), Achievements[ tempid ] );
  618.        
  619.         menu_additem( gMenu, szItem, szTempid );
  620.        
  621.     }
  622.     menu_display( id, gMenu );
  623. }
  624.  
  625. public subPlayers( id, gMenu, gItem )
  626. {
  627.     if( gItem == MENU_EXIT )
  628.     {
  629.         menu_destroy( gMenu );
  630.        
  631.         return PLUGIN_HANDLED;
  632.     }
  633.    
  634.     cmdPlayers( id );
  635.    
  636.     menu_destroy(gMenu);
  637.    
  638.     return PLUGIN_HANDLED;
  639. }
  640.  
  641. public cmdOptions( id )
  642. {
  643.     new szItem[ 128 ];
  644.    
  645.     new gMenu = menu_create("Achievements Options Menu^n\yAuthor:\r Rejack^n", "subOptions");
  646.    
  647.     formatex( szItem, sizeof (szItem) - 1, "Sound \y(\r%s\y)",          (Sound[id]==1)?"Off":"On");
  648.     menu_additem( gMenu, szItem, "0" );
  649.    
  650.     formatex( szItem, sizeof (szItem) - 1, "Spray Message \y(\r%s\y)",      (msg_Spray[id]==1)?"Off":"On");
  651.     menu_additem( gMenu, szItem, "1" );
  652.    
  653.     formatex( szItem, sizeof (szItem) - 1, "Connect Message \y(\r%s\y)",    (msg_Connect[id]==1)?"Off":"On");
  654.     menu_additem( gMenu, szItem, "2" );
  655.    
  656.     formatex( szItem, sizeof (szItem) - 1, "Disconnect Message \y(\r%s\y)", (msg_Disconnect[id]==1)?"Off":"On");
  657.     menu_additem( gMenu, szItem, "3" );
  658.    
  659.     formatex( szItem, sizeof (szItem) - 1, "Screen Flash \y(\r%s\y)",       (ScreenFlash[id]==1)?"Off":"On");
  660.     menu_additem( gMenu, szItem, "4" );
  661.    
  662.     formatex( szItem, sizeof (szItem) - 1, "Lava Splash \y(\r%s\y)",        (LavaSplash[id]==1)?"Off":"On");
  663.     menu_additem( gMenu, szItem, "5" );
  664.    
  665.    
  666.     menu_display( id, gMenu );
  667. }
  668.  
  669. public subOptions( id, gMenu, gItem )
  670. {
  671.     if ( gItem == MENU_EXIT )
  672.     {
  673.         menu_destroy( gMenu );
  674.        
  675.         return PLUGIN_HANDLED;
  676.     }
  677.    
  678.     switch ( gItem )
  679.     {
  680.         case 0:
  681.         {
  682.             if ( Sound[ id ] == 0 )
  683.                 Sound[ id ] = 1;
  684.             else Sound[ id ] = 0;
  685.         }
  686.        
  687.         case 1:
  688.         {
  689.             if ( msg_Spray[ id ] == 0 )
  690.                 msg_Spray[ id ] = 1;
  691.             else msg_Spray[ id ] = 0;
  692.         }
  693.        
  694.         case 2:
  695.         {
  696.             if ( msg_Connect[ id ] == 0 )
  697.                 msg_Connect[ id ] = 1;
  698.             else msg_Connect[ id ] = 0;
  699.         }
  700.        
  701.         case 3:
  702.         {
  703.             if ( msg_Disconnect[ id ] == 0 )
  704.                 msg_Disconnect[ id ] = 1;
  705.             else msg_Disconnect[ id ] = 0;
  706.         }
  707.        
  708.         case 4:
  709.         {
  710.             if ( ScreenFlash[ id ] == 0 )
  711.                 ScreenFlash[ id ] = 1;
  712.             else ScreenFlash[ id ] = 0;
  713.         }
  714.        
  715.         case 5:
  716.         {
  717.             if ( LavaSplash[ id ] == 0 )
  718.                 LavaSplash[ id ] = 1;
  719.             else LavaSplash[ id ] = 0;
  720.         }
  721.     }
  722.     cmdOptions( id );
  723.    
  724.     menu_destroy( gMenu );
  725.    
  726.     return PLUGIN_HANDLED;
  727. }
  728.  
  729. public AchMenu( id )
  730. {
  731.     new szItem[ 512 ];
  732.    
  733.     formatex( Title, sizeof (Title) - 1, "Achievements Menu^n\yAuthor:\r Rejack^n^n\wCompleted Achievements: %s%d\w/17^nPage:\r", (Achievements[id]==17)?"\w":"\d", Achievements[id] );
  734.    
  735.     new gMenu = menu_create( Title, "subSelfAch" );
  736.    
  737.     if ( Sprayed[id]>=50 )  formatex( szItem, sizeof (szItem) - 1, "Artist \r*Completed*" );
  738.     else formatex( szItem, sizeof (szItem) - 1, "Artist \y(\d%d/50\y) \r[\yReward: 6500 CASH\r]", Sprayed[ id ] );
  739.     menu_additem( gMenu, szItem, "0" );
  740.    
  741.     if ( Sprayed[id]>=170 ) formatex( szItem, sizeof (szItem) - 1, "Hands of Gold \r*Completed*" );
  742.     else formatex( szItem, sizeof (szItem) - 1, "Hands of Gold \y(\d%d/170\y) \r[\yReward: 13500 CASH\r]", Sprayed[ id ] );
  743.     menu_additem( gMenu, szItem, "1" );
  744.    
  745.     if ( Sprayed[id]==300 ) formatex( szItem, sizeof (szItem) - 1, "Graffiti Maker \r*Completed*" );
  746.     else formatex( szItem, sizeof (szItem) - 1, "Graffiti Maker \y(\d%d/300\y) \r[\yReward: 20000 CASH\r]", Sprayed[ id ] );
  747.     menu_additem( gMenu, szItem, "2" );
  748.    
  749.     if ( Decal1[id]==1 )    formatex( szItem, sizeof (szItem) - 1, "Bronze Decal \r*Completed*" );
  750.     else formatex( szItem, sizeof (szItem) - 1, "Bronze Decal \r[\yReward: 8500 CASH\r]" );
  751.     menu_additem( gMenu, szItem, "3" );
  752.    
  753.     if ( Decal2[id]==1 )    formatex( szItem, sizeof (szItem) - 1, "Silver Decal \r*Completed*" );
  754.     else formatex( szItem, sizeof (szItem) - 1, "Silver Decal \r[\yReward: 17500 CASH\r]" );
  755.     menu_additem( gMenu, szItem, "4" );
  756.    
  757.     if ( Decal3[id]==1 )    formatex( szItem, sizeof (szItem) - 1, "Golden Decal \r*Completed*" );
  758.     else formatex( szItem, sizeof (szItem) - 1, "Golden Decal \r[\yReward: 25000 CASH\r]" );
  759.     menu_additem( gMenu, szItem, "5" );
  760.    
  761.     if ( SecretI[id]==1 )   formatex( szItem, sizeof (szItem) - 1, "Secret Phrase \r*Completed*" );
  762.     else formatex( szItem, sizeof (szItem) - 1, "Secret Phrase \r[\yReward: 35000 CASH\r]" );
  763.     menu_additem( gMenu, szItem, "6" );
  764.    
  765.     if ( Nerd[id]==1 )  formatex( szItem, sizeof (szItem) - 1, "Nerd \r*Completed*" );
  766.     else formatex( szItem, sizeof (szItem) - 1, "Nerd \y(\d%.1f/75000\y) \r[\yReward: 17000 CASH\r]", TakeDamage[ id ] );
  767.     menu_additem( gMenu, szItem, "7" );
  768.    
  769.     if ( Bully[id]==1 ) formatex( szItem, sizeof (szItem) - 1, "Bully \r*Completed*" );
  770.     else formatex( szItem, sizeof (szItem) - 1, "Bully \y(\d%.1f/50000\y) \r[\yReward: 17000 CASH\r]", MakeDamage[ id ] );
  771.     menu_additem( gMenu, szItem, "8" );
  772.    
  773.     if ( KnifeDamage[id]==1 )   formatex( szItem, sizeof (szItem) - 1, "Headshot Monster \r*Completed*" );
  774.     else formatex( szItem, sizeof (szItem) - 1, "Hulk \r[\yReward: 6500 CASH\r]" );
  775.     menu_additem( gMenu, szItem, "9" );
  776.    
  777.     if ( Connect[id]>=1 )   formatex( szItem, sizeof (szItem) - 1, "Baby Steps \r*Completed*" );
  778.     else formatex( szItem, sizeof (szItem) - 1, "Baby Steps \r[\yReward: 3000 CASH\r]" );
  779.     menu_additem( gMenu, szItem, "10" );
  780.    
  781.     if ( Connect[id]==500 ) formatex( szItem, sizeof (szItem) - 1, "Galactic Fan \r*Completed*" );
  782.     else formatex( szItem, sizeof (szItem) - 1, "Galactic Fan \y(\d%d/500\y) \r[\yReward: 65000 CASH\r]", Connect[ id ] );
  783.     menu_additem( gMenu, szItem, "11" );
  784.    
  785.     if ( Escaper[id]==1 )   formatex( szItem, sizeof (szItem) - 1, "Escaper \r*Completed*" );
  786.     else formatex( szItem, sizeof (szItem) - 1, "Escaper \r[\yReward: 17500 CASH\r]"  );
  787.     menu_additem( gMenu, szItem, "12" );
  788.    
  789.     if ( SkullBasher[id]==50 )  formatex( szItem, sizeof (szItem) - 1, "Skull Basher \r*Completed*" );
  790.     else formatex( szItem, sizeof (szItem) - 1, "Skull Basher \y(\d%d/50\y) \r[\yReward: 25000 CASH\r]", SkullBasher[ id ]  );
  791.     menu_additem( gMenu, szItem, "13" );
  792.    
  793.     if ( TKills[id]==500 )  formatex( szItem, sizeof (szItem) - 1, "Bribed Guard \r*Completed*" );
  794.     else formatex( szItem, sizeof (szItem) - 1, "Bribed Guard \y(\d%d/500\y) \r[\yReward: 22500 CASH\r]", TKills[ id ]  );
  795.     menu_additem( gMenu, szItem, "14" );
  796.    
  797.     if ( CTKills[id]==100 ) formatex( szItem, sizeof (szItem) - 1, "Convicted Prisoner \r*Completed*" );
  798.     else formatex( szItem, sizeof (szItem) - 1, "Convicted Prisoner \y(\d%d/100\y) \r[\yReward: 22500 CASH\r]", CTKills[ id ] );
  799.     menu_additem( gMenu, szItem, "15" );
  800.    
  801.     if ( Assassin[id]==1 )  formatex( szItem, sizeof (szItem) - 1, "3 With 1 Stone \r*Completed*" );
  802.     else formatex( szItem, sizeof (szItem) - 1, "3 With 1 Stone \r[\yReward: 12500 CASH\r]" );
  803.     menu_additem( gMenu, szItem, "16" );
  804.    
  805.     menu_display( id, gMenu );
  806. }
  807.  
  808. public subSelfAch( id, gMenu, gItem )
  809. {
  810.     if ( gItem == MENU_EXIT )
  811.     {
  812.         menu_destroy( gMenu );
  813.         return PLUGIN_HANDLED;
  814.     }
  815.    
  816.     AchMenu( id );
  817.    
  818.     return PLUGIN_HANDLED;
  819. }
  820.  
  821. public FwdDecal( )
  822. {
  823.     new id = read_data(2 );
  824.    
  825.     if ( !is_user_alive( id ) ) return PLUGIN_HANDLED;
  826.    
  827.    
  828.     new iOrigin[ 3 ];
  829.    
  830.     new Float:vecOrigin[ 3 ];
  831.    
  832.     new Float:vecDirection[ 3 ];
  833.    
  834.     new Float:vecStop[ 3 ];
  835.    
  836.     new Float:vecStart[ 3 ];
  837.    
  838.    
  839.     iOrigin[ 0 ] = read_data( 3 );
  840.    
  841.     iOrigin[ 1 ] = read_data( 4 );
  842.    
  843.     iOrigin[ 2 ] = read_data( 5 );
  844.    
  845.    
  846.     IVecFVec( iOrigin, vecOrigin );
  847.    
  848.     velocity_by_aim( id, 5, vecDirection );
  849.    
  850.     xs_vec_add( vecOrigin, vecDirection, vecStop );
  851.    
  852.     xs_vec_mul_scalar( vecDirection, -1.0, vecDirection );
  853.    
  854.     xs_vec_add( vecOrigin, vecDirection, vecStart );
  855.    
  856.     engfunc( EngFunc_TraceLine, vecStart, vecStop, IGNORE_MONSTERS, -1, 0 );
  857.    
  858.     get_tr2( 0, TR_vecPlaneNormal, vecDirection );
  859.    
  860.     vecDirection[ 2 ] = 0.0;
  861.    
  862.     xs_vec_normalize( vecDirection, vecDirection );
  863.    
  864.     xs_vec_mul_scalar( vecDirection, 5.0, vecDirection );
  865.    
  866.     xs_vec_add( vecOrigin, vecDirection, vecStart );
  867.    
  868.     xs_vec_copy( vecStart, vecStop );
  869.    
  870.     vecStop[ 2 ] -= 9999.0;
  871.    
  872.     engfunc( EngFunc_TraceLine, vecStart, vecStop, IGNORE_MONSTERS, -1, 0 );
  873.    
  874.     get_tr2( 0, TR_vecEndPos, vecStop );
  875.    
  876.     if ( msg_Spray[ id ] == 0 )
  877.         ColorChat( id, "You have sprayed^4 %.1f units^1 above the^3 ground^1!", ( vecStart[ 2 ] - vecStop[ 2 ] ) );
  878.    
  879.     if ( vecStart[ 2 ] - vecStop[ 2 ] > 370.0 )
  880.     {
  881.         if ( Decal3[ id ] != 0 )    return PLUGIN_CONTINUE;
  882.        
  883.         LevelUp( id );
  884.        
  885.         Decal3[ id ] = 1;
  886.        
  887.         Achievements[ id ] += 1;
  888.        
  889.         ColorChat( 0, "^4%s^1 has earned the^3 Golden Decal^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( id ), Achievements[ id ]  );
  890.        
  891.         set_user_cash( id, get_user_cash( id ) + 8500 );
  892.        
  893.         Save( id );
  894.     }
  895.    
  896.     if ( vecStart[ 2 ] - vecStop[ 2 ] > 350.0 )
  897.     {
  898.         if ( Decal2[ id ] != 0 )    return PLUGIN_CONTINUE;
  899.        
  900.         LevelUp( id );
  901.        
  902.         Decal2[ id ] = 1;
  903.        
  904.         Achievements[ id ] += 1;
  905.        
  906.         ColorChat( 0, "^4%s^1 has earned the^3 Silver Decal^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( id ), Achievements[ id ]  );
  907.        
  908.         set_user_cash( id, get_user_cash( id ) + 17500 );
  909.        
  910.         Save( id );
  911.     }
  912.    
  913.     if ( vecStart[ 2 ] - vecStop[ 2 ] > 270.0 )
  914.     {
  915.         if ( Decal1[ id ] != 0 )    return PLUGIN_CONTINUE;
  916.        
  917.         LevelUp( id );
  918.        
  919.         Decal1[ id ] = 1;
  920.        
  921.         Achievements[ id ] += 1;
  922.        
  923.         ColorChat( 0, "^4%s^1 has earned the^3 Bronze Decal^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( id ), Achievements[ id ]  );
  924.        
  925.         set_user_cash( id, get_user_cash( id ) + 20000 );
  926.        
  927.         Save( id );
  928.     }
  929.    
  930.     return PLUGIN_CONTINUE;
  931. }
  932. public FwdSpray( )
  933. {
  934.     new id = read_data(2 );
  935.    
  936.     if ( !is_user_alive( id ) ) return PLUGIN_HANDLED;
  937.    
  938.     if ( Sprayed[ id ] >= 300 ) return PLUGIN_HANDLED;
  939.    
  940.     Sprayed[ id ] += 1;
  941.    
  942.     if ( Sprayed[ id ] == 50 )
  943.     {
  944.         LevelUp( id );
  945.        
  946.         Achievements[ id ] += 1;
  947.        
  948.         ColorChat( 0, "^4%s^1 has earned the^3 Artist^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( id ), Achievements[ id ]  );
  949.        
  950.         set_user_cash( id, get_user_cash( id ) + 6500 );
  951.        
  952.         Save( id );
  953.     }
  954.    
  955.     if ( Sprayed[ id ] == 170 )
  956.     {
  957.        
  958.         LevelUp( id );
  959.        
  960.         Achievements[ id ] += 1;
  961.        
  962.         ColorChat( 0, "^4%s^1 has earned the^3 Hands of Gold^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( id ), Achievements[ id ]  );
  963.        
  964.         set_user_cash( id, get_user_cash( id ) + 13500 );
  965.        
  966.         Save( id );
  967.     }
  968.    
  969.     if ( Sprayed[ id ] == 300 )
  970.     {
  971.        
  972.         LevelUp( id );
  973.        
  974.         Achievements[ id ] += 1;
  975.        
  976.         ColorChat( 0, "^4%s^1 has earned the^3 Graffiti Maker^4 Achievement^1! (^3 %d/17^4 Achievements ^1)", szName( id ), Achievements[ id ]  );
  977.        
  978.         set_user_cash( id, get_user_cash( id ) + 20000 );
  979.        
  980.         Save( id );
  981.     }
  982.    
  983.     return PLUGIN_CONTINUE;
  984. }
  985.  
  986. public LevelUp( id )
  987. {
  988.     if ( ScreenFlash[ id ] == 0 )
  989.     {
  990.         message_begin( MSG_ONE, get_user_msgid( "ScreenFade" ), {0,0,0}, id );
  991.        
  992.         write_short( 1<<10 );
  993.        
  994.         write_short( 1<<10 );
  995.        
  996.         write_short( 0 );
  997.        
  998.         write_byte( 255 );
  999.        
  1000.         write_byte( 0 );
  1001.        
  1002.         write_byte( 0 );
  1003.        
  1004.         write_byte( 100 );
  1005.        
  1006.         message_end( );
  1007.     }
  1008.    
  1009.     if ( Sound[ id ] == 0 )
  1010.         emit_sound( id, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1011.    
  1012.     if ( LavaSplash[ id ] == 0 )
  1013.         cmdLava( id );
  1014. }
  1015.  
  1016. cmdLava( const index )
  1017. {
  1018.     new iOrigin[ 3 ];
  1019.    
  1020.     get_user_origin( index, iOrigin, 3 );
  1021.    
  1022.     message_begin( MSG_PVS, SVC_TEMPENTITY, iOrigin )
  1023.    
  1024.     write_byte( TE_LAVASPLASH );
  1025.    
  1026.     write_coord( iOrigin[ 0 ] );
  1027.    
  1028.     write_coord( iOrigin[ 1 ] );
  1029.    
  1030.     write_coord( iOrigin[ 2 ] );
  1031.    
  1032.     message_end( );
  1033. }
  1034.  
  1035. /* Stocks */
  1036. stock ColorChat( const id, const string[], any:... )
  1037. {
  1038.     new msg[ 191 ], players[ 32 ], count = 1;
  1039.    
  1040.     static len; len = formatex( msg, charsmax( msg ), "^1[^4 %s ^1] ", gPrefix );
  1041.    
  1042.     vformat( msg[ len ], charsmax( msg ) - len, string, 3 );
  1043.    
  1044.     if( id )  players[ 0 ] = id;
  1045.    
  1046.     else    get_players( players,count,"ch" );
  1047.    
  1048.     for ( new i = 0; i < count; i++ )
  1049.     {
  1050.         if( is_user_connected( players[ i ] ) )
  1051.         {
  1052.             message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "SayText" ), _, players[ i ] );
  1053.            
  1054.             write_byte( players[ i ] );
  1055.            
  1056.             write_string( msg );
  1057.            
  1058.             message_end( );
  1059.         }
  1060.     }
  1061. }
  1062.  
  1063. stock PushEntity( const szClassname[] )
  1064. {
  1065.     static szClass[ 32 ], target[ 32 ], ent = -1, door;
  1066.    
  1067.     while( ( ent = fm_find_ent_by_class( ent, szClassname ) ) )
  1068.     {                  
  1069.         pev( ent, pev_target, target, charsmax( target ) );
  1070.        
  1071.         door = engfunc( EngFunc_FindEntityByString, 0, "targetname", target );
  1072.        
  1073.         if( !pev_valid( door ) )
  1074.             continue;
  1075.            
  1076.         pev( door, pev_classname, szClass, charsmax( szClass ) );
  1077.        
  1078.         if( !equali( szClass, "func_door" ) )
  1079.             continue;
  1080.        
  1081.         dllfunc( DLLFunc_Use, ent, 0 );
  1082.     }
  1083. }
  1084.  
  1085. stock szName( const index )
  1086. {
  1087.     static Name[ 32 ];
  1088.    
  1089.     get_user_name( index, Name, charsmax( Name ) );
  1090.    
  1091.     return Name;
  1092. }
  1093.  
  1094. stock fm_get_user_team( id )
  1095.     return get_pdata_int( id, 114 );
Add Comment
Please, Sign In to add comment