А у меня есть вопрос почему мы переменную view_dist возводим в квадрат 200? Имеется виду как это работает как оптимизация?про 2 пункт это условное название переменных, чтобы просто мысль донести) если переделать в реальный код, то выглядеть будет примерно так:
Lua:function ENT:Draw() local view_dist = 40000 -- 200*200 local entity_dist = self:GetPos():DistToSqr(LocalPlayer():GetPos()) if entity_dist > view_dist then return end end
или еще более упрощенное, если тебе эти значение больше нигде не нужны, то можно просто результат выполнения функции сравнить с числом
Lua:function ENT:Draw() if self:GetPos():DistToSqr(LocalPlayer():GetPos()) > 40000 then return end end
> и еще не понял первый пункт, как использовать функцию DistToSqr
Ну смотри, в обычном случае ты сравниваешь например
entity:GetPos():Distance(other_entity:GetPos()) > 200
В случае с DistToSqr число с которым ты будешь сравнивать, ты просто возводишь в квадрат предварительно:
entity:GetPos():DistToSqr(other_entity:GetPos()) > 40000 -- 200*200=40000
Это экономит ресурсы и позволяет игре работать чуть-быстрее. Это не то, чтобы прямо небо и земля, и мир не сломается, если будешь использовать обычный Distance, но на микрооптимизациях строится общая оптимизация, соответственно, твой сервер будет потреблять меньше CPU/оперативки/етц.
В свое время когда барбарисмодом начинал заниматься очень пожалел, что не привил себе привычку учитывать особенности движка и компьютерных вычислений, поэтому когда доходило дело до работы скриптов в реальных условиях, часто приходилось делать всю работу заново, чтобы написать код нормально, а не как попало
насколько я помню курс матана и понимаю как работают эти функции, при использовании Distance() интерпретатор подставляет сведения о векторах в полную формулу евклидовой метрики (дистанция между векторами), которая в конце всех подсчетов извлекает квадратный корень из выражения, а извлечение корня является очень дорогой операцией в компьютерных вычисленияхА у меня есть вопрос почему мы переменную view_dist возводим в квадрат 200? Имеется виду как это работает как оптимизация?
Error осталось, но зато карта теперь не ломается
убейся с своим chatgpt. Я думаю человек и так мог промт написать тудаУ тебя на 56 строчке нет обьектаcolor
, ошибка не относится к коду который ты скинул. Пришли актуальный код плиз
Из того, что могу посоветовать, пока ты доносишь актуальный код:
1. Лучше использовать DistToSqr для проверки дистанции, если дистанцию для обработки ты знаешь заранее (тут ты знаешь - 200) или понимаешь как работает квадратичная дистанция. Это намного быстрее, потому что под капотом обычный Distance все равно вычисляет квадрат и использует по сути DistToSqr, а это очень дорогая процедура. В таком случае тебе нужно будет посчитать квадрат числа 200 вместо компьютера и вставить его в код. Это будет очень большое число - не смущайся, так работает геометрия в трехмерном пространстве.
2. Обычно, ограничение дистанции прорисовки делают для сохранения ресурсов, но у тебя только меняется прозрачность шрифта, а это никак на сохранение ресурсов не меняется. Гораздо профитнее сделатьif entity_distance > view_distance then return end
в начале функции ENT:Draw(). В таком случае у тебя вообще не будет выполняться эта функция, если проверка дистанции не прошла успешно.
3.
Lua:GPO:SetMass(1) GPO:SetVelocity((self:GetUp() * 2)) if GPO:IsValid() then GPO:Wake() end
два вызова методов у GPO:
GPO:SetMass(1)
GPO:SetVelocity((self:GetUp() * 2))
лучше внести в блокif GPO:IsValid() then
, потому что если почему-то физический объект не проинициализируется, то в этом месте сыпанет ошибкой
4.ENT:AcceptInput(activator, caller)
обычно используется для взаимодействия между разными энтити (не-игроками), по аналогии с Input-ами энтити, которые можно сделать в хаммере. Если ты этим не собираешься пользоваться, то лучше удалить эту функцию, чтобы повысить читаемость кода. Игроки при нажатии E на энтити всегда вызовут методENT:Use()
.
Я пытаюсь быть полезным и обьяснить челу где у него есть архитектурные ошибки, чтобы у него сразу вырабатывался навык писать нормальный код, который потом не надо будет переделывать. Причем я не просто так высрал это, а высрал в дополнение к уточняющему вопросу по теме которая его волнует.убейся с своим chatgpt. Я думаю человек и так мог промт написать туда
Ну обкак ктрл ц ктрл в с чат гпт и он может. Вопрос к тебе: Ты нахуя пытаешься статистику фармить?Я пытаюсь быть полезным и обьяснить челу где у него есть архитектурные ошибки, чтобы у него сразу вырабатывался навык писать нормальный код, который потом не надо будет переделывать. Причем я не просто так высрал это, а высрал в дополнение к уточняющему вопросу по теме которая его волнует
Собственно вопрос - а хули ты доебался? Или местные ценят только когда им скидывают готовый код в ответ на их вопрос, а новые знания их в принципе не интересуют?
не знаю бро, я не знал что ответ на вопрос и помощь человеку у которого есть интересный вопрос и который кажется что заинтересован в получении какой-то информации считается фармом статистики, больше так делать не буду( прости пожалуйста(Ну обкак ктрл ц ктрл в с чат гпт и он может. Вопрос к тебе: Ты нахуя пытаешься статистику фармить?