Advertisement
Guest User

Untitled

a guest
Feb 27th, 2020
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 40.84 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.  
  113. // Forwards //
  114. RegisterHam(Ham_Spawn, "player", "fwd_PlayerSpawn", 1);
  115.  
  116. register_forward(FM_Touch, "fwd_Touch");
  117.  
  118. // Messages //
  119. #if defined NORMAL_MOD || defined ZOMBIE_SWARM
  120. register_message(get_user_msgid("StatusIcon"), "Message_StatusIcon")
  121. #endif
  122.  
  123. // Other //
  124. register_menucmd(register_menuid("Main Menu"), 1023, "main_menu_info")
  125.  
  126. register_dictionary("gunxpmod.txt");
  127. MySQLx_Init()
  128.  
  129. SayTxT = get_user_msgid("SayText");
  130.  
  131. g_msgHudSync1 = CreateHudSyncObj()
  132. g_maxplayers = get_maxplayers();
  133. }
  134. public plugin_natives()
  135. {
  136. // Player natives //
  137. register_native("get_user_xp", "native_get_user_xp", 1);
  138. register_native("set_user_xp", "native_set_user_xp", 1);
  139. register_native("get_user_level", "native_get_user_level", 1);
  140. register_native("set_user_level", "native_set_user_level", 1);
  141. register_native("get_user_max_level", "native_get_user_max_level", 1);
  142. }
  143. public plugin_precache()
  144. {
  145. levelspr = engfunc(EngFunc_PrecacheModel, "sprites/xfire.spr");
  146. levelspr2 = engfunc(EngFunc_PrecacheModel, "sprites/xfire2.spr");
  147.  
  148. engfunc(EngFunc_PrecacheSound, LevelUp);
  149. }
  150. public plugin_cfg()
  151. {
  152. new ConfDir[32], File[192];
  153.  
  154. get_configsdir( ConfDir, charsmax( ConfDir ) );
  155. formatex( File, charsmax( File ), "%s/gunxpmod.cfg", ConfDir );
  156.  
  157. if( !file_exists( File ) )
  158. {
  159. server_print( "File %s doesn't exist!", File );
  160. write_file( File, " ", -1 );
  161. }
  162. else
  163. {
  164. server_print( "%s successfully loaded.", File );
  165. server_cmd( "exec %s", File );
  166. }
  167.  
  168. //Open our vault and have g_Vault store the handle.
  169. g_Vault = nvault_open( "gunxpmod" );
  170.  
  171. //Make the plugin error if vault did not successfully open
  172. if ( g_Vault == INVALID_HANDLE )
  173. set_fail_state( "Error opening GunXpMod nVault, file does not exist!" );
  174. }
  175. public plugin_end()
  176. {
  177. //Close the vault when the plugin ends (map change\server shutdown\restart)
  178. nvault_close( g_Vault );
  179. }
  180. public client_connect(id)
  181. {
  182. g_remember_selection[id] = MAX_PISTOLS_MENU;
  183. g_remember_selection_pistol[id] = 0;
  184.  
  185. get_user_authid( id , g_szAuthID[id] , 34 );
  186. get_user_ip(id, g_szAuthIP[id] , 34, 1);
  187.  
  188. LoadLevel(id)
  189. }
  190. public client_disconnect(id)
  191. {
  192. SaveLevel(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 ) )
  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 fwd_PlayerSpawn(id)
  231. {
  232. if( !get_pcvar_num(p_Enabled) || !is_user_alive(id) )
  233. return;
  234.  
  235. g_kills[id] = 0
  236. UnaVez[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 task_show_level(task)
  440. {
  441. new id = task - TASK_SHOW_LEVEL
  442.  
  443. if(!is_user_alive(id) || !get_pcvar_num(show_level_text) || !get_pcvar_num(p_Enabled) )
  444. return;
  445.  
  446. set_hudmessage(255, 0, 0, 0.02, 0.33, 0, 0.0, 0.3, 0.0, 0.0)
  447. ShowSyncHudMsg(id, g_msgHudSync1 , "%L", LANG_SERVER, "LEVEL_HUD_TEXT", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]], RANK[PlayerLevel[id]], RANKLEVELS[PlayerLevel[id]])
  448.  
  449. set_task(0.1, "task_show_level", TASK_SHOW_LEVEL + id)
  450. }
  451. public showlevel(id)
  452. {
  453. if ( !get_pcvar_num(p_Enabled) || get_pcvar_num(show_level_text) )
  454. return PLUGIN_HANDLED;
  455.  
  456. client_printcolor(id, "%L", LANG_SERVER, "LEVEL_TEXT2", PlayerLevel[id] , PlayerXp[id], LEVELS[PlayerLevel[id]]);
  457. client_printcolor(id, "%L", LANG_SERVER, "LEVEL_TEXT3", RANK[PlayerLevel[id]], RANKLEVELS[PlayerLevel[id]]);
  458.  
  459. return PLUGIN_HANDLED;
  460. }
  461. public descriptionx(id)
  462. {
  463. new szMotd[2048], szTitle[64], iPos = 0
  464. format(szTitle, 63, "Info")
  465. 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>")
  466. iPos += format(szMotd[iPos], 2047-iPos, "^n^n<b>%s</b>^n^n", szTitle)
  467. iPos += format(szMotd[iPos], 2047-iPos, "%L^n", LANG_SERVER, "DESCRIPTION")
  468.  
  469. iPos += format(szMotd[iPos], 2047-iPos, "%L", LANG_SERVER, "DESCRIPTION2")
  470.  
  471. show_motd(id, szMotd, szTitle)
  472. return PLUGIN_HANDLED;
  473. }
  474. public check_level(id)
  475. {
  476. if(PlayerLevel[id] < MAXLEVEL-1 && get_pcvar_num(p_Enabled))
  477. {
  478. while(PlayerXp[id] >= LEVELS[PlayerLevel[id]])
  479. {
  480. PlayerLevel[id]++;
  481.  
  482. if(is_user_alive(id))
  483. {
  484. if ( get_pcvar_num(level_style) )
  485. {
  486. give_weapon(id);
  487. }
  488.  
  489. new p_origin[3];
  490. get_user_origin(id, p_origin, 0);
  491.  
  492. set_sprite(p_origin, levelspr, 30)
  493. set_sprite(p_origin, levelspr2, 30)
  494. }
  495. emit_sound(id, CHAN_ITEM, LevelUp, 1.0, ATTN_NORM, 0, PITCH_NORM);
  496.  
  497. static name[32] ; get_user_name(id, name, charsmax(name));
  498. client_printcolor(0, "%L", LANG_SERVER, "LEVEL_UP", name, PlayerLevel[id]);
  499. }
  500. }
  501. }
  502. // Main Menu Info
  503. public show_main_menu_info(id)
  504. {
  505. if ( !get_pcvar_num(p_Enabled) )
  506. return;
  507.  
  508. static menu[510], len;
  509. len = 0;
  510.  
  511. new xKeys3 = MENU_KEY_0|MENU_KEY_1;
  512.  
  513. // Title
  514. len += formatex(menu[len], sizeof menu - 1 - len, "%L", LANG_SERVER, "TITLE_MENU_INFO")
  515.  
  516. len += formatex(menu[len], sizeof menu - 1 - len, "\r1. \w%L", id, "INFO")
  517. if ( get_pcvar_num(show_rank) )
  518. {
  519. xKeys3 |= (MENU_KEY_2)
  520.  
  521. len += formatex(menu[len], sizeof menu - 1 - len, "^n\r2. \wTop 20^n")
  522. }
  523. else
  524. {
  525. len += formatex(menu[len], sizeof menu - 1 - len, "^n\d2. Top 20^n")
  526. }
  527.  
  528. if(find_plugin_byfile("gunxpmod_shop.amxx") != INVALID_PLUGIN_ID)
  529. {
  530. xKeys3 |= (MENU_KEY_3)
  531.  
  532. len += formatex(menu[len], sizeof menu - 1 - len, "\r3. \w%L^n", id, "ITEM_LIST")
  533. if ( is_user_alive(id) )
  534. {
  535. xKeys3 |= (MENU_KEY_4)
  536.  
  537. len += formatex(menu[len], sizeof menu - 1 - len, "\r4. \w%L^n", id, "UNLOCKS_SHOP_TEXT")
  538. }
  539. }
  540.  
  541. len += formatex(menu[len], sizeof menu - 1 - len, "^n^n\r0.\w %L", id, "EXIT_MENU")
  542.  
  543. show_menu(id, xKeys3, menu, -1, "Main Menu")
  544. }
  545. public main_menu_info(id, key)
  546. {
  547. switch (key)
  548. {
  549. case 0:
  550. {
  551. show_main_menu_info(id)
  552.  
  553. descriptionx(id)
  554. }
  555. case 1:
  556. {
  557. showtop20(id)
  558.  
  559. show_main_menu_info(id)
  560. }
  561. case 2:
  562. {
  563. show_main_menu_info(id)
  564.  
  565. if(callfunc_begin( "display_items","gunxpmod_shop.amxx") == 1)
  566. {
  567. callfunc_push_int( id );
  568. callfunc_end();
  569. }
  570. }
  571. case 3:
  572. {
  573. if(callfunc_begin("item_upgrades","gunxpmod_shop.amxx") == 1)
  574. {
  575. callfunc_push_int( id );
  576. callfunc_end();
  577. }
  578. }
  579. case 9:
  580. {
  581. return PLUGIN_HANDLED;
  582. }
  583. }
  584.  
  585. return PLUGIN_HANDLED;
  586. }
  587. // Main Menu Level Style
  588. public show_main_menu_level(id)
  589. {
  590. if ( !is_user_alive(id) ) return;
  591. if(UnaVez[id] >= 1) {
  592. client_printcolor(id, "/g[Zombie Hell] /ySolo puedes volver a escoger tus /ctrArmas Nuevamente /yuna vez por ronda.");
  593. return;
  594. }
  595. new szInfo[60], szChooseT[40], szLastG[40];
  596. formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
  597.  
  598. new menu = menu_create(szInfo , "main_menu_level");
  599.  
  600. formatex(szChooseT, charsmax(szChooseT), "%L", LANG_SERVER, "CHOOSE_TEXT");
  601. menu_additem(menu, szChooseT, "1", 0);
  602.  
  603. formatex(szLastG, charsmax(szLastG), "%L", LANG_SERVER, "LAST_GUNS");
  604. menu_additem(menu, szLastG, "2", 0);
  605.  
  606. new szExit[15];
  607. formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
  608.  
  609. menu_setprop(menu, MPROP_EXITNAME, szExit);
  610.  
  611. menu_display(id , menu , 0);
  612. }
  613. public main_menu_level(id , menu , item)
  614. {
  615. if ( !is_user_alive(id) )
  616. {
  617. return PLUGIN_HANDLED;
  618. }
  619.  
  620. #if defined ZOMBIE_PLAGUE
  621. if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
  622. return PLUGIN_HANDLED;
  623. #endif
  624.  
  625. if(item == MENU_EXIT)
  626. {
  627. menu_destroy(menu);
  628. return PLUGIN_HANDLED;
  629. }
  630. new data[6], iName[64];
  631. new access, callback;
  632. menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
  633.  
  634. new item_id = str_to_num(data);
  635.  
  636. switch (item_id)
  637. {
  638. case 1: // show pistols
  639. {
  640. show_menu_level_pistol(id);
  641. UnaVez[id]++
  642. }
  643. case 2: // last weapons
  644. {
  645. if ( PlayerLevel[id] > MAX_PISTOLS_MENU - 1 )
  646. {
  647. give_weapon_menu(id, g_remember_selection[id], 1, 1);
  648. give_weapon_menu(id, g_remember_selection_pistol[id], 0, 0);
  649. }
  650. else if ( PlayerLevel[id] < MAX_PISTOLS_MENU )
  651. {
  652. give_weapon_menu(id, g_remember_selection_pistol[id], 1, 1);
  653. }
  654. UnaVez[id]++
  655. }
  656. }
  657.  
  658. menu_destroy(menu);
  659. return PLUGIN_HANDLED;
  660. }
  661. // Menu Level Style Pistols
  662. public show_menu_level_pistol(id)
  663. {
  664. if ( !is_user_alive(id) )
  665. return;
  666.  
  667. new szInfo[60];
  668. formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
  669.  
  670. new menu = menu_create(szInfo , "pistol_menu");
  671.  
  672. for (new item_id = 0; item_id < MAX_PISTOLS_MENU; item_id++)
  673. {
  674. new szItems[60], szTempid[32];
  675.  
  676. if ( PlayerLevel[id] >= GUN_LEVELS[item_id] )
  677. {
  678. formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "ACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
  679.  
  680. num_to_str(item_id, szTempid, charsmax(szTempid) );
  681.  
  682. menu_additem(menu, szItems, szTempid, 0);
  683. }
  684.  
  685. else
  686. {
  687. formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "INACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
  688. menu_additem(menu, szItems, "999", 0, menu_makecallback("CallbackMenu"));
  689. }
  690. }
  691.  
  692. new szNext[15], szBack[15], szExit[15];
  693. formatex(szBack, charsmax(szBack), "%L", LANG_SERVER, "BACK_MENU");
  694. formatex(szNext, charsmax(szNext), "%L", LANG_SERVER, "NEXT_MENU");
  695. formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
  696.  
  697. menu_setprop(menu, MPROP_BACKNAME, szBack)
  698. menu_setprop(menu, MPROP_NEXTNAME, szNext)
  699. menu_setprop(menu, MPROP_EXITNAME, szExit)
  700.  
  701. menu_display(id , menu , 0);
  702. }
  703. public pistol_menu(id , menu , item)
  704. {
  705. if ( !is_user_alive(id) )
  706. {
  707. return PLUGIN_HANDLED;
  708. }
  709.  
  710. #if defined ZOMBIE_PLAGUE
  711. if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
  712. return PLUGIN_HANDLED;
  713. #endif
  714.  
  715. if(item == MENU_EXIT)
  716. {
  717. menu_destroy(menu);
  718. return PLUGIN_HANDLED;
  719. }
  720. new data[6], iName[64];
  721. new access, callback;
  722. menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
  723.  
  724. new item_id = str_to_num(data);
  725.  
  726. g_remember_selection_pistol[id] = item_id;
  727.  
  728. give_weapon_menu(id, item_id, 1, 1);
  729.  
  730. if ( PlayerLevel[id] > MAX_PISTOLS_MENU - 1 )
  731. {
  732. show_menu_level(id);
  733. }
  734.  
  735. menu_destroy(menu);
  736. return PLUGIN_HANDLED;
  737. }
  738. // Menu Level Style Primary
  739. public show_menu_level(id)
  740. {
  741. if ( !is_user_alive(id) || PlayerLevel[id] < MAX_PISTOLS_MENU )
  742. return;
  743.  
  744. new szInfo[100];
  745. formatex(szInfo, charsmax(szInfo), "%L", LANG_SERVER, "TITLE_MENU", PlayerLevel[id], PlayerXp[id], LEVELS[PlayerLevel[id]] );
  746.  
  747. new menu = menu_create(szInfo , "level_menu");
  748.  
  749. for (new item_id = MAX_PISTOLS_MENU; item_id < MAXLEVEL; item_id++)
  750. {
  751. new szItems[512], szTempid[32];
  752.  
  753. if ( PlayerLevel[id] >= GUN_LEVELS[item_id] )
  754. {
  755. formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "ACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
  756.  
  757. num_to_str(item_id, szTempid, charsmax(szTempid) );
  758.  
  759. menu_additem(menu, szItems, szTempid, 0);
  760. }
  761. else
  762. {
  763. formatex(szItems, charsmax(szItems), "%L", LANG_SERVER, "INACTIVE_MENU", RANK[item_id], GUN_LEVELS[item_id] )
  764. menu_additem(menu, szItems, "999", 0, menu_makecallback("CallbackMenu"));
  765. }
  766. }
  767.  
  768. new szNext[15], szBack[15], szExit[15];
  769. formatex(szBack, charsmax(szBack), "%L", LANG_SERVER, "BACK_MENU");
  770. formatex(szNext, charsmax(szNext), "%L", LANG_SERVER, "NEXT_MENU");
  771. formatex(szExit, charsmax(szExit), "%L", LANG_SERVER, "EXIT_MENU");
  772.  
  773. menu_setprop(menu, MPROP_BACKNAME, szBack)
  774. menu_setprop(menu, MPROP_NEXTNAME, szNext)
  775. menu_setprop(menu, MPROP_EXITNAME, szExit)
  776.  
  777. menu_display(id , menu , 0);
  778. }
  779. public level_menu(id , menu , item)
  780. {
  781. if ( !is_user_alive(id) || PlayerLevel[id] < MAX_PISTOLS_MENU )
  782. {
  783. return PLUGIN_HANDLED;
  784. }
  785.  
  786. #if defined ZOMBIE_PLAGUE
  787. if ( zp_has_round_started() && cs_get_user_team(id) == CS_TEAM_T )
  788. return PLUGIN_HANDLED;
  789. #endif
  790.  
  791. if(item == MENU_EXIT)
  792. {
  793. menu_destroy(menu);
  794. return PLUGIN_HANDLED;
  795. }
  796. new data[6], iName[64];
  797. new access, callback;
  798. menu_item_getinfo(menu, item, access, data,5, iName, 63, callback);
  799.  
  800. new item_id = str_to_num(data);
  801.  
  802. g_remember_selection[id] = item_id;
  803.  
  804. give_weapon_menu(id, item_id, 0, 0);
  805.  
  806. menu_destroy(menu);
  807. return PLUGIN_HANDLED;
  808. }
  809. public CallbackMenu(id, menu, item)
  810. {
  811. return ITEM_DISABLED;
  812. }
  813.  
  814. // Selected by menu or remember selection and give item
  815. public give_weapon_menu(id, selection, strip, givegren)
  816. {
  817. #if defined ZOMBIE_SWARM
  818. if( is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT && get_pcvar_num(p_Enabled) )
  819. {
  820. if ( strip )
  821. {
  822. StripPlayerWeapons(id);
  823. }
  824.  
  825. if ( get_pcvar_num(enable_grenades) && givegren )
  826. {
  827. give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
  828. give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
  829. }
  830.  
  831. give_item(id, WEAPONCONST[selection]);
  832.  
  833. cs_set_user_bpammo(id, AMMOCONST[selection], AMMO2CONST[selection])
  834. }
  835. #endif
  836.  
  837. #if defined ZOMBIE_INFECTION || defined NORMAL_MOD
  838. if(is_user_alive(id) && get_pcvar_num(p_Enabled))
  839. {
  840. if ( strip )
  841. {
  842. StripPlayerWeapons(id);
  843. }
  844.  
  845. if ( get_pcvar_num(enable_grenades) && givegren )
  846. {
  847. give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
  848. give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
  849. }
  850.  
  851. give_item(id, WEAPONCONST[selection]);
  852.  
  853. cs_set_user_bpammo(id, AMMOCONST[selection], AMMO2CONST[selection])
  854. }
  855. #endif
  856. }
  857. public give_weapon(id)
  858. {
  859. #if defined ZOMBIE_SWARM
  860. if( is_user_alive(id) && cs_get_user_team(id) == CS_TEAM_CT && get_pcvar_num(p_Enabled))
  861. {
  862. StripPlayerWeapons(id);
  863.  
  864. if ( get_pcvar_num(enable_grenades) && get_pcvar_num(level_style) )
  865. {
  866. give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
  867. give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
  868. }
  869.  
  870. give_item(id, WEAPONCONST[PlayerLevel[id]]);
  871.  
  872. cs_set_user_bpammo(id, AMMOCONST[PlayerLevel[id]], AMMO2CONST[PlayerLevel[id]])
  873. }
  874. #endif
  875.  
  876. #if defined ZOMBIE_INFECTION || defined NORMAL_MOD
  877. if(is_user_alive(id) && get_pcvar_num(p_Enabled))
  878. {
  879. StripPlayerWeapons(id);
  880.  
  881. if ( get_pcvar_num(enable_grenades) && get_pcvar_num(level_style) )
  882. {
  883. give_item(id, HEGRENADE_LEVEL[PlayerLevel[id]]);
  884. give_item(id, SMOKEGRENADE_LEVEL[PlayerLevel[id]]);
  885. }
  886.  
  887. give_item(id, WEAPONCONST[PlayerLevel[id]]);
  888.  
  889. cs_set_user_bpammo(id, AMMOCONST[PlayerLevel[id]], AMMO2CONST[PlayerLevel[id]])
  890. }
  891. #endif
  892. }
  893. public set_sprite(p_origin[3], sprite, radius)
  894. {
  895. // Explosion
  896. message_begin(MSG_BROADCAST, SVC_TEMPENTITY, p_origin)
  897. write_byte(TE_EXPLOSION)
  898. write_coord(p_origin[0])
  899. write_coord(p_origin[1])
  900. write_coord(p_origin[2])
  901. write_short(sprite)
  902. write_byte(radius)
  903. write_byte(15)
  904. write_byte(4)
  905. message_end()
  906. }
  907. //Shows Top 20
  908. public showtop20(id)
  909. {
  910. if( !get_pcvar_num(p_Enabled) && !get_pcvar_num(show_rank) )
  911. return;
  912.  
  913. static Sort[33][2];
  914. new players[32],num,count,index;
  915. get_players(players,num);
  916.  
  917. for(new i = 0; i < num; i++)
  918. {
  919. index = players[i];
  920. Sort[count][0] = index;
  921. Sort[count][1] = PlayerXp[index];
  922. count++;
  923. }
  924.  
  925. SortCustom2D(Sort,count,"CompareXp");
  926. new motd[1501],iLen;
  927. iLen = formatex(motd, sizeof motd - 1,"<body bgcolor=#000000><font color=#98f5ff><pre>");
  928. iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%s %-22.22s %3s^n", "#", "Name", "# Experience");
  929.  
  930. new y = clamp(count,0,20);
  931. new name[32],kindex;
  932.  
  933. for(new x = 0; x < y; x++)
  934. {
  935. kindex = Sort[x][0];
  936. get_user_name(kindex,name,sizeof name - 1);
  937. iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"%d %-22.22s %d^n", x + 1, name, Sort[x][1]);
  938. }
  939. iLen += formatex(motd[iLen], (sizeof motd - 1) - iLen,"</body></font></pre>");
  940. show_motd(id,motd, "GunXpMod Top 20");
  941. }
  942. public CompareXp(elem1[], elem2[])
  943. {
  944. if(elem1[1] > elem2[1])
  945. return -1;
  946. else if(elem1[1] < elem2[1])
  947. return 1;
  948.  
  949. return 0;
  950. }
  951. // Command to set player Level
  952. public cmd_give_level(id, level, cid)
  953. {
  954. if( !cmd_access(id, level, cid, 3) || !get_pcvar_num(p_Enabled) )
  955. {
  956. return PLUGIN_HANDLED;
  957. }
  958.  
  959. new Arg1[64], Target
  960. read_argv(1, Arg1, 63)
  961. Target = cmd_target(id, Arg1, 0)
  962.  
  963. new iLevel[32], Value
  964. read_argv(2, iLevel, 31)
  965. Value = str_to_num(iLevel)
  966.  
  967. if(iLevel[0] == '-')
  968. {
  969. console_print(id, "You can't have a '-' in the value!")
  970. return PLUGIN_HANDLED;
  971. }
  972.  
  973. if(!Target)
  974. {
  975. console_print(id, "Target not found!")
  976. return PLUGIN_HANDLED;
  977. }
  978.  
  979. if(Value > MAXLEVEL-1)
  980. {
  981. console_print(id, "You can't set a more than %d!", MAXLEVEL-1)
  982. return PLUGIN_HANDLED;
  983. }
  984.  
  985. if(Value < 1)
  986. {
  987. console_print(id, "You can't set less than 1!")
  988. return PLUGIN_HANDLED;
  989. }
  990.  
  991. new AdminName[32]
  992. get_user_name(id, AdminName, 31)
  993.  
  994. new TargetName[32]
  995. get_user_name(Target, TargetName, 31)
  996.  
  997. PlayerLevel[Target] = Value - 1
  998. PlayerXp[Target] = LEVELS[PlayerLevel[Target]]
  999. check_level(Target)
  1000.  
  1001. client_printcolor(Target, "/gADMIN: /ctr%s /yha establecido tu nivel a /g%d", AdminName, Value)
  1002.  
  1003. return PLUGIN_HANDLED;
  1004. }
  1005.  
  1006. // ============================================================//
  1007. // [~ Saving datas ~] //
  1008. // ============================================================//
  1009. public MySQLx_Init()
  1010. {
  1011. if ( !get_pcvar_num(p_Enabled) || !get_pcvar_num(save_type) )
  1012. return;
  1013.  
  1014. new szHost[64], szUser[32], szPass[32], szDB[128];
  1015.  
  1016. get_pcvar_string( mysqlx_host, szHost, charsmax( szHost ) );
  1017. get_pcvar_string( mysqlx_user, szUser, charsmax( szUser ) );
  1018. get_pcvar_string( mysqlx_pass, szPass, charsmax( szPass ) );
  1019. get_pcvar_string( mysqlx_db, szDB, charsmax( szDB ) );
  1020.  
  1021. g_hTuple = SQL_MakeDbTuple( szHost, szUser, szPass, szDB );
  1022.  
  1023. for ( new i = 0; i < sizeof szTables; i++ )
  1024. {
  1025. SQL_ThreadQuery( g_hTuple, "QueryCreateTable", szTables[i])
  1026. }
  1027. }
  1028. public QueryCreateTable( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  1029. {
  1030. if( iFailState == TQUERY_CONNECT_FAILED
  1031. || iFailState == TQUERY_QUERY_FAILED )
  1032. {
  1033. log_amx( "%s", szError );
  1034.  
  1035. return;
  1036. }
  1037. }
  1038.  
  1039. SaveLevel(id)
  1040. {
  1041. if ( get_pcvar_num(savexp) )
  1042. {
  1043. if ( !get_pcvar_num(save_type) )
  1044. {
  1045. new szData[256];
  1046. new szKey[64];
  1047.  
  1048. formatex( szKey , 63 , "%s-ID" , g_szAuthID[id]);
  1049. formatex( szData , 255 , "%i#%i#" , PlayerLevel[id], PlayerXp[id] );
  1050.  
  1051. nvault_set( g_Vault , szKey , szData );
  1052. }
  1053. else
  1054. {
  1055. static szQuery[ 128 ];
  1056.  
  1057. formatex( szQuery, 127, "REPLACE INTO `mytable` (`player_id`, `player_level`, `player_xp`) VALUES ('%s', '%d', '%d');", g_szAuthID[id] , PlayerLevel[id], PlayerXp[id] );
  1058.  
  1059. SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
  1060. }
  1061. }
  1062. else
  1063. {
  1064. if ( !get_pcvar_num(save_type) )
  1065. {
  1066. new szData[256];
  1067. new szKey[64];
  1068.  
  1069. formatex( szKey , 63 , "%s-IP" , g_szAuthIP[id] );
  1070. formatex( szData , 255 , "%i#%i#" , PlayerLevel[id], PlayerXp[id] );
  1071.  
  1072. nvault_set( g_Vault , szKey , szData );
  1073. }
  1074. else
  1075. {
  1076. static szQuery[ 128 ];
  1077.  
  1078. formatex( szQuery, 127, "REPLACE INTO `mytable` (`player_id`, `player_level`, `player_xp`) VALUES ('%s', '%d', '%d');", g_szAuthIP[id] , PlayerLevel[id], PlayerXp[id] );
  1079.  
  1080. SQL_ThreadQuery( g_hTuple, "QuerySetData", szQuery);
  1081. }
  1082. }
  1083. }
  1084.  
  1085. LoadLevel(id)
  1086. {
  1087. if ( get_pcvar_num(savexp) )
  1088. {
  1089. if ( !get_pcvar_num(save_type) )
  1090. {
  1091. new szData[256];
  1092. new szKey[40];
  1093.  
  1094. formatex( szKey , 39 , "%s-ID" , g_szAuthID[id] );
  1095.  
  1096. formatex(szData , 255, "%i#%i#", PlayerLevel[id], PlayerXp[id])
  1097.  
  1098. nvault_get(g_Vault, szKey, szData, 255)
  1099.  
  1100. replace_all(szData , 255, "#", " ")
  1101. new xp[32], level[32]
  1102. parse(szData, level, 31, xp, 31)
  1103. PlayerLevel[id] = str_to_num(level)
  1104. PlayerXp[id] = str_to_num(xp)
  1105. }
  1106. else
  1107. {
  1108. static szQuery[ 128 ], iData[ 1 ];
  1109. formatex( szQuery, 127, "SELECT `player_level`, `player_xp` FROM `mytable` WHERE ( `player_id` = '%s' );", g_szAuthID[id] );
  1110.  
  1111. iData[ 0 ] = id;
  1112. SQL_ThreadQuery( g_hTuple, "QuerySelectData", szQuery, iData, 1 );
  1113. }
  1114. }
  1115. else
  1116. {
  1117. if ( !get_pcvar_num(save_type) )
  1118. {
  1119. new szData[256];
  1120. new szKey[40];
  1121.  
  1122. formatex( szKey , 39 , "%s-IP" , g_szAuthIP[id] );
  1123.  
  1124. formatex(szData , 255, "%i#%i#", PlayerLevel[id], PlayerXp[id])
  1125.  
  1126. nvault_get(g_Vault, szKey, szData, 255)
  1127.  
  1128. replace_all(szData , 255, "#", " ")
  1129. new xp[32], level[32]
  1130. parse(szData, level, 31, xp, 31)
  1131. PlayerLevel[id] = str_to_num(level)
  1132. PlayerXp[id] = str_to_num(xp)
  1133. }
  1134. else
  1135. {
  1136. static szQuery[ 128 ], iData[ 1 ];
  1137. formatex( szQuery, 127, "SELECT `player_level`, `player_xp` FROM `mytable` WHERE ( `player_id` = '%s' );", g_szAuthIP[id] );
  1138.  
  1139. iData[ 0 ] = id;
  1140. SQL_ThreadQuery( g_hTuple, "QuerySelectData", szQuery, iData, 1 );
  1141. }
  1142. }
  1143. }
  1144. public QuerySelectData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  1145. {
  1146. if( iFailState == TQUERY_CONNECT_FAILED
  1147. || iFailState == TQUERY_QUERY_FAILED )
  1148. {
  1149. log_amx( "%s", szError );
  1150.  
  1151. return;
  1152. }
  1153. else
  1154. {
  1155. new id = iData[ 0 ];
  1156.  
  1157. new ColLevel = SQL_FieldNameToNum(hQuery, "player_level")
  1158. new ColXp = SQL_FieldNameToNum(hQuery, "player_xp")
  1159.  
  1160. while (SQL_MoreResults(hQuery))
  1161. {
  1162. PlayerLevel[id] = SQL_ReadResult(hQuery, ColLevel);
  1163. PlayerXp[id] = SQL_ReadResult(hQuery, ColXp);
  1164.  
  1165. SQL_NextRow(hQuery)
  1166. }
  1167. }
  1168. }
  1169. public QuerySetData( iFailState, Handle:hQuery, szError[ ], iError, iData[ ], iDataSize, Float:fQueueTime )
  1170. {
  1171. if( iFailState == TQUERY_CONNECT_FAILED
  1172. || iFailState == TQUERY_QUERY_FAILED )
  1173. {
  1174. log_amx( "%s", szError );
  1175.  
  1176. return;
  1177. }
  1178. }
  1179. // ============================================================//
  1180. // [~ Natives ~] //
  1181. // ============================================================//
  1182. // Native: get_user_xp
  1183. public native_get_user_xp(id)
  1184. {
  1185. return PlayerXp[id];
  1186. }
  1187. // Native: set_user_xp
  1188. public native_set_user_xp(id, amount)
  1189. {
  1190. PlayerXp[id] = amount;
  1191. }
  1192. // Native: get_user_level
  1193. public native_get_user_level(id)
  1194. {
  1195. return PlayerLevel[id];
  1196. }
  1197. // Native: set_user_xp
  1198. public native_set_user_level(id, amount)
  1199. {
  1200. PlayerLevel[id] = amount;
  1201. }
  1202. // Native: Gets user level by Xp
  1203. public native_get_user_max_level(id)
  1204. {
  1205. return LEVELS[PlayerLevel[id]];
  1206. }
  1207. // ============================================================//
  1208. // [~ Stocks ~] //
  1209. // ============================================================//
  1210. stock client_printcolor(const id, const input[], any:...)
  1211. {
  1212. new count = 1, players[32];
  1213. static msg[191];
  1214. vformat(msg,190,input,3);
  1215. replace_all(msg,190,"/g","^4");// green txt
  1216. replace_all(msg,190,"/y","^1");// orange txt
  1217. replace_all(msg,190,"/ctr","^3");// team txt
  1218. replace_all(msg,190,"/w","^0");// team txt
  1219. if (id) players[0] = id; else get_players(players,count,"ch");
  1220. for (new i = 0; i < count; i++)
  1221. if (is_user_connected(players[i]))
  1222. {
  1223. message_begin(MSG_ONE_UNRELIABLE, SayTxT, _, players[i]);
  1224. write_byte(players[i]);
  1225. write_string(msg);
  1226. message_end();
  1227. }
  1228. }
  1229. public StripPlayerWeapons(id)
  1230. {
  1231. strip_user_weapons(id)
  1232. set_pdata_int(id, OFFSET_PRIMARYWEAPON, 0)
  1233. give_item(id, "weapon_knife");
  1234. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement