Расстояние от точки до зоны

Черная вдова

Участник
Сообщения
2,795
Реакции
670
C-подобный:
decl Float:Minimum[3], Float:Maximum[3], Float:close[3], Float:pointpos[3];

GetClientAbsOrigin(client, pointpos);

new index = FindEntityByClassname(index,"func_buyzone")

GetEntPropVector(index, Prop_Send, "m_vecMins", Minimum);
GetEntPropVector(index, Prop_Send, "m_vecMaxs", Maximum);
       
for (new i = 0; i <= 2; i++)
{
    close[i] = pointpos[i];
    if(pointpos[i] < Minimum[i]) close[i] = Minimum[i];
    else if(pointpos[i] > Maximum[i]) close[i] = Maximum[i];
}
           
new Float:itog = GetVectorDistance(pointpos, close);
 
Последнее редактирование:

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
C-подобный:
decl Float:Minimum[3], Float:Maximum[3], Float:close[3], Float:pointpos[3];

GetClientAbsOrigin(client, pointpos);

new index = FindEntityByClassname(index,"func_buyzone")

GetEntPropVector(index, Prop_Send, "m_vecMins", Minimum);
GetEntPropVector(index, Prop_Send, "m_vecMaxs", Maximum);
       
for (new i = 0; i <= 2; i++)
{
    close[i] = pointpos[i];
    if(pointpos[i] < Minimum[i]) close[i] = Minimum[i];
    else if(pointpos[i] > Maximum[i]) close[i] = Maximum[i];
}
           
decl Float:itog = GetVectorDistance(pointpos, close);

Переменные об'явил правильно?
Циклом по чему смотришь?
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
Переменные об'явил правильно?
Циклом по чему смотришь?
Прости, я не хочу с тобой говорить, честно говоря почитав многие твои посты, у меня такое чувство что у тебя какое то психологическое заболевание, типо шизофрении, ты постоянно несешь какую то чушь
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
#define POINTS 100
float pointpos[POINTS][3];

Вот если бы так об'явил переменную, я бы тебя понял. А так как сейчас, может быть я что-то не так понимаю.
Возможно и шизофрения у меня, шизофрения в том плане что нравится мне программирование, а вот у тебя такое чувство, код спер где-то, а как он работает ты не знаешь.
Начинаешь психовать, потому что не можешь объяснить как этот код работает. Я то любой свой кусок кода запросто объясню, как и что работает.
Вот сейчас у меня возникли сомнения, в правильной работоспособности твоего кода, я тебя и спрашиваю а ты истерики женские начинаешь закатывать.
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
#define POINTS 100
float pointpos[POINTS][3];

Вот если бы так об'явил переменную, я бы тебя понял. А так как сейчас, может быть я что-то не так понимаю.
Возможно и шизофрения у меня, шизофрения в том плане что нравится мне программирование, а вот у тебя такое чувство, код спер где-то, а как он работает ты не знаешь.
Начинаешь психовать, потому что не можешь объяснить как этот код работает. Я то любой свой кусок кода запросто объясню, как и что работает.
Вот сейчас у меня возникли сомнения, в правильной работоспособности твоего кода, я тебя и спрашиваю а ты истерики женские начинаешь закатывать.
кода настолько мало что тут нечего объяснять, пожалуйста не пиши
 

Exle

Участник
Сообщения
190
Реакции
216
C-подобный:
decl Float:Minimum[3], Float:Maximum[3], Float:close[3], Float:pointpos[3];

GetClientAbsOrigin(client, pointpos);

new index = FindEntityByClassname(index,"func_buyzone")

GetEntPropVector(index, Prop_Send, "m_vecMins", Minimum);
GetEntPropVector(index, Prop_Send, "m_vecMaxs", Maximum);
      
for (new i = 0; i <= 2; i++)
{
    close[i] = pointpos[i];
    if(pointpos[i] < Minimum[i]) close[i] = Minimum[i];
    else if(pointpos[i] > Maximum[i]) close[i] = Maximum[i];
}
          
decl Float:itog = GetVectorDistance(pointpos, close);
Это не расстояние от точки до зоны.

m_vecMins и m_vecMaxs - направление от центра энтити до точки, не являются точками, и никак не относятся к точке клиента.

грубо говоря:
m_vecMins - разница от центра энтити до минимальной точки
m_vecMaxs - тоже самое, только до макс.
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
Это не расстояние от точки до зоны.

m_vecMins и m_vecMaxs - направление от центра энтити до точки, не являются точками, и никак не относятся к точке клиента.

грубо говоря:
m_vecMins - разница от центра энтити до минимальной точки
m_vecMaxs - тоже самое, только до макс.
Держи в курсе
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
@Черная вдова, всё равно криво получаешь расстояние до границ зоны
Вот так несколько лучше:
PHP:
{
    decl Float:min[3], Float:max[3], Float:close[3], Float:pos[3];
    new ent = FindEntityByClassname(-1,"func_buyzone");
    if(ent == -1) return;    // если энтити не найдена, то нам нечего больше делать

    GetEntPropVector(ent, Prop_Send, "m_vecOrigin", pos);    // координаты энтити относительно мира
    GetEntPropVector(ent, Prop_Send, "m_vecMins", close);    // смещение минимума границ относительно центра энтити
    AddVectors(pos, close, min);                            // координаты минимума
    GetEntPropVector(ent, Prop_Send, "m_vecMaxs", close);    // смещение максимума границ относительно центра энтити
    AddVectors(pos, close, max);                            // координаты максимума

    GetClientAbsOrigin(client, pos);                        // получаем координаты игрока относительно мира
    for(new i; i < 3; i++)
    {
        if(pos[i] < min[i]) close[i] = min[i];
        else if(pos[i] > max[i]) close[i] = max[i];
    }

    new Float:itog = GetVectorDistance(pos, close);
}
 
Последнее редактирование:

Черная вдова

Участник
Сообщения
2,795
Реакции
670
@Черная вдова, всё равно криво получаешь расстояние до границ зоны
Вот так несколько лучше:
PHP:
{
    decl Float:min[3], Float:max[3], Float:close[3], Float:pos[3];
    new ent = FindEntityByClassname(-1,"func_buyzone");
    if(ent == -1) return;    // если энтити не найдена, то нам нечего больше делать

    GetEntPropVector(ent, Prop_Send, "m_vecOrigin", pos);    // координаты энтити относительно мира
    GetEntPropVector(ent, Prop_Send, "m_vecMins", close);    // смещение минимума границ относительно центра энтити
    AddVectors(pos, close, min);                            // координаты минимума
    GetEntPropVector(ent, Prop_Send, "m_vecMaxs", close);    // смещение максимума границ относительно центра энтити
    AddVectors(pos, close, max);                            // координаты максимума

    GetClientAbsOrigin(client, pos);                        // получаем координаты игрока относительно мира
    for(new i; i < 3; i++)
    {
        if(pos[i] < min[i]) close[i] = min[i];
        else if(pos[i] > max[i]) close[i] = max[i];
    }

    new Float:itog = GetVectorDistance(pos, close);
}
Мб ты имеешь ввиду что можно сделать лучше расстояние от ИГРОКА до зоны а не точки?
В заголовке написано от точки до зоны, координаты игрока просто для примера взял
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
@Черная вдова, я уже сделал, тащемта
А у тебя в коде вообще вычисляется погода на Марсе, вместо расстояние от игрока до зоны.

И да, ещё в коде не учитывается, что у каждой из команд имеется своя зона покупки (в случае, если это указано в параметре m_iTeamNum, можно сделать зону доступной для любой команды через AcceptEntityInput(ent, "SetTeam_AllTeams") в КСГО, в КСС через AcceptEntityInput(ent, "TeamNum") с указанием команды, насколько я понимаю).
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
@Черная вдова, я уже сделал, тащемта
А у тебя в коде вообще вычисляется погода на Марсе, вместо расстояние от игрока до зоны.

И да, ещё в коде не учитывается, что у каждой из команд имеется своя зона покупки (в случае, если это указано в параметре m_iTeamNum, можно сделать зону доступной для любой команды через AcceptEntityInput(ent, "SetTeam_AllTeams") в КСГО, в КСС через AcceptEntityInput(ent, "TeamNum") с указанием команды, насколько я понимаю).
Вы че издеваетесь? Вы все сговорились или как, что ты несешь ?
МОЙ КОД ЭТО ПРИМЕР КАК НАДО УЗНАВАТЬ РАССТОЯНИЕ ОТ ТОЧКИ ДО ЗОНЫ
при чем здесь именно байзона? это бл* просто пример
И мой код делает именно то что написано в заголовке темы
Почему вдруг вам стало нужно так писать всякую чушь
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
МОЙ КОД ЭТО ПРИМЕР КАК НАДО УЗНАВАТЬ РАССТОЯНИЕ ОТ ТОЧКИ ДО ЗОНЫ
Твой код - это пример как узнать погоду на Марсе.

