OCIXCROMS XP for zombie Escape mod

В този раздел можете да подавате всякакви заявки за намиране, изработка или преработка на плъгини/модове.
Аватар
TheRaiD
Извън линия
Foreigner
Foreigner
Мнения: 32
Регистриран на: 20 Яну 2019, 20:22
Се отблагодари: 5 пъти
Получена благодарност: 1 път

OCIXCROMS XP for zombie Escape mod

Мнение от TheRaiD » 02 Сеп 2019, 13:50

Can someone help XP level system from Ocixcrom on this escape plugin? like if humans escape 100xp and if zombie infect 15xp and if humans damaged zombies 1000hp = 3xp or something like this i dont know how to do it.
Thanks anyway. I have include file too if someone needs it.

Код за потвърждение: Избери целия код

#include <zombie_escape>

// Fowards
enum _:TOTAL_FORWARDS
{
	FORWARD_NONE = 0,
	FORWARD_ROUNDEND,
	FORWARD_HUMANIZED,
	FORWARD_PRE_INFECTED,
	FORWARD_INFECTED,
	FORWARD_ZOMBIE_APPEAR,
	FORWARD_ZOMBIE_RELEASE,
	FORWARD_GAME_STARTED,
	FORWARD_DISCONNECT
}

new g_iForwards[TOTAL_FORWARDS], g_iFwReturn, g_iTeam

// Tasks IDs
enum
{
	TASK_COUNTDOWN = 1100,
	TASK_COUNTDOWN2,
	TASK_SCORE_MESSAGE,
	FREEZE_ZOMBIES,
	ROUND_TIME_LEFT
}

// Colors (g_pCvarColors[] array indexes)
enum
{
	Red = 0,
	Green,
	Blue
}

// Variables
new g_iAliveHumansNum, 
	g_iAliveZombiesNum, 
	g_iRoundTime, 
	g_iCountDown, 
	g_iReleaseNotice, 
	g_iMaxClients, 
	g_iHumansScore, 
	g_iZombiesScore, 
	g_iRoundNum,
	g_iHSpeedFactor[33],
	g_iZSpeedSet[33],
	bool:g_bGameStarted, 
	bool:g_bIsZombie[33], 
	bool:g_bIsZombieFrozen[33], 
	bool:g_bZombieFreezeTime, 
	bool:g_bIsRoundEnding,
	bool:g_bHSpeedUsed[33], 
	bool:g_bZSpeedUsed[33],
	bool:g_bEndCalled,
	Float:g_flReferenceTime

// Cvars
new	g_pCvarHumanSpeedFactor, 
	g_pCvarHumanGravity, 
	g_pCvarHumanHealth, 
	g_pCvarZombieSpeed, 
	g_pCvarZombieGravity,
	g_pCvarZombieReleaseTime, 
	g_pCvarFreezeTime, 
	g_pCvarRoundTime, 
	g_pCvarReqPlayers, 
	g_pCvarZombieHealth, 
	g_pCvarFirstZombiesHealth,
	g_pCvarZombieKnockback, 
	g_pCvarScoreMessageType, 
	g_pCvarColors[3],
	g_pCvarRoundEndDelay,
	g_pCvarSmartRandom
	
// Dynamic Arrays
new Array:g_aChosenPlayers

public plugin_natives()
{
	register_native("ze_is_user_zombie", "native_ze_is_user_zombie", 1)
	register_native("ze_is_game_started", "native_ze_is_game_started", 1)
	register_native("ze_is_zombie_frozen", "native_ze_is_zombie_frozen", 1)
	
	register_native("ze_get_round_number", "native_ze_get_round_number", 1)
	register_native("ze_get_humans_number", "native_ze_get_humans_number", 1)
	register_native("ze_get_zombies_number", "native_ze_get_zombies_number", 1)
	
	register_native("ze_set_user_zombie", "native_ze_set_user_zombie", 1)
	register_native("ze_set_user_human", "native_ze_set_user_human", 1)
	register_native("ze_set_human_speed_factor", "native_ze_set_human_speed_factor", 1)
	register_native("ze_set_zombie_speed", "native_ze_set_zombie_speed", 1)
	
	register_native("ze_reset_human_speed", "native_ze_reset_human_speed", 1)
	register_native("ze_reset_zombie_speed", "native_ze_reset_zombie_speed", 1)
}

public plugin_init()
{
	register_plugin("[ZE] Core/Engine", ZE_VERSION, AUTHORS)
	
	// Hook Chains
	RegisterHookChain(RG_CBasePlayer_TraceAttack, "Fw_TraceAttack_Pre", 0)
	RegisterHookChain(RG_CBasePlayer_TakeDamage, "Fw_TakeDamage_Post", 1)
	RegisterHookChain(RG_CBasePlayer_Spawn, "Fw_PlayerSpawn_Post", 1)
	RegisterHookChain(RG_CSGameRules_CheckWinConditions, "Fw_CheckMapConditions_Post", 1)
	RegisterHookChain(RG_CBasePlayer_Killed, "Fw_PlayerKilled_Post", 1)
	RegisterHookChain(RG_RoundEnd, "Event_RoundEnd_Pre", 0)
	RegisterHookChain(RG_CBasePlayer_ResetMaxSpeed, "Fw_RestMaxSpeed_Post", 1)
	RegisterHookChain(RG_HandleMenu_ChooseTeam, "Fw_HandleMenu_ChooseTeam_Post", 1)
	
	// Events
	register_event("HLTV", "New_Round", "a", "1=0", "2=0")
	register_event("TextMsg", "Map_Restart", "a", "2=#Game_Commencing", "2=#Game_will_restart_in", "2=#Round_Draw")
	register_logevent("Round_Start", 2, "1=Round_Start")
	register_logevent("Round_End", 2, "1=Round_End")
	
	// Create Forwards
	g_iForwards[FORWARD_ROUNDEND] = CreateMultiForward("ze_roundend", ET_IGNORE, FP_CELL)
	g_iForwards[FORWARD_HUMANIZED] = CreateMultiForward("ze_user_humanized", ET_IGNORE, FP_CELL)
	g_iForwards[FORWARD_PRE_INFECTED] = CreateMultiForward("ze_user_infected_pre", ET_CONTINUE, FP_CELL, FP_CELL, FP_CELL)
	g_iForwards[FORWARD_INFECTED] = CreateMultiForward("ze_user_infected", ET_IGNORE, FP_CELL, FP_CELL)
	g_iForwards[FORWARD_ZOMBIE_APPEAR] = CreateMultiForward("ze_zombie_appear", ET_IGNORE)
	g_iForwards[FORWARD_ZOMBIE_RELEASE] = CreateMultiForward("ze_zombie_release", ET_IGNORE)
	g_iForwards[FORWARD_GAME_STARTED] = CreateMultiForward("ze_game_started", ET_IGNORE)
	g_iForwards[FORWARD_DISCONNECT] = CreateMultiForward("ze_player_disconnect", ET_CONTINUE, FP_CELL)
	
	// Hud Messages
	g_iReleaseNotice = CreateHudSyncObj()
	
	// Sequential files (.txt)
	register_dictionary("zombie_escape.txt")
	
	// Humans Cvars
	g_pCvarHumanSpeedFactor = register_cvar("ze_human_speed_factor", "20.0")
	g_pCvarHumanGravity = register_cvar("ze_human_gravity", "800")
	g_pCvarHumanHealth = register_cvar("ze_human_health", "1000")
	
	// Zombie Cvars
	g_pCvarZombieSpeed = register_cvar("ze_zombie_speed", "350.0")
	g_pCvarZombieGravity = register_cvar("ze_zombie_gravity", "640")
	g_pCvarZombieHealth = register_cvar("ze_zombie_health", "10000")
	g_pCvarFirstZombiesHealth = register_cvar("ze_first_zombies_health", "20000")
	g_pCvarZombieKnockback = register_cvar("ze_zombie_knockback", "300.0")
	
	// General Cvars
	g_pCvarZombieReleaseTime = register_cvar("ze_release_time", "15")
	g_pCvarFreezeTime = register_cvar("ze_freeze_time", "20")
	g_pCvarRoundTime = register_cvar("ze_round_time", "9.0")
	g_pCvarReqPlayers = register_cvar("ze_required_players", "2")
	g_pCvarScoreMessageType = register_cvar("ze_score_message_type", "1")
	g_pCvarColors[Red] = register_cvar("ze_score_message_red", "200")
	g_pCvarColors[Green] = register_cvar("ze_score_message_green", "100")
	g_pCvarColors[Blue] = register_cvar("ze_score_message_blue", "0")
	g_pCvarRoundEndDelay = register_cvar("ze_round_end_delay", "5")
	g_pCvarSmartRandom = register_cvar("ze_smart_random", "1")
	
	// Default Values
	g_bGameStarted = false
	
	// Static Values
	g_iMaxClients = get_member_game(m_nMaxPlayers)
	
	// Check Round Time to Terminate it
	set_task(1.0, "Check_RoundTimeleft", ROUND_TIME_LEFT, _, _, "b")
}

