Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Проверка координаты
BarD Дата: Суббота, 01.11.2014, 13:37:03 | Сообщение # 1
Сообщений: 943
Репутация: 137 [ +/- ]
Допустим, у нас есть какая-то координата.
Код
pos[3]

Как проверить, является ли эта координата поверхностью какого-либо предмета или стены? Т.е. не является ли эта координата воздухом. Если возможно это сделать, подскажите, пожалуйста! Буду благодарен!
 
Sallcom Дата: Суббота, 01.11.2014, 17:17:50 | Сообщение # 2
Сообщений: 205
Репутация: 31 [ +/- ]
Может быть как-то так:
Код

#include <sourcemod>

new Float:fPos[3];//Твоя координата

....

public OnMapStart(){
       new maxEnt = GetMaxEntities(), Float:fEntityPos[3];
       for(new i = MaxClients; i < maxEnt; i++){
           if(IsValidEdict(i) && IsValidEntity(i)){
               GetEntPropVector(i, Prop_Send, "m_vecOrigin", fEntityPos);
               if(fPos[0] == fEntityPos[0] && fPos[1] == fEntityPos[1] && fPos[2] == fEntityPos[2]){
                   ...//Твое действие
               }
           }
       }
}


Сообщение отредактировал Sallcom - Суббота, 01.11.2014, 17:19:20
 
BarD Дата: Суббота, 01.11.2014, 17:45:32 | Сообщение # 3
Сообщений: 943
Репутация: 137 [ +/- ]
Спасибо! Я так понимаю, ты вычисляешь позицию "ног" энтити, и сравниваешь её с моей координатой. Но если я смотрю на стену? Где у неё "ноги"?))
 
Sallcom Дата: Воскресенье, 02.11.2014, 19:07:39 | Сообщение # 4
Сообщений: 205
Репутация: 31 [ +/- ]
У меня, конечно, есть функция, которая проверяет есть ли стена перед игроком(координата игрока) и конечной точкой.
Если ее модернизировать, то есть изменить проверку, а именно не по 1 стороне(от игрока до точки), а по 4 сторонам(от точек в определенном радиусе от твоей до самой точки), то это решит твою проблему.


Сообщение отредактировал Sallcom - Воскресенье, 02.11.2014, 19:09:00
 
BarD Дата: Понедельник, 03.11.2014, 06:20:49 | Сообщение # 5
Сообщений: 943
Репутация: 137 [ +/- ]
Спасибо, уже не нужно) все равно, лови +, как единственный, кто ответил.
 
tolik1231 Дата: Суббота, 24.03.2018, 08:59:47 | Сообщение # 6
Сообщений: 71
Репутация: -1 [ +/- ]
Цитата Sallcom ()

#include <sourcemod>

new Float:fPos[3];//Твоя координата

....

public OnMapStart(){
       new maxEnt = GetMaxEntities(), Float:fEntityPos[3];
       for(new i = MaxClients; i < maxEnt; i++){
           if(IsValidEdict(i) && IsValidEntity(i)){
               GetEntPropVector(i, Prop_Send, "m_vecOrigin", fEntityPos);
               if(fPos[0] == fEntityPos[0] && fPos[1] == fEntityPos[1] && fPos[2] == fEntityPos[2]){
                   ...//Твое действие
               }
           }
       }
}


L 03/24/2018 - 09:55:55: [SM] Exception reported: Property "m_vecOrigin" not found (entity 66/cs_team_manager) ругается на GetEntPropVector
 
tonline_kms65 Дата: Суббота, 24.03.2018, 23:16:08 | Сообщение # 7
Сообщений: 215
Репутация: 3 [ +/- ]
Цитата Sallcom ()
У меня, конечно, есть функция, которая проверяет есть ли стена перед игроком(координата игрока) и конечной точкой.


А ну-ка, ну-ка. Какой принцип работы кода, если не секрет. Я недавно занимался этой проблемой, пока оставил её, но вернуться к ней придется.
А, всё, я просмотрел. У тебя же определение для ENT(игрок). Тогда нет. Не то. Это просто.
Вот как определить наличие стены (браша) между игроком(не важно чем, ENT, точкой с координатами) и точкой(просто координатами).
Я пока другим занимаюсь, но обязательно вернусь к этому вопросу, просто придется вернуться.


Сообщение отредактировал tonline_kms65 - Суббота, 24.03.2018, 23:17:22
 
_wS_ Дата: Суббота, 24.03.2018, 23:35:38 | Сообщение # 8
Цитата tonline_kms65 ()
Вот как определить наличие стены (браша) между игроком(не важно чем, ENT, точкой с координатами) и точкой(просто координатами).

Я тебе уже несколько раз объяснял и готовый код давал, не понимаю тебя.
 
tonline_kms65 Дата: Понедельник, 26.03.2018, 12:07:55 | Сообщение # 9
Сообщений: 215
Репутация: 3 [ +/- ]
Цитата _wS_ ()
Я тебе уже несколько раз объяснял и готовый код давал, не понимаю тебя.


Не в обиду будет сказано, не работает твой код. Возможно он и рабочий, ты его работу понял, я пока понять не могу - поэтому и не работает.
Спасибо конечно.
Для того что бы код заработал так как надо, нужно, как минимум, понять принцип работы этого кода. А это мне пока не понятно.
Если, например, Дрон стреляет в меня(игрока ENT), здесь все просто, естественно все работает на отлично - спрятался за любое препятствие, и Дрон меня не видит. Но это в случае с ENT, в примере с точкой это не работает, как ни крути. Я не могу уловить саму суть.

Я пока сделал просто - каждому вейпоинту установил радиус его видимости, не совсем конечно удобно, но пока работает.
Я обязательно вернусь к проблеме обнаружения препятствия, в виде мира(браши разных видов), всё-равно придется вернуться.
Эту проблему я решу, не так так по другому. Вариантов решения у меня много.

Пока же, с Дроном, есть проблемы интереснее, и более сложные, я в них зарылся напрочь. Приходится модели перекомпилировать, менять кости, аттачи. Сейчас пока занят поворотом башни при стрельбе, в направлении вектора к игроку. Проблема в том что башня не является основной моделью, поэтому получить текущее положение её аттачей не получается, только абсолютные. А по абсолютным координатам не совсем удобно, вернее вообще не удобно. Я с этим столкнулся еще с Боевым Дроном(RCDroneHeli), при выстреле ракетой. Так что опыт для решения этой проблемы у меня есть. Ну и еще масса всяких проблем, не совсем для меня понятных.
Самые основные проблемы возникают из за использования углов модели для её ориентации в мире. Можно было бы что то типа кватернионов замутить, было бы конечно проще, и ошибок бы не было. Но, к сожалению, использование матриц поворота или кватернионов здесь я не представляю. Вот и приходится использовать углы для, например, поворота по вектору направления. За точку отсчета - центр карты.
Хотя всё это (матрицы)в движке конечно есть.

Ну и просто куча, кучище математики.
 
  • Страница 1 из 1
  • 1
Поиск: