::SPINSPEED <- 720 ::pyroSpinnerCallbacks <- { Cleanup = function() { delete ::pyroSpinnerCallbacks } OnGameEvent_recalculate_holidays = function(_) { //may want to delete this earlier if it's only for one wave if(GetRoundState() == 3) { Cleanup() } } OnGameEvent_player_spawn = function(params) { local player = GetPlayerFromUserID(params.userid) if(!IsPlayerABot(player)) { return } if(player.GetTeam() != 3) { return } EntFireByHandle(player, "RunScriptCode", "pyroSpinnerCallbacks.addSpinThink(activator)", 1, player, null) } addSpinThink = function(player) { if(!player.HasBotTag("pyro_spinner") && !player.HasBotTag("pyro_spinner_jump")) { return } player.ValidateScriptScope() player.GetScriptScope().isJump <- player.HasBotTag("pyro_spinner_jump") player.GetScriptScope().IsInSolid <- function(pos, _ignore = null) { local startPt = pos + Vector(0,0,-1); local endPt = pos + Vector(0,0,1); local m_trace = { start = startPt, end = endPt, ignore = _ignore , mask = 81931}; TraceLineEx(m_trace); if(!m_trace.hit || m_trace.enthit == null) return false return true } player.GetScriptScope().LastReorient <- Time() + 15 //ClientPrint(null, 3, "Spinner pyro spawned") local eye_angle = 0 player.GetScriptScope().spinThink <- function() { //ClientPrint(null, 3, caber.GetClassname()) if(NetProps.GetPropInt(self, "m_lifeState") != 0) { AddThinkToEnt(self, null) NetProps.SetPropString(self, "m_iszScriptThinkFunction", "") } eye_angle = eye_angle + SPINSPEED*FrameTime() self.SnapEyeAngles(QAngle(0, eye_angle, 0)) if(!isJump) return -1 if(IsInSolid(self.GetOrigin() + Vector(0,0,50) + self.GetAbsAngles().Forward()*80, self)){ //ClientPrint(null,4,"is at wall" + Time().tostring() ) if(Time() > LastReorient ){ LastReorient = Time() + 2 //ClientPrint(null,3,"push it " + Time().tostring()) self.ApplyAbsVelocityImpulse(self.GetAbsAngles().Forward()*(-150.0) + Vector(0,0,255)) self.Jump() } } return -1 } AddThinkToEnt(player, "spinThink") } } //ClientPrint(null, 3, "The script works probably") __CollectGameEventCallbacks(pyroSpinnerCallbacks)