Arma 3 функции

Обновлено: 06.07.2024

Моя волшебная комбинация – переход через препятствие – W+X. Как и предыдущая комбинация, эта умная связка поможет вам не
конфликтовать с другими значениями клавиш (для меня, кнопка X – задержать дыхание) и
займет у вас не больше секунды на выполнение.

Стандартное значение БРОСКА гранаты в Arma3 привязано к клавише ‘G’. Если вы пришли из предыдущей части франчайзы, то вы может
представлять некоторую опасность для других игроков… Я настоятельно рекомендую заменить стандартное значение броска на двойное нажатие клавиши ‘G’. Прошу обратить внимание, что для открытия инвентаря теперь используется
кнопка ‘I’ (английская буква ‘Ай’)

То, что следует убрать

Следует отметить, что некоторые вещи я советую убрать для того, чтобы вам было удобнее играть. Убедитесь, что кнопки Q,W и E не
имеют привязок к другим функциям в виде двойного нажатия (2xQ, 2xW, 2xE). По умолчанию, кнопки Q и E отвечают за уклонение и они будут иметь значение двойного нажатия в
опциях игры. Удалите двойные значения. Это обезопасит вас от случайных вставаний, уклонений и тд, когда вам того не требуется.
Клавиша W по умолчанию выставлена для спринта – как вы уже могли заметить, я порекомендовал вас заменить это значение на связку W+S – удалите. И вообще, любое
двойное нажатие может спровоцировать лаг в виде залипания (возможно отключить распознавание залипания в Windows). Просмотрите значения опций выхода из техники, переключения режима стрельбы,
смены стойки и др. и постарайтесь удалить те двойные значения, которые вам не требуются.

Перейдем к настройке вашей мышки. По умолчанию, использование ПКМ переводит вас в режим зума и прицеливания. Достаточно
проблематично – ведь при включении режима увеличения, после нажатия ПКМ проходит около
половины секунды до перехода в сам режим. Не знаю как вы, но меня это удручает. Я повесил данную функцию на дополнительные клавиши своей мышки. Я использую этот метод еще с Arma2. Попробуйте сами. Если не понравится, вернетесь к обычному значению.

Используем колесико мышки Существует еще 2 привязки, которые я повесил на свою мышку. Вам было бы тоже неплохо о них задуматься. У
меня Logitech G9x, поэтому у вас возможно нет такого же функционала – однако если у вас такая же мышка, то это самое лучшее решение. Если же нет, то я рекомендую вам приобрести
данный девайс. G9x имеет подвижное колесик. По умолчанию эти кнопки позволяют вам прокручивать страницы влево и вправо, однако вы можете модифицировать стандартные значения с помощью SetPoint (*я так понимаю, что там есть готовый профиль для Армы). В третьей части Arma присутствует множество оружия с увеличенным количеством примочек. На левый скроллинг своей мышки я поставил включение/отключение лазерного целеуказателя и фонарика. Сами подумайте, ведь они не всегда нужны вам включенными. Я могу
включить лазер, когда он мне нужен, а затем быстро его отключить. В настройках управления эта опция называется ‘Lights’ ( от англ. свет ).
Однако зачастую более важно успеть вовремя включить/выключить фонарик. Любой идиот сможет увидеть фонарь в темноте… Даже очки ночного видения не понадобятся. Если вам потребуется освещение, просто дерните колесико мышки влево, подсветите нужный объект и быстро отрубите ваш фонарь…. А дальше сваливайте. Этот способ поможет вам избежать смерти в реальном мире. Так что не стоит слишком удивляться, что в Арме такие же принципы выживания.

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

Arma 3's Functions Library is the way to declare mission, campaign or addon's Functions. The main difference from older Function Libraries is that it runs automatically and does not require a Functions module.

