Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2014
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 61.82 KB | None | 0 0
  1. #include < amxmodx >
  2. #include < amxmisc >
  3. #include < cstrike >
  4. #include < hamsandwich >
  5. #include < nvault_util >
  6. #include < colorchat >
  7. #include < fun >
  8. #include < engine >
  9. #include < fakemeta >
  10.  
  11. #define PLUGIN "HidenSeek Shop"
  12. #define VERSION "1.0"
  13. #define AUTHOR "dinnk"
  14. #define MAXPLAYERS 32
  15. #define IsPlayer(%1) (1 <= %1 <= gMaxPlayers)
  16.  
  17. #pragma semicolon 0
  18. #pragma tabsize 0
  19.  
  20. enum _:KNIFES
  21. {
  22. Default,
  23. Silver,
  24. Gold,
  25. ProKnife,
  26. Katana,
  27. Khanjar,
  28. CzoneVip
  29. }
  30.  
  31. enum _:KNIFEINFO
  32. {
  33. Name [ 50 ],
  34. PointBonus,
  35. Price,
  36. CaseNumb
  37. }
  38.  
  39. new const KnifeInfo [ KNIFES ] [ KNIFEINFO ] =
  40. {
  41. { "Standard Knife", 0, 0, 1 },
  42. { "Silver Knife", 1, 60, 2 },
  43. { "Gold Knife", 1, 60, 3 },
  44. { "Pro Knife", 1, 60, 4 },
  45. { "Katana", 2, 175, 5 },
  46. { "Khanjar", 2, 175, 6 },
  47. { "CzoneGaming VIP Knife", 4, 650, 7 }
  48. }
  49.  
  50. enum _:UPGRADES
  51. {
  52. Health,
  53. Respawn,
  54. Damage
  55. }
  56.  
  57. enum _:ITEMINFO
  58. {
  59. Name [ 20 ],
  60. Levels,
  61. MaxValue,
  62. Prefix [ 5 ]
  63. }
  64.  
  65. new const ItemInfo [ UPGRADES ] [ ITEMINFO ] =
  66. {
  67. { "Extra Health", 5, 25, " HP" },
  68. { "Respawn Chance", 5, 15, "%" },
  69. { "Extra Damage", 3, 15, "%" }
  70. }
  71.  
  72. new const ItemPrice [ UPGRADES ] [ ] =
  73. {
  74. { 50, 60, 75, 90, 130 },
  75. { 100, 120, 150, 190, 250 },
  76. { 80, 100, 150 }
  77. }
  78.  
  79. /////////////////P R E F I X/////////////////////////////////////////////////
  80. new const gPrefix [ ] = "^4[CZ] HideNSeek Shop:^3"
  81.  
  82. /////////////////M E N U . C O M M A N D S///////////////////////////////////
  83. new const gMenuCommands [ ] [ ] =
  84. {
  85. "say /shop",
  86. "say_team /shop",
  87. "shopmenu",
  88. "say /pm",
  89. "say_team /pm"
  90. }
  91.  
  92. /////////////////V A R I A B L E S///////////////////////////////////////////
  93. new gPoint [ MAXPLAYERS + 1 ]
  94. new gPointTop [ MAXPLAYERS + 1 ]
  95. new gKillCount [ MAXPLAYERS + 1 ]
  96. new gSurviveCount [ MAXPLAYERS + 1 ]
  97. new gItemLevel [ MAXPLAYERS + 1 ] [ UPGRADES ]
  98. new gKnifeOwned [ MAXPLAYERS + 1 ] [ KNIFES ]
  99. new gKnife [ MAXPLAYERS + 1 ]
  100. new gVip [ MAXPLAYERS + 1 ]
  101.  
  102. /////////////////V I P///////////////////////////////////////////////////
  103. new bool: gIsVip [ MAXPLAYERS + 1 ]
  104. new gVIPFile [ 128 ]
  105. new Trie:gVIPSteamIDs
  106.  
  107. /////////////////S A V E / L O A D///////////////////////////////////////////
  108. new gVault
  109. new const gVaultName [ ] = "CZPointMod"
  110.  
  111. /////////////////M A X P L A Y E R S/////////////////////////////////////////
  112. new gMaxPlayers
  113. new gFirstClient
  114.  
  115. /////////////////B O O L S///////////////////////////////////////////////////
  116. new bool:gIsRespawned [ MAXPLAYERS + 1 ]
  117. new bool:gGotHealth [ MAXPLAYERS + 1 ]
  118. new bool:gIsNotNew [ MAXPLAYERS + 1 ]
  119.  
  120. /////////////////T O P T E N/////////////////////////////////////////////////
  121. const TOPRANKS = 10
  122. new gTopNames [ TOPRANKS + 1 ] [ 32 ]
  123. new gTopAuth [ TOPRANKS + 1 ] [ 35 ]
  124. new gTopPoints [ TOPRANKS + 1 ]
  125. new gTopVault
  126.  
  127. /////////////////GIVE POINTS/////////////////////////////////////////////////
  128. new gName[ 32 ]
  129.  
  130. /////////////////C V A R S///////////////////////////////////////////////////
  131. enum _:g_Cvars
  132. {
  133. Kill, // Points gained per kill
  134. Survive, // Points gained per survive
  135. Headshot, // Points gained for Headshot Bonus
  136. Suicide, // Points lost for Suiciding
  137. PriceVip, // Price for buying VIP Skin ( double points gained from anything )
  138. BonusT, // Points Bonus for surviving X rounds in a row as Terrorist
  139. BonusCT, // Points Bonus for killing X Terrorists in a single round as CT
  140. BonusTNeeded, // Rounds needed won before getting bonus
  141. BonusCTNeeded, // Kills needed before getting bonus
  142. PointStart // Amount of points people start with when playing for the first time
  143. }
  144. new gCvars [ g_Cvars ]
  145.  
  146. public plugin_precache( )
  147. {
  148. LoadVIPs( )
  149.  
  150. precache_model ( "models/player/ctvip/ctvip.mdl" )
  151. precache_model ( "models/player/tvip/tvip.mdl" )
  152.  
  153. precache_model("models/CZKnife/v_silver.mdl") // Silve Knife
  154. precache_model("models/CZKnife/p_silver.mdl")
  155.  
  156. precache_model("models/CZKnife/v_gold.mdl") // Gold Knife
  157. precache_model("models/CZKnife/p_gold.mdl")
  158.  
  159. precache_model("models/CZKnife/v_proff.mdl") // Pro Knife
  160. precache_model("models/CZKnife/p_proff.mdl")
  161.  
  162. precache_model("models/CZKnife/v_katana.mdl") // Katana
  163. precache_model("models/CZKnife/p_katana.mdl")
  164.  
  165. precache_model("models/CZKnife/v_khanjar.mdl") // Khanjar
  166. precache_model("models/CZKnife/p_khanjar.mdl")
  167.  
  168. precache_model("models/CZKnife/v_vip2.mdl") // CzoneGaming VIP Knife
  169. precache_model("models/CZKnife/p_vip2.mdl")
  170. }
  171. ////////////////P L U G I N S T A R T////////////////////////////////////////
  172. public plugin_init ( )
  173. {
  174. register_plugin( PLUGIN, VERSION, AUTHOR )
  175.  
  176. ////////C O M M A N D S//////////////////////////////////////////////
  177. new gCommand [ 24 ], gFunction [ ] = "CmdShopMenu"
  178. for ( new i = 0; i < sizeof ( gMenuCommands ); i++ )
  179. {
  180. formatex ( gCommand, charsmax ( gCommand ), "%s", gMenuCommands [ i ] )
  181. register_clcmd ( gCommand, gFunction )
  182. }
  183.  
  184. register_concmd( "give_points", "cmdSetPoints", ADMIN_IMMUNITY, "<nick, #userid, authid> <Points>" )
  185. register_concmd( "remove_points", "cmdRemovePoints", ADMIN_IMMUNITY, "<nick, #userid, authid> <Points>" )
  186.  
  187. ////////E V E N T S//////////////////////////////////////////////////
  188. register_event ( "DeathMsg", "CmdDeathMsg", "a" )
  189. register_logevent ( "CmdRoundBegin", 2, "1=Round_Start" )
  190. register_logevent ( "EventRoundEnd", 2, "1=Round_End" )
  191. register_event ( "ResetHUD", "CmdSetModels", "b" )
  192. register_event ( "CurWeapon", "CurWeapon", "be", "1=1" )
  193. RegisterHam ( Ham_Killed, "player", "CmdPlayerKilled" )
  194. RegisterHam ( Ham_Spawn, "player", "CmdPlayerSpawn", true )
  195. RegisterHam ( Ham_TakeDamage, "player", "CmdPlayerTakeDamage" )
  196.  
  197. ////////M A X P L A Y E R S//////////////////////////////////////////
  198. gMaxPlayers = get_maxplayers ( )
  199. gFirstClient = 1
  200.  
  201. ////////C V A R S////////////////////////////////////////////////////
  202. gCvars [ Kill ] = register_cvar ( "hnspm_point_kill", "2" )
  203. gCvars [ Survive ] = register_cvar ( "hnspm_point_survive", "3" )
  204. gCvars [ Headshot ] = register_cvar ( "hnspm_bonus_headshot", "1" )
  205. gCvars [ Suicide ] = register_cvar ( "hnspm_points_suicide", "2" )
  206. gCvars [ PriceVip ] = register_cvar ( "hnspm_price_vip", "1400" )
  207. gCvars [ BonusT ] = register_cvar ( "hnspm_bonus_t", "5" )
  208. gCvars [ BonusCT ] = register_cvar ( "hnspm_bonus_ct", "3" )
  209. gCvars [ BonusTNeeded ] = register_cvar ( "hnspm_needed_t", "3" )
  210. gCvars [ BonusCTNeeded ] = register_cvar ( "hnspm_needed_ct", "3" )
  211. gCvars [ PointStart ] = register_cvar ( "hnspm_point_start", "20" )
  212.  
  213. ////////N V A U L T//////////////////////////////////////////////////
  214. gVault = nvault_open ( gVaultName )
  215. gTopVault = nvault_open ( "CZPointModTopv2" )
  216.  
  217. ////////V I P////////////////////////////////////////////////////////
  218. register_srvcmd ( "vip_add", "CmdAddVip" )
  219.  
  220. CreateTopTen ( )
  221.  
  222. }
  223. public plugin_natives ( )
  224. {
  225. register_native ( "pm_get_user_maxhealth", "_get_user_maxhealth" )
  226. }
  227.  
  228. public _get_user_maxhealth ( id )
  229. {
  230. new id = get_param ( 1 )
  231. new iHealth;
  232.  
  233. if ( IsPlayer ( id ) )
  234. {
  235. iHealth = ( 100 + ( ItemInfo [ Health ] [ MaxValue ] / ItemInfo [ Health ] [ Levels ] * gItemLevel [ id ] [ Health ] ) )
  236. }
  237.  
  238. return iHealth;
  239. }
  240.  
  241. public cmdSetPoints( id )
  242. {
  243. if( !(get_user_flags(id) & ADMIN_IMMUNITY) )
  244. {
  245. return PLUGIN_HANDLED
  246. }
  247.  
  248. new argument[ 32 ]
  249. read_argv( 1, argument, charsmax( argument ) )
  250.  
  251. new give_points[ 10 ]
  252. read_argv( 2, give_points, charsmax( give_points ) )
  253.  
  254. new gift = str_to_num( give_points )
  255.  
  256. new iPlayer[ 32 ], iNum, all
  257. get_players( iPlayer, iNum, "c" )
  258.  
  259. if( equal( argument, "@all" ) )
  260. {
  261. for( new i; i < iNum; i++ )
  262. {
  263. all = iPlayer[ i ]
  264.  
  265. gPoint [ all ] = gPoint [ all ] + gift
  266. cs_set_user_money(all, (gPoint [ all ]));
  267. }
  268. }
  269. else
  270. {
  271. new player = cmd_target( id, argument, 10 )
  272.  
  273. if( !player )
  274. {
  275. return PLUGIN_HANDLED
  276. }
  277. new TargetName[ 32 ]
  278. get_user_name( player, TargetName, charsmax( TargetName ) )
  279. get_user_name( id, gName, charsmax( gName ) )
  280.  
  281. gPoint [ player ] = gPoint [ player ] + gift
  282. cs_set_user_money(player, (gPoint [ player ]));
  283. }
  284. return PLUGIN_HANDLED
  285. }
  286.  
  287. public cmdRemovePoints( id )
  288. {
  289. if( !(get_user_flags(id) & ADMIN_IMMUNITY) )
  290. {
  291. return PLUGIN_HANDLED
  292. }
  293.  
  294. new argument[ 32 ]
  295. read_argv( 1, argument, charsmax( argument ) )
  296.  
  297. new give_points[ 10 ]
  298. read_argv( 2, give_points, charsmax( give_points ) )
  299.  
  300. new gift = str_to_num( give_points )
  301.  
  302. new iPlayer[ 32 ], iNum, all
  303. get_players( iPlayer, iNum, "c" )
  304.  
  305. if( equal( argument, "@all" ) )
  306. {
  307. for( new i; i < iNum; i++ )
  308. {
  309. all = iPlayer[ i ]
  310.  
  311. gPoint [ all ] = gPoint [ all ] - gift
  312. cs_set_user_money(all, (gPoint [ all ]));
  313. }
  314. }
  315. else
  316. {
  317. new player = cmd_target( id, argument, 31 )
  318.  
  319. if( !player )
  320. {
  321. return PLUGIN_HANDLED
  322. }
  323. new TargetName[ 32 ]
  324. get_user_name( player, TargetName, charsmax( TargetName ) )
  325. get_user_name( id, gName, charsmax( gName ) )
  326.  
  327. gPoint [ player ] = gPoint [ player ] - gift
  328. cs_set_user_money(player, (gPoint [ player ]));
  329.  
  330. ColorChat( 0, GREY, "^%s ^4%s^3 took^4 [%d Points]^3 from^4 %s^3", gPrefix, gName, gift, TargetName)
  331. }
  332. return PLUGIN_HANDLED
  333. }
  334.  
  335. public CmdPlayerSpawn ( id )
  336. {
  337. if ( is_user_alive ( id ) )
  338. {
  339. set_task ( 10.0, "CmdSetItems", id )
  340. set_task ( 0.1, "CmdSetModels", id )
  341. cs_set_user_money(id, (gPoint [ id ]));
  342. }
  343. }
  344.  
  345. public CmdPlayerKilled ( id )
  346. {
  347. new randomnum = random_num ( 1, 100 )
  348. new iRespChance = ( ItemInfo [ Respawn ] [ MaxValue ] / ItemInfo [ Respawn ] [ Levels ] * gItemLevel [ id ] [ Respawn ] )
  349. if ( IsPlayer ( id ) )
  350. {
  351. if ( gIsRespawned [ id ] == false )
  352. {
  353. if ( randomnum <= iRespChance )
  354. {
  355. gIsRespawned [ id ] = true
  356. set_task ( 1.0, "CmdRespawnPlayer", id )
  357. new gName [ 32 ]
  358. get_user_name ( id, gName, charsmax ( gName ) )
  359. new Players [ 32 ], num, tempid
  360. get_players ( Players, num )
  361.  
  362. for ( new i = 0; i < num; i++ )
  363. {
  364. tempid = Players [ i ]
  365. if ( tempid != id )
  366. ColorChat ( tempid, GREY, "%s^4 %s^3 respawned! (^4%i%%^3)", gPrefix, gName, iRespChance )
  367. else
  368. ColorChat ( id, GREY, "%s You got respawned! (^4%i%%^3)", gPrefix, iRespChance )
  369. }
  370. }
  371. }
  372. }
  373. }
  374.  
  375. public CmdPlayerTakeDamage ( id, inflictor, attacker, Float:damage, bits )
  376. {
  377. if ( IsPlayer ( attacker ) )
  378. {
  379. if ( damage > 0 )
  380. {
  381. new iDamage = ItemInfo [ Damage ] [ MaxValue ] / ItemInfo [ Damage ] [ Levels ] * gItemLevel [ attacker ] [ Damage ]
  382. SetHamParamFloat ( 4, damage * ( 1.0 + ( float ( iDamage ) / 100.0 ) ) )
  383. }
  384. }
  385. return HAM_IGNORED
  386. }
  387.  
  388. public CmdSetItems ( id )
  389. {
  390. if ( !IsPlayer ( id ) )
  391. return PLUGIN_CONTINUE
  392.  
  393. new iValue = ItemInfo [ Health ] [ MaxValue ] / ItemInfo [ Health ] [ Levels ] * gItemLevel [ id ] [ Health ]
  394. if ( iValue > 0 )
  395. if ( !gGotHealth [ id ] )
  396. {
  397. set_user_health ( id, get_user_health ( id ) + iValue )
  398. gGotHealth [ id ] = true
  399. }
  400.  
  401. return PLUGIN_HANDLED
  402. }
  403.  
  404. public CmdSetModels ( id )
  405. {
  406. if ( gIsVip [ id ] && cs_get_user_team ( id ) != CS_TEAM_SPECTATOR && cs_get_user_team ( id ) != CS_TEAM_UNASSIGNED )
  407. {
  408. if ( cs_get_user_team ( id ) == CS_TEAM_CT )
  409. cs_set_user_model ( id, "ctvip" )
  410. else
  411. cs_set_user_model ( id, "tvip" )
  412. }
  413. }
  414.  
  415. public SetKnife ( id, Knife )
  416. {
  417. gKnife [ id ] = Knife
  418.  
  419. new Clip, Ammo, Weapon = get_user_weapon ( id, Clip, Ammo )
  420. if ( Weapon != CSW_KNIFE )
  421. return PLUGIN_HANDLED
  422.  
  423. new vModel [ 56 ], pModel [ 56 ]
  424.  
  425. switch ( Knife )
  426. {
  427. case 1:
  428. {
  429. format ( vModel, charsmax ( pModel ), "models/v_knife.mdl" )
  430. format ( pModel, charsmax ( pModel ), "models/p_knife.mdl" )
  431. }
  432. case 2:
  433. {
  434. format ( vModel, charsmax ( pModel ), "models/CZKnife/v_silver.mdl" )
  435. format ( pModel, charsmax ( pModel ), "models/CZKnife/p_silver.mdl" )
  436. }
  437. case 3:
  438. {
  439. format ( vModel, charsmax ( pModel ), "models/CZKnife/v_gold.mdl")
  440. format ( pModel, charsmax ( pModel ), "models/CZKnife/p_gold.mdl" )
  441. }
  442. case 4:
  443. {
  444. format ( vModel, charsmax ( pModel ), "models/CZKnife/v_proff.mdl" )
  445. format ( pModel, charsmax ( pModel ), "models/CZKnife/p_proff.mdl" )
  446. }
  447. case 5:
  448. {
  449. format ( vModel, charsmax ( pModel ), "models/CZKnife/v_katana.mdl" )
  450. format ( pModel, charsmax ( pModel ), "models/CZKnife/p_katana.mdl" )
  451. }
  452. case 6:
  453. {
  454. format ( vModel, charsmax ( pModel ), "models/CZKnife/v_khanjar.mdl" )
  455. format ( pModel, charsmax ( pModel ), "models/CZKnife/p_khanjar.mdl" )
  456. }
  457. case 7:
  458. {
  459. format ( vModel, charsmax ( vModel ), "models/CZKnife/v_vip2.mdl" )
  460. format ( pModel, charsmax ( pModel ), "models/CZKnife/p_vip2.mdl" )
  461. }
  462. }
  463.  
  464. entity_set_string ( id, EV_SZ_viewmodel, vModel )
  465. entity_set_string ( id, EV_SZ_weaponmodel, pModel )
  466.  
  467. return PLUGIN_HANDLED
  468. }
  469.  
  470. public client_connect ( id )
  471. {
  472. if ( IsPlayer ( id ) )
  473. {
  474. LoadData ( id )
  475. LoadVIPs ( )
  476. }
  477. }
  478.  
  479. public client_disconnect ( id )
  480. {
  481. if ( gIsVip [ id ] )
  482. gIsVip [ id ] = false
  483. if ( IsPlayer ( id ) )
  484. SaveData ( id )
  485. }
  486.  
  487. public client_authorized ( id )
  488. {
  489. new gSteamID[ 35 ], gName [ 32 ]
  490. get_user_authid ( id, gSteamID, charsmax ( gSteamID ) )
  491. get_user_name ( id, gName, charsmax ( gName ) )
  492.  
  493. if ( TrieKeyExists ( gVIPSteamIDs, gSteamID ) )
  494. {
  495. gIsVip [ id ] = true;
  496. ColorChat ( 0, GREY, "%s^4 %s^3 joined as^4 VIP^3 !", gPrefix, gName )
  497. }
  498. LoadData ( id )
  499. }
  500.  
  501. public CmdRoundBegin ( id )
  502. {
  503. new Players [ 32 ], num, tempid
  504. get_players ( Players, num, "a" )
  505. for ( new i; i < num; i++ )
  506. {
  507. tempid = Players [ i ]
  508.  
  509. gKillCount [ tempid ] = 0
  510. gIsRespawned [ id ] = false
  511. gGotHealth [ id ] = false
  512. }
  513. }
  514.  
  515. public EventRoundEnd ( )
  516. {
  517. new gGain [ 3 ]
  518.  
  519. for ( new tempid = gFirstClient; tempid <= gMaxPlayers; tempid++ )
  520. {
  521.  
  522. if ( is_user_alive ( tempid ) )
  523. {
  524. gSurviveCount [ tempid ]++
  525. if ( gSurviveCount [ tempid ] >= get_pcvar_num ( gCvars [ BonusTNeeded ] ) && cs_get_user_team ( tempid ) == CS_TEAM_T )
  526. {
  527. gGain [ 0 ] = get_pcvar_num ( gCvars [ BonusT ] )
  528. if ( gIsVip [ tempid ] )
  529. gGain [ 0 ] += get_pcvar_num ( gCvars [ BonusT ] )
  530. ColorChat ( tempid, GREY, "%s You got^4 %i^3 Bonus Points for surviving^4 %i^3 rounds in a row%s!", gPrefix, gGain [ 0 ], get_pcvar_num ( gCvars [ BonusTNeeded ] ), gIsVip [ tempid ] ? " as^4 VIP^3" : "" )
  531. GivePoint ( tempid, gGain [ 0 ] )
  532. gSurviveCount [ tempid ] = 0
  533. SaveData ( tempid )
  534. }
  535. if ( gKillCount [ tempid ] >= get_pcvar_num ( gCvars [ BonusCTNeeded ] ) && cs_get_user_team ( tempid ) == CS_TEAM_CT )
  536. {
  537. gGain [ 1 ] = get_pcvar_num ( gCvars [ BonusCT ] )
  538. if ( gIsVip [ tempid ] )
  539. gGain [ 1 ] += get_pcvar_num ( gCvars [ BonusCT ] )
  540. ColorChat ( tempid, GREY, "%s You got^4 %i^3 Bonus Points for killing^4 %i^3 enemies in one round%s!", gPrefix, gGain [ 1 ], get_pcvar_num ( gCvars [ BonusCTNeeded ] ), gIsVip [ tempid ] ? " as^4 VIP^3" : "" )
  541. GivePoint ( tempid, gGain [ 1 ] )
  542. gKillCount [ tempid ] = 0
  543. SaveData ( tempid )
  544. }
  545.  
  546. if ( cs_get_user_team ( tempid ) == CS_TEAM_T )
  547. {
  548. gGain [ 2 ] = get_pcvar_num ( gCvars [ Survive ] )
  549. if ( gIsVip [ tempid ] )
  550. gGain [ 2 ] += get_pcvar_num ( gCvars [ Survive ] )
  551. GivePoint ( tempid, gGain [ 2 ] )
  552. ColorChat ( tempid, GREY, "%s You got^4 %i^3 Points for surviving the round %s!", gPrefix, gGain [ 2 ], gIsVip [ tempid ] ? "as^4 VIP^3 " : "" )
  553. SaveData ( tempid )
  554. }
  555. }
  556. else if ( !is_user_alive ( tempid ) )
  557. {
  558. gSurviveCount [ tempid ] = 0
  559. }
  560. }
  561. }
  562.  
  563. public CmdRules ( id )
  564. {
  565. client_cmd(id, "say /rules")
  566. }
  567.  
  568. public CreateTopTen()
  569. {
  570. new Array:aNames, Array:aAuths, Array:aXPs;
  571. new iTotal = SortTopPlayers(aNames, aAuths, aXPs);
  572.  
  573. new szName[156], szAuth[156];
  574. for( new i = 0; i < TOPRANKS; i++ )
  575. {
  576. if( i < iTotal )
  577. {
  578. ArrayGetString(aNames, i, szName, charsmax(szName));
  579. ArrayGetString(aAuths, i, szAuth, charsmax(szAuth));
  580. replace_all(szName, charsmax(szName), "&", "&amp;");
  581. replace_all(szName, charsmax(szName), "<", "&lt;");
  582. replace_all(szName, charsmax(szName), ">", "&gt;");
  583. formatex(gTopNames[i + 1], charsmax(gTopNames[]), "%s", szName);
  584. formatex(gTopAuth[i + 1], charsmax(gTopAuth[]), "%s", szAuth);
  585.  
  586. gTopPoints[i + 1] = ArrayGetCell(aXPs, i);
  587. }
  588. }
  589.  
  590. ArrayDestroy(aNames);
  591. ArrayDestroy(aAuths);
  592. ArrayDestroy(aXPs);
  593.  
  594. return PLUGIN_HANDLED;
  595. }
  596.  
  597. public CmdMOTD(id)
  598. {
  599. for ( new i = 0; i < TOPRANKS; i++ )
  600. {
  601.  
  602. new gVip [ TOPRANKS + 1 ]
  603. if ( TrieKeyExists ( gVIPSteamIDs, gTopAuth [ i ] ) )
  604. {
  605. gVip [ i ] = true
  606.  
  607. }
  608. }
  609. new szMOTD[2368], iLen;
  610.  
  611. iLen = formatex(szMOTD[iLen], charsmax(szMOTD)-iLen,"<STYLE>body{background:#212121;color:#d1d1d1;font-family:Arial}table{width:100%%;font-size:11px}</STYLE><table cellpadding=1 cellspacing=1 border=0>");
  612. iLen += formatex(szMOTD[iLen], charsmax(szMOTD)-iLen, "<tr bgcolor=#333333><th width=5%%><align=left font color=white> Rank <th width=10%%> Nick <th width=10%%> VIP <th width=10%%> Total Points");
  613.  
  614. for( new i = 0; i < TOPRANKS; i++ )
  615. {
  616. if( i == 0 || i == 2 || i == 4 || i == 6 || i == 8 )
  617. {
  618. iLen += formatex(szMOTD[iLen], charsmax(szMOTD)-iLen, "<tr align=left%s><td align=left><font color=white> %i. <td> %s <td> %s <td> %i", " bgcolor=#2b5b95", (i + 1), gTopNames[i + 1], gVip [i + 1] ? "Yes" : "No", gTopPoints[i + 1])
  619. }
  620. else
  621. {
  622. iLen += formatex(szMOTD[iLen], charsmax(szMOTD)-iLen, "<tr align=left%s><td align=left><font color=white> %i. <td> %s <td> %s <td> %i", " bgcolor=#333333", (i + 1), gTopNames[i + 1], gVip [i + 1] ? "Yes" : "No", gTopPoints[i + 1])
  623. }
  624. }
  625.  
  626. iLen += formatex(szMOTD[iLen], charsmax(szMOTD)-iLen, "</table></body>");
  627.  
  628. show_motd(id, szMOTD, "Top Ten");
  629.  
  630. return PLUGIN_HANDLED;
  631. }
  632.  
  633. public CmdShopMenu ( id )
  634. {
  635. new gTitle [ 128 ]
  636. formatex ( gTitle, charsmax ( gTitle ), "\y[CzoneGaming.se] /pm^n\rHideNSeek Shop^n\yPoints: %i", gPoint [ id ] )
  637. new gMenu = menu_create ( gTitle, "CmdShopHandle", 0 )
  638.  
  639. menu_additem ( gMenu, "\wToplist", "1" )
  640. menu_additem ( gMenu, "\wPlayer Info^n", "2" )
  641. menu_additem ( gMenu, "\wUpgrade Menu", "3" )
  642. menu_additem ( gMenu, "\wKnife Menu^n", "4" )
  643. new gVips [ 60 ]
  644. if ( gIsVip [ id ] )
  645. {
  646. menu_additem ( gMenu, "\wServer Rules^n^n\dYou are\y VIP\d!^n + VIP Skins^n + Bonus Points", "5" )
  647. }
  648. else
  649. {
  650. menu_additem ( gMenu, "\wServer Rules^n", "5" )
  651. }
  652. if ( !gIsVip [ id ] )
  653. {
  654. if ( gPoint [ id ] < get_pcvar_num ( gCvars [ PriceVip ] ) )
  655. formatex ( gVips, charsmax ( gVips ), "\dBuy VIP:\y %i Points", get_pcvar_num ( gCvars [ PriceVip ] ) )
  656. else
  657. formatex ( gVips, charsmax ( gVips ), "\wBuy VIP:\y %i Points", get_pcvar_num ( gCvars [ PriceVip ] ) )
  658. menu_additem ( gMenu, gVips, "6" )
  659. }
  660.  
  661. menu_setprop ( gMenu, MPROP_EXITNAME, "Close" )
  662. menu_display ( id, gMenu )
  663.  
  664. return PLUGIN_HANDLED
  665. }
  666.  
  667. public CmdShopHandle ( id, gMenu, gItem )
  668. {
  669. if ( gItem == MENU_EXIT )
  670. {
  671. menu_destroy ( gMenu )
  672. return PLUGIN_HANDLED
  673. }
  674.  
  675. new gAccess, gCallback, gData [ 3 ]
  676. menu_item_getinfo ( gMenu, gItem, gAccess, gData, charsmax ( gData ), _, _, gCallback )
  677.  
  678. new gKey = str_to_num ( gData )
  679. switch ( gKey )
  680. {
  681. case 1: CmdMOTD ( id )
  682. case 2: CmdPlayerMenu ( id )
  683. case 3: CmdUpgradeMenu ( id )
  684. case 4: CmdKnifeMenu ( id )
  685. case 5: CmdRules ( id )
  686. case 6:
  687. {
  688. if ( gIsVip [ id ] )
  689. {
  690. ColorChat ( id, GREY, "%s Du är redan^4 VIP^3 !", gPrefix )
  691. CmdShopMenu ( id )
  692. return PLUGIN_HANDLED
  693. }
  694. else if ( gPoint [ id ] < get_pcvar_num ( gCvars [ PriceVip ] ) )
  695. {
  696. ColorChat ( id, GREY, "%s You need^4 %i^3 more Points to buy^4 VIP^3 !", gPrefix, get_pcvar_num ( gCvars [ PriceVip ] ) - gPoint [ id ] )
  697. CmdShopMenu ( id )
  698. return PLUGIN_HANDLED
  699. }
  700. else
  701. {
  702. new gName [ 32 ], gAuthID [ 35 ]
  703. get_user_authid ( id, gAuthID, charsmax ( gAuthID ) )
  704. get_user_name ( id, gName, charsmax ( gName ) )
  705.  
  706. gPoint [ id ] -= get_pcvar_num ( gCvars [ PriceVip ] )
  707. ColorChat ( 0, GREY, "%s^4 %s^3 have bought^4 VIP^3 for^4 %i^3 Points !", gPrefix, gName, get_pcvar_num ( gCvars [ PriceVip ] ) )
  708.  
  709. server_cmd ( "vip_add ^"%s^" ^"t^" ^"^" ^"steamid^"", gAuthID )
  710. gIsVip [ id ] = true
  711.  
  712. log_amx ( "VIP: %s [%s] bought VIP", gName, gAuthID )
  713. }
  714. }
  715. }
  716. return PLUGIN_HANDLED
  717. }
  718.  
  719. public CmdKnifeMenu ( id )
  720. {
  721. new gTitle [ 128 ]
  722. formatex ( gTitle, sizeof ( gTitle ), "\y[CzoneGaming.se] /pm^n\rHideNSeek Shop\d (Knives)^n\yPoints: %i", gPoint [ id ] )
  723. new iMenu = menu_create ( gTitle, "CmdKnifeHandle", 0 )
  724.  
  725. static szItem [ 128 ], iPrice, gKey [ 3 ]
  726. for ( new gItem = 0; gItem < KNIFES; gItem++ )
  727. {
  728. num_to_str ( gItem, gKey, charsmax ( gKey ) )
  729. iPrice = KnifeInfo [ gItem ] [ Price ]
  730.  
  731. if ( gKnifeOwned [ id ] [ gItem ] >= 1 && gKnife [ id ] != KnifeInfo [ gItem ] [ CaseNumb ] )
  732. {
  733. formatex ( szItem, charsmax ( szItem ) - 1, "\r%s:\w Bought\r (\w+%i Points\r)", KnifeInfo [ gItem ] [ Name ], KnifeInfo [ gItem ] [ PointBonus ] )
  734. }
  735. else if ( gKnife [ id ] == KnifeInfo [ gItem ] [ CaseNumb ] )
  736. {
  737. formatex ( szItem, charsmax ( szItem ) - 1, "\r%s:\w Using\r (\w+%i Points\r)", KnifeInfo [ gItem ] [ Name ], KnifeInfo [ gItem ] [ PointBonus ] )
  738. }
  739. else if ( gPoint [ id ] < iPrice )
  740. {
  741. formatex ( szItem, charsmax ( szItem ) - 1, "\d%s:\r (\w+%i Points\r)\y %i Points", KnifeInfo [ gItem ] [ Name ], KnifeInfo [ gItem ] [ PointBonus ], iPrice )
  742. }
  743. else
  744. {
  745. formatex ( szItem, charsmax ( szItem ) - 1, "\w%s:\r (\w+%i Points\r)\y %i Points", KnifeInfo [ gItem ] [ Name ], KnifeInfo [ gItem ] [ PointBonus ], iPrice )
  746. }
  747. menu_additem ( iMenu, szItem, gKey )
  748. }
  749. menu_setprop ( iMenu, MPROP_EXITNAME, "Back" )
  750. menu_display ( id, iMenu )
  751. return PLUGIN_CONTINUE
  752. }
  753.  
  754.  
  755. public CmdKnifeHandle ( id, iMenu, iItem )
  756. {
  757. if ( iItem == MENU_EXIT )
  758. {
  759. menu_destroy ( iMenu )
  760. CmdShopMenu ( id )
  761. return PLUGIN_HANDLED
  762. }
  763.  
  764. new gAccess, callback, gData [ 3 ]
  765. menu_item_getinfo ( iMenu, iItem, gAccess, gData, charsmax ( gData ), _, _, callback )
  766.  
  767. new gItem = str_to_num ( gData )
  768.  
  769. new gName [ 32 ]
  770. get_user_name ( id, gName, charsmax ( gName ) )
  771.  
  772. new msg [ 256 ]
  773. new iPrice = KnifeInfo [ gItem ] [ Price ]
  774.  
  775. if ( gKnifeOwned [ id ] [ gItem ] >= 1 && gKnife [ id ] != KnifeInfo [ gItem ] [ CaseNumb ] )
  776. formatex ( msg, charsmax ( msg ), "%s You changed the knife to^4 %s^3!", gPrefix, KnifeInfo [ gItem ] [ Name ] )
  777. else if ( gKnife [ id ] == KnifeInfo [ gItem ] [ CaseNumb ] )
  778. formatex ( msg, charsmax ( msg ), "%s You are already using^4 %s^3!", gPrefix, KnifeInfo [ gItem ] [ Name ] )
  779. else if ( gPoint [ id ] < iPrice )
  780. formatex ( msg, charsmax ( msg ), "%s You need^4 %i^3 more Points to buy^4 %s^3!", gPrefix, iPrice - gPoint [ id ], KnifeInfo [ gItem ] [ Name ] )
  781. else
  782. formatex ( msg, charsmax ( msg ), "%s^4 %s^3 bought^4 %s^3!", gPrefix, gName, KnifeInfo [ gItem ] [ Name ] )
  783.  
  784. switch ( gItem )
  785. {
  786. case Default:
  787. {
  788. if ( gKnifeOwned [ id ] [ gItem ] >= 1 && gKnife [ id ] != KnifeInfo [ gItem ] [ CaseNumb ] )
  789. {
  790. ColorChat ( id, GREY, msg )
  791. SetKnife ( id, KnifeInfo [ gItem ] [ CaseNumb ] )
  792. SaveData ( id )
  793. CmdKnifeMenu ( id )
  794. return PLUGIN_HANDLED
  795. }
  796. else if ( gKnife [ id ] == KnifeInfo [ gItem ] [ CaseNumb ] )
  797. {
  798. ColorChat ( id, GREY, msg )
  799. CmdKnifeMenu ( id )
  800. return PLUGIN_HANDLED
  801. }
  802. else if ( gPoint [ id ] < iPrice )
  803. {
  804. ColorChat ( id, GREY, msg )
  805. CmdKnifeMenu ( id )
  806. return PLUGIN_HANDLED
  807. }
  808. else
  809. {
  810. ColorChat ( 0, GREY, msg )
  811. SetKnife ( id, KnifeInfo [ gItem ] [ CaseNumb ] )
  812. CmdKnifeMenu ( id )
  813. gKnifeOwned [ id ] [ gItem ]++
  814. RemovePoint ( id, iPrice )
  815. }
  816.  
  817. }
  818. case Silver:
  819. {
  820. if ( gKnifeOwned [ id ] [ gItem ] >= 1 && gKnife [ id ] != KnifeInfo [ gItem ] [ CaseNumb ] )
  821. {
  822. ColorChat ( id, GREY, msg )
  823. SetKnife ( id, KnifeInfo [ gItem ] [ CaseNumb ] )
  824. SaveData ( id )
  825. CmdKnifeMenu ( id )
  826. return PLUGIN_HANDLED
  827. }
  828. else if ( gKnife [ id ] == KnifeInfo [ gItem ] [ CaseNumb ] )
  829. {
  830. ColorChat ( id, GREY, msg )
  831. CmdKnifeMenu ( id )
  832. return PLUGIN_HANDLED
  833. }
  834. else if ( gPoint [ id ] < iPrice )
  835. {
  836. ColorChat ( id, GREY, msg )
  837. CmdKnifeMenu ( id )
  838. return PLUGIN_HANDLED
  839. }
  840. else
  841. {
  842. ColorChat ( 0, GREY, msg )
  843. SetKnife ( id, KnifeInfo [ gItem ] [ CaseNumb ] )
  844. CmdKnifeMenu ( id )
  845. gKnifeOwned [ id ] [ gItem ]++
  846. RemovePoint ( id, iPrice )
  847. }
  848.  
  849. }
  850. case Gold:
  851. {
  852. if ( gKnifeOwned [ id ] [ gItem ] >= 1 && gKnife [ id ] != KnifeInfo [ gItem ] [ CaseNumb ] )
  853. {
  854. ColorChat ( id, GREY, msg )
  855. SetKnife ( id, KnifeInfo [ gItem ] [ CaseNumb ] )
  856. SaveData ( id )
  857. CmdKnifeMenu ( id )
  858. return PLUGIN_HANDLED
  859. }
  860. else if ( gKnife [ id ] == KnifeInfo [ gItem ] [ CaseNumb ] )
  861. {
  862. ColorChat ( id, GREY, msg )
  863. CmdKnifeMenu ( id )
  864. return PLUGIN_HANDLED
  865. }
  866. else if ( gPoint [ id ] < iPrice )
  867. {
  868. ColorChat ( id, GREY, msg )
  869. CmdKnifeMenu ( id )
  870. return PLUGIN_HANDLED
  871. }
  872. else
  873. {
  874. ColorChat ( 0, GREY, msg )
  875. SetKnife ( id, KnifeInfo [ gItem ] [ CaseNumb ] )
  876. CmdKnifeMenu ( id )
  877. gKnifeOwned [ id ] [ gItem ]++
  878. RemovePoint ( id, iPrice )
  879. }
  880.  
  881. }
  882. case ProKnife:
  883. {
  884. if ( gKnifeOwned [ id ] [ gItem ] >= 1 && gKnife [ id ] != KnifeInfo [ gItem ] [ CaseNumb ] )
  885. {
  886. ColorChat ( id, GREY, msg )
  887. SetKnife ( id, KnifeInfo [ gItem ] [ CaseNumb ] )
  888. SaveData ( id )
  889. CmdKnifeMenu ( id )
  890. return PLUGIN_HANDLED
  891. }
  892. else if ( gKnife [ id ] == KnifeInfo [ gItem ] [ CaseNumb ] )
  893. {
  894. ColorChat ( id, GREY, msg )
  895. CmdKnifeMenu ( id )
  896. return PLUGIN_HANDLED
  897. }
  898. else if ( gPoint [ id ] < iPrice )
  899. {
  900. ColorChat ( id, GREY, msg )
  901. CmdKnifeMenu ( id )
  902. return PLUGIN_HANDLED
  903. }
  904. else
  905. {
  906. ColorChat ( 0, GREY, msg )
  907. SetKnife ( id, KnifeInfo [ gItem ] [ CaseNumb ] )
  908. CmdKnifeMenu ( id )
  909. gKnifeOwned [ id ] [ gItem ]++
  910. RemovePoint ( id, iPrice )
  911. }
  912.  
  913. }
  914. case Katana:
  915. {
  916. if ( gKnifeOwned [ id ] [ gItem ] >= 1 && gKnife [ id ] != KnifeInfo [ gItem ] [ CaseNumb ] )
  917. {
  918. ColorChat ( id, GREY, msg )
  919. SetKnife ( id, KnifeInfo [ gItem ] [ CaseNumb ] )
  920. SaveData ( id )
  921. CmdKnifeMenu ( id )
  922. return PLUGIN_HANDLED
  923. }
  924. else if ( gKnife [ id ] == KnifeInfo [ gItem ] [ CaseNumb ] )
  925. {
  926. ColorChat ( id, GREY, msg )
  927. CmdKnifeMenu ( id )
  928. return PLUGIN_HANDLED
  929. }
  930. else if ( gPoint [ id ] < iPrice )
  931. {
  932. ColorChat ( id, GREY, msg )
  933. CmdKnifeMenu ( id )
  934. return PLUGIN_HANDLED
  935. }
  936. else
  937. {
  938. ColorChat ( 0, GREY, msg )
  939. SetKnife ( id, KnifeInfo [ gItem ] [ CaseNumb ] )
  940. CmdKnifeMenu ( id )
  941. gKnifeOwned [ id ] [ gItem ]++
  942. RemovePoint ( id, iPrice )
  943. }
  944.  
  945. }
  946. case Khanjar:
  947. {
  948. if ( gKnifeOwned [ id ] [ gItem ] >= 1 && gKnife [ id ] != KnifeInfo [ gItem ] [ CaseNumb ] )
  949. {
  950. ColorChat ( id, GREY, msg )
  951. SetKnife ( id, KnifeInfo [ gItem ] [ CaseNumb ] )
  952. SaveData ( id )
  953. CmdKnifeMenu ( id )
  954. return PLUGIN_HANDLED
  955. }
  956. else if ( gKnife [ id ] == KnifeInfo [ gItem ] [ CaseNumb ] )
  957. {
  958. ColorChat ( id, GREY, msg )
  959. CmdKnifeMenu ( id )
  960. return PLUGIN_HANDLED
  961. }
  962. else if ( gPoint [ id ] < iPrice )
  963. {
  964. ColorChat ( id, GREY, msg )
  965. CmdKnifeMenu ( id )
  966. return PLUGIN_HANDLED
  967. }
  968. else
  969. {
  970. ColorChat ( 0, GREY, msg )
  971. SetKnife ( id, KnifeInfo [ gItem ] [ CaseNumb ] )
  972. CmdKnifeMenu ( id )
  973. gKnifeOwned [ id ] [ gItem ]++
  974. RemovePoint ( id, iPrice )
  975. }
  976.  
  977. }
  978. case CzoneVip:
  979. {
  980. if ( gKnifeOwned [ id ] [ gItem ] >= 1 && gKnife [ id ] != KnifeInfo [ gItem ] [ CaseNumb ] )
  981. {
  982. ColorChat ( id, GREY, msg )
  983. SetKnife ( id, KnifeInfo [ gItem ] [ CaseNumb ] )
  984. SaveData ( id )
  985. CmdKnifeMenu ( id )
  986. return PLUGIN_HANDLED
  987. }
  988. else if ( gKnife [ id ] == KnifeInfo [ gItem ] [ CaseNumb ] )
  989. {
  990. ColorChat ( id, GREY, msg )
  991. CmdKnifeMenu ( id )
  992. return PLUGIN_HANDLED
  993. }
  994. else if ( gPoint [ id ] < iPrice )
  995. {
  996. ColorChat ( id, GREY, msg )
  997. CmdKnifeMenu ( id )
  998. return PLUGIN_HANDLED
  999. }
  1000. else
  1001. {
  1002. ColorChat ( 0, GREY, msg )
  1003. SetKnife ( id, KnifeInfo [ gItem ] [ CaseNumb ] )
  1004. CmdKnifeMenu ( id )
  1005. gKnifeOwned [ id ] [ gItem ]++
  1006. RemovePoint ( id, iPrice )
  1007. }
  1008.  
  1009. }
  1010. }
  1011. SaveData ( id )
  1012.  
  1013. return PLUGIN_HANDLED
  1014. }
  1015.  
  1016. public CmdUpgradeMenu ( id )
  1017. {
  1018. new gTitle [ 128 ]
  1019. formatex ( gTitle, sizeof ( gTitle ), "\y[CzoneGaming.se] /pm^n\rHideNSeek Shop\d (Upgrades)^n\yPoints: %i", gPoint [ id ] )
  1020. new iMenu = menu_create ( gTitle, "CmdUpgradeHandle", 0 )
  1021.  
  1022. static szItem [ 128 ], iValue, iPrice, gKey [ 3 ]
  1023. for ( new gItem = 0; gItem < UPGRADES; gItem++ )
  1024. {
  1025. num_to_str ( gItem, gKey, charsmax ( gKey ) )
  1026. iValue = ( ItemInfo [ gItem ] [ MaxValue ] / ItemInfo [ gItem ] [ Levels ] * ( gItemLevel [ id ] [ gItem ] + 1 ) )
  1027. iPrice = ItemPrice [ gItem ] [ gItemLevel [ id ] [ gItem ] ]
  1028.  
  1029. if ( gItemLevel [ id ] [ gItem ] >= ItemInfo [ gItem ] [ Levels ] )
  1030. {
  1031. formatex ( szItem, charsmax ( szItem ), "\d%s: \wMax Level!\r (\w%i%s\r)", ItemInfo [ gItem ] [ Name ], ItemInfo [ gItem ] [ MaxValue ], ItemInfo [ gItem ] [ Prefix ] )
  1032. }
  1033. else if ( gPoint [ id ] < iPrice )
  1034. {
  1035. formatex ( szItem, charsmax ( szItem ), "\d%s:\w Level %i\r (\w%i%s\r) \y%i Points", ItemInfo [ gItem ] [ Name ], gItemLevel [ id ] [ gItem ] + 1, iValue, ItemInfo [ gItem ] [ Prefix ], iPrice )
  1036. }
  1037. else
  1038. {
  1039. formatex ( szItem, charsmax ( szItem ), "\w%s: Level %i\r (\w%i%s\r)\y %i Points", ItemInfo [ gItem ] [ Name ], gItemLevel [ id ] [ gItem ] + 1, iValue, ItemInfo [ gItem ] [ Prefix ], iPrice )
  1040. }
  1041. menu_additem ( iMenu, szItem, gKey )
  1042. }
  1043. menu_setprop ( iMenu, MPROP_EXITNAME, "Back" )
  1044. menu_display ( id, iMenu )
  1045. }
  1046.  
  1047. public CmdUpgradeHandle ( id, iMenu, iItem )
  1048. {
  1049. if ( iItem == MENU_EXIT )
  1050. {
  1051. menu_destroy ( iMenu )
  1052. CmdShopMenu ( id )
  1053. return PLUGIN_HANDLED
  1054. }
  1055.  
  1056. new gAccess, callback, gData [ 3 ]
  1057. menu_item_getinfo ( iMenu, iItem, gAccess, gData, charsmax ( gData ), _, _, callback )
  1058.  
  1059. new gItem = str_to_num ( gData )
  1060.  
  1061. new gName [ 32 ]
  1062. get_user_name ( id, gName, charsmax ( gName ) )
  1063.  
  1064. new iPrice = ItemPrice [ gItem ] [ gItemLevel [ id ] [ gItem ] ]
  1065. if ( gItemLevel [ id ] [ gItem ] >= ItemInfo [ gItem ] [ Levels ] )
  1066. {
  1067. ColorChat ( id, GREY, "%s^4 %s^3 have already been upgraded to Max Level!", gPrefix, ItemInfo [ gItem ] [ Name ] )
  1068. CmdUpgradeMenu ( id )
  1069. return PLUGIN_HANDLED
  1070. }
  1071. else if ( gPoint [ id ] < iPrice )
  1072. {
  1073. ColorChat ( id, GREY, "%s You need^4 %i^3 more Points to upgrade^4 %s^3!", gPrefix, iPrice - gPoint [ id ], ItemInfo [ gItem ] [ Name ] )
  1074. CmdUpgradeMenu ( id )
  1075. return PLUGIN_HANDLED
  1076. }
  1077. else
  1078. {
  1079. ColorChat ( 0, GREY, "%s^4 %s^3 upgraded^4 %s^3 to level^4 %i^3!", gPrefix, gName, ItemInfo [ gItem ] [ Name ], ( gItemLevel [ id ] [ gItem ] + 1 ) )
  1080. gItemLevel [ id ] [ gItem ]++
  1081. RemovePoint ( id, iPrice )
  1082. if ( gPoint [ id ] < 0 )
  1083. {
  1084. gPoint [ id ] += iPrice
  1085. gItemLevel [ id ] [ gItem ]--
  1086. SaveData ( id )
  1087. return PLUGIN_HANDLED
  1088. }
  1089. menu_display( id, iMenu, 0 )
  1090. SaveData ( id )
  1091. }
  1092. return PLUGIN_HANDLED
  1093. }
  1094.  
  1095. public CmdPlayerMenu ( id )
  1096. {
  1097. new iMenu = menu_create ( "\y[CzoneGaming.se] /pm^n\rHideNSeek Shop\d^nPlayers Menu", "CmdPlayerHandle" )
  1098. new Players [ 32 ], num, tempid, gName [ 32 ], gKey [ 3 ]
  1099. get_players ( Players, num )
  1100.  
  1101. for ( new i; i < num; i++ )
  1102. {
  1103. tempid = Players [ i ]
  1104. get_user_name ( tempid, gName, charsmax ( gName ) )
  1105. num_to_str ( tempid, gKey, charsmax ( gKey ) )
  1106. menu_additem ( iMenu, gName, gKey )
  1107. }
  1108.  
  1109. menu_setprop ( iMenu, MPROP_EXITNAME, "Back" )
  1110. menu_display ( id, iMenu, 0 )
  1111. }
  1112.  
  1113. public CmdPlayerHandle ( id, iMenu, Item )
  1114. {
  1115. if ( Item == MENU_EXIT )
  1116. {
  1117. menu_destroy ( iMenu )
  1118. CmdShopMenu ( id )
  1119. return PLUGIN_HANDLED
  1120. }
  1121.  
  1122. new gData [ 6 ], gAccess, callback
  1123. menu_item_getinfo ( iMenu, Item, gAccess, gData, charsmax ( gData ), _, _, callback )
  1124.  
  1125. new i = str_to_num ( gData )
  1126. new gAuth [ 35 ], gName [ 32 ]
  1127. get_user_authid ( i, gAuth, charsmax ( gAuth ) )
  1128. get_user_name ( i, gName, charsmax ( gName ) )
  1129.  
  1130. static gMotd [ 2500 ]
  1131. new len = formatex ( gMotd, charsmax ( gMotd ), "<html>" )
  1132. len += formatex ( gMotd [ len ], charsmax ( gMotd ) - len, "<body style=^"background-color:#030303; color:#FFFFFF^">" )
  1133. len += formatex ( gMotd [ len ], charsmax ( gMotd ) - len, "<p align=^"center^">" )
  1134. len += formatex ( gMotd [ len ], charsmax ( gMotd ) - len, "<h2><b>Player Info</b></h2>" )
  1135. len += formatex ( gMotd [ len ], charsmax ( gMotd ) - len, "<p align=^"left^">" )
  1136. len += formatex ( gMotd [ len ], charsmax ( gMotd ) - len, "Name: %s<br>", gName )
  1137. len += formatex ( gMotd [ len ], charsmax ( gMotd ) - len, "SteamID: %s<br>", gAuth )
  1138. len += formatex ( gMotd [ len ], charsmax ( gMotd ) - len, "Points: %i<br>", gPoint [ i ] )
  1139. len += formatex ( gMotd [ len ], charsmax ( gMotd ) - len, "Total Points: %i<br>", gPointTop [ i ] )
  1140. len += formatex ( gMotd [ len ], charsmax ( gMotd ) - len, "<br><h2><b>Upgrades:</b></h2>" )
  1141. for ( new gItem = 0; gItem < UPGRADES; gItem++ )
  1142. if ( ItemInfo [ gItem ] [ Levels ] != 1 )
  1143. len += formatex ( gMotd [ len ], charsmax ( gMotd ) - len, "%s - Level: %i/%i<br>", ItemInfo [ gItem ] [ Name ], gItemLevel [ i ] [ gItem ], ItemInfo [ gItem ] [ Levels ] )
  1144. len += formatex ( gMotd [ len ], charsmax ( gMotd ) - len, "<br><h2><b>Knives:</b></h2>" )
  1145. for ( new gKnife = 0; gKnife < KNIFES; gKnife++ )
  1146. len += formatex ( gMotd [ len ], charsmax ( gMotd ) - len, "%s: %s<br>", KnifeInfo [ gKnife ] [ Name ], gKnifeOwned [ i ] [ gKnife ] == 1 ? "Yes" : "No" )
  1147. len += formatex ( gMotd [ len ], charsmax ( gMotd ) - len, "</p>" )
  1148. len += formatex ( gMotd [ len ], charsmax ( gMotd ) - len, "</body>" )
  1149. len += formatex ( gMotd [ len ], charsmax ( gMotd ) - len, "</html>" )
  1150.  
  1151. show_motd ( id, gMotd, "" )
  1152. CmdPlayerMenu ( id )
  1153. menu_destroy ( iMenu )
  1154. return PLUGIN_HANDLED
  1155. }
  1156.  
  1157. public CmdDeathMsg ( )
  1158. {
  1159. new gKiller = read_data ( 1 )
  1160. new gVictim = read_data ( 2 )
  1161. new isHeadshot = read_data ( 3 )
  1162.  
  1163. if ( IsPlayer ( gKiller ) && IsPlayer ( gVictim ) )
  1164. {
  1165. if ( gKiller != gVictim )
  1166. {
  1167. if ( cs_get_user_team ( gKiller ) != cs_get_user_team ( gVictim ) )
  1168. {
  1169. new gPointsGain = get_pcvar_num ( gCvars [ Kill ] )
  1170. if ( isHeadshot )
  1171. gPointsGain += get_pcvar_num ( gCvars [ Headshot ] )
  1172. if ( cs_get_user_team ( gKiller ) == CS_TEAM_CT )
  1173. gKillCount [ gKiller ]++
  1174.  
  1175. if ( gKnifeOwned [ gKiller ] [ CzoneVip ] >= 1 )
  1176. gPointsGain += KnifeInfo [ CzoneVip ] [ PointBonus ]
  1177. else if ( gKnifeOwned [ gKiller ] [ Khanjar ] >= 1 || gKnifeOwned [ gKiller ] [ Katana ] >= 1 )
  1178. gPointsGain += KnifeInfo [ Khanjar ] [ PointBonus ]
  1179. else if ( gKnifeOwned [ gKiller ] [ ProKnife ] >= 1 || gKnifeOwned [ gKiller ] [ Gold ] >= 1 || gKnifeOwned [ gKiller ] [ Silver ] >= 1 )
  1180. gPointsGain += KnifeInfo [ ProKnife ] [ PointBonus ]
  1181.  
  1182. GivePoint ( gKiller, gPointsGain )
  1183. ColorChat ( gKiller, GREY, "%s You earned^4 %i^3 Points for killing%s!", gPrefix, gPointsGain, isHeadshot ? " med huvudskott" : "" )
  1184. SaveData ( gKiller )
  1185. }
  1186. }
  1187. else
  1188. {
  1189. RemovePoint ( gVictim, get_pcvar_num ( gCvars [ Suicide ] ) )
  1190. if ( gPoint [ gVictim ] < 0 )
  1191. gPoint [ gVictim ] = 0
  1192. ColorChat ( gVictim, GREY, "%s You lost^4 %i^3 Points for suicide!", gPrefix, get_pcvar_num ( gCvars [ Suicide ] ) )
  1193. SaveData ( gVictim )
  1194. }
  1195. }
  1196. return PLUGIN_HANDLED
  1197. }
  1198.  
  1199. public CmdAddVip( )
  1200. {
  1201. if( read_argc ( ) < 2 )
  1202. {
  1203. server_print( "Invalid arguments! Usage: vip_add <steamid> (Note: USE QUOTES AROUND STEAMID!)" )
  1204. return PLUGIN_HANDLED
  1205. }
  1206.  
  1207. new gSteamID[ 35 ]
  1208. read_argv( 1, gSteamID, charsmax( gSteamID ) )
  1209.  
  1210. if( TrieKeyExists( gVIPSteamIDs, gSteamID ) )
  1211. {
  1212. return PLUGIN_HANDLED
  1213. }
  1214.  
  1215. if( !IsValidSteamID( gSteamID ) )
  1216. {
  1217. log_amx( "Invalid SteamID given to vip_add command." )
  1218. return PLUGIN_HANDLED
  1219. }
  1220.  
  1221. TrieSetCell( gVIPSteamIDs, gSteamID, 1 )
  1222.  
  1223. format( gSteamID, charsmax( gSteamID ), "%s", gSteamID )
  1224.  
  1225. write_file( gVIPFile, gSteamID )
  1226.  
  1227. return PLUGIN_HANDLED
  1228. }
  1229.  
  1230. bool:IsValidSteamID( gSteamID[ ] )
  1231. {
  1232. return ( strlen( gSteamID ) > 10 && equal( gSteamID, "STEAM_0:", 8 ) && ( '0' <= gSteamID[ 8 ] <= '1' ) && gSteamID[ 9 ] == ':' && is_str_num( gSteamID[ 10 ] ) )
  1233. }
  1234.  
  1235. public plugin_end( )
  1236. {
  1237. TrieDestroy( gVIPSteamIDs )
  1238. }
  1239.  
  1240. LoadVIPs( )
  1241. {
  1242. gVIPSteamIDs = TrieCreate( )
  1243.  
  1244. get_configsdir( gVIPFile, charsmax( gVIPFile ) )
  1245. add( gVIPFile, charsmax( gVIPFile ), "/vip.ini" )
  1246.  
  1247. new iFile = fopen( gVIPFile, "rt" )
  1248.  
  1249. if( !iFile )
  1250. {
  1251. return
  1252. }
  1253.  
  1254. new gData [ 64 ], gSteamID [ 35 ], iLine
  1255.  
  1256. while ( !feof ( iFile ) )
  1257. {
  1258. iLine++
  1259.  
  1260. fgets ( iFile, gData, charsmax( gData ) )
  1261. trim ( gData )
  1262.  
  1263. strbreak ( gData, gSteamID, charsmax( gSteamID ), gData, charsmax( gData ) )
  1264.  
  1265. if ( IsValidSteamID ( gSteamID ) )
  1266. {
  1267. TrieSetCell ( gVIPSteamIDs, gSteamID, 1 )
  1268.  
  1269. }
  1270. else
  1271. {
  1272. log_amx( "Invalid SteamID on line %d in vip.ini!", iLine )
  1273. }
  1274. }
  1275.  
  1276. fclose( iFile )
  1277. }
  1278.  
  1279. public SaveData ( id )
  1280. {
  1281. static gData [ 256 ]
  1282. new gAuthID [ 35 ]
  1283. get_user_authid ( id, gAuthID, charsmax ( gAuthID ) )
  1284.  
  1285. new gLen = formatex ( gData, charsmax ( gData ), "%i %i %i", gPoint [ id ], gKnife [ id ], gPointTop [ id ] )
  1286.  
  1287. for ( new iItem = 0; iItem < UPGRADES; iItem++ )
  1288. {
  1289. gLen += formatex ( gData [ gLen ], charsmax ( gData ) - gLen, " %i", gItemLevel [ id ] [ iItem ] )
  1290. }
  1291. for ( new bKnife = 0; bKnife < KNIFES; bKnife++ )
  1292. {
  1293. gLen += formatex ( gData [ gLen ], charsmax ( gData ) - gLen, " %i", gKnifeOwned [ id ] [ bKnife ] )
  1294. }
  1295.  
  1296. nvault_set ( gVault, gAuthID, gData )
  1297.  
  1298. new gName [ 32 ], gNameTemp [ 32 ]
  1299. get_user_name ( id, gName, charsmax ( gName ) )
  1300. formatex ( gNameTemp, charsmax ( gNameTemp ), "%s", gName )
  1301. nvault_set ( gTopVault, gAuthID, gNameTemp )
  1302. }
  1303.  
  1304. public LoadData ( id )
  1305. {
  1306. static gData [ 256 ]
  1307. new gAuthID [ 35 ], timestamp
  1308. get_user_authid ( id, gAuthID, charsmax ( gAuthID ) )
  1309.  
  1310. if ( nvault_lookup ( gVault, gAuthID, gData, charsmax ( gData ), timestamp ) )
  1311. {
  1312. ParseLoadData ( id, gData )
  1313. gIsNotNew [ id ] = true
  1314. }
  1315. else
  1316. {
  1317. for ( new iItem = 0; iItem < UPGRADES; iItem++ )
  1318. {
  1319. gItemLevel [ id ] [ iItem ] = 0
  1320. }
  1321. for ( new gItem = 0; gItem < KNIFES; gItem++ )
  1322. {
  1323. gKnifeOwned [ id ] [ gItem ] = 0
  1324. }
  1325. gKnifeOwned [ id ] [ Default ] = 1
  1326. set_task ( 5.0, "gNewUser", id )
  1327. }
  1328. }
  1329.  
  1330. public CurWeapon ( id )
  1331. {
  1332. SetKnife ( id, gKnife [ id ] )
  1333. }
  1334.  
  1335. public gNewUser ( id )
  1336. {
  1337. new gName [ 32 ]
  1338. get_user_name ( id, gName, charsmax ( gName ) )
  1339. gPoint [ id ] = get_pcvar_num ( gCvars [ PointStart ] )
  1340. gPointTop [ id ] = get_pcvar_num ( gCvars [ PointStart ] )
  1341. if ( cs_get_user_team ( id ) != CS_TEAM_SPECTATOR && cs_get_user_team ( id ) != CS_TEAM_UNASSIGNED && !gIsNotNew [ id ] )
  1342. {
  1343. ColorChat ( id, GREY, "%s Welcome^4 %s^3! Our server is using a private^4 PointMod^3. Type^4 /shop^3!", gPrefix, gName )
  1344. gIsNotNew [ id ] = true
  1345. }
  1346. else
  1347. {
  1348. set_task ( 10.0, "gNewUser", id )
  1349. }
  1350. }
  1351.  
  1352. ParseLoadData ( id, gData [ 256 ] )
  1353. {
  1354. static gNum [ 11 ]
  1355. strbreak ( gData, gNum, charsmax ( gNum ), gData, charsmax ( gData ) )
  1356. gPoint [ id ] = str_to_num ( gNum )
  1357. strbreak ( gData, gNum, charsmax ( gNum ), gData, charsmax ( gData ) )
  1358. gKnife [ id ] = str_to_num ( gNum )
  1359. strbreak ( gData, gNum, charsmax ( gNum ), gData, charsmax ( gData ) )
  1360. gPointTop [ id ] = str_to_num ( gNum )
  1361.  
  1362. for ( new iItem = 0; iItem < UPGRADES; iItem++ )
  1363. {
  1364. strbreak ( gData, gNum, charsmax ( gNum ), gData, charsmax ( gData ) )
  1365. gItemLevel [ id ] [ iItem ] = str_to_num ( gNum )
  1366. }
  1367. for ( new bKnife = 0; bKnife < KNIFES; bKnife++ )
  1368. {
  1369. strbreak ( gData, gNum, charsmax ( gNum ), gData, charsmax ( gData ) )
  1370. gKnifeOwned [ id ] [ bKnife ] = str_to_num ( gNum )
  1371. }
  1372. }
  1373.  
  1374. GivePoint ( id, points)
  1375. {
  1376. new gainPoint
  1377. if ( IsPlayer ( id ) )
  1378. {
  1379. if ( gIsVip [ id ] )
  1380. gainPoint = points * 2
  1381. else
  1382. gainPoint = points
  1383.  
  1384. if ( gKnifeOwned [ id ] [ CzoneVip ] >= 1 )
  1385. gainPoint += KnifeInfo [ CzoneVip ] [ PointBonus ]
  1386. else if ( gKnifeOwned [ id ] [ Khanjar ] >= 1 || gKnifeOwned [ id ] [ Katana ] >= 1 )
  1387. gainPoint += KnifeInfo [ Khanjar ] [ PointBonus ]
  1388. else if ( gKnifeOwned [ id ] [ ProKnife ] >= 1 || gKnifeOwned [ id ] [ Gold ] >= 1 || gKnifeOwned [ id ] [ Silver ] >= 1 )
  1389. gainPoint += KnifeInfo [ ProKnife ] [ PointBonus ]
  1390.  
  1391. gPoint [ id ] += gainPoint
  1392. gPointTop [ id ] += gainPoint
  1393. cs_set_user_money(id, (gPoint [ id ]));
  1394. }
  1395.  
  1396. return PLUGIN_HANDLED
  1397. }
  1398.  
  1399. RemovePoint ( id, points )
  1400. {
  1401. new losePoint
  1402. if ( IsPlayer ( id ) )
  1403. {
  1404. losePoint = points
  1405. gPoint [ id ] -= losePoint
  1406. cs_set_user_money(id, (gPoint [ id ]));
  1407. }
  1408. return PLUGIN_HANDLED
  1409. }
  1410.  
  1411.  
  1412. SortTopPlayers(&Array:aNames, &Array:aSteamIDs, &Array:aXPs)
  1413. {
  1414. aNames = ArrayCreate(32);
  1415. aSteamIDs = ArrayCreate(35);
  1416. aXPs = ArrayCreate(1);
  1417.  
  1418. new hVault = nvault_util_open(gVaultName);
  1419. new iCount = nvault_util_count(hVault);
  1420. new iPos;
  1421. new szSteamID[35], szXP[11], iTimeStamp, szName[32];
  1422.  
  1423. for( new i = 0; i < iCount; i++ )
  1424. {
  1425. iPos = nvault_util_read(hVault, iPos, szSteamID, charsmax(szSteamID), szXP, charsmax(szXP), iTimeStamp);
  1426.  
  1427. nvault_get(gTopVault, szSteamID, szName, charsmax(szName));
  1428.  
  1429. ArrayPushString(aNames, szName);
  1430. ArrayPushString(aSteamIDs, szSteamID);
  1431. ArrayPushCell(aXPs, str_to_num(szXP));
  1432. }
  1433.  
  1434. nvault_util_close(hVault);
  1435.  
  1436. new iXP;
  1437. for( new i = 0, j; i < (iCount - 1); i++ )
  1438. {
  1439. iXP = ArrayGetCell(aXPs, i);
  1440.  
  1441. for( j = i + 1; j < iCount; j++ )
  1442. {
  1443. if( iXP < ArrayGetCell(aXPs, j) )
  1444. {
  1445. ArraySwap(aNames, i, j);
  1446. ArraySwap(aSteamIDs, i, j);
  1447. ArraySwap(aXPs, i, j);
  1448.  
  1449. i--;
  1450.  
  1451. break;
  1452. }
  1453. }
  1454. }
  1455.  
  1456. return iCount;
  1457. }
  1458.  
  1459. public CmdRespawnPlayer ( id )
  1460. {
  1461. ExecuteHamB ( Ham_CS_RoundRespawn, ( id ) )
  1462. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement