Available double xp

Unpaid Requests, Public Plugins
czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

double xp

#1

Post by czirimbolo » 5 years ago

hello,

can someone make a plugin which adds double xp from (for example) 23:00 - 10:00?
Image

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#2

Post by Raheem » 5 years ago

Hello,

It will be simpler if we added it in the plugin itself. I mean in the set xp native in specific time we will multiply values by factor.

Please post your levels plugin source.
He who fails to plan is planning to fail

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#3

Post by czirimbolo » 5 years ago

Code: Select all

#include <zombie_escape>

// Defines
#define MAX_LEVEL 50
#define MAX_XP 500000
#define TASK_SHOWHUD 2020
#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

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

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_pCvarMaxLevelsIncrement = register_cvar("ze_maxlevels_increment", "2.0")
	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")
	
	// 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")
}

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)
	
	for (new i = 1; i <= g_iLevel[id]; i++)
	{
		iMaxXP = floatround(float(iMaxXP) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
	}
	
	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] ++
		g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
		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;
	}
	
	g_iXP[id] = amount
	
	Check_User_Level(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
	}
	
	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
	return true;
}
can you make a cvar for it (to change hours) ?
Image

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#4

Post by Raheem » 5 years ago

Try:
  • Code: Select all

    #include <zombie_escape>
    
    // Defines
    #define MAX_LEVEL 50
    #define MAX_XP 500000
    #define TASK_SHOWHUD 2020
    #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_pCvarMaxLevelsIncrement, 
    	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_pCvarMaxLevelsIncrement = register_cvar("ze_maxlevels_increment", "2.0")
    	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")
    }
    
    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)
    	
    	for (new i = 1; i <= g_iLevel[id]; i++)
    	{
    		iMaxXP = floatround(float(iMaxXP) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
    	}
    	
    	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] ++
    		g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
    		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()
    	
    	if (g_bIsDoubleHours)
    	{
    		g_iXP[id] = amount * 2
    	}
    	else
    	{
    		g_iXP[id] = amount
    	}
    	
    	Check_User_Level(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
    	}
    	
    	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
    	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
    	}
    }
Last edited by Raheem 5 years ago, edited 1 time in total.
Reason: Forget declaring g_bIsDoubleHours variable, fixed now
He who fails to plan is planning to fail

User avatar
sPe3doN
Senior Member
Senior Member
Algeria
Posts: 258
Joined: 7 years ago
Contact:

#5

Post by sPe3doN » 5 years ago

Raheem wrote: 5 years ago Try:
  • Code: Select all

    #include <zombie_escape>
    
    // Defines
    #define MAX_LEVEL 50
    #define MAX_XP 500000
    #define TASK_SHOWHUD 2020
    #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_bIsHappyHour
    
    // Cvars
    new g_pCvarZombieInfect, 
    	g_pCvarEscapeSuccess, 
    	g_pCvarEnableDamage, 
    	g_pCvarRequiredDamage, 
    	g_pCvarDamageAward, 
    	g_pCvarStartXP, 
    	g_pCvarMaxLevelsIncrement, 
    	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_pCvarMaxLevelsIncrement = register_cvar("ze_maxlevels_increment", "2.0")
    	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")
    }
    
    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)
    	
    	for (new i = 1; i <= g_iLevel[id]; i++)
    	{
    		iMaxXP = floatround(float(iMaxXP) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
    	}
    	
    	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] ++
    		g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
    		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()
    	
    	if (g_bIsDoubleHours)
    	{
    		g_iXP[id] = amount * 2
    	}
    	else
    	{
    		g_iXP[id] = amount
    	}
    	
    	Check_User_Level(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
    	}
    	
    	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
    	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
    	}
    }
raheem is theat possibel to add this msg when double xp time start ? Image
Image

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#6

Post by Raheem » 5 years ago

Yes possible, just first confirm that the code i posted works then we will see other things.
He who fails to plan is planning to fail

User avatar
Spir0x
Veteran Member
Veteran Member
Tunisia
Posts: 641
Joined: 7 years ago
Location: Tunisia
Contact:

#7

Post by Spir0x » 5 years ago

Raheem bro can you add this feature to my own levels system ?
And nice idea sp3don amazing hud message !
Code:

Code: Select all

#include <zombie_escape>

// Defines
#define MAX_LEVEL 100
#define MAX_XP 10000
#define TASK_SHOWHUD 2020
#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

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

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_pCvarMaxLevelsIncrement = register_cvar("ze_maxlevels_increment", "2.0")
	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")
	
	// 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")
}

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)
	
	for (new i = 1; i <= g_iLevel[id]; i++)
	{
		iMaxXP = floatround(float(iMaxXP) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
	}
	
	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/100 || 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/100 || 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/100 || 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/100 || 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/100 || 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/100 || 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/100 || 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/100 | 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/100 | 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] ++
		g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
		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;
	}
	
	g_iXP[id] = amount
	
	Check_User_Level(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
	}
	
	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
	return true;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1036\\ f0\\ fs16 \n\\ par }
*/

User avatar
sPe3doN
Senior Member
Senior Member
Algeria
Posts: 258
Joined: 7 years ago
Contact:

#8

Post by sPe3doN » 5 years ago

Raheem wrote: 5 years ago Yes possible, just first confirm that the code i posted works then we will see other things.
Image
Image

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#9

Post by czirimbolo » 5 years ago

Yes I have the same :

//// ze_level_system.sma
//
// C:\Users\macie\Desktop\Compiler v1.8.3\scripting\ze_level_system.sma(422) : error 017: undefined symbol "g_bIsDoubleHours"
// C:\Users\macie\Desktop\Compiler v1.8.3\scripting\ze_level_system.sma(510) : error 017: undefined symbol "g_bIsDoubleHours"
// C:\Users\macie\Desktop\Compiler v1.8.3\scripting\ze_level_system.sma(510 -- 511) : warning 215: expression has no effect
// C:\Users\macie\Desktop\Compiler v1.8.3\scripting\ze_level_system.sma(514) : error 017: undefined symbol "g_bIsDoubleHours"
// C:\Users\macie\Desktop\Compiler v1.8.3\scripting\ze_level_system.sma(514 -- 515) : warning 215: expression has no effect
// C:\Users\macie\Desktop\Compiler v1.8.3\scripting\ze_level_system.sma(43) : warning 203: symbol is never used: "g_bIsHappyHour"
//
// 3 Errors.
// Could not locate output file compiled\ze_level_system.amx (compile failed).
//
// Compilation Time: 1,36 sec
Image

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#10

Post by Raheem » 5 years ago

He who fails to plan is planning to fail

User avatar
sPe3doN
Senior Member
Senior Member
Algeria
Posts: 258
Joined: 7 years ago
Contact:

#11

Post by sPe3doN » 5 years ago

Raheem wrote: 5 years ago Check now: viewtopic.php?p=7637#p7637
1. Dont give for humans when they win
2. Give to best defender Exp x 9
Image

User avatar
Spir0x
Veteran Member
Veteran Member
Tunisia
Posts: 641
Joined: 7 years ago
Location: Tunisia
Contact:

#12

Post by Spir0x » 5 years ago

lol

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#13

Post by czirimbolo » 5 years ago

Its not working well, the same like Spedon, Raheem please check this
Image

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#14

Post by Raheem » 5 years ago

Try:
  • Code: Select all

    #include <zombie_escape>
    
    // Defines
    #define MAX_LEVEL 50
    #define MAX_XP 500000
    #define TASK_SHOWHUD 2020
    #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_pCvarMaxLevelsIncrement, 
    	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_pCvarMaxLevelsIncrement = register_cvar("ze_maxlevels_increment", "2.0")
    	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")
    }
    
    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)
    	
    	for (new i = 1; i <= g_iLevel[id]; i++)
    	{
    		iMaxXP = floatround(float(iMaxXP) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
    	}
    	
    	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] ++
    		g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
    		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)
    	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
    	}
    	
    	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
    	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
    	}
    }
