Проверка координаты
| |
BarD
|
Дата: Суббота, 01.11.2014, 13:37:03 | Сообщение # 1 |
|
Сообщений: 943
Репутация: 137 [ +/- ]
|
|
Допустим, у нас есть какая-то координата. Как проверить, является ли эта координата поверхностью какого-либо предмета или стены? Т.е. не является ли эта координата воздухом. Если возможно это сделать, подскажите, пожалуйста! Буду благодарен!
|
|
| |
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), при выстреле ракетой. Так что опыт для решения этой проблемы у меня есть. Ну и еще масса всяких проблем, не совсем для меня понятных. Самые основные проблемы возникают из за использования углов модели для её ориентации в мире. Можно было бы что то типа кватернионов замутить, было бы конечно проще, и ошибок бы не было. Но, к сожалению, использование матриц поворота или кватернионов здесь я не представляю. Вот и приходится использовать углы для, например, поворота по вектору направления. За точку отсчета - центр карты. Хотя всё это (матрицы)в движке конечно есть.
Ну и просто куча, кучище математики.
|
|
| |
|