Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
  • Нужна помощь?

    Создайте тему в соответствующем разделе
    Не нужно писать всё в чат!
  • Загляните на торговую площадку

    Там вы можете купить
    всё что касается игровых серверов
  • Не хотите бан?

    Пожалуйста, ознакомьтесь с нашими правилами
    Не нарушайте порядок!
  • Продаёте или покупаете?

    Пользуйтесь услугами гаранта
    Мы сделаем вашу сделку безопасной
  • 0
ka3ant1p

исключения для BIS_fnc_findSafePos

могу ли я как то задать исключения при использовании функции BIS_fnc_findSafePos???
к примеру я спавню миссию _position = [getMarkerPos "center",0,5500,10,0,2000,0] call BIS_fnc_findSafePos;
как внести исключения по координатам и радиусе где ее не должно спавнить даже при том что оно соответствует параметрам [getMarkerPos "center",0,5500,10,0,2000,0]???

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 0

ммм...
Думаю как то так -
 

 

private ["_falsePos","_distance","_falsePoints","_mindistance"];

//Минимальное расстояние от запрещенной(ых) точки, до выбранной позиции
_mindistance    =    50;
//Массив точек, рядом с которыми запрещено выбирать координату
_falsePoints    =    [
                            [0,0,0],
                            [100,100,100]
                        ];
_falsePos = true;
while {_falsePos} do
    {
        //Получаем позицию
        _position = [getMarkerPos "center",0,5500,10,0,2000,0] call BIS_fnc_findSafePos;
        //Если не найдем запрещенных позиций - выйдем из скрипта, нарушив условие while.
        _falsePos    =    false;
        //Проверка по списку запрещенных координат
        {
            //Узнаем расстояние от запрещенной координаты, до выбранной точки
            _distance = _x distance _position;
            //Если расстояние меньше минимального, выход из цикла проверки(дальше смысла нет проверять), и ставим обратно в true цикл while
            if (_distance < _mindistance) exitWith
                {_falsePos = true;};
        } forEach _falsePoints;
    };

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах





  • 0

а при таком скрипте продолжит ли он искать другую точку в случае попадения в радиус от массива координат?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Ну так написано же)

Пока не найдет)))))

Циклы смотри... и условия.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

недавно проснулся, проглядел =)
Спасибо попробую =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

вот вспомнил, в BIS_fnc_findSafePos есть еще 8 и 9 параметр.
8 - это параметр с координатами который делает квадрат в котором не будет искаться позиция, а можно как то сделать не квадрат а круг - то есть координату с радиусом а так же возможно ли там вписывать массив позиций?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Массив - нет.

Разницы - квадрат\круг особой не вижу...

Юзай скрипт выше для получения позиций с множественными исключениями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

что то не захотело с ним работать, с ним спавнит как то кучками, и не работает деактивация точнее деспаун при выходе из триггера

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Ты про зомби чтоль?)))))))

Так...эт как его))

1 они будут исчезать, если рядом нет никого. Срабатывает скрипт очистки.

2 Ты где спавнишь то - с клиента или сервера?

3 Я тебе в соседнюю ветку ответил, посмотри самый низ - примеры)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

я с этими триггерами уже запутался.
Скрипты работают на стороне клиента.
Я проверяю сейчас все через редактор, вот получается есть тригер при вхождении в который он у меня по всему триггеру спавнит зомбаков, при выходе из него происходит деспаун.
Дляпроверки твоего скрипта увеличил триггер в размерах и задал 2 точки с радиусом 50 где им не спаунится. Итог захожу в триггер начинают спавнится в одной небольшой куче, выхожу - деспаун не работает, захожу снова спавнятся в другой куче.
Вернул исходное -все работает как надо.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

На стороне клиента, если будешь спавнить, то каждый триггер будет делать это для своего клиента.

Или придется слать на сервер переменную, что триггер активен.

 

Делай на сервере. Там 1 условие и все.

И что значит деспаун? Зачем он тебе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

На стороне клиента, если будешь спавнить, то каждый триггер будет делать это для своего клиента.

Или придется слать на сервер переменную, что триггер активен.

 

Делай на сервере. Там 1 условие и все.

И что значит деспаун? Зачем он тебе?

 

я просто не использую zombie_agent.fsm я им сам поведение прописал из которого убрал деспаун

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

А смысл? Какой смысл держать зомби на сервере, если рядом с ним никого нет?

Сервер умрет минут через 10-30 работы.

Да и реально, смысл то какой? Типа они ходят там, бродят, только этого никто не видит?)))

Порождают зм то клиенты...

Ну тогда и клиентов реж - пусть онли сервер делает зм.

Сделал и следи за ним.

Хотя опять не важно -

по твоему вопросу - делай на сервере скрипт, который создает зм, он то гарантированно будет работать и создавать объект(ы). Для него все клиенты как одно целое, и массивы в распоряжении. - Есть игроки в области - создал. Нету - удалил(или что там у тебя). Остальное сам решишь, раз ты удаляешь что то)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

ну так оно так и есть, у меня зеды спавнятся на стороне сервера =)
пытаюсь сделать взаимодействие АИ и добится реалистичности, то есть вот как задумывалось изначально:
при старте миссии спавнится нное кол-во зедов которые есть все время, зед(ы) нашел цель поломился за ней, цель потеряна будет ломится в ту сторону где потерял цель пока не обнаружит другую цель.
Триггеры нужны для того что бы делать места которые кишат зедами и деспаун только там что бы не перегружать сервер и привязать зедов к этому месту, магазин там какой или еще что.
Это все еще в разработке, но вот поясню еще для чего.
Вот появилась миссия, что бы не нагружать сервер, он активируется при приблежинии персонажа, там заспавнятся зомби, но нужны месте где зомби точно не заспавнятся, по этому нужно исключения делать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