public plugin_cfg()
{
	// Get our configiration file and Execute it
	new szCfgDir[64]
	get_localinfo("amxx_configsdir", szCfgDir, charsmax(szCfgDir))
	server_cmd("exec %s/zombie_escape.cfg", szCfgDir)
	
	// Set Game Name
	new szGameName[64]
	formatex(szGameName, sizeof(szGameName), "Zombie Escape v%s", ZE_VERSION)
	set_member_game(m_GameDesc, szGameName)
	
	// Set Version
	register_cvar("ze_version", ZE_VERSION, FCVAR_SERVER|FCVAR_SPONLY)
	set_cvar_string("ze_version", ZE_VERSION)
	
	// Delay so cvars be loaded from zombie_escape.cfg
	set_task(0.1, "DelaySmartRandom")
	
	// Delay some settings
	set_task(0.1, "DelaySettings")
}

public DelaySettings()
{
	// Set some cvars, not allowed to be changed from any other .cfg file (Not recommended to remove them)
	new pCvarRoundTime, pCvarFreezeTime, pCvarMaxSpeed
	
	pCvarRoundTime = get_cvar_pointer("mp_roundtime")
	pCvarFreezeTime = get_cvar_pointer("mp_freezetime")
	pCvarMaxSpeed = get_cvar_pointer("sv_maxspeed")
	
	set_pcvar_num(pCvarRoundTime, get_pcvar_num(g_pCvarRoundTime))
	set_pcvar_num(pCvarFreezeTime, get_pcvar_num(g_pCvarFreezeTime))
	
	// Max speed at least equal to zombies speed. Here zombies speed assumed to be higher than humans one.
	if (get_pcvar_num(pCvarMaxSpeed) < get_pcvar_num(g_pCvarZombieSpeed))
	{
		set_pcvar_num(pCvarMaxSpeed, get_pcvar_num(g_pCvarZombieSpeed))
	}
}

public DelaySmartRandom()
{
	if (get_pcvar_num(g_pCvarSmartRandom))
	{
		// Create our array to store SteamIDs in
		g_aChosenPlayers = ArrayCreate(34)
	}
}

public Fw_CheckMapConditions_Post()
{
	// Block Game Commencing
	set_member_game(m_bGameStarted, true)
	
	// Set Freeze Time
	set_member_game(m_iIntroRoundTime, get_pcvar_num(g_pCvarFreezeTime))
	
	// Set Round Time
	set_member_game(m_iRoundTime, floatround(get_pcvar_float(g_pCvarRoundTime) * 60.0))
}

public Fw_PlayerKilled_Post(id)
{
	g_iAliveHumansNum = GetAlivePlayersNum(CsTeams:TEAM_CT)
	g_iAliveZombiesNum = GetAlivePlayersNum(CsTeams:TEAM_TERRORIST)
	
	if (g_iAliveHumansNum == 0 && g_iAliveZombiesNum == 0)
	{
		// No Winner, All Players in one team killed Or Both teams Killed
		client_print(0, print_center, "%L", LANG_PLAYER, "NO_WINNER")
	}
}

public Fw_RestMaxSpeed_Post(id)
{
	if (!g_bIsZombie[id])
	{
		static Float:flMaxSpeed
		get_entvar(id, var_maxspeed, flMaxSpeed)
		
		if (flMaxSpeed != 1.0 && is_user_alive(id))
		{
			if (g_bHSpeedUsed[id])
			{
				// Set New Human Speed Factor
				set_entvar(id, var_maxspeed, flMaxSpeed + float(g_iHSpeedFactor[id]))
				return HC_CONTINUE
			}
				
			// Set Human Speed Factor, native not used
			set_entvar(id, var_maxspeed, flMaxSpeed + get_pcvar_float(g_pCvarHumanSpeedFactor))
			return HC_CONTINUE
		}
	}
	
	return HC_SUPERCEDE
}

public Fw_PlayerSpawn_Post(id)
{	
	if (!g_bGameStarted)
	{
		// Force All player to be Humans if Game not started yet
		rg_set_user_team(id, TEAM_CT, MODEL_UNASSIGNED)
	}
	else
	{
		if (get_member_game(m_bFreezePeriod))
		{
			// Respawn Him As human if we are in freeze time (Zombie Not Chosen yet)
			Set_User_Human(id)
			g_bIsZombieFrozen[id] = false
		}
		else
		{
			if (g_bZombieFreezeTime)
			{
				// Zombie Chosen and zombies Frozen, Spawn him as zombie and Freeze Him
				Set_User_Zombie(id)
				g_bIsZombieFrozen[id] = true
				set_entvar(id, var_maxspeed, 1.0)
			}
			else
			{
				// Respawn him as normal zombie
				Set_User_Zombie(id)
				g_bIsZombieFrozen[id] = false
			}
		}
	}
}

public New_Round()
{
	// Remove All tasks in the New Round
	remove_task(TASK_COUNTDOWN)
	remove_task(TASK_COUNTDOWN2)
	remove_task(TASK_SCORE_MESSAGE)
	remove_task(FREEZE_ZOMBIES)
	
	// Score Message Task
	set_task(10.0, "Score_Message", TASK_SCORE_MESSAGE, _, _, "b")
	
	// 2 is Hardcoded Value, It's Fix for the countdown to work correctly
	g_iCountDown = get_member_game(m_iIntroRoundTime) - 2
	
	if (!g_bGameStarted)
	{
		// No Enough Players
		ze_colored_print(0, "%L", LANG_PLAYER, "NO_ENOUGH_PLAYERS", get_pcvar_num(g_pCvarReqPlayers))
		return // Block the execution of the blew code 
	}
	
	// Game Already started, Countdown now started
	set_task(1.0, "Countdown_Start", TASK_COUNTDOWN, _, _, "b")
	ze_colored_print(0, "%L", LANG_PLAYER, "READY_TO_RUN")
	ExecuteForward(g_iForwards[FORWARD_GAME_STARTED], g_iFwReturn)
	
	g_iRoundNum++
	
	// Round Starting
	g_bIsRoundEnding = false
	g_bEndCalled = false
}

// Score Message Task
public Score_Message(TaskID)
{
	switch(get_pcvar_num(g_pCvarScoreMessageType))
	{
		case 0: // Disabled
		{
			return
		}
		case 1: // DHUD
		{
			set_dhudmessage(get_pcvar_num(g_pCvarColors[Red]), get_pcvar_num(g_pCvarColors[Green]), get_pcvar_num(g_pCvarColors[Blue]), -1.0, 0.01, 0, 0.0, 9.0)
			show_dhudmessage(0, "%L", LANG_PLAYER, "SCORE_MESSAGE", g_iZombiesScore, g_iHumansScore)
		}
		case 2: // HUD
		{
			set_hudmessage(get_pcvar_num(g_pCvarColors[Red]), get_pcvar_num(g_pCvarColors[Green]), get_pcvar_num(g_pCvarColors[Blue]), -1.0, 0.01, 0, 0.0, 9.0)
			show_hudmessage(0, "%L", LANG_PLAYER, "SCORE_MESSAGE", g_iZombiesScore, g_iHumansScore)
		}
	}
}

public Countdown_Start(TaskID)
{
	// Check if the players Disconnected and there is only one player then remove all messages, and stop tasks
	if (!g_bGameStarted)
		return
	
	if (!g_iCountDown)
	{
		Choose_Zombies()
		remove_task(TASK_COUNTDOWN) // Remove the task
		return // Block the execution of the blew code
	}
	
	set_hudmessage(random(256), random(256), random(256), -1.0, 0.21, 0, 0.8, 0.8)
	show_hudmessage(0, "%L", LANG_PLAYER, "RUN_NOTICE", g_iCountDown)

	g_iCountDown--
}

public Choose_Zombies()
{
	new iZombies, id, iAliveCount
	new iReqZombies
	
	// Get total alive players and required players
	iAliveCount  = GetAllAlivePlayersNum()
	iReqZombies = RequiredZombies()
	
	// Loop till we find req players
	while(iZombies < iReqZombies)
	{
		id = GetRandomAlive(random_num(1, iAliveCount))
		
		if (!is_user_alive(id) || g_bIsZombie[id])
			continue
		
		if (get_pcvar_num(g_pCvarSmartRandom))
		{
			// If player in the array, it means he chosen previous round so skip him this round
			if (IsPlayerInArray(g_aChosenPlayers, id))
				continue
		}

		Set_User_Zombie(id)
		set_entvar(id, var_health, get_pcvar_float(g_pCvarFirstZombiesHealth))
		g_bIsZombieFrozen[id] = true
		g_bZombieFreezeTime = true
		set_entvar(id, var_maxspeed, 1.0)
		set_task(0.1, "Freeze_Zombies", FREEZE_ZOMBIES, _, _, "b") // Better than PreThink
		ExecuteForward(g_iForwards[FORWARD_ZOMBIE_APPEAR], g_iFwReturn)
		iZombies++
	}
	
	if (get_pcvar_num(g_pCvarSmartRandom))
	{
		// Clear the array first
		ArrayClear(g_aChosenPlayers)
		
		new szAuthId[34]
		
		// Add steamid of chosen zombies, so we don't choose them next round again (using steamid means it support reconnect)
		for (new id = 1; id <= g_iMaxClients; id++)
		{
			if(!is_user_connected(id) || !g_bIsZombie[id])
				continue
			
			get_user_authid(id, szAuthId, charsmax(szAuthId))
			
			ArrayPushString(g_aChosenPlayers, szAuthId)
		}
	}
	
	// 2 is Hardcoded Value, It's Fix for the countdown to work correctly
	g_iCountDown = get_pcvar_num(g_pCvarZombieReleaseTime) - 2
	
	set_task(1.0, "ReleaseZombie_CountDown", TASK_COUNTDOWN2, _, _, "b")
}

public ReleaseZombie_CountDown(TaskID)
{
	if (!g_iCountDown)
	{
		ReleaseZombie()
		remove_task(TASK_COUNTDOWN2)
		return
	}
	
	// Release Hud Message
	set_hudmessage(255, 255, 0, -1.0, 0.21, 1, 2.0, 2.0)
	ShowSyncHudMsg(0, g_iReleaseNotice, "%L", LANG_PLAYER, "ZOMBIE_RELEASE", g_iCountDown)
	
	g_iCountDown --
}

public ReleaseZombie()
{
	ExecuteForward(g_iForwards[FORWARD_ZOMBIE_RELEASE], g_iFwReturn)
	
	for(new id = 1; id <= g_iMaxClients; id++)
	{
		if (is_user_alive(id) && g_bIsZombie[id])
		{
			g_bIsZombieFrozen[id] = false
			g_bZombieFreezeTime = false
		}
	}
}

public Freeze_Zombies(TaskID)
{
	for(new id = 1; id <= g_iMaxClients; id++)
	{
		if(!is_user_alive(id) || !g_bIsZombie[id])
			continue
		
		if (g_bIsZombieFrozen[id])
		{
			// Zombie & Frozen, then Freeze him
			set_entvar(id, var_maxspeed, 1.0)
		}
		else
		{
			if (g_bZSpeedUsed[id])
			{
				// Zombie but Not Frozen the set his speed form .cfg
				set_entvar(id, var_maxspeed, float(g_iZSpeedSet[id]))
				continue;
			}
				
			// Zombie but Not Frozen the set his speed form .cfg
			set_entvar(id, var_maxspeed, get_pcvar_float(g_pCvarZombieSpeed))
		}
	}
}

public Fw_TraceAttack_Pre(iVictim, iAttacker, Float:flDamage, Float:flDirection[3], iTracehandle, bitsDamageType)
{
	if (iVictim == iAttacker || !is_user_connected(iVictim) || !is_user_connected(iAttacker))
		return HC_CONTINUE
	
	// Attacker and Victim is in same teams? Skip code blew
	if (get_member(iAttacker, m_iTeam) == get_member(iVictim, m_iTeam))
		return HC_CONTINUE
	
	// In freeze time? Skip all other plugins (Skip the real trace attack event)
	if (g_bIsZombieFrozen[iVictim] || g_bIsZombieFrozen[iAttacker])
		return HC_SUPERCEDE
	
	// Execute pre-infection forward
	ExecuteForward(g_iForwards[FORWARD_PRE_INFECTED], g_iFwReturn, iVictim, iAttacker, floatround(flDamage))
	
	if (g_iFwReturn > 0)
	{
		return HC_SUPERCEDE
	}
	
	g_iAliveHumansNum = GetAlivePlayersNum(CsTeams:TEAM_CT)
	
	if (g_bIsZombie[iAttacker])
	{
		// Death Message with Infection style [Added here because of delay in Forward use]
		SendDeathMsg(iAttacker, iVictim)
		
		Set_User_Zombie(iVictim)
		
		ExecuteForward(g_iForwards[FORWARD_INFECTED], g_iFwReturn, iVictim, iAttacker)
		
		if (g_iAliveHumansNum == 1) // Check if this is Last Human, Because of Delay i can't check if it's 0 instead of 1
		{
			// End round event called one time
			g_bEndCalled = true
			
			// Round is Ending
			g_bIsRoundEnding = true
			
			// Zombie Win, Leave text blank so we use ours from ML
			rg_round_end(get_pcvar_float(g_pCvarRoundEndDelay), WINSTATUS_TERRORISTS, ROUND_TERRORISTS_WIN, "")
			
			// Show Our Message
			client_print(0, print_center, "%L", LANG_PLAYER, "ESCAPE_FAIL")
			
			// This needed so forward work also to add +1 for Zombies
			g_iTeam = 1 // ZE_TEAM_ZOMBIE
			ExecuteForward(g_iForwards[FORWARD_ROUNDEND], g_iFwReturn, g_iTeam)
		}
	}
	
	return HC_CONTINUE
}

public Fw_TakeDamage_Post(iVictim, iInflictor, iAttacker, Float:flDamage, bitsDamageType)
{
	// Not Vaild Victim or Attacker so skip the event (Important to block out bounds errors)
	if (!is_user_connected(iVictim) || !is_user_connected(iAttacker))
		return HC_CONTINUE
	
	// Set Knockback here, So if we blocked damage in TraceAttack event player won't get knockback (Fix For Madness)
	if (g_bIsZombie[iVictim] && !g_bIsZombie[iAttacker])
	{
		// Remove Shock Pain
		set_member(iVictim, m_flVelocityModifier, 1.0)
		
		// Set Knockback
		static Float:flOrigin[3]
		get_entvar(iAttacker, var_origin, flOrigin)
		Set_Knockback(iVictim, flOrigin, get_pcvar_float(g_pCvarZombieKnockback), 2)
	}
	
	return HC_CONTINUE
}

public Round_End()
{
	g_iAliveZombiesNum = GetAlivePlayersNum(CsTeams:TEAM_TERRORIST)
	
	if (g_iAliveZombiesNum == 0 && g_bGameStarted) 
	{
		g_iTeam = 2 // ZE_TEAM_HUMAN
		ExecuteForward(g_iForwards[FORWARD_ROUNDEND], g_iFwReturn, g_iTeam)
		client_print(0, print_center, "%L", LANG_PLAYER, "ESCAPE_SUCCESS")
		g_iHumansScore++
		g_bIsRoundEnding = true
		return // To block Execute the code blew
	}
	
	g_iTeam = 1 // ZE_TEAM_ZOMBIE
	g_iZombiesScore++
	g_bIsRoundEnding = true
	
	// If it's already called one time, don't call it again
	if (!g_bEndCalled)
	{
		ExecuteForward(g_iForwards[FORWARD_ROUNDEND], g_iFwReturn, g_iTeam)
	}
	
	client_print(0, print_center, "%L", LANG_PLAYER, "ESCAPE_FAIL")
}

public Event_RoundEnd_Pre(WinStatus:status, ScenarioEventEndRound:event, Float:tmDelay)
{
	// The two unhandeld cases by rg_round_end() native in our Mod
	if (event == ROUND_CTS_WIN || event == ROUND_TERRORISTS_WIN)
	{
		SetHookChainArg(3, ATYPE_FLOAT, get_pcvar_float(g_pCvarRoundEndDelay))
	}
}

public Round_Start()
{
    g_flReferenceTime = get_gametime()
    g_iRoundTime = get_member_game(m_iRoundTime)
}

public Check_RoundTimeleft()
{
	new Float:flRoundTimeLeft = (g_flReferenceTime + float(g_iRoundTime)) - get_gametime()
	
	if (floatround(flRoundTimeLeft) == 0 && !g_bIsRoundEnding)
	{
		// Round is Ending
		g_bIsRoundEnding = true
		
		// If Time is Out then Terminate the Round
		rg_round_end(get_pcvar_float(g_pCvarRoundEndDelay), WINSTATUS_TERRORISTS, ROUND_TERRORISTS_WIN, "")
		
		// Show our Message
		client_print(0, print_center, "%L", LANG_PLAYER, "ESCAPE_FAIL")
	}
}

public client_disconnected(id)
{
	// Reset speed for this dropped id
	g_bHSpeedUsed[id] = false
	g_bZSpeedUsed[id] = false
	
	// Execute our disconnected forward
	ExecuteForward(g_iForwards[FORWARD_DISCONNECT], g_iFwReturn, id)
	
	if (g_iFwReturn > 0)
	{
		// Here return, function ended here, below won't be executed
		return
	}
	
	// Delay Then Check Players to Terminate The round (Delay needed)
	set_task(0.1, "Check_AlivePlayers")
}

// This check done when player disconnect
public Check_AlivePlayers()
{
	g_iAliveZombiesNum = GetAlivePlayersNum(CsTeams:TEAM_TERRORIST)
	g_iAliveHumansNum = GetAlivePlayersNum(CsTeams:TEAM_CT)
	
	// Game Started? (There is at least 2 players Alive?)
	if (g_bGameStarted)
	{
		// We are in freeze time?
		if (get_member_game(m_bFreezePeriod))
		{
			// Humans alive number = 1 and no zombies?
			if (g_iAliveHumansNum < get_pcvar_num(g_pCvarReqPlayers))
			{
				// Game started false again
				g_bGameStarted = false
			}
		}
		else // Not freeze time?
		{
			// Variables
			new iAllZombiesNum = GetTeamPlayersNum(CsTeams:TEAM_TERRORIST),
			iAllHumansNum = GetTeamPlayersNum(CsTeams:TEAM_CT),
			iDeadZombiesNum = GetDeadPlayersNum(CsTeams:TEAM_TERRORIST),
			iDeadHumansNum = GetDeadPlayersNum(CsTeams:TEAM_CT)
	
			// Alive humans number = 1 and no zombies at all, And no dead humans?
			if (g_iAliveHumansNum < get_pcvar_num(g_pCvarReqPlayers) && iDeadHumansNum == 0 && iAllZombiesNum == 0)
			{
				// Game started is false and humans wins (Escape Success)
				g_bGameStarted = false
				rg_round_end(get_pcvar_float(g_pCvarRoundEndDelay), WINSTATUS_CTS, ROUND_CTS_WIN, "")
				client_print(0, print_center, "%L", LANG_PLAYER, "ESCAPE_SUCCESS")
			}
			
			// Alive zombies number = 1 and no humans at all, And no dead zombies?
			if (g_iAliveZombiesNum < get_pcvar_num(g_pCvarReqPlayers) && iDeadZombiesNum == 0 && iAllHumansNum == 0)
			{
				// Game started is false and zombies wins (Escape Fail)
				g_bGameStarted = false
				rg_round_end(get_pcvar_float(g_pCvarRoundEndDelay), WINSTATUS_TERRORISTS, ROUND_TERRORISTS_WIN, "")
				client_print(0, print_center, "%L", LANG_PLAYER, "ESCAPE_FAIL")
			}
			
			// Humans number more than 1 and no zombies?
			if (g_iAliveHumansNum >= get_pcvar_num(g_pCvarReqPlayers) && g_iAliveZombiesNum == 0 && !g_bIsRoundEnding)
			{
				// Then Escape success as there is no Zombies
				rg_round_end(get_pcvar_float(g_pCvarRoundEndDelay), WINSTATUS_CTS, ROUND_CTS_WIN, "")
				client_print(0, print_center, "%L", LANG_PLAYER, "ESCAPE_SUCCESS")
			}
			
			// Zombies number more than 1 and no humans?
			if (g_iAliveZombiesNum >= get_pcvar_num(g_pCvarReqPlayers) && g_iAliveHumansNum == 0 && !g_bIsRoundEnding)
			{
				// Then Escape Fail as there is no humans
				rg_round_end(get_pcvar_float(g_pCvarRoundEndDelay), WINSTATUS_TERRORISTS, ROUND_TERRORISTS_WIN, "")
				client_print(0, print_center, "%L", LANG_PLAYER, "ESCAPE_FAIL")
			}
		}
	}
}

