++++++>>>>>czirimbolo wrote: ↑5 years ago Raheem, can you help me? Here is my level system
I would like this: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 messed up public Check_MaxXP(id)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
- #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 <= g_iLevel[id]; i++)
- {
- iMaxXP = floatround(float(iMaxXP) * 1.28)
- }
- }
- if (g_iLevel[id] >= 25 && g_iLevel[id] <= 40)
- {
- for (new i = 1; i <= g_iLevel[id]; i++)
- {
- iMaxXP = floatround(float(iMaxXP) * 1.04)
- }
- }
- if (g_iLevel[id] >= 40 && g_iLevel[id] <= 50)
- {
- for (new i = 1; i <= g_iLevel[id]; i++)
- {
- iMaxXP = floatround(float(iMaxXP) * 1.02)
- }
- }
- 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
- }
- }