Advertisement
Guest User

Shop

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