local COMBATTANK_VALUES_TABLE = { // not made by lite, please don't go bother them if this doesn't work properly COMBATTANK_MALLET_MODEL = "models/props_halloween/hammer_mechanism.mdl" COMBATTANK_MALLET_DAMAGE = 2500 COMBATTANK_MALLET_FRIENDLY_FIRE = false COMBATTANK_MALLET_COOLDOWN = 2.6 } foreach(k,v in COMBATTANK_VALUES_TABLE) if(!(k in TankExt.ValueOverrides)) ROOT[k] <- v PrecacheModel(COMBATTANK_MALLET_MODEL) TankExt.PrecacheSound(")misc/halloween/strongman_fast_swing_01.wav") TankExt.PrecacheSound(")misc/halloween/strongman_fast_whoosh_01.wav") TankExt.PrecacheSound(")misc/halloween/strongman_fast_impact_01.wav") TankExt.PrecacheSound(")ambient/explosions/explode_1.wav") TankExt.PrecacheSound(")doors/vent_open2.wav") TankExt.CombatTankWeapons["mallet"] <- { function SpawnModel() { local hMallet = CreateByClassname("funCBaseFlex") hMallet.SetModel(COMBATTANK_MALLET_MODEL) hMallet.SetPlaybackRate(1.0) hMallet.DispatchSpawn() hMallet.SetModelScale(0.6,0) // hMallet.SetSequence(hMallet.LookupSequence("ref")) hMallet.SetAbsAngles(QAngle(-30, 90, 0)) hMallet.SetAbsOrigin(Vector(16,-96,-152)) return hMallet } function OnSpawn() { local bSmashing = false local flNextAttack = 0.0 local iTeamNum = 3 // dunno why this gives errors but lets hardcode it for BLU local iLaserColor = hTank_scope.hBeam.IsValid() ? GetPropInt(hTank_scope.hBeam, "m_clrRender") : 0 function SetLaserColor(sColor) { if(hTank_scope.hBeam.IsValid()) sColor ? hTank_scope.hBeam.AcceptInput("Color", sColor, null, null) : SetPropInt(hTank_scope.hBeam, "m_clrRender", iLaserColor) if(hTank_scope.hBeamEnd.IsValid()) sColor ? hTank_scope.hBeamEnd.AcceptInput("Color", sColor, null, null) : SetPropInt(hTank_scope.hBeamEnd, "m_clrRender", iLaserColor) } local SmashImpact = function() { if(!self.IsValid()) return SetLaserColor(null) flNextAttack = Time() + (COMBATTANK_MALLET_COOLDOWN) EmitSoundEx({ sound_name = ")ambient/explosions/explode_1.wav" sound_level = 100 entity = self filter_type = RECIPIENT_FILTER_GLOBAL }) EmitSoundEx({ sound_name = ")misc/halloween/strongman_fast_impact_01.wav" sound_level = 100 entity = self filter_type = RECIPIENT_FILTER_GLOBAL }) DispatchParticleEffect("hammer_impact_button", vecSmash - Vector(0,0,96), Vector(1, 0, 0)) ScreenShake(vecSmash, 9, 2.5, 3, 1500, 0, true) for(local hPlayer; hPlayer = FindByClassnameWithin(hPlayer, "player", vecSmash, 384);) if(hPlayer.IsAlive() && (COMBATTANK_MALLET_FRIENDLY_FIRE || hPlayer.GetTeam() != iTeamNum)) { local vecTowards = hPlayer.GetOrigin() - vecSmash if(vecTowards.LengthSqr() < 16384) // sqr(128) hPlayer.TakeDamageCustom(hTank, hTank, null, Vector(), Vector(), COMBATTANK_MALLET_DAMAGE, DMG_CRUSH, TF_DMG_CUSTOM_GIANT_HAMMER) else { vecTowards.Norm() hPlayer.ApplyAbsVelocityImpulse(vecTowards * 200 + Vector(0, 0, 500)) } } } vecSmash <- Vector() function Think() { if(!(self && self.IsValid())) return self.StudioFrameAdvance() vecSmash = (self.GetOrigin() - Vector(0,0,48)) + self.GetForwardVector() * 352 + self.GetRightVector() * -48 local LaserTrace = hTank_scope.LaserTrace local bInLaser = "enthit" in LaserTrace && LaserTrace.enthit == hTank_scope.hTarget local flTime = Time() local bCanAttack = flTime >= flNextAttack if(!bSmashing) for(local hPlayer; hPlayer = FindByClassnameWithin(hPlayer, "player", vecSmash, 256);) if(bInLaser && bCanAttack) { bSmashing = true self.ResetSequence(self.LookupSequence("smash")) SetLaserColor("150 90 0") EmitSoundEx({ sound_name = ")misc/halloween/strongman_fast_swing_01.wav" sound_level = 100 entity = self filter_type = RECIPIENT_FILTER_GLOBAL }) TankExt.DelayFunction(self, this, 0.5, function() { EmitSoundEx({ sound_name = ")misc/halloween/strongman_fast_swing_01.wav", pitch = 70, sound_level = 100, entity = self, filter_type = RECIPIENT_FILTER_GLOBAL }) }) TankExt.DelayFunction(self, this, 1.0, function() { EmitSoundEx({ sound_name = ")misc/halloween/strongman_fast_whoosh_01.wav", sound_level = 100, entity = self, filter_type = RECIPIENT_FILTER_GLOBAL, }) }) TankExt.DelayFunction(self, this, 1.3, SmashImpact) TankExt.DelayFunction(self, this, 3.4, function() { EmitSoundEx({ sound_name = ")doors/vent_open2.wav", pitch = 70, sound_level = 100, entity = self, filter_type = RECIPIENT_FILTER_GLOBAL }) }) TankExt.DelayFunction(self, this, 3.4 + COMBATTANK_MALLET_COOLDOWN, function() { bSmashing = false }) break } } TankExt.AddThinkToEnt(self, "Think") } }