Advertisement
Guest User

Untitled

a guest
Jul 13th, 2013
504
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 73.00 KB | None | 0 0
  1. // Should the plugin save player data in SQL database?
  2. // To save player data in a vault, change "#define USING_SQL" to "//#define USING_SQL"
  3. // To save player data in SQL, change "//#define USING_SQL" to "#define USING_SQL"
  4. // If you comment //#define USING_REGEX its a little bit more non-steam friendly
  5.  
  6. //#define USING_SQL
  7. #define USING_REGEX
  8.  
  9. #include <amxmodx>
  10. #include <amxmisc>
  11. #include <cstrike>
  12. #include <engine>
  13. #include <fakemeta>
  14. #include <hamsandwich>
  15. #include <nvault>
  16. #include <csx>
  17. #include <fun>
  18. #include <xs>
  19.  
  20. #if defined USING_REGEX
  21. #include <regex>
  22. #endif
  23.  
  24. #if defined USING_SQL
  25. #include <sqlx>
  26.  
  27. new Handle:g_sql_tuple
  28. #else
  29. #include <nvault>
  30.  
  31. new g_iVault
  32. #endif
  33.  
  34. #if defined USING_SQL
  35. new g_loaded_data[ 33 ]
  36. #endif
  37.  
  38. #define VERSION "2.0"
  39.  
  40. #define XO_PLAYER 5
  41. #define m_pPlayer 41
  42. #define m_flTimeWeaponIdle 48
  43. #define m_fInReload 54
  44. #define m_fInSpecialReload 55
  45. #define m_flFlashedUntil 514
  46. #define m_flFlashedAt 515
  47. #define m_flFlashHoldTime 516
  48. #define m_flFlashDuration 517
  49. #define m_iFlashAlpha 518
  50. #define ALPHA_FULLBLINDED 255
  51.  
  52. #define INTERVAL 60
  53.  
  54. new g_iMaxPlayers
  55. #define FIRST_PLAYER_ID 1
  56. #define IsPlayer(%1) ( FIRST_PLAYER_ID <= %1 <= g_iMaxPlayers )
  57.  
  58. const MAX_PLAYERS = 32
  59. const MAX_WEAPONS = CSW_P90
  60.  
  61. new g_iBombTime, g_iPlanter,
  62. g_iGetBombPlanted, g_iRounds,
  63. g_fwid
  64.  
  65. new const g_szAchievementSound[] = "achievement.wav"
  66. new g_iMsgSayText
  67.  
  68. new const Float:vecNullOrigin[ 3 ]
  69.  
  70. new Float:flDistance[ MAX_PLAYERS + 1 ],
  71. Float:vecOldOrigin[ MAX_PLAYERS + 1 ][ 3 ],
  72. Float:g_iFeet = 35.0
  73.  
  74. new g_iTeamKills[ 33 ], g_iRoundSparys[ 33 ],
  75. g_iKills[ 33 ], g_iShotKills[ 33 ],
  76. g_iGrenadeKills[ 33 ]
  77.  
  78. new bool:g_iBombPlant, bool:g_bFeet, bool:is_dead[ 33 ],
  79. bool:StandAlone[ 33 ], bool:OneHpHero[ 33 ],
  80. bool:is_VictimInAir[ 33 ], bool:iKillerHasNotMoved[ 33 ],
  81. bool:iKillerShot[ 33 ], bool:is_Alive[ 33 ],
  82. bool:g_iDeathMessages[ 33 ]
  83.  
  84. new bool:is_Connected[ MAX_PLAYERS + 1 ]
  85. new bool:is_DefusingWithKit, bool:g_iGetBombDown
  86.  
  87. new g_iHelpMotd[ 43 ]
  88.  
  89. #if defined USING_REGEX
  90. new Regex:g_SteamID_pattern
  91. new g_regex_return
  92. #endif
  93.  
  94. enum _:g_iAchCount
  95. {
  96. CONNECTIONS,
  97. HEAD_SHOTS,
  98. DISTANCE_KILLED,
  99. DISTANCE_WALKED,
  100. BOMB,
  101. PLANT_BOMB,
  102. PLANT_BOMB_COUNT,
  103. DEFUSED_BOMB,
  104. TOTAL_KILLS,
  105. PISTOL_MASTER,
  106. RIFLE_MASTER,
  107. SHOTGUN_MASTER,
  108. SPRAY_N_PRAY,
  109. MASTER_AT_ARMS,
  110. PLAY_AROUND,
  111. STAND_ALONE,
  112. ONE_HP_HERO,
  113. BAD_FRIEND,
  114. URBAN_DESIGNER,
  115. GRAFFITI,
  116. AMMO_CONSERVATION,
  117. FLY_AWAY,
  118. RELOADER,
  119. CAMP_FIRE,
  120. HAT_TRICK,
  121. COWBOY_DIPLOMACY,
  122. TOTAL_DAMAGE
  123. }
  124.  
  125. new const g_iAchsMotd[g_iAchCount][] =
  126. {
  127. "Ultimate Server Lover",
  128. "Boom Head-Shot",
  129. "Distance Killed",
  130. "Distance Walked",
  131. "OMFG that was close",
  132. "Short Fuse",
  133. "Boomala Boomala",
  134. "Nothing Can Blow Up",
  135. "God of War",
  136. "Pistol Master",
  137. "Rifle Master",
  138. "Shotgun Master",
  139. "Spray and Pray",
  140. "Master At Arms",
  141. "Play Around",
  142. "Stand Alone",
  143. "1 Hp Hero",
  144. "Bad Friend",
  145. "Urban Designer",
  146. "Graffiti Is My Second Name",
  147. "Ammo Conservation",
  148. "Fly Away",
  149. "Reloader",
  150. "Camp Fire",
  151. "Hat Trick",
  152. "Cowboy Diplomacy",
  153. "You've Made Your Points"
  154. }
  155.  
  156. new const g_iAchsMaxPoints[g_iAchCount] =
  157. {
  158. 1000, // Connections
  159. 300, // Headshots
  160. 4, // distance killed
  161. 3, // distance walk
  162. 1, // bomb
  163. 1, // Plant bomb
  164. 100, // plant bomb count
  165. 400, // Defused Bomb
  166. 10000, // total kills
  167. 6, // Pistol master
  168. 10, // rifle Master
  169. 2, // shotgun master
  170. 1, // spray and pray
  171. 25, // Master of Arms
  172. 60, // Play Around
  173. 15, // Stand Alone
  174. 1, // 1 Hp Hero
  175. 5, // Bad Friend
  176. 300, // Urban Designer
  177. 1, // Graffiti Is My Second Name
  178. 1, // Ammo Conservation
  179. 1, // Fly way
  180. 1000, // Reloader
  181. 1, // Camp Fire
  182. 1, // HatTrick
  183. 100, // Cowboy Diplomacy
  184. 50000 // Total Damage 50000 Damage points
  185. }
  186.  
  187. new g_iAuthID[ 33 ][ 36 ]
  188.  
  189. //Cvars
  190. new g_pCvar_Enabled, g_pCvarC4Timer,
  191. g_pCvar_ShowInfo, g_pCvar_DeathMessage,
  192. g_pCvar_FlashMessage, g_pCvar_BombMessage
  193. //g_pCvar_FriendlyFire
  194.  
  195. new const g_szWeaponNames[][] =
  196. {
  197. "p228",
  198. "scout",
  199. "hegrenade",
  200. "xm1014",
  201. "c4",
  202. "mac10",
  203. "aug",
  204. "smokegrenade",
  205. "elite",
  206. "fiveseven",
  207. "ump45",
  208. "sg550",
  209. "galil",
  210. "famas",
  211. "usp",
  212. "glock18",
  213. "awp",
  214. "mp5navy",
  215. "m249",
  216. "m3",
  217. "m4a1",
  218. "tmp",
  219. "g3sg1",
  220. "flashbang",
  221. "deagle",
  222. "sg552",
  223. "ak47",
  224. "knife",
  225. "p90"
  226. }
  227.  
  228. #define WEAPON_SIZE sizeof(g_szWeaponNames)
  229.  
  230. new const g_iWeaponIDs[WEAPON_SIZE] =
  231. {
  232. CSW_P228,
  233. CSW_SCOUT,
  234. CSW_HEGRENADE,
  235. CSW_XM1014,
  236. CSW_C4,
  237. CSW_MAC10,
  238. CSW_AUG,
  239. CSW_SMOKEGRENADE,
  240. CSW_ELITE,
  241. CSW_FIVESEVEN,
  242. CSW_UMP45,
  243. CSW_SG550,
  244. CSW_GALIL,
  245. CSW_FAMAS,
  246. CSW_USP,
  247. CSW_GLOCK18,
  248. CSW_AWP,
  249. CSW_MP5NAVY,
  250. CSW_M249,
  251. CSW_M3,
  252. CSW_M4A1,
  253. CSW_TMP,
  254. CSW_G3SG1,
  255. CSW_FLASHBANG,
  256. CSW_DEAGLE,
  257. CSW_SG552,
  258. CSW_AK47,
  259. CSW_KNIFE,
  260. CSW_P90
  261. }
  262.  
  263. new const g_iAchsWeaponMaxKills[] =
  264. {
  265. 200, //"p228",
  266. 1000, //"scout",
  267. 300, //"hegrenade",
  268. 200, //"xm1014",
  269. 30, //"c4",
  270. 500, //"mac10",
  271. 500, //"aug",
  272. 150, //"smokegrenade",
  273. 100, //"elite",
  274. 100, //"fiveseven",
  275. 1000, //"ump45",
  276. 500, //"sg550",
  277. 500, //"galil",
  278. 500, //"famas",
  279. 200, //"usp",
  280. 200, //"glock18",
  281. 1000, //"awp",
  282. 1000, //"mp5navy",
  283. 500, //"m249",
  284. 200, //"m3",
  285. 1000, //"m4a1",
  286. 1000, //"tmp",
  287. 500, //"g3sg1",
  288. 150, //"flashbang",
  289. 200, //"deagle",
  290. 500, //"sg552",
  291. 1000, //"ak47",
  292. 200, //"knife",
  293. 1000 //"p90"
  294. }
  295.  
  296. new const g_szWeaponNames2[WEAPON_SIZE][] =
  297. {
  298. "P228",
  299. "Scout",
  300. "He-Grenade",
  301. "XM1014",
  302. "C4",
  303. "Mac10",
  304. "Aug",
  305. "Smoke-Grenade",
  306. "Elite",
  307. "Fiveseven",
  308. "Ump45",
  309. "SG550",
  310. "Galil",
  311. "Famas",
  312. "USP",
  313. "Glock",
  314. "AWP",
  315. "MP5",
  316. "M249",
  317. "M3",
  318. "M4A1",
  319. "TMP",
  320. "G3SG1",
  321. "FlashBang",
  322. "Deagle",
  323. "SG552",
  324. "AK47",
  325. "Knife",
  326. "P90"
  327. }
  328.  
  329. new const g_iGunEvents[][] = {
  330. "events/awp.sc",
  331. "events/g3sg1.sc",
  332. "events/ak47.sc",
  333. "events/scout.sc",
  334. "events/m249.sc",
  335. "events/m4a1.sc",
  336. "events/sg552.sc",
  337. "events/aug.sc",
  338. "events/sg550.sc",
  339. "events/m3.sc",
  340. "events/xm1014.sc",
  341. "events/usp.sc",
  342. "events/mac10.sc",
  343. "events/ump45.sc",
  344. "events/fiveseven.sc",
  345. "events/p90.sc",
  346. "events/deagle.sc",
  347. "events/p228.sc",
  348. "events/glock18.sc",
  349. "events/mp5n.sc",
  350. "events/tmp.sc",
  351. "events/elite_left.sc",
  352. "events/elite_right.sc",
  353. "events/galil.sc",
  354. "events/famas.sc"
  355. }
  356.  
  357. new g_iPlayersKills[ MAX_PLAYERS+1 ][ MAX_WEAPONS+1 ]
  358. new g_iAchLevel[ MAX_PLAYERS+1 ][ g_iAchCount ]
  359. new g_iTimerEntity, g_iJoinTime[ MAX_PLAYERS ]
  360.  
  361. new Trie:g_tWeaponNameToID
  362. new iWeaponID, g_iGunEvent_IDsBitsum
  363.  
  364. public plugin_init() {
  365.  
  366. #if defined USING_SQL
  367. register_plugin( "Achievements (SQL)", VERSION, "!Pastout!!" )
  368. #else
  369. register_plugin( "Achievements", VERSION, "!Pastout!!" )
  370. #endif
  371.  
  372. g_pCvar_Enabled = register_cvar("ach_enable", "1")// 1 = on || 0 = off
  373. if ( !get_pcvar_num( g_pCvar_Enabled ) )
  374. return;
  375.  
  376. g_pCvarC4Timer = get_cvar_pointer( "mp_c4timer" )
  377. g_pCvar_ShowInfo = register_cvar( "ach_showinfo", "1" )
  378. g_pCvar_DeathMessage = register_cvar( "ach_deathmessage", "0" )
  379. g_pCvar_FlashMessage = register_cvar( "ach_flashmessage", "1" )
  380. g_pCvar_BombMessage = register_cvar( "ach_bombmessage", "1" )
  381. //g_pCvar_FriendlyFire = get_cvar_pointer( "mp_friendlyfire" )
  382.  
  383. new command[] = "CmdMainMenu"
  384. register_clcmd( "say /achievement", command )
  385. register_clcmd( "say /achievements", command )
  386. register_clcmd( "say /ach", command )
  387. register_clcmd( "say /help", "Ach_HelpMenu" )
  388. register_clcmd( "say /deathmessage", "CmdDeathMessage" )
  389.  
  390. register_event( "DeathMsg", "Event_PlayerKilled", "a" )
  391. register_event( "HLTV", "Event_NewRound", "a", "1=0", "2=0" )
  392. register_event( "StatusIcon", "Event_GotBomb", "be", "1=1", "1=2", "2=c4" )
  393. register_event( "ResetHUD", "Event_ResetHud", "be" )
  394. register_event( "23", "Event_Spray", "a", "1=112" )
  395.  
  396. register_logevent( "Event_PlayerAction", 3, "1=triggered" )
  397.  
  398. g_iTimerEntity = create_entity( "info_target" )
  399. entity_set_string( g_iTimerEntity, EV_SZ_classname, "hud_entity" )
  400. register_think( "hud_entity", "FwdHUDThink" )
  401. entity_set_float( g_iTimerEntity, EV_FL_nextthink, get_gametime() + 1.0 )
  402.  
  403. g_iMaxPlayers = get_maxplayers()
  404. g_tWeaponNameToID = TrieCreate()
  405. g_iMsgSayText = get_user_msgid("SayText")
  406.  
  407. for( new i = 0; i < WEAPON_SIZE; i++ )
  408. {
  409. TrieSetCell( g_tWeaponNameToID, g_szWeaponNames[i], g_iWeaponIDs[i] )
  410. }
  411.  
  412. new const NO_RELOAD = ( 1 << 2 ) | ( 1 << CSW_KNIFE ) | ( 1 << CSW_C4 ) | ( 1 << CSW_M3 ) |
  413. ( 1 << CSW_XM1014 ) | ( 1 << CSW_HEGRENADE ) | ( 1 << CSW_FLASHBANG ) | ( 1 << CSW_SMOKEGRENADE )
  414.  
  415. new szWeaponName[ 20 ]
  416. for( new i = CSW_P228; i <= CSW_P90; i++ ) {
  417. if( NO_RELOAD & ( 1 << i ) )
  418. continue;
  419.  
  420. get_weaponname( i, szWeaponName, 19 )
  421. RegisterHam( Ham_Weapon_Reload, szWeaponName, "FwdHamWeaponReload", 1 )
  422. }
  423.  
  424. RegisterHam( Ham_Weapon_Reload, "weapon_m3", "FwdHamShotgunReload", 1 )
  425. RegisterHam( Ham_Weapon_Reload, "weapon_xm1014", "FwdHamShotgunReload", 1 )
  426. RegisterHam( Ham_TraceAttack, "player", "FwdHamTraceAttack" )
  427. RegisterHam( Ham_Spawn, "player", "FwdPlayerSpawn", 1 )
  428.  
  429. unregister_forward( FM_PrecacheEvent, g_fwid, 1 )
  430. register_forward( FM_PlaybackEvent, "FwdPlaybackEvent" )
  431. register_forward( FM_CmdStart, "FwdCmdStart" )
  432.  
  433. new dir[ 23 ]
  434. get_configsdir( dir, 22 )
  435. formatex( g_iHelpMotd, 42, "%s/achievements.txt", dir )
  436.  
  437. #if !defined USING_SQL
  438. g_iVault = nvault_open("Achievements")
  439.  
  440. if(g_iVault == INVALID_HANDLE)
  441. set_fail_state( "Error opening nVault" )
  442.  
  443. #endif
  444.  
  445. #if defined USING_REGEX
  446. new err[ 2 ]
  447. g_SteamID_pattern = regex_compile( "^^STEAM_0:(0|1):\d+$", g_regex_return, err, sizeof( err ) - 1 )
  448. #endif
  449. }
  450.  
  451. public client_damage( iAttacker, iVictim, gDamage, iWeapon, iHitplace, TA )
  452. {
  453. #if defined USING_REGEX
  454. if( !IsUserAuthorized( iAttacker ) || !IsUserAuthorized( iVictim ) )
  455. {
  456. return PLUGIN_HANDLED
  457. }
  458. #endif
  459.  
  460. new szName[ 32 ]
  461. get_user_name( iAttacker, szName, charsmax( szName ) )
  462.  
  463. new iPreviousLevel = g_iAchLevel[ iAttacker ][ TOTAL_DAMAGE ] / g_iAchsMaxPoints[ TOTAL_DAMAGE ]
  464. new iNewLevel = ( g_iAchLevel[ iAttacker ][ TOTAL_DAMAGE ] += gDamage ) / g_iAchsMaxPoints[ TOTAL_DAMAGE ]
  465. if( iNewLevel > iPreviousLevel )
  466. {
  467. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1You've Made Your Points damage^3'^4 achievement!", szName )
  468. emit_sound( iAttacker, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  469. }
  470.  
  471. #if defined USING_REGEX
  472. return PLUGIN_HANDLED
  473. #endif
  474. }
  475.  
  476. public Event_PlayerAction( )
  477. {
  478. new szArg[ 64 ], szAction[ 64 ], szName[ 64 ]
  479. new iUserId, id
  480.  
  481. read_logargv( 0, szArg, 64 )
  482. read_logargv( 2, szAction, 64 )
  483. parse_loguser( szArg, szName, 64, iUserId )
  484. id = find_player( "k", iUserId )
  485.  
  486. if( id == 0 )
  487. {
  488. return
  489. }
  490. #if defined USING_REGEX
  491. if( !IsUserAuthorized( id ) )
  492. {
  493. return
  494. }
  495. #endif
  496. if( equal( szAction, "Rescued_A_Hostage" ) )
  497. {
  498. g_iAchLevel[ id ][ COWBOY_DIPLOMACY ]++
  499. switch( g_iAchLevel[ id ][ COWBOY_DIPLOMACY ] )
  500. {
  501. case 100:
  502. {
  503. g_iAchLevel[ id ][ COWBOY_DIPLOMACY ]++
  504. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Cowboy Diplomacy^3'^4 achievement!", szName )
  505. emit_sound( id, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  506. }
  507. }
  508. Print( 0, "^1[^4AMMX^1]^3 %s^1 has^4 rescued^1 a^3 Hostage^1.", szName )// Hostage rescued
  509. }
  510.  
  511. if( get_pcvar_num( g_pCvar_BombMessage ) == 1 )
  512. {
  513. if( equal( szAction, "Begin_Bomb_Defuse_With_Kit" ) )
  514. {
  515. is_DefusingWithKit = true
  516. }
  517. }
  518. #if defined USING_REGEX
  519. return
  520. #endif
  521. }
  522.  
  523. public FwdHamWeaponReload( const iWeapon ) {
  524.  
  525. new iPlayers[ 32 ], iNum, iPlayer
  526. get_players(iPlayers, iNum, "ah")
  527. for( new i = 0; i < iNum; i++ )
  528. {
  529. iPlayer = iPlayers[ i ]
  530. }
  531.  
  532. #if defined USING_REGEX
  533. if( !IsUserAuthorized( iPlayer ) )
  534. {
  535. return PLUGIN_HANDLED
  536. }
  537. #endif
  538.  
  539. new szName[ 32 ]
  540. get_user_name( iPlayer, szName, charsmax( szName ) )
  541.  
  542. if( get_pdata_int( iWeapon, m_fInReload, 4 ) ) {
  543. g_iAchLevel[ iPlayer ][ RELOADER ]++
  544. switch( g_iAchLevel[ iPlayer ][ RELOADER ] )
  545. {
  546. case 1000:
  547. {
  548. g_iAchLevel[ iPlayer ][ RELOADER ]++
  549. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Reloader^3'^4 achievement!", szName )
  550. emit_sound( iPlayer, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  551. }
  552. }
  553. }
  554. #if defined USING_REGEX
  555. return PLUGIN_HANDLED
  556. #endif
  557. }
  558.  
  559. public FwdHamShotgunReload( const iWeapon ) {
  560. if( get_pdata_int( iWeapon, m_fInSpecialReload, 4 ) != 1 )
  561. return
  562. new Float:flTimeWeaponIdle = get_pdata_float( iWeapon, m_flTimeWeaponIdle, 4 )
  563.  
  564. if( flTimeWeaponIdle != 0.55 )
  565. return
  566.  
  567. new iPlayers[ 32 ], iNum, iPlayer
  568. get_players(iPlayers, iNum, "ah")
  569. for( new i = 0; i < iNum; i++ )
  570. {
  571. iPlayer = iPlayers[ i ]
  572. }
  573.  
  574. #if defined USING_REGEX
  575. if( !IsUserAuthorized( iPlayer ) )
  576. {
  577. return
  578. }
  579. #endif
  580.  
  581. new szName[ 32 ]
  582. get_user_name( iPlayer, szName, charsmax( szName ) )
  583.  
  584. g_iAchLevel[ iPlayer ][ RELOADER ]++
  585. switch( g_iAchLevel[ iPlayer ][ RELOADER ] )
  586. {
  587. case 1000:
  588. {
  589. g_iAchLevel[ iPlayer ][ RELOADER ]++
  590. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Reloader^3'^4 achievement!", szName )
  591. emit_sound( iPlayer, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  592. }
  593. }
  594. #if defined USING_REGEX
  595. return
  596. #endif
  597. }
  598.  
  599. public FwdHUDThink( iEntity )
  600. {
  601. if ( iEntity != g_iTimerEntity )
  602. return
  603.  
  604. static id
  605. new szName[ 32 ]
  606. for ( id = 1; id <= MAX_PLAYERS; id++ )
  607. {
  608. if ( is_user_connected( id ) && ( ( get_systime() - g_iJoinTime[ id ] ) >= INTERVAL ) )
  609. {
  610. #if defined USING_REGEX
  611. if( !IsUserAuthorized( id ) )
  612. {
  613. return
  614. }
  615. #endif
  616. get_user_name( id, szName, charsmax( szName ) )
  617. g_iJoinTime[ id ] = get_systime()
  618. g_iAchLevel[ id ][ PLAY_AROUND ]++
  619. switch( g_iAchLevel[ id ][ PLAY_AROUND ] )
  620. {
  621. case 60:
  622. {
  623. g_iAchLevel[ id ][ PLAY_AROUND ]++
  624. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Play Around^3'^4 achievement!", szName )
  625. emit_sound( id, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  626. }
  627. }
  628. #if defined USING_REGEX
  629. return
  630. #endif
  631. }
  632. }
  633.  
  634. entity_set_float( g_iTimerEntity, EV_FL_nextthink, get_gametime() + 1.0 )
  635. }
  636.  
  637. public CmdDeathMessage( id )
  638. {
  639. if( get_pcvar_num( g_pCvar_DeathMessage ) != 1 )
  640. {
  641.  
  642. Print( id, "^4[AMXX]^3 Sorry^1 the^4 death message^1 have been^4 disable^1 for^3 everyone." )
  643. return PLUGIN_HANDLED
  644. }
  645. if( g_iDeathMessages[ id ] == false )
  646. {
  647. g_iDeathMessages[ id ] = true
  648. Print( id, "^4[AMXX]^1 You have^4 Enable^3 death messages^1." )
  649. }
  650. else
  651. {
  652. if( g_iDeathMessages[ id ] == true )
  653. {
  654. g_iDeathMessages[ id ] = false
  655. Print( id, "^4[AMXX]^1 You have^4 Disable^3 death messages^1." )
  656. }
  657. }
  658. return PLUGIN_HANDLED
  659. }
  660.  
  661. public plugin_precache()
  662. {
  663. g_fwid = register_forward( FM_PrecacheEvent, "FwdPrecacheEvent", 1 )
  664. precache_sound( g_szAchievementSound )
  665.  
  666. #if defined USING_SQL
  667. g_sql_tuple = SQL_MakeStdTuple()
  668.  
  669. SQL_ThreadQuery(g_sql_tuple, "QueryCreateTable", "CREATE TABLE IF NOT EXISTS ^"Achievement^" ( ^"name^" VARCHAR(32) NOT NULL, ^"authid^" VARCHAR(35) NOT NULL, ^"data^" VARCHAR(256) NOT NULL );" )
  670.  
  671. #endif
  672. }
  673.  
  674. public FwdPrecacheEvent( type, const name[] ) {
  675. for( new i = 0; i < sizeof g_iGunEvents; ++i ) {
  676. if( equal( g_iGunEvents[ i ], name ) ) {
  677. g_iGunEvent_IDsBitsum |= ( 1<<get_orig_retval() )
  678. return FMRES_HANDLED
  679. }
  680. }
  681. return FMRES_IGNORED
  682. }
  683.  
  684. public FwdPlaybackEvent( flags, id, eventid ) {
  685. if( !( g_iGunEvent_IDsBitsum & ( 1<<eventid) ) || !(1 <= id <= g_iMaxPlayers ) )
  686. return FMRES_IGNORED
  687.  
  688. iKillerShot[ id ] = false
  689. g_iShotKills[ id ] = 0
  690.  
  691. return FMRES_HANDLED
  692. }
  693.  
  694. public FwdHamTraceAttack( this, iAttacker, Float:damage, Float:direction[ 3 ], traceresult, damagebits )
  695. {
  696. if( is_Connected[ iAttacker ] && is_Alive[ iAttacker ] )
  697. {
  698. static g_iWeapon; g_iWeapon = get_user_weapon( iAttacker )
  699. if( g_iWeapon == CSW_KNIFE || g_iWeapon == CSW_HEGRENADE )
  700. {
  701. return PLUGIN_HANDLED
  702. }
  703.  
  704. iKillerShot[ iAttacker ] = true
  705.  
  706. }
  707. return PLUGIN_HANDLED
  708.  
  709. }
  710.  
  711. #if defined USING_SQL
  712. public QueryCreateTable(failstate, Handle:query, error[], errnum, data[], size, Float:queuetime)
  713. {
  714. if( failstate == TQUERY_CONNECT_FAILED
  715. || failstate == TQUERY_QUERY_FAILED )
  716. {
  717. set_fail_state(error)
  718. }
  719. }
  720. #endif
  721.  
  722. public Ach_HelpMenu( id )
  723. {
  724. show_motd( id, g_iHelpMotd, "Achievements Help" )
  725. Print( id, "^4[AMXX]^1 This server is using^3 Achievements^4 v%s^1, by^3 Pastout!", VERSION )
  726. }
  727.  
  728. public CmdMainMenu( id )
  729. {
  730. Ach_StartMenu( id )
  731. }
  732.  
  733. public Ach_StartMenu( id ) {
  734. //Menu Title
  735. new title[ 256 ]; formatex( title, sizeof( title ) - 1, "\yMain Menu^n" )
  736. //Create the menu
  737. new menu = menu_create( title, "StartMenu_Handle" )
  738. menu_additem( menu, "\wInfo", "1", 0 )
  739. menu_additem( menu, "\wWeapon\y Achievements\r Player Info", "2", 0 )
  740. menu_additem( menu, "\wCustom\y Achievements\r Player Info", "3", 0 )
  741. menu_additem( menu, "\wHelp", "4", 0 )
  742. menu_display( id, menu )
  743. }
  744.  
  745. public StartMenu_Handle( id, menu, item )
  746. {
  747. if( item == MENU_EXIT )
  748. {
  749. menu_destroy( menu )
  750. return PLUGIN_HANDLED
  751. }
  752.  
  753. new data[ 6 ], iName[ 64 ]
  754. new access, callback
  755.  
  756. menu_item_getinfo( menu, item, access, data, 5, iName, 63, callback )
  757.  
  758. new key = str_to_num( data )
  759. switch( key )
  760. {
  761. case 1:
  762. {
  763. Print( id, "^4[AMXX]^1 This server is using^3 Achievements^4 v%s^1, by^3 Pastout!", VERSION )
  764. Ach_StartMenu( id )
  765. }
  766. case 2:
  767. {
  768. Ach_WeaponStartMenu( id )
  769. }
  770. case 3:
  771. {
  772. Ach_PlayerStartMenu( id )
  773. }
  774. case 4:
  775. {
  776. Ach_HelpMenu( id )
  777. Ach_StartMenu( id )
  778. }
  779. }
  780. return PLUGIN_HANDLED
  781. }
  782.  
  783. public Ach_WeaponStartMenu( id ) {
  784. new title[ 256 ]; formatex( title, sizeof( title ) - 1, "\rWeapon\w Achievements^n" )
  785. new menu = menu_create( title, "WeaponStartMenu_Handle" )
  786. menu_additem( menu, "\yAchievements\r 1/10", "1", 0 )
  787. menu_additem( menu, "\yAchievements\r 11/20", "2", 0 )
  788. menu_additem( menu, "\yAchievements\r 21/29", "3", 0 )
  789. menu_additem( menu, "\wHelp", "4", 0 )
  790. menu_display( id, menu )
  791. }
  792.  
  793. public WeaponStartMenu_Handle( id, menu, item )
  794. {
  795. if( item == MENU_EXIT )
  796. {
  797. menu_destroy( menu )
  798. return PLUGIN_HANDLED
  799. }
  800.  
  801. new data[ 6 ], iName[ 64 ]
  802. new access, callback
  803.  
  804. menu_item_getinfo( menu, item, access, data, 5, iName, 63, callback )
  805.  
  806. new key = str_to_num( data )
  807. switch( key )
  808. {
  809. case 1:
  810. {
  811. Ach_PlayerWeaponMenu( id )
  812. }
  813. case 2:
  814. {
  815. Ach_PlayerWeaponMenu2( id )
  816. }
  817. case 3:
  818. {
  819. Ach_PlayerWeaponMenu3( id )
  820. }
  821. case 4:
  822. {
  823. Ach_HelpMenu( id )
  824. Ach_StartMenu( id )
  825. }
  826. }
  827. return PLUGIN_HANDLED
  828. }
  829.  
  830. public Ach_PlayerWeaponMenu( id )
  831. {
  832. new title[ 170 ]; formatex( title, sizeof( title ) - 1, "\rWeapon Achievements^n\w - \yPlayer Menu")
  833. new menu = menu_create( title, "Ach_PlayerWeaponMenu_Handle" )
  834.  
  835. new players[ 32 ], pnum, tempid
  836. new szName[ 32 ], szTempid[ 10 ]
  837.  
  838. get_players( players, pnum )
  839.  
  840. for( new i; i < pnum; i++ )
  841. {
  842. tempid = players[ i ]
  843.  
  844. get_user_name( tempid, szName, 31 )
  845. num_to_str( tempid, szTempid, 9 )
  846.  
  847. menu_additem( menu, szName, szTempid, 0 )
  848. }
  849.  
  850. menu_display( id, menu )
  851. }
  852.  
  853. public Ach_PlayerWeaponMenu_Handle( id, menu, item )
  854. {
  855. if( item == MENU_EXIT )
  856. {
  857. menu_destroy( menu )
  858. if( is_Connected[ id ] )
  859. Ach_WeaponStartMenu( id )
  860. return PLUGIN_HANDLED
  861. }
  862.  
  863. new data[ 6 ], iName[ 64 ]
  864. new access, callback
  865. menu_item_getinfo( menu, item, access, data, 5, iName, 63, callback )
  866.  
  867. new tempid = str_to_num( data )
  868. new tempname[ 32 ]; get_user_name( tempid, tempname, 31 )
  869.  
  870. static motd[ 2500 ], len
  871. len = format( motd, sizeof( motd ) - 1, "<body bgcolor=#10497d>" )
  872. len += format( motd[ len ], sizeof( motd ) - len - 1, "<table width=100%% cellpadding=2 cellspacing=4 border=4>" )
  873. len += format( motd[ len ], sizeof( motd ) - len - 1, "<tr align=center bgcolor=#52697B>" )
  874. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=10%% align=left>%s", tempname )
  875. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=15%% align=center>Achievement Level" );
  876. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=20%% align=center>Achievement Max Level" )
  877.  
  878. for( new i = 0; i < 10; i++ )
  879. {
  880. len += format( motd[ len ], sizeof( motd ) - len - 1, "<tr align=center bgcolor=#c7c7c7>" )
  881. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=left>%s", g_szWeaponNames2[ i ] )
  882. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=center>%i", g_iPlayersKills[ tempid ][ g_iWeaponIDs[ i ] ] )
  883. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=center>%i", g_iAchsWeaponMaxKills[ i ] )
  884. }
  885. len += format( motd[ len ], sizeof( motd ) - len - 1, "</table></body>" )
  886.  
  887. show_motd( id, motd, "Player Info" )
  888. menu_display( id, menu )
  889. menu_destroy( menu )
  890. return PLUGIN_HANDLED
  891. }
  892.  
  893. public Ach_PlayerWeaponMenu2( id )
  894. {
  895. new title[ 170 ]; formatex( title, sizeof( title ) - 1, "\rWeapon Achievements^n\w - \yPlayer Menu")
  896. new menu = menu_create( title, "Ach_PlayerWeaponMenu2_Handle" )
  897.  
  898. new players[ 32 ], pnum, tempid
  899. new szName[ 32 ], szTempid[ 10 ]
  900.  
  901. get_players( players, pnum )
  902.  
  903. for( new i; i < pnum; i++ )
  904. {
  905. tempid = players[ i ]
  906.  
  907. get_user_name( tempid, szName, 31 )
  908. num_to_str( tempid, szTempid, 9 )
  909.  
  910. menu_additem( menu, szName, szTempid, 0 )
  911. }
  912.  
  913. menu_display( id, menu )
  914. }
  915.  
  916. public Ach_PlayerWeaponMenu2_Handle( id, menu, item )
  917. {
  918. if( item == MENU_EXIT )
  919. {
  920. menu_destroy( menu )
  921. if( is_Connected[ id ] )
  922. Ach_WeaponStartMenu( id )
  923. return PLUGIN_HANDLED
  924. }
  925.  
  926. new data[ 6 ], iName[ 64 ]
  927. new access, callback
  928. menu_item_getinfo( menu, item, access, data, 5, iName, 63, callback )
  929.  
  930. new tempid = str_to_num( data )
  931. new tempname[ 32 ]; get_user_name( tempid, tempname, 31 )
  932.  
  933. static motd[ 2500 ], len
  934. len = format( motd, sizeof( motd ) - 1, "<body bgcolor=#10497d>" )
  935. len += format( motd[ len ], sizeof( motd ) - len - 1, "<table width=100%% cellpadding=2 cellspacing=4 border=4>" )
  936. len += format( motd[ len ], sizeof( motd ) - len - 1, "<tr align=center bgcolor=#52697B>" )
  937. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=10%% align=left>%s", tempname )
  938. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=15%% align=center>Achievement Level" );
  939. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=20%% align=center>Achievement Max Level" )
  940.  
  941. for( new i = 10; i < 20; i++ )
  942. {
  943. len += format( motd[ len ], sizeof( motd ) - len - 1, "<tr align=center bgcolor=#c7c7c7>" )
  944. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=left>%s", g_szWeaponNames2[ i ] )
  945. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=center>%i", g_iPlayersKills[ tempid ][ g_iWeaponIDs[ i ] ] )
  946. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=center>%i", g_iAchsWeaponMaxKills[ i ] )
  947. }
  948. len += format( motd[ len ], sizeof( motd ) - len - 1, "</table></body>" )
  949.  
  950. show_motd( id, motd, "Player Info" )
  951. menu_display( id, menu )
  952. menu_destroy( menu )
  953. return PLUGIN_HANDLED
  954. }
  955.  
  956. public Ach_PlayerWeaponMenu3( id )
  957. {
  958. new title[ 170 ]; formatex( title, sizeof( title ) - 1, "\rWeapon Achievements^n\w - \yPlayer Menu")
  959. new menu = menu_create( title, "Ach_PlayerWeaponMenu3_Handle" )
  960.  
  961. new players[ 32 ], pnum, tempid
  962. new szName[ 32 ], szTempid[ 10 ]
  963.  
  964. get_players( players, pnum )
  965.  
  966. for( new i; i < pnum; i++ )
  967. {
  968. tempid = players[ i ]
  969.  
  970. get_user_name( tempid, szName, 31 )
  971. num_to_str( tempid, szTempid, 9 )
  972.  
  973. menu_additem( menu, szName, szTempid, 0 )
  974. }
  975.  
  976. menu_display( id, menu )
  977. }
  978.  
  979. public Ach_PlayerWeaponMenu3_Handle( id, menu, item )
  980. {
  981. if( item == MENU_EXIT )
  982. {
  983. menu_destroy( menu )
  984. if( is_Connected[ id ] )
  985. Ach_WeaponStartMenu( id )
  986. return PLUGIN_HANDLED
  987. }
  988.  
  989. new data[ 6 ], iName[ 64 ]
  990. new access, callback
  991. menu_item_getinfo( menu, item, access, data, 5, iName, 63, callback )
  992.  
  993. new tempid = str_to_num( data )
  994. new tempname[ 32 ]; get_user_name( tempid, tempname, 31 )
  995.  
  996. static motd[ 2500 ], len
  997. len = format( motd, sizeof( motd ) - 1, "<body bgcolor=#10497d>" )
  998. len += format( motd[ len ], sizeof( motd ) - len - 1, "<table width=100%% cellpadding=2 cellspacing=4 border=4>" )
  999. len += format( motd[ len ], sizeof( motd ) - len - 1, "<tr align=center bgcolor=#52697B>" )
  1000. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=10%% align=left>%s", tempname )
  1001. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=15%% align=center>Achievement Level" );
  1002. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=20%% align=center>Achievement Max Level" )
  1003.  
  1004. for( new i = 20; i < WEAPON_SIZE; i++ )
  1005. {
  1006. len += format( motd[ len ], sizeof( motd ) - len - 1, "<tr align=center bgcolor=#c7c7c7>" )
  1007. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=left>%s", g_szWeaponNames2[ i ] )
  1008. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=center>%i", g_iPlayersKills[ tempid ][ g_iWeaponIDs[ i ] ] )
  1009. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=center>%i", g_iAchsWeaponMaxKills[ i ] )
  1010. }
  1011. len += format( motd[ len ], sizeof( motd ) - len - 1, "</table></body>" )
  1012.  
  1013. show_motd( id, motd, "Player Info" )
  1014. menu_display( id, menu )
  1015. menu_destroy( menu )
  1016. return PLUGIN_HANDLED
  1017. }
  1018.  
  1019. public Ach_PlayerStartMenu( id ) {
  1020. new title[ 256 ]; formatex( title, sizeof( title ) - 1, "\rCustom\w Achievements^n" )
  1021. new menu = menu_create( title, "PlayerStartMenu_Handle" )
  1022. menu_additem( menu, "\yAchievements\r 1/10", "1", 0 )
  1023. menu_additem( menu, "\yAchievements\r 11/20", "2", 0 )
  1024. menu_additem( menu, "\yAchievements\r 21/26", "3", 0 )
  1025. menu_additem( menu, "\wHelp", "4", 0 )
  1026. menu_display( id, menu )
  1027. }
  1028.  
  1029. public PlayerStartMenu_Handle( id, menu, item )
  1030. {
  1031. if( item == MENU_EXIT )
  1032. {
  1033. menu_destroy( menu )
  1034. return PLUGIN_HANDLED
  1035. }
  1036.  
  1037. new data[ 6 ], iName[ 64 ]
  1038. new access, callback
  1039.  
  1040. menu_item_getinfo( menu, item, access, data, 5, iName, 63, callback )
  1041.  
  1042. new key = str_to_num( data )
  1043. switch( key )
  1044. {
  1045. case 1:
  1046. {
  1047. Ach_PlayerLevelMenu( id )
  1048. }
  1049. case 2:
  1050. {
  1051. Ach_PlayerLevelMenu2( id )
  1052. }
  1053. case 3:
  1054. {
  1055. Ach_PlayerLevelMenu3( id )
  1056. }
  1057. case 4:
  1058. {
  1059. Ach_HelpMenu( id )
  1060. Ach_StartMenu( id )
  1061. }
  1062. }
  1063. return PLUGIN_HANDLED
  1064. }
  1065.  
  1066. public Ach_PlayerLevelMenu( id )
  1067. {
  1068. new title[ 170 ]; formatex( title, sizeof( title ) - 1, "\rCustom Achievements^n\w - \yPlayer Menu")
  1069. new menu = menu_create( title, "Ach_PlayerLevelMenu_Handle" )
  1070.  
  1071. new players[ 32 ], pnum, tempid
  1072. new szName[ 32 ], szTempid[ 10 ]
  1073.  
  1074. get_players( players, pnum )
  1075.  
  1076. for( new i; i < pnum; i++ )
  1077. {
  1078. tempid = players[ i ]
  1079.  
  1080. get_user_name( tempid, szName, 31 )
  1081. num_to_str( tempid, szTempid, 9 )
  1082.  
  1083. menu_additem( menu, szName, szTempid, 0 )
  1084. }
  1085.  
  1086. menu_display( id, menu )
  1087. }
  1088.  
  1089. public Ach_PlayerLevelMenu_Handle( id, menu, item )
  1090. {
  1091. if( item == MENU_EXIT )
  1092. {
  1093. menu_destroy( menu )
  1094. if( is_Connected[ id ] )
  1095. Ach_PlayerStartMenu( id )
  1096. return PLUGIN_HANDLED
  1097. }
  1098.  
  1099. new data[ 6 ], iName[ 64 ]
  1100. new access, callback
  1101. menu_item_getinfo( menu, item, access, data, 5, iName, 63, callback )
  1102.  
  1103. new tempid = str_to_num( data )
  1104. new tempname[ 32 ]; get_user_name( tempid, tempname, 31 )
  1105.  
  1106. static motd[ 2500 ], len
  1107. len = format( motd, sizeof( motd ) - 1, "<body bgcolor=#10497d>" )
  1108. len += format( motd[ len ], sizeof( motd ) - len - 1, "<table width=100%% cellpadding=2 cellspacing=4 border=4>" )
  1109. len += format( motd[ len ], sizeof( motd ) - len - 1, "<tr align=center bgcolor=#52697B>" )
  1110. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=10%% align=left>%s", tempname )
  1111. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=15%% align=center>Achievement Level" );
  1112. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=20%% align=center>Achievement Max Level" )
  1113.  
  1114. for( new iLevel = 0; iLevel < 10; iLevel++ )
  1115. {
  1116. len += format( motd[ len ], sizeof( motd ) - len - 1, "<tr align=center bgcolor=#c7c7c7>" )
  1117. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=left>%s", g_iAchsMotd[ iLevel ] )
  1118. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=center>%i", g_iAchLevel[ tempid ][ iLevel ] )
  1119. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=center>%i", g_iAchsMaxPoints[ iLevel ] )
  1120.  
  1121. }
  1122. len += format( motd[ len ], sizeof( motd ) - len - 1, "</table></body>" )
  1123.  
  1124. show_motd( id, motd, "Player Info" )
  1125. menu_display( id, menu )
  1126. menu_destroy( menu )
  1127. return PLUGIN_HANDLED
  1128. }
  1129.  
  1130. public Ach_PlayerLevelMenu2( id )
  1131. {
  1132. new title[ 170 ]; formatex( title, sizeof( title ) - 1, "\rCustom Achievements^n\w - \yPlayer Menu")
  1133. new menu = menu_create( title, "Ach_PlayerLevelMenu2_Handle" )
  1134.  
  1135. new players[ 32 ], pnum, tempid
  1136. new szName[ 32 ], szTempid[ 10 ]
  1137.  
  1138. get_players( players, pnum )
  1139.  
  1140. for( new i; i < pnum; i++ )
  1141. {
  1142. tempid = players[ i ]
  1143.  
  1144. get_user_name( tempid, szName, 31 )
  1145. num_to_str( tempid, szTempid, 9 )
  1146.  
  1147. menu_additem( menu, szName, szTempid, 0 )
  1148. }
  1149.  
  1150. menu_display( id, menu )
  1151. }
  1152.  
  1153. public Ach_PlayerLevelMenu2_Handle( id, menu, item )
  1154. {
  1155. if( item == MENU_EXIT )
  1156. {
  1157. menu_destroy( menu )
  1158. if( is_Connected[ id ] )
  1159. Ach_PlayerStartMenu( id )
  1160. return PLUGIN_HANDLED
  1161. }
  1162.  
  1163. new data[ 6 ], iName[ 64 ]
  1164. new access, callback
  1165. menu_item_getinfo( menu, item, access, data, 5, iName, 63, callback )
  1166.  
  1167. new tempid = str_to_num( data )
  1168. new tempname[ 32 ]; get_user_name( tempid, tempname, 31 )
  1169.  
  1170. static motd[ 2500 ], len
  1171. len = format( motd, sizeof( motd ) - 1, "<body bgcolor=#10497d>" )
  1172. len += format( motd[ len ], sizeof( motd ) - len - 1, "<table width=100%% cellpadding=2 cellspacing=4 border=4>" )
  1173. len += format( motd[ len ], sizeof( motd ) - len - 1, "<tr align=center bgcolor=#52697B>" )
  1174. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=10%% align=left>%s", tempname )
  1175. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=15%% align=center>Achievement Level" );
  1176. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=20%% align=center>Achievement Max Level" )
  1177.  
  1178. for( new iLevel = 10; iLevel < 20; iLevel++ )
  1179. {
  1180. len += format( motd[ len ], sizeof( motd ) - len - 1, "<tr align=center bgcolor=#c7c7c7>" )
  1181. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=left>%s", g_iAchsMotd[ iLevel ] )
  1182. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=center>%i", g_iAchLevel[ tempid ][ iLevel ] )
  1183. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=center>%i", g_iAchsMaxPoints[ iLevel ] )
  1184.  
  1185. }
  1186. len += format( motd[ len ], sizeof( motd ) - len - 1, "</table></body>" )
  1187.  
  1188. show_motd( id, motd, "Player Info" )
  1189. menu_display( id, menu )
  1190. menu_destroy( menu )
  1191. return PLUGIN_HANDLED
  1192. }
  1193.  
  1194. public Ach_PlayerLevelMenu3( id )
  1195. {
  1196. new title[ 170 ]; formatex( title, sizeof( title ) - 1, "\rCustom Achievements^n\w - \yPlayer Menu")
  1197. new menu = menu_create( title, "Ach_PlayerLevelMenu3_Handle" )
  1198.  
  1199. new players[ 32 ], pnum, tempid
  1200. new szName[ 32 ], szTempid[ 10 ]
  1201.  
  1202. get_players( players, pnum )
  1203.  
  1204. for( new i; i < pnum; i++ )
  1205. {
  1206. tempid = players[ i ]
  1207.  
  1208. get_user_name( tempid, szName, 31 )
  1209. num_to_str( tempid, szTempid, 9 )
  1210.  
  1211. menu_additem( menu, szName, szTempid, 0 )
  1212. }
  1213.  
  1214. menu_display( id, menu )
  1215. }
  1216.  
  1217. public Ach_PlayerLevelMenu3_Handle( id, menu, item )
  1218. {
  1219. if( item == MENU_EXIT )
  1220. {
  1221. menu_destroy( menu )
  1222. if( is_Connected[ id ] )
  1223. Ach_PlayerStartMenu( id )
  1224. return PLUGIN_HANDLED
  1225. }
  1226.  
  1227. new data[ 6 ], iName[ 64 ]
  1228. new access, callback
  1229. menu_item_getinfo( menu, item, access, data, 5, iName, 63, callback )
  1230.  
  1231. new tempid = str_to_num( data )
  1232. new tempname[ 32 ]; get_user_name( tempid, tempname, 31 )
  1233.  
  1234. static motd[ 2500 ], len
  1235. len = format( motd, sizeof( motd ) - 1, "<body bgcolor=#10497d>" )
  1236. len += format( motd[ len ], sizeof( motd ) - len - 1, "<table width=100%% cellpadding=2 cellspacing=4 border=4>" )
  1237. len += format( motd[ len ], sizeof( motd ) - len - 1, "<tr align=center bgcolor=#52697B>" )
  1238. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=10%% align=left>%s", tempname )
  1239. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=15%% align=center>Achievement Level" );
  1240. len += format( motd[ len ], sizeof( motd ) - len - 1, "<th width=20%% align=center>Achievement Max Level" )
  1241.  
  1242. for( new iLevel = 20; iLevel < g_iAchCount; iLevel++ )
  1243. {
  1244. len += format( motd[ len ], sizeof( motd ) - len - 1, "<tr align=center bgcolor=#c7c7c7>" )
  1245. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=left>%s", g_iAchsMotd[ iLevel ] )
  1246. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=center>%i", g_iAchLevel[ tempid ][ iLevel ] )
  1247. len += format( motd[ len ], sizeof( motd ) - len - 1, "<td align=center>%i", g_iAchsMaxPoints[ iLevel ] )
  1248.  
  1249. }
  1250. len += format( motd[ len ], sizeof( motd ) - len - 1, "</table></body>" )
  1251.  
  1252. show_motd( id, motd, "Player Info" )
  1253. menu_display( id, menu )
  1254. menu_destroy( menu )
  1255. return PLUGIN_HANDLED
  1256. }
  1257.  
  1258. public plugin_end()
  1259. {
  1260. TrieDestroy( g_tWeaponNameToID )
  1261. #if !defined USING_SQL
  1262. nvault_close( g_iVault )
  1263. #endif
  1264. }
  1265.  
  1266. public FwdPlayerSpawn(id)
  1267. {
  1268. if( !is_user_alive( id ) )
  1269. {
  1270. return HAM_IGNORED
  1271. }
  1272.  
  1273. is_Alive[ id ] = true
  1274.  
  1275. return HAM_IGNORED;
  1276. }
  1277.  
  1278. public client_connect( id )
  1279. {
  1280. is_dead[ id ] = false
  1281. ResetStats( id )
  1282. }
  1283.  
  1284. public client_authorized( id )
  1285. {
  1286. if( !is_user_bot( id ) && !is_user_hltv( id ) )
  1287. {
  1288. #if defined USING_REGEX
  1289. get_user_authid( id, g_iAuthID[ id ], charsmax( g_iAuthID[] ) - 1 )
  1290.  
  1291. if( !IsValidAuthid( g_iAuthID[ id ] ) )
  1292. {
  1293. g_iAuthID[ id ][0] = 0
  1294. }
  1295. else
  1296. {
  1297. g_iLoadStats( id )
  1298. }
  1299. #else
  1300. get_user_authid( id, g_iAuthID[ id ], charsmax( g_iAuthID[] ) )
  1301. g_iLoadStats( id )
  1302. #endif
  1303. }
  1304. }
  1305.  
  1306. public client_putinserver( id )
  1307. {
  1308. is_Connected[ id ] = true
  1309. if( is_Connected[ id ] )
  1310. {
  1311. #if defined USING_REGEX
  1312. if( !IsUserAuthorized( id ) )
  1313. {
  1314. return PLUGIN_HANDLED
  1315. }
  1316. #endif
  1317. g_iJoinTime[ id ] = get_systime()
  1318. is_Alive[ id ] = false
  1319. g_iDeathMessages[ id ] = true
  1320. g_iAchLevel[ id ][ CONNECTIONS ]++
  1321.  
  1322. new szName[ 32 ]
  1323. get_user_name( id, szName, charsmax( szName ) )
  1324.  
  1325. switch( g_iAchLevel[ id ][ CONNECTIONS ] )
  1326. {
  1327. case 100:
  1328. {
  1329. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1I'll Be Back^3'^4 achievement!", szName )
  1330. emit_sound( id, CHAN_ITEM, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1331. return PLUGIN_HANDLED
  1332. }
  1333.  
  1334. case 250:
  1335. {
  1336. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1I Like This Server^3'^4 achievement!", szName )
  1337. emit_sound( id, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1338. return PLUGIN_HANDLED
  1339. }
  1340.  
  1341. case 500:
  1342. {
  1343. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Half Way There^3'^4 achievement!", szName )
  1344. emit_sound( id, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1345. return PLUGIN_HANDLED
  1346. }
  1347.  
  1348. case 1000:
  1349. {
  1350. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Ultimate Server Lover^3'^4 achievement!", szName )
  1351. emit_sound( id, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1352. return PLUGIN_HANDLED
  1353. }
  1354. }
  1355. }
  1356. return PLUGIN_HANDLED
  1357. }
  1358.  
  1359. public client_disconnect( id )
  1360. {
  1361. g_iSaveStats( id )
  1362.  
  1363. g_iJoinTime[ id ] = 0
  1364. is_Connected[ id ] = false
  1365. is_Alive[ id ] = false
  1366.  
  1367. #if defined USING_SQL
  1368. g_loaded_data[ id ] = 0
  1369. #endif
  1370. }
  1371.  
  1372. public FwdCmdStart( id, handle )
  1373. {
  1374. if ( !is_Connected[ id ] && !is_Alive[ id ] )
  1375. {
  1376. return FMRES_IGNORED
  1377. }
  1378. #if defined USING_REGEX
  1379. if( !IsUserAuthorized( id ) )
  1380. {
  1381. return FMRES_IGNORED
  1382. }
  1383. #endif
  1384.  
  1385. if( g_iAchLevel[ id ][ CAMP_FIRE ] <= 1 )
  1386. {
  1387. if( entity_get_int( id, EV_INT_button ) & ( IN_MOVELEFT | IN_MOVERIGHT | IN_BACK | IN_FORWARD ) )
  1388. {
  1389. iKillerHasNotMoved[ id ] = false
  1390. g_iKills[ id ] = 0
  1391. }
  1392. else
  1393. {
  1394. iKillerHasNotMoved[ id ] = true
  1395. }
  1396. }
  1397.  
  1398. if( g_iAchLevel[ id ][ FLY_AWAY ] <= 1 )
  1399. {
  1400. if( entity_get_int( id, EV_INT_flags ) & FL_ONGROUND )
  1401. {
  1402. is_VictimInAir[ id ] = false
  1403. }
  1404. else
  1405. {
  1406. is_VictimInAir[ id ] = true
  1407. }
  1408. }
  1409.  
  1410. if( g_iAchLevel[ id ][ DISTANCE_WALKED ] <= 2 && iKillerHasNotMoved[ id ] == false )
  1411. {
  1412. new Float:vecOrigin[ 3 ]
  1413. entity_get_vector( id, EV_VEC_origin, vecOrigin )
  1414.  
  1415. if( !xs_vec_equal( vecOldOrigin[ id ], vecNullOrigin ) )
  1416. {
  1417. flDistance[ id ] += get_distance_f( vecOrigin, vecOldOrigin[ id ] )
  1418. }
  1419.  
  1420. xs_vec_copy( vecOrigin, vecOldOrigin[ id ] )
  1421.  
  1422. new szName[ 32 ]
  1423. get_user_name( id, szName, charsmax( szName ) )
  1424.  
  1425. switch( g_iAchLevel[ id ][ DISTANCE_WALKED ] )
  1426. {
  1427. case 0:
  1428. {
  1429. if( flDistance[ id ]/g_iFeet >= 1 )//baby steps
  1430. {
  1431. g_iAchLevel[ id ][ DISTANCE_WALKED ]++
  1432. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Baby Foot Steps^3'^4 achievement!", szName )
  1433. emit_sound( id, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1434. }
  1435. }
  1436. case 1:
  1437. {
  1438. if( flDistance[ id ]/g_iFeet >= 5280 )//1 mile hey?
  1439. {
  1440. g_iAchLevel[ id ][ DISTANCE_WALKED ]++
  1441. Print( 0, "^4[Achievement]^3 %s^1 has earned the ^3'^1I'm Half Way There^3'^4 achievement!", szName )
  1442. emit_sound( id, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1443. }
  1444. }
  1445. case 2:
  1446. {
  1447. if( flDistance[ id ]/g_iFeet >= 52800 )//Ten miles hey? Is this possible IDK lol
  1448. {
  1449. g_iAchLevel[ id ][ DISTANCE_WALKED ]++
  1450. Print( 0, "^4[Achievement]^3 %s^1 has earned the ^3'^1Long Run^3'^4 achievement!", szName )
  1451. emit_sound( id, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1452. }
  1453. }
  1454. }
  1455. }
  1456.  
  1457. new iPlayers[ 32 ], iNum, iPlayer, ctCount, tCount
  1458. get_players( iPlayers, iNum, "ah" )
  1459.  
  1460. for( new i = 0; i < iNum; i++ )
  1461. {
  1462. iPlayer = iPlayers[ i ]
  1463.  
  1464. static CsTeams:iTeam
  1465. iTeam = cs_get_user_team( iPlayers[ i ] )
  1466.  
  1467. switch( iTeam )
  1468. {
  1469. case CS_TEAM_CT:
  1470. {
  1471. ctCount++
  1472. }
  1473.  
  1474. case CS_TEAM_T:
  1475. {
  1476. tCount++
  1477. }
  1478. }
  1479. }
  1480.  
  1481. if( ctCount == 1 || tCount == 1 )
  1482. {
  1483. StandAlone[ iPlayer ] = true
  1484. }
  1485.  
  1486. return FMRES_IGNORED
  1487. }
  1488.  
  1489. ResetStats( id )
  1490. {
  1491. flDistance[ id ] = 0.0
  1492. xs_vec_copy( vecNullOrigin, vecOldOrigin[ id ] )
  1493. }
  1494.  
  1495. public Event_NewRound()
  1496. {
  1497. remove_task(0)
  1498.  
  1499. if( get_pcvar_num( g_pCvar_ShowInfo ) == 1 )
  1500. {
  1501. if( g_iRounds >= 6 ) {
  1502. Print( 0, "^4[AMXX]^1 This server is using^3 Achievements^4 v%s^1, by^3 Pastout!", VERSION )
  1503. Print( 0, "^4[AMXX]^1 Type^3 /help^1 for information about^4 achievements")
  1504. g_iRounds = 0
  1505. }
  1506.  
  1507. g_iRounds++
  1508. }
  1509.  
  1510. for( new i = 0; i < g_iMaxPlayers; i++ )
  1511. {
  1512. g_iTeamKills[ i ] = 0
  1513. g_iRoundSparys[ i ] = 0
  1514. StandAlone[ i ] = false
  1515. }
  1516. g_iBombPlant = false
  1517. g_iGetBombPlanted = 26
  1518.  
  1519. set_task( 1.0, "CheckBombPlantedTimer", 0, _, _, "a", g_iGetBombPlanted )
  1520. }
  1521.  
  1522. public CheckBombPlantedTimer( )
  1523. {
  1524. g_iGetBombPlanted--
  1525. if( g_iGetBombPlanted >= 1 )
  1526. {
  1527. g_iGetBombDown = true
  1528.  
  1529. } else {
  1530. g_iGetBombDown = false
  1531. remove_task(0)
  1532. }
  1533. }
  1534.  
  1535. public bomb_defused( iDefuser )
  1536. {
  1537. #if defined USING_REGEX
  1538. if( !IsUserAuthorized( iDefuser ) )
  1539. {
  1540. return PLUGIN_HANDLED
  1541. }
  1542. #endif
  1543. new szName[ 32 ]
  1544. get_user_name( iDefuser, szName, charsmax( szName ) )
  1545.  
  1546. switch( g_iAchLevel[ iDefuser ][ BOMB ] )
  1547. {
  1548. case 0:
  1549. {
  1550. if( g_iBombPlant == true )
  1551. {
  1552. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1OMFG that was close^3'^4 achievement!", szName )
  1553. emit_sound( iDefuser, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1554. }
  1555. g_iAchLevel[ iDefuser ][ BOMB ]++
  1556. }
  1557. }
  1558.  
  1559. g_iAchLevel[ iDefuser ][ DEFUSED_BOMB ]++
  1560. switch( g_iAchLevel[ iDefuser ][ DEFUSED_BOMB ] )
  1561. {
  1562. case 50:
  1563. {
  1564. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1C4 Defuser^3'^4 achievement!", szName )
  1565. emit_sound( iDefuser, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1566. }
  1567. case 100:
  1568. {
  1569. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1That Was Easy^3'^4 achievement!", szName )
  1570. emit_sound( iDefuser, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1571. }
  1572. case 150:
  1573. {
  1574. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Like a Game^3'^4 achievement!", szName )
  1575. emit_sound( iDefuser, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1576. }
  1577. case 200:
  1578. {
  1579. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Master of C4^3'^4 achievement!", szName )
  1580. emit_sound( iDefuser, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1581. }
  1582. case 400:
  1583. {
  1584. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Nothing Can Blow Up^3'^4 achievement!", szName )
  1585. emit_sound( iDefuser, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1586. }
  1587. }
  1588. if( get_pcvar_num( g_pCvar_BombMessage ) == 1 )
  1589. {
  1590. Print( 0, "^4[AMXX]^3 %s^1 has defused the^4 bomb.", szName )
  1591. }
  1592. #if defined USING_REGEX
  1593. return PLUGIN_HANDLED
  1594. #endif
  1595. }
  1596.  
  1597. public bomb_defusing( id )
  1598. {
  1599. if( get_pcvar_num( g_pCvar_BombMessage ) == 1 )
  1600. {
  1601. new szName[ 32 ]
  1602. get_user_name( id, szName, charsmax( szName ) )
  1603. Print( 0, "^1[^4AMMX^1]^3 %s^1 is defusing the^4 bomb^1 with%s a^3 kit^1.", szName, is_DefusingWithKit ? "" : "out" )
  1604. }
  1605. }
  1606.  
  1607. public bomb_planting( id )
  1608. {
  1609. if( get_pcvar_num( g_pCvar_BombMessage ) == 1 )
  1610. {
  1611. new szName[ 32 ]
  1612. get_user_name( id, szName, charsmax( szName ) )
  1613. Print( 0, "^4[AMXX]^3 %s^1 is planting the^4 bomb.", szName )
  1614. }
  1615. }
  1616.  
  1617. public bomb_planted( iPlanter )
  1618. {
  1619. #if defined USING_REGEX
  1620. if( !IsUserAuthorized( iPlanter ) )
  1621. {
  1622. return PLUGIN_HANDLED
  1623. }
  1624. #endif
  1625.  
  1626. new szName[ 32 ]
  1627. get_user_name( iPlanter, szName, charsmax( szName ) )
  1628.  
  1629. g_iBombTime = get_pcvar_num( g_pCvarC4Timer )
  1630. set_task( 1.0, "CheckC4Timer", 0, _, _, "a", g_iBombTime )
  1631.  
  1632. g_iAchLevel[ iPlanter ][ PLANT_BOMB_COUNT ]++
  1633.  
  1634. if( is_Connected[ iPlanter ] && is_Alive[ iPlanter ] )
  1635. {
  1636. switch( g_iAchLevel[ iPlanter ][ PLANT_BOMB ] )
  1637. {
  1638. case 0:
  1639. {
  1640. if( g_iGetBombDown == true )
  1641. {
  1642. g_iAchLevel[ iPlanter ][ PLANT_BOMB ]++
  1643. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Short Fuse^3'^4 achievement!", szName )
  1644. emit_sound( iPlanter, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1645. }
  1646. }
  1647. }
  1648.  
  1649. switch( g_iAchLevel[ iPlanter ][ PLANT_BOMB_COUNT ]++ )
  1650. {
  1651. case 100:
  1652. {
  1653. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Boomala Boomala^3'^4 achievement!", szName )
  1654. emit_sound( iPlanter, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1655. }
  1656. }
  1657. }
  1658. if( get_pcvar_num( g_pCvar_BombMessage ) == 1 )
  1659. {
  1660. Print( 0, "^1[^4AMMX^1]^3 %s^1 has planted the^4 bomb.", szName )
  1661. }
  1662. #if defined USING_REGEX
  1663. return PLUGIN_HANDLED
  1664. #endif
  1665. }
  1666.  
  1667. public CheckC4Timer()
  1668. {
  1669. g_iBombTime --
  1670. if( g_iBombTime <= 1 )
  1671. {
  1672. g_iBombPlant = true
  1673. remove_task(0)
  1674. }
  1675. }
  1676.  
  1677. public Event_ResetHud( id )
  1678. {
  1679. is_dead[ id ] = false
  1680. }
  1681.  
  1682. public Event_GotBomb( id )
  1683. {
  1684. g_iPlanter = id
  1685. }
  1686.  
  1687. public bomb_explode( g_iPlayer )
  1688. {
  1689. if( get_pcvar_num( g_pCvar_BombMessage ) == 1 )
  1690. {
  1691. Print( 0, "^1[^4AMMX^1] The^3 bomb^1 has^4 exploded." )
  1692. }
  1693. if( g_iPlanter <= 0 ) return PLUGIN_CONTINUE
  1694. set_task( 0.5, "check_dead", 9743248 )
  1695. return PLUGIN_CONTINUE
  1696. }
  1697.  
  1698. public check_dead( )
  1699. {
  1700. new frags = 0
  1701. new kname[ 32 ], kteam[ 10 ], kauthid[ 32 ]
  1702. get_user_name( g_iPlanter, kname, 31 )
  1703. get_user_team( g_iPlanter, kteam, 9 )
  1704. get_user_authid( g_iPlanter, kauthid, 31 )
  1705.  
  1706. new players[ 32 ], inum
  1707. get_players( players, inum )
  1708. for( new i = 0; i < inum; i++ )
  1709. {
  1710. new team = get_user_team( players[ i ] )
  1711. if( is_Connected[ players[ i ] ] && !is_Alive[ players[ i ] ] && team != 0 && team != 3 )
  1712. {
  1713. if( !is_dead[ players[ i ] ] && team != get_user_team( g_iPlanter ) && players[ i ] != g_iPlanter )
  1714. {
  1715. ++frags
  1716. message_begin( MSG_BROADCAST, 83, {0,0,0}, 0 )
  1717. write_byte( g_iPlanter )
  1718. write_byte( players[ i ] )
  1719. write_byte( 0 )
  1720. write_string("c4")
  1721. message_end()
  1722.  
  1723. new vname[ 32 ], vteam[ 10 ], vauthid[ 32 ]
  1724.  
  1725. get_user_name( players[ i ], vname, 31 )
  1726. get_user_team( players[ i ], vteam, 9 )
  1727. get_user_authid( players[ i ], vauthid, 31 )
  1728.  
  1729. log_message("^"%s<%d><%s><%s>^" killed ^"%s<%d><%s><%s>^" with ^"%s^"",
  1730. kname, get_user_userid( g_iPlanter ), kauthid, kteam,
  1731. vname, get_user_userid( players[ i ] ), vauthid, vteam, "c4" )
  1732. g_iPlayersKills[ g_iPlanter ][ CSW_C4 ]++
  1733. if( g_iPlayersKills[ g_iPlanter ][ CSW_C4 ] == 30 )
  1734. {
  1735. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1C4 Killer^3'^4 achievement.", kname )
  1736. emit_sound( g_iPlanter, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1737. }
  1738. }
  1739. }
  1740. }
  1741. if( frags )
  1742. {
  1743. frags += get_user_frags( g_iPlanter )
  1744. set_user_frags( g_iPlanter, frags )
  1745. }
  1746. }
  1747.  
  1748. public client_death( iKiller, iVictim, iWeapon, iHitplace, TK )
  1749. {
  1750. #if defined USING_REGEX
  1751. if( !IsUserAuthorized( iKiller ) || !IsUserAuthorized( iVictim ) )
  1752. {
  1753. return PLUGIN_HANDLED
  1754. }
  1755. #endif
  1756.  
  1757. new g_iKiller[ 32 ]
  1758. get_user_name( iKiller, g_iKiller, charsmax( g_iKiller ) )
  1759. if( ( iWeapon == CSW_HEGRENADE ) && !TK && is_Alive[ iKiller ] )
  1760. {
  1761. g_iPlayersKills[ iKiller ][ CSW_HEGRENADE ]++
  1762. if( g_iPlayersKills[ iKiller ][ CSW_HEGRENADE ] == 300 )
  1763. {
  1764. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1HE Grenade Expert^3'^4 achievement.", g_iKiller )
  1765. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1766. }
  1767.  
  1768. g_iGrenadeKills[ iKiller ]++
  1769. if( g_iGrenadeKills[ iKiller ] == 3 )
  1770. {
  1771. g_iAchLevel[ iKiller ][ HAT_TRICK ]++
  1772. switch( g_iAchLevel[ iKiller ][ HAT_TRICK ] )
  1773. {
  1774. case 1:
  1775. {
  1776. g_iAchLevel[ iKiller ][ HAT_TRICK ]++
  1777. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Hat Trick^3'^4 achievement!", g_iKiller )
  1778. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1779. }
  1780. }
  1781. g_iGrenadeKills[ iKiller ] = 0
  1782. }
  1783. set_task( 0.3, "ResetGrenadeKills" )
  1784. }
  1785. #if defined USING_REGEX
  1786. return PLUGIN_HANDLED
  1787. #endif
  1788. }
  1789.  
  1790. public ResetGrenadeKills( )
  1791. {
  1792. new iPlayers[ 32 ], iNum, iPlayer
  1793. get_players( iPlayers, iNum, "ah" )
  1794.  
  1795. for( new i = 0; i < iNum; i++ )
  1796. {
  1797. iPlayer = iPlayers[ i ]
  1798. }
  1799. g_iGrenadeKills[ iPlayer ] = 0
  1800. }
  1801.  
  1802. public grenade_throw( id, grenadeIndex, weaponId )
  1803. {
  1804. #if defined USING_REGEX
  1805. if( !IsUserAuthorized( id ) )
  1806. {
  1807. return PLUGIN_HANDLED
  1808. }
  1809. #endif
  1810.  
  1811. new g_iName[ 32 ]
  1812. get_user_name( id, g_iName, charsmax( g_iName ) )
  1813.  
  1814. switch( weaponId )
  1815. {
  1816. case CSW_FLASHBANG:
  1817. {
  1818. g_iPlayersKills[ id ][ CSW_FLASHBANG ]++
  1819.  
  1820. if( g_iPlayersKills[ id ][ CSW_FLASHBANG ] == 150 )
  1821. {
  1822. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Can You See?^3'^4 achievement!", g_iName )
  1823. emit_sound( id, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1824. }
  1825. }
  1826. case CSW_SMOKEGRENADE:
  1827. {
  1828. g_iPlayersKills[ id ][ CSW_SMOKEGRENADE ]++
  1829.  
  1830. if( g_iPlayersKills[ id ][ CSW_SMOKEGRENADE ] == 150 )
  1831. {
  1832. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1It's A Bit Smokey In Here!^3'^4 achievement!", g_iName )
  1833. emit_sound( id, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1834. }
  1835. }
  1836. }
  1837. #if defined USING_REGEX
  1838. return PLUGIN_HANDLED
  1839. #endif
  1840. }
  1841.  
  1842. get_user_flashed( id, &iPercent=0 )
  1843. {
  1844. new Float:flFlashedAt = get_pdata_float( id, m_flFlashedAt, XO_PLAYER )
  1845.  
  1846. if( !flFlashedAt )
  1847. {
  1848. return 0
  1849. }
  1850.  
  1851. new Float:flGameTime = get_gametime()
  1852. new Float:flTimeLeft = flGameTime - flFlashedAt
  1853. new Float:flFlashDuration = get_pdata_float( id, m_flFlashDuration, XO_PLAYER )
  1854. new Float:flFlashHoldTime = get_pdata_float( id, m_flFlashHoldTime, XO_PLAYER )
  1855. new Float:flTotalTime = flFlashHoldTime + flFlashDuration
  1856.  
  1857. if( flTimeLeft > flTotalTime )
  1858. {
  1859. return 0
  1860. }
  1861.  
  1862. new iFlashAlpha = get_pdata_int( id, m_iFlashAlpha, XO_PLAYER )
  1863.  
  1864. if( iFlashAlpha == ALPHA_FULLBLINDED )
  1865. {
  1866. if( get_pdata_float( id, m_flFlashedUntil, XO_PLAYER) - flGameTime > 0.0 )
  1867. {
  1868. iPercent = 100
  1869. }
  1870. else
  1871. {
  1872. iPercent = 100-floatround( ( ( flGameTime - ( flFlashedAt + flFlashHoldTime ) ) * 100.0 )/flFlashDuration )
  1873. }
  1874. }
  1875. else
  1876. {
  1877. iPercent = 100-floatround( ( ( flGameTime - flFlashedAt ) * 100.0 ) / flTotalTime )
  1878. }
  1879.  
  1880. return iFlashAlpha
  1881. }
  1882.  
  1883. public Event_PlayerKilled()
  1884. {
  1885. new iKiller = read_data( 1 )
  1886. new iVictim = read_data( 2 )
  1887.  
  1888. is_dead[ iVictim ] = true
  1889.  
  1890. is_Alive[ iKiller ] = bool:is_user_alive( iKiller )
  1891.  
  1892. if( !IsPlayer( iKiller ) || iKiller == iVictim )
  1893. {
  1894. return PLUGIN_HANDLED
  1895. }
  1896.  
  1897. // if( get_pcvar_num( g_pCvar_FriendlyFire ) == 0 )
  1898. // {
  1899. // return PLUGIN_HANDLED
  1900. // }
  1901. #if defined USING_REGEX
  1902. if( !IsUserAuthorized( iKiller ) || !IsUserAuthorized( iVictim ) )
  1903. {
  1904. return PLUGIN_HANDLED
  1905. }
  1906. #endif
  1907.  
  1908. new headshot = read_data( 3 )
  1909. new g_iKiller[ 32 ], g_iVictim[ 32 ], g_iWeapon[ 16 ], g_iOrigin[ 3 ], g_iOrigin2[ 3 ]
  1910. read_data(4, g_iWeapon, 15)
  1911.  
  1912. get_user_origin( iKiller, g_iOrigin )
  1913. get_user_origin( iVictim, g_iOrigin2 )
  1914. new flDistance = get_distance( g_iOrigin, g_iOrigin2 )
  1915.  
  1916. get_user_name( iKiller, g_iKiller, charsmax( g_iKiller ) )
  1917. get_user_name( iVictim, g_iVictim, charsmax( g_iVictim ) )
  1918.  
  1919. if( iKillerShot[ iKiller ] == true )
  1920. {
  1921. g_iShotKills[ iKiller ]++
  1922. if( g_iShotKills[ iKiller ] >= 2 )
  1923. {
  1924. g_iAchLevel[ iKiller ][ AMMO_CONSERVATION ]++
  1925. switch( g_iAchLevel[ iKiller ][ AMMO_CONSERVATION ] )
  1926. {
  1927. case 1:
  1928. {
  1929. g_iAchLevel[ iKiller ][ AMMO_CONSERVATION ]++
  1930. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Ammo Conservation^3'^4 achievement!", g_iKiller )
  1931. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1932. }
  1933. }
  1934. g_iShotKills[ iKiller ] = 0
  1935. }
  1936. }
  1937.  
  1938. if( headshot )
  1939. {
  1940.  
  1941. g_iAchLevel[ iKiller ][ HEAD_SHOTS ]++
  1942.  
  1943. switch( g_iAchLevel[ iKiller ][ HEAD_SHOTS ] )
  1944. {
  1945. case 300:
  1946. {
  1947. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Boom Head-Shot^3'^4 achievement.", g_iKiller )
  1948. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1949. }
  1950. }
  1951. }
  1952.  
  1953. if( TrieGetCell( g_tWeaponNameToID, g_iWeapon, iWeaponID ) )
  1954. {
  1955. g_iPlayersKills[ iKiller ][ iWeaponID ]++
  1956.  
  1957. switch( iWeaponID )
  1958. {
  1959. case CSW_P228:
  1960. {
  1961. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  1962. {
  1963. case 200:
  1964. {
  1965. g_iAchLevel[ iKiller ][ PISTOL_MASTER ]++
  1966. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  1967. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1228 Compact Expert^3'^4 achievement.", g_iKiller )
  1968. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1969. }
  1970. }
  1971. }
  1972. case CSW_SCOUT:
  1973. {
  1974. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  1975. {
  1976. case 1000:
  1977. {
  1978. g_iAchLevel[ iKiller ][ RIFLE_MASTER ]++
  1979. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  1980. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Schmidt Scout Expert^3'^4 achievement.", g_iKiller )
  1981. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1982. }
  1983. }
  1984. }
  1985.  
  1986. case CSW_XM1014:
  1987. {
  1988. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  1989. {
  1990. case 200:
  1991. {
  1992. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  1993. g_iAchLevel[ iKiller ][ SHOTGUN_MASTER ]++
  1994. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Leone YG1265 Auto Shotgun Expert^3'^4 achievement.", g_iKiller )
  1995. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  1996. }
  1997. }
  1998. }
  1999.  
  2000. case CSW_MAC10:
  2001. {
  2002. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2003. {
  2004. case 500:
  2005. {
  2006. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2007. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Ingram Mac-10 Expert^3'^4 achievement.", g_iKiller )
  2008. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2009. }
  2010. }
  2011. }
  2012. case CSW_AUG:
  2013. {
  2014. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2015. {
  2016. case 500:
  2017. {
  2018. g_iAchLevel[ iKiller ][ RIFLE_MASTER ]++
  2019. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2020. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Bullpup Expert^3'^4 achievement.", g_iKiller )
  2021. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2022. }
  2023. }
  2024.  
  2025. }
  2026. /*
  2027. case CSW_SMOKEGRENADE:
  2028. {
  2029. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2030. {
  2031.  
  2032. }
  2033. }*/
  2034. case CSW_ELITE:
  2035. {
  2036. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2037. {
  2038. case 100:
  2039. {
  2040. g_iAchLevel[ iKiller ][ PISTOL_MASTER ]++
  2041. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2042. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1.40 Dual Elites Expert^3'^4 achievement.", g_iKiller )
  2043. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2044. }
  2045. }
  2046. }
  2047. case CSW_FIVESEVEN:
  2048. {
  2049. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2050. {
  2051. case 100:
  2052. {
  2053. g_iAchLevel[ iKiller ][ PISTOL_MASTER ]++
  2054. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2055. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1ES Five-Seven Expert^3'^4 achievement.", g_iKiller )
  2056. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2057. }
  2058. }
  2059. }
  2060. case CSW_UMP45:
  2061. {
  2062. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2063. {
  2064. case 1000:
  2065. {
  2066. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2067. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1KM UMP45 Expert^3'^4 achievement.", g_iKiller )
  2068. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2069. }
  2070. }
  2071. }
  2072. case CSW_SG550:
  2073. {
  2074. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2075. {
  2076. case 500:
  2077. {
  2078. g_iAchLevel[ iKiller ][ RIFLE_MASTER ]++
  2079. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2080. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1D3/AU-1 Expert^3'^4 achievement.", g_iKiller )
  2081. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2082. }
  2083. }
  2084. }
  2085. case CSW_GALIL:
  2086. {
  2087. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2088. {
  2089. case 500:
  2090. {
  2091. g_iAchLevel[ iKiller ][ RIFLE_MASTER ]++
  2092. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2093. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1IDF Defender Expert^3'^4 achievement.", g_iKiller )
  2094. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2095. }
  2096. }
  2097. }
  2098. case CSW_FAMAS:
  2099. {
  2100. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2101. {
  2102. case 500:
  2103. {
  2104. g_iAchLevel[ iKiller ][ RIFLE_MASTER ]++
  2105. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2106. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Clarion 5.56 Expert^3'^4 achievement.", g_iKiller )
  2107. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2108. }
  2109. }
  2110. }
  2111. case CSW_USP:
  2112. {
  2113. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2114. {
  2115. case 200:
  2116. {
  2117. g_iAchLevel[ iKiller ][ PISTOL_MASTER ]++
  2118. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2119. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1KM Tactical .45 Expert^3'^4 achievement.", g_iKiller )
  2120. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2121. }
  2122. }
  2123. }
  2124. case CSW_GLOCK18:
  2125. {
  2126. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2127. {
  2128. case 200:
  2129. {
  2130. g_iAchLevel[ iKiller ][ PISTOL_MASTER ]++
  2131. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2132. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1.9×19 Sidearm Expert^3'^4 achievement.", g_iKiller )
  2133. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2134. }
  2135. }
  2136. }
  2137. case CSW_AWP:
  2138. {
  2139. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2140. {
  2141. case 1000:
  2142. {
  2143. g_iAchLevel[ iKiller ][ RIFLE_MASTER ]++
  2144. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2145. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Magnum Sniper Rifle Expert^3'^4 achievement.", g_iKiller )
  2146. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2147. }
  2148. }
  2149. }
  2150. case CSW_MP5NAVY:
  2151. {
  2152. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2153. {
  2154. case 1000:
  2155. {
  2156. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2157. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1KM Sub-Machine Gun Expert^3'^4 achievement.", g_iKiller )
  2158. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2159. }
  2160. }
  2161. }
  2162. case CSW_M249:
  2163. {
  2164. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2165. {
  2166. case 500:
  2167. {
  2168. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2169. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1M249 Expert^3'^4 achievement.", g_iKiller )
  2170. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2171. }
  2172. }
  2173. }
  2174. case CSW_M3:
  2175. {
  2176. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2177. {
  2178. case 200:
  2179. {
  2180. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2181. g_iAchLevel[ iKiller ][ SHOTGUN_MASTER ]++
  2182. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Leone 12 Gauge Super Expert^3'^4 achievement.", g_iKiller )
  2183. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2184. }
  2185. }
  2186. }
  2187. case CSW_M4A1:
  2188. {
  2189. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2190. {
  2191. case 1000:
  2192. {
  2193. g_iAchLevel[ iKiller ][ RIFLE_MASTER ]++
  2194. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2195. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Maverick M4A1 Carbine Expert^3'^4 achievement.", g_iKiller )
  2196. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2197. }
  2198. }
  2199. }
  2200. case CSW_TMP:
  2201. {
  2202. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2203. {
  2204. case 1000:
  2205. {
  2206. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2207. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Schmidt Machine Pistol Expert^3'^4 achievement.", g_iKiller )
  2208. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2209. }
  2210. }
  2211. }
  2212. case CSW_G3SG1:
  2213. {
  2214. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2215. {
  2216. case 500:
  2217. {
  2218. g_iAchLevel[ iKiller ][ RIFLE_MASTER ]++
  2219. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2220. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Krieg 550 Commando Expert^3'^4 achievement.", g_iKiller )
  2221. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2222. }
  2223. }
  2224. }
  2225. /*
  2226. case CSW_FLASHBANG:
  2227. {
  2228. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2229. {
  2230.  
  2231. }
  2232. }*/
  2233. case CSW_DEAGLE:
  2234. {
  2235. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2236. {
  2237. case 200:
  2238. {
  2239. g_iAchLevel[ iKiller ][ PISTOL_MASTER ]++
  2240. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2241. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Night Hawk .50c Expert^3'^4 achievement.", g_iKiller )
  2242. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2243. }
  2244. }
  2245. }
  2246. case CSW_SG552:
  2247. {
  2248. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2249. {
  2250. case 500:
  2251. {
  2252. g_iAchLevel[ iKiller ][ RIFLE_MASTER ]++
  2253. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2254. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Krieg 552 Expert^3'^4 achievement.", g_iKiller )
  2255. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2256. }
  2257. }
  2258. }
  2259. case CSW_AK47:
  2260. {
  2261. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2262. {
  2263. case 1000:
  2264. {
  2265. g_iAchLevel[ iKiller ][ RIFLE_MASTER ]++
  2266. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2267. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1CV-47 Expert^3'^4 achievement.", g_iKiller )
  2268. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2269. }
  2270. }
  2271. }
  2272. case CSW_KNIFE:
  2273. {
  2274. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2275. {
  2276. case 200:
  2277. {
  2278. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2279. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Knife Expert^3'^4 achievement.", g_iKiller )
  2280. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2281. }
  2282. }
  2283. }
  2284. case CSW_P90:
  2285. {
  2286. switch( g_iPlayersKills[ iKiller ][ iWeaponID ] )
  2287. {
  2288. case 1000:
  2289. {
  2290. g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ]++
  2291. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1ES C90 Expert^3'^4 achievement.", g_iKiller )
  2292. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2293. }
  2294. }
  2295. }
  2296. }
  2297. }
  2298.  
  2299. if( floatround( flDistance/g_iFeet ) == 1 )
  2300. {
  2301. g_bFeet = false
  2302. } else {
  2303. g_bFeet = true
  2304. }
  2305.  
  2306. switch( g_iAchLevel[ iKiller ][ DISTANCE_KILLED ] )
  2307. {
  2308. case 0:
  2309. {
  2310. if( floatround( flDistance/g_iFeet ) <= 5 )
  2311. {
  2312. g_iAchLevel[ iKiller ][ DISTANCE_KILLED ]++
  2313. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Short Range Kill^3'^4 achievement.", g_iKiller )
  2314. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2315. }
  2316. }
  2317.  
  2318. case 1:
  2319. {
  2320. if( 6 <= floatround( flDistance/g_iFeet ) <= 50 )
  2321. {
  2322. g_iAchLevel[ iKiller ][ DISTANCE_KILLED ]++
  2323. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Nice Aim^3'^4 achievement.", g_iKiller )
  2324. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2325. }
  2326. }
  2327.  
  2328. case 2:
  2329. {
  2330. if( 51 <= floatround( flDistance/g_iFeet ) <= 99 )
  2331. {
  2332. g_iAchLevel[ iKiller ][ DISTANCE_KILLED ]++
  2333. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Long Range Kill^3'^4 achievement.", g_iKiller )
  2334. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2335. }
  2336. }
  2337.  
  2338. case 3:
  2339. {
  2340. if( 100 <= floatround( flDistance/g_iFeet ) <= 150 )
  2341. {
  2342. g_iAchLevel[ iKiller ][ DISTANCE_KILLED ]++
  2343. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Aim-Bot Time^3'^4 achievement.", g_iKiller )
  2344. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2345. }
  2346. }
  2347. case 4:
  2348. {
  2349. if( 151 <= floatround( flDistance/g_iFeet ) <= 300 )
  2350. {
  2351. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1I Got The Power^3'^4 achievement.", g_iKiller )
  2352. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2353. }
  2354. }
  2355. }
  2356.  
  2357. g_iAchLevel[ iKiller ][ TOTAL_KILLS ]++
  2358. switch( g_iAchLevel[ iKiller ][ TOTAL_KILLS ] )
  2359. {
  2360. case 5000:
  2361. {
  2362. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Killer Master3'^4 achievement!", g_iKiller )
  2363. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2364. }
  2365. case 10000:
  2366. {
  2367. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1God of War^3'^4 achievement!", g_iKiller )
  2368. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2369. }
  2370. }
  2371.  
  2372. switch( g_iAchLevel[ iKiller ][ PISTOL_MASTER ] )
  2373. {
  2374. case 6:
  2375. {
  2376. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Pistol Master^3'^4 achievement!", g_iKiller )
  2377. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2378. }
  2379. }
  2380.  
  2381. switch( g_iAchLevel[ iKiller ][ RIFLE_MASTER ] )
  2382. {
  2383. case 10:
  2384. {
  2385. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Rifle Master^3'^4 achievement!", g_iKiller )
  2386. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2387. }
  2388. }
  2389.  
  2390. switch( g_iAchLevel[ iKiller ][ SHOTGUN_MASTER ] )
  2391. {
  2392. case 2:
  2393. {
  2394. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Shotgun Master^3'^4 achievement!", g_iKiller )
  2395. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2396. }
  2397. }
  2398.  
  2399. switch( g_iAchLevel[ iKiller ][ MASTER_AT_ARMS ] )
  2400. {
  2401. case 25:
  2402. {
  2403. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Master at Arms^3'^4 achievement!", g_iKiller )
  2404. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2405. }
  2406. }
  2407.  
  2408. if( is_VictimInAir[ iVictim ] == true )
  2409. {
  2410. g_iAchLevel[ iKiller ][ FLY_AWAY ]++
  2411. switch( g_iAchLevel[ iKiller ][ FLY_AWAY ] )
  2412. {
  2413. case 1:
  2414. {
  2415. g_iAchLevel[ iKiller ][ FLY_AWAY ]++
  2416. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Fly Away^3'^4 achievement!", g_iKiller )
  2417. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2418. }
  2419. }
  2420. }
  2421.  
  2422. new iPercent, iFlashAlpha
  2423. if( ( iFlashAlpha = get_user_flashed( iKiller, iPercent ) ) )
  2424. {
  2425. if( get_pcvar_num( g_pCvar_FlashMessage ) == 1 )
  2426. {
  2427. Print( 0, "^4[AMXX]^3 %s^4 was Flashed (^1%s^4) ^1%d%% and killed^4 %s", g_iKiller, iFlashAlpha == ALPHA_FULLBLINDED ? "Full" : "Semi", iPercent, g_iVictim )
  2428. }
  2429. if( iPercent == 100 )
  2430. {
  2431. g_iAchLevel[ iKiller ][ SPRAY_N_PRAY ]++
  2432.  
  2433. switch( g_iAchLevel[ iKiller ][ SPRAY_N_PRAY ] )
  2434. {
  2435. case 1:
  2436. {
  2437. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Spray and Pray^3'^4 achievement!", g_iKiller )
  2438. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2439. }
  2440. }
  2441. }
  2442.  
  2443. }
  2444. else
  2445. {
  2446. if( get_pcvar_num( g_pCvar_DeathMessage ) == 1 && g_iDeathMessages[ iKiller ] == true )
  2447. {
  2448. Print( 0, "%s^4 %s^3 [^1 %s^3 ]^1 with a^4 %s^1 with a distance of^4 %d F%st^1 away.", g_iKiller, headshot ? "Headshot" : "Killed", g_iVictim, g_iWeapon, floatround( flDistance/g_iFeet ), g_bFeet ? "ee" : "oo" )
  2449. }
  2450. }
  2451.  
  2452. if( StandAlone[ iVictim ] == true )
  2453. {
  2454. g_iAchLevel[ iVictim ][ STAND_ALONE ]++
  2455. switch( g_iAchLevel[ iVictim ][ STAND_ALONE ] )
  2456. {
  2457. case 15:
  2458. {
  2459. g_iAchLevel[ iVictim ][ STAND_ALONE ]++
  2460. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Stand Alone^3'^4 achievement!", g_iVictim )
  2461. emit_sound( iVictim, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2462. }
  2463. }
  2464. }
  2465.  
  2466. if( get_user_health( iKiller ) == 1 )
  2467. {
  2468. OneHpHero[ iKiller ] = true
  2469. }
  2470.  
  2471. if( OneHpHero[ iKiller ] == true )
  2472. {
  2473. g_iAchLevel[ iKiller ][ ONE_HP_HERO ]++
  2474. switch( g_iAchLevel[ iKiller ][ ONE_HP_HERO ] )
  2475. {
  2476. case 1:
  2477. {
  2478. g_iAchLevel[ iKiller ][ ONE_HP_HERO ]++
  2479. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1One Hp Hero^3'^4 achievement!", g_iKiller )
  2480. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2481. }
  2482. }
  2483. }
  2484.  
  2485. if( cs_get_user_team( iKiller ) == cs_get_user_team( iVictim ) )
  2486. {
  2487. g_iTeamKills[ iKiller ]++
  2488. }
  2489.  
  2490. if( g_iTeamKills[ iKiller ] == 5 )
  2491. {
  2492. g_iAchLevel[ iKiller ][ BAD_FRIEND ]++
  2493. switch( g_iAchLevel[ iKiller ][ BAD_FRIEND ] )
  2494. {
  2495. case 1:
  2496. {
  2497. g_iAchLevel[ iKiller ][ BAD_FRIEND ]++
  2498. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Bad Friend^3'^4 achievement!", g_iKiller )
  2499. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2500. }
  2501. }
  2502. }
  2503.  
  2504. if( iKillerHasNotMoved[ iKiller ] == true )
  2505. {
  2506. g_iKills[ iKiller ]++
  2507. if( g_iKills[ iKiller ] == 3 )
  2508. {
  2509.  
  2510. g_iAchLevel[ iKiller ][ CAMP_FIRE ]++
  2511. switch( g_iAchLevel[ iKiller ][ CAMP_FIRE ] )
  2512. {
  2513. case 1:
  2514. {
  2515. g_iAchLevel[ iKiller ][ CAMP_FIRE ]++
  2516. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Camp Fire^3'^4 achievement!", g_iKiller )
  2517. emit_sound( iKiller, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2518. }
  2519. }
  2520. }
  2521. }
  2522.  
  2523. return PLUGIN_HANDLED
  2524. }
  2525.  
  2526. public Event_Spray( )
  2527. {
  2528. new iPlayers[ 32 ], iNum, iPlayer
  2529. get_players( iPlayers, iNum, "ah" )
  2530.  
  2531. for( new i = 0; i < iNum; i++ )
  2532. {
  2533. iPlayer = iPlayers[ i ]
  2534. }
  2535.  
  2536. #if defined USING_REGEX
  2537. if( !IsUserAuthorized( iPlayer ) )
  2538. {
  2539. return PLUGIN_HANDLED
  2540. }
  2541. #endif
  2542.  
  2543. new szName[ 32 ]
  2544. get_user_name( iPlayer, szName, charsmax( szName ) )
  2545.  
  2546. g_iAchLevel[ iPlayer ][ URBAN_DESIGNER ]++
  2547. switch( g_iAchLevel[ iPlayer ][ URBAN_DESIGNER ] )
  2548. {
  2549. case 300:
  2550. {
  2551. g_iAchLevel[ iPlayer ][ URBAN_DESIGNER ]++
  2552. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Urban Designer^3'^4 achievement!", szName )
  2553. emit_sound( iPlayer, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2554. }
  2555. }
  2556.  
  2557. g_iRoundSparys[ iPlayer ]++
  2558.  
  2559. if( g_iRoundSparys[ iPlayer ] == 8 )
  2560. {
  2561. g_iAchLevel[ iPlayer ][ GRAFFITI ]++
  2562. switch( g_iAchLevel[ iPlayer ][ GRAFFITI ] )
  2563. {
  2564. case 1:
  2565. {
  2566. g_iAchLevel[ iPlayer ][ GRAFFITI ]++
  2567. Print( 0, "^4[Achievement]^3 %s^1 has earned ^3'^1Graffiti^3'^4 achievement!", szName )
  2568. emit_sound( iPlayer, CHAN_STATIC, g_szAchievementSound, 1.0, ATTN_NORM, 0, PITCH_NORM )
  2569. }
  2570. }
  2571. }
  2572. #if defined USING_REGEX
  2573. return PLUGIN_HANDLED
  2574. #endif
  2575. }
  2576.  
  2577. Print(index, const Msg[], {Float, Sql, Result,_}:...) {
  2578. new Buffer[190], Buffer2[192];
  2579. formatex(Buffer2, sizeof(Buffer2)-1, "%s", Msg);
  2580. vformat(Buffer, sizeof(Buffer)-1, Buffer2, 3);
  2581.  
  2582. if (!index) {
  2583. for (new i = 1; i <= g_iMaxPlayers; i++) {
  2584. if (!is_user_connected(i))
  2585. continue;
  2586.  
  2587. message_begin(MSG_ONE_UNRELIABLE, g_iMsgSayText,_, i);
  2588. write_byte(i);
  2589. write_string(Buffer);
  2590. message_end();
  2591. }
  2592. }
  2593. else {
  2594. if (!is_user_connected(index))
  2595. return;
  2596.  
  2597. message_begin(MSG_ONE_UNRELIABLE, g_iMsgSayText,_, index);
  2598. write_byte(index);
  2599. write_string(Buffer);
  2600. message_end();
  2601. }
  2602. }
  2603.  
  2604. #if defined USING_REGEX
  2605. IsValidAuthid( authid[] )
  2606. {
  2607. return ( regex_match_c( authid, g_SteamID_pattern, g_regex_return ) > 0 )
  2608. }
  2609.  
  2610. IsUserAuthorized( id )
  2611. {
  2612. return g_iAuthID[ id ][ 0 ] != 0
  2613. }
  2614. #endif
  2615.  
  2616. public g_iLoadStats( id )
  2617. {
  2618. #if defined USING_SQL
  2619. static query[ 128 ]
  2620. formatex(query, sizeof(query) - 1, "SELECT ^"data^" FROM ^"Achievement^" WHERE ^"authid^" = ^"%s^";", g_iAuthID[ id ] )
  2621.  
  2622. static data[ 2 ]
  2623. data[ 0 ] = id
  2624.  
  2625. SQL_ThreadQuery( g_sql_tuple, "QueryLoadData", query, data, sizeof( data ) )
  2626.  
  2627. #else
  2628. static data[ 256 ], timestamp
  2629. if( nvault_lookup( g_iVault, g_iAuthID[ id ], data, sizeof( data ) - 1, timestamp ) )
  2630. {
  2631. ParseLoadData( id, data )
  2632. return//
  2633. }
  2634. else
  2635. {
  2636. NewUser( id )
  2637. }
  2638. #endif
  2639. }
  2640.  
  2641. public NewUser( id )
  2642. {
  2643.  
  2644. for( new iLevel = 0; iLevel < g_iAchCount; iLevel++ )
  2645. {
  2646. g_iAchLevel[ id ][ iLevel ] = 0
  2647. }
  2648.  
  2649. for( new i = 0; i < WEAPON_SIZE; i++ )
  2650. {
  2651. g_iPlayersKills[ id ][ g_iWeaponIDs[ i ] ] = 0
  2652. }
  2653.  
  2654. }
  2655.  
  2656. #if defined USING_SQL
  2657. public QueryLoadData( failstate, Handle:query, error[], errnum, data[], size, Float:queuetime )
  2658. {
  2659. if( failstate == TQUERY_CONNECT_FAILED
  2660. || failstate == TQUERY_QUERY_FAILED )
  2661. {
  2662. set_fail_state( error )
  2663. }
  2664. else
  2665. {
  2666. if( SQL_NumResults( query ) )
  2667. {
  2668. static sqldata[ 256 ]
  2669. SQL_ReadResult( query, 0, sqldata, sizeof( sqldata ) - 1 )
  2670. ParseLoadData( data[0], sqldata )
  2671. }
  2672. else
  2673. {
  2674. NewUser( data[ 0 ] )
  2675. }
  2676. }
  2677. }
  2678. #endif
  2679.  
  2680. ParseLoadData( id, data[ 256 ] )
  2681. {
  2682. new num[ 6 ]
  2683.  
  2684. for( new i = 0; i < WEAPON_SIZE; i++ )
  2685. {
  2686. strbreak( data, num, sizeof( num ) - 1, data, sizeof( data ) - 1 )
  2687. g_iPlayersKills[ id ][ g_iWeaponIDs[ i ] ] = clamp( str_to_num( num ), 0, g_iAchsWeaponMaxKills[ i ] )
  2688. }
  2689.  
  2690. for( new iLevel = 0; iLevel < g_iAchCount; iLevel++ )
  2691. {
  2692. strbreak( data, num, sizeof( num ) - 1, data, sizeof( data ) - 1 )
  2693. g_iAchLevel[ id ][ iLevel ] = clamp( str_to_num( num ), 0, g_iAchsMaxPoints[ iLevel ] )
  2694. }
  2695.  
  2696. #if defined USING_SQL
  2697. g_loaded_data[ id ] = 1
  2698. #endif
  2699. }
  2700.  
  2701. public g_iSaveStats( id )
  2702. {
  2703. #if defined USING_REGEX
  2704. if( !IsUserAuthorized( id ) ) return
  2705. #endif
  2706.  
  2707. static data[ 256 ]
  2708. new len
  2709.  
  2710. for( new i = 0; i < WEAPON_SIZE; i++ )
  2711. {
  2712. len += formatex( data[ len ], sizeof( data ) - len - 1, " %i", g_iPlayersKills[ id ][ g_iWeaponIDs[ i ] ] )
  2713. }
  2714.  
  2715. for( new iLevel = 0; iLevel < g_iAchCount; iLevel++ )
  2716. {
  2717. len += formatex( data[ len ], sizeof( data ) - len - 1, " %i", g_iAchLevel[ id ][ iLevel ] )
  2718. }
  2719.  
  2720. #if defined USING_SQL
  2721. static name[ 32 ]
  2722. get_user_name( id, name, sizeof( name ) - 1 )
  2723.  
  2724. static query[ 256 ]
  2725. if( g_loaded_data[ id ] )
  2726. {
  2727. formatex( query, sizeof( query ) - 1, "UPDATE ^"Achievement^" SET ^"name^" = ^"%s^", ^"data^" = ^"%s^" WHERE ^"authid^" = ^"%s^";", name, data, g_iAuthID[ id ] )
  2728. }
  2729. else
  2730. {
  2731. formatex( query, sizeof( query ) - 1, "INSERT INTO ^"Achievement^" ( ^"name^", ^"authid^", ^"data^" ) VALUES ( ^"%s^", ^"%s^", ^"%s^" );", name, g_iAuthID[ id ], data )
  2732. }
  2733.  
  2734. SQL_ThreadQuery( g_sql_tuple, "QuerySaveData", query )
  2735. #else
  2736. nvault_set( g_iVault, g_iAuthID[ id ], data )
  2737. #endif
  2738. }
  2739.  
  2740. #if defined USING_SQL
  2741. public QuerySaveData( failstate, Handle:query, error[], errnum, data[], size, Float:queuetime )
  2742. {
  2743. if( failstate == TQUERY_CONNECT_FAILED
  2744. || failstate == TQUERY_QUERY_FAILED )
  2745. {
  2746. set_fail_state( error )
  2747. }
  2748. }
  2749. #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement