Advertisement
eyal282

Untitled

Dec 8th, 2012
372
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 35.80 KB | None | 0 0
  1. #include "gunxpmod.cfg"
  2.  
  3. #if defined ZOMBIE_BIOHAZARD
  4. #include <biohazard>
  5. #endif
  6. #if defined ZOMBIE_PLAGUE
  7. #include <zombieplague>
  8. #endif
  9.  
  10. #include <amxmodx>
  11. #include <amxmisc>
  12. #include <fakemeta>
  13. #include <fun>
  14. #include <cstrike>
  15. #include <nvault>
  16. #include <sqlx>
  17. #include <hamsandwich>
  18.  
  19. #define PLUGIN "Gun Xp Mod"
  20. #define AUTHOR "xbatista"
  21. #define VERSION "2.3"
  22.  
  23.  
  24. #define OFFSET_PRIMARYWEAPON 116
  25. #define TASK_SHOW_LEVEL 10113
  26. #define fm_cs_set_user_nobuy(%1) set_pdata_int(%1, 235, get_pdata_int(%1, 235) & ~(1<<0) ) //no weapon buy
  27.  
  28. new PlayerXp[33];
  29. new PlayerLevel[33];
  30.  
  31. new g_Vault;
  32. new g_remember_selection[33], g_kills[33], g_remember_selection_pistol[33];
  33. new g_maxplayers, g_msgHudSync1, SayTxT, enable_grenades;
  34. new levelspr, levelspr2, show_level_text, show_rank;
  35. new savexp, save_type, xp_kill, xp_triple, enable_triple, triple_kills, xp_ultra, ultra_kills, enable_ultra, p_Enabled, p_Respawn, level_style;
  36. new enable_admin_xp, admin_xp;
  37.  
  38. /*================================================================================
  39. [MySQLx Vars, other]
  40. =================================================================================*/
  41. new Handle:g_hTuple;
  42.  
  43. new mysqlx_host, mysqlx_user, mysqlx_db, mysqlx_pass;
  44.  
  45. new const szTables[][] =
  46. {
  47. "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;"
  48. }
  49.  
  50. new const WEAPONCONST[MAXLEVEL][] = { "weapon_glock18", "weapon_usp", "weapon_p228", "weapon_fiveseven", "weapon_deagle", "weapon_elite", "weapon_tmp",
  51. "weapon_mac10", "weapon_ump45", "weapon_mp5navy", "weapon_p90", "weapon_scout", "weapon_awp", "weapon_famas", "weapon_galil", "weapon_m3", "weapon_xm1014",
  52. "weapon_ak47", "weapon_m4a1", "weapon_aug", "weapon_sg552", "weapon_sg550", "weapon_g3sg1", "weapon_m249"
  53. }; // Give Weapons
  54.  
  55. new const WEAPONMDL[MAXLEVEL][] = { "models/w_glock18.mdl", "models/w_usp.mdl", "models/w_p228.mdl", "models/w_fiveseven.mdl", "models/w_deagle.mdl", "models/w_elite.mdl", "models/w_tmp.mdl",
  56. "models/w_mac10.mdl", "models/w_ump45.mdl", "models/w_mp5.mdl", "models/w_p90.mdl", "models/w_scout.mdl", "models/w_awp.mdl", "models/w_famas.mdl", "models/w_galil.mdl", "models/w_m3.mdl", "models/w_xm1014.mdl",
  57. "models/w_ak47.mdl", "models/w_m4a1.mdl", "models/w_aug.mdl", "models/w_sg552.mdl", "models/w_sg550.mdl", "models/w_g3sg1.mdl", "models/w_m249.mdl"
  58. }; // Blocks pick up weapon, don't change!
  59.  
  60. new const AMMOCONST[MAXLEVEL] = { 17, 16, 1, 11, 26, 10, 23, 7, 12, 19, 30, 3, 18,
  61. 15, 14, 21, 5, 28, 22, 8, 27, 13, 24, 20
  62. }; // Weapons ID(CSW) don't change!
  63.  
  64. /*================================================================================
  65. [Plugin natives,precache,init]
  66. =================================================================================*/
  67. public plugin_init()
  68. {
  69. register_plugin(PLUGIN, VERSION, AUTHOR);
  70. register_cvar("gxm_version", VERSION, FCVAR_SPONLY|FCVAR_SERVER)
  71. set_cvar_string("gxm_version", VERSION)
  72.  
  73. register_concmd("set_level", "cmd_give_level", ADMIN_RCON, "set_level <name> <amount>" );
  74. register_clcmd("say level", "showlevel");
  75. register_clcmd("say /level", "showlevel");
  76. register_clcmd("say /top20","showtop20");
  77. register_clcmd("say /menu","show_main_menu_info");
  78. register_clcmd("say menu","show_main_menu_info");
  79.  
  80. p_Enabled = register_cvar( "gxm_enable", "0" ); // Plugin enabled? 1 = Yes, 0 = No.
  81. save_type = register_cvar("gxm_savetype","1"); // Save Xp to : 1 = MySQL, 0 = NVault.
  82. savexp = register_cvar("gxm_save","0"); // Save Xp by : 1 = SteamID, 0 = IP.
  83. p_Respawn = register_cvar("gxm_spawn", "1"); // Respawn Dead Player
  84. xp_kill = register_cvar("gxm_xp","3"); // How much xp gain if you killed someone?
  85. show_level_text = register_cvar("gxm_level_text","0"); // Show your level by : 1 = HUD message, 0 = Simple colored text message.
  86. show_rank = register_cvar("gxm_show_rank","1"); // Show rank in /top20? 1 = Yes, 0 = No.
  87. level_style = register_cvar("gxm_level_style","0"); // You will gain each level new gun : 1 = Yes, 0 = No,select your gun by menu.
  88. enable_grenades = register_cvar("gxm_grenades","1"); // Give to player grenades? 1 = Yes, 0 = No.
  89.  
  90. enable_triple = register_cvar("gxm_triple","1"); // Enable Triple Kill bonus xp? 1 = Yes, 0 = No.
  91. xp_triple = register_cvar("gxm_triple_xp","3"); // How much bonus xp give for Triple Kill?
  92. triple_kills = register_cvar("gxm_triple_kills","3"); // How much kills needed to give bonus xp?
  93. enable_ultra = register_cvar("gxm_ultra","1"); // Enable Ultra Kill bonus xp? 1 = Yes, 0 = No.
  94. xp_ultra = register_cvar("gxm_ultra_xp","5"); // How much bonus xp give for Ultra Kill?
  95. ultra_kills = register_cvar("gxm_ultra_kills","6"); // How much kills needed to give bonus xp?
  96.  
  97. enable_admin_xp = register_cvar("gxm_admin_xp","1"); // Enable Extra xp for killing? 1 = Yes, 0 = No.
  98. admin_xp = register_cvar("gxm_extra_xp","6"); // How much extra xp give to admins?
  99.  
  100. // SQLx cvars
  101. mysqlx_host = register_cvar ("gxm_host", ""); // The host from the db
  102. mysqlx_user = register_cvar ("gxm_user", ""); // The username from the db login
  103. mysqlx_pass = register_cvar ("gxm_pass", ""); // The password from the db login
  104. mysqlx_db = register_cvar ("gxm_dbname", ""); // The database name
  105.  
  106. // Events //
  107. register_event("DeathMsg", "event_deathmsg", "a");
  108. register_event("StatusValue", "Event_StatusValue", "bd", "1=2")
  109.  
  110. // Forwards //
  111. RegisterHam(Ham_Spawn, "player", "fwd_PlayerSpawn", 1);
  112. RegisterHam(Ham_Killed, "player", "FwdHamPlayerKilled", 1)
  113.  
  114. register_forward(FM_Touch, "fwd_Touch");
  115.  
  116. // Messages //
  117. #if defined NORMAL_MOD || defined ZOMBIE_SWARM
  118. register_message(get_user_msgid("StatusIcon"), "Message_StatusIcon")
  119. #endif
  120.  
  121. // Other //
  122. register_menucmd(register_menuid("Main Menu"), 1023, "main_menu_info")
  123.  
  124. register_dictionary("gunxpmod.txt");
  125. MySQLx_Init()
  126.  
  127. SayTxT = get_user_msgid("SayText");
  128.  
  129. g_msgHudSync1 = CreateHudSyncObj()
  130. g_maxplayers = get_maxplayers();
  131. }
  132. public plugin_natives()
  133. {
  134. // Player natives //
  135. register_native("get_user_xp", "native_get_user_xp", 1);
  136. register_native("set_user_xp", "native_set_user_xp", 1);
  137. register_native("get_user_level", "native_get_user_level", 1);
  138. register_native("set_user_level", "native_set_user_level", 1);
  139. register_native("get_user_max_level", "native_get_user_max_level", 1);
  140. }
  141. public plugin_precache()
  142. {
  143. levelspr = engfunc(EngFunc_PrecacheModel, "sprites/xfire.spr");
  144. levelspr2 = engfunc(EngFunc_PrecacheModel, "sprites/xfire2.spr");
  145.  
  146. engfunc(EngFunc_PrecacheSound, LevelUp);
  147. }
  148. public plugin_cfg()
  149. {
  150. new ConfDir[32], File[192];
  151.  
  152. get_configsdir( ConfDir, charsmax( ConfDir ) );
  153. formatex( File, charsmax( File ), "%s/gunxpmod.cfg", ConfDir );
  154.  
  155. if( !file_exists( File ) )
  156. {
  157. server_print( "File %s doesn't exist!", File );
  158. write_file( File, " ", -1 );
  159. }
  160. else
  161. {
  162. server_print( "%s successfully loaded.", File );
  163. server_cmd( "exec %s", File );
  164. }
  165.  
  166. //Open our vault and have g_Vault store the handle.
  167. g_Vault = nvault_open( "gunxpmod" );
  168.  
  169. //Make the plugin error if vault did not successfully open
  170. if ( g_Vault == INVALID_HANDLE )
  171. set_fail_state( "Error opening GunXpMod nVault, file does not exist!" );
  172. }
  173. public plugin_end()
  174. {
  175. //Close the vault when the plugin ends (map change\server shutdown\restart)
  176. nvault_close( g_Vault );
  177. }
  178. public client_connect(id)
  179. {
  180. g_remember_selection[id] = MAX_PISTOLS_MENU;
  181. g_remember_selection_pistol[id] = 0;
  182.  
  183. LoadLevel(id)
  184. }
  185. public client_disconnect(id)
  186. {
  187. SaveLevel(id)
  188.  
  189. PlayerXp[id] = 0;
  190. PlayerLevel[id] = 0;
  191.  
  192. remove_task( TASK_SHOW_LEVEL + id );
  193. }
  194. public Message_StatusIcon(iMsgId, MSG_DEST, id)
  195. {
  196. if( !get_pcvar_num(p_Enabled) )
  197. return PLUGIN_HANDLED;
  198.  
  199. static szIcon[5]
  200. get_msg_arg_string(2, szIcon, 4)
  201. if( szIcon[0] == 'b' && szIcon[2] == 'y' && szIcon[3] == 'z' )
  202. {
  203. if( get_msg_arg_int(1))
  204. {
  205. fm_cs_set_user_nobuy(id)
  206. return PLUGIN_HANDLED;
  207. }
  208. }
  209.  
  210. return PLUGIN_CONTINUE;
  211. }
  212. public fwd_Touch(ent, id)
  213. {
  214. if (!is_user_alive(id) || !pev_valid( ent ) || !get_pcvar_num(p_Enabled))
  215. return FMRES_IGNORED;
  216.  
  217. static szEntModel[32];
  218. pev( ent , pev_model , szEntModel , 31 );
  219.  
  220. for (new level_equip_id = PlayerLevel[id] + 1; level_equip_id < MAXLEVEL; level_equip_id++)
  221. {
  222. if ( equali( szEntModel , WEAPONMDL[level_equip_id] ) )
  223. {
  224. return FMRES_SUPERCEDE;
  225. }
  226. }
  227.  
  228. return FMRES_IGNORED;
  229. }
  230. public FwdHamPlayerKilled(id)
  231. {
  232.  
  233. if(get_pcvar_num(p_Enabled) && get_pcvar_num(p_Respawn) && !defined ZOMBIE_SWARM) {
  234. set_task(1.0, "SpawnUser", id)
  235. }
  236. }
  237. public SpawnUser(id)
  238. {
  239. ExecuteHamB(Ham_CS_RoundRespawn, id)
  240. }
  241.  
  242. public fwd_PlayerSpawn(id)
  243. {
  244. if( !get_pcvar_num(p_Enabled) || !is_user_alive(id) )
  245. return;
  246.  
  247. g_kills[id] = 0
  248.  
  249. #if defined ZOMBIE_SWARM
  250. if ( !get_pcvar_num(level_style) && cs_get_user_team(id) == CS_TEAM_CT )
  251. {
  252. StripPlayerWeapons(id);
  253.  
  254. set_task(2.0, "show_main_menu_level", id)
  255. }
  256. #endif
  257.  
  258. #if defined NORMAL_MOD || defined ZOMBIE_INFECTION
  259. if ( !get_pcvar_num(level_style))
  260. {
  261. StripPlayerWeapons(id);
  262.  
  263. set_task(2.0, "show_main_menu_level", id)
  264. }
  265. #endif
  266.  
  267. if( get_pcvar_num(show_level_text) )
  268. {
  269. remove_task( TASK_SHOW_LEVEL + id );
  270.  
  271. set_task(0.1, "task_show_level", TASK_SHOW_LEVEL + id)
  272. }
  273.  
  274. #if defined ZOMBIE_SWARM
  275. if ( get_pcvar_num(level_style))
  276. {
  277. StripPlayerWeapons(id);
  278.  
  279. set_task(2.0, "show_main_menu_level", id)
  280. }
  281. #endif
  282.  
  283. #if defined NORMAL_MOD || defined ZOMBIE_INFECTION
  284. if ( get_pcvar_num(level_style) )
  285. {
  286. StripPlayerWeapons(id);
  287.  
  288. set_task(2.0, "show_main_menu_level", id)
  289. }
  290. #endif
  291.  
  292. }
  293.  
  294. #if defined ZOMBIE_PLAGUE
  295. public zp_user_humanized_post(id, survivor)
  296. {
  297. if( !get_pcvar_num(p_Enabled) || !is_user_alive(id) )
  298. return;
  299.  
  300. set_task(1.0, "show_main_menu_level", id);
  301. }
  302. #endif
  303.  
  304. #if defined ZOMBIE_BIOHAZARD
  305. public event_infect(g_victim, g_attacker)
  306. {
  307. if( !get_pcvar_num(p_Enabled) )
  308. return;
  309.  
  310. new counted_triple = get_pcvar_num(xp_kill) + get_pcvar_num(xp_triple) + get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0
  311. new counted_ultra = get_pcvar_num(xp_kill) + get_pcvar_num(xp_ultra) + get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0
  312.  
  313. if((1 <= g_attacker <= g_maxplayers))
  314. {
  315. if(g_victim != g_attacker)
  316. {
  317. g_kills[g_attacker]++;
  318. if(PlayerLevel[g_attacker] < MAXLEVEL-1)
  319. {
  320. if ( get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA)
  321. {
  322. PlayerXp[g_attacker] += get_pcvar_num(admin_xp)
  323. }
  324.  
  325. if ( g_kills[g_attacker] == get_pcvar_num(triple_kills) && get_pcvar_num(enable_triple) )
  326. {
  327. PlayerXp[g_attacker] += counted_triple
  328.  
  329. set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
  330. show_hudmessage(g_attacker, "%L", LANG_SERVER, "TRIPLE_XP", counted_triple + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
  331. }
  332. else if ( g_kills[g_attacker] == get_pcvar_num(ultra_kills) && get_pcvar_num(enable_ultra) )
  333. {
  334. PlayerXp[g_attacker] += counted_ultra
  335.  
  336. set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
  337. show_hudmessage(g_attacker, "%L", LANG_SERVER, "ULTRA_XP", counted_ultra + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
  338. }
  339. else
  340. {
  341. PlayerXp[g_attacker] += get_pcvar_num(xp_kill)
  342.  
  343. set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
  344. show_hudmessage(g_attacker, "+%i", (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0) + get_pcvar_num(xp_kill) )
  345. }
  346.  
  347. check_level(g_attacker)
  348. }
  349. }
  350. }
  351. }
  352. #endif
  353.  
  354. #if defined ZOMBIE_PLAGUE
  355. public zp_user_infected_post(g_victim, g_attacker)
  356. {
  357. if( !get_pcvar_num(p_Enabled) )
  358. return;
  359.  
  360. new counted_triple = get_pcvar_num(xp_kill) + get_pcvar_num(xp_triple)
  361. new counted_ultra = get_pcvar_num(xp_kill) + get_pcvar_num(xp_ultra)
  362.  
  363. if((1 <= g_attacker <= g_maxplayers))
  364. {
  365. if(g_victim != g_attacker)
  366. {
  367. g_kills[g_attacker]++;
  368. if(PlayerLevel[g_attacker] < MAXLEVEL-1)
  369. {
  370. if ( get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA)
  371. {
  372. PlayerXp[g_attacker] += get_pcvar_num(admin_xp)
  373. }
  374.  
  375. if ( g_kills[g_attacker] == get_pcvar_num(triple_kills) && get_pcvar_num(enable_triple) )
  376. {
  377. PlayerXp[g_attacker] += counted_triple
  378.  
  379. set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
  380. show_hudmessage(g_attacker, "%L", LANG_SERVER, "TRIPLE_XP", counted_triple + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
  381. }
  382. else if ( g_kills[g_attacker] == get_pcvar_num(ultra_kills) && get_pcvar_num(enable_ultra) )
  383. {
  384. PlayerXp[g_attacker] += counted_ultra
  385.  
  386. set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
  387. show_hudmessage(g_attacker, "%L", LANG_SERVER, "ULTRA_XP", counted_ultra + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
  388. }
  389. else
  390. {
  391. PlayerXp[g_attacker] += get_pcvar_num(xp_kill)
  392.  
  393. set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
  394. show_hudmessage(g_attacker, "+%i", (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0) + get_pcvar_num(xp_kill) )
  395. }
  396.  
  397. check_level(g_attacker)
  398. }
  399. }
  400. }
  401. }
  402. #endif
  403.  
  404. public event_deathmsg()
  405. {
  406. if( !get_pcvar_num(p_Enabled) )
  407. return;
  408.  
  409. new g_attacker = read_data(1);
  410. new g_victim = read_data(2);
  411.  
  412. new counted_triple = get_pcvar_num(xp_kill) + get_pcvar_num(xp_triple)
  413. new counted_ultra = get_pcvar_num(xp_kill) + get_pcvar_num(xp_ultra)
  414.  
  415. if((1 <= g_attacker <= g_maxplayers))
  416. {
  417. if(g_victim != g_attacker)
  418. {
  419. g_kills[g_attacker]++;
  420. if(PlayerLevel[g_attacker] < MAXLEVEL-1)
  421. {
  422. if ( get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA)
  423. {
  424. PlayerXp[g_attacker] += get_pcvar_num(admin_xp)
  425. }
  426.  
  427. if ( g_kills[g_attacker] == get_pcvar_num(triple_kills) && get_pcvar_num(enable_triple) )
  428. {
  429. PlayerXp[g_attacker] += counted_triple
  430.  
  431. set_hudmessage(0, 40, 255, 0.50, 0.33, 1, 2.0, 2.0)
  432. show_hudmessage(g_attacker, "%L", LANG_SERVER, "TRIPLE_XP", counted_triple + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
  433. }
  434. else if ( g_kills[g_attacker] == get_pcvar_num(ultra_kills) && get_pcvar_num(enable_ultra) )
  435. {
  436. PlayerXp[g_attacker] += counted_ultra
  437.  
  438. set_hudmessage(255, 30, 0, 0.50, 0.33, 1, 2.0, 2.0)
  439. show_hudmessage(g_attacker, "%L", LANG_SERVER, "ULTRA_XP", counted_ultra + (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0))
  440. }
  441. else
  442. {
  443. PlayerXp[g_attacker] += get_pcvar_num(xp_kill)
  444.  
  445. set_hudmessage(0, 255, 50, 0.50, 0.33, 1, 2.0, 2.0)
  446. show_hudmessage(g_attacker, "+%i", (get_pcvar_num(enable_admin_xp) && get_user_flags(g_attacker) & ADMIN_EXTRA ? get_pcvar_num(admin_xp) : 0) + get_pcvar_num(xp_kill) )
  447. }
  448.  
  449. check_level(g_attacker)
  450. }
  451. }
  452. }
  453. }
  454. public Event_StatusValue(id)
  455. {
  456. new target = read_data(2)
  457. if(target != id && target != 0 && get_pcvar_num(p_Enabled))
  458. {
  459. static sName[32];
  460. get_user_name(target, sName, 31)
  461.  
  462. set_hudmessage(255, 255, 255, 0.6, -1.0, 0, 0.0, 6.0, 0.0, 0.0, 2)
  463. ShowSyncHudMsg(id, g_msgHudSync1, "%L", LANG_SERVER, "LEVEL_TEXT", sName, PlayerLevel[target], RANKLEVELS[PlayerLevel[target]])
  464. }
  465. }
  466. public task_show_level(task)
  467. {
  468. new id = task - TASK_SHOW_LEVEL
  469.  
  470. if(!is_user_alive(id) || !get_pcvar_num(show_level_text) || !get_pcvar_num(p_Enabled) )
  471. return;
  472.  
  473. set_hudmessage(255, 0, 0, 0.02, 0.33, 0, 0.0, 0.3, 0.0, 0.0)
  474. ShowSyncHudMsg(id, g_msgHudSync1 , "%L", LANG_SERVER, "LEVEL_HUD_TEXT", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]], RANK[PlayerLevel[id]], RANKLEVELS[PlayerLevel[id]])
  475.  
  476. set_task(0.1, "task_show_level", TASK_SHOW_LEVEL + id)
  477. }
  478. public showlevel(id)
  479. {
  480. if ( !get_pcvar_num(p_Enabled) || get_pcvar_num(show_level_text) )
  481. return PLUGIN_HANDLED;
  482.  
  483. client_printcolor(id, "%L", LANG_SERVER, "LEVEL_TEXT2", PlayerLevel[id] , PlayerXp[id], LEVELS[PlayerLevel[id]]);
  484. client_printcolor(id, "%L", LANG_SERVER, "LEVEL_TEXT3", RANK[PlayerLevel[id]], RANKLEVELS[PlayerLevel[id]]);
  485.  
  486. return PLUGIN_HANDLED;
  487. }
  488. public descriptionx(id)
  489. {
  490. new szMotd[2048], szTitle[64], iPos = 0
  491. format(szTitle, 63, "Info")
  492. iPos += format(szMotd[iPos], 2047-iPos, "<html><head><style type=^"text/css^">pre{color:#FFB000;}body{background:#000000;margin-left:8px;margin-top:0px;}</style></head><pre><body>")
  493. iPos += format(szMotd[iPos], 2047-iPos, "^n^n<b>%s</b>^n^n", szTitle)
  494. iPos += format(szMotd[iPos], 2047-iPos, "%L^n", LANG_SERVER, "DESCRIPTION")
  495.  
  496. iPos += format(szMotd[iPos], 2047-iPos, "%L", LANG_SERVER, "DESCRIPTION2")
  497.  
  498. show_motd(id, szMotd, szTitle)
  499. return PLUGIN_HANDLED;
  500. }
  501. public check_level(id)
  502. {
  503. if(PlayerLevel[id] < MAXLEVEL-1 && get_pcvar_num(p_Enabled))
  504. {
  505. while(PlayerXp[id] >= LEVELS[PlayerLevel[id]])
  506. {
  507. PlayerLevel[id]++;
  508.  
  509. if(is_user_alive(id))
  510. {
  511. if ( get_pcvar_num(level_style) )
  512. {
  513. give_weapon(id);
  514. }
  515.  
  516. new p_origin[3];
  517. get_user_origin(id, p_origin, 0);
  518.  
  519. set_sprite(p_origin, levelspr, 30)
  520. set_sprite(p_origin, levelspr2, 30)
  521. }
  522. emit_sound(id, CHAN_ITEM, LevelUp, 1.0, ATTN_NORM, 0, PITCH_NORM);
  523.  
  524. static name[32] ; get_user_name(id, name, charsmax(name));
  525. client_printcolor(0, "%L", LANG_SERVER, "LEVEL_UP", name, PlayerLevel[id]);
  526. }
  527. }
  528. }
  529. // Main Menu Info
  530. public show_main_menu_info(id)
  531. {
  532. if ( !get_pcvar_num(p_Enabled) )
  533. return;
  534.  
  535. static menu[510], len;
  536. len = 0;
  537.  
  538. new xKeys3 = MENU_KEY_0|MENU_KEY_1;
  539.  
  540. // Title
  541. len += formatex(menu[len], sizeof menu - 1 - len, "%L", LANG_SERVER, "TITLE_MENU_INFO")
  542.  
  543. len += formatex(menu[len], sizeof menu - 1 - len, "\r1. \w%L", id, "INFO")
  544. if ( get_pcvar_num(show_rank) )
  545. {
  546. xKeys3 |= (MENU_KEY_2)
  547.  
  548. len += formatex(menu[len], sizeof menu - 1 - len, "^n\r2. \wTop 20^n")
  549. }
  550. else
  551. {
  552. len += formatex(menu[len], sizeof menu - 1 - len, "^n\d2. Top 20^n")
  553. }
  554.  
  555. if(find_plugin_byfile("gunxpmod_shop.amxx") != INVALID_PLUGIN_ID)
  556. {
  557. xKeys3 |= (MENU_KEY_3)
  558.  
  559. len += formatex(menu[len], sizeof menu - 1 - len, "\r3. \w%L^n", id, "ITEM_LIST")
  560. if ( is_user_alive(id) )
  561. {
  562. xKeys3 |= (MENU_KEY_4)
  563.  
  564. len += formatex(menu[len], sizeof menu - 1 - len, "\r4. \w%L^n", id, "UNLOCKS_SHOP_TEXT")
  565. }
  566. }
  567.  
  568. len += formatex(menu[len], sizeof menu - 1 - len, "^n^n\r0.\w %L", id, "EXIT_MENU")
  569.  
  570. show_menu(id, xKeys3, menu, -1, "Main Menu")
  571. }
  572. public main_menu_info(id, key)
  573. {
  574. switch (key)
  575. {
  576. case 0:
  577. {
  578. show_main_menu_info(id)
  579.  
  580. descriptionx(id)
  581. }
  582. case 1:
  583. {
  584. showtop20(id)
  585.  
  586. show_main_menu_info(id)
  587. }
  588. case 2:
  589. {
  590. show_main_menu_info(id)
  591.  
  592. if(callfunc_begin( "display_items","gunxpmod_shop.amxx") == 1)
  593. {
  594. callfunc_push_int( id );
  595. callfunc_end();
  596. }
  597. }
  598. case 3:
  599. {
  600. if(callfunc_begin("item_upgrades","gunxpmod_shop.amxx") == 1)
  601. {
  602. callfunc_push_int( id );
  603. callfunc_end();
  604. }
  605. }
  606. case 9:
  607. {
  608. return PLUGIN_HANDLED;
  609. }
  610. }
  611.  
  612. return PLUGIN_HANDLED;
  613. }
  614. // Main Menu Level Style
  615. public show_main_menu_level(id)
  616. {
  617. if ( !is_user_alive(id) )
  618. return;
  619.  
  620. new szInfo[60], szChooseT[40], szLastG[40];
  621. formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
  622.  
  623. new menu = menu_create(szInfo , "main_menu_level");
  624.  
  625. formatex(szChooseT, charsmax(szChooseT), "%L", LANG_SERVER, "CHOOSE_TEXT");
  626. menu_additem(menu, szChooseT, "1", 0);
  627.  
  628. formatex(szLastG, charsmax(szLastG), "%L", LANG_SERVER, "LAST_GUNS");
  629. menu_additem(menu, szLastG, "2", 0);
  630.  
  631. new szExit[15];
  632. formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
  633.  
  634. menu_setprop(menu, MPROP_EXITNAME, szExit);
  635.  
  636. menu_display(id , menu , 0);
  637. }
  638. public main_menu_level(id , menu , item)
  639. {
  640. if ( !is_user_alive(id) )
  641. {
  642. return PLUGIN_HANDLED;
  643. }
  644.  
  645. #if defined ZOMBIE_PLAGUE
  646. if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
  647. return PLUGIN_HANDLED;
  648. #endif
  649.  
  650. if(item == MENU_EXIT)
  651. {
  652. menu_destroy(menu);
  653. return PLUGIN_HANDLED;
  654. }
  655. new data[6], iName[64];
  656. new access, callback;
  657. menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
  658.  
  659. new item_id = str_to_num(data);
  660.  
  661. switch (item_id)
  662. {
  663. case 1: // show pistols
  664. {
  665. show_menu_level_pistol(id);
  666. }
  667. case 2: // last weapons
  668. {
  669. if ( PlayerLevel[id] > MAX_PISTOLS_MENU - 1 )
  670. {
  671. give_weapon_menu(id, g_remember_selection[id], 1, 1);
  672. give_weapon_menu(id, g_remember_selection_pistol[id], 0, 0);
  673. }
  674. else if ( PlayerLevel[id] < MAX_PISTOLS_MENU )
  675. {
  676. give_weapon_menu(id, g_remember_selection_pistol[id], 1, 1);
  677. }
  678. }
  679. }
  680.  
  681. menu_destroy(menu);
  682. return PLUGIN_HANDLED;
  683. }
  684. // Menu Level Style Pistols
  685. public show_menu_level_pistol(id)
  686. {
  687. if ( !is_user_alive(id) )
  688. return;
  689.  
  690. new szInfo[60];
  691. formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
  692.  
  693. new menu = menu_create(szInfo , "pistol_menu");
  694.  
  695. for (new item_id = 0; item_id < MAX_PISTOLS_MENU; item_id++)
  696. {
  697. new szItems[60], szTempid[32];
  698.  
  699. if ( PlayerLevel[id] >= GUN_LEVELS[item_id] )
  700. {
  701. formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "ACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
  702.  
  703. num_to_str(item_id, szTempid, charsmax(szTempid) );
  704.  
  705. menu_additem(menu, szItems, szTempid, 0);
  706. }
  707.  
  708. else
  709. {
  710. formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "INACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
  711. menu_additem(menu, szItems, "999", 0, menu_makecallback("CallbackMenu"));
  712. }
  713. }
  714.  
  715. new szNext[15], szBack[15], szExit[15];
  716. formatex(szBack, charsmax(szBack), "%L", LANG_SERVER, "BACK_MENU");
  717. formatex(szNext, charsmax(szNext), "%L", LANG_SERVER, "NEXT_MENU");
  718. formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
  719.  
  720. menu_setprop(menu, MPROP_BACKNAME, szBack)
  721. menu_setprop(menu, MPROP_NEXTNAME, szNext)
  722. menu_setprop(menu, MPROP_EXITNAME, szExit)
  723.  
  724. menu_display(id , menu , 0);
  725. }
  726. public pistol_menu(id , menu , item)
  727. {
  728. if ( !is_user_alive(id) )
  729. {
  730. return PLUGIN_HANDLED;
  731. }
  732.  
  733. #if defined ZOMBIE_PLAGUE
  734. if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
  735. return PLUGIN_HANDLED;
  736. #endif
  737.  
  738. if(item == MENU_EXIT)
  739. {
  740. menu_destroy(menu);
  741. return PLUGIN_HANDLED;
  742. }
  743. new data[6], iName[64];
  744. new access, callback;
  745. menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
  746.  
  747. new item_id = str_to_num(data);
  748.  
  749. g_remember_selection_pistol[id] = item_id;
  750.  
  751. give_weapon_menu(id, item_id, 1, 1);
  752.  
  753. if ( PlayerLevel[id] > MAX_PISTOLS_MENU - 1 )
  754. {
  755. show_menu_level(id);
  756. }
  757.  
  758. menu_destroy(menu);
  759. return PLUGIN_HANDLED;
  760. }
  761. // Menu Level Style Primary
  762. public show_menu_level(id)
  763. {
  764. if ( !is_user_alive(id) || PlayerLevel[id] < MAX_PISTOLS_MENU )
  765. return;
  766.  
  767. new szInfo[100];
  768. formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
  769.  
  770. new menu = menu_create(szInfo , "level_menu");
  771.  
  772. for (new item_id = MAX_PISTOLS_MENU; item_id < MAXLEVEL; item_id++)
  773. {
  774. new szItems[512], szTempid[32];
  775.  
  776. if ( PlayerLevel[id] >= GUN_LEVELS[item_id] )
  777. {
  778. formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "ACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
  779.  
  780. num_to_str(item_id, szTempid, charsmax(szTempid) );
  781.  
  782. menu_additem(menu, szItems, szTempid, 0);
  783. }
  784. else
  785. {
  786. formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "INACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
  787. menu_additem(menu, szItems, "999", 0, menu_makecallback("CallbackMenu"));
  788. }
  789. }
  790.  
  791. new szNext[15], szBack[15], szExit[15];
  792. formatex(szBack, charsmax(szBack), "%L", LANG_SERVER, "BACK_MENU");
  793. formatex(szNext, charsmax(szNext), "%L", LANG_SERVER, "NEXT_MENU");
  794. formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
  795.  
  796. menu_setprop(menu, MPROP_BACKNAME, szBack)
  797. menu_setprop(menu, MPROP_NEXTNAME, szNext)
  798. menu_setprop(menu, MPROP_EXITNAME, szExit)
  799.  
  800. menu_display(id , menu , 0);
  801. }
  802. public level_menu(id , menu , item)
  803. {
  804. if ( !is_user_alive(id) || PlayerLevel[id] < MAX_PISTOLS_MENU )
  805. {
  806. return PLUGIN_HANDLED;
  807. }
  808.  
  809. #if defined ZOMBIE_PLAGUE
  810. if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
  811. return PLUGIN_HANDLED;
  812. #endif
  813.  
  814. if(item == MENU_EXIT)
  815. {
  816. menu_destroy(menu);
  817. return PLUGIN_HANDLED;
  818. }
  819. new data[6], iName[64];
  820. new access, callback;
  821. menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
  822.  
  823. new item_id = str_to_num(data);
  824.  
  825. g_remember_selection[id] = item_id;
  826.  
  827. give_weapon_menu(id, item_id, 0, 0);
  828.  
  829. menu_destroy(menu);
  830. return PLUGIN_HANDLED;
  831. }
  832. public CallbackMenu(id, menu, item)
  833. {
  834. return ITEM_DISABLED;
  835. }
  836.  
  837. // Selected by menu or remember selection and give item
  838. public give_weapon_menu(id, selection, strip, givegren)
  839. {
  840. #if defined ZOMBIE_SWARM
  841. if( is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT && get_pcvar_num(p_Enabled) )
  842. {
  843. if ( strip )
  844. {
  845. StripPlayerWeapons(id);
  846. }
  847.  
  848. if ( get_pcvar_num(enable_grenades) && givegren )
  849. {
  850. give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
  851. give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
  852. give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
  853. give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
  854. }
  855.  
  856. give_item(id, WEAPONCONST[selection]);
  857.  
  858. cs_set_user_bpammo(id, AMMOCONST[selection], AMMO2CONST[selection])
  859. }
  860. #endif
  861.  
  862. #if defined ZOMBIE_INFECTION || defined NORMAL_MOD
  863. if(is_user_alive(id) && get_pcvar_num(p_Enabled))
  864. {
  865. if ( strip )
  866. {
  867. StripPlayerWeapons(id);
  868. }
  869.  
  870. if ( get_pcvar_num(enable_grenades) && givegren )
  871. {
  872. give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
  873. give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
  874. give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
  875. give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
  876. }
  877.  
  878. give_item(id, WEAPONCONST[selection]);
  879.  
  880. cs_set_user_bpammo(id, AMMOCONST[selection], AMMO2CONST[selection])
  881. }
  882. #endif
  883. }
  884. public give_weapon(id)
  885. {
  886. #if defined ZOMBIE_SWARM
  887. if( is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT && get_pcvar_num(p_Enabled))
  888. {
  889. StripPlayerWeapons(id);
  890.  
  891. if ( get_pcvar_num(enable_grenades) && get_pcvar_num(level_style) )
  892. {
  893. give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
  894. give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
  895. give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
  896. give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
  897. }
  898.  
  899. give_item(id, WEAPONCONST[PlayerLevel[id]]);
  900.  
  901. cs_set_user_bpammo(id, AMMOCONST[PlayerLevel[id]], AMMO2CONST[PlayerLevel[id]])
  902. }
  903. #endif
  904.  
  905. #if defined ZOMBIE_INFECTION || defined NORMAL_MOD
  906. if(is_user_alive(id) && get_pcvar_num(p_Enabled))
  907. {
  908. StripPlayerWeapons(id);
  909.  
  910. if ( get_pcvar_num(enable_grenades) && get_pcvar_num(level_style) )
  911. {
  912. give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
  913. give_item(id, FLASHBANG_LEVEL[PlayerLevel[id]]);
  914. give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
  915. give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
  916. }
  917.  
  918. give_item(id, WEAPONCONST[PlayerLevel[id]]);
  919.  
  920. cs_set_user_bpammo(id, AMMOCONST[PlayerLevel[id]], AMMO2CONST[PlayerLevel[id]])
  921. }
  922. #endif
  923. }
  924. public set_sprite(p_origin[3], sprite, radius)
  925. {
  926. // Explosion
  927. message_begin(MSG_BROADCAST, SVC_TEMPENTITY, p_origin)
  928. write_byte(TE_EXPLOSION)
  929. write_coord(p_origin[0])
  930. write_coord(p_origin[1])
  931. write_coord(p_origin[2])
  932. write_short(sprite)
  933. write_byte(radius)
  934. write_byte(15)
  935. write_byte(4)
  936. message_end()
  937. }
  938. //Shows Top 20
  939. public showtop20(id)
  940. {
  941. if( !get_pcvar_num(p_Enabled) && !get_pcvar_num(show_rank) )
  942. return;
  943.  
  944. static Sort[33][2];
  945. new players[32],num,count,index;
  946. get_players(players,num);
  947.  
  948. for(new i = 0; i < num; i++)
  949. {
  950. index = players[i];
  951. Sort[count][0] = index;
  952. Sort[count][1] = PlayerXp[index];
  953. count++;
  954. }
  955.  
  956. SortCustom2D(Sort,count,"CompareXp");
  957. new motd[1501],iLen;
  958. iLen = formatex(motd, sizeof motd - 1,"<body bgcolor=#000000><font color=#98f5ff><pre>");
  959. iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s %-22.22s %3s^n", "#", "Name", "# Experience");
  960.  
  961. new y = clamp(count,0,20);
  962. new name[32],kindex;
  963.  
  964. for(new x = 0; x < y; x++)
  965. {
  966. kindex = Sort[x][0];
  967. get_user_name(kindex,name,sizeof name - 1);
  968. iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%d %-22.22s %d^n", x + 1, name, Sort[x][1]);
  969. }
  970. iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"</body></font></pre>");
  971. show_motd(id,motd, "GunXpMod Top 20");
  972. }
  973. public CompareXp(elem1[], elem2[])
  974. {
  975. if(elem1[1] > elem2[1])
  976. return -1;
  977. else if(elem1[1] < elem2[1])
  978. return 1;
  979.  
  980. return 0;
  981. }
  982. // Command to set player Level
  983. public cmd_give_level(id, level, cid)
  984. {
  985. if( !cmd_access(id, level, cid, 3) || !get_pcvar_num(p_Enabled) )
  986. {
  987. return PLUGIN_HANDLED;
  988. }
  989.  
  990. new Arg1[64], Target
  991. read_argv(1, Arg1, 63)
  992. Target = cmd_target(id, Arg1, 0)
  993.  
  994. new iLevel[32], Value
  995. read_argv(2, iLevel, 31)
  996. Value = str_to_num(iLevel)
  997.  
  998. if(iLevel[0] == '-')
  999. {
  1000. console_print(id, "You can't have a '-' in the value!")
  1001. return PLUGIN_HANDLED;
  1002. }
  1003.  
  1004. if(!Target)
  1005. {
  1006. console_print(id, "Target not found!")
  1007. return PLUGIN_HANDLED;
  1008. }
  1009.  
  1010. if(Value > MAXLEVEL-1)
  1011. {
  1012. console_print(id, "You can't set a more than %d!", MAXLEVEL-1)
  1013. return PLUGIN_HANDLED;
  1014. }
  1015.  
  1016. if(Value < 1)
  1017. {
  1018. console_print(id, "You can't set less than 1!")
  1019. return PLUGIN_HANDLED;
  1020. }
  1021.  
  1022. new AdminName[32]
  1023. get_user_name(id, AdminName, 31)
  1024.  
  1025. new TargetName[32]
  1026. get_user_name(Target, TargetName, 31)
  1027.  
  1028. PlayerLevel[Target] = Value - 1
  1029. PlayerXp[Target] = LEVELS[PlayerLevel[Target]]
  1030. check_level(Target)
  1031.  
  1032. client_printcolor(Target, "/gADMIN: /ctr%s /yhas set your level to /g%d", AdminName, Value)
  1033.  
  1034. return PLUGIN_HANDLED;
  1035. }
  1036.  
  1037. // ============================================================//
  1038. // [~ Saving datas ~] //
  1039. // ============================================================//
  1040. public MySQLx_Init()
  1041. {
  1042. if ( !get_pcvar_num(p_Enabled) || !get_pcvar_num(save_type) )
  1043. return;
  1044.  
  1045. new szHost[64], szUser[32], szPass[32], szDB[128];
  1046.  
  1047. get_pcvar_string( mysqlx_host, szHost, charsmax( szHost ) );
  1048. get_pcvar_string( mysqlx_user, szUser, charsmax( szUser ) );
  1049. get_pcvar_string( mysqlx_pass, szPass, charsmax( szPass ) );
  1050. get_pcvar_string( mysqlx_db, szDB, charsmax( szDB ) );
  1051.  
  1052. g_hTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB );
  1053.  
  1054. for ( new i = 0; i < sizeof szTables; i++ )
  1055. {
  1056. SQL_ThreadQuery( g_hTuple, "QueryCreateTable", szTables[i])
  1057. }
  1058. }
  1059. public QueryCreateTable( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  1060. {
  1061. if( iFailState == TQUERY_CONNECT_FAILED
  1062. || iFailState == TQUERY_QUERY_FAILED )
  1063. {
  1064. log_amx( "%s", szError );
  1065.  
  1066. return;
  1067. }
  1068. }
  1069.  
  1070. SaveLevel(id)
  1071. {
  1072. new szAuth[33];
  1073. new szKey[64];
  1074.  
  1075. if ( get_pcvar_num(savexp) == 0 )
  1076. {
  1077. get_user_ip( id, szAuth , charsmax(szAuth), 1);
  1078. formatex( szKey , 63 , "%s-IP" , szAuth);
  1079. }
  1080. else if ( get_pcvar_num(savexp) == 1 )
  1081. {
  1082. get_user_authid( id , szAuth , charsmax(szAuth) );
  1083. formatex( szKey , 63 , "%s-ID" , szAuth);
  1084. }
  1085. else if ( get_pcvar_num(savexp) == 2 )
  1086. {
  1087. get_user_name( id, szAuth , charsmax(szAuth) );
  1088. formatex( szKey , 63 , "%s-NAME" , szAuth);
  1089. }
  1090.  
  1091. if ( !get_pcvar_num(save_type) )
  1092. {
  1093. new szData[256];
  1094.  
  1095. formatex( szData , 255 , "%i#%i#" , PlayerLevel[id], PlayerXp[id] );
  1096.  
  1097. nvault_set( g_Vault , szKey , szData );
  1098. }
  1099. else
  1100. {
  1101. static szQuery[ 128 ];
  1102.  
  1103. formatex( szQuery, 127, "REPLACE INTO `mytable` (`player_id`, `player_level`, `player_xp`) VALUES ('%s', '%d', '%d');", szAuth , PlayerLevel[id], PlayerXp[id] );
  1104.  
  1105. SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
  1106. }
  1107. }
  1108.  
  1109. LoadLevel(id)
  1110. {
  1111. new szAuth[33];
  1112. new szKey[40];
  1113.  
  1114. if ( get_pcvar_num(savexp) == 0 )
  1115. {
  1116. get_user_ip( id, szAuth , charsmax(szAuth), 1);
  1117. formatex( szKey , 63 , "%s-IP" , szAuth);
  1118. }
  1119. else if ( get_pcvar_num(savexp) == 1 )
  1120. {
  1121. get_user_authid( id , szAuth , charsmax(szAuth) );
  1122. formatex( szKey , 63 , "%s-ID" , szAuth);
  1123. }
  1124. else if ( get_pcvar_num(savexp) == 2 )
  1125. {
  1126. get_user_name( id, szAuth , charsmax(szAuth) );
  1127. formatex( szKey , 63 , "%s-NAME" , szAuth);
  1128. }
  1129.  
  1130. if ( !get_pcvar_num(save_type) )
  1131. {
  1132. new szData[256];
  1133.  
  1134. formatex(szData , 255, "%i#%i#", PlayerLevel[id], PlayerXp[id])
  1135.  
  1136. nvault_get(g_Vault, szKey, szData, 255)
  1137.  
  1138. replace_all(szData , 255, "#", " ")
  1139. new xp[32], level[32]
  1140. parse(szData, level, 31, xp, 31)
  1141. PlayerLevel[id] = str_to_num(level)
  1142. PlayerXp[id] = str_to_num(xp)
  1143. }
  1144. else
  1145. {
  1146. static szQuery[ 128 ], iData[ 1 ];
  1147. formatex( szQuery, 127, "SELECT `player_level`, `player_xp` FROM `mytable` WHERE ( `player_id` = '%s' );", szAuth );
  1148.  
  1149. iData[ 0 ] = id;
  1150. SQL_ThreadQuery( g_hTuple, "QuerySelectData", szQuery, iData, 1 );
  1151. }
  1152. }
  1153. public QuerySelectData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  1154. {
  1155. if( iFailState == TQUERY_CONNECT_FAILED
  1156. || iFailState == TQUERY_QUERY_FAILED )
  1157. {
  1158. log_amx( "%s", szError );
  1159.  
  1160. return;
  1161. }
  1162. else
  1163. {
  1164. new id = iData[ 0 ];
  1165.  
  1166. new ColLevel = SQL_FieldNameToNum(hQuery, "player_level")
  1167. new ColXp = SQL_FieldNameToNum(hQuery, "player_xp")
  1168.  
  1169. while (SQL_MoreResults(hQuery))
  1170. {
  1171. PlayerLevel[id] = SQL_ReadResult(hQuery, ColLevel);
  1172. PlayerXp[id] = SQL_ReadResult(hQuery, ColXp);
  1173.  
  1174. SQL_NextRow(hQuery)
  1175. }
  1176. }
  1177. }
  1178. public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  1179. {
  1180. if( iFailState == TQUERY_CONNECT_FAILED
  1181. || iFailState == TQUERY_QUERY_FAILED )
  1182. {
  1183. log_amx( "%s", szError );
  1184.  
  1185. return;
  1186. }
  1187. }
  1188. // ============================================================//
  1189. // [~ Natives ~] //
  1190. // ============================================================//
  1191. // Native: get_user_xp
  1192. public native_get_user_xp(id)
  1193. {
  1194. return PlayerXp[id];
  1195. }
  1196. // Native: set_user_xp
  1197. public native_set_user_xp(id, amount)
  1198. {
  1199. PlayerXp[id] = amount;
  1200. }
  1201. // Native: get_user_level
  1202. public native_get_user_level(id)
  1203. {
  1204. return PlayerLevel[id];
  1205. }
  1206. // Native: set_user_xp
  1207. public native_set_user_level(id, amount)
  1208. {
  1209. PlayerLevel[id] = amount;
  1210. }
  1211. // Native: Gets user level by Xp
  1212. public native_get_user_max_level(id)
  1213. {
  1214. return LEVELS[PlayerLevel[id]];
  1215. }
  1216. // ============================================================//
  1217. // [~ Stocks ~] //
  1218. // ============================================================//
  1219. stock client_printcolor(const id, const input[], any:...)
  1220. {
  1221. new count = 1, players[32];
  1222. static msg[191];
  1223. vformat(msg,190,input,3);
  1224. replace_all(msg,190,"/g","^4");// green txt
  1225. replace_all(msg,190,"/y","^1");// orange txt
  1226. replace_all(msg,190,"/ctr","^3");// team txt
  1227. replace_all(msg,190,"/w","^0");// team txt
  1228. if (id) players[0] = id; else get_players(players,count,"ch");
  1229. for (new i = 0; i < count; i++)
  1230. if (is_user_connected(players[i]))
  1231. {
  1232. message_begin(MSG_ONE_UNRELIABLE, SayTxT, _, players[i]);
  1233. write_byte(players[i]);
  1234. write_string(msg);
  1235. message_end();
  1236. }
  1237. }
  1238. public StripPlayerWeapons(id)
  1239. {
  1240. strip_user_weapons(id)
  1241. set_pdata_int(id, OFFSET_PRIMARYWEAPON, 0)
  1242. give_item(id, "weapon_knife");
  1243. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement