Как сделать так чтобы при написании !noclip включался ноуклип и менялась моделька на “models/crow.mdl” (птица)?
Тут в теории может быть много подводных камней. Возможно, тебе стоит избежать этой идеи
Один из подводных камней:
При входе в режим noclip мы ставим модельку игроку через :SetModel. Старую модельку запоминаем, чтобы вернуть ее, когда noclip выключится. Но что, если игрок сменил профу, будучи в noclip? Ему снова изменяет модельку на модельку профы. Теперь он выключает noclip и ему СНОВА меняет модальку на ту, которая была в самом начале
Конечно, это можно учесть в коде, но таких углов может быть много, о которых мы не подозреваем.
Чтобы понять, насколько реально ценна эта идея, ответь для себя на вопрос “Сколько я готов за нее заплатить”. Если “Нисколько”, значит идея ничего не стоит
Вот код, который непременно будет баговать. Но это уже что-то
База взята тут
hook.Add(ULib.HOOK_COMMAND_CALLED, "NoclipModel", function(pl, cmd, args)
if not (cmd == "ulx noclip" and ULib.ucl.query(pl, cmd)) then return end
local isNoclipped = pl:GetMoveType() == MOVETYPE_NOCLIP
if isNoclipped then -- выключаем
local mdl = pl:GetVar("mdl_before_noclip")
if mdl then
pl:SetModel(mdl)
pl:SetVar("mdl_before_noclip", nil)
end
else -- включаем
pl:SetVar("mdl_before_noclip", pl:GetModel())
pl:SetModel("models/crow.mdl")
end
end)
Баг будет как минимум, который я описал. Также если выдавать ноуклип другому человеку, то моделька изменится все равно именно твоя, а не того человека
Я не нашел специального хука, который выполняется после входа/выхода игрока из Noclip режима. Он бы пригодился, чтобы сделать решение более лаконичным и менее багованным
P.S. Если оверрайднуть метод ENTITY:SetMoveType, то там можно вставить хук включения/отключения ноуклипа. Костыль, но должно сработать. Позволит сделать рашение менее (или полностью) не багованным
Пиши, если что
У меня все работает и без багов.