Advertisement
Injex

[PAWN] For Play IL 2

Sep 29th, 2020
679
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 69.28 KB | None | 0 0
  1. #define USE_FVAULT
  2.  
  3. /* Includes */
  4.  
  5.     #include < amxmodx >
  6.     #include < amxmisc >
  7.     #include < fakemeta_util >
  8.     #include < cstrike >
  9.     #include < hamsandwich >
  10.    
  11. #if defined USE_FVAULT
  12.     #include < fvault >
  13. #else
  14.     #include < nvault >
  15. #endif
  16.    
  17.     #include < regex >
  18.    
  19. /* Defines */
  20.  
  21.  
  22.     #define REGEX_IP_PATTERN    "\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"
  23.     #define REGEX_STEAMID_PATTERN   "^^STEAM_0:(0|1):\d+$"
  24.    
  25.     #define CASH_KILL       500
  26.     #define CASH_HS         500
  27.     #define CASH_NEXT       1500
  28.     #define NEXT_CASH_TIME      5
  29.    
  30.     #define XP_KILL         1
  31.     #define XP_HS           2
  32.    
  33.     #define GAMBLE_CHANCE       40
  34.     #define GAMBLE_CHANCE_PREMIUM   5
  35.     #define GAMBLE_CHANCE_ALLIN 2
  36.     #define TAX         30
  37.    
  38.     #define BANK_TAX        10
  39.     #define BANK_TAX_PREMIUM    5
  40.    
  41. /* Enums */
  42.  
  43.     enum _:g_mData
  44.     {
  45.         CASH,
  46.         BANK,
  47.         KNIFE,
  48.         gKNIFE,
  49.         gXP,
  50.         gLVL
  51.     };
  52.    
  53.     enum _:g_fData
  54.     {
  55.         Float: GAMETIME,
  56.         Float: NEXTCASH
  57.     };
  58.    
  59.     enum _:g_mMenus
  60.     {
  61.         g_mName[ 32 ],
  62.         g_mClass[ 32 ],
  63.         g_mPrice,
  64.         g_mTime,
  65.         g_mWeapon
  66.     };
  67.    
  68.     enum _:g_mKnives
  69.     {
  70.         g_kName[ 32 ],
  71.         g_kHealth,
  72.         g_kArmor,
  73.         g_mDamage,
  74.         g_kCash,
  75.         g_kPrice,
  76.         g_kPlayerModel,
  77.         g_kPremium,
  78.         g_kSzPlayerModel[ 128 ],
  79.         g_kSzTheModel[ 64 ],
  80.         g_kLevelNeeded
  81.     }
  82.    
  83.     enum _:g_mKnivesModels
  84.     {
  85.         V_MODEL[ 128 ],
  86.         P_MODEL[ 128 ]
  87.     };
  88.    
  89.     enum _: eTopData
  90.     {
  91.         TopName[32],
  92.         TopCash
  93.     }
  94.    
  95. /* Constants & Others */
  96.  
  97.     new const szPrefix[ ] = "Play-IL JailBreak";
  98.     new const szChatPrefix[ ] = "^4[^3 Play-IL ^4]";
  99.    
  100.     new const g_szBeacon[ ][ ] =
  101.     {
  102.         "fvox/blip.wav",
  103.         "sprites/zbeam2.spr"
  104.     };
  105.    
  106.     new const g_szExplosion[ ] = "sprites/zerogxplode.spr";
  107.    
  108.     new const g_szGrenades[ ][ g_mMenus ] =
  109.     {
  110.         { "Explosive", "weapon_hegrenade", 10000, 0, CSW_HEGRENADE },
  111.         { "Flashbang", "weapon_flashbang", 10000, 0, CSW_FLASHBANG },
  112.         { "Gas", "weapon_smokegrenade", 10000, 0, CSW_SMOKEGRENADE }
  113.     };
  114.    
  115.     new const g_szPowerups[ ][ g_mMenus ] =
  116.     {
  117.         { "Godmode", "taskRemoveGodmode", 7000, 5 },
  118.         { "Stealth", "taskRemoveStealth", 9000, 5 },
  119.         { "Camouflage", "taskRemoveCamouflage", 9000, 10 },
  120.         { "Low Gravity", "taskRemoveGravity", 4000, 10 },
  121.         { "Suicide Bomber", "", 6000, 3 },
  122.         { "Super Speed", "taskRemoveSpeed",5000, 5 }
  123.     };
  124.    
  125.     new const g_szKnives[ 16 ][ g_mKnives ] =
  126.     {   // Name         HP  AP      DMG B.Cash  Price       P.M Premium P.Fol               P.Msz   Level
  127.         { "Normal Knife",   0,  0,      100,      00"", "", 0 },
  128.         { "Starter Knife"1,  2,      1120,    5000,       00"", "", 0 },
  129.         { "Coral Knife",    3,  4,      2130,    8000,       00"", "", 0 },
  130.         { "Sharp Knife",    3,  6,      2140,    14000,      00"", "", 0 },
  131.         { "Mordant Knife"6,  7,      3150,    19000,      00"", "", 1 },
  132.         { "Nigger Knife",   7,  10,     3160,    25000,      00"", "", 1 },
  133.         { "Lightsaber",     8,  12,     4170,    31000,      00"", "", 2 },
  134.         { "Dragon Boxer",   10,  14,    4180,    37000,      00"", "", 3 },
  135.         { "Assassin Dagger",    11,  16,    5190,    43000,      00"", "", 3 },
  136.         { "Ghost Knife",    12,  17,    6200,    50000,      00"", "", 3 },
  137.         { "Holy Knife",     13,  18,    6210,    56000,      00"", "", 4 },
  138.         { "Dual Ninja Blades"13,  19,    7220,    64000,      00"", "", 4 },
  139.         { "Anonymous Shell",    16,  19,    9225,    71000,      00"", "", 4 },
  140.         { "Elf Knife",      18,  20,    10, 230,    80000,      00"", "", 5 },
  141.         { "Cyborg Knife",   19,  22,    12, 235,    88000,      00"", "", 5 },
  142.         { "Long Sword",     20,  24,    14, 240,    94000,      00"", "", 6 }
  143.     };
  144.    
  145.     new const g_szKnivesModels[ 16 ][ ] =
  146.     {
  147.         "models/v_knife.mdl",
  148.         "models/Play-IL/Knives/v_knife1.mdl",
  149.         "models/Play-IL/Knives/v_knife2.mdl",
  150.         "models/Play-IL/Knives/v_knife3.mdl",
  151.         "models/Play-IL/Knives/v_knife4.mdl",
  152.         "models/Play-IL/Knives/v_knife5.mdl",
  153.         "models/Play-IL/Knives/v_knife6.mdl",
  154.         "models/Play-IL/Knives/v_knife7.mdl",
  155.         "models/Play-IL/Knives/v_knife8.mdl",
  156.         "models/Play-IL/Knives/v_knife9.mdl",
  157.         "models/Play-IL/Knives/v_knife10.mdl",
  158.         "models/Play-IL/Knives/v_knife11.mdl",
  159.         "models/Play-IL/Knives/v_knife12.mdl",
  160.         "models/Play-IL/Knives/v_knife13.mdl",
  161.         "models/Play-IL/Knives/v_knife14.mdl",
  162.         "models/Play-IL/Knives/v_knife15.mdl"
  163.  
  164.     };
  165.    
  166.     new const gXPLevels[ 46 ] =
  167.     {
  168.         25,
  169.         30,
  170.         40,
  171.         50,
  172.         65,
  173.         75,
  174.         90,
  175.         100,
  176.         125,
  177.         145,
  178.         150,
  179.         175,
  180.         200,
  181.         225,
  182.         250,
  183.         300,
  184.         350,
  185.         375,
  186.         425,
  187.         500,
  188.         550,
  189.         575,
  190.         650,
  191.         725,
  192.         775,
  193.         825,
  194.         850,
  195.         900,
  196.         950,
  197.         1000,
  198.         1050,
  199.         1100,
  200.         1150,
  201.         1250,
  202.         1350,
  203.         1500,
  204.         1750,
  205.         2000,
  206.         2225,
  207.         2500,
  208.         2750,
  209.         3000,
  210.         3250,
  211.         3750,
  212.         4000,
  213.         4500
  214.     };
  215.    
  216.     new const g_szHealthStart   = 300;
  217.     new const g_szArmorStart    = 100;
  218.    
  219.     new const g_szHealth        = 100;
  220.     new const g_szArmor     = 100;
  221.    
  222.     new const g_szHealthAmount  = 25;
  223.     new const g_szArmorAmount   = 25;
  224.    
  225.     new const g_szHealthMax     = 6;
  226.     new const g_szArmorMax      = 6;
  227.    
  228.     new const g_szVault[ ] = "Jail_VAULT";
  229.    
  230.     new g_szBeaconSpirte
  231.     new g_szExplosionSprite;
  232. #if !defined USE_FVAULT
  233.     new g_mVault;
  234. #endif
  235.  
  236. /* Regex */
  237.  
  238.     new Regex: gSteamPattern;
  239.     new Regex: gIPattern;
  240.     new gRegexReturn;
  241.    
  242. /* Booleans */
  243.    
  244.     new bool: bPowerup[ 33 ];
  245.     new bool: bSpeed[ 33 ];
  246.     new bool: bMessage[ 33 ];
  247.    
  248. /* Floats */
  249.    
  250.     new Float: fIndex[ 33 ][ g_fData ];
  251.  
  252. /* Misc */
  253.    
  254.     new szItem[ 512 ];
  255.     new gIndex[ 33 ][ g_mData ];
  256.  
  257. /* Plugin Starts */
  258.  
  259. public plugin_init()
  260. {
  261.     register_plugin( "JailBreak New Shop", "1.0", "Rejack" );
  262.    
  263.     /* Forwards */
  264.    
  265.     RegisterHam( Ham_Item_Deploy, "weapon_knife", "FwdItemDeployKnife", 1 );
  266.    
  267.     RegisterHam( Ham_TakeDamage, "player", "FwdTakeDamage", 0 );
  268.    
  269.     RegisterHam( Ham_Spawn, "player", "FwdHamSpawn", 1 );
  270.    
  271.     /* Client Commands */
  272.    
  273.     register_clcmd( "say", "CmdSay" );
  274.    
  275.     register_clcmd("say /top", "cmdTop");
  276.    
  277.     /* Events */
  278.    
  279.     register_event( "CurWeapon", "evCurWeapon", "be", "1=1" );
  280.    
  281.     register_event( "DeathMsg", "evDeathMsg", "a" );
  282.    
  283.     /* Regex */
  284.    
  285.     new error[ 2 ];
  286.     gSteamPattern   = regex_compile( REGEX_STEAMID_PATTERN, gRegexReturn, error, charsmax( error ) );
  287.    
  288.     /* Commands */
  289.    
  290.     register_concmd( "_deposit", "CmdDeposit" );
  291.    
  292.     register_concmd( "_withdraw", "CmdWithdraw" );
  293. }
  294.  
  295. #if !defined USE_FVAULT
  296. public plugin_cfg()
  297.     g_mVault    = nvault_open( g_szVault );
  298.    
  299. public plugin_end()
  300.     nvault_close( g_mVault );
  301. #endif
  302.  
  303. public plugin_precache()
  304. {
  305.     static i;
  306.    
  307.     precache_sound( g_szBeacon[ 0 ] );
  308.    
  309.     g_szBeaconSpirte    = precache_model( g_szBeacon[ 1 ] );
  310.    
  311.     g_szExplosionSprite = precache_model( g_szExplosion );
  312.    
  313.     for ( i = 0; i < sizeof g_szKnivesModels; i++ )
  314.         precache_model( g_szKnivesModels[ i ] );
  315.    
  316.     for ( i = 0; i < sizeof g_szKnives; i++ )
  317.     {
  318.         if ( g_szKnives[ i ][ g_kPlayerModel ] == 1 )
  319.             precache_model( g_szKnives[ i ][ g_kSzPlayerModel ] );
  320.     }
  321. }
  322.  
  323. public plugin_natives( )
  324. {
  325.     register_native( "jb_get_user_knife", "_get_knife" );
  326.     register_native( "jb_set_user_knife", "_set_knife" );
  327.     register_native( "jb_get_last_knife", "_get_lastknife" )
  328.     register_native( "get_user_knife_level", "_get_knife" )
  329.     register_native( "get_user_knife_health", "_get_knife_health" )
  330.    
  331.     register_native( "jb_get_user_cash", "_get_cash" );
  332.     register_native( "jb_set_user_cash", "_set_cash" );
  333.    
  334.     register_native( "get_user_cash", "_get_cash" );
  335.     register_native( "set_user_cash", "_set_cash" );
  336.    
  337.     register_native( "set_client_cash", "_get_cash" );
  338.     register_native( "get_client_cash", "_set_cash" );
  339.    
  340.     register_native( "get_user_bank", "_get_bank" );
  341.     register_native( "set_user_bank", "_set_bank" );
  342.    
  343.     register_native( "get_user_xp", "_get_xp" );
  344.     register_native( "set_user_xp", "_set_xp" );
  345.    
  346.     register_native( "get_rank_cash", "_get_rank_cash" );
  347. }
  348.  
  349. /* Natives */
  350.  
  351. public _get_knife( plugin, params )
  352. {
  353.     if ( !is_user_connected( get_param( 1 ) ) )
  354.     {
  355.         log_amx( "[ShopSystem] Index (%i) is currently not connected.", get_param( 1 ) );
  356.  
  357.         return 0;
  358.    
  359.     }
  360.  
  361.     return gIndex[ get_param( 1 ) ][ gKNIFE ];
  362. }
  363.  
  364. public _get_knife_health( plugin, params )
  365. {
  366.     static index;
  367.    
  368.     index   = get_param( 1 );
  369.    
  370.     return g_szKnives[ gIndex[ index ][ gKNIFE ] ][ g_kHealth ];
  371. }
  372.  
  373. public _set_knife( plugin, params )
  374. {
  375.     static index, knife;
  376.  
  377.     index = get_param( 1 );
  378.  
  379.     if ( !is_user_connected( index ) )
  380.     {
  381.         log_amx( "[ShopSystem] Index (%i) is currently not connected.", index );
  382.  
  383.         return 0;
  384.     }
  385.  
  386.     knife = get_param( 2 );
  387.    
  388.     gIndex[ index ][ KNIFE ] = knife;
  389.    
  390.     gIndex[ index ][ gKNIFE ] = knife;
  391.    
  392.  
  393.     return gIndex[ index ][ KNIFE ];
  394. }
  395.  
  396. public _get_lastknife( plugin, params )
  397. {
  398.     static index;
  399.    
  400.     index = get_param( 1 );
  401.    
  402.     if ( !is_user_connected( index ) )
  403.     {
  404.         log_amx( "[ShopSystem] Index (%i) is currently not connected.", index );
  405.        
  406.         return 0;
  407.     }
  408.    
  409.     return gIndex[ index ][ KNIFE ];
  410.    
  411. }
  412.  
  413. public _get_cash( plugin, params ) 
  414.     return get_user_cash( get_param( 1 ) );
  415.  
  416. public _set_cash( plugin, params )
  417. {
  418.     set_user_cash( get_param( 1 ), get_param( 2 ) );
  419.    
  420.     return get_user_cash( get_param( 1 ) );
  421. }
  422.  
  423. public _get_xp( plugin, params )   
  424.     return get_user_xp( get_param( 1 ) );
  425.  
  426. public _set_xp( plugin, params )
  427. {
  428.     set_user_xp( get_param( 1 ), get_param( 2 ) );
  429.    
  430.     return get_user_xp( get_param( 1 ) );
  431. }
  432.  
  433. public _get_bank( plugin, params )
  434.     return gIndex[ get_param( 1 ) ][ BANK ];
  435.  
  436. public _set_bank( plugin, params )
  437. {
  438.     static index, amount;
  439.    
  440.     index   = get_param( 1 );
  441.    
  442.     amount  = get_param( 2 );
  443.    
  444.     gIndex[ index ][ BANK ] = amount;
  445.    
  446.     if ( gIndex[ index ][ BANK ] < 0 )
  447.         gIndex[ index ][ BANK ] = 0;
  448.    
  449.     return gIndex[ get_param( 1 ) ][ BANK ];
  450. }
  451.  
  452. public _get_rank_cash( plugin, params )
  453.     return ( (gIndex[ get_param( 1 ) ][ CASH ]) + (gIndex[ get_param( 1 ) ][ BANK ]) );
  454.  
  455. /* Events */
  456.    
  457. public evCurWeapon( client )
  458. {
  459.     if ( !is_user_alive( client ) || !is_user_connected( client ) )
  460.         return 0;
  461.    
  462.     if ( bSpeed[ client ] )
  463.         fm_set_user_maxspeed( client, fm_get_user_maxspeed( client ) * 2 );
  464.    
  465.     return 0;
  466. }
  467.  
  468. public cmdTop(id)
  469. {
  470.     new szText[2000], len;
  471.        
  472.     len = formatex(szText, charsmax(szText), "<html> ^n");
  473.     len += formatex(szText[len], charsmax(szText) - len, "<body style =^"background-image: url('https://wallpaperfree.org/wp-content/uploads/2017/01/halo-4-wide-800x600.jpg');^"> ^n");
  474.    
  475.     len += formatex(szText[len], charsmax(szText) - len, "<style> ^n table{ ^n");
  476.     len += formatex(szText[len], charsmax(szText) - len, "font-family: ^"Arial Black^", Gadget, sans-serif;^n");
  477.     len += formatex(szText[len], charsmax(szText) - len, "background-size: 100%% 100%%; ^n");
  478.     len += formatex(szText[len], charsmax(szText) - len, "background-repeat: no-repeat; ^n");
  479.     len += formatex(szText[len], charsmax(szText) - len, "border-collapse: collapse; ^n");
  480.     len += formatex(szText[len], charsmax(szText) - len, "width%%; ^n");
  481.     len += formatex(szText[len], charsmax(szText) - len, "border: 6px solid black; }^n");
  482.     len += formatex(szText[len], charsmax(szText) - len, "th, td {^n");
  483.     len += formatex(szText[len], charsmax(szText) - len, "text-align: center; ^n");
  484.     len += formatex(szText[len], charsmax(szText) - len, "padding: 8px; ^n");
  485.     len += formatex(szText[len], charsmax(szText) - len, "border-left: 5px solid black; ^n");
  486.     len += formatex(szText[len], charsmax(szText) - len, "border-right: 5px solid black; ^n");
  487.     len += formatex(szText[len], charsmax(szText) - len, "color: black; } ^n");
  488.     len += formatex(szText[len], charsmax(szText) - len, "th { background-color: black; ^n color: white; } ^n");
  489.     len += formatex(szText[len], charsmax(szText) - len, "</style> ^n");
  490.  
  491.    
  492.     len += formatex(szText[len], charsmax(szText) - len, "<table border = ^"2^" width = ^"100%%^"> ^n");
  493.     len += formatex(szText[len], charsmax(szText) - len, "<tr> ^n");
  494.     len += formatex(szText[len], charsmax(szText) - len, "<th> Place </td> ^n");
  495.     len += formatex(szText[len], charsmax(szText) - len, "<th> Name </td> ^n");
  496.     len += formatex(szText[len], charsmax(szText) - len, "<th> Cash </td> ^n");
  497.     len += formatex(szText[len], charsmax(szText) - len, "</tr> ^n");
  498.    
  499.    
  500.     new Array:Top = ArrayCreate(eTopData);
  501.    
  502.     new size = fvault_size(g_szVault);
  503.    
  504.     new i = 0;
  505.    
  506.     for(i=0; i<size; i++)
  507.     {
  508.         new szKeyName[64], szData[120], szTemp[eTopData];
  509.        
  510.         fvault_get_keyname(g_szVault, i, szKeyName, charsmax(szKeyName));
  511.        
  512.         fvault_get_data(g_szVault, szKeyName, szData, charsmax(szData));
  513.        
  514.         replace_all( szData, charsmax( szData ), "#", " " );
  515.        
  516.         static iData[ 7 ][ 32 ];
  517.        
  518.         parse( szData, iData[ 0 ], 31, iData[ 1 ], 31, iData[ 2 ], 31, iData[ 3 ], 31, iData[ 4 ], 31, iData[ 5 ], 31 , iData[ 6 ], 31 );
  519.        
  520.         formatex(szTemp[TopName], 31, "%s", iData[0]);
  521.        
  522.         szTemp[TopCash] = str_to_num(iData[1]);
  523.        
  524.         ArrayPushArray(Top, szTemp);
  525.     }
  526.    
  527.     ArraySort(Top, "sortMyArray");
  528.    
  529.     size = ArraySize(Top);
  530.    
  531.     if(size > 10)
  532.         size = 10;
  533.    
  534.     for(i=0; i<size; i++)
  535.     {
  536.         ArrayGetArray(Top, i, szTemp);
  537.            
  538.         len += formatex(szText[len], charsmax(szText) - len, "<tr> ^n");
  539.         len += formatex(szText[len], charsmax(szText) - len, "<td> %i </td> ^n", i+1);
  540.         len += formatex(szText[len], charsmax(szText) - len, "<td> %s </td> ^n", szTemp[TopName]);
  541.         len += formatex(szText[len], charsmax(szText) - len, "<td> %i </td> ^n", szTemp[TopCash]);
  542.         len += formatex(szText[len], charsmax(szText) - len, "</tr> ^n");
  543.     }
  544.        
  545.     if(size < 10)
  546.     {
  547.         for(i=size; i<10; i++)
  548.         {
  549.            
  550.             len += formatex(szText[len], charsmax(szText) - len, "<tr> ^n");
  551.             len += formatex(szText[len], charsmax(szText) - len, "<td> %i </td> ^n", i+1);
  552.             len += formatex(szText[len], charsmax(szText) - len, "<td>    </td> ^n");
  553.             len += formatex(szText[len], charsmax(szText) - len, "<td>    </td> ^n");
  554.             len += formatex(szText[len], charsmax(szText) - len, "</tr> ^n");
  555.         }
  556.        
  557.     }
  558.        
  559.    
  560.     len += formatex(szText[len], charsmax(szText) - len, "</table> ^n");
  561.     len += formatex(szText[len], charsmax(szText) - len, "</body> ^n");
  562.     len += formatex(szText[len], charsmax(szText) - len, "</html> ^n");
  563.    
  564.    
  565.     show_motd(id, szText, "    [AMXX] - Top Cash:");
  566. }
  567.  
  568. public sortMyArray( Array:array, item1, item2)
  569. {
  570.     new szTemp[eTopData], temp;
  571.     ArrayGetArray(array, item1, szTemp);
  572.    
  573.     temp = szTemp[TopCash];
  574.    
  575.     ArrayGetArray(array, item2, szTemp);
  576.    
  577.     if(temp > szTemp[TopCash])
  578.         return -1;
  579.    
  580.     return 1;
  581. }
  582.  
  583. public evDeathMsg()
  584. {
  585.     if ( CountPlayers() < 5 )
  586.         return 0;
  587.    
  588.     static iKiller, iVictim, iHeadshot, CsTeams: iTeam[ 2 ], Amount, AmountXP;
  589.    
  590.     iKiller = read_data( 1 );
  591.     iVictim = read_data( 2 );
  592.     iHeadshot = read_data( 3 );
  593.    
  594.     iTeam[ 0 ] = cs_get_user_team( iKiller );
  595.    
  596.     iTeam[ 1 ] = cs_get_user_team( iVictim );
  597.    
  598.     if ( iTeam[ 0 ] == iTeam[ 1 ] || iTeam[ 0 ] != CS_TEAM_T || iTeam[ 1 ] != CS_TEAM_CT )
  599.         return 0;
  600.    
  601.     Amount      = CASH_KILL;
  602.    
  603.     AmountXP    = XP_KILL
  604.    
  605.     if ( iHeadshot )
  606.     {
  607.         Amount      = CASH_HS;
  608.        
  609.         AmountXP    = XP_HS
  610.     }
  611.    
  612.     Amount += g_szKnives[ gIndex[ iKiller ][ gKNIFE ] ][ g_kCash ];
  613.    
  614.     remove_task( iVictim );
  615.    
  616.     bSpeed[ iVictim ] = false;
  617.    
  618.     bPowerup[ iVictim ] = false;
  619.    
  620.     set_user_cash( iKiller, get_user_cash( iKiller ) + Amount );
  621.    
  622.     set_user_xp( iKiller, get_user_xp( iKiller ) + AmountXP );
  623.    
  624.     ColorPrint( iKiller, "You gained^3 %i^1 cash and^3 %i^1 xp, for killing^4 %s^1.", Amount, AmountXP, szName( iVictim ) );
  625.    
  626.     return 0;
  627. }
  628.  
  629. public evRoundStart()
  630. {
  631.     static Players[ 32 ], iNum, iPlayer;
  632.    
  633.     get_players( Players, iNum, "ch" );
  634.    
  635.     for ( new i; i < iNum; i++ )
  636.     {
  637.         iPlayer = Players[ i ];
  638.        
  639.         remove_task( iPlayer );
  640.        
  641.         fm_set_user_godmode( iPlayer, 0 );
  642.        
  643.         bSpeed[ iPlayer ] = bPowerup[ iPlayer ] = false;
  644.     }
  645. }
  646.  
  647. /* Forwards */
  648.  
  649. public FwdHamSpawn( const client )
  650. {
  651.     if ( !is_user_alive( client ) || !is_user_connected( client ) )
  652.         return 1;
  653.    
  654.     static Float: fMins;
  655.    
  656.     fMins = (get_gametime()/60) - (fIndex[ client ][ NEXTCASH ]/60);
  657.    
  658.     if ( CountPlayers() >= 5 )
  659.     {
  660.         if ( fMins <= NEXT_CASH_TIME )
  661.             ColorPrint( client, "You will get^4 %i^1 cash in^3 %.1f^1 minutes!", get_user_nextcash( client ), NEXT_CASH_TIME - fMins );
  662.     }
  663.    
  664.     cs_reset_user_model( client );
  665.    
  666.     bSpeed[ client ] = false;
  667.    
  668.     bPowerup[ client ] = false;
  669.    
  670.     fm_set_user_rendering( client );
  671.    
  672.     static iHealth, iArmor, iKnife;
  673.    
  674.     iKnife  = gIndex[ client ][ gKNIFE ];
  675.    
  676.     iHealth = g_szKnives[ gIndex[ client ][ gKNIFE ] ][ g_kHealth ];
  677.    
  678.     iArmor  = g_szKnives[ gIndex[ client ][ gKNIFE ] ][ g_kArmor ];
  679.    
  680.     fm_set_user_armor( client, 100 + iArmor );
  681.    
  682.     fm_set_user_health( client, 100 + iHealth );
  683.    
  684.     if ( cs_get_user_team( client ) == CS_TEAM_T )
  685.     {
  686.         if ( g_szKnives[ iKnife ][ g_kPlayerModel ] == 1 )
  687.             cs_set_user_model( client, g_szKnives[ iKnife ][ g_kSzTheModel ] );
  688.        
  689.         else if (  g_szKnives[ iKnife ][ g_kPlayerModel ] == 0 )
  690.             cs_reset_user_model( client );
  691.     }
  692.    
  693.     return 1;
  694. }
  695.  
  696. public FwdItemDeployKnife( ent )
  697. {
  698.     static client;  client = get_pdata_cbase( ent, 41, 4 );
  699.    
  700.     if ( is_user_alive( client ) )
  701.         set_pev( client, pev_viewmodel2, g_szKnivesModels[ gIndex[ client ][ gKNIFE ] ][ V_MODEL ] );
  702. }
  703.  
  704. public FwdTakeDamage( iVictim, iInflictor, iAttacker, Float:fDamage, iDmgBits )
  705. {
  706.     if ( !is_user_connected( iAttacker ) || !is_user_connected( iVictim ) || !is_user_alive( iAttacker ) || !is_user_alive( iVictim ) )
  707.         return 1;
  708.    
  709.     if ( iVictim == iAttacker )
  710.         return 1;
  711.    
  712.     if ( get_user_weapon( iAttacker ) == CSW_KNIFE && iDmgBits & DMG_NEVERGIB && !(iDmgBits&(1<<24)) )
  713.     {
  714.         static Float: g_fDamage, CsTeams: iTeam[ 2 ], Float: fPunchAngle[ 3 ], i;
  715.        
  716.         g_fDamage = fDamage + g_szKnives[ gIndex[ iAttacker ][ gKNIFE ] ][ g_mDamage ];
  717.        
  718.         iTeam[ 0 ] = cs_get_user_team( iVictim );
  719.        
  720.         iTeam[ 1 ] = cs_get_user_team( iAttacker );
  721.        
  722.         SetHamParamFloat( 4, g_fDamage );
  723.        
  724.         if ( get_cvar_num( "mp_friendlyfire" ) == 0 && iTeam[ 0 ] == iTeam[ 1 ] )
  725.             return 1;
  726.        
  727.         if ( gIndex[ iAttacker ][ gKNIFE ] == 0 )
  728.             return 1;
  729.        
  730.         for ( i = 0; i < sizeof fPunchAngle; i++ )
  731.             fPunchAngle[ i ] = 6.0 * gIndex[ iAttacker ][ gKNIFE ];
  732.        
  733.         set_pev( iVictim, pev_punchangle, fPunchAngle );
  734.        
  735.         SetHamParamFloat( 4, g_fDamage );
  736.     }
  737.    
  738.     return 1;
  739. }
  740.  
  741. /* Knives Menu */
  742.  
  743. public CmdKnivesMenu( const client )
  744. {
  745.     formatex( szItem, charsmax( szItem ), "\r[\d%s\r]\w Knives Shop^nYou have\y %i\w Cash^n^nYou are using:\y %s^n\wYou own:\y %s^n\wPage:\r", szPrefix, get_user_cash( client ), g_szKnives[ gIndex[ client ][ gKNIFE ] ][ g_kName ], g_szKnives[ gIndex[ client ][ KNIFE ] ][ g_kName ] );
  746.    
  747.     static Menu; Menu = menu_create( szItem, "HandlerKnivesMenu" );
  748.    
  749.     static iKnife, gKnife, szText[ 32 ];
  750.    
  751.     iKnife = gIndex[ client ][ KNIFE ];
  752.     gKnife = gIndex[ client ][ gKNIFE ];
  753.    
  754.     for ( new i; i < sizeof g_szKnives; i++ )
  755.     {
  756.         szText = "";
  757.        
  758.         if ( g_szKnives[ i ][ g_kPremium ] == 1 )
  759.             szText  = "\d-\r [ Premiums Only ]";
  760.            
  761.        
  762.         if ( gKnife == i )
  763.             szText  = "\d-\r [ Your ]";
  764.        
  765.         if ( iKnife + 1 == i )
  766.             formatex( szText, charsmax( szText ), "\d- [\y %i\w Cash \d]", g_szKnives[ i ][ g_kPrice ] );
  767.        
  768.         formatex( szItem, charsmax( szItem ), "%s%s %s", (iKnife+1<i) ? "\d" : "\w", g_szKnives[ i ][ g_kName ], szText );
  769.        
  770.         menu_additem( Menu, szItem );
  771.     }
  772.    
  773.     menu_setprop( Menu, MPROP_EXITNAME, "Back" );
  774.    
  775.     menu_display( client, Menu );
  776.    
  777.     return 1;
  778. }
  779.  
  780. public HandlerKnivesMenu( client, Menu, Item )
  781. {
  782.     if ( Item == MENU_EXIT )
  783.     {
  784.         menu_destroy( Menu );
  785.        
  786.         return CmdMainMenu( client );
  787.     }
  788.    
  789.     static iItem;
  790.    
  791.     iItem = Item;
  792.    
  793.     menu_destroy( Menu );
  794.    
  795.     CmdKnivesItemsMenu( client, iItem );
  796.    
  797.     return 1;
  798. }
  799.  
  800. public CmdKnivesItemsMenu( const client, const Item )
  801. {
  802.     static szPrice[ 28 ], szKey[ 3 ];
  803.    
  804.     formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Knives Shop^nYou have\y %i\w Cash^n^nYou are using:\y %s^n\wYou own:\y %s^n^n\wYou are viewing:\r %s ",
  805.     szPrefix, get_user_cash( client ), g_szKnives[ gIndex[ client ][ gKNIFE ] ][ g_kName ],
  806.     g_szKnives[ gIndex[ client ][ KNIFE ] ][ g_kName ], g_szKnives[ Item ][ g_kName ] );
  807.    
  808.     new Menu = menu_create( szItem, "HandlerKnivesItemsMenu" );
  809.    
  810.     num_to_str( Item, szKey, charsmax( szKey ) );
  811.    
  812.     formatex( szItem, charsmax( szItem ), "\yLevel Needed:\d %i", g_szKnives[ Item ][ g_kLevelNeeded ] );
  813.    
  814.     menu_additem( Menu, szItem, szKey );
  815.    
  816.     menu_additem( Menu, "Use", szKey, 0, menu_makecallback( "CallBackUse_CmdKnivesItems" ) );
  817.        
  818.     formatex( szPrice, charsmax( szPrice ), "- [\y %i\w Cash \d]", g_szKnives[ Item ][ g_kPrice ] );
  819.    
  820.     formatex( szItem, charsmax( szItem ), "Purchase Knife\d %s^n", (gIndex[ client ][ KNIFE ]<Item) ? szPrice : "" );
  821.    
  822.     menu_additem( Menu, szItem, szKey, 0, menu_makecallback( "CallBackPurchase_CmdKnivesItems" ) );
  823.    
  824.     menu_additem( Menu, "View Knife Stats", szKey );
  825.    
  826.     menu_setprop( Menu, MPROP_EXITNAME, "Back" );
  827.    
  828.     menu_display( client, Menu );
  829.    
  830.     return 1;
  831. }
  832.  
  833. public HandlerKnivesItemsMenu( client, Menu, Item )
  834. {
  835.     if ( Item == MENU_EXIT )
  836.     {
  837.         menu_destroy( Menu );
  838.        
  839.         return CmdKnivesMenu( client );
  840.     }
  841.    
  842.     static mData[ 6 ], Trash, Key, iKnife, mKnife, iLevel, NeededLevel;
  843.    
  844.     menu_item_getinfo( Menu, Item, Trash, mData, charsmax( mData ), _,_, Trash );
  845.    
  846.     Key = str_to_num( mData );
  847.    
  848.     iKnife = gIndex[ client ][ KNIFE ];
  849.    
  850.     mKnife = gIndex[ client ][ gKNIFE ];
  851.    
  852.     iLevel = gIndex[ client ][ gLVL ];
  853.    
  854.     NeededLevel = g_szKnives[ Key ][ g_kLevelNeeded ];
  855.    
  856.     if ( Item == 0 )
  857.         return CmdKnivesItemsMenu( client, Key );
  858.    
  859.     else if ( Item == 1 ) /* USE */
  860.     {
  861.         if ( Key > iKnife )
  862.         {
  863.             ColorPrint( client, "You haven't bought that knife yet." );
  864.            
  865.             return CmdKnivesItemsMenu( client, Key );
  866.         }
  867.            
  868.         if ( Key == mKnife )
  869.         {
  870.             ColorPrint( client, "You're already using this knife." );
  871.            
  872.             return CmdKnivesMenu( client );
  873.         }
  874.        
  875.         gIndex[ client ][ gKNIFE ] = Key;
  876.        
  877.         if ( user_has_weapon( client, CSW_KNIFE ) )
  878.         {
  879.             HamStripWeapon( client, "weapon_knife" );
  880.            
  881.             fm_give_item( client, "weapon_knife" );
  882.         }
  883.     }
  884.    
  885.     else if ( Item == 2 )   /* Purchase */
  886.     {
  887.         if ( g_szKnives[ Key ][ g_kPremium ] == 1 )
  888.         {
  889.             ColorPrint( client, "You need to be a^3 Premium Member^1 in order to purchase this knife." );
  890.            
  891.             return CmdKnivesItemsMenu( client, Key );
  892.         }
  893.        
  894.         if ( iLevel < NeededLevel - 1 )
  895.         {
  896.             ColorPrint( client, "Your level is too low, You need to reach level^4 %i^1.", NeededLevel )
  897.            
  898.             return CmdKnivesItemsMenu( client, Key );
  899.         }
  900.        
  901.         if ( iKnife+1 < Key )
  902.         {
  903.             ColorPrint( client, "You can't purchase the^3 %s^1 yet.", g_szKnives[ Key ][ g_kName ] );
  904.            
  905.             return CmdKnivesMenu( client );
  906.         }
  907.        
  908.         if ( iKnife >= Key )
  909.         {
  910.             ColorPrint( client, "You already own the^3 %s^1.", g_szKnives[ Key ][ g_kName ] );
  911.            
  912.             return CmdKnivesMenu( client );
  913.         }
  914.        
  915.         if ( get_user_cash( client ) < g_szKnives[ Key ][ g_kPrice ] )
  916.         {
  917.             ColorPrint( client, "You're missing^3 %i Cash^1 to purchase the^4 %s^1.", g_szKnives[ Key ][ g_kPrice ] - get_user_cash( client ), g_szKnives[ Key ][ g_kName ] );
  918.            
  919.             return CmdKnivesMenu( client );
  920.         }
  921.        
  922.         gIndex[ client ][ KNIFE ] = Key;
  923.        
  924.         gIndex[ client ][ gKNIFE ] = Key;
  925.        
  926.         set_user_cash( client, get_user_cash( client ) - g_szKnives[ Key ][ g_kPrice ] );
  927.        
  928.         if ( user_has_weapon( client, CSW_KNIFE ) )
  929.         {
  930.             HamStripWeapon( client, "weapon_knife" );
  931.            
  932.             fm_give_item( client, "weapon_knife" );
  933.         }
  934.        
  935.         ColorPrint( 0, "^3%s^1 purchased the^4 %s^1 for^3 %i Cash^1!^4 Good Luck^1.", szName( client ), g_szKnives[ Key ][ g_kName ], g_szKnives[ Key ][ g_kPrice ] );
  936.        
  937.         log_amx( "%s ( %s | %s | %i Cash ) just purchased %s", szName( client ), szAuth( client ), szAddress( client ), get_user_cash( client ), g_szKnives[ Key ][ g_kName ] );
  938.     }
  939.    
  940.     else if ( Item == 3 )   /* View Stats */
  941.     {
  942.         static iMenu, cb;
  943.        
  944.         formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Knives Shop^n^nYou are using:\y %s\d/\y%s^n^n\r%s\w Stats:", szPrefix,
  945.         g_szKnives[ mKnife ][ g_kName ], g_szKnives[ iKnife ][ g_kName ], g_szKnives[ Key ][ g_kName ] );
  946.        
  947.         iMenu = menu_create( szItem, "HandlerSubKnivesStats" );
  948.        
  949.         cb = menu_makecallback( "MenuItemDisable" );
  950.        
  951.         formatex( szItem, charsmax( szItem ), "\yHealth Bonus:\d +%i", g_szKnives[ Key ][ g_kHealth ] );
  952.        
  953.         menu_additem( iMenu, szItem, mData, 0, cb );
  954.        
  955.         formatex( szItem, charsmax( szItem ), "\yArmor Bonus:\d +%i", g_szKnives[ Key ][ g_kArmor ] );
  956.        
  957.         menu_additem( iMenu, szItem, mData, 0, cb );
  958.        
  959.         formatex( szItem, charsmax( szItem ), "\yDamage Bonus:\d +%i", g_szKnives[ Key ][ g_mDamage ] );
  960.        
  961.         menu_additem( iMenu, szItem, mData, 0, cb );
  962.        
  963.         formatex( szItem, charsmax( szItem ), "\yCash Bonus:\d +%i", g_szKnives[ Key ][ g_kCash ] );
  964.        
  965.         menu_additem( iMenu, szItem, mData, 0, cb );
  966.        
  967.         formatex( szItem, charsmax( szItem ), "\ySlag:\d +%i.0%%", Key * 6 );
  968.        
  969.         menu_additem( iMenu, szItem, mData, 0, cb );
  970.        
  971.         formatex( szItem, charsmax( szItem ), "\yPlayer Model: %s", (g_szKnives[ Key ][ g_kPlayerModel ]==1) ? "\rYes" : "\dNo" );
  972.        
  973.         menu_additem( iMenu, szItem, mData, 0, cb );
  974.        
  975.         menu_setprop( iMenu, MPROP_EXITNAME, "Back" );
  976.        
  977.         menu_display( client, iMenu );
  978.        
  979.         menu_destroy( Menu );
  980.        
  981.         return 1;
  982.     }
  983.    
  984.     menu_destroy( Menu );
  985.    
  986.     CmdKnivesMenu( client );
  987.    
  988.     return 1;
  989. }
  990.  
  991.    
  992. public HandlerSubKnivesStats( client, Menu, Item )
  993. {
  994.     static mData[ 6 ], Trash, Key;
  995.    
  996.     menu_item_getinfo( Menu, 0, Trash, mData, charsmax( mData ), _,_, Trash );
  997.    
  998.     Key = str_to_num( mData );
  999.    
  1000.     menu_destroy( Menu )
  1001.    
  1002.     return CmdKnivesItemsMenu( client, Key );
  1003. }
  1004.  
  1005. /* Client Side */
  1006.  
  1007. public client_disconnect( client )
  1008.     SaveVaultKey( client );
  1009.  
  1010. public client_putinserver( client )
  1011. {
  1012.     CheckAuthOnline( client );
  1013.    
  1014.     for ( new i; i < g_mData; i++ )
  1015.         gIndex[ client ][ i ]   = 0;
  1016.    
  1017.     LoadVaultKey( client );
  1018.    
  1019.     bPowerup[ client ]      = false;
  1020.    
  1021.     bSpeed[ client ]        = false;
  1022.    
  1023.     bMessage[ client ]      = false;
  1024.    
  1025.     fIndex[ client ][ GAMETIME ]    = get_gametime();
  1026.    
  1027.     fIndex[ client ][ NEXTCASH ]    = get_gametime();
  1028.    
  1029.     ColorPrint( 0, "^3%s^1 has connected to the server! has^3 %i^1 cash, with^4 %s^1!", szName( client ), get_user_cash( client ), g_szKnives[ gIndex[ client ][ gKNIFE ] ][ g_kName ] );
  1030. }
  1031.  
  1032. public CmdSay( client )
  1033. {
  1034.     new szMsg[ 192 ], szArgs[ 3 ][ 32 ];
  1035.    
  1036.     read_argv( 1, szMsg, charsmax( szMsg ) );
  1037.    
  1038.     parse( szMsg, szArgs[ 0 ], 31, szArgs[ 1 ], 31, szArgs[ 2 ], 31 );
  1039.    
  1040.     if ( equali( szMsg, "/shop" ) )
  1041.         return CmdMainMenu( client );
  1042.    
  1043.     if ( equali( szMsg, "/knife" ) )
  1044.         return CmdKnivesMenu( client );
  1045.    
  1046.     if ( equali( szMsg, "/bank" ) )
  1047.         return CmdBankMenu( client );
  1048.    
  1049.     if ( equali( szMsg, "/msg" ) || equali( szMsg, "/messages" ) )
  1050.     {
  1051.         bMessage[ client ] = !bMessage[ client ];
  1052.        
  1053.         ColorPrint( client, "You just^3 %s^1 the gamble messages.", bMessage[ client ] ? "Deactivated" : "Activated" );
  1054.        
  1055.         return 1;
  1056.     }
  1057.    
  1058.     if ( equali( szMsg, "/nc" ) || equali( szMsg, "/nextcash" ) )
  1059.     {
  1060.         if ( CountPlayers() < 5 )
  1061.             return ColorPrint( client, "^3NextCash^1 requires at least^4 5^1 Players." );
  1062.        
  1063.         new Float:fMins = (get_gametime()/60) - (fIndex[ client ][ NEXTCASH ]/60);
  1064.        
  1065.         if ( fMins <= NEXT_CASH_TIME )
  1066.             return ColorPrint( client, "^3NextCash^1 will be available in^3 %.1f^1 minutes!", NEXT_CASH_TIME - fMins );
  1067.        
  1068.         fIndex[ client ][ NEXTCASH ] = get_gametime();
  1069.        
  1070.         set_user_cash( client, get_user_cash( client ) + get_user_nextcash( client ) );
  1071.        
  1072.         ColorPrint( client, "You received^3 %i^1 cash,^4 good luck^1!", get_user_nextcash( client ) );
  1073.        
  1074.         return 1;
  1075.     }
  1076.    
  1077.     if ( equali( szArgs[ 0 ], "/level" ) || equali( szArgs[ 0 ], "/lvl" ) || equali( szArgs[ 0 ], "/xp" ) || equali( szArgs[ 0 ], "/exp" ) )
  1078.     {
  1079.         static iPlayer;
  1080.        
  1081.         iPlayer = cmd_target( client, szArgs[ 1 ], 8 );
  1082.        
  1083.         if ( equali( szMsg, "/level" ) || equali( szMsg, "/lvl" ) || equali( szMsg, "/xp" ) || equali( szMsg, "/exp" ) )
  1084.             iPlayer = client;
  1085.            
  1086.         if ( !iPlayer )
  1087.             return ColorPrint( client, "^3%s^1 was not found!", szArgs[ 1 ] );
  1088.        
  1089.         if ( iPlayer == client )
  1090.             return ColorPrint( client, "You're on level^4 %i^1 with^3 %i^1 xp!", get_user_level( client ) + 1, get_user_xp( client ) );
  1091.        
  1092.         ColorPrint( client, "^3%s^1 is on level^4 %i^1 with^3 %i^1 xp!", szName( iPlayer ), get_user_level( iPlayer ) + 1, get_user_xp( iPlayer ) );
  1093.        
  1094.         return 1;
  1095.     }
  1096.    
  1097.     if ( equali( szArgs[ 0 ], "/next" ) )
  1098.     {
  1099.         static iPlayer;
  1100.        
  1101.         iPlayer = cmd_target( client, szArgs[ 1 ], 8 );
  1102.        
  1103.         if ( equali( szMsg, "/next" ) )
  1104.             iPlayer = client;
  1105.            
  1106.         if ( !iPlayer )
  1107.             return ColorPrint( client, "^3%s^1 was not found!", szArgs[ 1 ] );
  1108.        
  1109.         if ( iPlayer == client )
  1110.             return ColorPrint( client, "Your missing^3 %i^1 xp to levelup to level^4 %i^1!", gXPLevels[ get_user_level( client ) ] - get_user_xp( client ), get_user_level( client ) + 1 );
  1111.        
  1112.         ColorPrint( client, "^3%s^1 is missing^3 %i^1 xp to levelup to level^4 %i^1!", szName( iPlayer ), gXPLevels[ get_user_level( iPlayer ) ] - get_user_xp( iPlayer ), get_user_level( iPlayer ) + 1 );
  1113.        
  1114.         return 1;
  1115.     }
  1116.    
  1117.     if ( equali( szArgs[ 0 ], "/cash" ) )
  1118.     {
  1119.         static iPlayer;
  1120.        
  1121.         iPlayer = cmd_target( client, szArgs[ 1 ], 8 );
  1122.        
  1123.         if ( equali( szMsg, "/cash" ) )
  1124.             iPlayer = client;
  1125.            
  1126.         if ( !iPlayer )
  1127.             return ColorPrint( client, "^3%s^1 was not found!", szArgs[ 1 ] );
  1128.        
  1129.         if ( iPlayer == client )
  1130.             return ColorPrint( client, "You have^4 %i^1 cash,^3 %i^1 in the bank. You using a^4 %s^1.",
  1131.             get_user_cash( client ), gIndex[ client ][ BANK ], g_szKnives[ gIndex[ client ][ gKNIFE ] ][ g_kName ]);
  1132.        
  1133.         ColorPrint( client, "^3%s^1 have^3 %i^1 cash,^3 %i^1 in the bank. using a^3 %s.",
  1134.         szName( iPlayer ), get_user_cash( iPlayer ), gIndex[ iPlayer ][ BANK ], g_szKnives[ gIndex[ iPlayer ][ gKNIFE ] ][ g_kName ] );
  1135.        
  1136.         return 1;
  1137.     }
  1138.    
  1139.     if ( equali( szArgs[ 0 ], "/gamble" ) )
  1140.     {
  1141.        
  1142.         static Amount, bool: bAllin;
  1143.        
  1144.         bAllin = false;
  1145.        
  1146.         Amount = str_to_num( szArgs[ 1 ] );
  1147.        
  1148.         if ( equali( szArgs[ 1 ], "allin" ) || equali( szArgs[ 1 ], "all" ) || Amount == get_user_cash( client ) )
  1149.         {
  1150.             Amount = get_user_cash( client );
  1151.            
  1152.             bAllin = true;
  1153.         }
  1154.        
  1155.         else if ( equali( szMsg, "/gamble" ) || !is_str_num( szArgs[ 1 ] ) )
  1156.             return ColorPrint( client, "Syntax: /^4gamble^1 <^3amount^1>" );
  1157.        
  1158.         if ( Amount > get_user_cash( client ) )
  1159.             return ColorPrint( client, "You're missing^3 %i^1 cash to gamble on^4 %i^1 cash.", Amount - get_user_cash( client ), Amount );
  1160.        
  1161.         if ( Amount < 300 )
  1162.             return ColorPrint( client, "You need to gamble on a minimum of^4 300 Cash^1 at a time." );
  1163.        
  1164.         static bool: bGamble;
  1165.         static iTotal, bonus, chance;
  1166.         static szBonus[ 12 ];
  1167.        
  1168.         bGamble = false;
  1169.        
  1170.         iTotal  = get_user_cash( client );
  1171.        
  1172.         set_user_cash( client, iTotal - Amount );
  1173.        
  1174.         chance  = GAMBLE_CHANCE;
  1175.        
  1176.         bonus   = 0;
  1177.        
  1178.         szBonus = "";
  1179.        
  1180.         if ( bAllin )
  1181.         {
  1182.             bonus += GAMBLE_CHANCE_ALLIN;
  1183.            
  1184.             formatex( szBonus, charsmax( szBonus ), "(+^4%i%%^1)", bonus );
  1185.         }
  1186.        
  1187.         if ( get_user_bank( client ) > 0 && bAllin )
  1188.         {  
  1189.             formatex( szBonus, charsmax( szBonus ), "(+^4%i%%^1)", bonus );
  1190.            
  1191.             bAllin = false;
  1192.         }
  1193.        
  1194.         if ( chance + bonus >= random( 99 ) )
  1195.         {
  1196.             bGamble = true;
  1197.            
  1198.             set_user_cash( client, iTotal + Amount );
  1199.         }
  1200.        
  1201.         static Players[ 32 ], iNum;
  1202.        
  1203.         get_players( Players, iNum, "ch" );
  1204.        
  1205.         for ( new i; i < iNum; i++ )
  1206.         {
  1207.             if ( bMessage[ Players[ i ] ] && Players[ i ] != client )
  1208.                 continue;
  1209.            
  1210.             ColorPrint( Players[ i ], "^3%s^1 just gambled^3%s^1 on^4 %i^1 cash and^3 %s^1! %s", szName( client ), bAllin ? " All-In" : "", Amount, bGamble ? "won" : "lost", szBonus );
  1211.         }
  1212.        
  1213.         log_amx( "%s (%s|%s) gambled on %i cash and he %s. (%i cash left)", szName( client ), szAuth( client ), szAddress( client ), Amount, bGamble ? "won" : "lost", get_user_cash( client ) );
  1214.        
  1215.         return 1;
  1216.     }
  1217.    
  1218.     if ( equali( szArgs[ 0 ], "/transfer" ) )
  1219.     {
  1220.         if ( !is_str_num( szArgs[ 2 ] ) || equali( szMsg, "/transfer" ) )
  1221.             return ColorPrint( client, "Syntax: /^4transfer^1 <^4player^1> <^4amount^1>" );
  1222.            
  1223.         static iPlayer;
  1224.        
  1225.         iPlayer = cmd_target( client, szArgs[ 1 ], 8 );
  1226.        
  1227.         if ( !iPlayer )
  1228.             return ColorPrint( client, "^3%s^1 was not found!", szArgs[ 1 ] );
  1229.        
  1230.         if ( iPlayer == client )
  1231.             return ColorPrint( client, "You can't transfer cash to yourself." );
  1232.        
  1233.         new Amount = str_to_num( szArgs[ 2 ] );
  1234.        
  1235.         if ( Amount > get_user_cash( client ) )
  1236.             return ColorPrint( client, "You don't have enough cash." );
  1237.        
  1238.         if ( Amount < 300 )
  1239.             return ColorPrint( client, "You can't transfer less than^4 300 Cash^1." );
  1240.        
  1241.         if ( get_user_cash( client ) + get_user_bank( client ) > 70000 )
  1242.             return ColorPrint( client, "You can't transfer cash if you have more than^3 70,000^1 cash." );
  1243.        
  1244.         if ( cs_get_user_team( client ) != CS_TEAM_T )
  1245.             return ColorPrint( client, "You can't transfer while being a^3 Counter-Terrorist^1." );
  1246.        
  1247.         static Amount2, Tax;
  1248.        
  1249.         Tax = TAX;
  1250.        
  1251.         Amount2 = Amount;
  1252.        
  1253.         Amount2 = Amount - (Amount / 100 * Tax);
  1254.        
  1255.         set_user_cash( client, get_user_cash( client ) - Amount );
  1256.        
  1257.         set_user_cash( iPlayer, get_user_cash( iPlayer ) + Amount2 );
  1258.        
  1259.         log_amx( "%s ( %s | %s | %i Cash ) transfer %i cash to %s ( %s | %s | %i ). He received %i cash because of the tax rate.",
  1260.         szName( client ), szAuth( client ), szAddress( client ), get_user_cash( client ), Amount, szName( iPlayer ), szAuth( iPlayer ), szAddress( iPlayer ), get_user_cash( iPlayer ), Amount2 );
  1261.        
  1262.         //ColorPrint( 0, "^4%s^1 transfered^3 %i^1 cash to^3 %s^1, he received^4 %i^1 cash (^3%i%% Tax^1)", szName( client ), Amount, szName( iPlayer ), Amount2, Tax );
  1263.         return ColorPrint( 0, "^4%s^1 transfered^3 %s^4 %i^1 cash,^3 %s^1 recieved^4 %i^1. (^3TAX^1:^4 %i%%^1)", szName( client ), szName( iPlayer ), Amount, szName( iPlayer ), Amount2, Tax );
  1264.     }
  1265.    
  1266.     if ( equali( szArgs[ 0 ], "/give" ) )
  1267.     {
  1268.         if ( !( get_user_flags( client ) & ADMIN_IMMUNITY ) )
  1269.             return 0;
  1270.        
  1271.         if ( !is_str_num( szArgs[ 2 ] ) || equali( szMsg, "/give" ) )
  1272.             return ColorPrint( client, "Syntax: /^4give^1 <^4player^1> <^4amount^1>" );
  1273.        
  1274.         static iPlayer, Amount;
  1275.        
  1276.         iPlayer = cmd_target( client, szArgs[ 1 ], 8 );
  1277.        
  1278.         if ( !iPlayer )
  1279.             return ColorPrint( client, "^3%s^1 was not found!", szArgs[ 1 ] );
  1280.        
  1281.         Amount = str_to_num( szArgs[ 2 ] );
  1282.        
  1283.         if ( Amount < 0 )
  1284.             return ColorPrint( client, "You can't use a value lower than^4 0^1." );
  1285.        
  1286.         set_user_cash( iPlayer, get_user_cash( iPlayer ) + Amount );
  1287.        
  1288.         log_amx( "Owner: %s (%s|%s) gave %i cash to %s (%s|%s| %i cash)", szName( client ), szAuth( client ), szAddress( client ), Amount, szName( iPlayer ), szAuth( iPlayer ), szAddress( iPlayer ), get_user_cash( iPlayer ) );
  1289.        
  1290.         ColorPrint( client, "You gave^3 %i^1 cash to^4 %s^1.", Amount, szName( iPlayer ) );
  1291.        
  1292.         ColorPrint( iPlayer, "You were given^3 %i^1 cash by the Owner^4 %s^1.", Amount, szName( client ) );
  1293.        
  1294.         return 1;
  1295.     }
  1296.    
  1297.     if ( equali( szArgs[ 0 ], "/take" ) )
  1298.     {
  1299.         if ( !( get_user_flags( client ) & ADMIN_IMMUNITY ) )
  1300.             return 0;
  1301.        
  1302.         if ( !is_str_num( szArgs[ 2 ] ) || equali( szMsg, "/take" ) )
  1303.             return ColorPrint( client, "Syntax: /^4take^1 <^4player^1> <^4amount^1>" );
  1304.        
  1305.         static iPlayer, Amount;
  1306.            
  1307.         iPlayer = cmd_target( client, szArgs[ 1 ], 8 );
  1308.        
  1309.         if ( !iPlayer )
  1310.             return ColorPrint( client, "^3%s^1 was not found!", szArgs[ 1 ] );
  1311.        
  1312.         Amount = str_to_num( szArgs[ 2 ] );
  1313.        
  1314.         if ( Amount < 0 )
  1315.             return ColorPrint( client, "You can't use a value lower than^4 0^1." );
  1316.        
  1317.         set_user_cash( iPlayer, get_user_cash( iPlayer ) - Amount );
  1318.        
  1319.         log_amx( "Owner: %s (%s|%s) took %i cash from %s (%s|%s| %i cash)", szName( client ), szAuth( client ), szAddress( client ), Amount, szName( iPlayer ), szAuth( iPlayer ), szAddress( iPlayer ), get_user_cash( iPlayer ) );
  1320.        
  1321.         ColorPrint( client, "You took^3 %i^1 cash from^4 %s^1.", Amount, szName( iPlayer ) );
  1322.        
  1323.         ColorPrint( iPlayer, "You were taken^3 %i^1 cash by the owner^4 %s^1.", Amount, szName( client ) );
  1324.        
  1325.         return 1;
  1326.     }
  1327.    
  1328.     if ( equali( szArgs[ 0 ], "/set" ) || equali( szArgs[ 0 ], "/setcash" ) )
  1329.     {
  1330.         if ( !( get_user_flags( client ) & ADMIN_IMMUNITY ) )
  1331.             return 0;
  1332.        
  1333.         if ( !is_str_num( szArgs[ 2 ] ) || equali( szMsg, "/set" ) || equali( szMsg, "/setcash" ) )
  1334.             return ColorPrint( client, "Syntax: /^3setcash^1 <^4player^1> <^4amount^1>" );
  1335.        
  1336.         static iPlayer, Amount;
  1337.        
  1338.         iPlayer = cmd_target( client, szArgs[ 1 ], 8 );
  1339.        
  1340.         if ( !iPlayer )
  1341.             return ColorPrint( client, "^3%s^1 was not found!", szArgs[ 1 ] );
  1342.        
  1343.         Amount = str_to_num( szArgs[ 2 ] );
  1344.        
  1345.         if ( Amount < 0 )
  1346.             return ColorPrint( client, "You can't use a value lower than^4 0^1." );
  1347.        
  1348.         set_user_cash( iPlayer, Amount );
  1349.        
  1350.         log_amx( "Owner: %s (%s|%s) set %s (%s|%s) cash to %i cash.", szName( client ), szAuth( client ), szAddress( client ), szName( iPlayer ), szAuth( iPlayer ), szAddress( iPlayer ), Amount );
  1351.        
  1352.         ColorPrint( client, "You set^3 %s's^1 cash to^4 %i^1 cash^1.", szName( iPlayer ), Amount );
  1353.        
  1354.         ColorPrint( iPlayer, "Owner:^3 %s^1 set your cash to^4 %i^1 cash^1.", szName( client ), Amount );
  1355.        
  1356.         return 1;
  1357.     }
  1358.    
  1359.     if ( equali( szArgs[ 0 ], "/setknife" ) || equali( szArgs[ 0 ], "/sk" ) )
  1360.     {
  1361.         if ( !( get_user_flags( client ) & ADMIN_IMMUNITY ) )
  1362.             return 0;
  1363.        
  1364.         if ( !is_str_num( szArgs[ 2 ] ) || equali( szMsg, "/setknife" ) || equali( szMsg, "/sk" ) )
  1365.             return ColorPrint( client, "Syntax: /^4setknife^1 <^4player^1> <^4amount^1>" );
  1366.        
  1367.         static iPlayer, Amount;
  1368.        
  1369.         iPlayer = cmd_target( client, szArgs[ 1 ], 8 );
  1370.        
  1371.         if ( !iPlayer )
  1372.             return ColorPrint( client, "^3%s^1 was not found!", szArgs[ 1 ] );
  1373.        
  1374.         Amount = str_to_num( szArgs[ 2 ] );
  1375.        
  1376.         if ( Amount < -1 )
  1377.             return ColorPrint( client, "You can't use a value lower than^4 -1^1." );
  1378.        
  1379.         if ( Amount > charsmax( g_szKnives ) )
  1380.             return ColorPrint( client, "You can't use a value higher than^4 %i^1.", charsmax( g_szKnives ) );
  1381.        
  1382.         gIndex[ iPlayer ][ KNIFE ]  = Amount;
  1383.        
  1384.         gIndex[ iPlayer ][ gKNIFE ] = Amount;
  1385.        
  1386.         SaveVaultKey( iPlayer );
  1387.        
  1388.         if ( user_has_weapon( iPlayer, CSW_KNIFE ) )
  1389.         {
  1390.             HamStripWeapon( iPlayer, "weapon_knife" );
  1391.            
  1392.             fm_give_item( iPlayer, "weapon_knife" );
  1393.         }
  1394.        
  1395.         log_amx( "Owner:%s (%s|%s) set %s (%s|%s) knife level to %s (%i).", szName( client ), szAuth( client ), szAddress( client ), szName( iPlayer ), szAuth( iPlayer ), szAddress( iPlayer ), g_szKnives[ Amount ][ g_kName ], Amount );
  1396.        
  1397.         ColorPrint( client, "You set^3 %s's^1 knife level to^4 %s ^1(^3%i^1).", szName( iPlayer ), g_szKnives[ Amount ][ g_kName ], Amount );
  1398.        
  1399.         ColorPrint( iPlayer, "Owner:^3 %s^1 set your knife level to^4 %s ^1(^3%i^1).", szName( client ), g_szKnives[ Amount ][ g_kName ], Amount );
  1400.        
  1401.         return 1;
  1402.     }
  1403.    
  1404.     if ( equali( szArgs[ 0 ], "/setbank" ) || equali( szArgs[ 0 ], "/sb" ) )
  1405.     {
  1406.         if ( !( get_user_flags( client ) & ADMIN_IMMUNITY ) )
  1407.             return 0;
  1408.        
  1409.         if ( !is_str_num( szArgs[ 2 ] ) || equali( szMsg, "/setbank" ) || equali( szMsg, "/sb" ) )
  1410.             return ColorPrint( client, "Syntax: /^4setbank^1 <^4player^1> <^4amount^1>" );
  1411.            
  1412.         static iPlayer, Amount;
  1413.        
  1414.         iPlayer = cmd_target( client, szArgs[ 1 ], 8 );
  1415.        
  1416.         if ( !iPlayer )
  1417.             return ColorPrint( client, "^3%s^1 was not found!", szArgs[ 1 ] );
  1418.        
  1419.         Amount = str_to_num( szArgs[ 2 ] );
  1420.        
  1421.         if ( Amount < 0 )
  1422.             return ColorPrint( client, "You can't use a value lower than^4 0^1." );
  1423.        
  1424.         set_user_bank( iPlayer, Amount );
  1425.        
  1426.         log_amx( "Owner: %s (%s|%s) set %s (%s|%s) bank cash to %i cash.", szName( client ), szAuth( client ), szAddress( client ), szName( iPlayer ), szAuth( iPlayer ), szAddress( iPlayer ), Amount );
  1427.        
  1428.         ColorPrint( client, "You set^3 %s's^1 bank cash to^4 %i^1 cash^1.", szName( iPlayer ), Amount );
  1429.        
  1430.         ColorPrint( iPlayer, "Owner:^3 %s^1 set your bank cash to^4 %i^1 cash^1.", szName( client ), Amount );
  1431.        
  1432.         return 1;
  1433.     }
  1434.    
  1435.     if ( equali( szArgs[ 0 ], "/givebank" ) || equali( szArgs[ 0 ], "/gb" ) )
  1436.     {
  1437.         if ( !( get_user_flags( client ) & ADMIN_IMMUNITY ) )
  1438.             return 0;
  1439.        
  1440.         if ( !is_str_num( szArgs[ 2 ] ) || equali( szMsg, "/givebank" ) || equali( szMsg, "/tb" ) )
  1441.             return ColorPrint( client, "Syntax: /^4givebank^1 <^4player^1> <^4amount^1>" );
  1442.            
  1443.         static iPlayer, Amount;
  1444.        
  1445.         iPlayer = cmd_target( client, szArgs[ 1 ], 8 );
  1446.        
  1447.         if ( !iPlayer )
  1448.             return ColorPrint( client, "^3%s^1 was not found!", szArgs[ 1 ] );
  1449.        
  1450.         Amount = str_to_num( szArgs[ 2 ] );
  1451.        
  1452.         if ( Amount < 0 )
  1453.             return ColorPrint( client, "You can't use a value lower than^4 0^1." );
  1454.        
  1455.         set_user_bank( iPlayer, get_user_bank( iPlayer ) + Amount );
  1456.        
  1457.         log_amx( "Owner: %s (%s|%s) gave %i bank cash to %s (%s|%s| %i cash)", szName( client ), szAuth( client ), szAddress( client ), Amount, szName( iPlayer ), szAuth( iPlayer ), szAddress( iPlayer ), get_user_cash( iPlayer ) );
  1458.        
  1459.         ColorPrint( client, "You gave^3 %i^1 bank cash to^4 %s^1.", Amount, szName( iPlayer ) );
  1460.        
  1461.         ColorPrint( iPlayer, "You were given^3 %i^1 bank cash by the owner^4 %s^1.", Amount, szName( client ) );
  1462.        
  1463.         return 1;
  1464.     }
  1465.    
  1466.     if ( equali( szArgs[ 0 ], "/takebank" ) || equali( szArgs[ 0 ], "/tb" ) )
  1467.     {
  1468.         if ( !( get_user_flags( client ) & ADMIN_IMMUNITY ) )
  1469.             return 0;
  1470.        
  1471.         if ( !is_str_num( szArgs[ 2 ] ) || equali( szMsg, "/takebank" ) || equali( szMsg, "/tb" ) )
  1472.             return ColorPrint( client, "Syntax: /^4takebank^1 <^4player^1> <^4amount^1>" );
  1473.        
  1474.         static iPlayer, Amount;
  1475.    
  1476.         iPlayer = cmd_target( client, szArgs[ 1 ], 8 );
  1477.        
  1478.         if ( !iPlayer )
  1479.             return ColorPrint( client, "^3%s^1 was not found!", szArgs[ 1 ] );
  1480.            
  1481.         Amount = str_to_num( szArgs[ 2 ] );
  1482.        
  1483.         if ( Amount < 0 )
  1484.             return ColorPrint( client, "You can't use a value lower than^4 0^1." );
  1485.        
  1486.         set_user_bank( iPlayer, get_user_bank( iPlayer ) - Amount );
  1487.        
  1488.         log_amx( "Owner: %s (%s|%s) took %i bank cash from %s (%s|%s| %i cash)", szName( client ), szAuth( client ), szAddress( client ), Amount, szName( iPlayer ), szAuth( iPlayer ), szAddress( iPlayer ), get_user_cash( iPlayer ) );
  1489.        
  1490.         ColorPrint( client, "You took^3 %i^1 bank cash from^4 %s^1.", Amount, szName( iPlayer ) );
  1491.        
  1492.         ColorPrint( iPlayer, "You were taken^3 %i^1 bank cash by the owner^4 %s^1.", Amount, szName( client ) );
  1493.        
  1494.         return 1;
  1495.     }
  1496.    
  1497.     if ( equali( szArgs[ 0 ], "/setlevel" ) || equali( szArgs[ 0 ], "/sl" ) )
  1498.     {
  1499.         if ( !( get_user_flags( client ) & ADMIN_IMMUNITY ) )
  1500.             return 0;
  1501.        
  1502.         if ( !is_str_num( szArgs[ 2 ] ) || equali( szMsg, "/give" ) || equali( szMsg, "/sl" ) )
  1503.             return ColorPrint( client, "Syntax: /^4setlevel^1 <^4player^1> <^4amount^1>" );
  1504.        
  1505.         static iPlayer, Amount;
  1506.        
  1507.         iPlayer = cmd_target( client, szArgs[ 1 ], 8 );
  1508.        
  1509.         if ( !iPlayer )
  1510.             return ColorPrint( client, "^3%s^1 was not found!", szArgs[ 1 ] );
  1511.        
  1512.         Amount = str_to_num( szArgs[ 2 ] );
  1513.        
  1514.         if ( Amount < 0 )
  1515.             return ColorPrint( client, "You can't use a value lower than^4 0^1." );
  1516.        
  1517.         if ( Amount > sizeof gXPLevels )
  1518.             return ColorPrint( client, "You can't use a value higher than^4 %i^1.", sizeof gXPLevels );
  1519.        
  1520.         if ( Amount != 1 )
  1521.         {
  1522.             set_user_level( iPlayer, Amount - 1 );
  1523.            
  1524.             set_user_xp( iPlayer, gXPLevels[ Amount - 1 ] );
  1525.         }
  1526.        
  1527.         else if ( Amount == 1 )
  1528.         {
  1529.             set_user_level( iPlayer, 0 );
  1530.            
  1531.             set_user_xp( iPlayer, 0 );
  1532.         }
  1533.        
  1534.         log_amx( "Owner: %s (%s|%s) set %s's (%s|%s) level to %i", szName( client ), szAuth( client ), szAddress( client ), szName( iPlayer ), szAuth( iPlayer ), szAddress( iPlayer ), Amount );
  1535.        
  1536.         ColorPrint( client, "You set^3 %s's^1 level to^4 %i^1.", szName( iPlayer ), Amount );
  1537.        
  1538.         ColorPrint( iPlayer, "Owner:^3 %s^1 set your level to^4 %i^1.", szName( client ), Amount );
  1539.        
  1540.         return 1;
  1541.     }
  1542.    
  1543.     return 0;
  1544. }
  1545.  
  1546. /* View Players */
  1547.  
  1548. public CmdViewPlayers( const client )
  1549. {
  1550.     static Menu, Players[ 32 ], iNum, szTempid[ 10 ], i;
  1551.    
  1552.     get_players( Players, iNum, "ch" );
  1553.    
  1554.     formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w View\w Players", szPrefix );
  1555.    
  1556.     Menu = menu_create( szItem, "HandlerViewPlayers" );
  1557.    
  1558.     for ( i = 0; i < iNum; i++ )
  1559.     {
  1560.         num_to_str( Players[ i ], szTempid, charsmax( szTempid ) );
  1561.        
  1562.         menu_additem( Menu, szName( Players[ i ] ), szTempid );
  1563.     }
  1564.    
  1565.     menu_display( client, Menu );
  1566.    
  1567.     return 1;
  1568. }
  1569.  
  1570. public HandlerViewPlayers( client, Menu, Item )
  1571. {
  1572.     if ( Item == MENU_EXIT )
  1573.     {
  1574.         menu_destroy( Menu );
  1575.        
  1576.         return CmdMainMenu( client );
  1577.     }
  1578.    
  1579.     static mData[ 6 ], iPlayer, Trash, mName[ 32 ];
  1580.    
  1581.     menu_item_getinfo( Menu, Item, Trash, mData, charsmax( mData ), mName, charsmax( mName ), Trash );
  1582.    
  1583.     iPlayer = str_to_num( mData );
  1584.    
  1585.     if ( !iPlayer )
  1586.     {
  1587.         ColorPrint( client, "^3%s^1 is currently not connected.", mName );
  1588.        
  1589.         return CmdViewPlayers( client );
  1590.     }
  1591.    
  1592.     menu_destroy( Menu );
  1593.    
  1594.     return CmdViewThePlayer( client, iPlayer, mData );
  1595. }
  1596.  
  1597. public CmdViewThePlayer( const client, const iPlayer, Data[] )
  1598. {
  1599.     static Menu, Cash, Bank, iKnife, Knife;
  1600.    
  1601.     formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w View\w Players^n^nYou are viewing\r %s\d:", szPrefix, szName( iPlayer ) );
  1602.    
  1603.     Menu = menu_create( szItem, "HandlerViewThePlayer" );
  1604.    
  1605.     Cash        = get_user_cash( iPlayer );
  1606.     formatex( szItem, charsmax( szItem ), "\dPocket Cash:\y %i\w Cash", Cash );
  1607.     menu_additem( Menu, szItem, Data );
  1608.    
  1609.     Bank        = gIndex[ iPlayer ][ BANK ];
  1610.     formatex( szItem, charsmax( szItem ), "\dBank Cash:\y %i\w Cash", Bank );
  1611.     menu_additem( Menu, szItem, Data );
  1612.    
  1613.     iKnife      = gIndex[ iPlayer ][ gKNIFE ];
  1614.     formatex( szItem, charsmax( szItem ), "\dUsed Knife:\y %s \r(\w%i\r)", g_szKnives[ iKnife ][ g_kName ], iKnife );
  1615.     menu_additem( Menu, szItem, Data );
  1616.    
  1617.     Knife       = gIndex[ iPlayer ][ KNIFE ];
  1618.     formatex( szItem, charsmax( szItem ), "\dOwned Knife:\y %s \r(\w%i\r)", g_szKnives[ Knife ][ g_kName ], Knife );
  1619.     menu_additem( Menu, szItem, Data );
  1620.    
  1621.     formatex( szItem, charsmax( szItem ), "\dLevel:\y %i \r(\w%i\d/\w%i\r)", get_user_level( client ) + 1, get_user_xp( client ), gXPLevels[ get_user_level( client ) ]  );
  1622.     menu_additem( Menu, szItem, Data );
  1623.    
  1624.     menu_setprop( Menu, MPROP_EXITNAME, "Back" );
  1625.    
  1626.     menu_display( client, Menu );
  1627.    
  1628.     return 1;
  1629. }
  1630.  
  1631. public HandlerViewThePlayer( client, Menu, Item )
  1632. {
  1633.     if ( Item == MENU_EXIT )
  1634.     {
  1635.         menu_destroy( Menu );
  1636.        
  1637.         return CmdViewPlayers( client );
  1638.     }
  1639.    
  1640.     static Trash, mData[ 6 ], Key;
  1641.    
  1642.     menu_item_getinfo( Menu, Item, Trash, mData, charsmax( mData ), _,_, Trash );
  1643.    
  1644.     Key = str_to_num( mData );
  1645.    
  1646.     menu_destroy( Menu );
  1647.    
  1648.     return CmdViewThePlayer( client, Key, mData );
  1649. }
  1650.  
  1651. /* Main Shop Menu */
  1652.  
  1653. public CmdMainMenu( const client )
  1654. {
  1655.     formatex( szItem, charsmax( szItem ), "\r[%s]\w Shop Menu^nYou have\y %i\w Cash", szPrefix, get_user_cash( client ) );
  1656.    
  1657.     new Menu = menu_create( szItem, "HandlerMainMenu" );
  1658.    
  1659.     menu_additem( Menu, "Grenades\y Shop" );
  1660.    
  1661.     menu_additem( Menu, "Health\y Shop" );
  1662.    
  1663.     menu_additem( Menu, "Armor\y Shop" );
  1664.    
  1665.     menu_additem( Menu, "Powers\y Shop^n" );
  1666.    
  1667.     menu_additem( Menu, "Knives\y Shop" );
  1668.    
  1669.     menu_additem( Menu, "View Players" );
  1670.    
  1671.     menu_display( client, Menu );
  1672.    
  1673.     return 1;
  1674. }
  1675.  
  1676. public HandlerMainMenu( client, Menu, Item )
  1677. {
  1678.     if ( Item == MENU_EXIT )
  1679.     {
  1680.         menu_destroy( Menu );
  1681.        
  1682.         return 1;
  1683.     }
  1684.    
  1685.     static iMenu, Float: price, szPremium[ 64 ];
  1686.    
  1687.     price           = 1.0
  1688.    
  1689.     szPremium       = "^n^nNote:\y Premium Members\d get a\r 10%\d discount!";
  1690.    
  1691.     switch ( Item )
  1692.     {
  1693.         case 0:
  1694.         {
  1695.             formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\y Grenades\w Menu^nYou have\y %i\w Cash%s", szPrefix, get_user_cash( client ), szPremium );
  1696.            
  1697.             iMenu = menu_create( szItem, "HandlerGrenadesMenu" );
  1698.            
  1699.             for ( new i; i < sizeof g_szGrenades; i++ )
  1700.             {
  1701.                 formatex( szItem, charsmax( szItem ), "\d%s Grenade\w for\r %i\w Cash", g_szGrenades[ i ][ g_mName ], floatround( g_szGrenades[ i ][ g_mPrice ] * price ) );
  1702.                
  1703.                 menu_additem( iMenu, szItem );
  1704.             }
  1705.         }  
  1706.        
  1707.         case 1:
  1708.         {  
  1709.             formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\y Health\w Menu^nYou have\y %i\w Cash%s", szPrefix, get_user_cash( client ), szPremium );
  1710.            
  1711.             iMenu = menu_create( szItem, "HandlerHealthMenu" );
  1712.            
  1713.             for ( new i; i < g_szHealthMax; i++ )
  1714.             {
  1715.                 formatex( szItem, charsmax( szItem ), "\d%i Health\w for\r %i\w Cash", (i+1)*g_szHealthAmount, floatround( ( (i*g_szHealth) + g_szHealthStart) * price ) );
  1716.                
  1717.                 menu_additem( iMenu, szItem );
  1718.             }
  1719.         }
  1720.        
  1721.         case 2:
  1722.         {
  1723.             formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\y Armor\w Menu^nYou have\y %i\w Cash%s", szPrefix, get_user_cash( client ), szPremium );
  1724.            
  1725.             iMenu = menu_create( szItem, "HandlerArmorMenu" );
  1726.            
  1727.             for ( new i; i < g_szArmorMax; i++ )
  1728.             {
  1729.                 formatex( szItem, charsmax( szItem ), "\d%i Armor\w for\r %i\w Cash", (i+1)*g_szArmorAmount, floatround( ((i*g_szArmor) + g_szArmorStart) * price ) );
  1730.                
  1731.                 menu_additem( iMenu, szItem );
  1732.             }
  1733.         }
  1734.        
  1735.         case 3:
  1736.         {
  1737.             formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\y Powerups\w Menu^nYou have\y %i\w Cash%s", szPrefix, get_user_cash( client ), szPremium );
  1738.            
  1739.             iMenu = menu_create( szItem, "HandlerPowerupsMenu" );
  1740.            
  1741.             for ( new i; i < sizeof g_szPowerups; i++ )
  1742.             {
  1743.                 formatex( szItem, charsmax( szItem ), "\d%s\w for\y %i\w seconds\d,\r %i\w Cash", g_szPowerups[ i ][ g_mName ], g_szPowerups[ i ][ g_mTime ], floatround( g_szPowerups[ i ][ g_mPrice ] * price ) );
  1744.                
  1745.                 menu_additem( iMenu, szItem );
  1746.             }
  1747.         }
  1748.        
  1749.         case 4:
  1750.             return CmdKnivesMenu( client );
  1751.        
  1752.         case 5:
  1753.             return CmdViewPlayers( client );
  1754.     }
  1755.  
  1756.    
  1757.     menu_setprop( iMenu, MPROP_EXITNAME, "Back" );
  1758.    
  1759.     menu_display( client, iMenu );
  1760.    
  1761.     menu_destroy( Menu );
  1762.    
  1763.     return 1;
  1764. }
  1765.  
  1766. /* Grenades Menu Handler */
  1767.  
  1768. public HandlerGrenadesMenu( client, Menu, Item )
  1769. {
  1770.     if ( Item == MENU_EXIT )
  1771.     {
  1772.         menu_destroy( Menu );
  1773.        
  1774.         return CmdMainMenu( client );
  1775.     }
  1776.    
  1777.     if ( !is_user_valid( client ) )
  1778.    
  1779.     if ( !is_user_valid( client ) )
  1780.         return ColorPrint( client, "%s", get_user_reason( client ) );
  1781.    
  1782.     if ( user_has_weapon( client, g_szGrenades[ Item ][ g_mWeapon ] ) )
  1783.     {
  1784.         ColorPrint( client, "You already have a%s^3 %s%s^1.", (Item==0) ? "n" : "", g_szGrenades[ Item ][ g_mName ], (Item==3) ? "" : " Grenade"  );
  1785.        
  1786.         return CmdMainMenu( client );
  1787.     }
  1788.    
  1789.     static Price;
  1790.    
  1791.     Price   = g_szGrenades[ Item ][ g_mPrice ];
  1792.  
  1793.     if ( get_user_cash( client ) < Price )
  1794.     {
  1795.         ColorPrint( client, "You're missing^3 %i Cash^1 to purchase a%s^4 %s%s^1.", Price - get_user_cash( client ), (Item==0) ? "n" : "", g_szGrenades[ Item ][ g_mName ], (Item==3) ? "" : " Grenade"  );
  1796.        
  1797.         return CmdMainMenu( client );
  1798.     }
  1799.    
  1800.     fm_give_item( client, g_szGrenades[ Item ][ g_mClass ] );
  1801.    
  1802.     set_user_cash( client, get_user_cash( client ) - Price );
  1803.    
  1804.     ColorPrint( client, "You purchased a%s^3 %s%s^1.", (Item==0) ? "n" : "", g_szGrenades[ Item ][ g_mName ], (Item==3) ? "" : " Grenade" );
  1805.    
  1806.     return CmdMainMenu( client );
  1807. }
  1808.  
  1809. /* Health Menu */
  1810.  
  1811. public HandlerHealthMenu( client, Menu, Item )
  1812. {
  1813.     if ( Item == MENU_EXIT )
  1814.     {
  1815.         menu_destroy( Menu );
  1816.        
  1817.         return CmdMainMenu( client );
  1818.     }
  1819.    
  1820.     if ( !is_user_valid( client ) )
  1821.         return ColorPrint( client, "%s", get_user_reason( client ) );
  1822.    
  1823.     static Price, Amount;
  1824.    
  1825.     Price = (Item*g_szHealth) + g_szHealthStart;
  1826.  
  1827.     Amount = (Item+1) * g_szHealthAmount;
  1828.    
  1829.     if ( get_user_cash( client ) < Price )
  1830.     {
  1831.         ColorPrint( client, "You're missing^3 %i Cash^1 to purchase a^4 %i Health Bonus^1.", Price - get_user_cash( client ), Amount );
  1832.        
  1833.         return CmdMainMenu( client );
  1834.     }
  1835.    
  1836.     fm_set_user_health( client, get_user_health( client ) + Amount );
  1837.    
  1838.     set_user_cash( client, get_user_cash( client ) - Price );
  1839.    
  1840.     ColorPrint( client, "You purchased a^3 %i Health Bonus^1.", Amount );
  1841.    
  1842.     return CmdMainMenu( client );
  1843. }
  1844.  
  1845. /* Armor Menu Handler */
  1846.  
  1847. public HandlerArmorMenu( client, Menu, Item )
  1848. {
  1849.     if ( Item == MENU_EXIT )
  1850.     {
  1851.         menu_destroy( Menu );
  1852.        
  1853.         return CmdMainMenu( client );
  1854.     }
  1855.    
  1856.     if ( !is_user_valid( client ) )
  1857.         return ColorPrint( client, "%s", get_user_reason( client ) );
  1858.    
  1859.     static Price, Amount;
  1860.    
  1861.     Price = (Item*g_szArmor) + g_szArmorStart;
  1862.  
  1863.     Amount = (Item+1) * g_szArmorAmount;
  1864.    
  1865.     if ( get_user_cash( client ) < Price )
  1866.     {
  1867.         ColorPrint( client, "You're missing^3 %i Cash^1 to purchase a^4 %i Armor Bonus^1.", Price - get_user_cash( client ), Amount );
  1868.        
  1869.         return CmdMainMenu( client );
  1870.     }
  1871.    
  1872.     fm_set_user_armor( client, get_user_armor( client ) + Amount );
  1873.    
  1874.     set_user_cash( client, get_user_cash( client ) - Price );
  1875.    
  1876.     ColorPrint( client, "You purchased a^3 %i Armor Bonus^1.", Amount );
  1877.    
  1878.     return CmdMainMenu( client );
  1879. }
  1880.  
  1881. /* Powerups Menu Handler */
  1882.  
  1883. public HandlerPowerupsMenu( client, Menu, Item )
  1884. {
  1885.     if ( Item == MENU_EXIT )
  1886.     {
  1887.         menu_destroy( Menu );
  1888.        
  1889.         return CmdMainMenu( client );
  1890.     }
  1891.    
  1892.     if ( !is_user_valid( client ) )
  1893.         return ColorPrint( client, "%s", get_user_reason( client ) );
  1894.    
  1895.     if ( bPowerup[ client ] )
  1896.     {
  1897.         ColorPrint( client, "You can only be using^4 1 Powerup^1 at a time." );
  1898.        
  1899.         return CmdMainMenu( client );
  1900.     }
  1901.    
  1902.     static Price;
  1903.    
  1904.     Price = g_szPowerups[ Item ][ g_mPrice ];
  1905.    
  1906.     if ( get_user_cash( client ) < Price )
  1907.     {
  1908.         ColorPrint( client, "You're missing^3 %i Cash^1 to purchase a^4 %s Powerup^1.", Price - get_user_cash( client ), g_szPowerups[ Item ][ g_mName ] );
  1909.        
  1910.         return CmdMainMenu( client );
  1911.     }
  1912.    
  1913.     switch ( Item )
  1914.     {
  1915.         case 0:
  1916.             fm_set_user_godmode( client, 1 );
  1917.        
  1918.         case 1:
  1919.             fm_set_user_rendering( client, kRenderFxGlowShell, 0, 0, 0, kRenderTransAlpha, 0 );
  1920.        
  1921.         case 2:
  1922.             cs_set_user_model( client, "urban" );
  1923.        
  1924.         case 3:
  1925.             fm_set_user_gravity( client, 0.5 );
  1926.        
  1927.         case 4:
  1928.         {
  1929.             fIndex[ client ][ GAMETIME ] = get_gametime();
  1930.            
  1931.             CmdSuicideBomber( client );
  1932.         }
  1933.        
  1934.         case 5:
  1935.         {
  1936.             fm_set_user_maxspeed( client, fm_get_user_maxspeed( client ) * 2 );
  1937.            
  1938.             bSpeed[ client ] = true;
  1939.         }
  1940.     }
  1941.    
  1942.     if ( Item != 4 )
  1943.         set_task( float( g_szPowerups[ Item ][ g_mTime ] ), g_szPowerups[ Item ][ g_mClass ], client );
  1944.    
  1945.     set_user_cash( client, get_user_cash( client ) - Price );
  1946.    
  1947.     ColorPrint( client, "You purchased a^3 %s Powerup^4 %i^1 seconds.", g_szPowerups[ Item ][ g_mName ], g_szPowerups[ Item ][ g_mTime ] );
  1948.    
  1949.     bPowerup[ client ] = true;
  1950.    
  1951.     return CmdMainMenu( client );
  1952. }
  1953.  
  1954. /* Tasks for Powerups */
  1955.  
  1956. public taskRemoveGodmode( const client )
  1957. {
  1958.     if ( !bPowerup[ client ] )
  1959.         return 1;
  1960.        
  1961.     fm_set_user_godmode( client, 0 );
  1962.    
  1963.     bPowerup[ client ] = false;
  1964.    
  1965.     remove_task( client );
  1966.    
  1967.     return ColorPrint( client, "Your^3 Godmode Powerup^1 has been^4 removed^1." );
  1968. }
  1969.  
  1970. public taskRemoveStealth( const client  )
  1971. {
  1972.     if ( !bPowerup[ client ] )
  1973.         return 1;
  1974.        
  1975.     fm_set_user_rendering( client );
  1976.    
  1977.     bPowerup[ client ] = false;
  1978.    
  1979.     remove_task( client );
  1980.    
  1981.     return ColorPrint( client, "Your^3 Stealth Powerup^1 has been^4 removed^1." );
  1982. }
  1983.  
  1984. public taskRemoveCamouflage( const client )
  1985. {
  1986.     if ( !bPowerup[ client ] )
  1987.         return 1;
  1988.        
  1989.     cs_reset_user_model( client );
  1990.    
  1991.     bPowerup[ client ] = false;
  1992.    
  1993.     remove_task( client );
  1994.    
  1995.     return ColorPrint( client, "Your^3 Camouflage Powerup^1 has been^4 removed^1." );
  1996. }
  1997.  
  1998. public taskRemoveGravity( const client )
  1999. {
  2000.     if ( !bPowerup[ client ] )
  2001.         return 1;
  2002.        
  2003.     fm_set_user_gravity( client, 1.0 );
  2004.    
  2005.     bPowerup[ client ] = false;
  2006.    
  2007.     remove_task( client );
  2008.    
  2009.     return ColorPrint( client, "Your^3 Godmode Powerup^1 has been^4 removed^1." );
  2010. }
  2011.  
  2012. public taskRemoveSpeed( const client )
  2013. {
  2014.     if ( !bPowerup[ client ] )
  2015.         return 1;
  2016.        
  2017.     fm_set_user_maxspeed( client, 240.0 );
  2018.    
  2019.     bSpeed[ client ] = false;
  2020.    
  2021.     bPowerup[ client ] = false;
  2022.    
  2023.     remove_task( client );
  2024.    
  2025.     return ColorPrint( client, "Your^3 Speed Powerup^1 has been^4 removed^1." );
  2026. }
  2027.  
  2028. /* Suicide Bomber */
  2029.  
  2030. public CmdSuicideBomber( const client )
  2031. {
  2032.     if ( !is_user_valid( client ) )
  2033.         return 1;
  2034.    
  2035.     static iOrigin[ 3 ];
  2036.    
  2037.     get_user_origin( client, iOrigin );
  2038.    
  2039.     if ( fIndex[ client ][ GAMETIME ] < get_gametime() - g_szPowerups[ 4 ][ g_mTime ] )
  2040.     {
  2041.         message_begin( MSG_PVS, SVC_TEMPENTITY, iOrigin, 0 );
  2042.         write_byte( TE_EXPLOSION );     // TE ID
  2043.         write_coord( iOrigin[ 0 ] );        // X
  2044.         write_coord( iOrigin[ 1 ] );        // Y
  2045.         write_coord( iOrigin[ 2 ] - 20 );   // Z
  2046.         write_short( g_szExplosionSprite ); // Sprite
  2047.         write_byte( 40 );           // Scale in 0.1
  2048.         write_byte( 10 )            // Framerate
  2049.         write_byte( 0 );            // Flags
  2050.         message_end();  
  2051.        
  2052.         user_kill( client );
  2053.        
  2054.         static Players[ 32 ], iNum, iPlayer, fOrigin[ 3 ];
  2055.        
  2056.         get_players( Players, iNum, "ach" );
  2057.        
  2058.         for ( new i; i < iNum; i++ )
  2059.         {
  2060.             iPlayer = Players[ i ];
  2061.            
  2062.             get_user_origin( iPlayer, fOrigin );
  2063.            
  2064.             if ( get_distance( iOrigin, fOrigin ) <= 300 )
  2065.             {
  2066.                 make_deathmsg( client, iPlayer, 1, "weapon_hegrenade" );
  2067.                
  2068.                 user_silentkill( iPlayer );
  2069.                
  2070.                 if ( cs_get_user_team( iPlayer ) == CS_TEAM_CT )
  2071.                     set_user_cash( client, get_user_cash( client ) + CASH_KILL );
  2072.             }
  2073.         }
  2074.        
  2075.         bPowerup[ client ] = false;
  2076.        
  2077.         remove_task( client );
  2078.        
  2079.         return 1;
  2080.     }
  2081.    
  2082.     message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
  2083.    
  2084.     write_byte( TE_BEAMCYLINDER );      // TE ID
  2085.    
  2086.     write_coord( iOrigin[ 0 ] );        // X
  2087.    
  2088.     write_coord( iOrigin[ 1 ] );        // Y
  2089.    
  2090.     write_coord( iOrigin[ 2 ] - 20 );   // Z
  2091.    
  2092.     write_coord( iOrigin[ 0 ] );        // X AXIS
  2093.    
  2094.     write_coord( iOrigin[ 1 ] );        // Y AXIS
  2095.    
  2096.     write_coord( iOrigin[ 2 ] + 300 )// Z AXIS
  2097.    
  2098.     write_short( g_szBeaconSpirte );    // Sprite
  2099.    
  2100.     write_byte( 0 );            // Startframe
  2101.    
  2102.     write_byte( 1 );            // Framerate
  2103.    
  2104.     write_byte( 9 );            // Life
  2105.    
  2106.     write_byte( 50 );           // Width
  2107.    
  2108.     write_byte( 1 );            // Noise
  2109.    
  2110.     write_byte( 250 );          // Red
  2111.    
  2112.     write_byte( 0 );            // Green
  2113.    
  2114.     write_byte( 0 );            // Blue
  2115.    
  2116.     write_byte( 200 );          // Brightness
  2117.    
  2118.     write_byte( 0 );            // Speed
  2119.    
  2120.     message_end();
  2121.    
  2122.     emit_sound( client, CHAN_ITEM, g_szBeacon[ 0 ], 1.0, ATTN_NONE, 0, PITCH_NORM );
  2123.    
  2124.     set_task( 0.6, "CmdSuicideBomber", client );
  2125.    
  2126.     return 1;
  2127. }
  2128.  
  2129. /* Callbacks */
  2130.  
  2131. public CallBackUse_CmdKnivesItems( client, Menu, Item )
  2132. {
  2133.     static mData[ 6 ], Trash, Key;
  2134.    
  2135.     menu_item_getinfo( Menu, Item, Trash, mData, charsmax( mData ), _, _, Trash );
  2136.    
  2137.     Key = str_to_num( mData );
  2138.    
  2139.     if ( gIndex[ client ][ gKNIFE ] == Key )
  2140.         return ITEM_DISABLED;
  2141.    
  2142.     if ( gIndex[ client ][ KNIFE ] < Key )
  2143.         return ITEM_DISABLED;
  2144.    
  2145.     return ITEM_ENABLED;
  2146. }
  2147.  
  2148. public CallBackPurchase_CmdKnivesItems( client, Menu, Item )
  2149. {
  2150.     static mData[ 6 ], Trash, Key;
  2151.    
  2152.     menu_item_getinfo( Menu, Item, Trash, mData, charsmax( mData ), _, _, Trash );
  2153.    
  2154.     Key = str_to_num( mData );
  2155.    
  2156.     if ( gIndex[ client ][ KNIFE ] + 1 != Key )
  2157.         return ITEM_DISABLED;
  2158.    
  2159.     if ( get_user_cash( client ) < g_szKnives[ Key ][ g_kPrice ] )
  2160.         return ITEM_DISABLED;
  2161.    
  2162.     if ( get_user_level( client ) < g_szKnives[ Key ][ g_kLevelNeeded ] -1 )
  2163.         return ITEM_DISABLED;
  2164.    
  2165.     return ITEM_ENABLED;
  2166. }
  2167.  
  2168. public MenuItemDisable( client, Menu, Item )
  2169.     return ITEM_DISABLED;  
  2170.  
  2171. /* Bank */
  2172.    
  2173. public CmdBankMenu( client )
  2174. {
  2175.     static cash, bank, Menu;
  2176.    
  2177.     cash    = get_user_cash( client );
  2178.     bank    = get_user_bank( client );
  2179.    
  2180.     formatex( szItem, charsmax( szItem ), "\r[\w%s\r]\w Bank System Menu", szPrefix );
  2181.    
  2182.     Menu = menu_create( szItem, "SubBankMenu" );
  2183.    
  2184.     formatex( szItem, charsmax( szItem ), "%sDeposit\y Cash", (get_user_cash( client )<=0) ? "\d" : "" );
  2185.    
  2186.     menu_additem( Menu, szItem );
  2187.    
  2188.     formatex( szItem, charsmax( szItem ), "%sWithdraw\y Cash^n", (get_user_bank( client )<=0) ? "\d" : "" );
  2189.    
  2190.     menu_additem( Menu, szItem );
  2191.    
  2192.     menu_addtext( Menu, "\wAccount\y Bank\w Statement:" );
  2193.    
  2194.     formatex( szItem, charsmax( szItem ), "\y- \dAccount Balance:\y %i\w Cash^n\y- \dPocket Cash:\y %i\w Cash^n\y- \dTotal Cash:\y %i\w Cash",bank, cash, bank + cash );
  2195.    
  2196.     menu_addtext( Menu, szItem );
  2197.    
  2198.     menu_display( client, Menu );
  2199.    
  2200.     return 1;
  2201. }
  2202.  
  2203. public SubBankMenu( client, Menu, Item )
  2204. {
  2205.     if ( Item == MENU_EXIT )
  2206.     {
  2207.         menu_destroy( Menu );
  2208.        
  2209.         return 1;
  2210.     }
  2211.    
  2212.     switch ( Item )
  2213.     {
  2214.         case 0:
  2215.         {
  2216.             if ( get_user_cash( client ) <= 0 )
  2217.                 return CmdBankMenu( client );
  2218.            
  2219.             client_cmd( client, "messagemode _deposit" );
  2220.         }
  2221.        
  2222.         case 1:
  2223.         {
  2224.             if ( get_user_bank( client ) <= 0 )
  2225.                 return CmdBankMenu( client );
  2226.            
  2227.             client_cmd( client, "messagemode _withdraw" );
  2228.         }
  2229.     }
  2230.    
  2231.     menu_destroy( Menu );
  2232.    
  2233.     return 1;
  2234. }
  2235.  
  2236. public CmdDeposit( client )
  2237. {
  2238.     static szArgs[ 128 ], Amount;
  2239.    
  2240.     read_args( szArgs, charsmax( szArgs ) );
  2241.    
  2242.     remove_quotes( szArgs );
  2243.    
  2244.     Amount = str_to_num( szArgs );
  2245.    
  2246.     if ( !is_str_num( szArgs ) )
  2247.     {
  2248.         client_cmd( client, "messagemode _deposit" );
  2249.        
  2250.         return ColorPrint( client, "Please use valid numbers." );
  2251.     }
  2252.    
  2253.     if ( Amount > get_user_cash( client ) )
  2254.     {
  2255.         client_cmd( client, "messagemode _deposit" );
  2256.        
  2257.         return ColorPrint( client, "You don't have this amount of cash." );
  2258.     }
  2259.    
  2260.     if ( Amount < 300 )
  2261.         return ColorPrint( client, "You need to deposit a^3 minimum^1 of^4 300^1 cash." );
  2262.    
  2263.     set_user_bank( client, get_user_bank( client ) + Amount );
  2264.    
  2265.     set_user_cash( client, get_user_cash( client ) - Amount );
  2266.    
  2267.     ColorPrint( client, "You made a^3 deposit^1 of^4 %i^1 cash to the bank.", Amount );
  2268.    
  2269.     return CmdBankMenu( client );
  2270. }
  2271.  
  2272. public CmdWithdraw( client )
  2273. {
  2274.     static szArgs[ 128 ], Amount;
  2275.    
  2276.     read_args( szArgs, charsmax( szArgs ) );
  2277.    
  2278.     remove_quotes( szArgs );
  2279.    
  2280.     Amount = str_to_num( szArgs );
  2281.    
  2282.     if ( !is_str_num( szArgs ) )
  2283.     {
  2284.         client_cmd( client, "messagemode _withdraw" );
  2285.        
  2286.         return ColorPrint( client, "Please use valid numbers." );
  2287.     }
  2288.    
  2289.     if ( Amount > get_user_bank( client ) )
  2290.     {
  2291.         client_cmd( client, "messagemode _withdraw" );
  2292.        
  2293.         return ColorPrint( client, "You don't have this amount of cash in the bank." );
  2294.     }
  2295.    
  2296.     if ( Amount < 300 )
  2297.         return ColorPrint( client, "You need to withdraw a^3 minimum^1 of^4 300^1 cash." );
  2298.    
  2299.     static Tax, Amount2;
  2300.    
  2301.     Tax = BANK_TAX;
  2302.        
  2303.     Amount2 = Amount - (Amount / 100 * Tax);
  2304.    
  2305.     set_user_bank( client, get_user_bank( client ) - Amount );
  2306.    
  2307.     set_user_cash( client, get_user_cash( client ) + Amount2 );
  2308.    
  2309.     ColorPrint( client, "You made a^3 withdraw^1 of^4 %i^1 cash from the bank, and you recieved^3 %i^1 cash. (^4%i%%^1)", Amount, Amount2, Tax );
  2310.    
  2311.     return CmdBankMenu( client );
  2312. }
  2313. /* FVault */
  2314.  
  2315. #if defined USE_FVAULT
  2316.  
  2317. stock SaveVaultKey( const index )
  2318. {
  2319.     new szKey[ 64 ], szData[ 256 ];
  2320.    
  2321.     formatex( szKey, charsmax( szKey ), "%s-Shop", szAddress( index ) );
  2322.    
  2323.     if ( IsValidAuthid( szAuth( index ) ) )
  2324.         formatex( szKey, charsmax( szKey ), "%s-Shop", szAuth( index ) );
  2325.    
  2326.     formatex( szData, charsmax( szData ), "^"%s^"#%i#%i#%i#%i#%i#%i",szName(index),
  2327.     gIndex[ index ][ CASH ], gIndex[ index ][ BANK ], gIndex[ index ][ KNIFE ], gIndex[ index ][ gKNIFE ], gIndex[ index ][ gXP ], gIndex[ index ][ gLVL ] );
  2328.    
  2329.     fvault_set_data( g_szVault, szKey, szData );
  2330. }
  2331.  
  2332. stock LoadVaultKey( const index )
  2333. {
  2334.     new szKey[ 64 ], szData[ 256 ];
  2335.    
  2336.     formatex( szKey, charsmax( szKey ), "%s-Shop", szAddress( index ) );
  2337.    
  2338.     if ( IsValidAuthid( szAuth( index ) ) )
  2339.         formatex( szKey, charsmax( szKey ), "%s-Shop", szAuth( index ) );
  2340.    
  2341.     if ( fvault_get_data( g_szVault, szKey, szData, charsmax( szData ) ) == 1 )
  2342.     {
  2343.         replace_all( szData, charsmax( szData ), "#", " " );
  2344.        
  2345.         static iData[ 7 ][ 32 ];
  2346.        
  2347.         parse( szData, iData[ 0 ], 31, iData[ 1 ], 31, iData[ 2 ], 31, iData[ 3 ], 31, iData[ 4 ], 31, iData[ 5 ], 31 , iData[ 6 ], 31 );
  2348.        
  2349.         gIndex[ index ][ CASH ]         = str_to_num( iData[ 1 ] );
  2350.         gIndex[ index ][ BANK ]         = str_to_num( iData[ 2 ] );
  2351.         gIndex[ index ][ KNIFE ]            = str_to_num( iData[ 3 ] );
  2352.         gIndex[ index ][ gKNIFE ]       = str_to_num( iData[ 4 ] );
  2353.         gIndex[ index ][ gXP ]          = str_to_num( iData[ 5 ] );
  2354.         gIndex[ index ][ gLVL ]         = str_to_num( iData[ 6 ] );
  2355.     }
  2356.    
  2357.     else
  2358.     {
  2359.         gIndex[ index ][ CASH ]         = 0;
  2360.         gIndex[ index ][ BANK ]         = 0;
  2361.         gIndex[ index ][ KNIFE ]            = 0;
  2362.         gIndex[ index ][ gKNIFE ]       = 0;
  2363.         gIndex[ index ][ gXP ]          = 0;
  2364.         gIndex[ index ][ gLVL ]         = 0;
  2365.     }
  2366.        
  2367. }
  2368.  
  2369. #else
  2370.  
  2371. /* NVault */
  2372.  
  2373. stock SaveVaultKey( const index )
  2374. {
  2375.     new szKey[ 64 ], szData[ 256 ];
  2376.    
  2377.     formatex( szKey, charsmax( szKey ), "%s-Shop", szAddress( index ) );
  2378.    
  2379.     if ( IsValidAuthid( szAuth( index ) ) )
  2380.         formatex( szKey, charsmax( szKey ), "%s-Shop", szAuth( index ) );
  2381.    
  2382.     formatex( szData, charsmax( szData ), "%i#%i#%i#%i#%i#%i",
  2383.     gIndex[ index ][ CASH ], gIndex[ index ][ BANK ], gIndex[ index ][ KNIFE ], gIndex[ index ][ gKNIFE ], gIndex[ index ][ gXP ], gIndex[ index ][ gLVL ] );
  2384.    
  2385.     nvault_set( g_mVault, szKey, szData );
  2386. }
  2387.  
  2388. stock LoadVaultKey( const index )
  2389. {
  2390.     new szKey[ 64 ], szData[ 256 ];
  2391.    
  2392.     formatex( szKey, charsmax( szKey ), "%s-Shop", szAddress( index ) );
  2393.    
  2394.     if ( IsValidAuthid( szAuth( index ) ) )
  2395.         formatex( szKey, charsmax( szKey ), "%s-Shop", szAuth( index ) );
  2396.        
  2397.     formatex( szData, charsmax( szData ), "%i#%i#%i#%i#%i#%i",
  2398.     gIndex[ index ][ CASH ], gIndex[ index ][ BANK ], gIndex[ index ][ KNIFE ], gIndex[ index ][ gKNIFE ], gIndex[ index ][ gXP ], gIndex[ index ][ gLVL ] );
  2399.    
  2400.     nvault_get( g_mVault, szKey, szData, charsmax( szData ) );
  2401.    
  2402.     replace_all( szData, charsmax( szData ), "#", " " );
  2403.    
  2404.     static iData[ 6 ][ 32 ];
  2405.    
  2406.     parse( szData, iData[ 0 ], 31, iData[ 1 ], 31, iData[ 2 ], 31, iData[ 3 ], 31, iData[ 4 ], 31, iData[ 5 ], 31 );
  2407.    
  2408.     gIndex[ index ][ CASH ]         = str_to_num( iData[ 0 ] );
  2409.     gIndex[ index ][ BANK ]         = str_to_num( iData[ 1 ] );
  2410.     gIndex[ index ][ KNIFE ]            = str_to_num( iData[ 2 ] );
  2411.     gIndex[ index ][ gKNIFE ]       = str_to_num( iData[ 3 ] );
  2412.     gIndex[ index ][ gXP ]          = str_to_num( iData[ 4 ] );
  2413.     gIndex[ index ][ gLVL ]         = str_to_num( iData[ 5 ] );
  2414. }
  2415. #endif
  2416.  
  2417. /* Stocks */
  2418.  
  2419. stock ColorPrint( const index, const string[], any:... )
  2420. {
  2421.     new szMsg[ 191 ], Players[ 32 ], PNum = 1;
  2422.    
  2423.     static iLen; iLen = formatex( szMsg, charsmax( szMsg ), "%s^1 ", szChatPrefix );
  2424.    
  2425.     vformat( szMsg[ iLen ], charsmax( szMsg ) - iLen, string, 3 );
  2426.    
  2427.     if ( index )
  2428.         Players[ 0 ] = index;
  2429.    
  2430.     else
  2431.         get_players( Players, PNum, "ch" );
  2432.    
  2433.     for ( new i; i < PNum; i++ )
  2434.     {
  2435.         if( is_user_connected( Players[ i ] ) )
  2436.         {
  2437.             message_begin( MSG_ONE_UNRELIABLE, get_user_msgid( "SayText" ), _, Players[ i ] );
  2438.            
  2439.             write_byte( Players[ i ] );
  2440.            
  2441.             write_string( szMsg );
  2442.            
  2443.             message_end( );
  2444.         }
  2445.     }
  2446.    
  2447.     return 1;
  2448. }
  2449.  
  2450. stock get_user_xp( const index )
  2451.     return gIndex[ index ][ gXP ];
  2452.    
  2453. stock set_user_xp( const index, XP )
  2454. {
  2455.     if ( !is_user_connected( index ) )
  2456.         return -1;
  2457.    
  2458.     if ( XP < 0 )
  2459.         XP = 0;
  2460.    
  2461.     gIndex[ index ][ gXP ] = XP;
  2462.    
  2463.     CheckLevel( index );
  2464.    
  2465.     SaveVaultKey( index );
  2466.    
  2467.     return 1;
  2468. }
  2469.  
  2470. stock get_user_level( const index )
  2471.     return gIndex[ index ][ gLVL ];
  2472.  
  2473. stock set_user_level( const index, LVL )
  2474. {
  2475.     if ( !is_user_connected( index ) )
  2476.         return -1;
  2477.    
  2478.     if ( LVL < 0 )
  2479.         LVL = 0;
  2480.    
  2481.     gIndex[ index ][ gLVL ] = LVL;
  2482.    
  2483.     SaveVaultKey( index );
  2484.    
  2485.     return 1;
  2486. }
  2487.  
  2488. stock CheckLevel( const index )
  2489. {
  2490.     if ( get_user_level( index ) +1 >= sizeof gXPLevels )
  2491.         return 1;
  2492.    
  2493.     while ( get_user_xp( index ) >= gXPLevels[ get_user_level( index ) ] )
  2494.     {
  2495.         set_user_level( index, get_user_level( index ) + 1 );
  2496.        
  2497.         ColorPrint( index, "Congratulation! You are now at level^4 %i^1!", get_user_level( index ) + 1 );
  2498.        
  2499.         ColorPrint( 0, "^3%s^1 is now on level^4 %i^1!,^3 Congratulation!", szName( index ), get_user_level( index ) + 1 );
  2500.        
  2501.         break;
  2502.     }
  2503.    
  2504.     return 1;
  2505. }
  2506.  
  2507. stock get_user_cash( const index )
  2508.     return gIndex[ index ][ CASH ];
  2509.    
  2510. stock set_user_cash( const index, Cash )
  2511. {
  2512.     if ( !is_user_connected( index ) )
  2513.         return 1;
  2514.    
  2515.     if ( Cash < 0 )
  2516.         Cash = 0;
  2517.    
  2518.     gIndex[ index ][ CASH ] = Cash;
  2519.    
  2520.     cs_set_user_money( index, Cash );
  2521.    
  2522.     SaveVaultKey( index );
  2523.    
  2524.     return 1;
  2525. }
  2526.  
  2527. stock get_user_bank( const index )
  2528.     return gIndex[ index ][ BANK ];
  2529.    
  2530. stock set_user_bank( const index, Cash )
  2531. {
  2532.     if ( !is_user_connected( index ) )
  2533.         return 1;
  2534.    
  2535.     if ( Cash < 0 )
  2536.         Cash = 0;
  2537.    
  2538.     gIndex[ index ][ BANK ] = Cash;
  2539.  
  2540.     SaveVaultKey( index );
  2541.    
  2542.     return 1;
  2543. }
  2544.  
  2545. stock szName( const index )
  2546. {
  2547.     static g_szName[ 32 ];
  2548.    
  2549.     get_user_name( index, g_szName, charsmax( g_szName ) );
  2550.    
  2551.     return g_szName;
  2552. }
  2553.  
  2554. stock szAuth( const index )
  2555. {
  2556.     static g_szAuthID[ 35 ];
  2557.    
  2558.     get_user_authid( index, g_szAuthID, charsmax( g_szAuthID ) );
  2559.    
  2560.     return g_szAuthID;
  2561. }
  2562.  
  2563. stock szAddress( const index )
  2564. {
  2565.     static g_szAddress[ 32 ];
  2566.    
  2567.     get_user_ip( index, g_szAddress, charsmax( g_szAddress ), 1 );
  2568.    
  2569.     return g_szAddress;
  2570. }
  2571.  
  2572. stock bool: IsValidAuthid( const szIndexAuth[] )
  2573.     return regex_match_c( szIndexAuth, gSteamPattern, gRegexReturn) > 0;
  2574.  
  2575. stock bool: IsValidIP( const szIndexIP[] )
  2576.     return regex_match_c( szIndexIP, gIPattern, gRegexReturn ) > 0;
  2577.  
  2578. stock bool: is_user_valid( const index )
  2579. {
  2580.     if ( !is_user_alive( index ) )
  2581.         return false;
  2582.    
  2583.     if ( cs_get_user_team( index ) != CS_TEAM_T )
  2584.         return false;
  2585.    
  2586.     return true;
  2587. }
  2588.  
  2589. stock get_user_reason( const index )
  2590. {
  2591.     static szReason[ 128 ];
  2592.    
  2593.     if ( !is_user_alive( index ) )
  2594.         formatex( szReason, charsmax( szReason ), "You need to be^3 Alive^1." );
  2595.    
  2596.     else if ( cs_get_user_team( index ) != CS_TEAM_T )
  2597.         formatex( szReason, charsmax( szReason ), "You need to be a^3 Prisoner^1." );
  2598.    
  2599.     return szReason
  2600. }
  2601.  
  2602. stock HamStripWeapon( const client, const szWeapon[] )
  2603. {
  2604.     if ( !equal( szWeapon, "weapon_", 7 ) )
  2605.         return 0;
  2606.    
  2607.     new WeaponID = get_weaponid( szWeapon );
  2608.    
  2609.     if ( !WeaponID )
  2610.         return 0;
  2611.    
  2612.     new ent;
  2613.    
  2614.     while ( ( ent = engfunc( EngFunc_FindEntityByString, ent, "classname", szWeapon ) ) && pev( ent, pev_owner ) != client ) {}
  2615.    
  2616.     if ( !ent )
  2617.         return 0;
  2618.    
  2619.     if ( get_user_weapon( client ) == WeaponID )
  2620.         ExecuteHamB( Ham_Weapon_RetireWeapon, ent );
  2621.    
  2622.     if ( !ExecuteHamB( Ham_RemovePlayerItem, client, ent ) )
  2623.         return 0;
  2624.    
  2625.     ExecuteHamB( Ham_Item_Kill, ent );
  2626.    
  2627.     set_pev( client, pev_weaponanim, pev( client, pev_weapons ) & ~(1<<WeaponID) );
  2628.    
  2629.     return 1;
  2630. }
  2631.  
  2632. stock CountPlayers()
  2633. {
  2634.     static Players[ 32 ], iNum;
  2635.    
  2636.     get_players( Players, iNum, "ch" );
  2637.    
  2638.     return iNum;
  2639. }
  2640.  
  2641. stock CheckAuthOnline( const index )
  2642. {
  2643.     static Players[ 32 ], iNum, i, iPlayer;
  2644.    
  2645.     get_players( Players, iNum, "ch" );
  2646.    
  2647.     for ( i = 0; i < iNum; i++ )
  2648.     {
  2649.         iPlayer = Players[ i ];
  2650.        
  2651.         if ( equali( szAuth( index ), szAuth( iPlayer ) ) || equali( szAddress( index ), szAddress( iPlayer ) ) )
  2652.         {
  2653.             dc( index );
  2654.            
  2655.             break;
  2656.         }
  2657.     }
  2658. }
  2659.  
  2660. stock dc( const index )
  2661. {
  2662.     message_begin( MSG_ONE,SVC_DISCONNECT, { 0, 0, 0 }, index );
  2663.    
  2664.     write_string( "There is already a player with the same SteamID or IP Address as yours! Please contect an Admin!" );
  2665.    
  2666.     message_end();
  2667. }
  2668.  
  2669. stock get_user_nextcash( const index )
  2670. {
  2671.     static Amount;
  2672.    
  2673.     Amount  = CASH_NEXT;
  2674.    
  2675.     if ( get_user_flags(index) & ADMIN_IMMUNITY )
  2676.         Amount  += 500;
  2677.    
  2678.     return Amount;
  2679. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement