Advertisement
Sun_Jiro

Level sistemi

Aug 28th, 2023
581
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 10.81 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <amxmisc>
  3. #include <cstrike>
  4. #include <levels>
  5. #include <nvault>
  6. #include <zombieplague>
  7.  
  8. #define MAXLEVEL 71
  9.  
  10. new const LEVELS[MAXLEVEL] = {
  11. 90, // Needed on level 1
  12. 180, // Needed on level 2
  13. 300, // Needed on level 3
  14. 450, // Needed on level 4
  15. 700, // Needed on level 5
  16. 1200, // Needed on level 6
  17. 1800, // Needed on level 7
  18. 2800, // Needed on level 8
  19. 4100, // Needed on level 9
  20. 5200, // Needed on level 10
  21. 6000, // Needed on level 11
  22. 6800, // Needed on level 12
  23. 8200, // Needed on level 13
  24. 10200, // Needed on level 14
  25. 12000, // Needed on level 15
  26. 15000, // Needed on level 16
  27. 17500, // Needed on level 17
  28. 20500, // Needed on level 18
  29. 25500, // Needed on level 19
  30. 29000, // Needed on level 20
  31. 35000, // Needed on level 21
  32. 46000, // Needed on level 22
  33. 58000, // Needed on level 23
  34. 71000, // Needed on level 24
  35. 85000, // Needed on level 25
  36. 100000, // Needed on level 26
  37. 116000, // Needed on level 27
  38. 133000, // Needed on level 28
  39. 151000, // Needed on level 29
  40. 170000, // Needed on level 30
  41. 190000, // Needed on level 31
  42. 211000, // Needed on level 32
  43. 233000, // Needed on level 33
  44. 256000, // Needed on level 34
  45. 280000, // Needed on level 35
  46. 305000, // Needed on level 36
  47. 331000, // Needed on level 37
  48. 358000, // Needed on level 38
  49. 386000, // Needed on level 39
  50. 415000, // Needed on level 40
  51. 445000, // Needed on level 41
  52. 476000, // Needed on level 42
  53. 508000, // Needed on level 43
  54. 541000, // Needed on level 44
  55. 575000, // Needed on level 45
  56. 610000, // Needed on level 46
  57. 646000, // Needed on level 47
  58. 683000, // Needed on level 48
  59. 721000, // Needed on level 49
  60. 760000, // Needed on level 50
  61. 800000, // Needed on level 51
  62. 842000, // Needed on level 52
  63. 886000, // Needed on level 53
  64. 974000, // Needed on level 54
  65. 1020000, // Needed on level 55
  66. 1068000, // Needed on level 56
  67. 1118000, // Needed on level 57
  68. 1170000, // Needed on level 58
  69. 1224000, // Needed on level 59
  70. 1280000, // Needed on level 60
  71. 1338000, // Needed on level 61
  72. 1398000, // Needed on level 62
  73. 1460000, // Needed on level 63
  74. 1524000, // Needed on level 64
  75. 1590000, // Needed on level 65
  76. 1658000, // Needed on level 66
  77. 1728000, // Needed on level 67
  78. 1800000, // Needed on level 68
  79. 1874000, // Needed on level 69
  80. 1950000, // Needed on level 70
  81. 9999999 // Needed on level 71
  82. }; // Needed Xp on each Levels
  83.  
  84. new PlayerXp[33]
  85. new PlayerLevel[33]
  86.  
  87. new g_Vault
  88. new savexp, save_type, escape_xp_human, escape_xp_zombie
  89.  
  90. public plugin_init()
  91. {
  92.     register_plugin("Level Sistemi", "1.0", "DPCS")
  93.  
  94.     save_type = register_cvar("levels_savetype","0") // Save Xp to : 0 = NVault.
  95.     savexp = register_cvar("levels_save","1") // Save Xp by : 2 = Name, 1 = SteamID, 0 = IP.
  96.     escape_xp_human = register_cvar("escape_xp_amount_human", "90") // How much XP given to Humans when escape success?
  97.     escape_xp_zombie = register_cvar("escape_xp_amount_zombie", "45") // How much XP given to Humans when escape success?
  98.    
  99.     register_event("HLTV", "elbasi", "a", "1=0", "2=0")
  100.     register_clcmd("amx_levelmenu", "levelmenu")
  101.     register_clcmd("amx_levelver", "level_ver", ADMIN_RCON, "<authid, nick or #userid>")
  102. }
  103.  
  104. public elbasi()
  105. {
  106.     new players[32],inum,id
  107.     get_players(players,inum)
  108.     for(new i;i<inum;i++)
  109.     {
  110.         id = players[i]
  111.        
  112.         new current_ammopacks = zp_get_user_ammo_packs(id)
  113.         if(get_user_level(id) >= 10 && get_user_level(id) <= 19)
  114.         {
  115.             zp_set_user_ammo_packs(id, current_ammopacks + 5)
  116.             renkli_yazi(id,"!g[ZE] !nHesabina !t5CP !neklendi.")
  117.             renkli_yazi(id,"!g[ZE] !nAdded !t5AP !nto your account.")
  118.         }
  119.         else if(get_user_level(id) >= 20 && get_user_level(id) <= 29)
  120.         {
  121.             zp_set_user_ammo_packs(id, current_ammopacks + 10)
  122.             renkli_yazi(id,"!g[ZE] !nHesabina !t10CP !neklendi.")
  123.             renkli_yazi(id,"!g[ZE] !nAdded !t10AP !nto your account.")
  124.         }
  125.         else if(get_user_level(id) >= 30)
  126.         {
  127.             zp_set_user_ammo_packs(id, current_ammopacks + 15)
  128.             renkli_yazi(id,"!g[ZE] !nHesabina !t15CP !neklendi.")
  129.             renkli_yazi(id,"!g[ZE] !nAdded !t15AP !nto your account.")
  130.         }
  131.     }
  132. }
  133.  
  134. // Level sifirlama
  135. public levelmenu(id)
  136. {
  137.     if(get_user_flags(id) & ADMIN_RCON)
  138.     {
  139.         static amenu[512]
  140.         formatex(amenu,charsmax(amenu),"\yLevel Sifirlama icin oyuncu sec")
  141.         new menuz = menu_create(amenu,"silmemenu_devam")
  142.        
  143.         new players[32], tempid, pnum
  144.         new szName[32], szTempid[10]
  145.         get_players(players, pnum)
  146.        
  147.         for(new i; i < pnum; i++)
  148.         {
  149.             tempid = players[i]
  150.             if(is_user_connected(tempid) && !is_user_bot(tempid))
  151.             {
  152.                 get_user_name(tempid, szName, 31)
  153.                 num_to_str(tempid, szTempid, 9)
  154.                
  155.                 formatex(amenu, charsmax(amenu), "\w%s", szName)
  156.                 menu_additem(menuz, amenu, szTempid)
  157.             }
  158.         }
  159.        
  160.         menu_setprop(menuz,MPROP_EXIT,MEXIT_ALL)
  161.         menu_display(id,menuz,0)
  162.     }
  163.    
  164.     return PLUGIN_HANDLED
  165. }
  166.  
  167. public silmemenu_devam(id,menu,item)
  168. {
  169.     if(item == MENU_EXIT)
  170.     {
  171.         menu_destroy(menu)
  172.         return PLUGIN_HANDLED
  173.     }
  174.     new access,callback,data[6],iname[64]
  175.    
  176.     menu_item_getinfo(menu,item,access,data,5,iname,63,callback)
  177.    
  178.     new tempid = str_to_num(data)
  179.    
  180.     silmeislem(id, tempid)
  181.    
  182.     menu_destroy(menu)
  183.     return PLUGIN_HANDLED
  184. }
  185.  
  186. public silmeislem(id, player) {
  187.     if (!player)
  188.     return PLUGIN_HANDLED
  189.    
  190.     set_user_xp(player, 0)
  191.     set_user_level(player, 0)
  192.     SaveLevel(player)
  193.    
  194.     return PLUGIN_HANDLED
  195. }
  196.  
  197. // Level verme
  198. public level_ver(id, level, cid)
  199. {
  200.     if(!cmd_access(id, level, cid, 2))
  201.         return PLUGIN_HANDLED
  202.    
  203.     new arg[32], arg2[10], arg3[3]
  204.     read_argv(1, arg, charsmax(arg))
  205.     read_argv(2, arg2, charsmax(arg2))
  206.     read_argv(3, arg3, charsmax(arg3))
  207.    
  208.     if(arg3[0])
  209.         return PLUGIN_HANDLED
  210.    
  211.     new player = cmd_target(id, arg, charsmax(arg))
  212.     if(!player)
  213.         return PLUGIN_HANDLED
  214.    
  215.     set_user_xp(player, str_to_num(arg2))
  216.     SaveLevel(player)
  217.     check_level(player)
  218.    
  219.     return PLUGIN_HANDLED
  220. }
  221.  
  222. public plugin_cfg()
  223. {
  224.     //Open our vault and have g_Vault store the handle.
  225.     g_Vault = nvault_open("levels")
  226.  
  227.     //Make the plugin error if vault did not successfully open
  228.     if ( g_Vault == INVALID_HANDLE )
  229.         set_fail_state( "Error opening levels nVault, file does not exist!" )
  230. }
  231.  
  232. public plugin_precache()
  233. {
  234.     precache_sound("ze_dp/ze_levelup.wav")
  235. }
  236.  
  237. public plugin_natives()
  238. {
  239.     register_native("get_user_xp", "native_get_user_xp", 1)
  240.     register_native("set_user_xp", "native_set_user_xp", 1)
  241.     register_native("get_user_level", "native_get_user_level", 1)
  242.     register_native("set_user_level", "native_set_user_level", 1)
  243.     register_native("get_user_max_level", "native_get_user_max_level", 1)
  244. }
  245.  
  246. public plugin_end()
  247. {
  248.     //Close the vault when the plugin ends (map change\server shutdown\restart)
  249.     nvault_close(g_Vault)
  250. }
  251.  
  252. public client_connect(id)
  253. {
  254.     LoadLevel(id)
  255. }
  256.  
  257. public client_disconnect(id)
  258. {
  259.     SaveLevel(id)
  260.    
  261.     PlayerXp[id] = 0
  262.     PlayerLevel[id] = 0
  263. }
  264.  
  265. public zp_round_ended()
  266. {
  267.     new Alive_Terrorists_Number = GetPlayersNum(CsTeams:CS_TEAM_T)
  268.     new Alive_CT_Numbers = GetPlayersNum(CsTeams:CS_TEAM_CT)
  269.    
  270.     new iPlayers[32], iNum
  271.     get_players(iPlayers, iNum, "ace", "CT")
  272.    
  273.     for (new i = 0; i < iNum; i++)
  274.     {
  275.         if(PlayerLevel[iPlayers[i]] < MAXLEVEL-1)
  276.         {
  277.             if((Alive_CT_Numbers > Alive_Terrorists_Number) && (Alive_Terrorists_Number == 0))
  278.             {
  279.                 set_user_xp(iPlayers[i], get_user_xp(iPlayers[i]) + get_pcvar_num(escape_xp_human))
  280.                 SaveLevel(iPlayers[i])
  281.             }
  282.             else if((Alive_Terrorists_Number > Alive_CT_Numbers) && (Alive_CT_Numbers == 0))
  283.             {
  284.                 set_user_xp(iPlayers[i], get_user_xp(iPlayers[i]) + get_pcvar_num(escape_xp_zombie))
  285.                 SaveLevel(iPlayers[i])
  286.             }
  287.             check_level(iPlayers[i])
  288.         }
  289.     }
  290. }
  291.  
  292. public check_level(id)
  293. {
  294.     if(PlayerLevel[id] < MAXLEVEL-1)
  295.     {
  296.         while(PlayerXp[id] >= LEVELS[PlayerLevel[id]])
  297.         {
  298.             PlayerLevel[id]++
  299.             SaveLevel(id)
  300.            
  301.             static name[32]
  302.             get_user_name(id, name, charsmax(name))
  303.             renkli_yazi(0,"!g[DPCS] !n[ !t%s !n] Adli Oyuncu !n[ !t%i. !n] Level'e Ulasti.", name, PlayerLevel[id])
  304.         }
  305.     }
  306. }
  307.  
  308. SaveLevel(id)
  309. {
  310.     new szAuth[33];
  311.     new szKey[64];
  312.    
  313.     if (get_pcvar_num(savexp) == 0)
  314.     {
  315.         get_user_ip(id, szAuth , charsmax(szAuth), 1)
  316.         formatex(szKey , 63 , "%s-IP" , szAuth)
  317.     }
  318.     else if (get_pcvar_num(savexp) == 1)
  319.     {
  320.         get_user_authid(id , szAuth , charsmax(szAuth))
  321.         formatex(szKey , 63 , "%s-ID" , szAuth)
  322.     }
  323.     else if (get_pcvar_num(savexp) == 2)
  324.     {
  325.         get_user_name(id, szAuth , charsmax(szAuth))
  326.         formatex(szKey , 63 , "%s-NAME" , szAuth)
  327.     }
  328.    
  329.     if (!get_pcvar_num(save_type))
  330.     {
  331.         new szData[256]
  332.        
  333.         formatex(szData , 255 , "%i#%i#" , PlayerLevel[id], PlayerXp[id])
  334.        
  335.         nvault_pset(g_Vault , szKey , szData)
  336.     }
  337. }
  338.  
  339. LoadLevel(id)
  340. {
  341.     new szAuth[33];
  342.     new szKey[40];
  343.    
  344.     if (get_pcvar_num(savexp) == 0)
  345.     {
  346.         get_user_ip(id, szAuth , charsmax(szAuth), 1)
  347.         formatex(szKey , 63 , "%s-IP" , szAuth)
  348.     }
  349.     else if (get_pcvar_num(savexp) == 1)
  350.     {
  351.         get_user_authid(id , szAuth , charsmax(szAuth))
  352.         formatex(szKey , 63 , "%s-ID" , szAuth)
  353.     }
  354.     else if (get_pcvar_num(savexp) == 2)
  355.     {
  356.         get_user_name(id, szAuth , charsmax(szAuth))
  357.         formatex(szKey , 63 , "%s-NAME" , szAuth)
  358.     }
  359.    
  360.     if (!get_pcvar_num(save_type))
  361.     {
  362.         new szData[256];
  363.        
  364.         formatex(szData , 255, "%i#%i#", PlayerLevel[id], PlayerXp[id])
  365.        
  366.         nvault_get(g_Vault, szKey, szData, 255)
  367.        
  368.         replace_all(szData , 255, "#", " ")
  369.         new xp[32], level[32]
  370.         parse(szData, level, 31, xp, 31)
  371.         PlayerLevel[id] = str_to_num(level)
  372.         PlayerXp[id] = str_to_num(xp)
  373.     }
  374. }
  375.  
  376. // Native: get_user_xp
  377. public native_get_user_xp(id)
  378. {
  379.     return PlayerXp[id]
  380. }
  381.  
  382. // Native: set_user_xp
  383. public native_set_user_xp(id, amount)
  384. {
  385.     PlayerXp[id] = amount
  386. }
  387.  
  388. // Native: get_user_level
  389. public native_get_user_level(id)
  390. {
  391.     return PlayerLevel[id]
  392. }
  393.  
  394. // Native: set_user_xp
  395. public native_set_user_level(id, amount)
  396. {
  397.     PlayerLevel[id] = amount
  398. }
  399.  
  400. // Native: Gets user level by Xp
  401. public native_get_user_max_level(id)
  402. {
  403.     new gerilevel
  404.    
  405.     if(PlayerLevel[id] > (MAXLEVEL-1)) {
  406.         gerilevel = LEVELS[MAXLEVEL-1]
  407.     }
  408.     else {
  409.         gerilevel = LEVELS[PlayerLevel[id]]
  410.     }
  411.    
  412.     return gerilevel
  413. }
  414.  
  415. stock GetPlayersNum(CsTeams:iTeam) {
  416.     new iNum
  417.     for( new i = 1; i <= get_maxplayers(); i++ ) {
  418.         if(is_user_connected(i) && is_user_alive(i) && cs_get_user_team(i) == iTeam)
  419.             iNum++
  420.     }
  421.     return iNum
  422. }
  423.  
  424. stock renkli_yazi(const id, const input[], any:...)
  425. {
  426.     new count = 1, players[32]
  427.     static msg[191]
  428.     vformat(msg, sizeof(msg) - 1, input, 3)
  429.    
  430.     replace_all(msg, 190, "!n", "^x01")
  431.     replace_all(msg, 190, "!g", "^x04")
  432.     replace_all(msg, 190, "!t", "^x03")
  433.    
  434.     if(id) players[0] = id; else get_players(players, count, "ch")
  435.     for(new i = 0; i < count; i++)
  436.     {
  437.         if(is_user_connected(players[i]))
  438.         {
  439.             message_begin(MSG_ONE_UNRELIABLE, get_user_msgid("SayText"), _, players[i])
  440.             write_byte(players[i])
  441.             write_string(msg)
  442.             message_end()
  443.         }
  444.     }
  445. }
  446. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  447. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1055\\ f0\\ fs16 \n\\ par }
  448. */
  449.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement