#base robot_standard.pop #base robot_giant.pop WaveSchedule { StartingCurrency 800 CanBotsAttackWhileInSpawnRoom no RespawnWaveTime 2 AddSentryBusterWhenDamageDealtExceeds 3000 AddSentryBusterWhenKillCountExceeds 15 Advanced 1 ExtraSpawnPoint { Name "outside" X 481 Y -338 Z 64 TeamNum 3 } PointTemplates { MissionUtilitySetup { // a set of utility entities NoFixUp 1 point_populator_interface { "targetname" "pop_interface" } point_clientcommand { "targetname" "client_commander" } trigger_hurt { "targetname" "cleanupbots" "origin" "0 0 0" "mins" "-5000 -5000 -5000" //Trigger bounds, relative to origin "maxs" "5000 5000 5000" "damage" "3000000" "damagecap" "3000000" "damagemodel" "0" "damagetype" "16" "filtername" "filter_is_blue" "nodmgforce" "1" "spawnflags" "1" "StartDisabled" "1" } filter_activator_class { "targetname" "filter_is_not_player" "Negated" "1" "filterclass" "player" } filter_activator_class { "targetname" "filter_is_player" "Negated" "0" "filterclass" "player" } filter_activator_tfteam { "targetname" "filter_is_blue" "Negated" "0" "TeamNum" "3" } filter_activator_tfteam { "targetname" "filter_is_red" "Negated" "0" "TeamNum" "2" } filter_multi { "targetname" "filter_is_red_player" "Negated" "0" "FilterType" "0" //and "Filter01" "filter_is_red" "Filter02" "filter_is_player" } filter_tf_condition { "targetname" "_filter_is_not_ubered" "Negated" "1" "condition" "5" //medigun uber } filter_tf_condition { "targetname" "_filter_is_not_ubered2" "Negated" "1" "condition" "52" //canteen uber } filter_tf_condition { "targetname" "_filter_is_not_ubered3" "Negated" "1" "condition" "51" //hidden uber } filter_tf_condition { "targetname" "_filter_is_not_ubered4" "Negated" "1" "condition" "57" //WoF uber } filter_multi { // is red player, AND is NOT ubered "targetname" "filter_is_red_not_ubered" "Negated" "0" "FilterType" "0" //and "Filter01" "filter_is_red" "Filter02" "_filter_is_not_ubered" "Filter03" "_filter_is_not_ubered2" "Filter04" "_filter_is_not_ubered3" "Filter05" "_filter_is_not_ubered4" "Filter06" "filter_is_player" } filter_multi { // is blu player, AND is NOT ubered "targetname" "filter_is_blu_not_ubered" "Negated" "0" "FilterType" "0" //and "Filter01" "filter_is_blue" "Filter02" "_filter_is_not_ubered" "Filter03" "_filter_is_not_ubered2" "Filter04" "_filter_is_not_ubered3" "Filter05" "_filter_is_not_ubered4" "Filter06" "filter_is_player" } filter_multi { "targetname" "filter_not_ubered" "Negated" "0" "FilterType" "0" "Filter01" "_filter_is_not_ubered" "Filter02" "_filter_is_not_ubered2" "Filter03" "_filter_is_not_ubered3" "Filter04" "_filter_is_not_ubered4" "Filter05" "filter_is_player" } } missionsetup { OnSpawnOutput { Target "tf_gamerules*" Action "RunScriptCode" Param " ::ChargingBeastSetup <- function(player) { player.ValidateScriptScope(); local scope = player.GetScriptScope(); // we create a game_text entity and store the handle in the player's scope so we can access it later if(!scope.rawin(`chargeMeterText`) || !scope.chargeMeterText.IsValid()) { scope.chargeMeterText <- SpawnEntityFromTable(`game_text`, { targetname = `charge_text` channel = 4 message = `` color = `255 0 0` holdtime = 1.5 x = 0.7 y = 0.9 spawnflags = 0 // as spawnflags is 0, this will only show to the activator }); } scope.nextChargeTime <- Time(); } ::fullBar <- `////////////////////`; ::emptyBar <- `--------------------`; ::AttemptBeastCharge <- function(player) { local scope = player.GetScriptScope() // if the current time is past the nextChargeTime, then we do the charge if(Time() > scope.nextChargeTime) { player.AddCond(17) EntFireByHandle(scope.chargeHurt, `Enable`, null, 0, null, null) //EntFireByHandle(handle entity, string action, string value, float delay, handle activator, handle caller) EntFireByHandle(player, `$RemoveCond`, `17`, 2, null, null) EntFireByHandle(scope.chargeHurt, `Disable`, null, 2, null, null) scope.nextChargeTime = Time() + 12 // here is the charge display local delay = 2 for (local i = 0.0 ; i < 20.0 ; i += 1.0) { local barString = `[` + fullBar.slice(20-i) + emptyBar.slice(i) + `]` EntFireByHandle(scope.chargeMeterText, `$SetData$m_iszMessage`, barString, (i/2) + delay, null, null) EntFireByHandle(scope.chargeMeterText, `Display`, null, (i/2) + delay + 0.1, player, null) } EntFireByHandle(scope.chargeMeterText, `$SetData$m_iszMessage`, `Ready!`, 10 + delay, null, null) EntFireByHandle(scope.chargeMeterText, `Display`, null, 10.1 + delay, player, null) EntFireByHandle(scope.chargeMeterText, `$SetData$m_iszMessage`, ``, 12 + delay, null, null) } } " Delay 0.0 } // OnSpawnOutput // { // Target "tf_gamerules" // Action "RunScriptCode" // Param "IncludeScript(`heavy_wep_test`)" // Delay 0.0 // } env_entity_maker { "targetname" "beastChargeMaker" "entitytemplate" "beastCharge" "$autoparent" 1 // for use with ForceSpawnAtEntityOrigin } } beastCharge { OnSpawnOutput { Target "!activator" Action "RunScriptCode" Param "ChargingBeastSetup(self)" Delay 0.0 } trigger_multiple { "targetname" "chargeHurt" "origin" "0 0 0" "mins" "-50 -50 -10" "maxs" "100 50 80" "spawnflags" "64" //1: players; 64 everything "wait" "0.5" "StartDisabled" "1" "filtername" "filter_is_blu_not_ubered" "OnStartTouch" "@p@chargeHurtRunScriptCodeactivator.TakeDamageEx(self, self, self.GetActiveWeapon(), Vector(0,0,0), self.GetOrigin(), 9999, 1)0.1-1" } OnSpawnOutput { Target "chargeHurt" Action "SetParent" Param "!activator" Delay 0.0 } OnSpawnOutput { Target "chargeHurt" Action "RunScriptCode" Param "activator.GetScriptScope().chargeHurt <- self" Delay 0.2 } } missionstuffig { logic_relay { "targetname" "charging_beast_relay" "OnTrigger" "!activator,$AddCond,17,0,-1" "OnTrigger" "!activator,$RemoveCond,17,2,-1" "OnTrigger" "disable_charging_relay,trigger,,2.1,-1" } logic_relay { "targetname" "disable_charging_relay" "OnTrigger" "charging_beast_relay,disable,,0,-1" "OnTrigger" "charge_test,$setkey$message,[--------------------],0,-1" "OnTrigger" "charge_test,Display,,0.1,-1" "OnTrigger" "charge_test,$setkey$message,[//------------------],1,-1" "OnTrigger" "charge_test,Display,,1.1,-1" "OnTrigger" "charge_test,$setkey$message,[////----------------],2,-1" "OnTrigger" "charge_test,Display,,2.1,-1" "OnTrigger" "charge_test,$setkey$message,[//////--------------],3,-1" "OnTrigger" "charge_test,Display,,3.1,-1" "OnTrigger" "charge_test,$setkey$message,[////////------------],4,-1" "OnTrigger" "charge_test,Display,,4.1,-1" "OnTrigger" "charge_test,$setkey$message,[//////////----------],5,-1" "OnTrigger" "charge_test,Display,,5.1,-1" "OnTrigger" "charge_test,$setkey$message,[////////////--------],6,-1" "OnTrigger" "charge_test,Display,,6.1,-1" "OnTrigger" "charge_test,$setkey$message,[//////////////------],7,-1" "OnTrigger" "charge_test,Display,,7.1,-1" "OnTrigger" "charge_test,$setkey$message,[////////////////----],8,-1" "OnTrigger" "charge_test,Display,,8.1,-1" "OnTrigger" "charge_test,$setkey$message,[//////////////////--],9,-1" "OnTrigger" "charge_test,Display,,9.1,-1" "OnTrigger" "charge_test,$setkey$message,READY!,10,-1" "OnTrigger" "charge_test,Display,,10.1,-1" "OnTrigger" "charging_beast_relay,enable,,10,-1" } game_text { "targetname" "charge_test" "channel" "4" "message" "[--------------------]" "color" "255 0 0" "holdtime" "1.5" "x" "0.7" "y" "0.9" } } } SpawnTemplate MissionUtilitySetup SpawnTemplate missionsetup ClassLimit { Soldier 0 Pyro 0 Demoman 0 Engineer 0 Medic 0 Sniper 0 Spy 0 Scout 0 Civilian 0 } ItemAttributes { ItemName "The Eviction Notice" "mod_maxhealth_drain_rate" 0 } ItemAttributes { ItemName "Gloves of Running Urgently" "mod_maxhealth_drain_rate" 0 } ItemAttributes { ItemName "The Holiday Punch" "always crit" 1 "taunt attack after end" 1 "melee cleave attack" 1 } ExtendedUpgrades { // upgrade // { // Name "+25 Max Health" // Custom name of the upgrade displayed on the menu. If absent, uses the attribute localized name instead // Attribute "max health additive bonus" // The attribute name // Cap 100 // Maximum amount of the attribute // Increment 25 // Attribute increment value per level // Cost 300 // Cost of the upgrade per level // PlayerUpgrade 1 // Is the upgrade a player upgrade // } MaxUpgradesTier // For tiered upgrades: Specify how many upgrades can be bought per tier. (1 by default) { 1 1 // Max 2 upgrades on tier 1 } MEGAKNIGHT { Name "MEGA KNIGHT!!!!" Attribute "ragdolls become ash" Description "Kill, jump, stomp - become a menace" Cap 1 Increment 1 Cost 800 Tier 1 SecondaryAttributes { "stomp building damage" 125 "kb fall radius" 250 "kb fall min velocity" 800 "kb fall force" 100 "kb fall damage" 100 "kb fall stun time" -1 "hand scale" 0.5 "boots falling stomp" 1 "provide on active" 1 "add attributes on kill" "major increased jump height|3.25|5" } OnApply // On upgrade output. Format: target,action,parameter,delay. If parameter is empty, the upgrade level is passed instead as parameter { Output "!activator,SetCustomModelWithClassAnimations,models/bots/heavy/bot_heavy.mdl" } AllowedWeapons { ItemName "Fists of Steel" } } steel_gauntlet { Name "Ironclad" Attribute "SET BONUS: max health additive bonus" Description "Become a Steel Gauntlet!" Cap 600 Increment 600 Cost 800 Tier 1 SecondaryAttributes { "health from packs increased" 0.5 "damage force reduction" 0.5 "always gib" 1 "model scale" 0.5 "patient overheal penalty" 0 } AllowedWeapons { ItemName "Fists of Steel" } OnApply // On upgrade output. Format: target,action,parameter,delay. If parameter is empty, the upgrade level is passed instead as parameter { Output "!activator,SetCustomModelWithClassAnimations,models/bots/heavy/bot_heavy.mdl" } OnRestore // On upgrade output. Format: target,action,parameter,delay. If parameter is empty, the upgrade level is passed instead as parameter { Output "!activator,SetCustomModelWithClassAnimations,models/bots/heavy/bot_heavy.mdl" } OnDowngrade // On upgrade output. Format: target,action,parameter,delay. If parameter is empty, the upgrade level is passed instead as parameter { Output "!activator,SetCustomModelWithClassAnimations,models\player\heavy.mdl" } } eviction_a { Name "30% DMG Bonus on Kill" Attribute "ragdolls become ash" Cap 1 Increment 1 // Attribute increment value per level Cost 500 // Cost of the upgrade per level AllowPlayerClass HeavyWeapons SecondaryAttributes { "add attributes on kill" "CARD: damage bonus|1.30|5" } AllowedWeapons { ItemName "The Eviction Notice" } } flaming_grus_a { Name "Ignite on hit" Attribute "Set DamageType Ignite" Cap 1 Increment 1 Cost 400 SecondaryAttributes { "weapon burn time increased" 0.5 } AllowedWeapons { ItemName "Gloves of Running Urgently" } } flaming_grus_b { Name "Mini-Crits Burning Enemies" Attribute "ragdolls become ash" Cap 1 Increment 1 Cost 400 Description "Alt-fire behaves like the Axtinguisher" RequiredUpgrade { Upgrade "flaming_grus_a" // Name of the upgrade, as specified in the outer block Level 1 // Minimum level after which the upgrade becomes enabled (Default: 1) } SecondaryAttributes { "alt fire attributes" "attack_minicrits_and_consumes_burning|1" } AllowedWeapons { ItemName "Gloves of Running Urgently" } } holiday_punch_funnies { Name "Faster Taunt Attack" Attribute "taunt attack time mult" Cap 0.25 Increment -0.75 Cost 250 SecondaryAttributes { "gesture speed increase" 2 "provide on active" 1 } AllowedWeapons { ItemName "The Holiday Punch" ItemName "tf_weapon_fists" } } warrior_a { Name "Charging Beast" Attribute "always gib" Cap 1 Increment 1 Cost 400 Description "Taunt to charge like a demoknight" SecondaryAttributes { //"fire input on taunt" "!self^RunScriptCode^AttemptBeastCharge(self)" "fire input on taunt" "!activator^RunScriptCode^AttemptBeastCharge(self)" //"fire input on taunt" "!activator^RunScriptCode^ClientPrint(self,3,self.tostring())" "addcond immunity" "7" "full charge turn control" 1 "charge recharge rate increased" 0.000001 } OnApply // On upgrade output. Format: target,action,parameter,delay. If parameter is empty, the upgrade level is passed instead as parameter { Output "beastChargeMaker,ForceSpawnAtEntityOrigin,!activator" } AllowedWeapons { ItemName "Warrior's Spirit" } } overall_dmg_bonus { Name "25% Damage Bonus" Attribute "damage bonus" Cap 2 Increment 0.25 // Attribute increment value per level Cost 400 // Cost of the upgrade per level AllowPlayerClass HeavyWeapons AllowedWeapons { ItemName "tf_weapon_fists" ItemName "Gloves of Running Urgently" ItemName "Upgradeable TF_WEAPON_FISTS" ItemName "Fists of Steel" ItemName "Apoco-Fists" } } dmg_bonus_evic { Name "20% Damage Bonus" Attribute "damage bonus" Cap 2.4 Increment 0.2 Cost 150 AllowPlayerClass HeavyWeapons AllowedWeapons { ItemName "The Eviction Notice" } } dmg_bonus_kgb_warrior { Name "25% Damage Bonus" Attribute "damage bonus" Cap 1.8 Increment 0.25 Cost 500 AllowPlayerClass HeavyWeapons AllowedWeapons { ItemName "Warrior's Spirit" ItemName "The Killing Gloves of Boxing" } } } Templates {} CustomWeapon { "The Minigun" { OriginalItemName "Upgradeable TF_WEAPON_MINIGUN" "cannot be upgraded" 1 } } ItemBlacklist //Disallows using specified weapons below { Name "TF_WEAPON_MINIGUN" Name "Natascha" Name "Upgradeable TF_WEAPON_MINIGUN" Name "Iron Curtain" Name "The Brass Beast" Name "Tomislav" Name "Festive Minigun 2011" Name "Silver Botkiller Minigun Mk.I" Name "Gold Botkiller Minigun Mk.I" Name "The Huo Long Heatmaker" Name "Promo Huo Long Heatmaker" Name "Rust Botkiller Minigun Mk.I" Name "Blood Botkiller Minigun Mk.I" Name "Carbonado Botkiller Minigun Mk.I" Name "Diamond Botkiller Minigun Mk.I" Name "Silver Botkiller Minigun Mk.II" Name "Gold Botkiller Minigun Mk.II" Name "concealedkiller_minigun_kingofthejungle" Name "craftsmann_minigun_ironwood" Name "craftsmann_minigun_antiqueannihilator" Name "teufort_minigun_warroom" Name "teufort_minigun_citizenpain" Name "powerhouse_flamethrower_turbinetorcher" Name "harvest_minigun_macabreweb" Name "harvest_minigun_pumpkinpatch" Name "harvest_minigun_nutcracker" Name "pyroland_minigun_braincandy" Name "pyroland_minigun_mistercuddles" Name "gentlemanne_medigun_highrollers" Name "gentlemanne_minigun_coffinnail" Name "gentlemanne_minigun_dressedtokill" Name "warbird_minigun_butcherbird" } ExtraLoadoutItems // Extra loadout items available after typing !missionitems in chat { AllowEquipOutsideSpawn 1 // Allow equipping items outside spawn HeavyWeapons // Player Class { Primary // Extended syntax, Item slot to use { Item "The Minigun" // Item name, custom weapon names are available Cost 3000 // The cost of the weapon (default: 0) AllowRefund 1 } // Available slots: // Primary // Secondary // Melee // PDA (construction kit, disguise kit) // PDA2 (destruction kit, watch) // Head // Misc // Action (canteen) // Misc2 } } Wave // Wave 1 { StartWaveOutput { Target wave_start_relay Action Trigger } DoneOutput { Target wave_finished_relay Action Trigger } InitWaveOutput { Target holograms_3way_relay Action Trigger } WaveSpawn { Name "" WaitForAllDead "" Where outside TotalCount 100 MaxActive 100 SpawnCount 1 WaitBeforeStarting 0 WaitBetweenSpawns 0 TotalCurrency 0 TFBot { Template T_TFBot_Heavyweapons_Heavyweight_Champ Action Idle } } } }