He who fails to plan is planning to fail

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#15

Post by czirimbolo » 5 years ago

still nothing and best defender receives normal XP
Image

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#16

Post by czirimbolo » 5 years ago

here is my new code Raheem with giving XP, please can you also add hud message like sp3don requested?

Code: Select all

#include <zombie_escape>
 
// Defines
#define MAX_LEVEL 50
#define MAX_XP 500000
#define TASK_SHOWHUD 2020
#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_pCvarMaxLevelsIncrement,
    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_pCvarMaxLevelsIncrement = register_cvar("ze_maxlevels_increment", "2.0")
    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")
}
 
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)
   
    for (new i = 1; i <= g_iLevel[id]; i++)
    {
        iMaxXP = floatround(float(iMaxXP) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
    }
   
    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] ++
        g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
        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
    }
}
Image

Rain1153
Senior Member
Senior Member
India
Posts: 278
Joined: 6 years ago
Contact:

#17

Post by Rain1153 » 5 years ago

it's best if you make a plugin based on the double xp without touching the main level system
LOL

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#18

Post by Raheem » 5 years ago

Rain1153 wrote: 5 years ago it's best if you make a plugin based on the double xp without touching the main level system
I noticed that i never used native i make double xp via it in the plugin, that's why it's not working. In native it will work in external plugins.
I mean you can set XP by native without checking it's happy hours or not, if it's happy hours the plugin now will auto detect and multiply by 2.

