[ULX] Смена модельки во время !noclip

Как сделать так чтобы при написании !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, то там можно вставить хук включения/отключения ноуклипа. Костыль, но должно сработать. Позволит сделать рашение менее (или полностью) не багованным

Пиши, если что

У меня все работает и без багов.