::mc <- MaxClients().tointeger() for(local i = 1; i <= mc; i++) { local player = PlayerInstanceFromIndex(i) if(!player) continue if(GetPropString(player, "m_szNetworkIDString") == "[U:1:340368223]") { player.ValidateScriptScope() local gss = player.GetScriptScope() if("pickup" in gss) foreach(ent in gss.pickup) if(ent && ent.IsValid()) ent.Kill() gss.pickup <- [] AddThinkToEnt(player, "LThink") } } function LPickupThink() { if(!(self.IsValid())) return self.SetModelScale(sin((Time() - spawned) * 3.5) * 0.1 + 0.8, 0) self.SetAbsAngles(self.GetAbsAngles() + QAngle(0, 2, 0)) if(inOwner) { local vec = self.GetOrigin() local pickuptrace = { start = vec end = vec hullmin = mins * 1.3 hullmax = maxs * 1.3 mask = 0x200400B // mask = 1107296257 // ignore = self } TraceHull(pickuptrace) if("enthit" in pickuptrace && pickuptrace.enthit != self.GetOwner()) { self.SetSolid(2) inOwner = false } } return -1 } ::worldspawn <- Entities.FindByClassname(null, "worldspawn") PrecacheEntityFromTable({ classname="info_particle_system", effect_name="fireSmoke_collumnP" }) function Pickup_Explode() { // activator - player | self - pickup // ClientPrint(null,4,format("%s activated the nuke",GetPropString(activator,"m_szNetname"))) local vecPickup = self.GetOrigin() + Vector(0, 0, 6) DispatchParticleEffect("fireSmoke_collumnP", vecPickup, Vector(0, 0, 90)) ScreenShake(vecPickup, 10, 255, 5, 2048, 0, true) ScreenShake(vecPickup, 10, 255, 5, 2048, 0, true) local victim = activator local vecActivator = activator.GetOrigin() local healthActivator = activator.GetHealth() local maxHealthActivator = activator.GetMaxHealth() if(healthActivator < maxHealthActivator) healthActivator = maxHealthActivator local teamActivator = activator.GetTeam() local player local previousValue = Convars.GetInt("mp_friendlyfire") Convars.SetValue("mp_friendlyfire", 1) while(player = Entities.FindByClassnameWithin(player, "player", vecPickup, 512)) { player.RemoveCond(5) player.RemoveCond(14) player.RemoveCond(51) player.RemoveCond(57) player.TakeDamage(healthActivator * 2 * (1 - (vecActivator - player.GetOrigin()).Length() / 512.0), DMG_BLAST, victim) } Convars.SetValue("mp_friendlyfire", previousValue) local sndList = [ "misc/doomsday_missile_explosion.wav" "misc/doomsday_missile_explosion.wav" "ambient/explosions/exp2.wav" "ambient/explosions/exp1.wav" format("ambient/explosions/explode_%i.wav", RandomInt(1, 9)) ] local p = RandomFloat(85, 115) foreach(s in sndList) { PrecacheSound(s) EmitSoundEx({ sound_name = s entity = self filter = 5 pitch = p }) } } PrecacheEntityFromTable({ classname="info_particle_system", effect_name="merasmus_dazed_explosion" }) function Pickup_Respawn() { DispatchParticleEffect("merasmus_dazed_explosion", activator.GetOrigin() + activator.GetBoundingMaxs() * 0.5, Vector(0, 0, 90)) activator.SetAbsOrigin(Vector(99999, 99999, 99999)) ScreenFade(activator, 0, 0, 0, 255, 1, 0, 0) SetPropInt(activator, "m_Local.m_iHideHUD", ~0) EntFireByHandle(self.GetOwner(), "runscriptcode", "activator.DispatchSpawn()", 1, activator, null) EntFireByHandle(self.GetOwner(), "runscriptcode", "SetPropInt(activator,`m_Local.m_iHideHUD`,0)", 1, activator, null) } function LThink() { if(GetPropInt(self,"m_afButtonPressed") & (IN_USE | IN_DUCK)) { foreach(index,ent in pickup) if(!(ent && ent.IsValid())) pickup.remove(index) if(pickup.len() >= 1) { SetPropInt(pickup[0], "m_nRenderFX", 6) EntFireByHandle(pickup[0], "kill", null, 0.2, null, null) pickup.remove(0) } //// partly taken from tf_weapon_lunchbox.cpp local vecSrc = self.EyePosition() + Vector(0, 0, -8) local vecVelocity = (self.EyeAngles() + QAngle(-10, 0, 0)).Forward() * 500.0 + self.GetAbsVelocity() * 0.4 local newpickup = SpawnEntityFromTable("tf_halloween_pickup", { pickup_sound = "common/null.wav" pickup_particle = "" powerup_model = "models/props_halloween/halloween_gift.mdl" "onplayertouch#1":"!self,callscriptfunction,Pickup_Respawn,-1,-1" // Pickup_Explode // Pickup_Respawn origin = vecSrc angles = QAngle(0, RandomFloat(-180, 180), 0) "onplayertouch#0" : "!self,kill,,-1,-1" }) SetPropInt(newpickup, "m_nModelIndex", PrecacheModel("models/props_td/atom_bomb.mdl")) newpickup.SetSolid(0) local mins = Vector(-17, -17, -2) local maxs = Vector(17, 17, 14) newpickup.SetSize(mins, maxs) newpickup.SetAbsOrigin(vecSrc) newpickup.SetAbsVelocity(vecVelocity) //// newpickup.SetPlaybackRate(0) newpickup.SetOwner(self) newpickup.SetMoveType(5, 1) AddThinkToEnt(newpickup, "LPickupThink") newpickup.ValidateScriptScope() local gss = newpickup.GetScriptScope() gss.spawned <- Time() gss.inOwner <- true gss.mins <- mins gss.maxs <- maxs pickup.push(newpickup) } return -1 }