Code:
    1. #include <zombie_escape>
    2.  
    3. // Defines
    4. #define MAX_LEVEL 50
    5. #define MAX_XP 500000
    6. #define TASK_SHOWHUD 2020
    7. #define ID_SHOWHUD (taskid - TASK_SHOWHUD)
    8. #define LEVELUP "levelup_ZE/ze_levelup.wav"
    9.  
    10. // Constants
    11. new const g_szLevelsVault[] = "Levels"
    12. new const g_szRanksVault[] = "Ranks"
    13.  
    14. // Messages
    15. const Float:HUD_SPECT_X = -1.0
    16. const Float:HUD_SPECT_Y = 0.70
    17. const Float:HUD_STATS_X = -1.0
    18. const Float:HUD_STATS_Y = 0.90
    19.  
    20. const HUD_STATS_ZOMBIE_R = 200
    21. const HUD_STATS_ZOMBIE_G = 220
    22. const HUD_STATS_ZOMBIE_B = 0
    23.  
    24. const HUD_STATS_HUMAN_R = 0
    25. const HUD_STATS_HUMAN_G = 200
    26. const HUD_STATS_HUMAN_B = 210
    27.  
    28. const HUD_STATS_SPEC_R = 100
    29. const HUD_STATS_SPEC_G = 100
    30. const HUD_STATS_SPEC_B = 100
    31.  
    32. // Variables
    33. new g_iLevel[33],
    34.     g_iXP[33],
    35.     g_iMaxXP[33],
    36.     Float:g_fDamage[33],
    37.     g_MsgSync,
    38.     g_iLevelsVaultHandle,
    39.     g_iRanksVaultHandle,
    40.     bool:g_bIsDoubleHours
    41.  
    42. // Cvars
    43. new g_pCvarZombieInfect,
    44.     g_pCvarEscapeSuccess,
    45.     g_pCvarEnableDamage,
    46.     g_pCvarRequiredDamage,
    47.     g_pCvarDamageAward,
    48.     g_pCvarStartXP,
    49.     g_pCvarMaxLevelsIncrement,
    50.     g_pCvarMaxXPFirstLevel,
    51.     g_pCvarPercentageStyle,
    52.     g_pCvarStartFromZero,
    53.     g_pCvarAddCommas,
    54.     g_pCvarLevelEffects,
    55.     g_pCvarDoubleXP
    56.  
    57. public plugin_natives()
    58. {
    59.     register_native("ze_get_user_xp", "native_ze_get_user_xp", 1)
    60.     register_native("ze_set_user_xp", "native_ze_set_user_xp", 1)
    61.     register_native("ze_get_user_level", "native_ze_get_user_level", 1)
    62.     register_native("ze_set_user_level", "native_ze_set_user_level", 1)
    63.     register_native("ze_get_user_max_xp", "native_ze_get_user_max_xp", 1)
    64.     register_native("ze_set_user_max_xp", "native_ze_set_user_max_xp", 1)
    65. }
    66.  
    67. public plugin_precache()
    68. {
    69.     precache_sound(LEVELUP)
    70. }
    71.  
    72. public plugin_init()
    73. {
    74.     register_plugin("[ZE] Level-XP System", "1.8", "Raheem/JaCk")
    75.    
    76.     // Hook Chains
    77.     RegisterHookChain(RG_CBasePlayer_TakeDamage, "Fw_TakeDamage_Post", 1)
    78.    
    79.     // Cvars
    80.     g_pCvarZombieInfect = register_cvar("ze_zombie_infect", "3")
    81.     g_pCvarEscapeSuccess = register_cvar("ze_escape_success", "5")
    82.     g_pCvarEnableDamage = register_cvar("ze_enable_dmg", "1")
    83.     g_pCvarRequiredDamage = register_cvar("ze_required_dmg", "50.0")
    84.     g_pCvarDamageAward = register_cvar("ze_dmg_award", "3")
    85.     g_pCvarStartXP = register_cvar("ze_start_xp", "50")
    86.     g_pCvarMaxLevelsIncrement = register_cvar("ze_maxlevels_increment", "2.0")
    87.     g_pCvarMaxXPFirstLevel = register_cvar("ze_max_xp_first_level", "100")
    88.     g_pCvarPercentageStyle = register_cvar("ze_enable_percentage_style", "1")
    89.     g_pCvarStartFromZero = register_cvar("ze_new_level_zero_xp", "0")
    90.     g_pCvarAddCommas = register_cvar("ze_add_commas_to_xp", "1")
    91.     g_pCvarLevelEffects = register_cvar("ze_level_up_effects", "1")
    92.     g_pCvarDoubleXP = register_cvar("ze_double_xp", "9-12")
    93.    
    94.     // Messages
    95.     g_MsgSync = CreateHudSyncObj()
    96. }
    97.  
    98. public client_putinserver(id)
    99. {
    100.     if(is_user_hltv(id) || is_user_bot(id))
    101.         return
    102.    
    103.     // Just 1 second delay
    104.     set_task(1.0, "DelayLoad", id)
    105.  
    106.     // Other tasks
    107.     set_task(1.0, "Show_Hud", id+TASK_SHOWHUD, _, _, "b")
    108.     set_task(0.1, "Check_MaxXP", id, _, _, "b")
    109. }
    110.  
    111. public DelayLoad(id)
    112. {
    113.     // Load his data
    114.     LoadData(id)
    115. }
    116.  
    117. public client_disconnected(id)
    118. {
    119.     if(is_user_hltv(id) || is_user_bot(id))
    120.         return
    121.        
    122.     remove_task(id+TASK_SHOWHUD)
    123.     remove_task(id)
    124. }
    125.  
    126. public Check_MaxXP(id)
    127. {
    128.     new iCurrentMaxXP = g_iMaxXP[id]
    129.    
    130.     new iMaxXP = get_pcvar_num(g_pCvarMaxXPFirstLevel)
    131.    
    132.     for (new i = 1; i <= g_iLevel[id]; i++)
    133.     {
    134.         iMaxXP = floatround(float(iMaxXP) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
    135.     }
    136.    
    137.     if (iCurrentMaxXP != iMaxXP)
    138.     {
    139.         g_iMaxXP[id] = iMaxXP
    140.     }
    141. }
    142.  
    143. public Show_Hud(taskid)
    144. {  
    145.     new iPlayer = ID_SHOWHUD
    146.    
    147.     if (!is_user_alive(iPlayer))
    148.     {
    149.         iPlayer = pev(iPlayer, pev_iuser2)
    150.        
    151.         if (!is_user_alive(iPlayer))
    152.             return
    153.     }
    154.    
    155.     if (get_pcvar_num(g_pCvarPercentageStyle) != 0)
    156.     {
    157.         if(iPlayer != ID_SHOWHUD)
    158.         {
    159.             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)
    160.             ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %0.2f %", g_iLevel[iPlayer], (float(g_iXP[iPlayer])/float(g_iMaxXP[iPlayer])) * 100.0)
    161.         }
    162.         else if (ze_is_user_zombie(iPlayer))
    163.         {
    164.             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)
    165.             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)
    166.         }
    167.         else
    168.         {
    169.             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)
    170.             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)
    171.         }
    172.     }
    173.     else
    174.     {
    175.         if(iPlayer != ID_SHOWHUD)
    176.         {
    177.             if (get_pcvar_num(g_pCvarAddCommas) == 1)
    178.             {
    179.                 new szSpecXP[15], szSpecMaxXP[15]
    180.                
    181.                 AddCommas(g_iXP[iPlayer], szSpecXP, charsmax(szSpecXP))
    182.                 AddCommas(g_iMaxXP[iPlayer], szSpecMaxXP, charsmax(szSpecMaxXP))
    183.                
    184.                 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)
    185.                 ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[iPlayer], szSpecXP, szSpecMaxXP)
    186.             }
    187.             else
    188.             {
    189.                 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)
    190.                 ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[iPlayer], g_iXP[iPlayer], g_iMaxXP[iPlayer])
    191.             }  
    192.         }
    193.         else if (ze_is_user_zombie(iPlayer))
    194.         {
    195.             if (get_pcvar_num(g_pCvarAddCommas) == 1)
    196.             {
    197.                 new szZombieXP[15], szZombieMaxXP[15]
    198.                
    199.                 AddCommas(g_iXP[ID_SHOWHUD], szZombieXP, charsmax(szZombieXP))
    200.                 AddCommas(g_iMaxXP[ID_SHOWHUD], szZombieMaxXP, charsmax(szZombieMaxXP))
    201.                
    202.                 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)
    203.                 ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[ID_SHOWHUD], szZombieXP, szZombieMaxXP)
    204.             }
    205.             else
    206.             {
    207.                 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)
    208.                 ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[ID_SHOWHUD], g_iXP[ID_SHOWHUD], g_iMaxXP[ID_SHOWHUD])
    209.             }
    210.         }
    211.         else
    212.         {
    213.             if (get_pcvar_num(g_pCvarAddCommas) == 1)
    214.             {
    215.                 new szHumanXP[15], szHumanMaxXP[15]
    216.                
    217.                 AddCommas(g_iXP[ID_SHOWHUD], szHumanXP, charsmax(szHumanXP))
    218.                 AddCommas(g_iMaxXP[ID_SHOWHUD], szHumanMaxXP, charsmax(szHumanMaxXP))
    219.                
    220.                 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)
    221.                 ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %s/%s", g_iLevel[ID_SHOWHUD], szHumanXP, szHumanMaxXP)
    222.             }
    223.             else
    224.             {
    225.                 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)
    226.                 ShowSyncHudMsg(ID_SHOWHUD, g_MsgSync, "Level: %d | XP: %d/%d", g_iLevel[ID_SHOWHUD], g_iXP[ID_SHOWHUD], g_iMaxXP[ID_SHOWHUD])
    227.             }
    228.         }
    229.     }
    230. }
    231.  
    232. public ze_roundend(WinTeam)
    233. {
    234.     if (WinTeam == ZE_TEAM_HUMAN)
    235.     {
    236.         for(new id = 1; id <= get_member_game(m_nMaxPlayers); id++)
    237.         {
    238.             if (!is_user_alive(id) || get_member(id, m_iTeam) == TEAM_TERRORIST)
    239.                 continue
    240.            
    241.             DoubleHours()
    242.            
    243.             if (g_bIsDoubleHours)
    244.             {
    245.                 g_iXP[id] = g_iXP[id] + (get_pcvar_num(g_pCvarEscapeSuccess) * 2)
    246.             }
    247.             else
    248.             {
    249.                 g_iXP[id] += get_pcvar_num(g_pCvarEscapeSuccess)
    250.             }
    251.            
    252.             SaveData(id)
    253.             Check_User_Level(id)
    254.         }
    255.     }
    256.    
    257.     remove_task(TASK_SHOWHUD)
    258. }
    259.  
    260. public Check_User_Level(id)
    261. {
    262.     if(!is_user_connected(id))
    263.         return
    264.  
    265.     if(g_iXP[id] >= g_iMaxXP[id])
    266.     {
    267.         if (get_pcvar_num(g_pCvarStartFromZero) == 1)
    268.         {
    269.             g_iXP[id] = 0
    270.         }
    271.        
    272.         new szName[32]
    273.         g_iLevel[id] ++
    274.         g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
    275.         get_user_name(id, szName, charsmax(szName))
    276.         ze_colored_print(0, "!g%s !tNow in Level %i!y!", szName, g_iLevel[id])
    277.        
    278.         SaveData(id)
    279.        
    280.         PlaySound(id, LEVELUP)
    281.        
    282.         if (get_pcvar_num(g_pCvarLevelEffects) != 0)
    283.         {
    284.             // Screen Fade
    285.             message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, id)
    286.             write_short(4096*2)
    287.             write_short(4096*5)
    288.             write_short(0x0001)
    289.             write_byte(random(256))
    290.             write_byte(random(256))
    291.             write_byte(random(256))
    292.             write_byte(150)
    293.             message_end()
    294.            
    295.             // Screen Shake
    296.             message_begin(MSG_ONE, get_user_msgid("ScreenShake"), {0,0,0}, id)
    297.             write_short(255<<14)
    298.             write_short(10<<14)
    299.             write_short(255<<14)
    300.             message_end()
    301.         }
    302.     }
    303. }
    304.  
    305. public ze_user_infected(iVictim, iInfector)
    306. {
    307.     if (iInfector == 0)
    308.         return
    309.    
    310.     DoubleHours()
    311.    
    312.     if (g_bIsDoubleHours)
    313.     {
    314.         g_iXP[iInfector] = g_iXP[iInfector] + (get_pcvar_num(g_pCvarZombieInfect) * 2)
    315.     }
    316.     else
    317.     {
    318.         g_iXP[iInfector] += get_pcvar_num(g_pCvarZombieInfect)
    319.     }
    320.    
    321.     SaveData(iInfector)
    322.     Check_User_Level(iInfector)
    323. }
    324.  
    325. public Fw_TakeDamage_Post(iVictim, iInflictor, iAttacker, Float:fDamage, bitsDamageType)
    326. {
    327.     // Player Damage Himself
    328.     if (iVictim == iAttacker || !is_user_alive(iVictim) || !is_user_alive(iAttacker) || ze_is_user_zombie(iAttacker) || !get_pcvar_num(g_pCvarEnableDamage))
    329.         return HC_CONTINUE
    330.    
    331.     // Same Team?
    332.     if (get_member(iAttacker, m_iTeam) == get_member(iVictim, m_iTeam))
    333.         return HC_CONTINUE
    334.    
    335.     // Store Damage For every Player
    336.     g_fDamage[iAttacker] += fDamage
    337.    
    338.     // Damage Calculator Equal or Higher than needed damage
    339.     if (g_fDamage[iAttacker] >= get_pcvar_float(g_pCvarRequiredDamage))
    340.     {
    341.         // Give Player The Coins
    342.         DoubleHours()
    343.        
    344.         if (g_bIsDoubleHours)
    345.         {
    346.             g_iXP[iAttacker] = g_iXP[iAttacker] + (get_pcvar_num(g_pCvarDamageAward) * 2)
    347.         }
    348.         else
    349.         {
    350.             g_iXP[iAttacker] += get_pcvar_num(g_pCvarDamageAward)
    351.         }
    352.        
    353.         SaveData(iAttacker)
    354.         Check_User_Level(iAttacker)
    355.        
    356.         // Rest The Damage Calculator
    357.         g_fDamage[iAttacker] = 0.0
    358.     }
    359.     return HC_CONTINUE
    360. }
    361.  
    362. public SaveData(id)
    363. {
    364.     new szAuthID[35], szName[32]
    365.     get_user_authid(id, szAuthID, charsmax(szAuthID))
    366.     get_user_name(id, szName, charsmax(szName))
    367.    
    368.     // Set Him to max if he Higher than Max Value
    369.     if(g_iLevel[id] > MAX_LEVEL)
    370.     {
    371.         g_iLevel[id] = MAX_LEVEL
    372.     }
    373.    
    374.     if(g_iXP[id] > MAX_XP)
    375.     {
    376.         g_iXP[id] = MAX_XP
    377.     }
    378.    
    379.     new szData[256]
    380.     formatex(szData , charsmax(szData), "%i %i %i", g_iLevel[id], g_iXP[id], g_iMaxXP[id])
    381.    
    382.     // Open the Vaults
    383.     g_iLevelsVaultHandle = nvault_open(g_szLevelsVault)
    384.     g_iRanksVaultHandle = nvault_open(g_szRanksVault)
    385.  
    386.     // Saves His Data
    387.     nvault_set(g_iLevelsVaultHandle, szAuthID, szData)
    388.     nvault_set(g_iRanksVaultHandle, szAuthID, szName)
    389.    
    390.     // Close Vaults
    391.     nvault_close(g_iLevelsVaultHandle)
    392.     nvault_close(g_iRanksVaultHandle)
    393. }
    394.  
    395. public LoadData(id)
    396. {
    397.     new szData[256], szAuthID[35], szName[32]
    398.    
    399.     get_user_authid(id, szAuthID, charsmax(szAuthID))
    400.     get_user_name(id, szName, charsmax(szName))
    401.    
    402.     // Useless Variable
    403.     new iTimestamp, iExists
    404.    
    405.     // Open the Vault
    406.     g_iLevelsVaultHandle = nvault_open(g_szLevelsVault)
    407.    
    408.     iExists = nvault_lookup(g_iLevelsVaultHandle, szAuthID, szData, charsmax(szData), iTimestamp)
    409.    
    410.     // Close Vault
    411.     nvault_close(g_iLevelsVaultHandle)
    412.    
    413.     if (!iExists)
    414.     {
    415.         g_iLevel[id] = 0
    416.         g_iXP[id] = get_pcvar_num(g_pCvarStartXP)
    417.         g_iMaxXP[id] = get_pcvar_num(g_pCvarMaxXPFirstLevel)
    418.         SaveData(id)
    419.     }
    420.     else
    421.     {
    422.         new iLevel[32], iXP[32], iMaxLevel[32]
    423.         parse(szData, iLevel, 31, iXP, 31, iMaxLevel, 31)
    424.        
    425.         g_iLevel[id] = str_to_num(iLevel)
    426.         g_iXP[id] = str_to_num(iXP)
    427.         g_iMaxXP[id] = str_to_num(iMaxLevel)
    428.     }
    429. }
    430.  
    431. public native_ze_get_user_xp(id)
    432. {
    433.     if(!is_user_connected(id))
    434.     {
    435.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
    436.         return false;
    437.     }
    438.    
    439.     return g_iXP[id]
    440. }
    441.  
    442. public native_ze_set_user_xp(id, amount)
    443. {
    444.     if(!is_user_connected(id))
    445.     {
    446.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
    447.         return false;
    448.     }
    449.    
    450.     DoubleHours()
    451.    
    452.     new iAddedAmount = amount - g_iXP[id]
    453.    
    454.     if (g_bIsDoubleHours)
    455.     {
    456.         g_iXP[id] = g_iXP[id] + (iAddedAmount * 2)
    457.     }
    458.     else
    459.     {
    460.         g_iXP[id] = amount
    461.     }
    462.  
    463.     Check_User_Level(id)
    464.     SaveData(id)
    465.     return true;
    466. }
    467.  
    468. public native_ze_get_user_level(id)
    469. {
    470.     if(!is_user_connected(id))
    471.     {
    472.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
    473.         return false;
    474.     }
    475.    
    476.     return g_iLevel[id]
    477. }
    478.  
    479. public native_ze_set_user_level(id, amount)
    480. {
    481.     if(!is_user_connected(id))
    482.     {
    483.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
    484.         return false;
    485.     }
    486.    
    487.     g_iLevel[id] = amount
    488.    
    489.     if (get_pcvar_num(g_pCvarStartFromZero) == 1)
    490.     {
    491.         g_iXP[id] = 0
    492.     }
    493.    
    494.     SaveData(id)
    495.    
    496.     return true;
    497. }
    498.  
    499. public native_ze_get_user_max_xp(id)
    500. {
    501.     if(!is_user_connected(id))
    502.     {
    503.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
    504.         return false;
    505.     }
    506.    
    507.     return g_iMaxXP[id]
    508. }
    509.  
    510. public native_ze_set_user_max_xp(id, amount)
    511. {
    512.     if(!is_user_connected(id))
    513.     {
    514.         log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
    515.         return false;
    516.     }
    517.    
    518.     g_iMaxXP[id] = amount
    519.    
    520.     SaveData(id)
    521.    
    522.     return true;
    523. }
    524.  
    525. stock DoubleHours()
    526. {
    527.     new szTime[3], szDoubleHours[32], szDoubleHours_Start[32], szDoubleHours_End[32]
    528.     get_time("%H", szTime, charsmax(szTime))
    529.    
    530.     get_pcvar_string(g_pCvarDoubleXP, szDoubleHours, charsmax(szDoubleHours))
    531.    
    532.     for (new ch = 0; ch <= charsmax(szDoubleHours); ch++)
    533.     {
    534.         if (szDoubleHours[ch] == '-')
    535.             szDoubleHours[ch] = ' '
    536.     }
    537.    
    538.     parse(szDoubleHours, szDoubleHours_Start, charsmax(szDoubleHours_Start), szDoubleHours_End, charsmax(szDoubleHours_End))
    539.    
    540.     new iTime, iDoubleHourStart, iDoubleHourEnd
    541.    
    542.     iTime = str_to_num(szTime)
    543.     iDoubleHourStart = str_to_num(szDoubleHours_Start)
    544.     iDoubleHourEnd = str_to_num(szDoubleHours_End)
    545.    
    546.     if(iDoubleHourEnd > iTime >= iDoubleHourStart)
    547.     {
    548.         g_bIsDoubleHours = true
    549.     }
    550.     else
    551.     {
    552.         g_bIsDoubleHours = false
    553.     }
    554. }
