Вопрос ERROR вместо модели

  • 12
  • 0
Контакты для связи отсутствуют.
про 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/оперативки/етц.

В свое время когда барбарисмодом начинал заниматься очень пожалел, что не привил себе привычку учитывать особенности движка и компьютерных вычислений, поэтому когда доходило дело до работы скриптов в реальных условиях, часто приходилось делать всю работу заново, чтобы написать код нормально, а не как попало :roflan-ebalo:
А у меня есть вопрос почему мы переменную view_dist возводим в квадрат 200? Имеется виду как это работает как оптимизация?
Error осталось, но зато карта теперь не ломается
 
Последнее редактирование:
  • 98
  • 1
  • 12
Контакты для связи отсутствуют.
А у меня есть вопрос почему мы переменную view_dist возводим в квадрат 200? Имеется виду как это работает как оптимизация?
Error осталось, но зато карта теперь не ломается
насколько я помню курс матана и понимаю как работают эти функции, при использовании Distance() интерпретатор подставляет сведения о векторах в полную формулу евклидовой метрики (дистанция между векторами), которая в конце всех подсчетов извлекает квадратный корень из выражения, а извлечение корня является очень дорогой операцией в компьютерных вычислениях

функция DistToSqr делает тоже самое, кроме последнего шага - она не извлекает квадратный корень из выражения, извлечение корня остается на твое усмотрение, а оно нужно не всегда, как например в твоем случае:

dist_to_entity^2 > view_distance^2 всегда будет логически равно выражению dist_to_entity > view_distance при любом значении дистанции больше нуля. поэтому ты можешь спокойно использовать dist_to_entity^2 > view_distance^2 и экономить ресурсы процессора на извлечении квадратного корня из этих чисел
 
  • 149
  • 11
У тебя на 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. Я думаю человек и так мог промт написать туда
 
  • 98
  • 1
  • 12
Контакты для связи отсутствуют.
убейся с своим chatgpt. Я думаю человек и так мог промт написать туда
Я пытаюсь быть полезным и обьяснить челу где у него есть архитектурные ошибки, чтобы у него сразу вырабатывался навык писать нормальный код, который потом не надо будет переделывать. Причем я не просто так высрал это, а высрал в дополнение к уточняющему вопросу по теме которая его волнует.
Я это делаю потому что в 2010 году, когда я впервые потрогал барбарисмод за Lua, никакой адекватной документации про него на тот момент не существовало, и уж тем более не существовало людей, которые тебе просто так, в формате ответа на форуме, подскажут про best practice. Тогда меня это печалило и очень затрудняло мой процесс знакомства с этой темой. Я хочу, чтобы у чела, которому я решился помочь, такого ощущения не возникало.

Собственно вопрос - а хули ты доебался? Или местные ценят только когда им скидывают готовый код в ответ на их вопрос, а новые знания их в принципе не интересуют?
 
  • 149
  • 11
Я пытаюсь быть полезным и обьяснить челу где у него есть архитектурные ошибки, чтобы у него сразу вырабатывался навык писать нормальный код, который потом не надо будет переделывать. Причем я не просто так высрал это, а высрал в дополнение к уточняющему вопросу по теме которая его волнует

Собственно вопрос - а хули ты доебался? Или местные ценят только когда им скидывают готовый код в ответ на их вопрос, а новые знания их в принципе не интересуют?
Ну обкак ктрл ц ктрл в с чат гпт и он может. Вопрос к тебе: Ты нахуя пытаешься статистику фармить?
 
  • 98
  • 1
  • 12
Контакты для связи отсутствуют.
Ну обкак ктрл ц ктрл в с чат гпт и он может. Вопрос к тебе: Ты нахуя пытаешься статистику фармить?
не знаю бро, я не знал что ответ на вопрос и помощь человеку у которого есть интересный вопрос и который кажется что заинтересован в получении какой-то информации считается фармом статистики, больше так делать не буду( прости пожалуйста(

отныне теперь буду отвечать только односложными сообщениями типа +/- и скидывать готовый код без объяснений что к чему, чтобы не фармить статистику и не злить тебя
 
Активность
Пока что здесь никого нет
Сверху Снизу