Перейти к содержимому


Фотография

Скрипт: спавн, вайпоинты, удаление мертвого и еще кое что.


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 26

#1 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 08 June 2014 - 15:49

Примеры написаны исключительно для новичков типо меня)) Эта тема бесполезна для опытных людей в написании скриптов. 
 
Задача: 
1) Спавн бота.
2) Создать траекторию движения бота и его поведение.
3) В случае смерти бота, через определенный промежуток времени, 
убрать тело и спавнить нового бота с тем же маршрутом
 
Первый скрипт:
_hndl = "" execVM "spawn.sqf"; \\ Запуск скрипта другим скриптом, 
например: прописав в скрипте с названием init.sqf (который запускается при старте миссии)
запустит команду указанную в нем, в нашем случае запустит скрипт с именем spawn.sqf.
 
В моем прописано:
_hndl = "" execVM "nichka.sqf"; 
_hndl = "" execVM "spawn.sqf";
_hndl = "" execVM "retual.sqf";
Т.е. запускает три скрипта.
 
Второй скрипт: У меня носит название spawn.sqf и запускается скриптом init.sqf как написано выше.
 
_group1 = createGroup west; \\ создается группа синих (West), может состоять и из одного юнита.
u1 = _group1 createUnit ["B_Soldier_F",getMarkerPos "Marker1",[],0,"FORM"]; \\ u1 - имя юнита, B_Soldier_F - ID юнита, Marker1 - имя маркера где появится юнит.
_wp = _group1 addWaypoint [getMarkerPos "wp1",0]; \\ wp1 - маркер куда будет поставлен вайпоинт данной командой.
_wp setWaypointType "MOVE"; \\ MOVE - в редакторе как "перемещение", т.е. даст ему эту команду. 
_wp setWaypointSpeed "LIMITED"; \\ LIMITED - ограничит скорость.
_wp setWaypointBehaviour "SAFE"; \\ SAFE - поведение "Безопасно". 
_wp1 = _group1 addWaypoint [getMarkerPos "wp2",0]; \\  wp2 - маркер следующего вайпоинта, не нужно опять задавать параметры скорости и т.д., он будет их соблюдать пока не зададите новые.
_wp1 setWaypointType "MOVE";  
_wp2 = _group1 addWaypoint [getMarkerPos "wp3",0];
_wp2 setWaypointType "MOVE";
_wp3 = _group1 addWaypoint [getMarkerPos "wp4",0];  
_wp3 setWaypointType "CYCLE"; \\ CYCLE - зациклит предидущие вайпоинты. Бот будет ходить по заданной траектории
 
Третий скрипт: У меня назван retual.sqf
u1 addEventHandler["Killed",{_handle = _this execVM "pohoroni.sqf"}]; \\ Краток, но полезен. Если юнит убит, запускает скрипт в нашем случае pohoroni.sqf
 
Четвертый скрипт: чтобы была понятна цепочка действий скриптов у меня он носит название pohoroni.sqf
sleep 10; \\ пауза 10 секунд
deleteVehicle u1; \\ удаление юнита u1 (я использую в случае смерти юнита)
sleep 10; \\ пауза 10 сек.
_hndl = "" execVM "spawn.sqf"; \\ Запуск скрипта spawn.sqf
sleep 2; \\ Пауза 2 сек.
_hndl = "" execVM "retual.sqf"; \\ Запуск скрипта retual.sqf
 
Паузы нужны для того, что иногда юнит не успел заспавнится и 
не выполняются следующие скрипты, по этому желательно делать паузу.
 
 
Еще пара простых скриптов:
_house = "O_MBT_02_cannon_F" createVehicle (getMarkerPos "Marker2"); \\ Заспавнит технику, здание и т.д.
 O_MBT_02_cannon_F - ID того, что нужно заспавнить. В данном случае Т-100. Marker2 - имя маркера.
 
 
 Этот был нужен когда не было возможности спавнить оружие, боеприпасы на земле, столе и т.д.
 Может пригодится еще кому. 
 