public client_putinserver(id)
{
	// Add Delay and Check Conditions To start the Game (Delay needed)
	set_task(1.0, "Check_AllPlayersNumber", _, _, _, "b")
}

public Fw_HandleMenu_ChooseTeam_Post(id, MenuChooseTeam:iSlot)
{
	// Add Delay and Check Conditions To start the Game (Delay needed)
	set_task(1.0, "Check_AllPlayersNumber", _, _, _, "b")
}

public Check_AllPlayersNumber(TaskID)
{
	if (g_bGameStarted)
	{
		// If game started remove the task and block the blew Checks
		remove_task(TaskID)
		return
	}
	
	if (GetAllAlivePlayersNum() >= get_pcvar_num(g_pCvarReqPlayers))
	{
		// Players In server == The Required so game started is true
		g_bGameStarted = true
		
		// Restart the game
		server_cmd("sv_restart 2")
		
		// Print Fake game Commencing Message
		client_print(0, print_center, "%L", LANG_PLAYER, "START_GAME")
		
		// Remove the task
		remove_task(TaskID)
	}
}

public Set_User_Human(id)
{
	if (!is_user_alive(id))
		return
	
	g_bIsZombie[id] = false
	set_entvar(id, var_health, get_pcvar_float(g_pCvarHumanHealth))
	set_entvar(id, var_gravity, get_pcvar_float(g_pCvarHumanGravity)/800.0)
	ExecuteForward(g_iForwards[FORWARD_HUMANIZED], g_iFwReturn, id)
	
	// Reset Nightvision (Useful for antidote, so when someone use sethuman native the nightvision also reset)
	Set_NightVision(id, 0, 0, 0x0000, 0, 0, 0, 0)
	
	if (get_member(id, m_iTeam) != TEAM_CT)
		rg_set_user_team(id, TEAM_CT, MODEL_UNASSIGNED)
}

public Set_User_Zombie(id)
{
	if (!is_user_alive(id))
		return
	
	g_bIsZombie[id] = true
	set_entvar(id, var_health, get_pcvar_float(g_pCvarZombieHealth))
	set_entvar(id, var_gravity, get_pcvar_float(g_pCvarZombieGravity)/800.0)
	rg_remove_all_items(id)
	rg_give_item(id, "weapon_knife", GT_APPEND)
	ExecuteForward(g_iForwards[FORWARD_INFECTED], g_iFwReturn, id, 0)
	
	if (get_member(id, m_iTeam) != TEAM_TERRORIST)
		rg_set_user_team(id, TEAM_TERRORIST, MODEL_UNASSIGNED)
}

public Map_Restart()
{
	// Add Delay To help Rest Scores if player kill himself, and there no one else him so round draw (Delay needed)
	set_task(0.1, "Reset_Score_Message")
}

public Reset_Score_Message()
{
	g_iHumansScore = 0
	g_iZombiesScore = 0
	g_iRoundNum = 0
}

public plugin_end()
{
	if (get_pcvar_num(g_pCvarSmartRandom))
	{
		ArrayDestroy(g_aChosenPlayers)
	}
}

// Natives
public native_ze_is_user_zombie(id)
{
	if (!is_user_connected(id))
	{
		return -1;
	}
	
	return g_bIsZombie[id]
}

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

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

public native_ze_is_game_started()
{
	return g_bGameStarted
}

public native_ze_is_zombie_frozen(id)
{
	if (!is_user_connected(id) || !g_bIsZombie[id])
	{
		return -1;
	}
	
	return g_bIsZombieFrozen[id]
}

public native_ze_get_round_number()
{
	if (!g_bGameStarted)
	{
		return -1;
	}
	
	return g_iRoundNum
}

public native_ze_get_humans_number()
{
	return GetAlivePlayersNum(CsTeams:TEAM_CT)
}

public native_ze_get_zombies_number()
{
	return GetAlivePlayersNum(CsTeams:TEAM_TERRORIST)
}

public native_ze_set_human_speed_factor(id, iFactor)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
		return false;
	}
	
	g_bHSpeedUsed[id] = true
	g_iHSpeedFactor[id] = iFactor
	rg_reset_maxspeed(id)
	return true;
}

public native_ze_reset_human_speed(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
		return false;
	}
	
	g_bHSpeedUsed[id] = false
	rg_reset_maxspeed(id)
	return true;
}

public native_ze_set_zombie_speed(id, iSpeed)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
		return false;
	}
	
	g_bZSpeedUsed[id] = true
	g_iZSpeedSet[id] = iSpeed
	return true;
}

public native_ze_reset_zombie_speed(id)
{
	if (!is_user_connected(id))
	{
		log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
		return false;
	}
	
	g_bZSpeedUsed[id] = false
	return true;
}
Here is include file zombie_escape.inc

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <reapi>
#include <fakemeta>
#include <hamsandwich>
#include <nvault>
#include <sqlx>
#include <amxmisc>
#include <amx_settings_api>
#include <cs_weap_models_api>
#include <zombie_escape_stocks>

#define ZE_VERSION "1.4"
#define AUTHORS "ZE Dev Team"

/*
*   For more information about these natives and forwards, just vist our forum:
*                          Escapers-Zone.net
*/

// Team constants, use them in ze_roundend() forward 
enum
{
	ZE_TEAM_ZOMBIE = 1,
	ZE_TEAM_HUMAN
}

// Items returns used in ze_select_item_pre()
#define ZE_WRONG_ITEM -1
#define ZE_ITEM_AVAILABLE 0
#define ZE_ITEM_UNAVAILABLE 1
#define ZE_ITEM_DONT_SHOW 2

// Max Extra-Items
#define MAX_EXTRA_ITEMS 60

// Forwards

/*
* Description:		Called on round end event.
*
* @param WinTeam	The win team ZE_TEAM_ZOMBIE or ZE_TEAM_HUMAN.
*
* @return			Returns here useless, it will not affect the real end round event.
*
*/
forward ze_roundend(WinTeam);

/*
* Description:	Called when user humanized, it called whenever 
*				ze_set_user_human(id) native used.
*				It's called also at every new round when all players humanized.
*
* @param id		Client index.
*
* @return		Returns here useless, it will not affect the real humanization event.
*
*/
forward ze_user_humanized(id);

/*
* Description:		Called before user get infected by player.
*
* @param iVictim	Victim index, human who will catch the infection.
* @param iInfector	Infector index, zombie who will cause the infection.
* @param iDamage	The blocked damage value.
*
* @return			To stop the infection event use:   return 1
*					To let the infection continue use: return 0
*
* @note				This forward will not called on the zombie choose by the server,
*					only called if player try to infect player.
*					You can use pre to block the infection or to let it in specific conditions.
*					Basically return > 0  will stop the infection.
*			
*/
forward ze_user_infected_pre(iVictim, iInfector, iDamage);

/*
* Description:		Called when user infected by player or by the server.
*					Called also at the first choose of zombies (in this case server is the infector).
*
* @param iVictim	Victim index, human who catch the infection.
* @param iInfector	Infector index, zombie or server who caused the infection.
*
* @return			Returns here useless, it will not affect the real infection event.
*
* @note				If the infector is the server, The iInfector will be 0
*					else the iInfector will be the zombie id.		
*
*/
forward ze_user_infected(iVictim, iInfector);

/*
* Description:	Called when zombies chosen.
*
* @return		Returns here useless, it will not affect the real appearing event.
*
*/
forward ze_zombie_appear();

/*
* Description:	Called when the chosen zombies released.
*
* @return		Returns here useless, it will not affect the real releasing event.
*
*/
forward ze_zombie_release();

/*
* Description:	Called every new round if game started.
*
* @return		Returns here useless, it will not affect the real new round event.
*
* @note			This called every new round only if the game started
* 				which mean players is higher than required player so game already started.
* 				this native somehow similar to new round event but only called when game started.
*
*/
forward ze_game_started();

/*
* Description:	Called before zombie get fired by fire nade.
*
* @return		Return 1 to stop the fire action, zombie will not get fired.
*				Return 0 to continue the fire, zombie will be fired.
*
* @note			You can use this to stop the fire action at specific conditions.
*
*/
forward ze_fire_pre(id);

/*
* Description:	Called before zombie get frozen by frost nade.
*
* @return		Return 1 to stop the freeze action, zombie will not get frozen.
*				Return 0 to continue the freeze, zombie will be frozen.
*
* @note			You can use this to stop the freeze action at specific conditions.
*
*/
forward ze_frost_pre(id);

/*
* Description:	Called when zombie get unfrozen.
*
* @return		Returns here useless, it will not affect the real unfreeze event.
*
*/
forward ze_frost_unfreeze(id);

/*
* Description:			Called when player opens the extra-items menu.
*						Or when he choose the item but before he get it.
*
* @param id				Client index.
* @param iItemid		Index of item he try to buy.
* @param bIgnoreCost	true will ignore the cost, false will not ignore cost.
*
* @return				ZE_ITEM_AVAILABLE   | Shows item in the menu, player can also buy it.
*						ZE_ITEM_UNAVAILABLE | Show to player but he can't but it.
*						ZE_ITEM_DONT_SHOW   | Item not appear to that player.
*
*/
forward ze_select_item_pre(id, iItemid, bIgnoreCost);

/*
* Description:			Called after player choose the item,
*						called only if ze_select_item_pre() returned ZE_ITEM_AVAILABLE.
*
* @param id				Client index.
* @param iItemid		Index of item he try to buy.
* @param bIgnoreCost	true will ignore the cost, false will not ignore cost.
*
* @return				Returns here useless, it will not affect the real buy event.
*
*/
forward ze_select_item_post(id, iItemid, bIgnoreCost);

/*
* Description:			Called when player disconnect.
*
* @param id				Client index.
*
* @return				return 0 | Will continue Mod game rules.
*						return 1 | Will block Mod game rules, you can use yours.
*
* @note					Useful in plugins like, replacing disconnected zombie/human if he was last zombie/human.
*
*/
forward ze_player_disconnect(id);

// Natives

/*
* Description:	Check if user zombie or not.
*
* @param id		Client index.
*
* @return		true  | If user Zombie.
*				false | If user Human.
*				-1    | If player not connected.
*
*/
native ze_is_user_zombie(id);

/*
* Description:	Check if game started or not.
*				Game start when minimun required players connected.
*
* @return		true  | If game started.
*				false | If game not started yet.
*
*/
native ze_is_game_started();

/*
* Description:	Check if this zombie in pre-release time or not.
*				Pre-Release time is said to be freeze time for zombies.
*
* @param id		Client index.
*
* @return		true  | If this zombie in freeze time.
*				false | If this zombie not in freeze time.
*				-1    | If player not connected or this player is Human.
*
*/
native ze_is_zombie_frozen(id);

/*
* Description:	Return current round number (Integer).
*				First round is round 1, second is 2 ... etc.
*
* @return		Round number | If game started
*				-1           | If game not started yet
*
*/
native ze_get_round_number();

/*
* Description:	Return alive humans number (Integer).
*
* @return		Alive humans number.
*
*/
native ze_get_humans_number();

/*
* Description:	Return alive zombies number (Integer).
*
* @return		Alive zombies number.
*
*/
native ze_get_zombies_number();

/*
* Description:	Set user to zombie team.
*
* @param id		Client index.
*
* @return		true  | If set successfully
*				false | If this player not connected
*
* @note			This will throw error in case of invalid player.
*
*/
native ze_set_user_zombie(id);

/*
* Description:	Set user to human team.
*
* @param id		Client index.
*
* @return		true  | If set successfully
*				false | If this player not connected
*
* @note			This will throw error in case of invalid player.
*
*/
native ze_set_user_human(id);

/*
* Description:		Increase human speed with this factor.
*					This factor added to his current speed depend on which weapon he carries.
*
* @param id			Client index.
* @param iFactor	The factor to be added to current speed.
*
* @return			true  | If set successfully
*					false | If this player not connected
*
* @note				This native will add speed to current speed.
*					For example, ze_set_human_speed_factor(id, 0) will not set player speed to zero
*					it won't increase his speed so he will have normal weapon speed.
*					Example, if player carry knife and ze_set_human_speed_factor(id, 20) his speed will be 
*					increased by 20 so his total speed will be 270 (default knife speed: 250)
*					You may use negative factors to decrease this speed.
*					Using this native will set the players speed for the whole map.
*					Speeds reset if this player disconnect, or reset using reset native.
*					This is limited by sv_maxspeed cvar.
* 					This will throw error in case of invalid player.
*
*/
native ze_set_human_speed_factor(id, iFactor);

/*
* Description:	Reset human speed to default value used in ze_human_speed_factor cvar.
*
* @param id		Client index.
*
* @return		true  | If reset successfully
*				false | If this player not connected
*
* @note			This will remove the custom speed factor set by
*				ze_set_human_speed_factor(id, iFactor) native.
*				And will use the default factor in ze_human_speed_factor cvar.
*				This will throw error in case of invalid player.
*
*/
native ze_reset_human_speed(id);

