Advertisement
Guest User

Untitled

a guest
Aug 21st, 2016
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.48 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <cstrike>
  3. #include <fun>
  4. #include <hamsandwich>
  5. #include <levels>
  6. #include <nvault_util>
  7. #include <nvault>
  8. #include <sqlx>
  9. #include <zombie_escape>
  10.  
  11. #define MAXLEVEL 30
  12. #define MAXPLAYERS 32
  13. #define TOPLEVEL 15
  14.  
  15. native ze_set_user_points(index, amount)
  16. native ze_get_user_points(index)
  17. native get_antidote(id)
  18. native get_recoil(id)
  19. native get_unlimited(id)
  20.  
  21. new const LEVELS[MAXLEVEL] = {
  22. 50, // Needed on level 1
  23. 150, // Needed on level 2
  24. 300, // Needed on level 3
  25. 470, // Needed on level 4
  26. 700, // Needed on level 5
  27. 1200, // Needed on level 6
  28. 1800, // Needed on level 7
  29. 2800, // Needed on level 8
  30. 4100, // Needed on level 9
  31. 5200, // Needed on level 10
  32. 6000, // Needed on level 11
  33. 6800, // Needed on level 12
  34. 8200, // Needed on level 13
  35. 10500, // Needed on level 14
  36. 12000, // Needed on level 15
  37. 15000, // Needed on level 16
  38. 17500, // Needed on level 17
  39. 20500, // Needed on level 18
  40. 25500, // Needed on level 19
  41. 29000, // Needed on level 20
  42. 35000, // Needed on level 21
  43. 46000, // Needed on level 22
  44. 60000, // Needed on level 23
  45. 75000, // Needed on level 24
  46. 100000, // Needed on level 25
  47. 200000, // Needed on level 26
  48. 300000, // Needed on level 27
  49. 400000, // Needed on level 28
  50. 500000, // Needed on level 29
  51. 600000, // Needed on level 30
  52. }; // Needed Xp on each Levels
  53.  
  54. new SUPERNOOB
  55. new const NAMES[MAXLEVEL] =
  56. {
  57. SUPERNOOB, // Needed on level 1
  58. NOOB, // Needed on level 2
  59. SILVER I, // Needed on level 3
  60. SILVER II, // Needed on level 4
  61. SILVER II, // Needed on level 5
  62. SILVER IV, // Needed on level 6
  63. SILVER ELITE, // Needed on level 7
  64. SILVER MASTER, // Needed on level 8
  65. GOLD NOVA I, // Needed on level 9
  66. GOLD NOVA II, // Needed on level 10
  67. GOLD NOVA III, // Needed on level 11
  68. GOLD NOVA MASTER, // Needed on level 12
  69. GOLD NOVA ELITE, // Needed on level 13
  70. MASTER GUARDIN I, // Needed on level 14
  71. MASTER GUARDIN II, // Needed on level 15
  72. MASTER GUARDIN III, // Needed on level 16
  73. ASSASSIN, // Needed on level 17
  74. SNIPER, // Needed on level 18
  75. SURVIVOR, // Needed on level 19
  76. GUARDIN ELITE, // Needed on level 20
  77. LEGENDARY EAGLE, // Needed on level 21
  78. LEGENDARY MASTER, // Needed on level 22
  79. THE GLOBAL ELITE, // Needed on level 23
  80. ELITE PLAYER, // Needed on level 24
  81. UNSTOPPABLE, // Needed on level 25
  82. LEGENDOFWARIOR, // Needed on level 26
  83. PROFFISIONAL, // Needed on level 27
  84. THE GLOBAL MASTER, // Needed on level 28
  85. THE BOSS, // Needed on level 29
  86. ULTIMATE MONSTER // Needed on Level 30
  87. }
  88.  
  89. new g_MaxPlayers
  90.  
  91. new const VAULTNAME[] = "levels"
  92. new const szTables[][] =
  93. {
  94. "CREATE TABLE IF NOT EXISTS `mytable` ( `player_id` varchar(32) NOT NULL,`player_level` int(8) default NULL,`player_xp` int(16) default NULL,PRIMARY KEY (`player_id`) ) TYPE=MyISAM;"
  95. }
  96.  
  97. new PlayerXp[33]
  98. new PlayerLevel[33]
  99. new PlayerName[33]
  100. new g_szMotd[1536]
  101. new Handle:g_hTuple;
  102. new g_Vault
  103. new g_kills[33]
  104. new g_maxplayers
  105. new savexp, save_type, xp_kill, xp_triple, enable_triple, triple_kills, xp_ultra, ultra_kills, enable_ultra, escape_xp, damage_hp, damage_xp
  106. new SMALL, AVERAGE, LARGE
  107. new mysqlx_host, mysqlx_user, mysqlx_db, mysqlx_pass
  108. new bool:Prize[33]
  109. new g_msgSayText
  110.  
  111. public plugin_init()
  112. {
  113. register_plugin("[ZE] Levels XP", "1.0", "Raheem");
  114.  
  115. SMALL = register_cvar("small", "10")
  116. AVERAGE = register_cvar("average", "25")
  117. LARGE = register_cvar("large", "50")
  118.  
  119. new time[3]
  120. get_time("%H", time, 2)
  121.  
  122. if((12 > str_to_num(time) >= 00))
  123. {
  124. xp_kill = register_cvar("levels_xp","2*2"); // How much xp gain if you killed someone?
  125. enable_triple = register_cvar("levels_triple","1"); // Enable Triple Kill bonus xp? 1 = Yes, 0 = No.
  126. xp_triple = register_cvar("levels_triple_xp","3*2"); // How much bonus xp give for Triple Kill?
  127. triple_kills = register_cvar("levels_triple_kills","3"); // How much kills needed to give bonus xp?
  128. enable_ultra = register_cvar("levels_ultra","1"); // Enable Ultra Kill bonus xp? 1 = Yes, 0 = No.
  129. xp_ultra = register_cvar("levels_ultra_xp","5*2"); // How much bonus xp give for Ultra Kill?
  130. ultra_kills = register_cvar("levels_ultra_kills","6"); // How much kills needed to give bonus xp?
  131. escape_xp = register_cvar("escape_xp_amount", "5*2") // How much XP given to Humans when escape success?
  132. damage_hp = register_cvar("required_damage_hp", "80") // The damage if the player made more than it he will awarded.
  133. damage_xp = register_cvar("damage_xp_amount", "2*2") //How much XP given to human who make damage more than damage_hp?
  134. }
  135. else
  136. {
  137. xp_kill = register_cvar("levels_xp","2"); // How much xp gain if you killed someone?
  138. enable_triple = register_cvar("levels_triple","1"); // Enable Triple Kill bonus xp? 1 = Yes, 0 = No.
  139. xp_triple = register_cvar("levels_triple_xp","3"); // How much bonus xp give for Triple Kill?
  140. triple_kills = register_cvar("levels_triple_kills","3"); // How much kills needed to give bonus xp?
  141. enable_ultra = register_cvar("levels_ultra","1"); // Enable Ultra Kill bonus xp? 1 = Yes, 0 = No.
  142. xp_ultra = register_cvar("levels_ultra_xp","5"); // How much bonus xp give for Ultra Kill?
  143. ultra_kills = register_cvar("levels_ultra_kills","6"); // How much kills needed to give bonus xp?
  144. escape_xp = register_cvar("escape_xp_amount", "5") // How much XP given to Humans when escape success?
  145. damage_hp = register_cvar("required_damage_hp", "80") // The damage if the player made more than it he will awarded.
  146. damage_xp = register_cvar("damage_xp_amount", "2") //How much XP given to human who make damage more than damage_hp?
  147. }
  148.  
  149. save_type = register_cvar("levels_savetype","0"); // Save Xp to : 1 = MySQL, 0 = NVault.
  150. savexp = register_cvar("levels_save","2"); // Save Xp by : 2 = Name, 1 = SteamID, 0 = IP.
  151.  
  152. register_clcmd("say /free", "random_prizes")
  153. register_clcmd("say /top", "show_global_top")
  154. // SQLx cvars
  155. mysqlx_host = register_cvar ("levels_host", ""); // The host from the db
  156. mysqlx_user = register_cvar ("levels_user", ""); // The username from the db login
  157. mysqlx_pass = register_cvar ("levels_pass", ""); // The password from the db login
  158. mysqlx_db = register_cvar ("levels_dbname", ""); // The database name
  159. // Events
  160. register_event("DeathMsg", "event_deathmsg", "a");
  161. register_event("Damage", "on_damage", "b", "2!0", "3=0", "4!0")
  162. // Forwards //
  163. RegisterHam(Ham_Spawn, "player", "fwd_PlayerSpawn", 1);
  164.  
  165. MySQLx_Init()
  166.  
  167. g_maxplayers = get_maxplayers();
  168.  
  169. register_clcmd("say", "custom_say")
  170. register_clcmd("say_team", "custom_say_team")
  171.  
  172. g_msgSayText = get_user_msgid("SayText")
  173. register_message(g_msgSayText, "message_SayText")
  174. }
  175.  
  176. public plugin_cfg()
  177. {
  178. //Open our vault and have g_Vault store the handle.
  179. g_Vault = nvault_open( "levels" );
  180. //Make the plugin error if vault did not successfully open
  181. if ( g_Vault == INVALID_HANDLE )
  182. set_fail_state( "Error opening levels nVault, file does not exist!" );
  183.  
  184. FormatTop(TOPLEVEL)
  185. }
  186.  
  187. public plugin_precache()
  188. {
  189. precache_sound( "levelup_ZE/ze_levelup.wav" );
  190. }
  191.  
  192. public plugin_natives()
  193. {
  194. register_native("get_user_xp", "native_get_user_xp", 1);
  195. register_native("set_user_xp", "native_set_user_xp", 1);
  196. register_native("get_user_level", "native_get_user_level", 1);
  197. register_native("set_user_level", "native_set_user_level", 1);
  198. register_native("get_user_max_level", "native_get_user_max_level", 1);
  199. register_native("get_user_name", "native_get_user_name", 1);
  200. }
  201.  
  202. public plugin_end()
  203. {
  204. //Close the vault when the plugin ends (map change\server shutdown\restart)
  205. nvault_close( g_Vault );
  206. }
  207.  
  208. public client_connect(id)
  209. {
  210. LoadLevel(id)
  211.  
  212. set_task(300.0, "small_present", id)
  213. set_task(600.0, "average_present", id)
  214. set_task(1200.0, "large_present", id)
  215. }
  216.  
  217. public client_disconnect(id)
  218. {
  219. SaveLevel(id)
  220.  
  221. PlayerXp[id] = 0;
  222. PlayerLevel[id] = 0;
  223.  
  224. if(task_exists(id))
  225. remove_task(id)
  226. }
  227.  
  228. public small_present(id)
  229. {
  230. set_user_xp(id, get_user_xp(id) + get_pcvar_num(SMALL))
  231. check_level(id)
  232. client_print_color(id, "!y[!gEscape!y-!gPark!y] !tYou got !g%d !tXP!y, !tfor playing on the server for !g5 !tminutes!y.", get_pcvar_num(SMALL))
  233. }
  234.  
  235. public average_present(id)
  236. {
  237. set_user_xp(id, get_user_xp(id) + get_pcvar_num(AVERAGE))
  238. check_level(id)
  239. client_print_color(id, "!y[!gEscape!y-!gPark!y] !tYou got !g%d !tXP!y, !tfor playing on the server for !g10 !tminutes!y.", get_pcvar_num(AVERAGE))
  240. }
  241.  
  242. public large_present(id)
  243. {
  244. set_user_xp(id, get_user_xp(id) + get_pcvar_num(LARGE))
  245. check_level(id)
  246. client_print_color(id, "!y[!gEscape!y-!gPark!y] !tYou got !g%d !tXP!y, !tfor playing on the server for !g20 !gminutes!y.", get_pcvar_num(LARGE))
  247. }
  248.  
  249. public fwd_PlayerSpawn(id)
  250. {
  251. if(!is_user_alive(id))
  252. return;
  253.  
  254. g_kills[id] = 0
  255. }
  256.  
  257. public event_deathmsg()
  258. {
  259. new g_attacker = read_data(1);
  260. new g_victim = read_data(2);
  261.  
  262. new counted_triple = get_pcvar_num(xp_kill) + get_pcvar_num(xp_triple)
  263. new counted_ultra = get_pcvar_num(xp_kill) + get_pcvar_num(xp_ultra)
  264.  
  265. if((1 <= g_attacker <= g_maxplayers))
  266. {
  267. if(g_victim != g_attacker)
  268. {
  269. g_kills[g_attacker]++;
  270. if(PlayerLevel[g_attacker] < MAXLEVEL-1)
  271. {
  272.  
  273. if ( g_kills[g_attacker] == get_pcvar_num(triple_kills) && get_pcvar_num(enable_triple) )
  274. {
  275. PlayerXp[g_attacker] += counted_triple
  276.  
  277. set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), 0.50, 0.33, 1, 2.0, 8.0)
  278. show_hudmessage(g_attacker, "+%i Triple Kill XP!", counted_triple)
  279. }
  280. else if ( g_kills[g_attacker] == get_pcvar_num(ultra_kills) && get_pcvar_num(enable_ultra) )
  281. {
  282. PlayerXp[g_attacker] += counted_ultra
  283.  
  284. set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), 0.50, 0.33, 1, 2.0, 8.0)
  285. show_hudmessage(g_attacker, "+%i Ultra Kill XP!", counted_ultra)
  286. }
  287. else
  288. {
  289. PlayerXp[g_attacker] += get_pcvar_num(xp_kill)
  290.  
  291. set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), 0.50, 0.33, 1, 2.0, 8.0)
  292. show_hudmessage(g_attacker, "+%i XP", get_pcvar_num(xp_kill))
  293. }
  294.  
  295. check_level(g_attacker)
  296. }
  297. }
  298. }
  299. }
  300.  
  301. public ze_roundend()
  302. {
  303. new Alive_Terrorists_Number = GetPlayersNum(CsTeams:CS_TEAM_T)
  304. new Alive_CT_Numbers = GetPlayersNum(CsTeams:CS_TEAM_CT)
  305.  
  306. new iPlayers[32], iNum
  307. get_players(iPlayers, iNum, "ace", "CT")
  308.  
  309. for (new i = 0; i < iNum; i++)
  310. {
  311. if(PlayerLevel[iPlayers[i]] < MAXLEVEL-1)
  312. {
  313. if((Alive_CT_Numbers > Alive_Terrorists_Number) && (Alive_Terrorists_Number == 0))
  314. {
  315. set_user_xp(iPlayers[i], get_user_xp(iPlayers[i]) + get_pcvar_num(escape_xp))
  316. client_print_color(iPlayers[i], "!y[!gEscape!y-!gPark!y] !y+!t%i !gXP!y.", get_pcvar_num(escape_xp))
  317. }
  318. check_level(iPlayers[i])
  319. }
  320. }
  321. }
  322.  
  323. public on_damage(id)
  324. {
  325. static attacker,damage;
  326.  
  327. attacker = get_user_attacker(id)
  328. damage = read_data(2)
  329. if(PlayerLevel[attacker] < MAXLEVEL+1)
  330. {
  331. if ((damage >= get_pcvar_num(damage_hp)) && is_user_connected(attacker) && (cs_get_user_team(attacker) == CS_TEAM_CT) && (attacker != id))
  332. {
  333. set_user_xp(attacker, get_user_xp(attacker) + get_pcvar_num(damage_xp))
  334. set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), -1.0, 0.7, 1, 3.0, 8.0, 0.5, 0.5)
  335. show_hudmessage(attacker, "+%i XP", get_pcvar_num(damage_xp))
  336. }
  337.  
  338. check_level(attacker)
  339. }
  340. }
  341.  
  342. public check_level(id)
  343. {
  344. if(PlayerLevel[id] < MAXLEVEL-1)
  345. {
  346. while(PlayerXp[id] >= LEVELS[PlayerLevel[id]])
  347. {
  348. PlayerLevel[id]++;
  349.  
  350. static name[32] ; get_user_name(id, name, charsmax(name));
  351. client_cmd(id,"spk levelup_ZE/ze_levelup.wav")
  352. client_print_color(0, "!y[!gEscape!y-!gPark!y] !tCongratulation!y..!g%s!y, !tReached Level !g%i !tWith Rank !g%s!y.", name, PlayerLevel[id], PlayerName[id]);
  353. }
  354. }
  355. }
  356.  
  357. public random_prizes(id)
  358. {
  359. new xp = get_user_xp(id)
  360.  
  361. if(Prize[id])
  362. {
  363. client_print_color(id, "!y[!gEscape!y-!gPark!y] !tYou Have Used Your Chance!y. !tTry Again !gNext Map!y.")
  364. }
  365. else
  366. {
  367. new iRand = random_num(0, 100)
  368. new szName[32]
  369. get_user_name(id, szName, charsmax(szName))
  370.  
  371. switch(iRand)
  372. {
  373. case 0 .. 10:
  374. {
  375. client_print_color(id, "!y[!gEscape!y-!gPark!y] !tBad Luck!y. !tYou Didn't Win !g:P!y. !tTry !gNext Map!y.")
  376. }
  377. case 11 .. 20:
  378. {
  379. client_print_color(id, "!y[!gEscape!y-!gPark!y] !tWorst Luck !g:P!y! !tYou Lost !n-!g25 !tXP!y.")
  380. set_user_xp(id, xp - 25)
  381. }
  382. case 21 .. 30:
  383. {
  384. if ((cs_get_user_team(id) == CS_TEAM_CT) && is_user_alive(id))
  385. {
  386. client_print_color(id, "!y[!gEscape!y-!gPark!y] !tGood Luck!y! !tYou Won !gGrenades Pack !tXP!y.")
  387. give_item(id, "weapon_hegrenade")
  388. give_item(id, "weapon_smokegrenade")
  389. give_item(id, "weapon_flashbang")
  390. }
  391. }
  392. case 31 .. 40:
  393. {
  394. client_print_color(id, "!y[!gEscape!y-!gPark!y] !tGood Luck!y! !tYou Won !n+!g25 !tXP!y.")
  395. set_user_xp(id, xp + 25)
  396. }
  397. case 41 .. 50:
  398. {
  399. client_print_color(id, "!y[!gEscape!y-!gPark!y] !tWell Luck!y! !tYou Won !n+!g500 !tHP!y.")
  400. set_user_health(id, get_user_health(id) + 500)
  401. }
  402. case 51 .. 60:
  403. {
  404. client_print_color(id, "!y[!gEscape!y-!gPark!y] !tGreat Luck!y! !tYou Won !gSpeed!y.")
  405. set_user_maxspeed(id, get_user_maxspeed(id) + 20.0)
  406. }
  407. case 61 .. 70:
  408. {
  409. if ((cs_get_user_team(id) == CS_TEAM_T) && is_user_alive(id))
  410. {
  411. client_print_color(id, "!y[!gEscape!y-!gPark!y] !tLucky!y! !tYou Won !!gAntidote!y.")
  412. get_antidote(id)
  413. }
  414. }
  415. case 71 .. 80:
  416. {
  417. if ((cs_get_user_team(id) == CS_TEAM_CT) && is_user_alive(id))
  418. {
  419. client_print_color(id, "!y[!gEscape!y-!gPark!y] !tNice Luck!y! !tYou Won !!gUnlimited Clip!y.")
  420. get_unlimited(id)
  421. }
  422. }
  423. case 81 .. 90:
  424. {
  425. if ((cs_get_user_team(id) == CS_TEAM_CT) && is_user_alive(id))
  426. {
  427. client_print_color(id, "!y[!gEscape!y-!gPark!y] !tUnstoppablE Luck!y! !tYou Won !gNo Recoil!y.")
  428. get_recoil(id)
  429. }
  430. }
  431. case 91 .. 100:
  432. {
  433. client_print_color(id, "!y[!gEscape!y-!gPark!y] !tWTF An Awesome Luck!y! !tYou Won !y+!g50 !tPoints!y.")
  434. ze_set_user_points(id, ze_get_user_points(id) + 50)
  435. }
  436. }
  437. Prize[id] = true
  438. check_level(id)
  439. }
  440. }
  441.  
  442. public MySQLx_Init()
  443. {
  444. if (!get_pcvar_num(save_type))
  445. return;
  446.  
  447. new szHost[64], szUser[32], szPass[32], szDB[128];
  448.  
  449. get_pcvar_string( mysqlx_host, szHost, charsmax( szHost ) );
  450. get_pcvar_string( mysqlx_user, szUser, charsmax( szUser ) );
  451. get_pcvar_string( mysqlx_pass, szPass, charsmax( szPass ) );
  452. get_pcvar_string( mysqlx_db, szDB, charsmax( szDB ) );
  453.  
  454. g_hTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB );
  455.  
  456. for ( new i = 0; i < sizeof szTables; i++ )
  457. {
  458. SQL_ThreadQuery( g_hTuple, "QueryCreateTable", szTables[i])
  459. }
  460. }
  461.  
  462. public QueryCreateTable( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  463. {
  464. if( iFailState == TQUERY_CONNECT_FAILED
  465. || iFailState == TQUERY_QUERY_FAILED )
  466. {
  467. log_amx( "%s", szError );
  468.  
  469. return;
  470. }
  471. }
  472.  
  473. SaveLevel(id)
  474. {
  475. new szAuth[33];
  476. new szKey[64];
  477.  
  478. if ( get_pcvar_num(savexp) == 0 )
  479. {
  480. get_user_ip( id, szAuth , charsmax(szAuth), 1);
  481. formatex( szKey , 63 , "%s-IP" , szAuth);
  482. }
  483. else if ( get_pcvar_num(savexp) == 1 )
  484. {
  485. get_user_authid( id , szAuth , charsmax(szAuth) );
  486. formatex( szKey , 63 , "%s-ID" , szAuth);
  487. }
  488. else if ( get_pcvar_num(savexp) == 2 )
  489. {
  490. get_user_name( id, szAuth , charsmax(szAuth) );
  491. formatex( szKey , 63 , "%s-NAME" , szAuth);
  492. }
  493.  
  494. if ( !get_pcvar_num(save_type) )
  495. {
  496. new szData[256];
  497.  
  498. formatex( szData , 255 , "%i#%i#" , PlayerLevel[id], PlayerXp[id] );
  499.  
  500. nvault_set( g_Vault , szKey , szData );
  501. }
  502. else
  503. {
  504. static szQuery[ 128 ];
  505.  
  506. formatex( szQuery, 127, "REPLACE INTO `mytable` (`player_id`, `player_level`, `player_xp`) VALUES ('%s', '%d', '%d');", szAuth , PlayerLevel[id], PlayerXp[id] );
  507.  
  508. SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
  509. }
  510. }
  511.  
  512. LoadLevel(id)
  513. {
  514. new szAuth[33];
  515. new szKey[40];
  516.  
  517. if ( get_pcvar_num(savexp) == 0 )
  518. {
  519. get_user_ip( id, szAuth , charsmax(szAuth), 1);
  520. formatex( szKey , 63 , "%s-IP" , szAuth);
  521. }
  522. else if ( get_pcvar_num(savexp) == 1 )
  523. {
  524. get_user_authid( id , szAuth , charsmax(szAuth) );
  525. formatex( szKey , 63 , "%s-ID" , szAuth);
  526. }
  527. else if ( get_pcvar_num(savexp) == 2 )
  528. {
  529. get_user_name( id, szAuth , charsmax(szAuth) );
  530. formatex( szKey , 63 , "%s-NAME" , szAuth);
  531. }
  532.  
  533. if ( !get_pcvar_num(save_type) )
  534. {
  535. new szData[256];
  536.  
  537. formatex(szData , 255, "%i#%i#", PlayerLevel[id], PlayerXp[id])
  538.  
  539. nvault_get(g_Vault, szKey, szData, 255)
  540.  
  541. replace_all(szData , 255, "#", " ")
  542. new xp[32], level[32]
  543. parse(szData, level, 31, xp, 31)
  544. PlayerLevel[id] = str_to_num(level)
  545. PlayerXp[id] = str_to_num(xp)
  546. }
  547. else
  548. {
  549. static szQuery[ 128 ], iData[ 1 ];
  550. formatex( szQuery, 127, "SELECT `player_level`, `player_xp` FROM `mytable` WHERE ( `player_id` = '%s' );", szAuth );
  551.  
  552. iData[ 0 ] = id;
  553. SQL_ThreadQuery( g_hTuple, "QuerySelectData", szQuery, iData, 1 );
  554. }
  555. }
  556.  
  557. public QuerySelectData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  558. {
  559. if( iFailState == TQUERY_CONNECT_FAILED
  560. || iFailState == TQUERY_QUERY_FAILED )
  561. {
  562. log_amx( "%s", szError );
  563.  
  564. return;
  565. }
  566. else
  567. {
  568. new id = iData[ 0 ];
  569.  
  570. new ColLevel = SQL_FieldNameToNum(hQuery, "player_level")
  571. new ColXp = SQL_FieldNameToNum(hQuery, "player_xp")
  572.  
  573. while (SQL_MoreResults(hQuery))
  574. {
  575. PlayerLevel[id] = SQL_ReadResult(hQuery, ColLevel);
  576. PlayerXp[id] = SQL_ReadResult(hQuery, ColXp);
  577.  
  578. SQL_NextRow(hQuery)
  579. }
  580. }
  581. }
  582.  
  583. public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  584. {
  585. if( iFailState == TQUERY_CONNECT_FAILED
  586. || iFailState == TQUERY_QUERY_FAILED )
  587. {
  588. log_amx( "%s", szError );
  589.  
  590. return;
  591. }
  592. }
  593.  
  594. public show_global_top(id)
  595. {
  596. show_motd(id, g_szMotd, "GLOBAL PLAYERS")
  597. }
  598.  
  599. FormatTop(iNum)
  600. {
  601. enum _:sVaultData
  602. {
  603. VD_Key[64],
  604. VD_Value
  605. }
  606.  
  607. new sVault = nvault_util_open(VAULTNAME)
  608. new Array:entries = ArrayCreate(sVaultData)
  609.  
  610. new sizeEntries;
  611. new numEntries = nvault_util_count(sVault)
  612. new data[sVaultData], value[128], data2[sVaultData]
  613.  
  614. for(new i = 0, pos, timestamp; i < numEntries; i++)
  615. {
  616. pos = nvault_util_read(sVault, pos, data[VD_Key], charsmax(data[VD_Key]), value, charsmax(value), timestamp);
  617. data[VD_Value] = str_to_num(value)
  618.  
  619. if(sizeEntries == 0)
  620. {
  621. ArrayPushArray(entries, data)
  622. sizeEntries++
  623. }
  624. else
  625. {
  626. for(timestamp = 0; timestamp <= sizeEntries; timestamp++)
  627. {
  628. if(timestamp == sizeEntries)
  629. {
  630. if(sizeEntries < iNum)
  631. {
  632. ArrayPushArray(entries, data)
  633. sizeEntries++
  634. }
  635.  
  636. break
  637. }
  638.  
  639. ArrayGetArray(entries, timestamp, data2)
  640. if(data[VD_Value] >= data2[VD_Value])
  641. {
  642. ArrayInsertArrayBefore(entries, timestamp, data)
  643. if(sizeEntries < iNum)
  644. {
  645. sizeEntries++
  646. }
  647. else
  648. {
  649. ArrayDeleteItem(entries, sizeEntries);
  650. }
  651.  
  652. break
  653. }
  654. }
  655. }
  656. }
  657.  
  658. nvault_util_close(sVault)
  659.  
  660. new iLen
  661. new len = charsmax(g_szMotd)
  662.  
  663. iLen = formatex(g_szMotd, len, "<STYLE>body{background:#212121;color:#d1d1d1;font-family:Arial}table{width:100%%;font-size:19px}</STYLE><table cellpadding=1 cellspacing=1 border=0>")
  664. iLen += formatex(g_szMotd[iLen], len - iLen, "<tr bgcolor=#333333><th width=1%%><align=left font color=white> %s <th width=5%%> %-22.22s <th width=5%%> %s", "#", "NAME", "LEVEL")
  665.  
  666. new i
  667. for(i = 0; i < sizeEntries; i++)
  668. {
  669. ArrayGetArray(entries, i, data);
  670. data[VD_Key][20] = 0;
  671.  
  672. replace_all(data[VD_Key], charsmax(data[VD_Key]), "<", "&lt;")
  673. replace_all(data[VD_Key], charsmax(data[VD_Key]), ">", "&gt;")
  674.  
  675. iLen += formatex(g_szMotd[iLen], len - iLen, "<tr align=left%s><td align=left><font color=white> %d. <td> %-22.22s <td> %d", " bgcolor=#2b5b95",(i+1), data[VD_Key], data[VD_Value])
  676. }
  677.  
  678. ArrayDestroy(entries);
  679. iLen += formatex(g_szMotd[iLen], len - iLen, "</table></body>")
  680. }
  681.  
  682. public custom_say(id)
  683. {
  684. new szMessage[192], szName[32]
  685.  
  686. read_args(szMessage, charsmax(szMessage))
  687. remove_quotes(szMessage)
  688. get_user_name(id, szName, charsmax(szName))
  689.  
  690. if(equali(szMessage[0], " ") || equali(szMessage[0], "") || !is_valid_msg(szMessage))
  691. return PLUGIN_HANDLED_MAIN
  692.  
  693. if(is_user_alive(id))
  694. {
  695. format(szMessage, charsmax(szMessage), "^4[%s] ^3%s : ^1%s", PlayerName[id], szName, szMessage)
  696. }
  697. else
  698. {
  699. format(szMessage, charsmax(szMessage), "^1*DEAD* ^4[%s] ^3%s : ^1%s", PlayerName[id], szName, szMessage)
  700. }
  701.  
  702. new iPlayers[MAXPLAYERS], iPlayerCount, i, player
  703. get_players(iPlayers, iPlayerCount, "ch")
  704. for(i = 0; i < iPlayerCount; i++)
  705. {
  706. player = iPlayers[i]
  707. if(is_user_alive(id) && is_user_alive(player) || !is_user_alive(id) && !is_user_alive(player))
  708. {
  709. message_begin(MSG_ONE, g_msgSayText, {0, 0, 0}, player)
  710. write_byte(id)
  711. write_string(szMessage)
  712. message_end()
  713. }
  714. }
  715.  
  716. return PLUGIN_CONTINUE
  717. }
  718.  
  719. public custom_say_team(id)
  720. {
  721. new szMessage[192], szName[32]
  722.  
  723. read_args(szMessage, charsmax(szMessage))
  724. remove_quotes(szMessage)
  725. get_user_name(id, szName, charsmax(szName))
  726.  
  727. if(equali(szMessage[0], " ") || equali(szMessage[0], "") || !is_valid_msg(szMessage))
  728. return PLUGIN_HANDLED_MAIN
  729.  
  730. if(is_user_alive(id))
  731. {
  732. format(szMessage, charsmax(szMessage), "^4[%s] ^3%s : ^1%s", PlayerName[id], szName, szMessage)
  733. }
  734. else
  735. {
  736. format(szMessage, charsmax(szMessage), "^1*DEAD* ^4[$s] ^3%s : ^1%s", PlayerName[id], szName, szMessage)
  737. }
  738.  
  739. new iPlayers[MAXPLAYERS], iPlayerCount, i, player
  740. get_players(iPlayers, iPlayerCount, "ch")
  741. for(i = 0; i < iPlayerCount; i++)
  742. {
  743. player = iPlayers[i]
  744. if(is_user_alive(id) && is_user_alive(player) && get_user_team(id) == get_user_team(player) || !is_user_alive(id) && !is_user_alive(player) && get_user_team(id) == get_user_team(player))
  745. {
  746. message_begin(MSG_ONE, g_msgSayText, {0, 0, 0}, player)
  747. write_byte(id)
  748. write_string(szMessage)
  749. message_end()
  750. }
  751. }
  752.  
  753. return PLUGIN_CONTINUE
  754. }
  755.  
  756. public message_SayText(id)
  757. {
  758. return PLUGIN_HANDLED
  759. }
  760.  
  761. bool:is_valid_msg(const szMessage[])
  762. {
  763. if(szMessage[0] == '@' || szMessage[0] == '/' || szMessage[0] == '!' || !strlen(szMessage))
  764. return false
  765.  
  766. return true
  767. }
  768.  
  769. //======================Natives======================//
  770.  
  771. // Native: get user xp
  772. public native_get_user_xp(id)
  773. {
  774. return PlayerXp[id];
  775. }
  776. // Native: set user xp
  777. public native_set_user_xp(id, amount)
  778. {
  779. PlayerXp[id] = amount;
  780. }
  781. // Native: get_user_level
  782. public native_get_user_level(id)
  783. {
  784. return PlayerLevel[id];
  785. }
  786. // Native: set user level
  787. public native_set_user_level(id, amount)
  788. {
  789. PlayerLevel[id] = amount;
  790. }
  791. // Native: Gets user level by XP
  792. public native_get_user_max_level(id)
  793. {
  794. return LEVELS[PlayerLevel[id]];
  795. }
  796. // Native: Gets user level name
  797. public native_get_user_name(id)
  798. {
  799. return NAMES[PlayerName[id]];
  800. }
  801. stock client_print_color(index, const text[], any:...)
  802. {
  803. new szMsg[128];
  804. vformat(szMsg, sizeof(szMsg) - 1, text, 3);
  805.  
  806. replace_all(szMsg, sizeof(szMsg) - 1, "!g", "^x04");
  807. replace_all(szMsg, sizeof(szMsg) - 1, "!n", "^x01");
  808. replace_all(szMsg, sizeof(szMsg) - 1, "!t", "^x03");
  809.  
  810. if(index == 0)
  811. {
  812. for(new i = 0; i < g_MaxPlayers; i++)
  813. {
  814. if(is_user_alive(i) && is_user_connected(i))
  815. {
  816. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, i);
  817. write_byte(i);
  818. write_string(szMsg);
  819. message_end();
  820. }
  821. }
  822. } else {
  823. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, index);
  824. write_byte(index);
  825. write_string(szMsg);
  826. message_end();
  827. }
  828. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement