::BulwarkThink <- function() { local buttons_bulwark = NetProps.GetPropInt(self, "m_nButtons"); local buttons_changed_bulwark = buttons_last_bulwark ^ buttons_bulwark; local buttons_pressed_bulwark = buttons_changed_bulwark & buttons_bulwark; local buttons_released_bulwark = buttons_changed_bulwark & (~buttons_bulwark); local getWep = PopExtUtil.GetItemInSlot(self, 1) local getWepPrimary = PopExtUtil.GetItemInSlot(self, 0) local activeWep = self.GetActiveWeapon() local curLocation = self.GetOrigin() local forwardvelo = self.EyePosition()+self.EyeAngles().Forward()*150 local eyepos = self.EyePosition()+self.EyeAngles() local eyelook = self.EyeAngles() //printl(eyepos.y) ////printl(forwardvelo) buttonTime++ //printl(buttonTime) if (buttonTime <= 250) { self.PressAltFireButton(0.1) } if (buttonTime >= 600) { buttonTime = 0 } if (buttons_bulwark & Constants.FButtons.IN_ATTACK2) { if (self.InCond(51)) return if (shieldFire == null || !shieldFire.IsValid()) { shieldFire = SpawnEntityFromTable("info_particle_system", { targetname = "fireshield" origin = forwardvelo, angles = Vector(0, eyepos.y - 80, 0), effect_name = "projectile_fireball_ring_fire", flag_as_weather = 0, }) } if (self == null || !self.IsValid()) { shieldFire.Kill() shieldFire = null } if (shieldFire == null) return getWepPrimary.AddAttribute("is_passive_weapon", 1, -1) //play particle + kill marked particle //self.SetForcedTauntCam(1); local goodpos = self.EyePosition()+self.EyeAngles() if (shieldFire.IsValid()) { EntFireByHandle(shieldFire, "start", "", -1, null, null) shieldFire.SetOrigin(forwardvelo) shieldFire.SetAbsAngles(eyelook) } //DebugDrawCircle(forwardvelo, Vector(20, 155, 55), 255, 80, true, 0.1) for(local projectile; projectile = FindByClassnameWithin(projectile, "tf_projectile_*", forwardvelo, 45);) { //get every entity in radius if (projectile.GetTeam() != self.GetTeam() && projectile.GetTeam() != TEAM_SPECTATOR) { local projectileOrigin = projectile.GetOrigin() local explosionParticle = SpawnEntityFromTable("info_particle_system", { targetname = "kaboom" origin = projectileOrigin, angles = Vector(0, 0, 0), effect_name = "taunt_pyro_dosido_flame", flag_as_weather = 0, }) //play particle + kill marked particle if (explosionParticle.IsValid()) { EntFireByHandle(explosionParticle, "start", "", -1, null, null) EntFireByHandle(explosionParticle, "kill", "", 2, null, null) } projectile.Kill() //shieldFire = null } if (projectile == null) { //once we are done with every player stop the loop break } } self.AddCustomAttribute("move speed penalty", 0.1, -1) self.AddCustomAttribute("no_attack", 1, -1) } else { if (shieldFire == null) return self.RemoveCustomAttribute("move speed penalty") self.RemoveCustomAttribute("no_attack") getWepPrimary.RemoveAttribute("is_passive_weapon") if (shieldFire.IsValid()) { EntFireByHandle(shieldFire, "stop", "", -1, null, null) } //shieldFire = null for(local effect; effect = FindByName(effect, "fireshield");) { if (effect != null) effect.Kill() } //shieldFire.Kill() } buttons_last_bulwark = buttons_bulwark; } //////////////////////////ON GAME EVENTS ::BurnwarkSetter <- function() { local playerScope = self.GetScriptScope() if (self != null && self.IsBotOfType(TF_BOT_TYPE)) { self.ValidateScriptScope(); if (!("PlayerThinkTable" in self.GetScriptScope())) self.GetScriptScope().PlayerThinkTable <- {} if (self.HasBotTag("bot_bulwark")) { playerScope.buttons_last_bulwark <- 0 playerScope.shieldFire <- null playerScope.buttonTime <- 0 playerScope.PlayerThinkTable.BulwarkThink <- BulwarkThink } } } function OnGameEvent_post_inventory_application(params) { local player = GetPlayerFromUserID(params.userid); local class_string = PopExtUtil.Classes[player.GetPlayerClass()] local playerScope = player.GetScriptScope() // printl(class_string) // printl(player) if (player != null && player.IsBotOfType(TF_BOT_TYPE)) { EntFireByHandle(player, "CallScriptFunction", "BurnwarkSetter", 0, null, null); } } __CollectGameEventCallbacks(this);