Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Скрипт для заселения ботами зданий в радиусе #411

Closed
tym32167 opened this issue Jan 5, 2016 · 11 comments

Comments

Projects
None yet
5 participants
@tym32167
Copy link
Contributor

commented Jan 5, 2016

Необъодим скрипт, который администратор в режиме ЗЕВСА может запустить и заселить определенный радиус зданий ботами для создания миссии от ЗЕВСА.

@tym32167 tym32167 added the Фич label Jan 5, 2016

@tym32167 tym32167 added this to the v3.5 milestone Jan 5, 2016

@malashin

This comment has been minimized.

Copy link
Contributor

commented Jan 6, 2016

Так у нас мод Ares разрешен. В нём это уже есть. Прото Зевсу нужно поставить мод и зайти на сервер.

https://github.com/astruyk/Ares/releases

@tym32167

This comment has been minimized.

Copy link
Contributor Author

commented Jan 6, 2016

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

@ToxaBes

This comment has been minimized.

Copy link
Contributor

commented Jan 7, 2016

Вот скрипт:

_radius = 100;
_bots = 20;
_side = EAST;
_startPos = getPos player;
_units = ["O_Soldier_F","O_Soldier_GL_F","O_Soldier_AR_F","O_Soldier_SL_F","O_Soldier_TL_F","O_soldier_M_F","O_Soldier_LAT_F","O_medic_F","O_soldier_repair_F","O_soldier_exp_F","O_Soldier_AT_F","O_Soldier_AA_F","O_engineer_F","O_soldier_PG_F","O_recon_F","O_recon_M_F","O_recon_LAT_F","O_recon_medic_F","O_recon_TL_F","O_Soldier_AAT_F","O_soldierU_M_F","O_SoldierU_GL_F"];
if (!isServer) exitWith {};
_grp = createGroup _side;
_goodPos = [];
TB_fnc_relativePos = {
    private [_p1, _dir, _dst, _r,_alt];
    _p1 = _this select 0;
    _dir = _this select 1;
    _dst = _this select 2;
    _alt = 0;
    if (count _this  == 3) then {
        _alt = _this select 3;
    };
    _r = [(_p1 select 0) + sin _dir * _dst, (_p1 select 1) + cos _dir * _dst, _alt];
    _r
};
_houseList = nearestObjects [_startPos, ["building"], _radius];
{
    _c = 0;
    while { format ["%1", _x buildingPos _c] != "[0,0,0]" } do { 
        _goodPos set [(count _goodPos), [_x, _x buildingPos _c]];
        _c = _c + 1;
    };
} forEach _houseList;
_goodPos = _goodPos call BIS_fnc_arrayShuffle;
if ((count _goodPos) < _bots) then {
    _bots = count _goodPos;
};
for "_i" from 1 to _bots do {
    _point = (_goodPos select (_i - 1));
    _house = _point select 0;
    _pos = _point select 1;
    _unit = _grp createUnit [(_units call BIS_fnc_selectRandom), [0,0,0], [], 0, "CAN_COLLIDE"];
    _unit setPosATL _pos;
    _watchDir = (([_unit, _house] call BIS_fnc_dirTo) + 180);
    _unit setDir _watchDir;
    _unit setUnitPos (["UP", "MIDDLE"] call BIS_fnc_selectRandom) ;
    doStop _unit;
    _watchPos = [getPos _unit, _watchDir, ((round (random 30) + 30)), 1] call TB_fnc_relativePos;
    _unit doWatch _watchPos;
};
{
    _x addCuratorEditableObjects [(units _grp), true];
} forEach allCurators;

Скрипт спавнит 20 ботов в зданиях в радиусе 100м от позиции игрока.
_radius - радиус зоны в метрах
_bots - количество ботов
_side - сторона ботов
_startPos - центр зоны, можно указать координаты [x,y,z]
_units - список типов ботов

@tym32167

This comment has been minimized.

Copy link
Contributor Author

commented Jan 7, 2016

Алгоритм установки отряда.

  • Открываем карту
  • Наводим курсор чуть выше и правее целевого перекрестия на карте, видим на мышке координаты
    image
  • На рисунке координаты отмеченной точки - 035, 131
  • В коде эти координаты превратятся в [3500,13100,0]
  • Открываем скрипт. заполняем поля
_radius = 100;
_bots = 30;
_side = EAST;
_startPos = [3500,13100,0];
  • В итоге получаем
