## Right way to set Max-XPs in Level-System

Helping Topics
Raheem
Mod Developer
Posts: 1997
Joined: 3 Years Ago
Location: Egypt
Has thanked: 33 times
Been thanked: 111 times
Age: 22
Contact:

### Right way to set Max-XPs in Level-System

Hello,

How are you? Hope you are fine . In this topic we will learn how we can set right cvars for our levels system.

OK, first you may notice that in our levels system you can't control the xp value needed for next level. So first term you should get is when i say:

Max-XP for level 1
• Means how much xp i must get so i go to level 1? PlayerXP/NextLevelNeededXP
Our levels system, works like when a player enter server he get 50/100 and his level is 0. This means he need to get 100 xp to go to level 1.

In cvars, you need to define the max-xp for level 1:
• `ze_max_xp_first_level 100`
And need to define also the increment rate that max-xp for next levels will be multiplied by:
• `ze_maxlevels_increment 2`
How to know XP needed for level 50? maybe it's very high so we need to set right values

First there is equation, how next level needed xp calculated:
• nextLevelNeededXP = previousLevelNeededXP * IncrementFactor
Example:
• One player have 1200 xp and xp needed for next level is 1800. 1200/1800 So if he got the 1800 xp he will go to new level. 1800/UnknownValue and this unknown value is = 1800 * IncrementFactor
That's how it's calculated.
Seems it's hard to know level 40 will require how much xp so player get. And also you need to set right increment factor. For this reason i wrote a javafx program that will help in calculating max-xp needed for all levels.

Also i'll explain how to set some more increment factors like:
• From level 0 to level 20 - Increment factor 1.4
From level 21 to level 40 - Increment factor 1.1
You should also know about:
1. #define MAX_LEVEL 50
2. #define MAX_XP 500000
These definations can be changed from source then compile the plugin.

Let's see the software that will help in this:
NOTE: You will need installing JVM so this program working, download from here.

How to use it?
1. Write the starting level number.
2. Write Max-XP needed so player can reach this starting level.
3. Write the end level number.
4. Write the increment factor.
Then you can press any button:
1. Calculate all max-xp - Will show you list of all levels and max xp needed to reach them.
2. Calculate end level max-xp - will only calculate the max xp needed to reach the end level.
Some screenshots:
Example(Screenshot2):
1. MAX-XP For Levels:
2.
3. 2  -  110
4. 3  -  121
5. 4  -  133
Player to reach level 2 he should get 110 xp like: hisXP/110 and so on.

Now you can edit code in levels system to add more factors for ranges (You will edit `public Check_User_Level(id)`):
1. public Check_User_Level(id)
2. {
3.     if(!is_user_connected(id))
4.         return
5.
6.     if(g_iXP[id] >= g_iMaxXP[id])
7.     {
8.         if (get_pcvar_num(g_pCvarStartFromZero) == 1)
9.         {
10.             g_iXP[id] = 0
11.         }
12.
13.         new szName[32]
14.         g_iLevel[id] ++
15.
16.         if (g_iLevel[id] >= 0 && g_iLevel[id] < 20)
17.         {
18.             g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * 1.4)
19.         }
20.         else if (g_iLevel[id] >= 20 && g_iLevel[id] < 40)
21.         {
22.             g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * 1.2)
23.         }
24.         else if (g_iLevel[id] >= 40 && g_iLevel[id] <= 50) // 50 is our max
25.         {
26.             g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * 1.08)
27.         }
28.
29.         get_user_name(id, szName, charsmax(szName))
30.         ze_colored_print(0, "!g%s !tNow in Level %i!y!", szName, g_iLevel[id])
31.
32.         SaveData(id)
33.
34.         PlaySound(id, LEVELUP)
35.
36.         if (get_pcvar_num(g_pCvarLevelEffects) != 0)
37.         {
38.             // Screen Fade
39.             message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id)
40.             write_short(4096*2)
41.             write_short(4096*5)
42.             write_short(0x0001)
43.             write_byte(random(256))
44.             write_byte(random(256))
45.             write_byte(random(256))
46.             write_byte(150)
47.             message_end()
48.
49.             // Screen Shake
50.             message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, id)
51.             write_short(255<<14)
52.             write_short(10<<14)
53.             write_short(255<<14)
54.             message_end()
55.         }
56.     }
57. }
And edit `public Check_MaxXP(id)`:
1. public Check_MaxXP(id)
2. {
3.     new iCurrentMaxXP = g_iMaxXP[id]
4.
5.     new iMaxXP = get_pcvar_num(g_pCvarMaxXPFirstLevel)
6.
7.     if (g_iLevel[id] >= 0 && g_iLevel[id] < 20)
8.     {
9.         for (new i = 1; i <= g_iLevel[id]; i++)
10.         {
11.             iMaxXP = floatround(float(iMaxXP) * 1.4)
12.         }
13.     }
14.
15.     if (g_iLevel[id] >= 20 && g_iLevel[id] < 40)
16.     {
17.         for (new i = 1; i < 20; i++)
18.         {
19.             iMaxXP = floatround(float(iMaxXP) * 1.4)
20.         }
21.
22.         for (new i = 20; i <= g_iLevel[id]; i++)
23.         {
24.             iMaxXP = floatround(float(iMaxXP) * 1.2)
25.         }
26.     }
27.
28.     if (g_iLevel[id] >= 40 && g_iLevel[id] <= 50)
29.     {
30.         for (new i = 1; i < 20; i++)
31.         {
32.             iMaxXP = floatround(float(iMaxXP) * 1.4)
33.         }
34.
35.         for (new i = 20; i < g_iLevel[id]; i++)
36.         {
37.             iMaxXP = floatround(float(iMaxXP) * 1.2)
38.         }
39.
40.         for (new i = 40; i <= g_iLevel[id]; i++)
41.         {
42.             iMaxXP = floatround(float(iMaxXP) * 1.08)
43.         }
44.     }
45.
46.     if (iCurrentMaxXP != iMaxXP)
47.     {
48.         g_iMaxXP[id] = iMaxXP
49.     }
50. }
Any problem, please post down.
Last edited by Raheem on 16 Sep 2018, 22:35, edited 1 time in total.
Reason: Fixed check max-xp
You don't know? Learn and you will know.

Mohamed Alaa
Mod Developer
Posts: 630
Joined: 3 Years Ago
Location: Egypt
Has thanked: 34 times
Been thanked: 50 times
Age: 20
Contact:
To get max xp to level 50 for example:
IncrementFactor * 50 * current level max xp

[ Post made via Android ]
Want your own mod edition? PM me.
Accepting web projects.
CS 1.6 hosting: powergamingtech.com

Raheem
Mod Developer
Posts: 1997
Joined: 3 Years Ago
Location: Egypt
Has thanked: 33 times
Been thanked: 111 times
Age: 22
Contact:
Jack GamePlay wrote:
1 Year Ago
To get max xp to level 50 for example:
IncrementFactor * 50 * current level max xp
No, not right.
You don't know? Learn and you will know.

Mark
Senior Member
Posts: 283
Joined: 1 Year Ago
Location: Des Moines/USA
Donation: 1x donated in total €10.00
Has thanked: 6 times
Been thanked: 21 times
Age: 34
Contact:
Raheem wrote:
1 Year Ago
Jack GamePlay wrote:
1 Year Ago
To get max xp to level 50 for example:
IncrementFactor * 50 * current level max xp
No, not right.
so would this work?
1.         if (get_pcvar_num(g_pCvarStartFromZero) == 1)
2.         {
3.             g_iXP[id] = 0
4.         }
5.
6.         new szName[32]
7.         g_iLevel[id] ++
8.
9.         if (g_iLevel[id] >= 0 && g_iLevel[id] < 10)
10.         {
11.             g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * 1.3)
12.         }
13.         else if (g_iLevel[id] >= 10 && g_iLevel[id] < 20)
14.         {
15.             g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * 1.4)
16.         }
17.         else if (g_iLevel[id] >= 20 && g_iLevel[id] <= 30)
18.         {
19.             g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * 1.5)
20.         }
21.         else if (g_iLevel[id] >= 30 && g_iLevel[id] < 50)
22.         {
23.             g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * 1.6)
24.         }
1. 2  -  130
2. 3  -  169
3. 4  -  220
4. 5  -  286
5. 6  -  371
6. 7  -  483
7. 8  -  627
8. 9  -  816
9. 10  -  1060
10. 11  -  1378
11. 12  -  1791
12. 13  -  2329
13. 14  -  3027
14. 15  -  3936
15. 16  -  5116
16. 17  -  6651
17. 18  -  8647
18. 19  -  11241
19. 20  -  14613
20. 21  -  21920
21. 22  -  32879
22. 23  -  49319
23. 24  -  73978
24. 25  -  110967
25. 26  -  166451
26. 27  -  249677
27. 28  -  374515
28. 29  -  561773
29. 30  -  842659
30. 31  -  1348254
31. 32  -  2157207
32. 33  -  3451531
33. 34  -  5522450
34. 35  -  8835920
35. 36  -  14137472
36. 37  -  22619955
37. 38  -  36191928
38. 39  -  57907086
39. 40  -  92651337
40. 41  -  148242139
41. 42  -  237187422
42. 43  -  379499876
43. 44  -  607199801
44. 45  -  971519682
45. 46  -  1554431491
46. 47  -  2487090386
47. 48  -  3979344618
48. 49  -  6366951389
49. 50  -  10187122222

Raheem
Mod Developer
Posts: 1997
Joined: 3 Years Ago
Location: Egypt
Has thanked: 33 times
Been thanked: 111 times
Age: 22
Contact:
Will work but 10187122222 is incredible number , should when level high you low the factor.
You don't know? Learn and you will know.

Raheem
Mod Developer
Posts: 1997
Joined: 3 Years Ago
Location: Egypt
Has thanked: 33 times
Been thanked: 111 times
Age: 22
Contact:
I forget set ranges in public Check_MaxXP(id), please see update.
You don't know? Learn and you will know.

Raheem
Mod Developer
Posts: 1997
Joined: 3 Years Ago
Location: Egypt
Has thanked: 33 times
Been thanked: 111 times
Age: 22
Contact:
Updated, re-read.
You don't know? Learn and you will know.

czirimbolo
Veteran Member
Posts: 557
Joined: 2 Years Ago
Has thanked: 20 times
Been thanked: 2 times
Contact:
Ok what about cvar ze_maxlevels_increment ? It work only for level 0 to level 20 in this example?

Raheem
Mod Developer
Posts: 1997
Joined: 3 Years Ago
Location: Egypt
Has thanked: 33 times
Been thanked: 111 times
Age: 22
Contact:
Not needed with code i posted, you can remove it even from the code.
You don't know? Learn and you will know.

czirimbolo
Veteran Member
Posts: 557
Joined: 2 Years Ago
Has thanked: 20 times
Been thanked: 2 times
Contact:
Raheem, can you help me? Here is my level system

Code: Select all

``````#include <zombie_escape>

// Defines
#define MAX_LEVEL 50
#define MAX_XP 5000000
#define TASK_SHOWHUD 2020
#define TASK_DOUBLE 1133
#define REPEAT_TIME 60.0
#define ID_SHOWHUD (taskid - TASK_SHOWHUD)
#define LEVELUP "levelup_ZE/ze_levelup.wav"

// Constants
new const g_szLevelsVault[] = "Levels"
new const g_szRanksVault[] = "Ranks"

// Messages
const Float:HUD_SPECT_X = -1.0
const Float:HUD_SPECT_Y = 0.70
const Float:HUD_STATS_X = -1.0
const Float:HUD_STATS_Y = 0.90

const HUD_STATS_ZOMBIE_R = 200
const HUD_STATS_ZOMBIE_G = 220
const HUD_STATS_ZOMBIE_B = 0

const HUD_STATS_HUMAN_R = 0
const HUD_STATS_HUMAN_G = 200
const HUD_STATS_HUMAN_B = 210

const HUD_STATS_SPEC_R = 100
const HUD_STATS_SPEC_G = 100
const HUD_STATS_SPEC_B = 100

// Variables
new g_iLevel[33],
g_iXP[33],
g_iMaxXP[33],
Float:g_fDamage[33],
g_MsgSync,
g_iLevelsVaultHandle,
g_iRanksVaultHandle,
bool:g_bIsDoubleHours

// Cvars
new g_pCvarZombieInfect,
g_pCvarEscapeSuccess,
g_pCvarEnableDamage,
g_pCvarRequiredDamage,
g_pCvarDamageAward,
g_pCvarStartXP,
g_pCvarMaxXPFirstLevel,
g_pCvarPercentageStyle,
g_pCvarStartFromZero,
g_pCvarAddCommas,
g_pCvarLevelEffects,
g_pCvarDoubleXP

public plugin_natives()
{
register_native("ze_get_user_xp", "native_ze_get_user_xp", 1)
register_native("ze_set_user_xp", "native_ze_set_user_xp", 1)
register_native("ze_get_user_level", "native_ze_get_user_level", 1)
register_native("ze_set_user_level", "native_ze_set_user_level", 1)
register_native("ze_get_user_max_xp", "native_ze_get_user_max_xp", 1)
register_native("ze_set_user_max_xp", "native_ze_set_user_max_xp", 1)
}

public plugin_precache()
{
precache_sound(LEVELUP)
}

public plugin_init()
{
register_plugin("[ZE] Level-XP System", "1.8", "Raheem/JaCk")

// Hook Chains
RegisterHookChain(RG_CBasePlayer_TakeDamage, "Fw_TakeDamage_Post", 1)

// Cvars
g_pCvarZombieInfect = register_cvar("ze_zombie_infect", "3")
g_pCvarEscapeSuccess = register_cvar("ze_escape_success", "5")
g_pCvarEnableDamage = register_cvar("ze_enable_dmg", "1")
g_pCvarRequiredDamage = register_cvar("ze_required_dmg", "50.0")
g_pCvarDamageAward = register_cvar("ze_dmg_award", "3")
g_pCvarStartXP = register_cvar("ze_start_xp", "50")
g_pCvarMaxXPFirstLevel = register_cvar("ze_max_xp_first_level", "100")
g_pCvarPercentageStyle = register_cvar("ze_enable_percentage_style", "1")
g_pCvarStartFromZero = register_cvar("ze_new_level_zero_xp", "0")
g_pCvarAddCommas = register_cvar("ze_add_commas_to_xp", "1")
g_pCvarLevelEffects = register_cvar("ze_level_up_effects", "1")
g_pCvarDoubleXP = register_cvar("ze_double_xp", "9-12")

// Messages
g_MsgSync = CreateHudSyncObj()
}

public client_putinserver(id)
{
if(is_user_hltv(id) || is_user_bot(id))
return

// Just 1 second delay
set_task(1.0, "DelayLoad", id)

// Other tasks
set_task(1.0, "Show_Hud", id+TASK_SHOWHUD, _, _, "b")
set_task(0.1, "Check_MaxXP", id, _, _, "b")

// Message task
DoubleHours()

if (g_bIsDoubleHours)
{
set_task(REPEAT_TIME, "HappyHours", id+TASK_DOUBLE, _, _, "b")
}
}

public HappyHours(taskid)
{
new id = taskid - TASK_DOUBLE

DoubleHours()

if (!g_bIsDoubleHours)
remove_task(taskid)

new szDoubleHours[32]

get_pcvar_string(g_pCvarDoubleXP, szDoubleHours, charsmax(szDoubleHours))

set_dhudmessage(0, 255, 0, -1.0, 0.5, 0, 0.0, 10.0)
show_dhudmessage(id, "DOUBLE XP: %s", szDoubleHours)
}

public DelayLoad(id)
{
// Load his data
LoadData(id)
}

public client_disconnected(id)
{
if(is_user_hltv(id) || is_user_bot(id))
return

remove_task(id+TASK_SHOWHUD)
remove_task(id)
}

public Check_MaxXP(id)
{
new iCurrentMaxXP = g_iMaxXP[id]

new iMaxXP = get_pcvar_num(g_pCvarMaxXPFirstLevel)

if (g_iLevel[id] >= 0 && g_iLevel[id] < 10)
{
for (new i = 1; i <= g_iLevel[id]; i++)
{
iMaxXP = floatround(float(iMaxXP) * 1.55)
}
}

if (g_iLevel[id] >= 10 && g_iLevel[id] < 25)
{
for (new i = 1; i < 10; i++)
{
iMaxXP = floatround(float(iMaxXP) * 1.55)
}

for (new i = 10; i <= g_iLevel[id]; i++)
{
iMaxXP = floatround(float(iMaxXP) * 1.28)
}
}

if (g_iLevel[id] >= 40 && g_iLevel[id] <= 50)
{
for (new i = 1; i < 40; i++)
{
iMaxXP = floatround(float(iMaxXP) * 1.28)
}

for (new i = 20; i < g_iLevel[id]; i++)
{
iMaxXP = floatround(float(iMaxXP) * 1.04)
}

for (new i = 40; i <= g_iLevel[id]; i++)
{
iMaxXP = floatround(float(iMaxXP) * 1.04)
}
}

if (iCurrentMaxXP != iMaxXP)
{
g_iMaxXP[id] = iMaxXP
}
}

