Здравствуйте, как сделать так чтобы при смене профессии не забиралось одно конкретное оружие?
Легче будет прописать это оружие в jobs.lua
А чтобы просто не забиралось?
после мести игрока все оружия удаляються, просто сделай выдачу при спавне нужно оружия если оно было на момент смерти
В общем, с чатом жопити совместно, насочинял. Нетстринг сделал, потому что нужен был именно он. Но есть проблема, с которой пока не справился. При перезаходе не сохраняется эта переменная. Понял что как-то ее надо проводить, но куда и как пока не выяснил. Направьте на путь истинный
if SERVER then
util.AddNetworkString("Give_passport")
net.Receive("Give_passport", function(len, ply)
if not IsValid(ply) then return end
if ply:getJobTable().banpassport then
ply:ChatPrint("Ваша профессия запрещает владение паспортом!")
return
end
if ply:HasWeapon("idcard") then
ply:ChatPrint("У вас уже есть паспорт!")
return
end
-- Устанавливаем метку и выдаём паспорт с небольшой задержкой, чтобы избежать конфликта сетевых сообщений
timer.Simple(0.1, function()
if IsValid(ply) then
ply:setDarkRPVar("HasPassport", true)
ply:Give("idcard")
DarkRP.notify(ply, 3, 4, "Вы получили паспорт!")
end
end)
end)
-- Проверяем при смене профессии
hook.Add("OnPlayerChangedTeam", "CheckPassportOnJobChange", function(ply, oldTeam, newTeam)
if ply:getDarkRPVar("HasPassport") then
if ply:getJobTable().banpassport then
-- Если новая профессия запрещает паспорт, изымаем его
if ply:HasWeapon("idcard") then
ply:StripWeapon("idcard")
end
ply:ChatPrint("Вы больше не можете владеть паспортом в этой профессии!")
else
-- Если профессия разрешает паспорт, выдаём его снова
timer.Simple(0.1, function()
if IsValid(ply) and not ply:HasWeapon("idcard") then
ply:Give("idcard")
ply:ChatPrint("Вам вернули паспорт!")
end
end)
end
end
end)
-- Проверяем при спавне
hook.Add("PlayerSpawn", "CheckPassportOnSpawn", function(ply)
if ply:getDarkRPVar("HasPassport") then
if ply:getJobTable().banpassport then
-- Если профессия запрещает паспорт, удаляем его
if ply:HasWeapon("idcard") then
ply:StripWeapon("idcard")
end
ply:ChatPrint("Ваша профессия запрещает владение паспортом!")
else
-- Если профессия разрешена, выдаём паспорт
timer.Simple(0.1, function()
if IsValid(ply) and not ply:HasWeapon("idcard") then
ply:Give("idcard")
ply:ChatPrint("Вам вернули паспорт!")
end
end)
end
end
end)
end
Ну и в общем и целом оцените код
Ну и бред. Создаём нет что-бы не использовать его, забираем паспорт если его нельзя, но зачем забирать если его нет?
Net я импользую в другом месте. И не забираю я его когда его нет
Работает хорошо, sql сделал
И че тут непонятно, получаешь паспорт один раз, а дальше в зависимости от работы он тебе выдается или забирается
Когда Игрок умирает, всё его оружие удаляется.
в хуке спавна игрока стоит проверка на “есть ли у игрока паспорт”
там всегда будет false.
на счёт net. Почему не используется в том же хуке?
Там просто повтор того же самое но через umsg
Действительно, ты прав. Поправлю, скину
А если нужно, не только ID-карту или же несколько сразу оружий?
Таблицу прописать
util.AddNetworkString("Give_passport")
-- Функция выдачи паспорта
local function GivePassport(ply)
if not IsValid(ply) then return end
-- Проверяем, запрещена ли профессии владение паспортом
if ply:getJobTable().banpassport then
DarkRP.notify(ply, 1, 4, "Ваша профессия запрещает владение паспортом!")
return
end
-- Проверяем, есть ли у игрока уже паспорт
if ply:HasWeapon("idcard") then
ply:ChatPrint("У вас уже есть паспорт!")
return
end
-- Выдаём паспорт
ply:SetNWBool("HasPassport", true)
ply:Give("idcard")
DarkRP.notify(ply, 3, 4, "Вы получили паспорт!")
end
-- Функция удаления паспорта
local function RemovePassport(ply)
if not IsValid(ply) then return end
if ply:HasWeapon("idcard") then
ply:StripWeapon("idcard")
end
DarkRP.notify(ply, 1, 4, "Ваша профессия запрещает владение паспортом!")
end
-- Проверяем состояние паспорта при спавне или смене профессии
local function CheckPassport(ply)
if ply:GetNWBool("HasPassport") then
if ply:getJobTable().banpassport then
-- Удаляем паспорт, если профессия запрещает его
RemovePassport(ply)
else
-- Выдаём паспорт, если профессия разрешает его
if not ply:HasWeapon("idcard") then
ply:Give("idcard")
-- DarkRP.notify(ply, 3, 4, "Вам вернули паспорт!")
end
end
end
end
-- Сетевой запрос на выдачу паспорта
net.Receive("Give_passport", function(len, ply)
GivePassport(ply)
end)
-- Хук для смены профессии
hook.Add("OnPlayerChangedTeam", "CheckPassportOnJobChange", function(ply, oldTeam, newTeam)
CheckPassport(ply)
end)
-- Хук для спавна
hook.Add("PlayerSpawn", "CheckPassportOnSpawn", function(ply)
CheckPassport(ply)
end)