Хочу сделать так, чтобы оружие с пола нельзя было сразу поднять, а только по нажатию клавиши E. Как это можно реализовать?
Советую вставить в: darkrp/gamemode/init.lua (в самом низу)
local function IsKeyPressed(ply)
return ply:KeyDown(IN_USE)
end
hook.Add("PlayerCanPickupWeapon", "podnatijeoruzhia", function(ply, weapon)
if not IsKeyPressed(ply) then
return false
end
end)
Функция работает, да, но появилась проблема: теперь у всех проф отсутствует оружие
Тогда попробуй так:
local function IsLookingAtWeapon(ply, weapon)
local plyPos = ply:EyePos()
local weaponPos = weapon:GetPos()
local plyLookDir = ply:EyeAngles():Forward()
return plyPos:DistToSqr(weaponPos) <= 10000 and plyLookDir:Dot((weaponPos - plyPos):GetNormalized()) > 0.95
end
hook.Add("PlayerCanPickupWeapon", "podnatijeoruzhia", function(ply, weapon)
if IsLookingAtWeapon(ply, weapon) and ply:KeyDown(IN_USE) then
return true
elseif weapon:CreatedByMap() or weapon:GetClass() == "spawned_weapon" then
return true
end
return false
end)
Не помогло
Что именно за оружия пропали?
Да в принципе все оружие изначально которое выдается у каждой профы. Хоть стандартные по типу физ гана и тул гана, хоть из аддонов
Хорошо попробуй тогда это:
hook.Add("KeyPress", "PlayerPressE", function(ply, key)
if key == IN_USE and ply:EyePos():Distance(ply:GetEyeTrace().HitPos) <= 100 then
local ent = ply:GetEyeTrace().Entity
if IsValid(ent) and ent:IsWeapon() and not ent:IsPlayerHolding() then
ply:PickupObject(ent)
end
end
end)
Теперь вернулось стартовое оружие но не работает хук
В autorun/server
hook.Add("PlayerUse", "VozmiOruzhieBlyat", function(ply, ent)
if IsValid(ent) and ply:Alive() and ply:IsPlayer() and ent:IsWeapon() and not ent:IsPlayerHolding() then
local distance = ply:GetPos():DistToSqr(ent:GetPos())
if distance <= 10000 then
ply:PickupObject(ent)
return false
end
end
end)
А куда его вписывать то
Просто создай новый файл там например oruzhiepickup.lua
Все как и раньше: стартовое оружие есть, подбора на Е - нет
Можно реализовать, если ты создаешь оружие, как spawned_weapon. Оно уже в целом не будет подниматься моментально. Это самый обычный способ, который, как правило, не вызывает серьёзных багов. Расскажи, в каких случаях у тебя получается поднимать то оружие, которое подниматься не должно. Если ты создаешь его через инструмент “Создатель”, то оно создается, как обычный SWEP.
Ниже код, который написан на коленке и не проверен, он берёт свойства оружия созданного через обычный спавн и переделывает его в spawned_weapon. Может быть это решит твою проблему.
hook.Add(
"OnEntityCreated",
"convert_weapon_to_spawned_weapon",
function(ent)
if not IsValid(ent) or not ent:IsWeapon() then return end
local spawned_weapon = ents.Create("spawned_weapon")
local model = (ent:GetModel() == "models/weapons/v_physcannon.mdl" and "models/weapons/w_physics.mdl") or ent:GetModel()
model = util.IsValidModel(model) and model or "models/weapons/w_rif_ak47.mdl"
spawned_weapon:SetModel(model)
spawned_weapon:SetSkin(ent:GetSkin() or 0)
spawned_weapon:SetWeaponClass(ent:GetClass())
spawned_weapon.nodupe = true
timer.Simple(
0,
function()
spawned_weapon:SetPos(ent:GetPos())
ent:Remove()
spawned_weapon:Spawn()
end
)
end
)
Вообщем дело в том что я нашел рабочий код на запрет профам брать в руки оружие если оно им не положено, но когда я подхожу к запрещенному оружию которое валяется на земле, начинается сущий ад.
В связи с этим я решил, что если у меня оружие будет подниматься через кнопку Е, то выдавать сообщение о запрещенном игроку оружии оно будет только после нажатия.
Мне надо сделать так, чтобы когда игрок покупал коробку оружия у торговца, то он смог бы поднять это оружие только на кнопку Е.
А еще кстати консоль жалуется на твой код:

Так ведь оружие с DarkRP и так поднимается по нажатию [E], разве нет?
Там для оружия специально отдельный класс сделан ради этого