_radius = 100;
_bots = 30;
_side = EAST;
_startPos = [3500,13100,0];
_units = ["O_Soldier_F","O_Soldier_GL_F","O_Soldier_AR_F","O_Soldier_SL_F","O_Soldier_TL_F","O_soldier_M_F","O_Soldier_LAT_F","O_medic_F","O_soldier_repair_F","O_soldier_exp_F","O_Soldier_AT_F","O_Soldier_AA_F","O_engineer_F","O_soldier_PG_F","O_recon_F","O_recon_M_F","O_recon_LAT_F","O_recon_medic_F","O_recon_TL_F","O_Soldier_AAT_F","O_soldierU_M_F","O_SoldierU_GL_F"];
if (!isServer) exitWith {};
_grp = createGroup _side;
_goodPos = [];
TB_fnc_relativePos = {
    private [_p1, _dir, _dst, _r,_alt];
    _p1 = _this select 0;
    _dir = _this select 1;
    _dst = _this select 2;
    _alt = 0;
    if (count _this  == 3) then {
        _alt = _this select 3;
    };
    _r = [(_p1 select 0) + sin _dir * _dst, (_p1 select 1) + cos _dir * _dst, _alt];
    _r
};
_houseList = nearestObjects [_startPos, ["building"], _radius];
{
    _c = 0;
    while { format ["%1", _x buildingPos _c] != "[0,0,0]" } do { 
        _goodPos set [(count _goodPos), [_x, _x buildingPos _c]];
        _c = _c + 1;
    };
} forEach _houseList;
_goodPos = _goodPos call BIS_fnc_arrayShuffle;
if ((count _goodPos) < _bots) then {
    _bots = count _goodPos;
};
for "_i" from 1 to _bots do {
    _point = (_goodPos select (_i - 1));
    _house = _point select 0;
    _pos = _point select 1;
    _unit = _grp createUnit [(_units call BIS_fnc_selectRandom), [0, 0, 0], [], 0, "CAN_COLLIDE"];
    _unit setPosATL _pos;
    _watchDir = (([_unit, _house] call BIS_fnc_dirTo) + 180);
    _unit setDir _watchDir;
    _unit setUnitPos (["UP", "MIDDLE"] call BIS_fnc_selectRandom) ;
    doStop _unit;
    _watchPos = [getPos _unit, _watchDir, ((round (random 30) + 30)), 1] call TB_fnc_relativePos;
    _unit doWatch _watchPos;
};
{
    _x addCuratorEditableObjects [(units _grp), true];
} forEach allCurators;
  • Запускаем скрипт НА СЕРВЕРЕ
  • Профит.

Если нужно прямо точно знать координаты.

  • Ставим своего персонажа в целевую точку
  • Запускам ЛОКАЛЬНО
 _pos = getPos player;
copyToClipboard format ["%1", getPos player];
player sideChat format ["%1", _pos];
  • Видим координаты персонажа в нижнем левом углу
    image
  • Записываем их
@tym32167

This comment has been minimized.

Copy link
Contributor Author

commented Jan 8, 2016

@Noart537 @vosur делал вчера допку с этим скриптом, вполне годный для быстрого заселения ботами построек

@Noart537

This comment has been minimized.

Copy link
Contributor

commented Jan 14, 2016

Не, не я делал). Скопирую в скрипты на форум, а тут закрою.

@Noart537

This comment has been minimized.

Copy link
Contributor

commented Jan 14, 2016

@Noart537 Noart537 closed this Jan 14, 2016

@AlexVDem

This comment has been minimized.

Copy link

commented Jan 10, 2018

Тоха, а как этому скрипту добавить уровень AI? Меткость и умение? А то я что-то бился с параметрами, да не выходит.
Да, и еще, все боты вутри помещений без окон стоят лицом в стену, как наказанные. Можно их как то повернуть? Тут моих знаний вообще не хватает.

@tym32167

This comment has been minimized.

Copy link
Contributor Author

commented Jan 10, 2018

@AlexVDem Когда обращаешься к кому то, то указывай его ник. @ToxaBes тут тебя вызывают :)

@ToxaBes

This comment has been minimized.

Copy link
Contributor

commented Jan 10, 2018

Привет, я в отпуске (в горах, без ноута). До ~ 17-20 января ничем помочь не могу. Напомни мне об этом после 17го.

@ToxaBes

This comment has been minimized.

Copy link
Contributor

commented Jan 20, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.