He who fails to plan is planning to fail

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#19

Post by czirimbolo » 5 years ago

I think its not working, Best deffender gets normal XP, no double. Also I dont see getting more XP in defined hours. Can someone confirm this?
Image

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#20

Post by czirimbolo » 5 years ago

Raheem, lets make it clear. Your last post with code is wrong, also I lost my ability to add or remove XP with that. Here is my code with ability to add XP. Please make it "double xp" and message on the hud. If not, maybe better to make other plugin to double xp.
Thanks

Code: Select all

#include <zombie_escape>
 
// Defines
#define MAX_LEVEL 50
#define MAX_XP 500000
#define TASK_SHOWHUD 2020
#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_pCvarMaxLevelsIncrement,
    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_pCvarMaxLevelsIncrement = register_cvar("ze_maxlevels_increment", "2.0")
    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")
}
 
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)
   
    for (new i = 1; i <= g_iLevel[id]; i++)
    {
        iMaxXP = floatround(float(iMaxXP) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
    }
   
    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] ++
        g_iMaxXP[id] = floatround(float(g_iMaxXP[id]) * get_pcvar_float(g_pCvarMaxLevelsIncrement))
        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
    }
}
Image

Post Reply

Create an account or sign in to join the discussion

You need to be a member in order to post a reply

Create an account

Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute

Register

Sign in

Who is online

Users browsing this forum: No registered users and 1 guest