The advantages of using the Functions Library over e.g execVM an SQF file are as follow:

  1. Automatic compilation upon mission start into a global variable - no need to remember direct paths to files.
  2. Anti-hack protection using compileFinal (see Recompiling)
  3. Listing in the Functions Viewer
  4. Advanced debugging options
  5. Optional immediate execution upon mission start, without need for manual call
  6. Potential performance improvements
  • For Arma 2/Arma 2:OA, see Arma 2: Functions Library.
  • For Take On Helicopters, see Take On Helicopters: Functions Library.

Function Declaration

Functions are configured within the CfgFunctions class.

Mission and campaign specific functions can be configured in Description.ext/Campaign Description.ext, while addon functions are defined in Config.cpp. Configuration structure is the same in both cases.

  • if Description.ext, <ROOT> means the mission's root directory
  • if Campaign Description.ext, <ROOT> means the campaign's root directory
  • if in config, <ROOT> means the game's root directory. The addon path needs to be set manually.


See a basic example config:

  • The function's name will be TAG _fnc_ functionName
  • The function will be loaded:
    • from config: <ROOT>\ Category \fn_ functionName .sqf
    • from description.ext: <ROOT>\Functions\ Category \fn_ functionName .sqf
    config.cpp only: Anywhere outside of running mission, refer to the functions stored in uiNamespace. e.g: arguments call (uiNamespace getVariable " TAG _fnc_ functionName ");

    Config Levels

    A CfgFunctions config is made of three levels: Tag, Category, and Function.

    To prevent duplicates, every author must create a subclass with a unique tag and create functions under it. The tag name will be used when composing a function name (e.g BIS_fnc_spawnGroup).

    Attributes

    The tag attribute can override the config tag set differently.

    Category

    The category name changes the function's category in the Functions Viewer. It does not change the function's name, only the loading path.

    Attributes

    The file attribute can override the category's loading path segment.

    requiredAddons

    The category can skip loading if a required addon is missing by setting its dependency with the requiredAddons attribute.

    Function

    Attributes
    Attribute Description Available in
    Description.ext config.cpp
    file the file attribute can be used to manually set the file path.
    The file entry overrides Category's set path and ignores it entirely (they are not merged).
    • -1: No header - Adds nothing, literally adds a blank String to the beginning of functions. The functions will have no debug or Meta Variables assigned for it and the scope will not be named. Useful to reduce the performance overhead or if custom debug system is used.
    • 0: Default header - The default header changes based on the current Debug Mode
    • 1: System header - Incorporates the Meta Variables _fnc_scriptParent. Also names the current scope.

    See the following section for more information.

    • these attributes will make the function run on each, every and any mission start
    • Any scripting error will prevent the mission from being loaded correctly
    • Server admins might blacklist the whole addon if they find out the function is used for hacking

    Advanced Knowledge

    Meta Variables

    • _fnc_scriptName: String - Name of the script
    • _fnc_scriptNameParent: String - Name of the parent script
    • _fnc_scriptMap: Array - List of all parent scripts

    Debug Modes

    Developers can access several debug modes using BIS_fnc_functionsDebug function. For this to work function recompiling has to be allowed!

    Debug Mode 0

    default - incorporates the Meta Variables _fnc_scriptParent and _fnc_scriptName and names the current scope.

    Debug Mode 1

    As per Debug Mode 0 and also saves the current execution order in the Array _fnc_scriptMap.

    Debug Mode 2

    As per Debug Mode 1 and also outputs execution order using textLogFormat ( textLogFormat is not available in the retail version of Arma3 ) is it available in Diagnostics exe?

    Не знаю, правильно называю или нет. в общем есть вот эта функция:

    Её нужно запустить с сервера на клиенте.

    Если _unit это серверный игрок, то функция запускается нормально. Но если игрок это клиент, запуска нет.

    Для начала нужно передать эту функцию на клиент.

    И после этого уже можно вызывать на клиенте, еще можно только определенному клиенту её передать с помощью

    Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

    Добавил эту строчку, но ничего не поменялось.

    Или вызываться оно должно как-то по другому?

    0-0 , вопрос 1: файл со скриптом есть среди файлов клиента?
    вопрос 2: если нет, то какого х*я вы так сделали?

    0-0 сказал(а):
    Добавил эту строчку, но ничего не поменялось.

    Потому, что все сетевые функции в арме (Да и почти везде) не гарантируют порядок их выполнения, вы можете написать:
    Но есть большая вероятность того, что клиент увидит:
    У вас такая же ситуация, вы сначала передаете код функции, что:
    1. Много данных - много времени
    2. Не безопасно - в такие данные легко вставить "вредоносный" код
    И без каких-либо проверок сразу отправляете еще одну команду на вызов этого кода и т. к. код еще не передался - он не выполнился

    Файл со скриптом есть на клиенте.

    Порядок мне не важен. она там вообще никак не запускается))

    Вот всё полностью, а то может я как-то не так объясняю, я хз:

    Вот этот файл запускается при старте:

    Из него запускается файл PiRstart.sqf

    В котором добавляется отслеживание попадания в юнита.

    Из него уже запускается PiR0.sqf. В котором уже распределяются ранения для игрока на типы и запускается нужный эффект.

    И вот до этого момента всё работает. но из раздела, где у меня там подписано "Эффект крови", на клиенте должен запускаться EyeEffect0.sqf. И вот он, не запускается.

    Смотрите, publicVariable передает глобальную переменную всем клиентам, её нужно инициализировать при запуске сервера, далее на клиенте должны быть все функции которые используются в том коде, который вы передали.

    Исходя из этого когда, функции которые используются в той, которую вы передали, существуют только на сервере, это говорит нам то, что они в ифе isServer, поэтому оно не будет работать так как на клиенте этих функций нет. И вообще, немного непонятно, зачем вам с сервера передавать функции, "забивая канал", если они есть на клиенте, инициализируйте их на клиенте, и перестройте скрипты под них, было бы конечно легче если бы была еще информация что и от куда запускается, и что где находится.

    0-0 , вопрос 1: файл со скриптом есть среди файлов клиента?

    А зачем иметь файл со скриптом который уже скомпилирован в функцию, и нормально передается на клиент ?

    А зачем иметь файл со скриптом который уже скомпилирован в функцию, и нормально передается на клиент ?

    1. Много данных - много времени
    2. Не безопасно - в такие данные легко вставить "вредоносный" код

    Поясню:
    1. Много данных - кусок кода это не пара байт одним числом, а несколько сотен, если не тысяч и десятков тысяч байт. Все эти байты нужно передать, что требует времени и ширины канала передачи данных (Вы же не весь канал забьете вашим кодом, нужно еще другие игровые данные передавать). Конечно, можно сказать, что это нужно всего один раз, но зато какой один раз! Да еще помноженный на каждого нового клиента! Вот будет весело, когда во время игры подключится человек, и сервер начинает жрать канал для передачи ему всего этого кода, вместо передачи данных о других игроках и объектах - другие клиенты это точно оценят. А чем больше вы используете этот метод, тем больше вы начинаете передавать мусорный код, которому самое то быть в файлах на клиенте.
    А что будет если вы будете использовать скомпилированный на клиенте файл? А все просто - весь ваш удаленный вызов будет весить всего пару байт и это минимально скажется на сети.
    2. Не безопасно - вы хоть понимаете, что такое передача по сети исполняемого кода? Грубо говоря - это большая табличка "Хакни меня в каждый байт!". Тут нужно серьезно "маскировать" код, что ведет к дополнительной нагрузке на канал передачи.
    По этому поводу как то высказался один очень хороший и разбирающийся человек в Арма-сообществе Killzone Kid, который на пол ставки работал с БИСами:

    One thing you definitely don’t want is to allow passing of a code over network and then letting all client machines to execute this code. Mainly because this is an invitation to all sorts of hacks and exploits and also because transferring chunks of code over network is pretty bad for bandwidth.

    0-0 , вопрос 1: файл со скриптом есть среди файлов клиента?

    А зачем иметь файл со скриптом который уже скомпилирован в функцию, и нормально передается на клиент ?

    Это мод, который, соответственно, стоит у каждого игрока.

    Смотрите, publicVariable передает глобальную переменную всем клиентам, её нужно инициализировать при запуске сервера, далее на клиенте должны быть все функции которые используются в том коде, который вы передали.

    Я уже разобрался в чём был у меня затык) Оказывается функция запускалась) Но не передавалась переменная, которая в функции стояла на проверке) По этому и не было эффекта.

    А зачем иметь файл со скриптом который уже скомпилирован в функцию, и нормально передается на клиент ?

    1. Много данных - много времени
    2. Не безопасно - в такие данные легко вставить "вредоносный" код

    Поясню:
    1. Много данных - кусок кода это не пара байт одним числом, а несколько сотен, если не тысяч и десятков тысяч байт. Все эти байты нужно передать, что требует времени и ширины канала передачи данных (Вы же не весь канал забьете вашим кодом, нужно еще другие игровые данные передавать). Конечно, можно сказать, что это нужно всего один раз, но зато какой один раз! Да еще помноженный на каждого нового клиента! Вот будет весело, когда во время игры подключится человек, и сервер начинает жрать канал для передачи ему всего этого кода, вместо передачи данных о других игроках и объектах - другие клиенты это точно оценят. А чем больше вы используете этот метод, тем больше вы начинаете передавать мусорный код, которому самое то быть в файлах на клиенте.
    А что будет если вы будете использовать скомпилированный на клиенте файл? А все просто - весь ваш удаленный вызов будет весить всего пару байт и это минимально скажется на сети.
    2. Не безопасно - вы хоть понимаете, что такое передача по сети исполняемого кода? Грубо говоря - это большая табличка "Хакни меня в каждый байт!". Тут нужно серьезно "маскировать" код, что ведет к дополнительной нагрузке на канал передачи.

    У меня не стоит задачи бороться с хакерами)

    У меня не стоит задачи бороться с хакерами)

    У меня не стоит задачи бороться с хакерами)

    Мы играем своим очень небольшим коллективом) По этому нет смысла переживать об этом)

    А то что выложу мод в общий доступ, предупрежу, что бы использовали на свой страх и риск.

    Исходя из этого когда, функции которые используются в той, которую вы передали, существуют только на сервере, это говорит нам то, что они в ифе isServer, поэтому оно не будет работать так как на клиенте этих функций нет. И вообще, немного непонятно, зачем вам с сервера передавать функции, "забивая канал", если они есть на клиенте, инициализируйте их на клиенте, и перестройте скрипты под них, было бы конечно легче если бы была еще информация что и от куда запускается, и что где находится.

    Ну я уже с пониманием проблемы всё перестрою, а потом выложу сюда мод. Если не тяжело посмотрите, может подскажите как рационализировать.

    А зачем иметь файл со скриптом который уже скомпилирован в функцию, и нормально передается на клиент ?

    1. Много данных - много времени
    2. Не безопасно - в такие данные легко вставить "вредоносный" код

    Поясню:
    1. Много данных - кусок кода это не пара байт одним числом, а несколько сотен, если не тысяч и десятков тысяч байт. Все эти байты нужно передать, что требует времени и ширины канала передачи данных (Вы же не весь канал забьете вашим кодом, нужно еще другие игровые данные передавать). Конечно, можно сказать, что это нужно всего один раз, но зато какой один раз! Да еще помноженный на каждого нового клиента! Вот будет весело, когда во время игры подключится человек, и сервер начинает жрать канал для передачи ему всего этого кода, вместо передачи данных о других игроках и объектах - другие клиенты это точно оценят. А чем больше вы используете этот метод, тем больше вы начинаете передавать мусорный код, которому самое то быть в файлах на клиенте.
    А что будет если вы будете использовать скомпилированный на клиенте файл? А все просто - весь ваш удаленный вызов будет весить всего пару байт и это минимально скажется на сети.
    2. Не безопасно - вы хоть понимаете, что такое передача по сети исполняемого кода? Грубо говоря - это большая табличка "Хакни меня в каждый байт!". Тут нужно серьезно "маскировать" код, что ведет к дополнительной нагрузке на канал передачи.

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

    nIkRon , это само собой, но в данном случае ему приходится запускать exe на своей машине, на которой работает анти-чит и другие механизмы защиты игры. не факт что они сработают, но небольшой риск есть!
    А вот при передаче по сети исполняемого кода - почти не реально отследить то, что какой-то промежуточный узел подменил пакет, без сильных дополнительных затрат. а анти-чит до последнего будет думать, что все нормально.

    nIkRon , это само собой, но в данном случае ему приходится запускать exe на своей машине, на которой работает анти-чит и другие механизмы защиты игры. не факт что они сработают, но небольшой риск есть!
    А вот при передаче по сети исполняемого кода - почти не реально отследить то, что какой-то промежуточный узел подменил пакет, без сильных дополнительных затрат. а анти-чит до последнего будет думать, что все нормально.

    На сколько мне известно, процесс армы без допольнительных действий, не обнаружит, BE его скрывает, и если у человека есть способ его "расскрыть", то в таком случае он может уже делать что угодно, и передача данных по сети ему не сильно нужна.

    О чём был вообще то весь спор то).

    Есть отработанные временем методы реализации игрового процесса на арме.

    Функции, что нужно клиенту должно компилиться у клиента, что нужно серверу должно компилиться у сервера, что нужно и клиенту и серверу должно компилиться и там и там, и самый плодово-выгодный вариант вызова кода сервером на клиенте и наоборот, это вызов уже скомпилированной по месту функции с передачей требуемых параметров, дёшево и сердито. Так же это даёт возможность на той же стороне сервера, реализовать одну вызываемую функцию-интерфейс, которой отдать разрешение на запуск, и из этой функции интерфейса уже мониторить на валидность вызываемый клиентом код и сами параметры, что само по себе уже работает на стороне сервера как элемент защиты на предмет санкционированого доступа клиента к функционалу серверной стороны.


    Исходя из этого когда, функции которые используются в той, которую вы передали, существуют только на сервере, это говорит нам то, что они в ифе isServer, поэтому оно не будет работать так как на клиенте этих функций нет. И вообще, немного непонятно, зачем вам с сервера передавать функции, "забивая канал", если они есть на клиенте, инициализируйте их на клиенте, и перестройте скрипты под них, было бы конечно легче если бы была еще информация что и от куда запускается, и что где находится.

    В общем, я вроде бы доделал) Надо ещё конечно тестировать, но на первый взгляд всё работает) Как уж это реализовано технически.. я старался как мог, но наверное для вменяемого человека, это будет выглядеть ужасно)))))

    Сам мод про разные реакции на попадания. Вот один из примеров:

    А вот ссылка на тестовую версию мода:

    Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

    Там рядом с ПБОшкой разархивированная папка где можно посмотреть скрипты.

    ​Два этих файлы должны быть созданы в миссии обязательно!

    По дефолту открывать "меню групп" буква - Г (U)

    3D маркеры миссий

    Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

    Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

    Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

    3D маркеры миссий

    Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

    Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

    Пожалуйста Войдите или Зарегистрируйтесь чтобы увидеть скрытое содержание

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

    Вот так создается задача:

    Вот так создается задача:

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

    Система оживления

    Прописываем в description.ext

    Можно ли сделать так, чтобы возрождать мог только медик?

    Можно ли сделать так, чтобы возрождать мог только медик?

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

    Система оживления

    Прописываем в description.ext
    Можно ли сделать так, чтобы возрождать мог только медик? Пока что нет на сколько я знаю, покрайне мере не сталкивался чтоб где то было

    Кое - что нашел только что по этой теме forEach playableUnits; Но в связи слабого пока понимания языка не пойму что надо вписать вместо " ["array","of","medic","classnames"]". Если не сложно, подскажите пожалуйста

    Кое - что нашел только что по этой теме forEach playableUnits; Но в связи слабого пока понимания языка не пойму что надо вписать вместо " ["array","of","medic","classnames"]". Если не сложно, подскажите пожалуйста

    попробуй вставить в переводчик. он тебе переведет примерно как "массив классов медиков", т.е. список классов тех юнитов, кто может поднимать.

    Прошу принять во внимание, что данное описание подготовлено на основе АЛЬФА версии игры – ожидается, что в полной версии игры некоторые настройки управления
    будут изменены. Я попытаюсь держать вас в курсе всех изменений, которые будут вноситься в ходе развития Arma3.

    Кто-то возможно поспорит со мной, однако я считаю, что это действительно так…. Arma3 в
    корне меняет представление о системе управления. Студия Bohemia приложила огромные усилия для того, чтобы создать качественно новый механизм движения, системы
    анимации и управления мышью в Arma3.Я думаю, что каждый, кто был недоволен управлением второй части, будет на седьмом небе от счастья в связи с долгожданными
    изменениями.

    В Arma3 существуют несколько вещей, которые должны быть усвоены КАЖДЫМ. Если вы пришли
    из предыдущих частей Arma или DayZ, то скорее всего знакомы с концепцией свободного
    прицеливания (freeaim). Это когда при стрельбе, ваше оружие перемещается до определенной
    невидимой границы, после чего, ваш взгляд совмещается с ним. Короче говоря, freeaim в Arma3 это самый худший вариант управления, который вы можете использовать. По умолчанию этот режим выключен – так и оставьте. Freeaim предназначен для тех, у кого проявляется ностальгия по прошлым частям Arma. Я настоятельно советую вам оставить
    прошлое в прошлом. Погнали дальше.

    Акселерация мыши (увеличение скорости движения мышки) – отключите, если вы не уверены, что оно вам надо. В двух словах –
    ПРОСТО ОТРУБИТЕ. Сглаживание должно быть так же отключено. Ну и до кучи, отключите еще и ‘VSync’ в настройках видео. А теперь, давайте наконец рассмотрим непосредственно саму
    систему управления.

    Положения тела (стойка) Стандартные положения тела. Я использую клавиши ‘F’ и ‘V’ для
    быстрого переключения между положениями ‘стоя’, ‘сидя’ и ‘лежа’. Кнопка ‘F’ привязана к действию ‘Присесть’ (‘Crouch’). Она помогает
    мне переключаться между положениями ‘стоя’ и ‘сидя’. Кнопка ‘V’ привязана к действию ‘Лечь’ (‘Go
    prone’). Если вы сидите, то при нажатии ‘F’, вы встанете. Если вы лежите и нажимаете ‘F’, вы перейдете в положение 'Сидеть’. Достаточно легко, неправда ли? Прошу заметить, что если вы
    используете клавиши ‘F’ и ‘V’, то вам нужно убедиться, что эти клавиши не заняты действиями ‘Сменить режим стрельбы’ и ‘Вылезти’. Я использую связку ‘2xCTRL+E’ (Нажатие
    комбинации дважды) для смены режима стрельбы. Это отличная связка клавиш, которую вы не сможете задействовать «нечаянно». Я не назначил никакой кнопки для действия ‘Вылезти’, так как не увидел в этом необходимости, но, как
    говорится, каждому свое.

    Читайте также: