Advertisement
Guest User

Untitled

a guest
Aug 2nd, 2016
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.05 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <cstrike>
  3. #include <hamsandwich>
  4. #include <levels>
  5. #include <nvault>
  6. #include <sqlx>
  7.  
  8. #define MAXLEVEL 30
  9.  
  10. new const LEVELS[MAXLEVEL] = {
  11. 50, // Needed on level 1
  12. 150, // Needed on level 2
  13. 300, // Needed on level 3
  14. 470, // Needed on level 4
  15. 700, // Needed on level 5
  16. 1200, // Needed on level 6
  17. 1800, // Needed on level 7
  18. 2800, // Needed on level 8
  19. 4100, // Needed on level 9
  20. 5200, // Needed on level 10
  21. 6000, // Needed on level 11
  22. 6800, // Needed on level 12
  23. 8200, // Needed on level 13
  24. 10200, // Needed on level 14
  25. 12000, // Needed on level 15
  26. 15000, // Needed on level 16
  27. 17500, // Needed on level 17
  28. 20500, // Needed on level 18
  29. 25500, // Needed on level 19
  30. 29000, // Needed on level 20
  31. 35000, // Needed on level 21
  32. 46000, // Needed on level 22
  33. 60000, // Needed on level 23
  34. 75000, // Needed on level 24
  35. 200000, // Needed on level 26
  36. 300000, // Needed on level 27
  37. 400000, // Needed on level 28
  38. 500000, // Needed on level 29
  39. 600000, // Needed on level 30
  40. }; // Needed Xp on each Levels
  41.  
  42. new const szTables[][] =
  43. {
  44. "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;"
  45. }
  46.  
  47. new PlayerXp[33]
  48. new PlayerLevel[33]
  49. new Handle:g_hTuple;
  50.  
  51. new g_Vault
  52. new g_kills[33]
  53. new g_maxplayers
  54. new savexp, save_type, xp_kill, xp_triple, enable_triple, triple_kills, xp_ultra, ultra_kills, enable_ultra, escape_xp, damage_hp, damage_xp
  55.  
  56. new mysqlx_host, mysqlx_user, mysqlx_db, mysqlx_pass
  57.  
  58. public plugin_init()
  59. {
  60. register_plugin("[ZE] Levels XP", "1.0", "Raheem");
  61.  
  62. save_type = register_cvar("levels_savetype","0"); // Save Xp to : 1 = MySQL, 0 = NVault.
  63. savexp = register_cvar("levels_save","2"); // Save Xp by : 2 = Name, 1 = SteamID, 0 = IP.
  64. xp_kill = register_cvar("levels_xp","1"); // How much xp gain if you killed someone?
  65.  
  66. enable_triple = register_cvar("levels_triple","1"); // Enable Triple Kill bonus xp? 1 = Yes, 0 = No.
  67. xp_triple = register_cvar("levels_triple_xp","3"); // How much bonus xp give for Triple Kill?
  68. triple_kills = register_cvar("levels_triple_kills","3"); // How much kills needed to give bonus xp?
  69. enable_ultra = register_cvar("levels_ultra","1"); // Enable Ultra Kill bonus xp? 1 = Yes, 0 = No.
  70. xp_ultra = register_cvar("levels_ultra_xp","3"); // How much bonus xp give for Ultra Kill?
  71. ultra_kills = register_cvar("levels_ultra_kills","6"); // How much kills needed to give bonus xp?
  72. escape_xp = register_cvar("escape_xp_amount", "1") // How much XP given to Humans when escape success?
  73. damage_hp = register_cvar("required_damage_hp", "200") // The damage if the player made more than it he will awarded.
  74. damage_xp = register_cvar("damage_xp_amount", "1") //How much XP given to human who make damage more than damage_hp?
  75.  
  76.  
  77. // SQLx cvars
  78. mysqlx_host = register_cvar ("levels_host", ""); // The host from the db
  79. mysqlx_user = register_cvar ("levels_user", ""); // The username from the db login
  80. mysqlx_pass = register_cvar ("levels_pass", ""); // The password from the db login
  81. mysqlx_db = register_cvar ("levels_dbname", ""); // The database name
  82.  
  83. // Events
  84. register_event("DeathMsg", "event_deathmsg", "a");
  85. register_event("Damage", "on_damage", "b", "2!0", "3=0", "4!0")
  86.  
  87.  
  88. // Forwards //
  89. RegisterHam(Ham_Spawn, "player", "fwd_PlayerSpawn", 1);
  90.  
  91. MySQLx_Init()
  92.  
  93. g_maxplayers = get_maxplayers();
  94. }
  95.  
  96. public plugin_cfg()
  97. {
  98. //Open our vault and have g_Vault store the handle.
  99. g_Vault = nvault_open( "levels" );
  100.  
  101. //Make the plugin error if vault did not successfully open
  102. if ( g_Vault == INVALID_HANDLE )
  103. set_fail_state( "Error opening levels nVault, file does not exist!" );
  104. }
  105.  
  106. public plugin_precache()
  107. {
  108. precache_sound( "levelup_ZE/ze_levelup.wav" );
  109. }
  110.  
  111. public plugin_natives()
  112. {
  113. register_native("get_user_xp", "native_get_user_xp", 1);
  114. register_native("set_user_xp", "native_set_user_xp", 1);
  115. register_native("get_user_level", "native_get_user_level", 1);
  116. register_native("set_user_level", "native_set_user_level", 1);
  117. register_native("get_user_max_level", "native_get_user_max_level", 1);
  118. }
  119.  
  120. public plugin_end()
  121. {
  122. //Close the vault when the plugin ends (map change\server shutdown\restart)
  123. nvault_close( g_Vault );
  124. }
  125.  
  126. public client_connect(id)
  127. {
  128. LoadLevel(id)
  129. }
  130.  
  131. public client_disconnect(id)
  132. {
  133. SaveLevel(id)
  134.  
  135. PlayerXp[id] = 0;
  136. PlayerLevel[id] = 0;
  137. }
  138.  
  139. public fwd_PlayerSpawn(id)
  140. {
  141.  
  142. if(!is_user_alive(id))
  143. return;
  144.  
  145. g_kills[id] = 0
  146. }
  147.  
  148. public event_deathmsg()
  149. {
  150. new g_attacker = read_data(1);
  151. new g_victim = read_data(2);
  152.  
  153. new counted_triple = get_pcvar_num(xp_kill) + get_pcvar_num(xp_triple)
  154. new counted_ultra = get_pcvar_num(xp_kill) + get_pcvar_num(xp_ultra)
  155.  
  156. if((1 <= g_attacker <= g_maxplayers))
  157. {
  158. if(g_victim != g_attacker)
  159. {
  160. g_kills[g_attacker]++;
  161. if(PlayerLevel[g_attacker] < MAXLEVEL-1)
  162. {
  163.  
  164. if ( g_kills[g_attacker] == get_pcvar_num(triple_kills) && get_pcvar_num(enable_triple) )
  165. {
  166. PlayerXp[g_attacker] += counted_triple
  167.  
  168. set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), 0.50, 0.33, 1, 2.0, 8.0)
  169. show_hudmessage(g_attacker, "+%i Triple Kill XP!", counted_triple)
  170. }
  171. else if ( g_kills[g_attacker] == get_pcvar_num(ultra_kills) && get_pcvar_num(enable_ultra) )
  172. {
  173. PlayerXp[g_attacker] += counted_ultra
  174.  
  175. set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), 0.50, 0.33, 1, 2.0, 8.0)
  176. show_hudmessage(g_attacker, "+%i Ultra Kill XP!", counted_ultra)
  177. }
  178. else
  179. {
  180. PlayerXp[g_attacker] += get_pcvar_num(xp_kill)
  181.  
  182. set_hudmessage(random_num(0, 255), random_num(0, 255), random_num(0, 255), 0.50, 0.33, 1, 2.0, 8.0)
  183. show_hudmessage(g_attacker, "+%i XP", get_pcvar_num(xp_kill))
  184. }
  185.  
  186. check_level(g_attacker)
  187. }
  188. }
  189. }
  190. }
  191.  
  192. public ze_roundend()
  193. {
  194. new Alive_Terrorists_Number = GetPlayersNum(CsTeams:CS_TEAM_T)
  195. new Alive_CT_Numbers = GetPlayersNum(CsTeams:CS_TEAM_CT)
  196.  
  197. new iPlayers[32], iNum
  198. get_players(iPlayers, iNum, "ace", "CT")
  199.  
  200. for (new i = 0; i < iNum; i++)
  201. {
  202. if(PlayerLevel[iPlayers[i]] < MAXLEVEL-1)
  203. {
  204. if((Alive_CT_Numbers > Alive_Terrorists_Number) && (Alive_Terrorists_Number == 0))
  205. {
  206. set_user_xp(iPlayers[i], get_user_xp(iPlayers[i]) + get_pcvar_num(escape_xp))
  207. client_print_color(iPlayers[i], "!y[!gEscape!y-!gPark!y] !y+!t%i !gXP!y.", get_pcvar_num(escape_xp))
  208. }
  209. check_level(iPlayers[i])
  210. }
  211. }
  212. }
  213.  
  214. public on_damage(id)
  215. {
  216. static attacker,damage;
  217.  
  218. attacker = get_user_attacker(id)
  219. damage = read_data(2)
  220. if(PlayerLevel[attacker] < MAXLEVEL+1)
  221. {
  222. if ((damage >= get_pcvar_num(damage_hp)) && is_user_connected(attacker) && (cs_get_user_team(attacker) == CS_TEAM_CT) && (attacker != id))
  223. {
  224. set_user_xp(attacker, get_user_xp(attacker) + get_pcvar_num(damage_xp))
  225. 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)
  226. show_hudmessage(attacker, "+%i XP", get_pcvar_num(damage_xp))
  227. }
  228.  
  229. check_level(attacker)
  230. }
  231. }
  232.  
  233. public check_level(id)
  234. {
  235. if(PlayerLevel[id] < MAXLEVEL-1)
  236. {
  237. while(PlayerXp[id] >= LEVELS[PlayerLevel[id]])
  238. {
  239. PlayerLevel[id]++;
  240.  
  241. static name[32] ; get_user_name(id, name, charsmax(name));
  242. client_cmd(id,"spk levelup_ZE/ze_levelup.wav")
  243. client_print_color(0, "!y[!gEscape!y-!gPark!y] !gCongratulation!y. !t%s!y, !gReached Level !t%i!y.", name, PlayerLevel[id]);
  244. }
  245. }
  246. }
  247.  
  248. public MySQLx_Init()
  249. {
  250. if (!get_pcvar_num(save_type))
  251. return;
  252.  
  253. new szHost[64], szUser[32], szPass[32], szDB[128];
  254.  
  255. get_pcvar_string( mysqlx_host, szHost, charsmax( szHost ) );
  256. get_pcvar_string( mysqlx_user, szUser, charsmax( szUser ) );
  257. get_pcvar_string( mysqlx_pass, szPass, charsmax( szPass ) );
  258. get_pcvar_string( mysqlx_db, szDB, charsmax( szDB ) );
  259.  
  260. g_hTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB );
  261.  
  262. for ( new i = 0; i < sizeof szTables; i++ )
  263. {
  264. SQL_ThreadQuery( g_hTuple, "QueryCreateTable", szTables[i])
  265. }
  266. }
  267.  
  268. public QueryCreateTable( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  269. {
  270. if( iFailState == TQUERY_CONNECT_FAILED
  271. || iFailState == TQUERY_QUERY_FAILED )
  272. {
  273. log_amx( "%s", szError );
  274.  
  275. return;
  276. }
  277. }
  278.  
  279. SaveLevel(id)
  280. {
  281. new szAuth[33];
  282. new szKey[64];
  283.  
  284. if ( get_pcvar_num(savexp) == 0 )
  285. {
  286. get_user_ip( id, szAuth , charsmax(szAuth), 1);
  287. formatex( szKey , 63 , "%s-IP" , szAuth);
  288. }
  289. else if ( get_pcvar_num(savexp) == 1 )
  290. {
  291. get_user_authid( id , szAuth , charsmax(szAuth) );
  292. formatex( szKey , 63 , "%s-ID" , szAuth);
  293. }
  294. else if ( get_pcvar_num(savexp) == 2 )
  295. {
  296. get_user_name( id, szAuth , charsmax(szAuth) );
  297. formatex( szKey , 63 , "%s-NAME" , szAuth);
  298. }
  299.  
  300. if ( !get_pcvar_num(save_type) )
  301. {
  302. new szData[256];
  303.  
  304. formatex( szData , 255 , "%i#%i#" , PlayerLevel[id], PlayerXp[id] );
  305.  
  306. nvault_set( g_Vault , szKey , szData );
  307. }
  308. else
  309. {
  310. static szQuery[ 128 ];
  311.  
  312. formatex( szQuery, 127, "REPLACE INTO `mytable` (`player_id`, `player_level`, `player_xp`) VALUES ('%s', '%d', '%d');", szAuth , PlayerLevel[id], PlayerXp[id] );
  313.  
  314. SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
  315. }
  316. }
  317.  
  318. LoadLevel(id)
  319. {
  320. new szAuth[33];
  321. new szKey[40];
  322.  
  323. if ( get_pcvar_num(savexp) == 0 )
  324. {
  325. get_user_ip( id, szAuth , charsmax(szAuth), 1);
  326. formatex( szKey , 63 , "%s-IP" , szAuth);
  327. }
  328. else if ( get_pcvar_num(savexp) == 1 )
  329. {
  330. get_user_authid( id , szAuth , charsmax(szAuth) );
  331. formatex( szKey , 63 , "%s-ID" , szAuth);
  332. }
  333. else if ( get_pcvar_num(savexp) == 2 )
  334. {
  335. get_user_name( id, szAuth , charsmax(szAuth) );
  336. formatex( szKey , 63 , "%s-NAME" , szAuth);
  337. }
  338.  
  339. if ( !get_pcvar_num(save_type) )
  340. {
  341. new szData[256];
  342.  
  343. formatex(szData , 255, "%i#%i#", PlayerLevel[id], PlayerXp[id])
  344.  
  345. nvault_get(g_Vault, szKey, szData, 255)
  346.  
  347. replace_all(szData , 255, "#", " ")
  348. new xp[32], level[32]
  349. parse(szData, level, 31, xp, 31)
  350. PlayerLevel[id] = str_to_num(level)
  351. PlayerXp[id] = str_to_num(xp)
  352. }
  353. else
  354. {
  355. static szQuery[ 128 ], iData[ 1 ];
  356. formatex( szQuery, 127, "SELECT `player_level`, `player_xp` FROM `mytable` WHERE ( `player_id` = '%s' );", szAuth );
  357.  
  358. iData[ 0 ] = id;
  359. SQL_ThreadQuery( g_hTuple, "QuerySelectData", szQuery, iData, 1 );
  360. }
  361. }
  362.  
  363. public QuerySelectData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  364. {
  365. if( iFailState == TQUERY_CONNECT_FAILED
  366. || iFailState == TQUERY_QUERY_FAILED )
  367. {
  368. log_amx( "%s", szError );
  369.  
  370. return;
  371. }
  372. else
  373. {
  374. new id = iData[ 0 ];
  375.  
  376. new ColLevel = SQL_FieldNameToNum(hQuery, "player_level")
  377. new ColXp = SQL_FieldNameToNum(hQuery, "player_xp")
  378.  
  379. while (SQL_MoreResults(hQuery))
  380. {
  381. PlayerLevel[id] = SQL_ReadResult(hQuery, ColLevel);
  382. PlayerXp[id] = SQL_ReadResult(hQuery, ColXp);
  383.  
  384. SQL_NextRow(hQuery)
  385. }
  386. }
  387. }
  388.  
  389. public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  390. {
  391. if( iFailState == TQUERY_CONNECT_FAILED
  392. || iFailState == TQUERY_QUERY_FAILED )
  393. {
  394. log_amx( "%s", szError );
  395.  
  396. return;
  397. }
  398. }
  399.  
  400. //======================Natives======================//
  401.  
  402. // Native: get_user_xp
  403. public native_get_user_xp(id)
  404. {
  405. return PlayerXp[id];
  406. }
  407. // Native: set_user_xp
  408. public native_set_user_xp(id, amount)
  409. {
  410. PlayerXp[id] = amount;
  411. }
  412. // Native: get_user_level
  413. public native_get_user_level(id)
  414. {
  415. return PlayerLevel[id];
  416. }
  417. // Native: set_user_xp
  418. public native_set_user_level(id, amount)
  419. {
  420. PlayerLevel[id] = amount;
  421. }
  422. // Native: Gets user level by Xp
  423. public native_get_user_max_level(id)
  424. {
  425. return LEVELS[PlayerLevel[id]];
  426. }
  427.  
  428. //==================================================//
  429.  
  430. //======================STOCKS======================//
  431.  
  432. stock GetPlayersNum(CsTeams:iTeam) {
  433. new iNum;
  434. for( new i = 1; i <= get_maxplayers(); i++ ) {
  435. if(is_user_connected(i) && is_user_alive(i) && cs_get_user_team(i) == iTeam)
  436. iNum++;
  437. }
  438. return iNum;
  439. }
  440.  
  441. stock client_print_color(const id, const input[], any:...)
  442. {
  443. new count = 1, players[32];
  444. static msg[191];
  445. vformat(msg, 190, input, 3);
  446.  
  447. replace_all(msg, 190, "!g", "^x04"); // Green Color
  448. replace_all(msg, 190, "!y", "^x01"); // Default Color
  449. replace_all(msg, 190, "!t", "^x03"); // Team Color
  450.  
  451. if (id) players[0] = id; else get_players(players, count, "ch");
  452. {
  453. for (new i = 0; i < count; i++)
  454. {
  455. if (is_user_connected(players[i]))
  456. {
  457. message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i]);
  458. write_byte(players[i]);
  459. write_string(msg);
  460. message_end();
  461. }
  462. }
  463. }
  464. }
  465.  
  466. //==================================================//
  467. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  468. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
  469. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement