mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-18 06:03:47 +03:00
Upload
This commit is contained in:
101
gamemodes/darkrp/plugins/easybutchering.lua
Normal file
101
gamemodes/darkrp/plugins/easybutchering.lua
Normal file
@@ -0,0 +1,101 @@
|
||||
--[[
|
||||
| This file was obtained through the combined efforts
|
||||
| of Madbluntz & Plymouth Antiquarian Society.
|
||||
|
|
||||
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||||
| Maloy, DrPepper10 @ RIP, Atle!
|
||||
|
|
||||
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||||
--]]
|
||||
|
||||
PLUGIN.name = "Easy Butchering"
|
||||
PLUGIN.author = "Enistein"
|
||||
PLUGIN.description = "Allows butchering of ragdolls with USE key."
|
||||
|
||||
local BUTCHERABLE_RAGDOLLS = {
|
||||
["models/headcrabclassic.mdl"] = "ing_headcrab_meat",
|
||||
["models/headcrab.mdl"] = "ing_headcrab_meat",
|
||||
["models/antlion.mdl"] = "ing_antlion_meat",
|
||||
["models/zombie/classic.mdl"] = "ing_headcrab_meat"
|
||||
}
|
||||
|
||||
local BUTCHERING_TOOLS = {
|
||||
"machete",
|
||||
"hatchet",
|
||||
"kitknife",
|
||||
"cleaver"
|
||||
}
|
||||
|
||||
local BUTCHERING_SOUND = "physics/flesh/flesh_squishy_impact_hard1.wav"
|
||||
|
||||
function PLUGIN:OnNPCKilled(npc, attacker, inflictor)
|
||||
local ragdoll = ents.Create("prop_ragdoll")
|
||||
ragdoll:SetModel(npc:GetModel())
|
||||
ragdoll:SetPos(npc:GetPos())
|
||||
ragdoll:SetAngles(npc:GetAngles())
|
||||
ragdoll:Spawn()
|
||||
|
||||
npc:Remove()
|
||||
end
|
||||
|
||||
function PLUGIN:PlayerUse(player, entity)
|
||||
local character = player:GetCharacter()
|
||||
local model = entity:GetModel()
|
||||
|
||||
if entity:GetClass() == "prop_ragdoll" and BUTCHERABLE_RAGDOLLS[model] then
|
||||
if not character:IsVortigaunt() then
|
||||
local hasTool = false
|
||||
|
||||
for _, tool in ipairs(BUTCHERING_TOOLS) do
|
||||
if character:GetInventory():HasItem(tool) then
|
||||
hasTool = true
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
if not hasTool then
|
||||
return player:Notify("Bunu yapmak için kesici bir alete ihtiyacın var.")
|
||||
end
|
||||
end
|
||||
|
||||
local itemToGive = BUTCHERABLE_RAGDOLLS[model]
|
||||
|
||||
if ix.item.list[itemToGive] then
|
||||
if character:IsVortigaunt() then
|
||||
player:Notify("Pençelerini kullanarak cesedi parçaladın...")
|
||||
else
|
||||
player:Notify("Alet ile cesedi parçaladın...")
|
||||
end
|
||||
|
||||
player:EmitSound(BUTCHERING_SOUND)
|
||||
|
||||
local ragdollPos = entity:GetPos()
|
||||
ix.item.Spawn(itemToGive, ragdollPos)
|
||||
entity:Remove()
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
local TEXT_DISPLAY_DISTANCE = 150
|
||||
|
||||
hook.Add("HUDPaint", "ButcherableRagdollDisplay", function ()
|
||||
local ply = LocalPlayer()
|
||||
local tr = ply:GetEyeTrace()
|
||||
|
||||
if IsValid(tr.Entity) and tr.Entity:GetClass() == "prop_ragdoll" and BUTCHERABLE_RAGDOLLS[tr.Entity:GetModel()] and tr.HitPos:Distance(ply:GetPos()) < TEXT_DISPLAY_DISTANCE then
|
||||
local pos = tr.Entity:LocalToWorld(tr.Entity:OBBCenter()):ToScreen()
|
||||
|
||||
local keyIndicatorText = "E"
|
||||
local key_textWidth, key_textHeight = surface.GetTextSize(keyIndicatorText)
|
||||
|
||||
draw.RoundedBox(4, pos.x-5, pos.y+3, 120, key_textHeight -5, Color(0, 0, 0, 150))
|
||||
draw.RoundedBox(4, pos.x-5, pos.y+3, key_textWidth + 10, key_textHeight -5, Color(255, 80, 80))
|
||||
draw.SimpleText(keyIndicatorText, "DermaLarge", pos.x, pos.y, color_white)
|
||||
draw.SimpleText("Parçala", "DermaLarge", pos.x + 25, pos.y, color_white)
|
||||
end
|
||||
end)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user