---@diagnostic disable: need-check-nil Pushers = 0 Blocked = false Wave = 1 WaveActive = false SpawnProtection = false -- weps = ents.FindAllByClass('tf_weapon_*') -- for k, wep in ipairs(weps) do -- if IsValid(wep.m_hOwnerEntity) and wep.m_hOwnerEntity:IsRealPlayer() then -- wep:SetFakeSendProp('m_iTeamNum', 2) -- end -- end -- weps = nil function OnPlayerConnected(player) if player:IsRealPlayer() then player.spawnCredits = 4 -- player:SetFakeSendProp('m_bIsMiniBoss', true) -- player:AddCallback(ON_EQUIP_ITEM, function(ent, item) item:SetFakeSendProp('m_iTeamNum', 2) end) player:AddCallback(ON_SPAWN, function(ent) ents.FindByName('respawn_control'):StartTouch(0,player,player) if SpawnProtection then player:AddCond(TF_COND_INVULNERABLE_CARD_EFFECT, 4, player) end end) -- player:AddCallback(ON_DEATH, function(ent) -- if WaveActive then -- local message = "" -- if player.spawnCredits > 1 then -- message = 'YOU DIED! You have '..player.spawnCredits..' lives left' -- elseif player.spawnCredits == 1 then -- message = 'YOU DIED! You only have one life left'; -- else -- message = 'YOU DIED! You have no lives left'; -- end -- player:Print(PRINT_TARGET_CHAT, message) -- player:Print(PRINT_TARGET_CENTER, message) -- player.spawnCredits = player.spawnCredits - 1 -- local players = ents.GetAllPlayers() -- local someoneAlive = false -- for k, player in ipairs(players) do -- if player:IsRealPlayer() and player.spawnCredits >= 0 then -- someoneAlive = true -- break -- end -- end -- if not someoneAlive then -- player:PrintTo(PRINT_TARGET_CENTER, 'Everyone is dead. You Lost!'); -- player:PrintToChat('Everyone is dead. You Lost!') -- --ents.FindByName('red_win'):RoundWin() -- end -- end -- end) -- player:AddCallback(ON_DAMAGE_RECEIVED_PRE, function(ent, damage) -- ent:PrintToChat("dmg "..ent.m_iClass.." "..TF_CLASS_HEAVYWEAPONS) -- if ent.m_iClass == TF_CLASS_HEAVYWEAPONS then -- damage.Damage = damage.Damage * 2 -- return true -- end -- return false -- end) end end function CreateBotSpawnPoint(name, pos) local spawn = Entity('info_player_teamspawn', false, false) spawn:SetAbsOrigin(pos - Vector(0, 0, 20)) spawn:SetName(name) spawn.teamnum = 3 spawn.startdisabled = 1 spawn:Spawn() spawn:Activate() local mark = Entity('prop_dynamic') mark:SetAbsOrigin(pos) mark:SetName(name) mark.startdisabled = 1 mark:Spawn() mark:Activate() end function OnWaveInit(wave) SpawnProtection = false WaveActive = false local players = ents.GetAllPlayers() for k, player in ipairs(players) do if player:IsRealPlayer() then player.spawnCredits = 4 end end for k, player in ipairs(players) do if player:IsRealPlayer() then print("player spawn credits "..player.spawnCredits) end end Pushers = 0 Blocked = false Wave = wave if wave == 1 then ents.FindByName('Wave1'):ForceSpawn() elseif wave == 2 then ents.FindByName('Wave2'):ForceSpawn() elseif wave == 3 then ents.FindByName('Wave3'):ForceSpawn() end timer.Simple(0.0, function() local players = ents.GetAllPlayers() for k,player in ipairs(players) do if player:IsRealPlayer() then player:ForceRespawn() end end end) print('wave init', wave) end function OnWaveStart(wave) WaveActive = true SetUnblocked(0) SetPassed(0) ents.FindByName('setup_gates_a_relay'):Trigger() ents.FindByName('setup_gates_b_relay'):Trigger() ents.FindByName('setup_gates_c_relay'):Trigger() timer.Simple(1, function () table.ForEach(ents.FindAllByName('spawnbot_1_b'), function (k,spawn) spawn:Disable() end) table.ForEach(ents.FindAllByName('spawnbot_2_b'), function (k,spawn) spawn:Disable() end) table.ForEach(ents.FindAllByName('spawnbot_3_b'), function (k,spawn) spawn:Disable() end) end) end function SetPushers(value) Pushers = value UpdatePushSpeed() end function AddPusher() Pushers = Pushers + 1 UpdatePushSpeed() end function RemovePusher() Pushers = Pushers - 1 UpdatePushSpeed() end function SetBlocked(num) Blocked = true num = tonumber(num) local glow = ents.FindByName('blockade_'..Wave..'_'..num..'_glow') if IsValid(glow) then glow.m_bDisabled = false end local hint = ents.FindByName('blockade_'..Wave..'_'..num..'_hint') if IsValid(hint) then hint:Show() end UpdatePushSpeed() end function SetUnblocked(num) num = tonumber(num) Blocked = false local nextNum = num + 1 if num >= 1 then ents.FindByName('blockade_'..Wave..'_'..num..'_relay'):Remove() local props = ents.FindAllByName('blockade_'..Wave..'_'..num..'_prop*') for k, ent in ipairs(props) do ent:Remove() end local brush = ents.FindAllByName('blockade_'..Wave..'_'..num..'_brush') for k, ent in ipairs(brush) do ent:Remove() end end local generator = ents.FindByName('blockade_'..Wave..'_'..nextNum..'_generator') if IsValid(generator) then generator.m_spawnflags = 0 end UpdatePushSpeed() end function SetPassed(num) num = tonumber(num) local nextNum = num + 1 local generator = ents.FindByName('blockade_'..Wave..'_'..nextNum..'_generator') if IsValid(generator) then generator:SetHealth(-20 + Wave * 300 + nextNum * 20) end local spawners_pre = ents.FindAllByName('spawnbot_'..Wave..'_'..num) for k, spawner in ipairs(spawners_pre) do spawner:Disable() end local spawners_post = ents.FindAllByName('spawnbot_'..Wave..'_'..nextNum) for k, spawner in ipairs(spawners_post) do spawner:Enable() end end function UpdatePushSpeed() local tank = ents.FindByName('train_brush*') if not IsValid(tank) then return end local speed = "0" if not Blocked then if Pushers == 0 then speed = "0" elseif Pushers == 1 then speed = "0.6" elseif Pushers == 2 then speed = "0.8" elseif Pushers >= 3 then speed = "1" end end tank:AcceptInput('SetSpeedDir', speed, nil, nil) end function EnableSpawnProtection() SpawnProtection = true end function getcurtime() print("ff") util.PrintToChatAll(TickCount()) end getcurtime()