Прошу помощи профессионалов, помогите доработать скрипт до желаемого. Вот так он выглядит сейчас:
Сообщение отредактировал Djon: 20 November 2013 - 00:27
Лучший Ответ hipp0cat , 20 November 2013 - 11:53
Что-то я не понял, имеется в виду просто спавн или именно респавн? В таком виде боты появятся один раз просто. Или триггер многократно активируешь? Да и как то странно ты createUnit записал, "1" - это что за аргумент такой? Используй вот этот вариант createUnit как описано тут: http://community.bis...reateUnit_array
Далее, sqs - устаревшая штука из Армы 1, надо использовать sqf и писать _handle = [] execVM "script.sqf";
Чтобы поменять ботам снаряжение, можно использовать команды вроде addWeapon, addMagazine, addBackpack, addUniform, addVest и их варианты с remove (т.е. removeWeapon и т.д.). То есть, в твой скрипт можно будет дописать:
removeAllWeapons unit1;unit1 addMagazines ["100Rnd_65x39_caseless_mag",3];unit1 addWeapon "arifle_MX_SW_F";
В таком случае у первого бота отберется все оружие и появится пулемет. Имена классов оружия и магазинов можно посмотреть прямо из редактора из конфиг вьювера (кнопка с шестеренкой такой) в CfgWeapons.
Маршрутные точки создаются при помощи команды addWaypoint и затем настраиваются при помощи setWaypoint... http://community.bis...roup:_Waypoints например
_wp = _group1 addWaypoint [getMarkerPos "wp1",0];_wp setWaypointType "MOVE";
Для зацикливания нужен тип "CYCLE", создаешь этот вейпоинт последним.
Для удаления трупа, можно написать следующее при создании ботов:
unit1 addEventHandler["Killed",{deleteVehicle (_this select 0)}];
(http://community.bis...Handlers#Killed)
Тогда труп будет немедленно удаляться после смерти бота. Если нужна задержка, вызывай из ивент хендлера скрипт, в котором будет использоваться команда sleep (в коде самого ивента ее использовать нельзя).
Писал это все не проверяя параллельно в самой Арме, так что может где-то накосячил.
Перейти к сообщениюОтправлено 20 November 2013 - 00:20
Прошу помощи профессионалов, помогите доработать скрипт до желаемого. Вот так он выглядит сейчас:
Сообщение отредактировал Djon: 20 November 2013 - 00:27
Отправлено 20 November 2013 - 11:53 Лучший Ответ
Что-то я не понял, имеется в виду просто спавн или именно респавн? В таком виде боты появятся один раз просто. Или триггер многократно активируешь? Да и как то странно ты createUnit записал, "1" - это что за аргумент такой? Используй вот этот вариант createUnit как описано тут:
Далее, sqs - устаревшая штука из Армы 1, надо использовать sqf и писать _handle = [] execVM "script.sqf";
Чтобы поменять ботам снаряжение, можно использовать команды вроде addWeapon, addMagazine, addBackpack, addUniform, addVest и их варианты с remove (т.е. removeWeapon и т.д.). То есть, в твой скрипт можно будет дописать:
removeAllWeapons unit1;unit1 addMagazines ["100Rnd_65x39_caseless_mag",3];unit1 addWeapon "arifle_MX_SW_F";
В таком случае у первого бота отберется все оружие и появится пулемет. Имена классов оружия и магазинов можно посмотреть прямо из редактора из конфиг вьювера (кнопка с шестеренкой такой) в CfgWeapons.
Маршрутные точки создаются при помощи команды addWaypoint и затем настраиваются при помощи setWaypoint...
например_wp = _group1 addWaypoint [getMarkerPos "wp1",0];_wp setWaypointType "MOVE";
Для зацикливания нужен тип "CYCLE", создаешь этот вейпоинт последним.
Для удаления трупа, можно написать следующее при создании ботов:
unit1 addEventHandler["Killed",{deleteVehicle (_this select 0)}];
(
)Тогда труп будет немедленно удаляться после смерти бота. Если нужна задержка, вызывай из ивент хендлера скрипт, в котором будет использоваться команда sleep (в коде самого ивента ее использовать нельзя).
Писал это все не проверяя параллельно в самой Арме, так что может где-то накосячил.
Сообщение отредактировал hipp0cat: 20 November 2013 - 12:04
Отправлено 20 November 2013 - 12:29
Что-то я не понял, имеется в виду просто спавн или именно респавн? В таком виде боты появятся один раз просто. Или триггер многократно активируешь? Да и как то странно ты createUnit записал, "1" - это что за аргумент такой? Используй вот этот вариант createUnit как описано тут:
Далее, sqs - устаревшая штука из Армы 1, надо использовать sqf и писать _handle = [] execVM "script.sqf";
Чтобы поменять ботам снаряжение, можно использовать команды вроде addWeapon, addMagazine, addBackpack, addUniform, addVest и их варианты с remove (т.е. removeWeapon и т.д.). То есть, в твой скрипт можно будет дописать:
removeAllWeapons unit1;unit1 addMagazines ["100Rnd_65x39_caseless_mag",3];unit1 addWeapon "arifle_MX_SW_F";В таком случае у первого бота отберется все оружие и появится пулемет. Имена классов оружия и магазинов можно посмотреть прямо из редактора из конфиг вьювера (кнопка с шестеренкой такой) в CfgWeapons.
Маршрутные точки создаются при помощи команды addWaypoint и затем настраиваются при помощи setWaypoint...
например_wp = _group1 addWaypoint [getMarkerPos "wp1",0];_wp setWaypointType "MOVE";Для зацикливания нужен тип "CYCLE", создаешь этот вейпоинт последним.
Для удаления трупа, можно написать следующее при создании ботов:
unit1 addEventHandler["Killed",{deleteVehicle (_this select 0)}];
(
)Тогда труп будет немедленно удаляться после смерти бота. Если нужна задержка, вызывай из ивент хендлера скрипт, в котором будет использоваться команда sleep (в коде самого ивента ее использовать нельзя).
Писал это все не проверяя параллельно в самой Арме, так что может где-то накосячил.
В любом случае огромное спасибо, информация очень полезна для меня. Сегодня постараюсь все опробовать и обязательно отпишусь по решению этого вопроса. Со скриптами только пытаюсь подружиться, пока что по прежнему с ними на "ВЫ". Судя по примерам в sqf используется тот же самый синтаксис и все правила написания скрипта в целом что и sqs? И кстати та циферка "1" вроде как означает уровень бота, хотя я могу ошибаться, так как данный скрипт собирал по частям из готовых скриптов.
На счет респавна ты прав с помощью повторяющегося триггера
Отправлено 20 November 2013 - 12:37
Судя по примерам в sqf используется тот же самый синтаксис и все правила написания скрипта в целом что и sqs?
Нет. Они похожи, но нет. Советую ознакомиться с матераилами, представленными вот здесь:
http://arma3.ru/foru...kriptopisaniiu/
Если же вы умеете в английский, то не лишним будет пройтись по первоисточникам,- они содержат ссылки на похожий и относящийся к теме материал. Правда, в БИСовской документации неприлично много ошибок, и зачастую, если просто взять их пример, то работать не будет.
P.S. А для тех, кто только-только начинает нырять в скрипты, скоро выйдет самоучитель, от нуля до готового скрипта с объяснениями.
Сообщение отредактировал Avi: 20 November 2013 - 12:37
Отправлено 20 November 2013 - 14:33
P.S. А для тех, кто только-только начинает нырять в скрипты, скоро выйдет самоучитель, от нуля до готового скрипта с объяснениями.
Это бы было отлично, я надеюсь он будет тут выложен?
Отправлено 20 November 2013 - 15:32
Это бы было отлично, я надеюсь он будет тут выложен?
Да, разумеется. Он в трёх частях, и первую часть я намерен выложить уже в эти выходные.
Отправлено 21 November 2013 - 11:20
Да, разумеется. Он в трёх частях, и первую часть я намерен выложить уже в эти выходные.
Надеюсь у меня хватит ума, чтобы понять все что там будет изложено и наконец то начать воплощать свои задумки в жизнь)
Кстати по поводу второй моей темы не подскажешь ни чего? по поводу спавна оружия на земле?
Используй вот этот вариант createUnit как описано тут:
Подскажи что не так делаю? По указанной ссылке скопировал пример и теперь пытаюсь его подогнать под нужный мне эффект:
Странно но вот так
А вот сочетание этой команды и
[color=#ff0000;]_wp = _group1 addWaypoint [getMarkerPos "wp1",0];[/color]
работает привосходно
Отправлено 21 November 2013 - 12:04
unit1 = "B_G_soldier_SL_F"[color=rgb(255,0,0);],[/color] createUnit [getMarkerPos "Spawn",_group1];
Запятую нужно удалить обязательно, иначе ошибка.
Djon, я бы добавил команду sleep чтобы дать время, а то возможно идет пропуск команд, когда юнит еще в процессе создания. Другого объяснения пока не приходит в голову.
_group1 = createGroup west;unit1 = "B_G_soldier_SL_F" createUnit [getMarkerPos "Spawn",_group1];sleep 1;removeAllWeapons unit1;unit1 addMagazines ["100Rnd_65x39_caseless_mag",3];unit1 addWeapon "arifle_MX_SW_F";
Отправлено 21 November 2013 - 13:15
Обычный createUnit вроде как не возвращает значения, поэтому unit1 не определен и соответственно манипуляции с инвентарем не проходят. Нужно использовать createUnit array вот таким образом:
unit1 = _group1 createUnit ["B_G_Soldier_SL_F",getMarkerPos "Spawn",[],0,"FORM"];
ты же написал position getMarkerPos, что никакого смысла не имеет. Запускай Арму с параметром -showscripterrors, тогда будут выводиться сообщения об ошибках в скриптах.
Сообщение отредактировал hipp0cat: 21 November 2013 - 14:54
Отправлено 21 November 2013 - 14:57
unit1 = createUnit ["",getMarkerPos "Spawn",[],0,"FORM"];
Выдает ошибку именно вы этой строке. Что-то нужно еще вписывать кроме как ID солдата где ты пустые скобки оставил? Я вставил команду буквально так как ты ее написал и вставил солдата в кавычки и все. Просто для меня не понятно [color=#ff0000;][],0."FORM"];[/color] эта часть. Возможно [координаты], 0 - расстояние до маркера или высота, а вот "FORM" за пределами моей фантазии)))
_group1 = createGroup west;unit1 = "B_G_soldier_SL_F" createUnit [getMarkerPos "Spawn",_group1];sleep 1;removeAllWeapons unit1;unit1 addMagazines ["100Rnd_65x39_caseless_mag",3];unit1 addWeapon "arifle_MX_SW_F";
Это увы не помогает(
А присваивается ли убитым ботам какое то общее имя или значение к которому можно обратиться? к примеру возможно ли сделать глобальную команду на удаление трупов? с командой задержки Sleep попробую разобраться сам, а то у вас и так времени отнял много)
Отправлено 21 November 2013 - 15:11
Да, извини, из универа пишу, поэтому поторопился и не дописал команду правильно. Отредактировал пост.
По поводу аргументов createUnitArray:
юнит = группа createUnit ["тип_юнита",координаты,[массив маркеров],радиус,"special"];
Юнит появится на точке с указанными координатами. Если массив маркеров не пустой, то юнит появится случайным образом на одном из маркеров. Если указан радиус больше нуля, то юнит появится случайным образом в круге указанного радиуса, с центром в выбранной точке.
"special" - может быть "NONE" или "FORM". Если стоит "NONE", то юнит появится на выбранном месте. Если стоит "FORM", юнит появится в формации, при этом его перенесет к его тим лидеру (если юнит сам им не является) независимо от места спавна юнита (насчет этого не уверен, но полагаю, что в скриптах это работает так же, как и в редакторе).
Сообщение отредактировал hipp0cat: 21 November 2013 - 15:11
Отправлено 21 November 2013 - 16:58
Да, извини, из универа пишу, поэтому поторопился и не дописал команду правильно. Отредактировал пост.
Да все ОК) Без тебя вообще бы ни чего не получилось у меня) Если не чем заняться будет подскажешь на счет задержки исчезновения ботов, пытаюсь сам сейчас разобраться но чувствую не получится(( Я так понял в скрипте мы присвоили имя боту "Unit1" и это имя можно использовать в дальнейшем? То есть если я сделаю скрипт в котором буду ссылаться на это имя он будет работать? Ну или триггер допустим с [color=#ff0000;]not alive unit1[/color]? Я так понял ты написал что если нужна задержка то после смерти бота нужно вызвать отдельный скрипт в котором будет сначала [color=#ff0000;]sleep[/color] а потом [color=#ff0000;]unit1 [/color]addEventHandler["Killed",{deleteVehicle (_this select 0)}];
но увы не работает, хотя триггер видит имя unit1.
Наверно это слишком просто?))
Косяк уже понял, но исправить как, пока не знаю. в скрипте не должно в этом случае быть условий о смерти бота а только удаление трупа.
Исправил) триггер с инитом not alive unit1 и активацией скрипта, в скрипте
Сообщение отредактировал Djon: 21 November 2013 - 16:10
Отправлено 21 November 2013 - 18:11
Не нужно делать триггером, делай ивент хэндлером. Ивент хэндлеры (обработчики событий) выполняют код при каких то событиях, например, упомянутый ранее "Killed" выполняется при смерти юнита, и не нужно ставить триггер, который каждую секунду выполянет проверку на состояние здоровья бота.
Каждому боту назначаешь ивент хендлер, как я написал выше: unit1 addEventHandler["Killed",{deleteVehicle (_this select 0)}];
В данном случае, при смерти бота unit1 выполняется код {deleteVehicle (_this select 0)}. Но тебе ничто не мешает выполнять что то другое, например, запустить какой нибудь скрипт: unit1 addEventHandler["Killed",{_handle = _this execVM "bot_killed.sqf"}]; Если напишешь так, при смерти бота будет вызываться скрипт bot_killed, а в качестве аргумента ему будет передаваться массив [убитый_бот, убийца_бота]. Дальше в скрипте bot_killed ты можешь совершать какие угодно действия, добавить ту же задержку, например. Если захочешь, можешь там же создавать новых ботов, которые появлялись бы сразу после смерти старых.
Ну то есть, ты можешь своим ботам задавать при создании ивент хендлер
unit1 addEventHandler["Killed",{_handle = _this execVM "bot_killed.sqf"}];
А потом при помощи блокнота создать файл bot_killed.sqf, закинуть его в папку с твоей миссией (миссии лежат в "Моих документах" в папке Армы), и написать там следующее:
sleep 5;deleteVehicle (_this select 0);
Также в этот скрипт можешь добавить еще что угодно, например сообщение при смерти бота: hint "Bot Killed!";
В общем, посмотри пример,прикрепил к посту.
Отправлено 21 November 2013 - 18:37
[color=rgb(34,34,34);font-family:'Helvetica Neue', Arial, Verdana, sans-serif;font-size:14px;background-color:rgb(255,255,255);]Теперь все просто предельно ясно))) Спасибо в очередной раз))) Больше ни каких триггеров)[/color]