фигня какая то)))))

Хочешь места которые кишат зм -

Берешь малюсенкий домик(который нигде больше юзать на карте не будешь). Тыкаеш его на карту в редакторе, в те места где нужны зм и мноооого. Затем с небольшим разбросом ставишь координаты - штук 300 к этому дому(относительные) в конфигах buildings_loot.

И ставишь в конфиге, мин зм - 200, макс зм - 300.

Вуаля. - тело приходит в данную локу,(где есть такой домик) и там кишмя зм.

Зачем какой то геморой?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

фигня какая то)))))

Хочешь места которые кишат зм -

Берешь малюсенкий домик(который нигде больше юзать на карте не будешь). Тыкаеш его на карту в редакторе, в те места где нужны зм и мноооого. Затем с небольшим разбросом ставишь координаты - штук 300 к этому дому(относительные) в конфигах buildings_loot.

И ставишь в конфиге, мин зм - 200, макс зм - 300.

Вуаля. - тело приходит в данную локу,(где есть такой домик) и там кишмя зм.

Зачем какой то геморой?)

 

Потому что я отключил спаун зомби с завязкой на объекты =) Это еще больше будет гемороя, а так завязка на триггер и все.

Да и вообще для миссий некоторых мне тоже нужно что бы можно было создавать точки где не будут спаунится зомби.

Потому как все еще в стадии тестирования, и возможно если большая просадка фпс будет, уйду от постоянных зомби полностю к триггерам. Только тригер будет вешатся на всю локу, так реалистичней.

То есть вешается триггер на локацию, активируется когда игрок приближается на расстояние 200м к локации, пока добежит \ доедет они как раз по всей локе проспавнятся.

А то как то бредово, зашел в локацию тут заспавнилось 2-3 зомби, потом там 2-3.... а так зашел в локу а там уже 100 зомби по всей локации....

Только при этом нужны места где они спавнится не бдут. Можно было бы конечно повесить на те места скрипт на удаления зомби, но тогда будет кол-во меньше чем заспавнено.

 

Я вот думаю может в цикле (for "_i" from 1 to _qty) перед строкой create agent сделать что то вроде проверки, если _position в радиусе массива координат тогда выход с _qty = __qty + 1 если нет тога create agent

Тогда должно получится так, спавнятся зомби в цикле скажем от 1 до 100, из них 5 попали в радиус запрещенных координат - тогда они не спавнятся, а добавляется 5 лишних циклов. То есть  получится от 1 до 105.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

что вот как то не могу сообразить....
вот скажем делаю такую глобальную переменную:

safePositions = [
[[x,y,z], 50],
[[x,y,z], 20],
[[x,y,z], 10]
];

 

и потом проверка в другом скрипте, но надо либо ее на что то заменять, так как кроме как nearEntities ничего в голову не приходит

 

_safe = _posit nearEntities [_x select 0, _x select 1];
        {    
            _safePos = true;
        } forEach safePositions;

но на сколько я знаю там где у меня _x select 0 там может быть только класс, а мне нужно чтобы проверка была так:
если мой сгенерированый для спауна _posit в радиус _x select 1 для каждой из позиций в массиве safePositions, тогда _safePos получит = тру
и потом проверка если не _safePos тогда все гуд спавним в позиции _posit зеда, если все же _safePos тогда прибавляем + 1 цикл
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

о вроде придумал, на основе твоего скрипта:
 

{_distance = (_x select 0) distance _posit;
            if (_distance < (_x select 1)) exitWith {_Safepos = true;};
        } forEach safePositions;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

что то не работает оно совсем =( Добавляю этот кусок кода триггер перестает работать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

А логи?

И массив safeposition ты не менял?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

вот массив:
 

safePositions = [
[[4880.2402, 9699.0859, 0], 50],
[[4714.9839, 9957.9658, 0], 50]
];

Я через редактор смотрел, но у меня стоит проверка скриптов и ошибок никаких не выдавало

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Выдавало, потому что написание верно, а передаваемый массив нет.

Нафига ты 4 переменную присабачил да еще двумерный массив кидаешь, когда там должен идти одномерный с 3 переменными XYZ

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Выдавало, потому что написание верно, а передаваемый массив нет.

Нафига ты 4 переменную присабачил да еще двумерный массив кидаешь, когда там должен идти одномерный с 3 переменными XYZ

ну так там же в коде идет _x select 0 и _x select 1, получается по _x select 0 должен выбираться массив с координатами XYZ, а по _x select 1 - радиус

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

попробовал сделать как ты говоришь - тоже самое
доходит до проверки if (_safePos) и все

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Логи смотри.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

ну это надо через сервер протестить, иначе как я посмотрю логи? в редакторе не пишет логи

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×
×
  • Создать...

Важная информация

Используя этот сайт, вы автоматически обязуетесь соблюдать наши Правила и Политика конфиденциальности.
Чтобы сделать этот веб-сайт лучше, мы разместили cookies на вашем устройстве. Вы можете изменить свои настройки cookies, в противном случае мы будем считать, что вы согласны с этим.