/*
* Description:		Set this zombie speed to custom value.
*
* @param id			Client index.
* @param iSpeed		Speed to set this zombie to.
*
* @return			true  | If set successfully
*					false | If this player not connected
*
* @note				This native will set custom speed for this zombie
*					and will not use value defined in ze_zombie_speed cvar
*					This is limited by sv_maxspeed cvar.
*					This will throw error in case of invalid player.
*
*/
native ze_set_zombie_speed(id, iSpeed);

/*
* Description:	Reset zombie speed to default value used in ze_zombie_speed cvar.
*
* @param id		Client index.
*
* @return		true  | If reset successfully
*				false | If this player not connected
*
* @note				This will throw error in case of invalid player.
*
*/
native ze_reset_zombie_speed(id);

/*
* Description:	Get player escape coins.
*
* @param id		Client index.
*
* @return		Player coins  | If this player in server
*				false		  | If this player not connected
*
* @note			This will throw error in case of invalid player.
*
*/
native ze_get_escape_coins(id);

/*
* Description:		Set player escape coins.
*
* @param id			Client index.
* @param iAmount	Client index.
*
* @return			true  | If set successfully
*					false | If this player not connected
*
* @note				This will throw error in case of invalid player.
*
*/
native ze_set_escape_coins(id, iAmount);

/*
* Description:		Get escape leader index.
*
* @return			Escape leader id
*
* @note				Make sure to use it when game already started.
*					If rank mode which is used the native will return rank 1 player.
*
*/
native ze_get_escape_leader_id();

/*
* Description:		Stop/Resume setting rendering from ze_effects_messages.sma plugin.
*
* @param id			Client index.
* @param bSet		True or false, True will stop the rendering that comes from ze_effects_messages.sma
*					false will continue setting rendering from ze_effects_messages.sma
*
* @return			true  | If set successfully
*					false | If this player not connected
*						
* @note				This native will not throw error if player not connected. It will just return false.
*					You before you set rendering for any player in any plugin you should first make: ze_stop_mod_rendering(id, true)
*					This will ensure that no rendering is setting from ze_effects_messages.sma plugin.
*					When you remove rendering, you should use: ze_stop_mod_rendering(id, false)
*
*/
native ze_stop_mod_rendering(id, bool:bSet);

/*
* Description:	Used to set/stop fire on zombie.
*
* @param id		Client index.
* @param bSet	Boolean value, true will set fire on zombie.
* 				false will stop fire on zombie.
*
* @return		true  | If successfully set/stop fire on zombie.
*				false | If returned 1 in ze_fire_pre() forward.
*						Mean if fire action stopped by the pre forward.
*				-1	  | If this zombie not alive.
*
* @note			If zombie fired right now, you can use this to stop the fire
*				imediatly by using: ze_set_fire_grenade(id, false)
*				Same you can fire him at anytime.
*				Always check if user alive or not when using this native.
* 				This will throw error in case of invalid player.
*
*/
native ze_set_fire_grenade(id, bSet);

/*
* Description:	Tells you if this zombie burning now or not.
*
* @param id		Client index.
*
* @return		true  | If this zombie burning now.
*				false | If this zombie not burning.
*				-1	  | If this zombie not alive.
*
*/
native ze_zombie_in_fire(id);

/*
* Description:	Used to set/stop freeze on zombie.
*
* @param id		Client index.
* @param bSet	Boolean value, true will freeze zombie. false will unfreeze zombie.
*
* @return		true  | If successfully freeze/unfreeze zombie.
*				false | If returned 1 in ze_frost_pre() forward.
*						Mean if freeze action stopped by the pre forward.
*						Or if player already frozen
*				-1	  | If this zombie not alive.
*
* @note			If zombie frozen right now, you can use this to unfreeze him
*				imediatly by using: ze_set_frost_grenade(id, false)
*				Same you can freeze him at anytime.
*				Always check if user alive or not when using this native.
* 				This will throw error in case of invalid player.
*
*/
native ze_set_frost_grenade(id, bSet);

/*
* Description:	Tells you if this zombie frozen now or not.
*
* @param id		Client index.
*
* @return		true  | If this zombie frozen now.
*				false | If this zombie unfrozen.
*				-1	  | If this zombie not alive.
*
*/
native ze_zombie_in_forst(id);

/*
* Description:			Register extra-item in the items-menu.
*
* @param szItemName[]	Item name.
* @param iCost			Item cost.
* @param iLimit			Item limit.
*
* @return				Item id in the menu, if successfully registered.
*				        ZE_WRONG_ITEM | If item name was empty or item already registered.
*
* @note					ZE_WRONG_ITEM is defined as -1
* 						Limit must be >= 0, 0 means unlimited.
*                       Use this native in plugin_init() forward.
*
*/
native ze_register_item(const szItemName[], iCost, iLimit);

/*
* Description:	Open items menu for specific player.
*
* @param id		Client index.
*
* @return		true  | If successfully opened to the player.
*				false | If this player not connected.
*
*/
native ze_show_items_menu(id);

/*
* Description:			Force player to buy specific extra-item.
*
* @param id				Client index.
* @param iItemid		Item id, returned by ze_register_item() or ze_get_item_id().
* @param bIgnoreCost	true will ignore the cost, false will not ignore cost.
*
* @return				true  | If successfully bought item.
*						false | If this player not connected or itemid is invalid.
*
*/
native ze_force_buy_item(id, iItemid, bIgnoreCost);

/*
* Description:			Get item id by it's name.
*
* @param szItemName[]	Item name that used in ze_register_item().
*
* @return				Item index    | If item name is valid.
*						ZE_WRONG_ITEM | If this item name invalid.
*
* @note					ZE_WRONG_ITEM is defined as -1
*						Item name used in ze_register_item() native,
*						is called the real item name. 
*						this native deal with real name not name in ze_extraitems.ini
*
*/
native ze_get_item_id(const szItemName[]);

/*
* Description:			Get item cost (Integer) by it's id.
*
* @param iItemid		The item id from ze_register_item() or ze_get_item_id().
*
* @return				Item cost     | If item id is valid.
*						ZE_WRONG_ITEM | If item id is invalid.
*
* @note					ZE_WRONG_ITEM is defined as -1
*
*/
native ze_get_item_cost(iItemid);

/*
* Description:		Add extra-text to the item name.
*
* @param szText[]	Text to be added.
*
* @return			No return.
*
* @note				This native is used in ze_select_item_pre() forward.
*					Maximum length of the text is 32
*
*/
native ze_add_text_to_item(const szText[]);

/*
* Description:		Return item limit.
*
* @param iItemid	Item id.
*
* @return			Limit 		  | If this itemid is valid.
*					ZE_WRONG_ITEM | If this itemid is invalid.
*
* @note				ZE_WRONG_ITEM is defined as -1
*
*/
native ze_get_item_limit(iItemid);

/*
* Description:		Check if this item id is valid or not.
*
* @param iItemid	Item id to check.
*
* @return			true  | If this itemid is valid.
*					false | If this itemid is invalid.
*
*/
native ze_is_valid_itemid(iItemid);

/*
* Description:		Return the item name by it's id.
*
* @param iItemid	Item id to check.
* @param szName[]	String to copy the string name to.
* @param iLen		The string szName[] max length.
*
* @return			true 		  | If item name copied successfully to szName[] string.
*					ZE_WRONG_ITEM | If this itemid is invalid.
*
*/
native ze_get_item_name(iItemid, const szName[], iLen);