public Show_Hud(taskid)
{
new iPlayer = ID_SHOWHUD

if (!is_user_alive(iPlayer))
{
iPlayer = pev(iPlayer, pev_iuser2)

if (!is_user_alive(iPlayer))
return
}

if (get_pcvar_num(g_pCvarPercentageStyle) != 0)
{
if(iPlayer != ID_SHOWHUD)
{
set_hudmessage(HUD_STATS_SPEC_R, HUD_STATS_SPEC_G, HUD_STATS_SPEC_B, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[iPlayer], (float(g_iXP[iPlayer])/float(g_iMaxXP[iPlayer])) * 100.0)
}
else if (ze_is_user_zombie(iPlayer))
{
set_hudmessage(HUD_STATS_ZOMBIE_R, HUD_STATS_ZOMBIE_G, HUD_STATS_ZOMBIE_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[ID_SHOWHUD], (float(g_iXP[ID_SHOWHUD])/float(g_iMaxXP[ID_SHOWHUD])) * 100.0)
}
else
{
set_hudmessage(HUD_STATS_HUMAN_R, HUD_STATS_HUMAN_G, HUD_STATS_HUMAN_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[ID_SHOWHUD], (float(g_iXP[ID_SHOWHUD])/float(g_iMaxXP[ID_SHOWHUD])) * 100.0)
}
}
else
{
if(iPlayer != ID_SHOWHUD)
{
if (get_pcvar_num(g_pCvarAddCommas) == 1)
{
new szSpecXP[15], szSpecMaxXP[15]

AddCommas(g_iXP[iPlayer], szSpecXP, charsmax(szSpecXP))
AddCommas(g_iMaxXP[iPlayer], szSpecMaxXP, charsmax(szSpecMaxXP))

set_hudmessage(HUD_STATS_SPEC_R, HUD_STATS_SPEC_G, HUD_STATS_SPEC_B, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[iPlayer], szSpecXP, szSpecMaxXP)
}
else
{
set_hudmessage(HUD_STATS_SPEC_R, HUD_STATS_SPEC_G, HUD_STATS_SPEC_B, HUD_SPECT_X, HUD_SPECT_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[iPlayer], g_iXP[iPlayer], g_iMaxXP[iPlayer])
}
}
else if (ze_is_user_zombie(iPlayer))
{
if (get_pcvar_num(g_pCvarAddCommas) == 1)
{
new szZombieXP[15], szZombieMaxXP[15]

AddCommas(g_iXP[ID_SHOWHUD], szZombieXP, charsmax(szZombieXP))
AddCommas(g_iMaxXP[ID_SHOWHUD], szZombieMaxXP, charsmax(szZombieMaxXP))

set_hudmessage(HUD_STATS_ZOMBIE_R, HUD_STATS_ZOMBIE_G, HUD_STATS_ZOMBIE_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[ID_SHOWHUD], szZombieXP, szZombieMaxXP)
}
else
{
set_hudmessage(HUD_STATS_ZOMBIE_R, HUD_STATS_ZOMBIE_G, HUD_STATS_ZOMBIE_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[ID_SHOWHUD], g_iXP[ID_SHOWHUD], g_iMaxXP[ID_SHOWHUD])
}
}
else
{
if (get_pcvar_num(g_pCvarAddCommas) == 1)
{
new szHumanXP[15], szHumanMaxXP[15]

AddCommas(g_iXP[ID_SHOWHUD], szHumanXP, charsmax(szHumanXP))
AddCommas(g_iMaxXP[ID_SHOWHUD], szHumanMaxXP, charsmax(szHumanMaxXP))

set_hudmessage(HUD_STATS_HUMAN_R, HUD_STATS_HUMAN_G, HUD_STATS_HUMAN_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[ID_SHOWHUD], szHumanXP, szHumanMaxXP)
}
else
{
set_hudmessage(HUD_STATS_HUMAN_R, HUD_STATS_HUMAN_G, HUD_STATS_HUMAN_B, HUD_STATS_X, HUD_STATS_Y, 0, 6.0, 1.1, 0.0, 0.0, -1)
ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[ID_SHOWHUD], g_iXP[ID_SHOWHUD], g_iMaxXP[ID_SHOWHUD])
}
}
}
}

