Solved Ze Main plugin

Unpaid Requests, Public Plugins
Post Reply
kair
Member
Member
Posts: 25
Joined: 7 years ago
Contact:

Ze Main plugin

#1

Post by kair » 6 years ago

I want to remove the spawn as zm IN BASE after countdown , this can be done in core plugin i think?

So humans are running with u and after countdown they immediately turn into zombies next to humans.

What line of code should I remove ?

And i want to add zombie classes menu which people can choose from. is this possible ?

johnnysins2000
Veteran Member
Veteran Member
Paraguay
Posts: 678
Joined: 7 years ago
Location: Paraguay
Contact:

#2

Post by johnnysins2000 » 6 years ago

What U are saying is a bad idea

And that thing is not part of original ze ...

And this thing u saw is only in Zp versions which have escape map supports

They are not ze servers But Zp servers ... U can see this type of example In World War Zombie escape
Nobody Is That Busy If They Make Time :roll:

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

#3

Post by Raheem » 6 years ago

Yes it's possible. But with this you may use ZP with ZE maps and it's same. Anyway when i get time i'll remove the freeze code from the core.
He who fails to plan is planning to fail

johnnysins2000
Veteran Member
Veteran Member
Paraguay
Posts: 678
Joined: 7 years ago
Location: Paraguay
Contact:

#4

Post by johnnysins2000 » 6 years ago

Raheem wrote: 6 years ago Yes it's possible. But with this you may use ZP with ZE maps and it's same. Anyway when i get time i'll remove the freeze code from the core.
Do it for Him only ! Then :P
Nobody Is That Busy If They Make Time :roll:

kair
Member
Member
Posts: 25
Joined: 7 years ago
Contact:

#5

Post by kair » 6 years ago

No the point is using 2 core plugins 1 without freeze and 1 with. If I make map specified plugins and cfg ( 1 core plugin with freeze in certain maps and 1 without in other maps with the right cfgs.) i can use both of them with freeze and without ;)

johnnysins2000
Veteran Member
Veteran Member
Paraguay
Posts: 678
Joined: 7 years ago
Location: Paraguay
Contact:

#6

Post by johnnysins2000 » 6 years ago

kair wrote: 6 years ago No the point is using 2 core plugins 1 without freeze and 1 with. If I make map specified plugins and cfg ( 1 core plugin with freeze in certain maps and 1 without in other maps with the right cfgs.) i can use both of them with freeze and without ;)
In that case u will have to change The core every time ... And it will be annoying for you... Stick To 1 thing

Freeze Time or without freeze
Nobody Is That Busy If They Make Time :roll:

kair
Member
Member
Posts: 25
Joined: 7 years ago
Contact:

#7

Post by kair » 6 years ago

Nope for example configs/maps/plugins-ze_campescape_lg.ini ( Past the plugins u want to load in there)

Ill past for example all the plugins i usually load and the core plugin without freeze.
configs/maps/plugins-ze_campescape_lg.cfg ill past cvars I need and load them.

and so for every map i want without freeze i can use the other core plugin :) its not hard.

johnnysins2000
Veteran Member
Veteran Member
Paraguay
Posts: 678
Joined: 7 years ago
Location: Paraguay
Contact:

#8

Post by johnnysins2000 » 6 years ago

kair wrote: 6 years ago Nope for example configs/maps/plugins-ze_campescape_lg.ini ( Past the plugins u want to load in there)

Ill past for example all the plugins i usually load and the core plugin without freeze.
configs/maps/plugins-ze_campescape_lg.cfg ill past cvars I need and load them.

and so for every map i want without freeze i can use the other core plugin :) its not hard.
I see.... so u can load whatever plugin u want to load in a specific map ..... !
Nobody Is That Busy If They Make Time :roll:

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

#9

Post by Raheem » 6 years ago