_position = getMarkerPos "mark"; \\ mark - имя маркера 
_holder = "WeaponHolderSimulated" createVehicle _position; \\ Данная функция заставит появиться и висеть на заданной высоте GroundWeaponHolder  а эта WeaponHolderSimulated позволит упасть с заданной высоты на поверхность
_holder addWeaponCargo ["srifle_EBR_DMS_pointer_snds_F",1]; \\ srifle_EBR_DMS_pointer_snds_F - ID оружия и ,1 - его количество.
_holder addMagazineCargo ["Titan_AP",5]; \\ Titan_AP - ID боеприпасов и ,5 - их количество.
_position set [2,0]; \\ 0 - высота
_holder setPosATL _position; \\ ХЗ что, но нужно)))
 
Надеюсь данные примеры как то помогут новичкам. Большинство изложенного выше было создано с помощью  hipp0catAvi и других участников данного форума, за что я им очень благодарен.

Сообщение отредактировал Djon: 09 June 2014 - 11:10

  • 3

#2 OFFLINE   SteelRat

SteelRat

    Полковник

  • Пользователи
  • 3241 сообщений
  • Откуда:РФ

Отправлено 09 June 2014 - 00:15

 

 

_holder = "WeaponHolderSimulated" createVehicle _position; \\ Данная функция заставит появиться и висеть на заданной высоте WeaponHolderSimulated  а эта GroundWeaponHolder позволит упасть с заданной высоты на поверхность

 

WeaponHolderSimulated, не может висеть в воздухе, потому что он Simulated, он должен упасть на твёрдую поверхность, так сказать.

Или что то изменилось, и я что то пропустил?


  • 0

#3 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 09 June 2014 - 11:11

 

 

 

_holder = "WeaponHolderSimulated" createVehicle _position; \\ Данная функция заставит появиться и висеть на заданной высоте WeaponHolderSimulated  а эта GroundWeaponHolder позволит упасть с заданной высоты на поверхность

 

WeaponHolderSimulated, не может висеть в воздухе, потому что он Simulated, он должен упасть на твёрдую поверхность, так сказать.

Или что то изменилось, и я что то пропустил?

 

Извиняюсь, исправил.


  • 0

#4 OFFLINE   Артём

Артём

    Рядовой

  • Пользователи
  • 26 сообщений
  • Откуда:Курск

Отправлено 15 June 2014 - 15:36

 

u1 = _group1 createUnit ["B_Soldier_F",getMarkerPos "Marker1",[],0,"FORM"]; \\ как вызвать sqf скрипт в ините созданного юнита?

 


  • 0

#5 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 15 June 2014 - 17:26

 

 

u1 = _group1 createUnit ["B_Soldier_F",getMarkerPos "Marker1",[],0,"FORM"]; \\ как вызвать sqf скрипт в ините созданного юнита?

 

 

Вы как хотите его запустить? Его можно запустить при старте миссии, триггером, по убийству бота. Что вам конкретно нужно? В каком моменте он должен запуститься?


  • 0

#6 OFFLINE   Артём

Артём

    Рядовой

  • Пользователи
  • 26 сообщений
  • Откуда:Курск

Отправлено 15 June 2014 - 17:29

 

 

 

u1 = _group1 createUnit ["B_Soldier_F",getMarkerPos "Marker1",[],0,"FORM"]; \\ как вызвать sqf скрипт в ините созданного юнита?

 

 

Вы как хотите его запустить? Его можно запустить при старте миссии, триггером, по убийству бота. Что вам конкретно нужно? В каком моменте он должен запуститься?

допустим есть sqf на перевооружение как мне его запустить в ините созданного бота 


  • 0

#7 OFFLINE   Артём

Артём

    Рядовой

  • Пользователи
  • 26 сообщений
  • Откуда:Курск

Отправлено 15 June 2014 - 17:39

Есть sqf скрипт который вызывает определённый юнит типа null=[this] execVM "AK_pak.sqf" как мне правильно его прописать в ините созданного бота что бы он запустился?


  • 0

#8 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 15 June 2014 - 17:45

