local minPopExtensionsVersion = 3; // Load the extensions script if (!("popExtensionsVersion" in getroottable())) { local notFound = false; try { ScriptLoad("popextensions") } catch (exception){ // Also try to find a script with a version suffix try { ScriptLoad("popextensions_v"+minPopExtensionsVersion); printl("found popextensions_v"+minPopExtensionsVersion+".nut")} catch (exception2) { notFound = true; } } if (!notFound) { throw "Cannot find popextensions.nut script file. Download it from https://tf2maps.net/downloads/vscript-popfile-extensions.14972/" } } if (popExtensionsVersion < minPopExtensionsVersion) { printl("hellmet_sticky_tank requires popextensions.nut version "+minPopExtensionsVersion+". Download it from https://tf2maps.net/downloads/vscript-popfile-extensions.14972/"); } // Add event hooks for tanks with specifed Name, also supports wildcard suffix AddTankName("script_sticky_tank", { // Custom tank icon Icon = { name = "tank_sticky_hellmet"}, // Called when the tank is spawned OnSpawn = function(tank, name) { printl("spawning") local prop = SpawnEntityFromTable("prop_dynamic", {model = "models/props_frontline/tank_turret.mdl", origin = "-16 -64 110", angles = "-58 0 -90", skin = 2}) local prop2 = SpawnEntityFromTable("prop_dynamic", {model = "models/props_frontline/tank_turret.mdl", origin = "-16 64 110" angles = "-58 0 90", skin = 2}) local mimic = SpawnEntityFromTable("tf_point_weapon_mimic", {origin = "54 59 207", angles = "-56 0 0", modelscale = 1, speedmin = 525, speedmax = 525, splashRadius = 189, spreadangle = 25, weapontype = 3, damage = 138}) local mimic2 = SpawnEntityFromTable("tf_point_weapon_mimic", {origin = "54 -59 207", angles = "-58 0 180", modelscale = 1, speedmin = 525, speedmax = 525, splashRadius = 189, spreadangle = 25, weapontype = 3, damage = 138}) local mimicCrit = SpawnEntityFromTable("tf_point_weapon_mimic", {origin = "54 59 207", angles = "-56 0 0", modelscale = 1, speedmin = 525, speedmax = 525, splashRadius = 189, spreadangle = 25, weapontype = 3, damage = 138, crits = 1}) local mimicCrit2 = SpawnEntityFromTable("tf_point_weapon_mimic", {origin = "54 -59 207", angles = "-58 0 180", modelscale = 1, speedmin = 525, speedmax = 525, splashRadius = 189, spreadangle = 25, weapontype = 3, damage = 138, crits = 1}) local sound = SpawnEntityFromTable("ambient_generic", {message = "weapons/stickybomblauncher_shoot_crit.wav", origin = "54 0 168", radius = 5000, health = 10, spawnflags = 48}) tank.GetScriptScope().ShootThink <- function () { for (local delay = 0; delay < 1; delay += 0.1) { EntFireByHandle(mimic, "FireOnce", "", delay, tank, tank); EntFireByHandle(mimic2, "FireOnce", "", delay, tank, tank); EntFireByHandle(sound, "PlaySound", "", delay, tank, tank); } for (local delay = 1; delay <= 3; delay += 0.5) { EntFireByHandle(sound, "PlaySound", "", delay, tank, tank); } EntFireByHandle(mimic, "FireMultiple", "3", 0.5, tank, tank); EntFireByHandle(mimic2, "FireMultiple", "3", 0.5, tank, tank); EntFireByHandle(mimic, "FireMultiple", "4", 1.0, tank, tank); EntFireByHandle(mimic2, "FireMultiple", "4", 1.0, tank, tank); EntFireByHandle(mimicCrit, "FireOnce", "", 1.5, tank, tank); EntFireByHandle(mimicCrit2, "FireOnce", "", 1.5, tank, tank); EntFireByHandle(mimicCrit, "FireMultiple", "2", 2.0, tank, tank); EntFireByHandle(mimicCrit2, "FireMultiple", "2", 2.0, tank, tank); EntFireByHandle(mimicCrit, "FireMultiple", "3", 2.5, tank, tank); EntFireByHandle(mimicCrit2, "FireMultiple", "3", 2.5, tank, tank); EntFireByHandle(mimicCrit, "FireMultiple", "6", 3.0, tank, tank); EntFireByHandle(mimicCrit2, "FireMultiple", "6", 3.0, tank, tank); EntFireByHandle(mimic, "DetonateStickies", "", 7.0, tank, tank); EntFireByHandle(mimic2, "DetonateStickies", "", 7.0, tank, tank); EntFireByHandle(mimicCrit, "DetonateStickies", "", 7.0, tank, tank); EntFireByHandle(mimicCrit2, "DetonateStickies", "", 7.0, tank, tank); return 5; } AddThinkToEnt(tank, "ShootThink"); SetParentLocalOrigin([prop, prop2, mimic, mimic2, mimicCrit, mimicCrit2, sound], tank); }, // Called when the tank is destroyed // Params as in https://wiki.alliedmods.net/Team_Fortress_2_Events#player_hurt:~:text=level-,npc_hurt,-Name%3A OnDeath = function(tank, params) { // Destroy stickybombs for (local ent = null; (ent = Entities.FindByClassname(ent, "tf_projectile_pipe")) != null; ) { if (ent.GetTeam() == Constants.ETFTeam.TF_TEAM_BLUE) { ent.Kill(); } } }, })