Есть пара вопросов по скриптам и их работе в мультиплеере.Начну по порядку.
1)Есть скрпит,например act1.sqf и в нем написано.
INT1 say3D"zapis";
Сообщение отредактировал 11Varan11: 09 April 2023 - 01:26
Лучший Ответ 11Varan11 , 18 April 2023 - 16:04
точнее наоборот,то что я скинул в примере,работает норм в одиночке,но в сетевой игре действие,которое должно висеть на power2 вешается и на power1
Ну потому что там появились файлы client2.sqf и server2.sqf, плюс всякий бред кое-где написан, поэтому и работает не так, как нужно. А нужно почитать теорию, изучить мой код и сделать так, как уже сделано для power1, или как я писал -- разместить на серверной части код запуска функции, которая добавляет действие на объект.
Все спасибо,разобрался,работает и в одиночке и в мультиплеере...Тестил один,но у меня все норм работает.Мб потестим сегодня в двоем,что б знать наверняка.
в Perec1.sqf вписал это
Отправлено 09 April 2023 - 00:41
Есть пара вопросов по скриптам и их работе в мультиплеере.Начну по порядку.
1)Есть скрпит,например act1.sqf и в нем написано.
INT1 say3D"zapis";
Сообщение отредактировал 11Varan11: 09 April 2023 - 01:26
Отправлено 09 April 2023 - 15:49
Как сделать что бы,когда один человек запускает скрипт звук и текст высвечивался для всех игроков на сервере?
Запускать у всех с помощью
.Он записан в обычном init,будет ли он работать в мультиплеере или так же лучше вписать его в initserver?
Будет, но лучше убрать remoteExec и вписать в initPlayerLocal.sqf.
Вот как это сделать чтобы работало и в мультиплеере и в одиночной игре?
Нужно, например, удалять действие у других игроков.
В чем отличия initServer и InitPlayerServer?Так если честно и не понял.
Во-первых, названия говорят сами за себя. Во-вторых, можно почитать
.Так же как сделать чтобы команда hint срабатывался для всех кто находиться на сервере?
Смотри ответ на первый вопрос.
Можно ли добавить мод в миссию
Вряд ли.
В общем,если подытожить, то хочется узнать как сделать чтобы скрипты,звуки работали в мультиплеере так же как и в одиночке.Что для этого нужно сделать.
Нужно знать
и писать в соответствии с ней.тобишь запустить один и тот же скрипт два раза.Как этого избежать?
Не добавлять действие 2 раза.
Как привязать через say3D музыку, например к радио,но чтобы звук там был зациклен.
Зациклить или запускать снова из обработчика события
. Во втором случае придётся использовать другие команды.Сообщение отредактировал Schatten: 09 April 2023 - 16:02
Отправлено 09 April 2023 - 19:07
Как сделать что бы,когда один человек запускает скрипт звук и текст высвечивался для всех игроков на сервере?
Запускать у всех с помощью
.
Он записан в обычном init,будет ли он работать в мультиплеере или так же лучше вписать его в initserver?
Будет, но лучше убрать remoteExec и вписать в initPlayerLocal.sqf.
Вот как это сделать чтобы работало и в мультиплеере и в одиночной игре?
Нужно, например, удалять действие у других игроков.
В чем отличия initServer и InitPlayerServer?Так если честно и не понял.
Во-первых, названия говорят сами за себя. Во-вторых, можно почитать
.
Так же как сделать чтобы команда hint срабатывался для всех кто находиться на сервере?
Смотри ответ на первый вопрос.
Можно ли добавить мод в миссию
Вряд ли.
В общем,если подытожить, то хочется узнать как сделать чтобы скрипты,звуки работали в мультиплеере так же как и в одиночке.Что для этого нужно сделать.
Нужно знать
и писать в соответствии с ней.
тобишь запустить один и тот же скрипт два раза.Как этого избежать?
Не добавлять действие 2 раза.
Как привязать через say3D музыку, например к радио,но чтобы звук там был зациклен.
Зациклить или запускать снова из обработчика события
. Во втором случае придётся использовать другие команды.
спасибо,буду пробовать разбираться во всем этом.А если не секрет как удалять действие у других игроков,если работает через это;
Отправлено 09 April 2023 - 19:26
Как сделать что бы,когда один человек запускает скрипт звук и текст высвечивался для всех игроков на сервере?
Запускать у всех с помощью
.
Он записан в обычном init,будет ли он работать в мультиплеере или так же лучше вписать его в initserver?
Будет, но лучше убрать remoteExec и вписать в initPlayerLocal.sqf.
Вот как это сделать чтобы работало и в мультиплеере и в одиночной игре?
Нужно, например, удалять действие у других игроков.
В чем отличия initServer и InitPlayerServer?Так если честно и не понял.
Во-первых, названия говорят сами за себя. Во-вторых, можно почитать
.
Так же как сделать чтобы команда hint срабатывался для всех кто находиться на сервере?
Смотри ответ на первый вопрос.
Можно ли добавить мод в миссию
Вряд ли.
В общем,если подытожить, то хочется узнать как сделать чтобы скрипты,звуки работали в мультиплеере так же как и в одиночке.Что для этого нужно сделать.
Нужно знать
и писать в соответствии с ней.
тобишь запустить один и тот же скрипт два раза.Как этого избежать?
Не добавлять действие 2 раза.
Как привязать через say3D музыку, например к радио,но чтобы звук там был зациклен.
Зациклить или запускать снова из обработчика события
. Во втором случае придётся использовать другие команды.
и как лучше запустить через remoteExec?Так работать будет [[],"Power.sqf"] remoteExec ['BIS_fnc_execVM',0];?
Отправлено 09 April 2023 - 22:25
А если не секрет как удалять действие у других игроков
Вот пример:
- Сервер:
addActionToPower1JipId = [power1, { _actionId = _this addAction [...]; _this setVariable ["actionId", _actionId]; }] remoteExec ["call", [0, -2] select isDedicated, power1];
- Клиент:
params ["_target"]; { remoteExec ["", addActionToPower1JipId]; addActionToPower1JipId = nil; } remoteExec ["call", 2]; [_target, { _actionId = _this getVariable ["actionId", -1]; if (_actionId >= 0) then { _this removeAction _actionId; }; _this setVariable ["actionId", nil]; }] remoteExec ["call"]; execVM "act1.sqf";
Лучше код поместить в функции, а не передавать в remoteExec.
и как лучше запустить через remoteExec?Так работать будет [[],"Power.sqf"] remoteExec ['BIS_fnc_execVM',0];?
Должно. Можно упростить:
"Power.sqf" remoteExec ["execVM"];
Отправлено 10 April 2023 - 11:26
Тобишь вот это
Нужно вставить в InitServer,правильно я понимаю?
а вот это в отдельный скрипт
А если не секрет как удалять действие у других игроков
Вот пример:
- Сервер:addActionToPower1JipId = [power1, { _actionId = _this addAction [...]; _this setVariable ["actionId", _actionId]; }] remoteExec ["call", [0, -2] select isDedicated, power1];- Клиент:
params ["_target"]; { remoteExec ["", addActionToPower1JipId]; addActionToPower1JipId = nil; } remoteExec ["call", 2]; [_target, { _actionId = _this getVariable ["actionId", -1]; if (_actionId >= 0) then { _this removeAction _actionId; }; _this setVariable ["actionId", nil]; }] remoteExec ["call"]; execVM "act1.sqf";Лучше код поместить в функции, а не передавать в remoteExec.
и как лучше запустить через remoteExec?Так работать будет [[],"Power.sqf"] remoteExec ['BIS_fnc_execVM',0];?
Должно. Можно упростить:
"Power.sqf" remoteExec ["execVM"];
чет я туплю прост куда и как...Извиняюсь за тупость и прошу разъяснить глупому,куда и что вставлять чтобы работало.
Отправлено 10 April 2023 - 23:45
11Varan11, всё, что я привёл, нужно не просто скопировать и вставить, а переделать под свои нужды, поскольку я привёл всего лишь пример..
Дак я понял,хотя бы примерно понять как это всё под свои нужды переделать.
11Varan11, всё, что я привёл, нужно не просто скопировать и вставить, а переделать под свои нужды, поскольку я привёл всего лишь пример..
Вот ещё вопрос,как обычный hint,сделать видимым для всех игроков знаю,а вот как сделать hintC,видимимы для всех не получается.Возможно ли это?
Отправлено 13 April 2023 - 19:34
А если не секрет как удалять действие у других игроков
Вот пример:
- Сервер:addActionToPower1JipId = [power1, { _actionId = _this addAction [...]; _this setVariable ["actionId", _actionId]; }] remoteExec ["call", [0, -2] select isDedicated, power1];- Клиент:
params ["_target"]; { remoteExec ["", addActionToPower1JipId]; addActionToPower1JipId = nil; } remoteExec ["call", 2]; [_target, { _actionId = _this getVariable ["actionId", -1]; if (_actionId >= 0) then { _this removeAction _actionId; }; _this setVariable ["actionId", nil]; }] remoteExec ["call"]; execVM "act1.sqf";Лучше код поместить в функции, а не передавать в remoteExec.
и как лучше запустить через remoteExec?Так работать будет [[],"Power.sqf"] remoteExec ['BIS_fnc_execVM',0];?
Должно. Можно упростить:
"Power.sqf" remoteExec ["execVM"];
поигрался немного с информацией предоставленной вами.
в initServer написал:
Отправлено 14 April 2023 - 00:56
11Varan11,
- initPlayerLocal.sqf
TAG_fnc_addHackAction = { params ["_object"]; _actionId = [ _object, ... { params ["_target"]; [_target] remoteExecCall ["TAG_fnc_removeHackAction"]; [_target] remoteExecCall ["TAG_fnc_removeHackActionServer", 2]; "act1.sqf" remoteExec ["execVM"]; } ... ] call BIS_fnc_holdActionAdd; _object setVariable ["hackActionId", _actionId]; }; TAG_fnc_removeHackAction = { params ["_object"]; _actionId = _object getVariable ["hackActionId", -1]; if (_actionId >= 0) then { [_object, _actionId] call BIS_fnc_holdActionRemove; }; _object setVariable ["hackActionId", nil]; };
- initServer.sqf
TAG_fnc_removeHackActionServer = { params ["_object"]; _jipId = _object getVariable ["addHackActionJipId", ""]; if (_jipId != "") then { remoteExec ["", _jipId]; }; _object setVariable ["addHackActionJipId", nil]; }; _jipId = [power1] remoteExecCall ["TAG_fnc_addHackAction", [0, -2] select isDedicated, power1]; power1 setVariable ["addHackActionJipId", _jipId];
Отправлено 14 April 2023 - 02:57
11Varan11,
- initPlayerLocal.sqfTAG_fnc_addHackAction = { params ["_object"]; _actionId = [ _object, ... { params ["_target"]; [_target] remoteExecCall ["TAG_fnc_removeHackAction"]; [_target] remoteExecCall ["TAG_fnc_removeHackActionServer", 2]; "act1.sqf" remoteExec ["execVM"]; } ... ] call BIS_fnc_holdActionAdd; _object setVariable ["hackActionId", _actionId]; }; TAG_fnc_removeHackAction = { params ["_object"]; _actionId = _object getVariable ["hackActionId", -1]; if (_actionId >= 0) then { [_object, _actionId] call BIS_fnc_holdActionRemove; }; _object setVariable ["hackActionId", nil]; };- initServer.sqf
TAG_fnc_removeHackActionServer = { params ["_object"]; _jipId = _object getVariable ["addHackActionJipId", ""]; if (_jipId != "") then { remoteExec ["", _jipId]; }; _object setVariable ["addHackActionJipId", nil]; }; _jipId = [power1] remoteExecCall ["TAG_fnc_addHackAction", [0, -2] select isDedicated, power1]; power1 setVariable ["addHackActionJipId", _jipId];
Что ж у меня вышла такая петрушка.
InitPlayerLocal:
TAG_fnc_addHackAction = { params ["_object"]; _actionId = [ power1, localize "$STR_Obig1", "\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_connect_ca.paa", "\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_connect_ca.paa", "_this distance _target < 3", "_caller distance _target < 2", {}, { hint "Hacking Terminal" }, { params ["_target"]; [_target] remoteExecCall ["TAG_fnc_removeHackAction"]; [_target] remoteExecCall ["TAG_fnc_removeHackActionServer", 2]; "Power.sqf" remoteExec ["execVM"]; }, {}, [], 2, 0, true, false ] call BIS_fnc_holdActionAdd; power1 setVariable ["hackActionId", _actionId]; }; TAG_fnc_removeHackAction = { params ["_object"]; _actionId = power1 getVariable ["hackActionId", -1]; if (_actionId >= 0) then { [power1, _actionId] call BIS_fnc_holdActionRemove; }; power1 setVariable ["hackActionId", nil]; };
а в initServer
TAG_fnc_removeHackActionServer = { params ["_object"]; _jipId = power1 getVariable ["addHackActionJipId", ""]; if (_jipId != "") then { remoteExec ["", _jipId]; }; power1t setVariable ["addHackActionJipId", nil]; }; _jipId = [power1] remoteExecCall ["TAG_fnc_addHackAction", [0, -2] select isDedicated, power1]; power1 setVariable ["addHackActionJipId", _jipId];
Но как висело два действия на объекте так и висит.
20230414013837_1.jpg 39.48К 0 Количество загрузок:
Но если выполнить действие что стоит первым,то второе удаляется,а вот если наоборот, то нет.Так же можно выполнить действие ещё раз.
20230414015018_1.jpg 43.2К 0 Количество загрузок:
Может я что не так прописал?Или это будет работать только так и ни как иначе?
И да прошлый код который скидывал,его мог активировать я(хост),но не второй игрок.У него просто висела иконка,но она не работала.
И в одиночке он не работает,но как я понимаю и не должен работать там,а жаль.Миссия должна проходиться как и в одиночке так и в коопе.Посмотри ещё раз.Может я что-то не так или не там прописал?
Отправлено 14 April 2023 - 14:36
Что ж у меня вышла такая петрушка.
А почему _object была заменена на power1?
Но как висело два действия на объекте так и висит.
Возможно, оно где-то ещё добавляется.
У него просто висела иконка,но она не работала.
Это из-за ошибки в аргументах, передаваемых BIS_fnc_holdActionAdd.
И в одиночке он не работает,но как я понимаю и не должен работать там,а жаль.
Зависит от того, как написано. Можно написать так, чтобы работало везде. Мой вариант как раз должен работать везде.
Сообщение отредактировал Schatten: 14 April 2023 - 15:06
Отправлено 14 April 2023 - 15:53
А почему _object была заменена на power1?
Тобишь должно быть так?
А как игра поймет к какому объекту должно быть прикручено действие.Или я просто чего-то не понимаю
Но как висело два действия на объекте так и висит.
Возможно, оно где-то ещё добавляется.
Проверил это, ни где оно больше не добавляться,кроме initPlayerLocal.Странно короче все как то.
Отправлено 14 April 2023 - 15:54
Тобишь должно быть так?
Должно быть так, как у меня написано.
А как игра поймет к какому объекту должно быть прикручено действие.Или я просто чего-то не понимаю
Второе предложение -- ключевое. В _object и _target интересующий объект.
Проверил это, ни где оно больше не добавляться,кроме initPlayerLocal.Странно короче все как то.
Ну, у меня всё работает. Я, правда, немного переписал, поскольку очередность запуска initPlayerLocal.sqf и initServer.sqf произвольная.
Сообщение отредактировал Schatten: 14 April 2023 - 15:57
Отправлено 14 April 2023 - 16:31
А как игра поймет к какому объекту должно быть прикручено действие.Или я просто чего-то не понимаю
Второе предложение -- ключевое. В _object и _target интересующий объект.
Всё работает спасибо большое.Наконец то.Только почему то текст стал моргать после запуска действия,текст вывожу так [localize "$STR_GlavGrup", localize "STR_power1"] spawn BIS_fnc_showSubtitle;Не знаю в чем тут беда.Но в остальном все работает.Только вот а если будет несколько таких переключателей,у меня на данный момент два,второй назвал perek2 вписал его так же в client и server и теперь на нем выполняется тоже действие что и на power1,как исправить это?
Отправлено 14 April 2023 - 16:42
Только вот а если будет несколько таких переключателей,у меня на данный момент два,второй назвал perek2 вписал его так же в client и server и теперь на нем выполняется тоже действие что и на power1,как исправить это?
А что, в моём варианте power1 где-то есть на клиенте?
Отправлено 14 April 2023 - 16:55
Только вот а если будет несколько таких переключателей,у меня на данный момент два,второй назвал perek2 вписал его так же в client и server и теперь на нем выполняется тоже действие что и на power1,как исправить это?
А что, в моём варианте power1 где-то есть на клиенте?
так тупанул,увидел,понял...Тобишь это надо будет прописывать на servere?Или просто создать например client2.sqf или как
Отправлено 14 April 2023 - 17:10
Тобишь это надо будет прописывать на servere?
Естественно.
Отправлено 14 April 2023 - 17:21
Тобишь это надо будет прописывать на servere?
Естественно.
Спасибо тебе большое,Очень помог.Все объяснил и разъяснил глупому.Можно если возникнут снова вопросы по этой теме я напишу тебе?
Отправлено 14 April 2023 - 17:25
Можно если возникнут снова вопросы по этой теме я напишу тебе?
Лучше на форуме, чтобы другие видели.