4ŞU>nutscripts/vscriptsdirector_base_addonE:JL˙%˙˙PrecacheModel("models/props_vehicles/longnose_truck.mdl") PrecacheSound("vehicles/bus_horn.wav") PrecacheSound("player/charger/hit/charger_punch1.wav") ::IsGood <- function(p) { return p && p.IsValid() && NetProps.GetPropInt(p, "m_lifeState") == 0 && NetProps.GetPropInt(p, "m_isIncapacitated") == 0 && NetProps.GetPropInt(p, "m_isHangingFromLedge") == 0 } ::FindSpace <- function(o, d) { local t = { start = Vector(o.x, o.y, o.z + 40), end = Vector(o.x + d.x * 5000, o.y + d.y * 5000, o.z), mask = 1 } TraceLine(t); return 5000 * t.fraction } ::MathCrap <- function(p, a, b) { local ab = b - a; local len2 = ab.x*ab.x + ab.y*ab.y + ab.z*ab.z if (len2 < 0.01) return (p - a).Length() local t = ((p-a).x*ab.x + (p-a).y*ab.y + (p-a).z*ab.z) / len2 if (t < 0) t = 0; else if (t > 1) t = 1 return (p - Vector(a.x + ab.x*t, a.y + ab.y*t, a.z + ab.z*t)).Length() } ::SmashDude <- function(v, vx, vy) { if (!::IsGood(v)) return local pn = UniqueString("punch") SpawnEntityFromTable("ambient_generic", { targetname = pn, message = "player/charger/hit/charger_punch1.wav", health = 6, spawnflags = 17, radius = 0, origin = v.GetOrigin() }) EntFire(pn, "PlaySound", "", 0); EntFire(pn, "Kill", "", 3) EmitSoundOn("Player.FallDamage", v) local f = "if(self.IsValid()){self.SetOrigin(self.GetOrigin()+Vector(0,0,10));self.ApplyAbsVelocityImpulse(Vector("+(vx*0.9)+","+(vy*0.9)+",1500));NetProps.SetPropInt(self,\"m_currentReviveCount\",2);NetProps.SetPropInt(self,\"m_bIsOnThirdStrike\",1);NetProps.SetPropInt(self,\"m_isHangingFromLedge\",0);self.TakeDamage(9999,64,null);}" DoEntFire("!self", "RunScriptCode", f, 0, null, v) local sn = UniqueString("shake") SpawnEntityFromTable("env_shake", { targetname = sn, amplitude = 16, radius = 1500, duration = 1.2, frequency = 60, spawnflags = 4, origin = v.GetOrigin() }) EntFire(sn, "StartShake", "", 0); EntFire(sn, "Kill", "", 1.5) } ::DoTruckStuff <- function() { if (!self.IsValid()) return local s = self.GetScriptScope(); local p = self.GetOrigin() local np = p + (s.v * 0.015); self.SetOrigin(np) s.el += 0.015 if (s.el >= s.lt) { if (!s.h && ::IsGood(s.vic)) { if (s.rets < 2) EntFire("worldspawn", "RunScriptCode", "::DropTruck(EntIndexToHScript(" + s.vic.GetEntityIndex() + "), " + (s.rets + 1) + ")", 0.1) else ::SmashDude(s.vic, s.v.x, s.v.y) } if (s.hn) { EntFire(s.hn, "ClearParent", "", 0); EntFire(s.hn, "Kill", "", 2) } self.Kill(); return } if (!s.h && ::IsGood(s.vic)) { if (::MathCrap(Vector(s.vic.GetOrigin().x, s.vic.GetOrigin().y, s.vic.GetOrigin().z + 30), p, np) <= 130) { s.h = true; ::SmashDude(s.vic, s.v.x, s.v.y) } } return 0.015 } ::DropTruck <- function(vic, rets = 0) { if (!::IsGood(vic)) return local vp = vic.GetOrigin(); local f = vic.GetForwardVector() local rx = f.y, ry = -f.x; local rl = sqrt(rx*rx + ry*ry) if (rl < 0.01) { rx = 1; ry = 0 } else { rx /= rl; ry /= rl } local sa = Vector(rx, ry, 0); local sb = Vector(-rx, -ry, 0) local da = ::FindSpace(vp, sa); local db = ::FindSpace(vp, sb) local sd = (da >= db) ? sa : sb; local rw = (da >= db) ? da : db local sp, vel, y, lt; local dive = false if (rw >= 200) { local dis = rw - 60 sp = Vector(vp.x + sd.x * dis, vp.y + sd.y * dis, vp.z + 30) vel = Vector(-sd.x * 6000, -sd.y * 6000, 0) y = (atan2(-sd.y, -sd.x) * 180) / PI; lt = (rw / 6000) + 2 } else { local cc = { start = Vector(vp.x, vp.y, vp.z + 60), end = Vector(vp.x, vp.y, vp.z + 3000), mask = 1 } TraceLine(cc); local cd = 3000 * cc.fraction if (cd < 200) return local ao = (da >= db) ? sd : Vector(-sd.x, -sd.y, 0) local ad = (rw > 100) ? rw : 200 sp = Vector(vp.x + ao.x * ad, vp.y + ao.y * ad, vp.z + cd - 60) local to = vp - sp; local tl = to.Length() if (tl < 1) tl = 1 vel = Vector((to.x/tl)*6000, (to.y/tl)*6000, (to.z/tl)*6000) y = (atan2(vel.y, vel.x) * 180) / PI; lt = (tl / 6000) + 2; dive = true } local tn = UniqueString("tr") local t = SpawnEntityFromTable("prop_dynamic_override", { targetname = tn, model = "models/props_vehicles/longnose_truck.mdl", origin = sp, angles = dive ? Vector(20, y - 90, 0) : Vector(0, y - 90, 0), solid = 0, rendermode = 1, renderamt = 255 }) if (!t) return local hn = UniqueString("hn") SpawnEntityFromTable("ambient_generic", { targetname = hn, message = "vehicles/bus_horn.wav", health = 10, spawnflags = 17, radius = 0, origin = sp }) EntFire(hn, "SetParent", tn, 0); EntFire(hn, "PlaySound", "", 0.01) local rn = UniqueString("rm") SpawnEntityFromTable("env_shake", { targetname = rn, amplitude = 4, radius = 800, duration = lt, frequency = 20, spawnflags = 4, origin = vp }) EntFire(rn, "StartShake", "", 0); EntFire(rn, "Kill", "", lt + 0.1) t.ValidateScriptScope(); local sc = t.GetScriptScope() sc.v <- vel; sc.vic <- vic; sc.el <- 0; sc.h <- false; sc.lt <- lt; sc.rets <- rets; sc.hn <- hn; sc.TruckThink <- ::DoTruckStuff AddThinkToEnt(t, "TruckThink") } if (!("TickTime" in getroottable())) ::TickTime <- 0 ::TrollTick <- function() { if (Time() - ::TickTime < 10) return 2 ::TickTime = Time() if (RandomInt(1, 100) <= 3) { local s = []; local p = null while (p = Entities.FindByClassname(p, "player")) { if (::IsGood(p) && NetProps.GetPropInt(p, "m_iTeamNum") == 2) s.append(p) } if (s.len() > 0) ::DropTruck(s[RandomInt(0, s.len() - 1)]) } return 2 } ::StartTroll <- function() { ::TickTime = 0 local w = Entities.First(); w.ValidateScriptScope() w.GetScriptScope()["TrollTick"] <- ::TrollTick AddThinkToEnt(w, "TrollTick") } function OnGameEvent_round_start_post_nav(p) { ::StartTroll() } ::StartTroll() __CollectEventCallbacks(this, "OnGameEvent_", "GameEventCallbacks", RegisterScriptGameEventListener)