Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const TEAM_CT = 3
- const TEAM_T = 2
- const SND_CT_WIN = "radio/ctwin.wav"
- const SND_T_WIN = "radio/terwin.wav"
- const SND_ROUND_END = "radio/rounddraw.wav"
- const MSG_PREFIX = "\x07FF0000[INFO] \x07FFFFFF"
- m_nMaxPlayers <- MaxClients().tointeger()
- m_nRoundTime <- null
- m_bRoundInit <- false
- m_bNotEnough <- false
- m_bPickRandom <- true
- m_hJugger <- null
- m_hJuggerWeapon <- null
- m_CTSpawnPos <- []
- m_TSpawnPos <- []
- function ReplacePos(pos, ent)
- {
- local num = 0
- for(local e; e = Entities.FindByClassname(e, ent);)
- {
- if(num > pos.len()) continue
- e.SetAbsOrigin(pos[num])
- num++
- }
- }
- for(local e; e = Entities.FindByClassname(e, "info_player_counterterrorist");)
- {
- m_CTSpawnPos.append(e.GetOrigin())
- }
- for(local e; e = Entities.FindByClassname(e, "info_player_terrorist");)
- {
- m_TSpawnPos.append(e.GetOrigin())
- }
- ReplacePos(m_TSpawnPos, "info_player_counterterrorist")
- ReplacePos(m_CTSpawnPos, "info_player_terrorist")
- SendToServerConsole("mp_restartgame 3;mp_timelimit 0;mp_ignore_round_win_conditions 1;mp_autoteambalance 0;mp_freezetime 5;mp_roundtime 5")
- ClientPrint(null, 3, MSG_PREFIX + "Скрипт запущен")
- function CollectEventsInScope(events)
- {
- local events_id = UniqueString()
- getroottable()[events_id] <- events
- local events_table = getroottable()[events_id]
- local Instance = Entities.First()
- foreach (name, callback in events)
- {
- local callback_binded = callback.bindenv(this)
- events_table[name] = @(params) Instance.IsValid() ? callback_binded(params) : delete getroottable()[events_id]
- }
- __CollectGameEventCallbacks(events_table)
- }
- CollectEventsInScope
- ({
- function OnGameEvent_round_start(d)
- {
- if(CountAlivePlayers(0) < 2)
- {
- m_bNotEnough = true
- ClientPrint(null, 3, MSG_PREFIX + "Недостаточно игроков для начала игры")
- return
- }
- m_bRoundInit = true
- for(local i = 1; i <= m_nMaxPlayers; i++)
- {
- local ply = PlayerInstanceFromIndex(i)
- if(!ply) continue
- ChangeTeam(ply, TEAM_CT)
- ply.SetHealth(100)
- ply.SetModelScale(1.0, 0.0)
- ply.TerminateScriptScope()
- NetProps.SetPropString(ply, "m_iszScriptThinkFunction", "")
- NetProps.SetPropInt(ply, "m_takedamage", 2)
- NetProps.SetPropFloat(ply, "m_flMaxspeed", 250.00)
- NetProps.SetPropInt(ply, "m_iAccount", 64000)
- }
- m_nRoundTime = NetProps.GetPropInt(Entities.FindByClassname(null, "cs_gamerules"), "m_iRoundTime")
- NetProps.SetPropString(Entities.First(), "m_iszScriptThinkFunction", "")
- EntFire("func_buyzone", "SetTeam", TEAM_CT)
- if(m_bPickRandom) m_hJugger = GetRandomPlayer()
- ChangeTeam(m_hJugger, TEAM_T)
- StripWeapon(m_hJugger)
- AddThinkToEnt(m_hJugger, "JuggerThink")
- m_hJugger.SetModelScale(1.15, 0.0)
- m_hJuggerWeapon = GiveWeapon(m_hJugger, "weapon_m249")
- EntFire("weapon_c4", "Kill")
- m_hJugger.SetHealth(1025 * CountAlivePlayers(TEAM_CT))
- NetProps.SetPropFloat(m_hJugger, "m_flMaxspeed", 135.00)
- ClientPrint(null, 3, MSG_PREFIX + "Игрок \x07FF0000" + NetProps.GetPropString(m_hJugger, "m_szNetname") + " \x07FFFFFFстал Джаггернаутом")
- }
- function OnGameEvent_player_spawn(d)
- {
- if(CountAlivePlayers(0) == 2 && m_bNotEnough)
- {
- m_bNotEnough = false
- ClientPrint(null, 3, MSG_PREFIX + "Зашло нужное количество игроков, игра началась!")
- SendToServerConsole("mp_restartgame 3")
- }
- }
- function OnGameEvent_player_death(d)
- {
- local ply = GetPlayerFromUserID(d.userid)
- local attacker = GetPlayerFromUserID(d.attacker)
- if(CountAlivePlayers(TEAM_CT) == 0)
- {
- m_bPickRandom = true
- SendToServerConsole("mp_restartgame 5")
- EmitSoundEx(
- {
- sound_name = SND_T_WIN
- sound_level = 0
- })
- ShowText("Джаггернаут победил", 255, 0, 0)
- ClientPrint(null, 3, MSG_PREFIX + "Джаггернаут одержал победу")
- }
- else if(CountAlivePlayers(TEAM_T) == 0)
- {
- SendToServerConsole("mp_restartgame 5")
- NetProps.SetPropString(m_hJugger, "m_iszScriptThinkFunction", "")
- if(attacker)
- {
- m_hJugger = attacker
- m_bPickRandom = false
- ClientPrint(null, 3, MSG_PREFIX + "Игрок \x07FF0000" + NetProps.GetPropString(attacker, "m_szNetname") + " \x07FFFFFFубил Джаггернаута!")
- }
- EmitSoundEx(
- {
- sound_name = SND_CT_WIN
- sound_level = 0
- })
- ShowText("Синие победили", 0, 0, 255)
- ClientPrint(null, 3, MSG_PREFIX + "Синие одержали победу")
- }
- }
- function OnGameEvent_player_disconnect(d)
- {
- local ply = GetPlayerFromUserID(d.userid)
- if(ply == m_hJugger)
- {
- m_hJugger = null
- m_bPickRandom = true
- SendToServerConsole("mp_restartgame 5")
- EmitSoundEx(
- {
- sound_name = SND_CT_WIN
- sound_level = 0
- })
- ShowText("Синие победили", 0, 0, 255)
- ClientPrint(null, 3, MSG_PREFIX + "Джаггернаут отключился, синие победили")
- }
- }
- function OnGameEvent_round_freeze_end(d)
- {
- if(!m_bRoundInit) return
- AddThinkToEnt(Entities.First(), "Think")
- }
- function OnScriptHook_OnTakeDamage(d)
- {
- if(!d.attacker) return
- if(d.const_entity.IsPlayer() && d.attacker.IsPlayer() && d.const_entity.GetTeam() != d.attacker.GetTeam())
- {
- d.attacker.ValidateScriptScope()
- local sc = d.attacker.GetScriptScope()
- if(d.attacker == m_hJugger) d.damage = d.damage / 2
- if(!("m_hText" in sc))
- {
- sc.m_hText <- SpawnEntityFromTable("game_text",
- {
- x = -1
- y = 0.6
- color = "255 255 255"
- holdtime = 1
- fadeout = 0.5
- })
- NetProps.SetPropBool(sc.m_hText, "m_bForcePurgeFixedupStrings", true)
- }
- NetProps.SetPropString(sc.m_hText, "m_iszMessage", "-" + d.damage.tointeger() + "\n" + (d.const_entity.GetHealth() - d.damage + 1 <= 0 ? 0 : d.const_entity.GetHealth() - d.damage + 1).tointeger())
- sc.m_hText.AcceptInput("Display", "", d.attacker, null)
- }
- }
- })
- function CountAlivePlayers(team)
- {
- local num = 0
- for(local i = 1; i <= m_nMaxPlayers; i++)
- {
- local ply = PlayerInstanceFromIndex(i)
- if(!ply || !ply.IsAlive()) continue
- if(team == 0 || ply.GetTeam() == team)
- {
- num++
- }
- }
- return num
- }
- function GetRandomPlayer()
- {
- local players = []
- for(local i = 1; i <= m_nMaxPlayers; i++)
- {
- local ply = PlayerInstanceFromIndex(i)
- if(!ply || !ply.IsAlive()) continue
- players.append(ply)
- }
- return players[RandomInt(0, players.len() -1)]
- }
- function ChangeTeam(player, team)
- {
- NetProps.SetPropInt(player, "m_iPlayerState", 0)
- NetProps.SetPropInt(player, "m_iTeamNum", team)
- player.SetTeam(team)
- player.DispatchSpawn()
- }
- function StripWeapon(player)
- {
- local weaponStrip = null
- if(!weaponStrip) weaponStrip = Entities.CreateByClassname("player_weaponstrip")
- return weaponStrip.AcceptInput("Strip", "", player, null)
- }
- function GiveWeapon(player, classname)
- {
- local weapon = SpawnEntityFromTable(classname,
- {
- ammo = 3000
- origin = player.GetOrigin()
- teamnum = player.GetTeam()
- })
- weapon.SetClip1(0)
- NetProps.SetPropBool(weapon, "m_bForcePurgeFixedupStrings", true)
- return weapon
- }
- function ShowText(msg, r, g, b)
- {
- local text = null
- if(!text)
- {
- text = SpawnEntityFromTable("game_text",
- {
- x = -1
- y = 0.3
- holdtime = 6
- spawnflags = 1
- })
- }
- text.__KeyValueFromVector("color", Vector(r, g, b))
- NetProps.SetPropString(text, "m_iszMessage", msg)
- return text.AcceptInput("Display", "", null, null)
- }
- function JuggerThink()
- {
- local weapon = NetProps.GetPropEntity(self, "m_hActiveWeapon")
- if(!m_hJuggerWeapon.GetOwner() || weapon != m_hJuggerWeapon)
- {
- m_hJuggerWeapon.Destroy()
- StripWeapon(self)
- m_hJuggerWeapon = GiveWeapon(self, "weapon_m249")
- }
- return -1
- }
- function Think()
- {
- m_nRoundTime--
- if(m_nRoundTime <= 0)
- {
- NetProps.SetPropString(self, "m_iszScriptThinkFunction", "")
- SendToServerConsole("mp_restartgame 5")
- for(local i = 1; i <= m_nMaxPlayers; i++)
- {
- local ply = PlayerInstanceFromIndex(i)
- if(!ply || !ply.IsAlive()) continue
- NetProps.SetPropInt(ply, "m_takedamage", 0)
- }
- EmitSoundEx(
- {
- sound_name = SND_ROUND_END
- sound_level = 0
- })
- ShowText("Раунд закончился", 255, 255, 255)
- ClientPrint(null, 3, MSG_PREFIX + "Раунд завершен")
- }
- return 1
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement