Advertisement
Guest User

Untitled

a guest
Dec 16th, 2022
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.70 KB | Help | 0 0
  1. #include < amxmodx >
  2. #include < cstrike >
  3. #include < amxmisc >
  4. #include < nvault >
  5.  
  6. #define PlUGIN_VERSION "1.0"
  7. #define MAXLEVEL 71
  8.  
  9. #if !defined client_disconnected
  10. #define client_disconnected client_disconnect
  11. #endif
  12.  
  13. #if !defined MAX_PLAYERS
  14. const MAX_PLAYERS = 32
  15. #endif
  16.  
  17. #define MenuInfo(%1) formatex(szItem, charsmax(szItem), %1, g_iPlayerXP[iPlayer], szPlayerName[iPlayer], g_iPlayerLevel[iPlayer], g_mPlayerData[ g_iPlayerLevel[iPlayer]][m_szRankName]);
  18. #define MenuTitle(%1) formatex(szTitle,charsmax(szTitle), %1)
  19.  
  20. enum _:eCommandSettings {
  21. iMenuType,
  22. iCommands[32],
  23. iFlags
  24. };
  25.  
  26. enum _:mData {
  27. m_szRankName[32],
  28. m_iRankXP
  29. };
  30.  
  31. new const g_mPlayerData[ ][ mData ] = {
  32. { "Noob", 0 },
  33. { "Pocetnik", 90 },
  34. { "Strelac", 180 },
  35. { "Super Strelac", 300 },
  36. { "Odlican Strelac", 450 },
  37. { "Ubica", 700 },
  38. { "Serijski Ubica", 1200 },
  39. { "Monstrum", 1800 },
  40. { "Profesionalac", 2800 },
  41. { "Pesadinac", 4100 },
  42. { "Mitraljezac", 5200 },
  43. { "Razvodnik", 6000 },
  44. { "Desetar", 6800 },
  45. { "Mladji Vodnik", 8200 },
  46. { "Vodnik", 10200 },
  47. { "Vodnik Prve Klase", 12000 },
  48. { "Stariji Vodnik", 15000 },
  49. { "Stariji Vodnik Prve Klase", 17500 },
  50. { "Zastavnik", 20500 },
  51. { "Zastavnik Prve Klase", 25500 },
  52. { "Potporucnik", 29000 },
  53. { "Porucnik", 35000 },
  54. { "Kapetan", 46000 },
  55. { "Kapetan Prve Klase", 58000 },
  56. { "Major", 71000 },
  57. { "Potpukovnik", 85000 },
  58. { "Pukovnik", 100000 },
  59. { "Brigadni General", 116000 },
  60. { "General Major", 133000 },
  61. { "General Potpukovnik", 151000 },
  62. { "General Pukovnik", 170000 },
  63. { "General", 190000 },
  64. { "Ministar Odbrane", 211000 },
  65. { "Komadant", 233000 },
  66. { "Vrhovni Komadant", 9999999 }
  67. };
  68.  
  69. new const g_iCommandSettings[][eCommandSettings] =
  70. {
  71. { 1, "xplist", ADMIN_ALL},
  72. { 2, "resetdata" , ADMIN_RCON },
  73. { 3, "manage" , ADMIN_RCON }
  74. }
  75.  
  76. new const szPluginName[] = { "Rank System" };
  77. new const g_szLevelUp[] = { "items/nvg_on.wav" };
  78.  
  79. new g_iPlayerXP[MAX_PLAYERS+1] = 0,
  80. g_iPlayerLevel[MAX_PLAYERS+1] = 0,
  81. szPlayerAuthid[MAX_PLAYERS+1][33],
  82. szPlayerName[MAX_PLAYERS+1][33],
  83. szPlayerIP[MAX_PLAYERS+1][33],
  84. g_iPlayerMenu[33]
  85.  
  86. new g_Vault,
  87. g_SaveDataType,
  88. g_HudRank,
  89. g_KillXP,
  90. g_HeadShotXP,
  91. g_GrenadeXP,
  92. g_KnifeXP;
  93.  
  94. new SyncHudRankSystem;
  95. new g_fUserLevelUp
  96.  
  97. public plugin_init()
  98. {
  99. register_plugin( szPluginName, PlUGIN_VERSION, "Supremache" );
  100. register_cvar("rank_system", PlUGIN_VERSION, FCVAR_SERVER|FCVAR_SPONLY)
  101. set_cvar_string("rank_system", PlUGIN_VERSION)
  102.  
  103. register_event( "DeathMsg", "Event_DeathMsg", "a" );
  104.  
  105. g_SaveDataType = register_cvar("save_type","1")
  106.  
  107. g_HudRank = register_cvar( "hud_rank", "1" );
  108. g_KillXP = register_cvar( "kill_xp", "15" );
  109. g_HeadShotXP = register_cvar( "hs_xp", "5" );
  110. g_GrenadeXP = register_cvar( "he_xp", "5" );
  111. g_KnifeXP = register_cvar( "knife_xp", "10" );
  112.  
  113. register_clcmd("say", "CommandSay")
  114. register_concmd("amx_givelvl", "GiveLevels", ADMIN_LEVEL_E, " <Igrac> <Kolicina>");
  115. register_concmd("amx_givexp", "GiveEXP", ADMIN_LEVEL_E, " <Igrac> <Kolicina>");
  116.  
  117. g_fUserLevelUp = CreateMultiForward( "user_levelup", ET_IGNORE, FP_CELL, FP_CELL, FP_CELL );
  118.  
  119. SyncHudRankSystem = CreateHudSyncObj();
  120.  
  121. }
  122.  
  123. public plugin_cfg( )
  124. {
  125. g_Vault = nvault_open("RankSystem")
  126.  
  127. if ( g_Vault == INVALID_HANDLE )
  128. set_fail_state( "Error opening Rank System nVault, file does not exist!" )
  129. }
  130.  
  131. public client_putinserver( id )
  132. {
  133. if(get_pcvar_num(g_HudRank) == 1)
  134. set_task(1.0, "eShowHud", id, _, _, "b")
  135. }
  136.  
  137. public client_authorized(id)
  138. {
  139. get_user_name( id, szPlayerName[id], charsmax(szPlayerName[]));
  140. get_user_authid( id, szPlayerAuthid[id], charsmax(szPlayerAuthid[]));
  141. get_user_ip(id, szPlayerIP[id] , charsmax(szPlayerIP[]), 1)
  142.  
  143. if(!is_user_hltv(id) && !is_user_bot(id))
  144. {
  145. LoadData(id);
  146. }
  147. }
  148.  
  149. public client_disconnect(id)
  150. {
  151. if(!is_user_hltv(id) && !is_user_bot(id))
  152. {
  153. SaveData(id);
  154. }
  155. }
  156.  
  157. public plugin_precache()
  158. {
  159. precache_sound(g_szLevelUp)
  160. }
  161.  
  162. public client_infochanged(id)
  163. {
  164. if (!is_user_connected(id))
  165. return PLUGIN_CONTINUE;
  166.  
  167. get_user_info(id, "name", szPlayerName[id], charsmax(szPlayerName[]));
  168.  
  169. return PLUGIN_CONTINUE;
  170. }
  171.  
  172. public eShowHud(id)
  173. {
  174. set_hudmessage(0, 255, 255, 0.01, 0.18, 0, 12.0, 12.0, 0.01, 0.01, -1)
  175.  
  176. if( g_iPlayerLevel[id] > MAXLEVEL - 1)
  177. {
  178. ShowSyncHudMsg(id, SyncHudRankSystem,"[ Ime: %s ]^n[ Rank: %s ]^n[ EXP: %i / %i ]^n[ Level: %i / %i ]",
  179. szPlayerName[id],
  180. g_mPlayerData[ g_iPlayerLevel[ id ] ][ m_szRankName ],
  181. g_iPlayerXP[ id ],
  182. g_mPlayerData[ MAXLEVEL ][ m_iRankXP ],
  183. g_iPlayerLevel[id], MAXLEVEL );
  184. }
  185. else
  186. {
  187. ShowSyncHudMsg(id, SyncHudRankSystem,"[ Ime: %s ]^n[ Rank: %s ]^n[ EXP: %i / %i ]^n[ Level: %i / %i ]",
  188. szPlayerName[id],
  189. g_mPlayerData[ g_iPlayerLevel[ id ] ][ m_szRankName ],
  190. g_iPlayerXP[ id ],
  191. g_mPlayerData[ g_iPlayerLevel[ id ] + 1 ][ m_iRankXP ],
  192. g_iPlayerLevel[id], MAXLEVEL );
  193. }
  194. }
  195.  
  196. public CommandSay(id)
  197. {
  198. new szArgs[192]
  199.  
  200. read_args(szArgs, charsmax(szArgs))
  201. remove_quotes(szArgs)
  202. trim(szArgs)
  203.  
  204. new szCmd[35]
  205. parse(szArgs, szCmd, charsmax(szCmd))
  206. trim(szCmd)
  207.  
  208. if (szCmd[0] != '/')
  209. return PLUGIN_CONTINUE
  210.  
  211. new iMenu = -1
  212.  
  213. for(new i = 0; i <= charsmax(g_iCommandSettings); i++)
  214. {
  215. if (equali(szCmd[1], g_iCommandSettings[i][iCommands]))
  216. {
  217. iMenu = g_iCommandSettings[i][iMenuType]
  218.  
  219. if (iMenu == -1)
  220. return PLUGIN_CONTINUE
  221.  
  222. g_iPlayerMenu[id] = iMenu
  223. PlayerRank(id, g_iCommandSettings[i][iFlags])
  224. break;
  225. }
  226. }
  227.  
  228. return PLUGIN_HANDLED
  229. }
  230.  
  231. public PlayerRank(id, iFlag)
  232. {
  233. if(!access(id, iFlag))
  234. {
  235. Print(id, "!g[%s]!n You dont have access.", szPluginName);
  236. return PLUGIN_HANDLED
  237. }
  238.  
  239. new iPlayers[MAX_PLAYERS], iPnum, szUserID[32], szTitle[128], iMenu
  240.  
  241. switch ( g_iPlayerMenu[id] )
  242. {
  243. case 2: MenuTitle("\y%s: \rRestartuj podatke igraca", szPluginName)
  244. case 3: MenuTitle("\y%s: \rIzmeni podatke igracu", szPluginName)
  245. default: MenuTitle("\y%s: \rXP Lista", szPluginName)
  246. }
  247.  
  248. iMenu = menu_create(szTitle, "Handler")
  249. get_players(iPlayers, iPnum, "ch"); SortCustom1D(iPlayers, iPnum, "sort_players_by_xp")
  250.  
  251. for(new szItem[1024], iPlayer, i; i < iPnum; i++)
  252. {
  253. iPlayer = iPlayers[i]
  254.  
  255. MenuInfo("\d[%i XP] \w%s \r[\yLevel %i: %s\r]")
  256. formatex( szUserID, charsmax(szUserID), "%d", get_user_userid(iPlayer))
  257. menu_additem(iMenu, szItem, szUserID)
  258. }
  259.  
  260. menu_setprop(iMenu, MPROP_BACKNAME, "Predhodna strana")
  261. menu_setprop(iMenu, MPROP_NEXTNAME, "Sledeca strana")
  262. menu_setprop(iMenu, MPROP_EXITNAME, "\rZatvori")
  263.  
  264. menu_display(id, iMenu)
  265. return PLUGIN_HANDLED
  266. }
  267.  
  268. public sort_players_by_xp(id1, id2)
  269. {
  270. return g_iPlayerXP[id2] - g_iPlayerXP[id1]
  271. }
  272.  
  273. public Handler(id, iMenu, iItem)
  274. {
  275. if(iItem != MENU_EXIT)
  276. {
  277. new iAccess, iCallback, iData[6],iName[64];
  278. menu_item_getinfo(iMenu, iItem, iAccess, iData, charsmax(iData), iName, charsmax(iName), iCallback);
  279.  
  280. new iPlayer = str_to_num(iData);
  281.  
  282. switch ( g_iPlayerMenu[id] )
  283. {
  284. case 2: ResetPlayerRank(id, iPlayer);
  285. case 3: ManagePlayerRank(id, iPlayer);
  286. }
  287. }
  288. menu_destroy(iMenu)
  289. return PLUGIN_HANDLED
  290. }
  291.  
  292. public ResetPlayerRank(id, iPlayer)
  293. {
  294. if (!iPlayer)
  295. return PLUGIN_HANDLED;
  296.  
  297. g_iPlayerXP[iPlayer] = 0
  298. g_iPlayerLevel[iPlayer] = 0
  299.  
  300. console_print(id, "[ADMIN] %s: je restartovao podatke ranka igracu %s", szPlayerName[id], szPlayerName[iPlayer]);
  301. Log("[ADMIN] %s <%s> je restartovao podatke ranka igracu %s <%s>", szPlayerName[id], szPlayerAuthid[id], szPlayerName[iPlayer], szPlayerAuthid[iPlayer]);
  302.  
  303. Print(0, "!n[ADMIN]!g %s!n: je restartovao podatke ranka igracu!g %s!n", szPlayerName[id], szPlayerName[iPlayer]);
  304.  
  305. SaveData(iPlayer);
  306. return PLUGIN_CONTINUE;
  307. }
  308.  
  309. public ManagePlayerRank(id, iPlayer)
  310. {
  311. new szTitle[128], szUserID[32], iMenu;
  312. MenuTitle("\yRank Sistem: \rIzmeni Podatke Igracu")
  313.  
  314. iMenu = menu_create( szTitle, "Rank_Handler" );
  315.  
  316. for(new i = 0; i <= charsmax(g_mPlayerData); i++)
  317. {
  318. formatex( szUserID, charsmax( szUserID ), "%d", get_user_userid(iPlayer))
  319. menu_additem( iMenu, g_mPlayerData[ i ][ m_szRankName ], szUserID );
  320. }
  321. menu_display( id, iMenu);
  322. }
  323.  
  324. public Rank_Handler(id, iMenu, iItem)
  325. {
  326. if(iItem != MENU_EXIT)
  327. {
  328. new iAccess, iCallback, iData[6],iName[64];
  329. menu_item_getinfo(iMenu, iItem, iAccess, iData, charsmax(iData), iName, charsmax(iName), iCallback);
  330.  
  331. new iPlayer = str_to_num(iData);
  332.  
  333. g_iPlayerXP[ iPlayer ] = g_mPlayerData[ iItem ][ m_iRankXP ];
  334. g_iPlayerLevel[ iPlayer ] = iItem;
  335.  
  336. Log("[ADMIN] %s <%s> je promenio igracu %s <%s> rank u %s", szPlayerName[id], szPlayerAuthid[id], szPlayerName[iPlayer], szPlayerAuthid[iPlayer], g_mPlayerData[ g_iPlayerLevel[iPlayer] ][ m_szRankName ]);
  337. Print(iPlayer, "!n[ADMIN]!g %s!n: je promenio igracu!g %s!n rank u!g %s!n (!gLv. %d!n)",
  338. szPlayerName[id],
  339. szPlayerName[iPlayer],
  340. g_mPlayerData[ g_iPlayerLevel[iPlayer] ][ m_szRankName ],
  341. g_iPlayerLevel[iPlayer]);
  342. }
  343. menu_destroy(iMenu)
  344. }
  345.  
  346. public GiveEXP(id, nLevel, nCid)
  347. {
  348. if(cmd_access(id, nLevel, nCid, 1))
  349. {
  350. static cTarget[32], cXP[6], iTarget, iXP
  351.  
  352. read_argv( 1, cTarget, charsmax(cTarget));
  353. read_argv( 2, cXP, charsmax(cXP));
  354.  
  355. iXP = str_to_num(cXP);
  356.  
  357. iTarget = cmd_target( id, cTarget, CMDTARGET_ALLOW_SELF | CMDTARGET_NO_BOTS );
  358.  
  359. if(!cTarget[0] || !cXP[0])
  360. {
  361. console_print(id, "Usage: amx_givexp <Ime Igraca> <Kolicina>");
  362. return PLUGIN_HANDLED
  363. }
  364.  
  365. if(!iTarget)
  366. {
  367. console_print(id, "[%s] Ne postoji igrac ili ima vise igraca sa slicnim imenom!", szPluginName);
  368. return PLUGIN_HANDLED
  369. }
  370.  
  371. if( g_iPlayerLevel[iTarget] >= MAXLEVEL )
  372. {
  373. console_print(id, "[%s] Ne mozes dati igracu vise XP jer je dostigao maksimalni level %d.", szPluginName, MAXLEVEL);
  374. Print(id, "!g[%s]!n Ne mozes dati igracu vise XP jer je dostigao maksimalni level (!g%d!n).", szPluginName, MAXLEVEL);
  375. return PLUGIN_HANDLED
  376. }
  377.  
  378. g_iPlayerXP[iTarget] += iXP
  379. CheckLevel(iTarget)
  380.  
  381. console_print(id, "[ADMIN] %s je dao igracu %d xp %s", szPlayerName[id], iXP, szPlayerName[iTarget]);
  382. Log("[ADMIN] %s <%s> je dao igracu %d xp %s <%s>", szPlayerName[id], szPlayerAuthid[id], iXP, szPlayerName[iTarget], szPlayerAuthid[iTarget]);
  383.  
  384. Print(0, "!n[ADMIN]!g %s!n: je dao igracu!g %d!n xp!g %s!n", szPlayerName[id], iXP, szPlayerName[iTarget]);
  385. Print(iTarget, "!g[%s]!n Dostigao si: XP.!g%d!n/!g%d!n. ", szPluginName, g_iPlayerXP[iTarget], g_mPlayerData[g_iPlayerLevel[iTarget]+ 1][ m_iRankXP ] );
  386.  
  387. return PLUGIN_HANDLED
  388.  
  389. }
  390. return PLUGIN_HANDLED
  391. }
  392.  
  393. public GiveLevels(id, nLevel, nCid)
  394. {
  395. if(cmd_access(id, nLevel, nCid, 1))
  396. {
  397. static cTarget[32], cLevel[6], iTarget, iLevel
  398.  
  399. read_argv( 1, cTarget, charsmax(cTarget));
  400. read_argv( 2, cLevel, charsmax(cLevel));
  401.  
  402. iLevel = str_to_num(cLevel);
  403.  
  404. iTarget = cmd_target( id, cTarget, CMDTARGET_ALLOW_SELF | CMDTARGET_NO_BOTS );
  405.  
  406. if(!cTarget[0] || !cLevel[0])
  407. {
  408. console_print(id, "Usage: amx_givelvl <Ime Igraca> <Kolicina>");
  409. return PLUGIN_HANDLED
  410. }
  411.  
  412. if(!iTarget)
  413. {
  414. console_print(id, "[%s] Ne postoji igrac ili ima vise igraca sa slicnim imenom!", szPluginName);
  415. return PLUGIN_HANDLED
  416. }
  417.  
  418. if( g_iPlayerLevel[iTarget] >= MAXLEVEL )
  419. {
  420. console_print(id, "[%s] Ne mozes dati igracu level jer je dostigao maksimalni level %d.", szPluginName, MAXLEVEL);
  421. Print(id, "!g[%s]!n Ne mozes dati igracu level jer je dostigao maksimalni level (!g%d!n).", szPluginName, MAXLEVEL);
  422. return PLUGIN_HANDLED
  423. }
  424.  
  425. if( g_iPlayerLevel[iTarget] + iLevel > MAXLEVEL )
  426. {
  427. new iAvailableLvl = MAXLEVEL - g_iPlayerLevel[iTarget]
  428.  
  429. console_print(id, "[%s] Ne mozes dati igracu level veci od maksimalnog %d.", szPluginName, MAXLEVEL);
  430. Print(id, "!g[%s]!n Ne mozes dati igracu level veci od maksimalnog (!g%d!n).", szPluginName, MAXLEVEL);
  431. Print(id, "!g[%s]!n Dostupni leveli (!g%d!n).", szPluginName, iAvailableLvl);
  432.  
  433. return PLUGIN_HANDLED
  434. }
  435.  
  436. g_iPlayerLevel[iTarget] += iLevel
  437. CheckLevel(iTarget)
  438.  
  439. console_print(id, "[ADMIN] %s je dao %d levela igracu %s", szPlayerName[id], iLevel, szPlayerName[iTarget]);
  440. Log("[ADMIN] %s <%s> je dao %d levela igracu %s <%s>", szPlayerName[id], szPlayerAuthid[id], iLevel, szPlayerName[iTarget], szPlayerAuthid[iTarget]);
  441.  
  442. Print(0, "!n[ADMIN]!g %s!n: je dao!g %d!n levela igracu!g %s!n", szPlayerName[id], iLevel, szPlayerName[iTarget]);
  443. Print(iTarget, "!g[%s]!n Dostigao si: Rank.!g%s!n, Lv.!g%d!n.", szPluginName, g_mPlayerData[ g_iPlayerLevel[ iTarget ] ][ m_szRankName ], g_iPlayerLevel[iTarget] );
  444.  
  445. return PLUGIN_HANDLED
  446.  
  447. }
  448. return PLUGIN_HANDLED
  449. }
  450.  
  451. public Event_DeathMsg( )
  452. {
  453. new iKiller = read_data( 1 );
  454. new iVictim = read_data( 2 );
  455.  
  456. if( iKiller == iVictim|| ! is_user_connected( iKiller ) || ! is_user_connected( iVictim ) )
  457. return;
  458.  
  459. new XPAmount = get_pcvar_num( g_KillXP );
  460.  
  461. if( read_data( 3 ) )
  462. XPAmount += get_pcvar_num( g_HeadShotXP );
  463.  
  464. static sWeapon[ 26 ];
  465.  
  466. read_data( 4, sWeapon, charsmax( sWeapon ) );
  467.  
  468. if( equal( sWeapon, "hegrenade" ) )
  469. XPAmount += get_pcvar_num( g_GrenadeXP );
  470. else if( equal( sWeapon, "knife" ) )
  471. XPAmount += get_pcvar_num( g_KnifeXP );
  472.  
  473. g_iPlayerXP[ iKiller ] += XPAmount;
  474.  
  475. CheckLevel(iKiller);
  476. }
  477.  
  478. public CheckLevel( iPlayer )
  479. {
  480. if( g_iPlayerLevel[ iPlayer ] < MAXLEVEL )
  481. {
  482. while( g_iPlayerXP[ iPlayer ] >= g_mPlayerData[ g_iPlayerLevel[ iPlayer ] + 1 ][ m_iRankXP ] )
  483. {
  484. g_iPlayerLevel[ iPlayer ]++;
  485. new iReturn
  486. client_cmd(iPlayer, "spk %s", g_szLevelUp)
  487. ExecuteForward(g_fUserLevelUp, iReturn, iPlayer, g_iPlayerLevel[iPlayer], g_iPlayerXP[iPlayer])
  488. Print(0, "!g[%s]!n Igrac!g %s!n je promovisan u!g %s!n (!gLv. %d!n)",
  489. szPluginName,
  490. szPlayerName[iPlayer],
  491. g_mPlayerData[ g_iPlayerLevel[iPlayer] ][ m_szRankName ],
  492. g_iPlayerLevel[iPlayer] );
  493. }
  494. }
  495. }
  496.  
  497. stock SaveData(id)
  498. {
  499. new szKey[64], szData[256];
  500.  
  501. switch( get_pcvar_num(g_SaveDataType) )
  502. {
  503. case 2: formatex(szKey , charsmax(szKey), "%s-NAME" , szPlayerName[id])
  504. case 3: formatex(szKey , charsmax(szKey), "%s-IP" , szPlayerIP[id])
  505. default: formatex(szKey , charsmax(szKey), "%s-ID" , szPlayerAuthid[id])
  506. }
  507.  
  508. formatex(szData , charsmax(szData) , "%i#%i#" , g_iPlayerLevel[id], g_iPlayerXP[id])
  509. nvault_pset(g_Vault , szKey , szData)
  510. }
  511.  
  512. stock LoadData(id)
  513. {
  514. new szKey[64], szData[256], szXP[32], szLevel[32];
  515.  
  516. switch( get_pcvar_num(g_SaveDataType) )
  517. {
  518. case 2: formatex(szKey , charsmax(szKey), "%s-NAME" , szPlayerName[id])
  519. case 3: formatex(szKey , charsmax(szKey), "%s-IP" , szPlayerIP[id])
  520. default: formatex(szKey , charsmax(szKey), "%s-ID" , szPlayerAuthid[id])
  521. }
  522.  
  523. formatex(szData , charsmax(szData), "%i#%i#", g_iPlayerLevel[id], g_iPlayerXP[id])
  524. nvault_get(g_Vault, szKey, szData, charsmax(szData))
  525.  
  526. replace_all(szData , charsmax(szData), "#", " ")
  527. parse(szData, szLevel, charsmax(szLevel), szXP, charsmax(szXP))
  528. g_iPlayerLevel[id] = str_to_num(szLevel)
  529. g_iPlayerXP[id] = str_to_num(szXP)
  530. }
  531.  
  532. stock Print( id, String[ ], any:... ) {
  533. static szMsg[ 192 ];
  534. vformat( szMsg, charsmax( szMsg ), String, 3 );
  535.  
  536. replace_all( szMsg, charsmax( szMsg ), "!n", "^1" );
  537. replace_all( szMsg, charsmax( szMsg ), "!t", "^3" );
  538. replace_all( szMsg, charsmax( szMsg ), "!g", "^4" );
  539.  
  540. static msgSayText = 0;
  541. if( !msgSayText ) msgSayText = get_user_msgid( "SayText" );
  542.  
  543. new Players[ 32 ], iNum = 1, i;
  544.  
  545. if( id ) Players[ 0 ] = id;
  546. else get_players( Players, iNum, "ch" );
  547.  
  548. for( --iNum; iNum >= 0; iNum-- ) {
  549. i = Players[ iNum ];
  550.  
  551. message_begin( MSG_ONE_UNRELIABLE, msgSayText, _, i );
  552. write_byte( i );
  553. write_string( szMsg );
  554. message_end( );
  555. }
  556. }
  557.  
  558. stock Log(const message_fmt[], any:...) {
  559. static message[256];
  560. vformat(message, charsmax(message), message_fmt, 2);
  561.  
  562. static filename[96], log_file[64];
  563. static dir[64];
  564. if( !dir[0] ) {
  565. get_basedir(dir, charsmax(dir));
  566. add(dir, charsmax(dir), "/logs");
  567. }
  568.  
  569. format_time(filename, charsmax(filename), "%m-%d-%Y");
  570. formatex(log_file, charsmax(log_file), "%s/RankSystem_%s.log", dir, filename); /* Much faster than what format() can do */
  571. log_to_file(log_file, "%s", message);
  572. }
  573.  
  574. public plugin_natives()
  575. {
  576. register_native("get_user_xp", "_get_user_xp")
  577. register_native("set_user_xp", "_set_user_xp")
  578. register_native("get_user_max_xp", "_get_user_max_xp")
  579. register_native("get_max_levels", "_get_max_levels")
  580. register_native("get_user_level", "_get_user_level")
  581. register_native("set_user_level", "_set_user_level")
  582. register_native("get_user_rank", "_get_user_rank")
  583. register_native("get_user_next_rank", "_get_user_next_rank")
  584. }
  585.  
  586. public _get_user_xp(iPlugin,iParams)
  587. {
  588. return g_iPlayerXP[ get_param( 1 ) ]
  589. }
  590.  
  591. public _set_user_xp(iPlugin,iParams)
  592. {
  593. g_iPlayerXP[ get_param( 1 ) ] = get_param( 2 );
  594. SaveData( get_param( 1 ) );
  595. CheckLevel( get_param( 1 ) );
  596. }
  597.  
  598. public _get_user_level(iPlugin,iParams)
  599. {
  600. return g_iPlayerLevel[ get_param( 1 ) ]
  601. }
  602.  
  603. public _set_user_level(iPlugin,iParams)
  604. {
  605. g_iPlayerLevel[ get_param( 1 ) ] = get_param( 2 );
  606.  
  607. SaveData( get_param( 1 ) );
  608. CheckLevel( get_param( 1 ) );
  609. }
  610.  
  611. public _get_user_max_xp(iPlugin,iParams)
  612. {
  613. new iMaxLevel
  614.  
  615. if(g_iPlayerLevel[get_param( 1 )] > MAXLEVEL - 1)
  616. iMaxLevel = g_mPlayerData[ MAXLEVEL ][ m_iRankXP ]
  617. else
  618. iMaxLevel = g_mPlayerData[ g_iPlayerLevel[ get_param( 1 ) ] + 1 ][ m_iRankXP ]
  619.  
  620. return iMaxLevel
  621. }
  622.  
  623. public _get_user_rank(iPlugin,iParams)
  624. {
  625. set_string(2, g_mPlayerData[ g_iPlayerLevel[ get_param(1) ] ][ m_szRankName ], get_param(3))
  626. }
  627.  
  628. public _get_user_next_rank(iPlugin,iParams)
  629. {
  630. set_string(2, g_mPlayerData[ g_iPlayerLevel[ get_param(1) ] +1 ][ m_szRankName ], get_param(3))
  631. }
  632.  
  633. public _get_max_levels(iPlugin, iParams)
  634. {
  635. return MAXLEVEL
  636. }
  637.  
  638. public plugin_end()
  639. {
  640. nvault_close(g_Vault)
  641. }
  642.  
  643.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement