Advertisement
Guest User

Surf

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