Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • 0
Sign in to follow this  
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]???

Share this post


Link to post
Share on other sites

Recommended Posts

  • 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;
    };

Share this post


Link to post
Share on other sites



  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

Массив - нет.

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

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

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

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

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

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

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

 

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

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

Share this post


Link to post
Share on other sites
  • 0

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

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

 

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

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

 

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

Share this post


Link to post
Share on other sites
  • 0

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
  • 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.

Share this post


Link to post
Share on other sites
  • 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 цикл
 

Share this post


Link to post
Share on other sites
  • 0

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

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

вот массив:
 

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

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

Share this post


Link to post
Share on other sites
  • 0

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

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

Share this post


Link to post
Share on other sites
  • 0

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

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

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

 

 

 

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites
  • 0

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site, you automaticly agree to our Guidelines and Privacy Policy.
We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.