add sborka

This commit is contained in:
2026-03-31 10:27:04 +03:00
commit f5e5f56c84
2345 changed files with 382127 additions and 0 deletions

View File

@@ -0,0 +1,324 @@
AddCSLuaFile()
ENT.Base = "tacrp_proj_base"
ENT.PrintName = "Rock"
ENT.Spawnable = false
ENT.Model = "models/props_debris/concrete_chunk05g.mdl"
ENT.IsRocket = false // projectile has a booster and will not drop.
ENT.InstantFuse = false // projectile is armed immediately after firing.
ENT.RemoteFuse = false // allow this projectile to be triggered by remote detonator.
ENT.ImpactFuse = true // projectile explodes on impact.
ENT.ExplodeOnDamage = false // projectile explodes when it takes damage.
ENT.ExplodeUnderwater = false
ENT.Delay = 0
ENT.AllowFunny = true
ENT.ExtraModels = {
"models/props_junk/PopCan01a.mdl",
"models/Gibs/HGIBS.mdl",
"models/props_junk/garbage_glassbottle003a.mdl",
"models/props_junk/garbage_glassbottle001a.mdl",
"models/props_junk/garbage_glassbottle002a.mdl",
"models/props_junk/garbage_metalcan001a.mdl",
"models/props_junk/garbage_metalcan002a.mdl",
"models/props_junk/GlassBottle01a.mdl",
"models/props_junk/garbage_coffeemug001a.mdl",
"models/props_junk/glassjug01.mdl",
"models/props_lab/jar01b.mdl",
"models/props_junk/watermelon01.mdl",
"models/props_junk/CinderBlock01a.mdl",
"models/props_junk/MetalBucket01a.mdl",
"models/props_junk/metal_paintcan001a.mdl",
"models/Gibs/Antlion_gib_Large_2.mdl",
"models/props_junk/garbage_plasticbottle003a.mdl",
"models/props_junk/garbage_plasticbottle002a.mdl",
"models/props_junk/garbage_plasticbottle001a.mdl",
"models/props_junk/terracotta01.mdl",
"models/props_junk/Shoe001a.mdl",
"models/props_lab/frame002a.mdl",
"models/props_lab/reciever01c.mdl",
"models/props_lab/box01a.mdl",
"models/props_junk/garbage_milkcarton001a.mdl",
"models/props_lab/cactus.mdl",
"models/props_lab/desklamp01.mdl",
"models/Gibs/HGIBS_spine.mdl",
"models/Gibs/wood_gib01a.mdl",
"models/Gibs/wood_gib01b.mdl",
"models/Gibs/wood_gib01c.mdl",
"models/Gibs/wood_gib01d.mdl",
"models/Gibs/wood_gib01e.mdl",
"models/props_c17/oildrum001_explosive.mdl", // won't actually explode :trolleg:
"models/props_interiors/SinkKitchen01a.mdl",
"models/props_borealis/door_wheel001a.mdl",
"models/hunter/blocks/cube025x025x025.mdl",
"models/food/burger.mdl",
"models/food/hotdog.mdl",
"models/lamps/torch.mdl",
"models/player/items/humans/top_hat.mdl",
"models/dav0r/camera.mdl",
"models/dav0r/tnt/tnt.mdl",
"models/maxofs2d/camera.mdl",
"models/maxofs2d/companion_doll.mdl",
"models/maxofs2d/cube_tool.mdl",
"models/maxofs2d/light_tubular.mdl",
"models/maxofs2d/lamp_flashlight.mdl",
"models/mechanics/gears/gear12x12.mdl",
"models/mechanics/various/211.mdl",
"models/props_phx/games/chess/white_rook.mdl",
"models/props_phx/games/chess/white_queen.mdl",
"models/props_phx/games/chess/white_pawn.mdl",
"models/props_phx/games/chess/white_knight.mdl",
"models/props_phx/games/chess/white_king.mdl",
"models/props_phx/games/chess/white_dama.mdl",
"models/props_phx/games/chess/black_rook.mdl",
"models/props_phx/games/chess/black_queen.mdl",
"models/props_phx/games/chess/black_pawn.mdl",
"models/props_phx/games/chess/black_knight.mdl",
"models/props_phx/games/chess/black_king.mdl",
"models/props_phx/games/chess/black_dama.mdl",
"models/props_phx/games/chess/black_bishop.mdl",
"models/props_phx/misc/egg.mdl",
"models/props_phx/misc/potato.mdl",
"models/props_phx/misc/potato_launcher_explosive.mdl",
"models/props_phx/misc/smallcannonball.mdl",
"models/props_phx/misc/soccerball.mdl",
"models/props_phx/misc/fender.mdl",
"models/props_combine/breenbust.mdl",
"models/props_combine/breenglobe.mdl",
"models/props_combine/combinebutton.mdl",
"models/props_combine/breenclock.mdl",
"models/props_interiors/pot01a.mdl",
"models/props_junk/garbage_bag001a.mdl",
"models/props_lab/harddrive02.mdl",
"models/props_lab/monitor02.mdl", // HAAAAAAX
"models/props_lab/clipboard.mdl",
"models/props_lab/tpplug.mdl",
"models/props_pipes/valvewheel002a.mdl",
"models/props_pipes/valve003.mdl",
"models/props_rooftop/sign_letter_m001.mdl",
"models/props_rooftop/sign_letter_f001b.mdl",
"models/props_rooftop/sign_letter_u001b.mdl",
"models/props_wasteland/speakercluster01a.mdl",
"models/props_wasteland/prison_toilet01.mdl",
"models/props_c17/streetsign001c.mdl",
"models/props_c17/streetsign002b.mdl",
"models/props_c17/streetsign003b.mdl",
"models/props_c17/streetsign004e.mdl",
"models/props_c17/streetsign004f.mdl",
"models/props_c17/streetsign005b.mdl",
"models/props_c17/streetsign005c.mdl",
"models/props_c17/streetsign005d.mdl",
"models/props_c17/playgroundTick-tack-toe_block01a.mdl",
"models/props_c17/doll01.mdl",
"models/props_c17/BriefCase001a.mdl",
"models/props_c17/metalPot001a.mdl",
"models/props_c17/metalPot002a.mdl",
"models/props_canal/mattpipe.mdl",
"models/extras/info_speech.mdl",
"models/items/grenadeammo.mdl", // not a live one
"models/props_c17/light_cagelight02_on.mdl",
"models/props_c17/suitcase_passenger_physics.mdl",
"models/props_citizen_tech/guillotine001a_wheel01.mdl",
"models/props_interiors/bathtub01a.mdl", // now this is just absurd
"models/props_junk/garbage_takeoutcarton001a.mdl",
"models/props_junk/garbage_newspaper001a.mdl",
"models/props_junk/sawblade001a.mdl",
"models/props_lab/bewaredog.mdl",
"models/props_lab/huladoll.mdl",
"models/props_lab/powerbox02d.mdl",
"models/props_lab/powerbox02b.mdl",
"models/props_lab/powerbox02a.mdl",
"models/weapons/w_bugbait.mdl",
"models/weapons/w_alyx_gun.mdl",
"models/weapons/w_crowbar.mdl",
"models/weapons/w_smg1.mdl",
"models/weapons/w_shotgun.mdl",
"models/weapons/w_rocket_launcher.mdl",
"models/weapons/w_pistol.mdl",
"models/weapons/w_physics.mdl",
"models/weapons/w_irifle.mdl",
"models/weapons/w_357.mdl",
"models/weapons/w_package.mdl",
"models/weapons/w_pist_deagle.mdl",
"models/weapons/w_pist_elite_single.mdl",
"models/weapons/w_pist_glock18.mdl",
"models/weapons/w_rif_ak47.mdl",
"models/weapons/w_rif_m4a1.mdl",
"models/weapons/w_shot_m3super90.mdl",
"models/weapons/w_smg_mp5.mdl",
"models/weapons/w_snip_awp.mdl",
"models/weapons/w_crossbow.mdl",
"models/weapons/w_eq_defuser.mdl",
"models/weapons/w_toolgun.mdl",
"models/weapons/w_missile_closed.mdl",
"models/weapons/w_stunbaton.mdl",
"models/weapons/w_annabelle.mdl",
"models/roller.mdl",
"models/pigeon.mdl",
"models/headcrabclassic.mdl",
"models/headcrab.mdl",
"models/headcrabblack.mdl",
"models/crow.mdl",
"models/seagull.mdl",
"models/kleiner.mdl",
"models/gman.mdl",
"models/manhack.mdl",
// CSS
"models/props/cs_militia/bottle01.mdl",
"models/props/cs_office/coffee_mug.mdl",
"models/props/cs_office/computer_keyboard.mdl",
"models/props/cs_office/water_bottle.mdl",
"models/props/cs_office/projector_remote.mdl",
"models/props/cs_office/phone.mdl",
"models/props/cs_italy/bananna_bunch.mdl",
"models/props/cs_italy/bananna.mdl",
"models/props/cs_italy/orange.mdl",
"models/props/de_tides/vending_turtle.mdl",
}
function ENT:Initialize()
if SERVER then
if util.IsValidModel(TacRP.ConVars["rock_funny"]:GetString()) then
self:SetModel(TacRP.ConVars["rock_funny"]:GetString())
elseif self.AllowFunny and math.random() <= TacRP.ConVars["rock_funny"]:GetFloat() then
local i = math.min(TacRP.ConVars["rock_funny"]:GetFloat() > 1 and TacRP.ConVars["rock_funny"]:GetInt() - 1 or math.random(1, #self.ExtraModels), #self.ExtraModels)
local mdl = self.ExtraModels[i]
self:SetModel(util.IsValidModel(mdl) and mdl or self.Model)
else
self:SetModel(self.Model)
end
self:SetSkin(math.random(1, self:SkinCount()))
self:PhysicsInit(SOLID_VPHYSICS)
self:SetMoveType(MOVETYPE_VPHYSICS)
self:SetSolid(SOLID_VPHYSICS)
self:SetCollisionGroup(COLLISION_GROUP_PROJECTILE)
if self.Defusable then
self:SetUseType(SIMPLE_USE)
end
self:PhysWake()
local phys = self:GetPhysicsObject()
if !phys:IsValid() then
self:Remove()
else
phys:SetDragCoefficient(0)
phys:SetMass(2)
end
if self.IsRocket then
phys:EnableGravity(false)
end
end
self.SpawnTime = CurTime()
self.NPCDamage = IsValid(self:GetOwner()) and self:GetOwner():IsNPC() and !TacRP.ConVars["npc_equality"]:GetBool()
if self.AudioLoop then
self.LoopSound = CreateSound(self, self.AudioLoop)
self.LoopSound:Play()
end
if self.InstantFuse then
self.ArmTime = CurTime()
self.Armed = true
end
end
function ENT:Impact(data, collider)
return true
end
function ENT:PhysicsCollide(data, collider)
local attacker = self.Attacker or self:GetOwner() or self
if IsValid(data.HitEntity) and data.HitEntity:GetClass() == "func_breakable_surf" then
self:FireBullets({
Attacker = attacker,
Inflictor = self,
Damage = 0,
Distance = 32,
Tracer = 0,
Src = self:GetPos(),
Dir = data.OurOldVelocity:GetNormalized(),
})
local pos, ang, vel = self:GetPos(), self:GetAngles(), data.OurOldVelocity
self:SetAngles(ang)
self:SetPos(pos)
self:GetPhysicsObject():SetVelocityInstantaneous(vel * 0.5)
return
end
local prop1 = util.GetSurfaceData(data.OurSurfaceProps)
local prop2 = util.GetSurfaceData(data.TheirSurfaceProps)
if IsValid(data.HitEntity) and (self.LastDamage or 0) + 0.25 < CurTime() then
local dmg = DamageInfo()
dmg:SetAttacker(attacker)
dmg:SetInflictor(self)
dmg:SetDamage(Lerp((data.OurOldVelocity:Length() - 500) / 2500, 4, 35))
if self:GetModel() != self.Model then
dmg:ScaleDamage(2)
end
dmg:SetDamageType(DMG_CRUSH + DMG_CLUB)
dmg:SetDamageForce(data.OurOldVelocity)
dmg:SetDamagePosition(data.HitPos)
data.HitEntity:TakeDamageInfo(dmg)
self.LastDamage = CurTime()
self:SetCollisionGroup(COLLISION_GROUP_WEAPON)
elseif data.Speed >= 75 and (self.LastImpact or 0) + 0.1 < CurTime() then
self.LastImpact = CurTime()
self:EmitSound(self:GetModel() == self.Model and "physics/concrete/rock_impact_hard" .. math.random(1, 6) .. ".wav" or prop1.impactHardSound)
elseif data.Speed >= 25 and (self.LastImpact or 0) + 0.1 < CurTime() then
self.LastImpact = CurTime()
self:EmitSound(self:GetModel() == self.Model and "physics/concrete/rock_impact_soft" .. math.random(1, 3) .. ".wav" or prop1.impactSoftSound)
end
if !self.FirstHit then
self.FirstHit = true
self:EmitSound(prop2.bulletImpactSound)
if self:GetModel() == self.Model then
self:EmitSound("physics/concrete/concrete_break" .. math.random(2, 3) .. ".wav", 75, math.Rand(105, 110), 0.5)
SafeRemoveEntityDelayed(self, 3)
else
self:EmitSound(prop1.impactHardSound)
if util.IsValidRagdoll(self:GetModel()) then
local rag = ents.Create("prop_ragdoll")
rag:SetModel(self:GetModel())
rag:SetPos(self:GetPos())
rag:SetAngles(self:GetAngles())
rag:Spawn()
rag:SetCollisionGroup(COLLISION_GROUP_WEAPON)
if IsValid(rag:GetPhysicsObject()) then
rag:GetPhysicsObject():ApplyForceOffset(data.HitPos, data.OurOldVelocity)
end
SafeRemoveEntityDelayed(rag, 5)
self:Remove()
else
local gibs = self:PrecacheGibs()
if gibs > 0 then
self:GibBreakClient(data.OurNewVelocity * math.Rand(0.8, 1.2))
// self:GibBreakServer( data.OurOldVelocity * 2 )
self:Remove()
else
SafeRemoveEntityDelayed(self, 3)
end
end
end
end
end