public ze_roundend(WinTeam)
{
if (WinTeam == ZE_TEAM_HUMAN)
{
for(new id = 1; id <= get_member_game(m_nMaxPlayers); id++)
{
if (!is_user_alive(id) || get_member(id, m_iTeam) == TEAM_TERRORIST)
continue

g_iXP[id] += get_pcvar_num(g_pCvarEscapeSuccess)
SaveData(id)
Check_User_Level(id)
}
}

remove_task(TASK_SHOWHUD)
}

public Check_User_Level(id)
{
if(!is_user_connected(id))
return

if(g_iXP[id] >= g_iMaxXP[id])
{
if (get_pcvar_num(g_pCvarStartFromZero) == 1)
{
g_iXP[id] = 0
}

new szName[32]
g_iLevel[id] ++

if (g_iLevel[id] >= 0 && g_iLevel[id] < 10)
{
g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * 1.55)
}
else if (g_iLevel[id] >= 10 && g_iLevel[id] < 25)
{
g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * 1.28)
}
else if (g_iLevel[id] >= 25 && g_iLevel[id] < 40)
{
g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * 1.04)
}
else if (g_iLevel[id] >= 40 && g_iLevel[id] <= 50) // 50 is our max
{
g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * 1.02)
}

get_user_name(id, szName, charsmax(szName))
ze_colored_print(0, "!g%s !tNow in Level %i!y!", szName, g_iLevel[id])

SaveData(id)

PlaySound(id, LEVELUP)

if (get_pcvar_num(g_pCvarLevelEffects) != 0)
{
// Screen Fade
message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id)
write_short(4096*2)
write_short(4096*5)
write_short(0x0001)
write_byte(random(256))
write_byte(random(256))
write_byte(random(256))
write_byte(150)
message_end()

// Screen Shake
message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, id)
write_short(255<<14)
write_short(10<<14)
write_short(255<<14)
message_end()
}
}
}

public ze_user_infected(iVictim, iInfector)
{
if (iInfector == 0)
return

g_iXP[iInfector] += get_pcvar_num(g_pCvarZombieInfect)
SaveData(iInfector)
Check_User_Level(iInfector)
}

public Fw_TakeDamage_Post(iVictim, iInflictor, iAttacker, Float:fDamage, bitsDamageType)
{
// Player Damage Himself
if (iVictim == iAttacker || !is_user_alive(iVictim) || !is_user_alive(iAttacker) || ze_is_user_zombie(iAttacker) || !get_pcvar_num(g_pCvarEnableDamage))
return HC_CONTINUE

// Same Team?
if (get_member(iAttacker, m_iTeam) == get_member(iVictim, m_iTeam))
return HC_CONTINUE

// Store Damage For every Player
g_fDamage[iAttacker] += fDamage

// Damage Calculator Equal or Higher than needed damage
if (g_fDamage[iAttacker] >= get_pcvar_float(g_pCvarRequiredDamage))
{
// Give Player The Coins
g_iXP[iAttacker] += get_pcvar_num(g_pCvarDamageAward)
SaveData(iAttacker)
Check_User_Level(iAttacker)

// Rest The Damage Calculator
g_fDamage[iAttacker] = 0.0
}
return HC_CONTINUE
}

