Advertisement
Guest User

Untitled

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