|
|
Модератор форума: Slon |
Форум РЕДАКТОР - ArmA 2 Скрипты Статус заданий в мультиплеере. (Как задать статус конкретному юниту?) |
Статус заданий в мультиплеере. |
› Среда
› 07.11.2012
› 16:28
› Сообщение #
Как задать статус конкретному юниту?
Надеюсь, кто-то уже поиграл в мою кооперативную миссию "Конвой. Рандеву в Черногорске." Так вот, начал я ее делать пару-тройку недель назад, когда совсем не имел опыта в написании миссий для Армы. И система заданий выглядитит примерно так: Code task0_pl_1 = pl_1 createSimpleTask ["Уничтожить конвой"]; task0_pl_1 setSimpleTaskDescription ["Необходимо уничтожить офицеров и отряд 'Лезвие' желательно ликвидировать технику и солдат", "Уничтожить конвой", "Заминировать!"]; task0_pl_1 setSimpleTaskDestination markerpos "mark_5"; task0_pl_2 = pl_2 createSimpleTask ["Уничтожить конвой"]; task0_pl_2 setSimpleTaskDescription ["Необходимо уничтожить офицеров и отряд 'Лезвие' желательно ликвидировать технику и солдат", "Уничтожить конвой", "Заминировать!"]; task0_pl_2 setSimpleTaskDestination markerpos "mark_5"; task0_pl_3 = pl_3 createSimpleTask ["Уничтожить конвой"]; task0_pl_3 setSimpleTaskDescription ["Необходимо уничтожить офицеров и отряд 'Лезвие' желательно ликвидировать технику и солдат", "Уничтожить конвой", "Заминировать!"]; task0_pl_3 setSimpleTaskDestination markerpos "mark_5"; p = [objNull, ObjNull, task0_pl_1, "CREATED"] execVM "CA\Modules\MP\data\scriptCommands\taskHint.sqf"; Хотелось бы исправить этот говнокод, поэтому решил модернизировать, и сделал так: Code { task0 = _x createSimpleTask ["Уничтожить конвой"]; task0 setSimpleTaskDescription ["Необходимо уничтожить офицеров и отряд 'Лезвие' желательно ликвидировать технику и солдат", "Уничтожить конвой", "Заминировать!"]; task0 setSimpleTaskDestination markerpos "mark_5"; _x setCurrentTask task0; } foreach [pl_1,pl_2,pl_3]; p = [objNull, ObjNull, task0, "CREATED"] execVM "CA\Modules\MP\data\scriptCommands\taskHint.sqf"; Всё прекрасно, всё работает, легко добавлять слоты игроков и т.п. Можно контролировать задания для каждого конкретного игрока. А вот при выполнении заданий, показалась задница. При первой, избыточной и говнокодной реализации, всё работало, т.к. статус всем заданиям приходилось давать отдельно: Code task0_pl_1 settaskstate 'Succeeded'; task0_pl_2 settaskstate 'Succeeded'; task0_pl_3 settaskstate 'Succeeded'; p=[objNull, ObjNull, task0_pl_1, 'SUCCEEDED'] execVM 'CA\Modules\MP\data\scriptCommands\taskHint.sqf'; - тут всё ок, и нареканий нет, всё отлично работает, а вот для усовершенствованной версии, начались грабли: Code task0 setTaskState "SUCCEEDED"; p=[objNull, ObjNull, task0, 'SUCCEEDED'] execVM 'CA\Modules\MP\data\scriptCommands\taskHint.sqf'; Нихрена не работат(т.е. работает только табличка о выполнении задания из последней строки) Вопрос: как передать статус задания конкретным юнитам? А-ля: Code { task0 setTaskState "SUCCEEDED"; } foreach [pl_1,pl_2,pl_3]; Только вот нет параметра, кому именно это задание засчитывать... (соответственно, эффект как в предыдущем варианте) Вот такая вот проблема! Заранее спасибо за любые разъяснения! =) Добавлено (07.11.2012, 14:44) --------------------------------------------- Обнаружил, что статус задания таки обновляется(меняется на выполненный), но только у последнего(в данном случае - pl_3) юнита в списке. Добавлено (07.11.2012, 15:06) --------------------------------------------- Все-таки, рискнул сделать так: Code task0 = player createSimpleTask ["Уничтожить конвой"]; Тогда даже не придется заморачиваться со слотами(можно сделать кучу), но опасаюсь - как это будет вести себя в мультиплеере... Так что, сейчас, с другом, потестим - и, может быть, выложу новую версию, с увеличенным количеством игроков, отрядами, возможностью безболезненного отключения ботов и улучшенной JIP-синхронизацией ;-) Добавлено (07.11.2012, 16:28) Сообщение отредактировал DEMENTOR - Среда, 07.11.2012, 15:39
|
| |||
| |||
Чат сайта |