public SaveData(id)
{
new szAuthID[35], szName[32]
get_user_authid(id, szAuthID, charsmax(szAuthID))
get_user_name(id, szName, charsmax(szName))

// Set Him to max if he Higher than Max Value
if(g_iLevel[id] > MAX_LEVEL)
{
g_iLevel[id] = MAX_LEVEL
}

if(g_iXP[id] > MAX_XP)
{
g_iXP[id] = MAX_XP
}

new szData[256]
formatex(szData , charsmax(szData), "%i %i %i", g_iLevel[id], g_iXP[id], g_iMaxXP[id])

// Open the Vaults
g_iLevelsVaultHandle = nvault_open(g_szLevelsVault)
g_iRanksVaultHandle = nvault_open(g_szRanksVault)

// Saves His Data
nvault_set(g_iLevelsVaultHandle, szAuthID, szData)
nvault_set(g_iRanksVaultHandle, szAuthID, szName)

// Close Vaults
nvault_close(g_iLevelsVaultHandle)
nvault_close(g_iRanksVaultHandle)
}

public LoadData(id)
{
new szData[256], szAuthID[35], szName[32]

get_user_authid(id, szAuthID, charsmax(szAuthID))
get_user_name(id, szName, charsmax(szName))

// Useless Variable
new iTimestamp, iExists

// Open the Vault
g_iLevelsVaultHandle = nvault_open(g_szLevelsVault)

iExists = nvault_lookup(g_iLevelsVaultHandle, szAuthID, szData, charsmax(szData), iTimestamp)

// Close Vault
nvault_close(g_iLevelsVaultHandle)

if (!iExists)
{
g_iLevel[id] = 0
g_iXP[id] = get_pcvar_num(g_pCvarStartXP)
g_iMaxXP[id] = get_pcvar_num(g_pCvarMaxXPFirstLevel)
SaveData(id)
}
else
{
new iLevel[32], iXP[32], iMaxLevel[32]
parse(szData, iLevel, 31, iXP, 31, iMaxLevel, 31)

g_iLevel[id] = str_to_num(iLevel)
g_iXP[id] = str_to_num(iXP)
g_iMaxXP[id] = str_to_num(iMaxLevel)
}
}

public native_ze_get_user_xp(id)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false;
}

return g_iXP[id]
}

public native_ze_set_user_xp(id, amount)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false;
}

DoubleHours()

new iAddedAmount = amount - g_iXP[id]

if (g_bIsDoubleHours)
{
g_iXP[id] = g_iXP[id] + (iAddedAmount * 2)
}
else
{
g_iXP[id] = amount
}

Check_User_Level(id)
SaveData(id)
return true;
}

public native_ze_get_user_level(id)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false;
}

return g_iLevel[id]
}

public native_ze_set_user_level(id, amount)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false;
}

g_iLevel[id] = amount

if (get_pcvar_num(g_pCvarStartFromZero) == 1)
{
g_iXP[id] = 0
}

SaveData(id)

return true;
}

public native_ze_get_user_max_xp(id)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false;
}

return g_iMaxXP[id]
}

public native_ze_set_user_max_xp(id, amount)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
return false;
}

g_iMaxXP[id] = amount

SaveData(id)

return true;
}

stock DoubleHours()
{
new szTime[3], szDoubleHours[32], szDoubleHours_Start[32], szDoubleHours_End[32]
get_time("%H", szTime, charsmax(szTime))

get_pcvar_string(g_pCvarDoubleXP, szDoubleHours, charsmax(szDoubleHours))

for (new ch = 0; ch <= charsmax(szDoubleHours); ch++)
{
if (szDoubleHours[ch] == '-')
szDoubleHours[ch] = ' '
}

parse(szDoubleHours, szDoubleHours_Start, charsmax(szDoubleHours_Start), szDoubleHours_End, charsmax(szDoubleHours_End))

new iTime, iDoubleHourStart, iDoubleHourEnd

iTime = str_to_num(szTime)
iDoubleHourStart = str_to_num(szDoubleHours_Start)
iDoubleHourEnd = str_to_num(szDoubleHours_End)

if(iDoubleHourEnd > iTime >= iDoubleHourStart)
{
g_bIsDoubleHours = true
}
else
{
g_bIsDoubleHours = false
}
}``````
I would like this:

Code: Select all

``````1,55 factor  1 to 10 level
1,28 factor  10 to 25 level
1,04 factor 25 to 40
1,02  facotr  40 to 50``````
I messed up public Check_MaxXP(id)

### Who is online

Users browsing this forum: No registered users and 3 guests