Test:
  • Code: Select all

    #include <zombie_escape>
    
    // Fowards
    enum _:TOTAL_FORWARDS
    {
    	FORWARD_NONE = 0,
    	FORWARD_ROUNDEND,
    	FORWARD_HUMANIZED,
    	FORWARD_INFECTED,
    	FORWARD_ZOMBIE_APPEAR,
    	FORWARD_ZOMBIE_RELEASE,
    	FORWARD_GAME_STARTED
    }
    
    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
    }
    
    // Variables
    new g_iCTNum, g_iTNum, g_iRoundTime, g_iCountDown, g_iReleaseNotice, g_iMaxClients, g_iHumansScore, g_iZombiesScore,
    bool:g_bGameStarted, bool:g_bIsZombie[33], bool:g_bIsZombieFrozen[33], bool:g_bZombieFrozenTime,
    Float:g_fReferenceTime
    
    // Cvars
    new Cvar_Human_fSpeedFactor, Cvar_Human_fGravity, Cvar_Human_iHealth, Cvar_Zombie_fSpeed, Cvar_Zombie_fGravity,
    Cvar_Zombie_iReleaseTime, Cvar_iFreezeTime, Cvar_fRoundTime, Cvar_iReqPlayers, Cvar_Zombie_iHealth, Cvar_FirstZombies_iHealth,
    Cvar_Zombie_fKnockback, Cvar_ScoreMessage_iType, Cvar_ScoreMessage_iRed, Cvar_ScoreMessage_iGreen, Cvar_ScoreMessage_iBlue
    
    public plugin_natives()
    {
    	register_native("ze_is_user_zombie", "native_ze_is_user_zombie", 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_get_release_time", "native_ze_get_release_time", 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)
    	
    	// 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")
    	
    	// Hams
    	RegisterHam(Ham_Item_PreFrame, "player", "Fw_RestMaxSpeed_Post", 1)
    	
    	// Create Forwards (All Return Values Ignored)
    	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_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)
    	
    	// Hud Messages
    	g_iReleaseNotice = CreateHudSyncObj()
    	
    	// Sequential files (.txt)
    	register_dictionary("zombie_escape.txt")
    	
    	// Humans Cvars
    	Cvar_Human_fSpeedFactor = register_cvar("ze_human_speed_factor", "20.0")
    	Cvar_Human_fGravity = register_cvar("ze_human_gravity", "1.0")
    	Cvar_Human_iHealth = register_cvar("ze_human_health", "1000")
    	
    	// Zombie Cvars
    	Cvar_Zombie_fSpeed = register_cvar("ze_zombie_speed", "350.0")
    	Cvar_Zombie_fGravity = register_cvar("ze_zombie_gravity", "0.8")
    	Cvar_Zombie_iHealth = register_cvar("ze_zombie_health", "10000")
    	Cvar_FirstZombies_iHealth = register_cvar("ze_first_zombies_health", "20000")
    	Cvar_Zombie_fKnockback = register_cvar("ze_zombie_knockback", "300.0")
    	
    	// General Cvars
    	Cvar_Zombie_iReleaseTime = register_cvar("ze_release_time", "15")
    	Cvar_iFreezeTime = register_cvar("ze_freeze_time", "20")
    	Cvar_fRoundTime = register_cvar("ze_round_time", "9.0")
    	Cvar_iReqPlayers = register_cvar("ze_required_players", "2")
    	Cvar_ScoreMessage_iType = register_cvar("ze_score_message_type", "1")
    	Cvar_ScoreMessage_iRed = register_cvar("ze_score_message_red", "200")
    	Cvar_ScoreMessage_iGreen = register_cvar("ze_score_message_green", "100")
    	Cvar_ScoreMessage_iBlue = register_cvar("ze_score_message_blue", "0")
    	
    	// 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)
    }
    
    public Fw_CheckMapConditions_Post()
    {
    	// Block Game Commencing
    	set_member_game(m_bGameStarted, true)
    	
    	// Set Freeze Time
    	set_member_game(m_iIntroRoundTime, get_pcvar_num(Cvar_iFreezeTime))
    	
    	// Set Round Time
    	set_member_game(m_iRoundTime, floatround(get_pcvar_float(Cvar_fRoundTime) * 60.0))
    	
    	// Set Game Name
    	new szGameName[64]
    	formatex(szGameName, sizeof(szGameName), "Zombie Escape v%s", ZE_VERSION)
    	set_member_game(m_GameDesc, szGameName)
    }
    
    public Fw_PlayerKilled_Post(id)
    {
    	new iCTNum; iCTNum = GetAlivePlayersNum(CsTeams:TEAM_CT)
    	new iTNum; iTNum = GetAlivePlayersNum(CsTeams:TEAM_TERRORIST)
    	
    	if (iCTNum == 0 && iTNum == 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:fMaxSpeed
    		pev(id, pev_maxspeed, fMaxSpeed)
    		
    		if(fMaxSpeed != 1.0 && is_user_alive(id))
    		{
    			// Set Human Speed Factor
    			set_pev(id, pev_maxspeed, fMaxSpeed + get_pcvar_float(Cvar_Human_fSpeedFactor))
    		}
    		return HAM_IGNORED
    	}
    	return HAM_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)
    		}
    		else
    		{
    			if (g_bZombieFrozenTime)
    			{
    				// Zombie Chosen and zombies Frozen, Spawn him as zombie and Freeze Him
    				Set_User_Zombie(id)
    				g_bIsZombieFrozen[id] = true
    				//set_pev(id, pev_maxspeed, 1.0)
    			}
    			else
    			{
    				// Respawn him as normal zombie
    				Set_User_Zombie(id)
    			}
    		}
    	}
    }
    
    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(Cvar_iReqPlayers))
    		return // Block the execution of the blew code 
    	}
    	
    	if (g_bGameStarted)
    	{
    		// 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)
    	}
    }
    
    // Score Message Task
    public Score_Message(TaskID)
    {
    	if (get_pcvar_num(Cvar_ScoreMessage_iType) == 0)
    		return
    	
    	if (get_pcvar_num(Cvar_ScoreMessage_iType) == 1)
    	{
    		set_dhudmessage(get_pcvar_num(Cvar_ScoreMessage_iRed), get_pcvar_num(Cvar_ScoreMessage_iGreen), get_pcvar_num(Cvar_ScoreMessage_iBlue), -1.0, 0.01, 0, 0.0, 9.0)
    		show_dhudmessage(0, "%L", LANG_PLAYER, "SCORE_MESSAGE", g_iZombiesScore, g_iHumansScore)
    	}
    	else if (get_pcvar_num(Cvar_ScoreMessage_iType) == 2)
    	{
    		set_hudmessage(get_pcvar_num(Cvar_ScoreMessage_iRed), get_pcvar_num(Cvar_ScoreMessage_iGreen), get_pcvar_num(Cvar_ScoreMessage_iBlue), -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) // When it reach 0 the !0 will be 1 So it's True
    	{
    		Choose_Zombies()
    		remove_task(TaskID) // Remove the task
    		return // Block the execution of the blew code
    	}
    	
    	set_hudmessage(random(256), random(256), random(256), -1.0, 0.21, 0, 2.0, 2.0)
    	show_hudmessage(0, "%L", LANG_PLAYER, "RUN_NOTICE", g_iCountDown)
    
    	g_iCountDown -- // Means: g_iCountDown = g_iCountDown -1
    }
    
    public Choose_Zombies()
    {
    	new iZombies, id, AliveCount; AliveCount  = GetAllAlivePlayersNum()
    	new iReqZombies; iReqZombies = RequiredZombies()
    	
    	while (iZombies < iReqZombies)
    	{
    		id = GetRandomAlive(random_num(1, AliveCount))
    		
    		if (!is_user_alive(id) || g_bIsZombie[id])
    			continue
    
    		Set_User_Zombie(id)
    		set_user_health(id, get_pcvar_num(Cvar_FirstZombies_iHealth))
    		g_bIsZombieFrozen[id] = true
    		g_bZombieFrozenTime = true
    		set_pev(id, pev_maxspeed, 1.0)
    		set_task(0.1, "Freeze_Zombies", FREEZE_ZOMBIES, _, _, "b") // Better than PreThink
    		ExecuteForward(g_iForwards[FORWARD_ZOMBIE_APPEAR], g_iFwReturn)
    		iZombies ++
    	}
    	
    	// 2 is Hardcoded Value, It's Fix for the countdown to work correctly
    	g_iCountDown = get_pcvar_num(Cvar_Zombie_iReleaseTime) - 2
    	
    	set_task(1.0, "ReleaseZombie_CountDown", TASK_COUNTDOWN2, _, _, "b")
    }
    
    public ReleaseZombie_CountDown(TaskID)
    {
    	if(!g_iCountDown)
    	{
    		ReleaseZombie()
    		remove_task(TaskID)
    		
    		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 i = 1; i <= g_iMaxClients; i++)
    	{
    		if(is_user_alive(i) && g_bIsZombie[i])
    		{
    			g_bIsZombieFrozen[i] = false
    			g_bZombieFrozenTime = false
    		}
    	}
    }
    
    public Freeze_Zombies(TaskID)
    {
    	for(new i = 1; i <= g_iMaxClients; i++)
    	{
    		if(!is_user_alive(i))
    			continue
    		
    		if (g_bIsZombieFrozen[i] && g_bIsZombie[i])
    		{
    			// Zombie & Frozen then Freeze him
    			//set_pev(i, pev_maxspeed, 1.0)
    		}
    		
    		if (!g_bIsZombieFrozen[i] && g_bIsZombie[i])
    		{
    			// Zombie but Not Frozen the set his speed form .cfg
    			set_pev(i, pev_maxspeed, get_pcvar_float(Cvar_Zombie_fSpeed))
    		}
    	}
    }
    
    public Fw_TraceAttack_Pre(iVictim, iAttacker, Float:damage, Float:direction[3], tracehandle, damagebits)
    {
    	if (iVictim == iAttacker || !is_user_connected(iVictim) || !is_user_connected(iAttacker))
    		return HC_CONTINUE
    	
    	// Attacker and Victim is in same teams? Skip here only
    	if (get_member(iAttacker, m_iTeam) == get_member(iVictim, m_iTeam))
    		return HC_CONTINUE
    	
    	// In freeze time? Skip all other plugins
    	if (g_bIsZombieFrozen[iVictim] || g_bIsZombieFrozen[iAttacker])
    		return HC_SUPERCEDE
    	
    	g_iCTNum = GetAlivePlayersNum(CsTeams:TEAM_CT)
    	
    	if (get_member(iAttacker, m_iTeam) == TEAM_TERRORIST)
    	{
    		Set_User_Zombie(iVictim)
    		ExecuteForward(g_iForwards[FORWARD_INFECTED], g_iFwReturn, iVictim, iAttacker)
    		
    		if (g_iCTNum == 1) // Check if this is Last Human, Because of Delay i can't check if it's 0 instead of 1
    		{
    			// Zombie Win, Leave text blank so we use ours from ML
    			rg_round_end(3.0, 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:fDamage, 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
    		set_pdata_float(iVictim, 108, 1.0)
    		
    		// Set Knockback
    		static Float:fOrigin[3]
    		pev(iAttacker, pev_origin, fOrigin)
    		Set_Knockback(iVictim, fOrigin, get_pcvar_float(Cvar_Zombie_fKnockback), 2)
    	}
    	return HC_CONTINUE
    }
    
    public Round_End()
    {
    	g_iTNum = GetAlivePlayersNum(CsTeams:TEAM_TERRORIST)
    	
    	if (g_iTNum == 0)
    	{
    		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 ++
    		return // To block Execute the code blew
    	}
    	
    	g_iTeam = 1 // ZE_TEAM_ZOMBIE
    	g_iZombiesScore ++
    	ExecuteForward(g_iForwards[FORWARD_ROUNDEND], g_iFwReturn, g_iTeam)
    	client_print(0, print_center, "%L", LANG_PLAYER, "ESCAPE_FAIL")
    }
    
    public Round_Start()
    {
        g_fReferenceTime = get_gametime()
        g_iRoundTime = get_member_game(m_iRoundTime)
    }
    
    public Check_RoundTimeleft()
    {
    	new Float:fRoundTimeLeft; fRoundTimeLeft = (g_fReferenceTime + float(g_iRoundTime)) - get_gametime()
    	
    	if (floatround(fRoundTimeLeft) == 0)
    	{
    		// If Time is Out the Terminate the Round
    		rg_round_end(3.0, WINSTATUS_TERRORISTS, ROUND_TERRORISTS_WIN, "")
    		
    		// Show our Message
    		client_print(0, print_center, "%L", LANG_PLAYER, "ESCAPE_FAIL")
    	}
    }
    
    public client_disconnect(id)
    {
    	// Delay Then Check Players to Terminate The round (Delay needed)
    	set_task(0.1, "Check_AlivePlayers", _, _, _, "a", 1)
    }
    
    // This check done when player disconnect
    public Check_AlivePlayers()
    {
    	g_iTNum = GetAlivePlayersNum(CsTeams:TEAM_TERRORIST)
    	g_iCTNum = 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_iCTNum == 1 && g_iTNum == 0)
    			{
    				// Game started false again
    				g_bGameStarted = false
    			}
    		}
    		else // Not freeze time?
    		{
    			// Humans number =1 and no zombies?
    			if (g_iCTNum == 1 && g_iTNum == 0)
    			{
    				// Game started is false and humans wins (Escape Success)
    				g_bGameStarted = false
    				rg_round_end(3.0, WINSTATUS_CTS, ROUND_CTS_WIN, "")
    				client_print(0, print_center, "%L", LANG_PLAYER, "ESCAPE_SUCCESS")
    			}
    			
    			// Zombies Number = 1 and no Humans?
    			if (g_iTNum == 1 && g_iCTNum == 0)
    			{
    				// Game started false and zombies win (Escape Fail)
    				g_bGameStarted = false
    				rg_round_end(3.0, 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_iCTNum > 1 && g_iTNum == 0)
    			{
    				// Then Escape success as there is no Zombies
    				rg_round_end(3.0, 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_iTNum > 1 && g_iCTNum == 0)
    			{
    				// Then Escape Fail as there is no humans
    				rg_round_end(3.0, 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 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(Cvar_iReqPlayers))
    		return
    	
    	if (GetAllAlivePlayersNum() == get_pcvar_num(Cvar_iReqPlayers))
    	{
    		// 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)
    	}
    	
    	// Simple Fix for bots, If many of them connect fast then the == 2 won't be detected so this to detect it
    	if (GetAllAlivePlayersNum() > get_pcvar_num(Cvar_iReqPlayers) && !g_bGameStarted)
    	{
    		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_user_gravity(id, get_pcvar_float(Cvar_Human_fGravity))
    	set_user_health(id, get_pcvar_num(Cvar_Human_iHealth))
    	ExecuteForward(g_iForwards[FORWARD_HUMANIZED], g_iFwReturn, id)
    	
    	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_user_health(id, get_pcvar_num(Cvar_Zombie_iHealth))
    	set_user_gravity(id, get_pcvar_float(Cvar_Zombie_fGravity))
    	rg_remove_all_items(id)
    	rg_give_item(id, "weapon_knife")
    	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, "Rest_Score_Message", _, _, _, "a", 1)
    }
    
    public Rest_Score_Message()
    {
    	g_iHumansScore = 0
    	g_iZombiesScore = 0
    }
    
    // Natives
    public native_ze_is_user_zombie(id)
    {
    	return g_bIsZombie[id]
    }
    
    public native_ze_set_user_zombie(id)
    {
    	Set_User_Zombie(id)
    }
    
    public native_ze_set_user_human(id)
    {
    	Set_User_Human(id)
    }
    
    public native_ze_get_release_time()
    {
    	return get_pcvar_num(Cvar_Zombie_iReleaseTime)
    }
He who fails to plan is planning to fail

kair
Member
Member
Posts: 25
Joined: 7 years ago
Contact:

#10

Post by kair » 6 years ago

All good.

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 15 guests