Он расстояние не считает, потому что ты получаешь только одну точку: расположение игрока. И на этом всё.
Ты нигде не получаешь положение зоны и поэтому расстояние высчитать никак не сможешь.
--- Добавлено позже ---
получаемые тобой m_vecMins и m_vecMaxs - это смещения относительно центра энтити.
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
Твой код - это пример как узнать погоду на Марсе.

Он расстояние не считает, потому что ты получаешь только одну точку: расположение игрока. И на этом всё.
Ты нигде не получаешь положение зоны и поэтому расстояние высчитать никак не сможешь.
--- Добавлено позже ---
получаемые тобой m_vecMins и m_vecMaxs - это смещения относительно центра энтити.
Тебе придется это доказать
Допускаю что в какой то игре vecMins может иметь относительные значения, но не в csgo
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
ТС глуп и его "код" ничего не имеет общего с формулой расстояния от точки до зоны
 

tonline_kms65_1

Участник
Сообщения
565
Реакции
225
@Черная вдова,
Не истери. Я проверил твой код, он работает. Я не проверял правильность и точность дистанции, просто проверил на работоспособность.
Честно сказать, я не пойму принцип работы, в частности сам цикл. Вот это меня заинтересовало. Если так, как здесь то хоть что-то понятно:
for(new i; i < 3; i++)
{
if(
pos[i] < min[i]) close[i] = min[i];
else if(
pos[i] > max[i]) close[i] = max[i];
}


Все-таки я не все понял о работе Павна. Нужно будет с этим по-эксперементировать. Интересно. Чего только не узнаешь.

Хотя нет,
HTML:
for(new i; i < 3; i++)
это то-же самое что
HTML:
for(new i; i =< 2; i++)
Потом создам отдельный вопрос в вопросах по Павну.
--- Добавлено позже ---
HTML:
FindEntityByClassname(index,"func_buyzone")
[/quote]
Эта функция находит по имени класса ближайшие ENT к точке отсчета, или ищет вообще все с таким именем?
Если все, то как в цикле(в функции вдовы) определяется дистанция именно для этого, ближайшего, бомбплейса? Получается, нужно делать цикл в цикле, в одном поиск по мах. бомбплейсов, а уже во втором поиск дистанции. Мне кажется как то так.

P.S.​
Насчет дистанции, я бы делал так:
1. трассировка до центральной точки ближайшего бомбплейса(или просто длинна вектора)
2. получаю размеры мах. мин.(не совсем понимаю, как выглядят эти значения)
3. длинна расстояния до точки бомбплейса - мах./2
так упрощенно.
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,521
Реакции
4,982
трассировка до центральной точки ближайшего бомбплейса(или просто длина вектора)
Трассировка нужна только если требуется учитывать препятствия. Проще уж посчитать расстояние с помощью GetVectorDistance()
получаю размеры мах. мин.(не совсем понимаю, как выглядят эти значения)
Вот так:
PHP:
    GetEntPropVector(ent, Prop_Send, "m_vecMins", close);    // смещение минимума границ относительно центра энтити
    GetEntPropVector(ent, Prop_Send, "m_vecMaxs", close);    // смещение максимума границ относительно центра энтити
длина расстояния до точки бомбплейса - мах./2
Часто бывает, что длина вектора m_vecMins не равна длине вектора m_vecMaxs (т.е. если эти векторы сложить, то в результате может быть не нулевой вектор), поэтому более правильно сделать как у меня получилось (я просто вычел векторы смещения из позиции энтити на карте)
Вот например как тут: Steam Community :: Screenshot,
Steam Community :: Screenshot :: Осталось прикрутить какую-то индикацию того, что проп может быть скопирован.
и Steam Community :: Screenshot
 
Последнее редактирование:
  • Мне нравится
Реакции: R1KO

Черная вдова

Участник
Сообщения
2,795
Реакции
670
Твой код - это пример как узнать погоду на Марсе.

Он расстояние не считает, потому что ты получаешь только одну точку: расположение игрока. И на этом всё.
Ты нигде не получаешь положение зоны и поэтому расстояние высчитать никак не сможешь.
--- Добавлено позже ---
получаемые тобой m_vecMins и m_vecMaxs - это смещения относительно центра энтити.
Протестируй в своей игре, где ты утверждаешь что я неправ
MEGA
 

Вложения

  • dokazatelstvo.sp
    2.7 КБ · Просмотры: 8
Сверху Снизу