Данная статья описывает работу плагина, позволяющего измерять дистанцию между двумя точками в CS 1.6. Плагин присутствует на наших серверах и включён в сборку LAN сервера (нажмите
здесь, чтобы скачать её). Все расстояния далее измеряются в юнитах (
units).
Меню для измерения расстояния вызывается командой
/dist (или
/distance,
/measure):
Чтобы понять, как работает это меню, проведём несколько показательных замеров.
Первые два пункта позволяют задать точки для замера, при этом для каждой отображаются её координаты X, Y и Z. Если в пункте
4. Method выбрано
Aim at Point, то для выбора точки достаточно посмотреть на неё и нажать
1 или
2, а если выбрано
Stand on Point, то в качестве точки будет выбираться позиция, на которой Вы стоите (если же Вы в этом момент в воздухе, будет выбрана точка у Вас под ногами). Результат замера будет показан ниже:
Height это высота между точками, а
Distance это расстояние между ними. Работу остальных пунктов объясним на примерах.
Зайдём на карту
kz_longjumps3 и найдём там LJ блок номиналом в 240 юнитов. Поставим первую точку на боковой стенке блока, а вторую примерно напротив, пункт
7. Extra beams пока что поставим в
Off:
Выбранные точки соединяет красная линия, её длина указана в
Distance и равна 240.841 юнитам. Если поставить пункт
5. Detailed info в
On, то помимо
Distance мы увидим также смещения между точками
dX,
dY,
dZ по каждой оси, а также смещение
dXY по горизонтали (
Estimated LJ обсудим чуть ниже). Здесь можно заметить, что расстояние между блоками как раз равно смещению
dX:
Этот же результат можно получить и не прибегая к помощи
Detailed info. Поставим пункт
3. Autoset the other Point в
On и ещё раз выберем первую точку. Вторая точка будет найдена автоматически (для этого из первой точки плагин проводит нормаль до пересечения с какой-либо поверхностью), и в
Distance Вы сразу увидите ровно 240.000:
Если теперь поставить пункт
6. Epsilon в
On, то дистанция уменьшится до 239.938 юнитов. Дело в том, что движок CS 1.6 не даёт модельке игрока приблизиться к любой поверхности карты ближе, чем на 0.03125 юнита. Это очень небольшое расстояние, которое мы и называем Epsilon. Таким образом, с точки зрения модельки расстояние между блоками меньше на 2 * 0.03125 = 0.0625 юнита, то есть равно 240 - 0.0625 = 239.9375 юнита. Именно это расстояние с округлением и отображается теперь в
Distance.
А теперь разберёмся с
Estimated LJ. Для начала нужно понять, что моделька игрока представляет собой бокс (box), то есть параллелепипед высотой 72 юнита, в основании которого лежит квадрат со стороной 32 юнита. Грани этого бокса всегда параллельны осям X, Y, Z карты. То есть если мы стоя на месте начинаем вращаться с помощью мышки, то наш бокс при этом остаётся неподвижным. Таким бразом, чтобы перелететь блок 240, нам достаточно, чтобы центр бокса преодолел расстояние в 208 юнитов, а оставшиеся 32 юнита мы добираем за счёт ширины бокса:
Но что если делать прыжок по диагонали? Выставим в меню
4. Method: Aim at Point,
5. Detailed info: On,
6. Epsilon: Off,
7. Extra beams: On и поставим первую точку на самом уголке блока 240, а вторую на противоположном уголке соседнего блока 242:
Помимо красной линии мы видим два квадрата (их размеры соответствуют ширине нашего бокса) и жёлтую линию, соединяющую их центры. Эти квадраты плагин выбирает таким образом, что расстояние между их центрами (длина жёлтой линии) минимально. Чтобы нам было удобнее оценивать свои возможности, плагин прибавляет к этому расстоянию 32 юнита и записывает результат как
Estimated LJ. Если судить по
Distance: 250.684, то может показаться, что для прыжка с одного уголка на другой нужно cуметь cделать больше чем 250 lj, однако
Estimated LJ: 244.733 подсказывает нам, что этот прыжок намного проще, чем кажется.
На этом всё, удачных замеров!