Если память не изменяет то как то так:

removeAllWeapons this; removeUniform this; removeHeadgear this; removeBackpack this; removeVest this; removeAllAssignedItems this; removeGoggles this; this addUniform "U_OrestesBody"; this addHeadgear "H_Bandanna_camo"; this addBackpack "B_TacticalPack_Base"; this addVest "V_PlateCarrierIAGL_dgtl"; {this addMagazine "6Rnd_45ACP_Cylinder"} forEach [1,2]; this addWeapon "hgun_Pistol_heavy_02_F";

Теперь перечисляю по русски каждое действие(оно заканчивается ";") и так:

забирает оружие; забирает униформу; забирает головной убор; забирает рюкзак; забирает разгрузку; забирает карту, компас, рацию и т.д.; забирает очки, пнв; дает униформу, дает головной убор, дает рюкзак, дает разгрузку, {дает магазин} указывает количество штук; дает оружие; 

 

Магазин писать нужно раньше чем оружие для того чтоб оружие сразу было заряжено


  • 0

#9 OFFLINE   Артём

Артём

    Рядовой

  • Пользователи
  • 26 сообщений
  • Откуда:Курск

Отправлено 15 June 2014 - 17:49

не так меня поняли)))

 

Если память не изменяет то как то так:

removeAllWeapons this; removeUniform this; removeHeadgear this; removeBackpack this; removeVest this; removeAllAssignedItems this; removeGoggles this; this addUniform "U_OrestesBody"; this addHeadgear "H_Bandanna_camo"; this addBackpack "B_TacticalPack_Base"; this addVest "V_PlateCarrierIAGL_dgtl"; {this addMagazine "6Rnd_45ACP_Cylinder"} forEach [1,2]; this addWeapon "hgun_Pistol_heavy_02_F";

Теперь перечисляю по русски каждое действие(оно заканчивается ";") и так:

забирает оружие; забирает униформу; забирает головной убор; забирает рюкзак; забирает разгрузку; забирает карту, компас, рацию и т.д.; забирает очки, пнв; дает униформу, дает головной убор, дает рюкзак, дает разгрузку, {дает магазин} указывает количество штук; дает оружие; 

 

Магазин писать нужно раньше чем оружие для того чтоб оружие сразу было заряжено

не так меня поняли)


  • 0

#10 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 15 June 2014 - 17:51

Есть sqf скрипт который вызывает определённый юнит типа null=[this] execVM "AK_pak.sqf" как мне правильно его прописать в ините созданного бота что бы он запустился?

Ты хочешь чтобы именно из инита бота запускался скрипт?


  • 0

#11 OFFLINE   Артём

Артём

    Рядовой

  • Пользователи
  • 26 сообщений
  • Откуда:Курск

Отправлено 15 June 2014 - 17:58

bot1 = _group createUnit ["I_Soldier_LAT_F",getMarkerPos "spawn",[],0,"NONE"]; \\ этой командой создается бот.

sniper.sqf \\это мой sqf скрипт.

Я хочу что бы созданный бот через свой инит запускал мой скрипт. Как то так)


  • 0

#12 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 15 June 2014 - 17:59

type createUnit [ position, group, init, skill, rank] вместо init пишешь тоже самое, что хотел бы в инициализации юнита, да способ создания юнита другой, но пока не нашел с тем, что ты хочешь


Сообщение отредактировал vlad333000: 15 June 2014 - 18:03

  • 0

#13 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 15 June 2014 - 18:02

Если скрипт уже есть, то просто это в ините бота пишешь: 

_hndl = "" execVM "sniper.sqf";

Когда бот появляется сразу запускает скрипт


Сообщение отредактировал Djon: 15 June 2014 - 18:04

  • 0

#14 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 15 June 2014 - 18:03

_hndl = "" execVM "sniper.sqf";

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


  • 0

#15 OFFLINE   Артём

Артём

    Рядовой

  • Пользователи
  • 26 сообщений
  • Откуда:Курск

Отправлено 15 June 2014 - 18:04

пробовал

