::EscapeTrain <- { Cleanup = function() { // cleanup any persistent changes here // keep this at the end delete ::EscapeTrain } // mandatory events OnGameEvent_recalculate_holidays = function(_) { if (GetRoundState() == 3) Cleanup() } OnGameEvent_mvm_wave_complete = function(_) { Cleanup() } // add stored variables or your own events here // // e.g. // myvar = 123 // // OnGameEvent_player_death = function(params) // { ... } TrainBotDummy = null TrainBoss = null OnScriptHook_OnTakeDamage = function(params) { if(params.const_entity == null || params.attacker == null) return local ent = params.const_entity; if(ent.GetClassname() == "base_boss") { //PopExtUtil.PrintTable(params) if(params.attacker.GetTeam()!=2) { params.damage = 0 return } ClientPrint(null,3,params.damage.tostring() + " " + CBaseEntity.GetName.call(ent)) if(TrainBotDummy != null && TrainBotDummy.IsValid()) { //TakeDamageEx(handle hInflictor, handle hAttacker, handle hWeapon, Vector vecDamageForce, Vector vecDamagePosition, float flDamage, Constants.FDmgType nDamageType) TrainBotDummy.TakeDamageEx(ent, params.attacker, params.weapon, Vector(0,0,0), params.damage_position, params.damage, params.damage_type) } } if(ent.GetClassname() == "prop_dynamic" && "grey_mann_escape_train" == CBaseEntity.GetName.call(ent)) { ClientPrint(null,3,params.damage.tostring() + " " + CBaseEntity.GetName.call(ent)) TrainBoss.TakeDamageEx(params.inflictor, params.attacker, params.weapon, Vector(0,0,0), params.damage_position, params.damage, params.damage_type) } } }; __CollectGameEventCallbacks(EscapeTrain) EscapeTrain.TrainSetup <- function(trainBoss) { trainBoss.ValidateScriptScope() local scope = trainBoss.GetScriptScope() scope.train_end_hide <- trainBoss.LookupSequence("train_end_hide") scope.train_start_hide <- trainBoss.LookupSequence("train_start_hide") scope.gray_mann_escape <- trainBoss.LookupSequence("gray_mann_escape") scope.curSeq <- scope.train_start_hide scope.playbackRate <- 0 AddThinkToEnt(trainBoss, "TrainThink") EscapeTrain._SetSeq(trainBoss, scope.train_start_hide) EscapeTrain.TrainBoss = trainBoss } ::TrainThink <- function() { local scope = self.GetScriptScope() self.SetSequence(scope.curSeq) self.StudioFrameAdvance() self.DispatchAnimEvents(self) self.SetPlaybackRate(scope.playbackRate) //ClientPrint(null,4,self.GetCycle().tostring()) return -1 } EscapeTrain.SetAnimation <- function(sequence) { local seqId = EscapeTrain.TrainBoss.LookupSequence(sequence) EscapeTrain._SetSeq(EscapeTrain.TrainBoss, seqId) } EscapeTrain._SetSeq <- function(boss, seq, rate = 1, cycle = 0.0) { local scope = boss.GetScriptScope() scope.playbackRate = rate scope.curSeq = seq boss.SetCycle(cycle) boss.ResetSequence(seq) }