/*
* Description:		Set this item for specific level.
*
* @param iItemid	Item id.
* @param iLevel		Level must player have to buy this item.
*
* @return			true 		  | If level set successfully.
*					false 		  | If level < 0 (Failed).
*					ZE_WRONG_ITEM | If this itemid is invalid.
*
* @note				Use this under ze_register_item() native in plugin_init() forward.
* 					To use this native level plugin must be installed.
*
*/
native ze_set_item_level(iItemid, iLevel);

/*
* Description:		Get item level.
*
* @param iItemid	Item id.
*
* @return			Item level 	  | If this itemid is valid.
*					ZE_WRONG_ITEM | If this itemid is invalid.
*					
* @note				To use this native level plugin must be installed.
*
*/
native ze_get_item_level(iItemid);

/*
* Description:		Set this item for VIPs on specific flag.
*
* @param iItemid	Item id.
* @param szFlag		Flag to set item to: a, b, c ... etc.
*
* @return			true 		  | If set successfully for VIPs.
*					ZE_WRONG_ITEM | If this itemid is invalid.
*
* @note				Use this under ze_register_item() native in plugin_init() forward.
* 					To use this native VIP plugin must be installed.
* 					Make sure to use only one flag.
*
*/
native ze_set_item_vip(iItemid, szFlag[]);

/*
* Description:		See if this item for VIP or not, and on which flag.
*
* @param iItemid	Item id.
*
* @return			Flag this item set to (return integer).
*					ZE_WRONG_ITEM | If this itemid is invalid.
*					
* @note				To use this native VIP plugin must be installed.
*					This native works like ze_get_vip_flags() native.
*
*/
native ze_get_item_vip(iItemid);

/*
* Description:	Check if this zombie in madness or not.
*
* @param id		Client index.
*
* @return		true  | This zombie in madness.
*				false | If this zombie not in madness.
*				-1    | If this player not connected or he is human.
*
*/
native ze_zombie_in_madness(id);

/*
* Description:	Show weapon menu for player.
*
* @param id		Client index.
*
* @return		true  | If menu opened successfully.
*				false | If this player not connected.
*
*/
native ze_show_weapon_menu(id);

/*
* Description:	Check if auto buy enabled or not.
*
* @param id		Client index.
*
* @return		true  | If auto buy enabled.
*				false | If auto buy disabled.
*				-1 	  | If this player not connected.
*
*/
native ze_is_auto_buy_enabled(id);

/*
* Description:	This will disable auto buy for player.
*
* @param id		Client index.
*
* @return		true  | If disabled successfully.
*				false | If this player not connected.
*
*/
native ze_disable_auto_buy(id);

/*
* Description:	Enable and disable Ready&PreRelease sounds for any player.
*
* @param id		Client index.
* @param bSet	true will enable sounds, false will disable sounds.
*
* @return		true  | If successfully disabled/enabled.
*				false | If this player not connected.
*
*/
native ze_set_starting_sounds(id, bool:bSet);

/*
* Description:	Enable and disable ambiance sound for any player.
*
* @param id		Client index.
* @param bSet	true will enable sound, false will disable sound.
*
* @return		true  | If successfully disabled/enabled.
*				false | If this player not connected.
*
*/
native ze_set_ambiance_sounds(id, bool:bSet);

/*
* Description:	Check for any player if Ready&PreRelease sounds enabled or disabled.
*
* @param id		Client index.
*
* @return		true  | If sounds enabled.
*				false | If sounds disabled.
*				-1 	  | If this player not connected.
*
*/
native ze_is_starting_sounds_enabled(id);

/*
* Description:	Check for any player if ambiance sounds enabled or disabled.
*
* @param id		Client index.
*
* @return		true  | If sounds enabled.
*				false | If sounds disabled.
*				-1 	  | If this player not connected.
*
*/
native ze_is_ambiance_sounds_enabled(id);
Последно промяна от OciXCrom на 02 Сеп 2019, 13:52, променено общо 1 път.
Причина: Moved to AMXX requests section.

Аватар
OciXCrom
Извън линия
Администратор
Администратор
Мнения: 7206
Регистриран на: 06 Окт 2016, 19:20
Местоположение: /resetscore
Се отблагодари: 117 пъти
Получена благодарност: 1295 пъти
Обратна връзка:

OCIXCROMS XP for zombie Escape mod

Мнение от OciXCrom » 02 Сеп 2019, 14:04

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <crxranks>
#include <zombie_escape>

public plugin_init()
{
	register_plugin("CRXRanks: Zombie Escape", "1.0", "OciXCrom")
}

public ze_roundend(iWinTeam)
{
	if(iWinTeam == ZE_TEAM_HUMAN)
	{
		new iPlayers[32], iPnum
		get_players(iPlayers, iPnum, "ae", "CT")

		for(new i; i < iPnum; i++)
		{
			crxranks_give_user_xp(iPlayers[i], _, "ze_humans_escape", CRXRANKS_XPS_REWARD)
		}
	}
}

public ze_user_infected(iVictim, iInfector)
{
	if(is_user_connected(iInfector))
	{
		crxranks_give_user_xp(iInfector, _, "ze_user_infected", CRXRANKS_XPS_REWARD)
	}
}
Open RankSystem.ini and add the following lines in the [XP Rewards] section:

Код за потвърждение: Избери целия код

ze_humans_escape = 100
ze_user_infected = 15
That is the amount of XP that players will receive for the specified events.
if humans damaged zombies 1000hp = 3xp or something like this

Код за потвърждение: Избери целия код

#include <amxmodx>
#include <crxranks>
#include <hamsandwich>
#include <zombie_escape>

const Float:DAMAGE_NEEDED = 1000.0
const XP_ON_DAMAGE = 3

new Float:g_fDamage[33]

public plugin_init()
{
	register_plugin("CRXRanks: XP on Damage", "1.0", "OciXCrom")
	RegisterHam(Ham_TakeDamage, "player", "OnTakeDamage", 1)
}

public client_putinserver(id)
{
	g_fDamage[id] = 0.0
}

public OnTakeDamage(iVictim, iInflictor, iAttacker, Float:fDamage, iDamageBits)
{
	if(iAttacker == iVictim || get_user_team(iAttacker) == get_user_team(iVictim) || ze_is_user_zombie(iAttacker))
	{
		return
	}

	g_fDamage[iAttacker] += fDamage

	while(g_fDamage[iAttacker] >= DAMAGE_NEEDED)
	{
		g_fDamage[iAttacker] -= DAMAGE_NEEDED
		crxranks_give_user_xp(iAttacker, XP_ON_DAMAGE, _, CRXRANKS_XPS_REWARD)
	}
}

Аватар
TheRaiD
Извън линия
Foreigner
Foreigner
Мнения: 32
Регистриран на: 20 Яну 2019, 20:22
Се отблагодари: 5 пъти
Получена благодарност: 1 път

OCIXCROMS XP for zombie Escape mod

Мнение от TheRaiD » 02 Сеп 2019, 15:13

works fine thanks and good plugin

Заключено
  • Подобни теми
    Отговори
    Преглеждания
     Последно мнение

Обратно към “Заявки за плъгини”

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 35 госта