bot1 = _group createUnit ["I_Soldier_LAT_F",getMarkerPos "spawn",[_hndl = "" execVM "sniper.sqf"],0,"NONE"] бот просто не создается


  • 0

#16 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 15 June 2014 - 18:06

пробовал

bot1 = _group createUnit ["I_Soldier_LAT_F",getMarkerPos "spawn",[_hndl = "" execVM "sniper.sqf"],0,"NONE"] бот просто не создается

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


Сообщение отредактировал vlad333000: 15 June 2014 - 18:07

  • 0

#17 OFFLINE   Артём

Артём

    Рядовой

  • Пользователи
  • 26 сообщений
  • Откуда:Курск

Отправлено 15 June 2014 - 18:11

и ещё: 

u1 addEventHandler["Killed",{_handle = _this execVM "pohoroni.sqf"}] как я понял эта полезная команда проверяет только одного юнита я хотель так что бы команда проверяла наличие всей группы и у меня получилось так:

 

_group = createGroup civilian;
bot1 = _group createUnit ["I_Soldier_LAT_F",getMarkerPos "spawn",[],0,"NONE"];
bot2 = _group createUnit ["I_Soldier_LAT_F",getMarkerPos "spawn",[],0,"NONE"];
waitUntil {count units _group < 1};
_hndl = "" execVM "bot_killed.sqf"; просто я в этом не особо силен, мне интересно addEventHandler может работать на группу юнитов?

 

пробовал

bot1 = _group createUnit ["I_Soldier_LAT_F",getMarkerPos "spawn",[_hndl = "" execVM "sniper.sqf"],0,"NONE"] бот просто не создается

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

 

спасибо попробую)


  • 0

#18 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 15 June 2014 - 18:12

хз незнаю получится ли:

Спавн:

u1 = _group1 createUnit ["B_Soldier_F",getMarkerPos "Marker1",[],0,"FORM"];
null = [u1] execVM "script.sqf";

Скрипт:

_unit = _this select 0;

Сообщение отредактировал vlad333000: 15 June 2014 - 18:14

  • 0

#19 OFFLINE   Артём

Артём

    Рядовой

  • Пользователи
  • 26 сообщений
  • Откуда:Курск

Отправлено 15 June 2014 - 18:19

 

хз незнаю получится ли:

Спавн:

u1 = _group1 createUnit ["B_Soldier_F",getMarkerPos "Marker1",[],0,"FORM"];
null = [u1] execVM "script.sqf";

Скрипт:

_unit = _this select 0;

а если ботов несколько то: 

u1 = _group1 createUnit ["B_Soldier_F",getMarkerPos "Marker1",[],0,"FORM"];

u2 = _group1 createUnit ["B_Soldier_F",getMarkerPos "Marker1",[],0,"FORM"];

null = [u1, u2] execVM "script.sqf";

это мне кажется мутурно так как в самом скрипте тоже нужно будет задавать несколько массивов

_unit = _this select 0;

_unit1 = _this select 1;


  • 0

#20 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 15 June 2014 - 18:20

 

 

хз незнаю получится ли:

Спавн:

u1 = _group1 createUnit ["B_Soldier_F",getMarkerPos "Marker1",[],0,"FORM"];
null = [u1] execVM "script.sqf";

Скрипт:

_unit = _this select 0;

а если ботов несколько то: 

u1 = _group1 createUnit ["B_Soldier_F",getMarkerPos "Marker1",[],0,"FORM"];

u2 = _group1 createUnit ["B_Soldier_F",getMarkerPos "Marker1",[],0,"FORM"];

null = [u1, u2] execVM "script.sqf";

это мне кажется мутурно так как в самом скрипте тоже нужно будет задавать несколько массивов

_unit = _this select 0;

_unit1 = _this select 1;

 

да или 

null = [u1] execVM "script.sqf";
null = [u2] execVM "script.sqf";
null = [u3] execVM "script.sqf";

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

_unit = _this select 0;

Сообщение отредактировал vlad333000: 15 June 2014 - 18:22

  • 0




Яндекс.Метрика