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


Фотография

Работа скриптов и звуков в МП или Кооп


Лучший Ответ 11Varan11 , 18 April 2023 - 16:04

 

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

Ну потому что там появились файлы client2.sqf и server2.sqf, плюс всякий бред кое-где написан, поэтому и работает не так, как нужно. А нужно почитать теорию, изучить мой код и сделать так, как уже сделано для power1, или как я писал -- разместить на серверной части код запуска функции, которая добавляет действие на объект.

 

Все спасибо,разобрался,работает и в одиночке и в мультиплеере...Тестил один,но у меня все норм работает.Мб потестим сегодня в двоем,что б знать наверняка.

 

в Perec1.sqf вписал это

 

TAG_fnc_addHackAction1 = {
    params ["_object"];
 
    _actionId1 = [
        _object,
        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) < 3",
        {
           
        },
        {}, // codeProgress
        {
            params ["_target"];
 
            [_target] remoteExecCall ["TAG_fnc_removeHackAction"];
            [_target] remoteExecCall ["TAG_fnc_removeHackActionServer", 2];
 
            "Power.sqf" remoteExec ["execVM"];
        },
        { }, // codeInterrupted
        [], // arguments
        2, // duration
        0, // priority
        true, // removeCompleted
        false // showUnconscious
    ] call BIS_fnc_holdActionAdd;
 
    _object setVariable ["hackActionId", _actionId1];
};
 
в Perecserver1.sqf это
 
TAG_fnc_removeHackActionServer = {
    params ["_object"];
 
    _jipId = _object getVariable ["addHackActionJipId", ""];
 
    if (_jipId != "") then {
        remoteExec ["", _jipId];
    };
 
    _object setVariable ["addHackActionJipId", nil];
};
 
_jipId = [power1] remoteExecCall ["TAG_fnc_addHackAction1", [0, -2] select isDedicated, power1];
 
power1 setVariable ["addHackActionJipId", _jipId];
 
в Perec2.sqf и в Perecserver2.sqf собственно это
 
Perec2.sqf
 
TAG_fnc_addHackAction2 = {
    params ["_object"];
 
    _actionId2 = [
        _object,
        localize "STR_Zapis1",
        "\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) < 3",
        {
            
        },
        {}, // codeProgress
        {
            params ["_target"];
 
            [_target] remoteExecCall ["TAG_fnc_removeHackAction"];
            [_target] remoteExecCall ["TAG_fnc_removeHackActionServer", 2];
 
           "interkom1.sqf" remoteExec ["execVM"];
        },
        { }, // codeInterrupted
        [], // arguments
        2, // duration
        0, // priority
        true, // removeCompleted
        false // showUnconscious
    ] call BIS_fnc_holdActionAdd;
 
    _object setVariable ["hackActionId", _actionId2];
};
 
Perecserver2.sqf
 
TAG_fnc_removeHackActionServer = {
    params ["_object"];
 
    _jipId = _object getVariable ["addHackActionJipId", ""];
 
    if (_jipId != "") then {
        remoteExec ["", _jipId];
    };
 
    _object setVariable ["addHackActionJipId", nil];
};
 
_jipId = [power2] remoteExecCall ["TAG_fnc_addHackAction2", [0, -2] select isDedicated, power2];
 
power2 setVariable ["addHackActionJipId", _jipId];
 
и в init.sqf это
 
TAG_fnc_removeHackAction = {
    params ["_object"];
 
    _actionId1 = _object getVariable ["hackActionId", -1];
 
    if (_actionId1 >= 0) then {
        [_object, _actionId1] call BIS_fnc_holdActionRemove;
    };
 
    _object setVariable ["hackActionId", nil];
};
 
 
TAG_fnc_removeHackAction = {
    params ["_object"];
 
    _actionId2 = _object getVariable ["hackActionId", -1];
 
    if (_actionId2 >= 0) then {
        [_object, _actionId2] call BIS_fnc_holdActionRemove;
    };
 
    _object setVariable ["hackActionId", nil];
};
 
 
if (!isDedicated) then {
    call (compileScript ["Perec1.sqf"]);
};
if (isServer) then {
    call (compileScript ["Perecserver1.sqf"]);
};
if (!isDedicated) then {
    call (compileScript ["Perec2.sqf"]);
};
if (isServer) then {
    call (compileScript ["Perecserver2.sqf"]);
};
 
 
 
Собственно все заработало и в одиночке и в мультиплеере.Ну по крайне мере я тестил один и у меня все работало хорошо. Испытаю ещё с несколькими людьми но думаю все будет работать нормально.Может кому пригодиться, поэтому и выложил,что у меня получилось.
 
А тебе  Schatten огромное спасибо,без тебя бы ничего не получилось.Просто от души,что помог.Надеюсь я все правильно написал в файлах и меня не закидают тапками:)))...Но вроде все работает.
Перейти к сообщению


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

#1 OFFLINE   11Varan11

11Varan11

    Ефрейтор

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

Отправлено 09 April 2023 - 00:41

Есть пара вопросов по скриптам и их работе в мультиплеере.Начну по порядку.

 

1)Есть скрпит,например act1.sqf и в нем написано.

 

 

 

INT1 say3D"zapis";
sleep 2;
[localize "$STR_Kpp1", localize "$STR_Kpp_txt1"] spawn BIS_fnc_showSubtitle;
INT1 say3D "in1";
sleep 4;
[localize "$STR_Kpp1_1", localize "$STR_Kpp_txt1_1"] spawn BIS_fnc_showSubtitle;
INT1 say3D "in2";
sleep 5;
[localize "$STR_Kpp1", localize "$STR_Kpp_txt1_2"] spawn BIS_fnc_showSubtitle;
INT1 say3D "in3";
sleep 4;
 
 и так далее...Дак вот,звук и текст выводиться только для игрока который его активировал.Как сделать что бы,когда один человек запускает скрипт звук и текст высвечивался для всех игроков на сервере?Через initServer?если да то как.
 
Так же есть такой код,через который и происходит активация выше указоного скрипта.
 
[
power1, 
localize "$STR_Obig1",
"\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_unbind_ca.paa",
"\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_unbind_ca.paa",
"_this distance _target < 3",
"_caller distance _target < 3",
{},
{},
{nul = [] execVM "act1.sqf";},                            
{},
[],
2,
0,
true,
false
] remoteExec ["BIS_fnc_holdActionAdd", 0, power1];
 
Он записан в обычном init,будет ли он работать в мультиплеере или так же лучше вписать его в  initserver?Если вписать и туда и туда то в игре команда дублируется,что как минимум некрасиво и не отменяться действие на предмете(если его активировал другой игрок)то подойдя к предмету я тоже могу выполнить действие...Тобишь один и тот же скрипт запускается два раза,чего собственно и не нужно....Тобишь план таков..Coop сценарий.Несколько игроков.И например чтобы проигрался диалог(тот скрипт что act1.sqf)например нужно активировать рубильник тот что power1 во втором коде.И при этом после активации действие пропадает для всех игроков,тобишь тот первый act1.sqf,котрый выводит по сути текст на экран и звук(тобишь диалог)виден и слышен всем игрокам,а не только тому,который активировал,но и другие игроки не смогут,ативировать этот рубильник так как его активировал другой игрок.Вот как это сделать чтобы работало и в мультиплеере и в одиночной игре?
 
2)В чем отличия initServer и InitPlayerServer?Так если честно и не понял.
3)Так же как сделать чтобы команда hint срабатывался для всех кто находиться на сервере?
4)Можно ли добавить мод в миссию(что бы не качать его с воркшопа,если он мало весит например,зачем отдельно его подключать)Вот и хочется узнать можно ли мод напрямую в миссии засунуть.
5) В общем,если подытожить, то хочется узнать как сделать чтобы скрипты,звуки работали в мультиплеере так же как и в одиночке.Что для этого нужно сделать.
6)Миссию запускал через редактор(в онлайн естественно),вначале запустилось друг зашел,потестили что нужно вернулся обратно в редактор,поставил пару объектов,снова запустил и друг уже не смог подключиться,он просто вылетал с сервера.Затем запуск производили уже напрямую, а не через редактор и такая же петрушка...После перезапуска армы  все снова заработало...Но с чем это связано с добавлением новых объектов или удалении или добавлении в файлы initServer?
 
7)Выше был прописан код
 
[
power1, // Объект, к которому прикреплено действие
localize "$STR_Obig1",
"\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_unbind_ca.paa",
"\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_unbind_ca.paa",
"_this distance _target < 3",
"_caller distance _target < 3",
{},
{},
{nul = [] execVM "Power.sqf";},                            
{},
[],
2,
0,
true,
false
] remoteExec ["BIS_fnc_holdActionAdd", 0, power1];
 
он был записан в init,но если вписать это и в initServer,то эта команда на предмете дублируется и становиться два одинаковых действия...Может я глупый конечно(скорее так и есть).Но может эта команда и в init будет работать для всех?Но тогда возникает другой вопрос если эта команда записана в init то действие можно выполнить два раза,тобишь я и если подойдёт второй игрок тоже может выполнить это действие,тобишь запустить один и тот же скрипт два раза.Как этого избежать? Действовать через initServer или через initplayerlocal или вообще через initPlayerServer?Непонятно,может кто разъяснить.Но это должно работать и в coop и в одиночной игре.
 
8 ) И заключительно...Как привязать через say3D музыку, например к радио,но чтобы звук там был зациклен.(тобишь песня играла постоянно).
 
Заранее спасибо,надеюсь ответите на все мои вопросы и поможете мне с моей проблемой. 

Сообщение отредактировал 11Varan11: 09 April 2023 - 01:26

  • 0

#2 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 09 April 2023 - 15:49

Как сделать что бы,когда один человек запускает скрипт звук и текст высвечивался для всех игроков на сервере?

Запускать у всех с помощью 

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

.
 

Он записан в обычном init,будет ли он работать в мультиплеере или так же лучше вписать его в  initserver?

Будет, но лучше убрать remoteExec и вписать в initPlayerLocal.sqf.
 

Вот как это сделать чтобы работало и в мультиплеере и в одиночной игре?

Нужно, например, удалять действие у других игроков.
 

В чем отличия initServer и InitPlayerServer?Так если честно и не понял.

Во-первых, названия говорят сами за себя. Во-вторых, можно почитать

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

.
 

Так же как сделать чтобы команда hint срабатывался для всех кто находиться на сервере?

Смотри ответ на первый вопрос.
 

Можно ли добавить мод в миссию

Вряд ли.
 

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

Нужно знать

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

и писать в соответствии с ней.
 

тобишь запустить один и тот же скрипт два раза.Как этого избежать?

Не добавлять действие 2 раза.
 

Как привязать через say3D музыку, например к радио,но чтобы звук там был зациклен.

Зациклить или запускать снова из обработчика события

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

. Во втором случае придётся использовать другие команды.


Сообщение отредактировал Schatten: 09 April 2023 - 16:02

  • 0

#3 OFFLINE   11Varan11

11Varan11

    Ефрейтор

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

Отправлено 09 April 2023 - 19:07

 

Как сделать что бы,когда один человек запускает скрипт звук и текст высвечивался для всех игроков на сервере?

Запускать у всех с помощью 

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

.
 

Он записан в обычном init,будет ли он работать в мультиплеере или так же лучше вписать его в  initserver?

Будет, но лучше убрать remoteExec и вписать в initPlayerLocal.sqf.
 

Вот как это сделать чтобы работало и в мультиплеере и в одиночной игре?

Нужно, например, удалять действие у других игроков.
 

В чем отличия initServer и InitPlayerServer?Так если честно и не понял.

Во-первых, названия говорят сами за себя. Во-вторых, можно почитать

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

.
 

Так же как сделать чтобы команда hint срабатывался для всех кто находиться на сервере?

Смотри ответ на первый вопрос.
 

Можно ли добавить мод в миссию

Вряд ли.
 

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

Нужно знать

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

и писать в соответствии с ней.
 

тобишь запустить один и тот же скрипт два раза.Как этого избежать?

Не добавлять действие 2 раза.
 

Как привязать через say3D музыку, например к радио,но чтобы звук там был зациклен.

Зациклить или запускать снова из обработчика события

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

. Во втором случае придётся использовать другие команды.

 

спасибо,буду пробовать разбираться во всем этом.А если не секрет как удалять действие у других игроков,если работает через это;

 

[
power1, // Объект, к которому прикреплено действие
localize "$STR_Obig1",
"\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_unbind_ca.paa",
"\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_unbind_ca.paa",
"_this distance _target < 3",
"_caller distance _target < 3",
{},
{},
{nul = [] execVM "Power.sqf";},                            
{},
[],
2,
0,
true,
false
] remoteExec ["BIS_fnc_holdActionAdd", 0, power1];

  • 0

#4 OFFLINE   11Varan11

11Varan11

    Ефрейтор

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

Отправлено 09 April 2023 - 19:26

 

Как сделать что бы,когда один человек запускает скрипт звук и текст высвечивался для всех игроков на сервере?

Запускать у всех с помощью 

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

.
 

Он записан в обычном init,будет ли он работать в мультиплеере или так же лучше вписать его в  initserver?

Будет, но лучше убрать remoteExec и вписать в initPlayerLocal.sqf.
 

Вот как это сделать чтобы работало и в мультиплеере и в одиночной игре?

Нужно, например, удалять действие у других игроков.
 

В чем отличия initServer и InitPlayerServer?Так если честно и не понял.

Во-первых, названия говорят сами за себя. Во-вторых, можно почитать

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

.
 

Так же как сделать чтобы команда hint срабатывался для всех кто находиться на сервере?

Смотри ответ на первый вопрос.
 

Можно ли добавить мод в миссию

Вряд ли.
 

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

Нужно знать

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

и писать в соответствии с ней.
 

тобишь запустить один и тот же скрипт два раза.Как этого избежать?

Не добавлять действие 2 раза.
 

Как привязать через say3D музыку, например к радио,но чтобы звук там был зациклен.

Зациклить или запускать снова из обработчика события

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

. Во втором случае придётся использовать другие команды.

 

и как лучше запустить через remoteExec?Так работать будет [[],"Power.sqf"] remoteExec ['BIS_fnc_execVM',0];?


  • 0

#5 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 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"];

  • 0

#6 OFFLINE   11Varan11

11Varan11

    Ефрейтор

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

Отправлено 10 April 2023 - 11:26

Тобишь вот это 

 

  1. addActionToPower1JipId = [power1, {
  2. _actionId = _this addAction [...];
  3.  
  4. _this setVariable ["actionId", _actionId];
  5. }] remoteExec ["call", [0, -2] select isDedicated, power1];

 

 

Нужно вставить в InitServer,правильно я понимаю?

 

а вот это в отдельный скрипт

 

  • params ["_target"];
  1.  
  2. {
  3. remoteExec ["", addActionToPower1JipId];
  4.  
  5. addActionToPower1JipId = nil;
  6. } remoteExec ["call", 2];
  7.  
  8. [_target, {
  9. _actionId = _this getVariable ["actionId", -1];
  10.  
  11. if (_actionId >= 0) then {
  12. _this removeAction _actionId;
  13. };
  14.  
  15. _this setVariable ["actionId", nil];
  16. }] remoteExec ["call"];
  17.  
  18. execVM "act1.sqf";

 

А если не секрет как удалять действие у других игроков

Вот пример:
- Сервер:

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"];

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


  • 0

#7 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 10 April 2023 - 21:57

11Varan11, всё, что я привёл, нужно не просто скопировать и вставить, а переделать под свои нужды, поскольку я привёл всего лишь пример..


  • 0

#8 OFFLINE   11Varan11

11Varan11

    Ефрейтор

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

Отправлено 10 April 2023 - 23:45

11Varan11, всё, что я привёл, нужно не просто скопировать и вставить, а переделать под свои нужды, поскольку я привёл всего лишь пример..

Дак я понял,хотя бы примерно понять как это всё под свои нужды переделать.


11Varan11, всё, что я привёл, нужно не просто скопировать и вставить, а переделать под свои нужды, поскольку я привёл всего лишь пример..

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


  • 0

#9 OFFLINE   11Varan11

11Varan11

    Ефрейтор

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

Отправлено 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 написал:

[ power1 ] remoteExec ["TAG_fnc_addHackAction", [ 0, -2 ] select isDedicated, "HackActionJIPID"];
 
if ( isDedicated ) then {
TAG_fnc_remHackAction = {remoteExec[ "", "HackActionJIPID" ];

 

};
 
а 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",
{ playSound "" },
{ hint "Hacking Terminal" },
{
params[ "_object" ];
 
//Remove hack action and handle JIP que
"Power.sqf" remoteExec ["execVM"];
},
{hint "Stop Hacking"},
[],
2,
0,
true,
false
] call BIS_fnc_holdActionAdd;
 
power1 setVariable [ "hackAction", _actionID ];
};
 
TAG_fnc_remHackAction = {
params[ "_object" ];
 
_actionID = power1 getVariable [ "hackAction", -1 ];
 
if ( _actionID > -1 ) then {
[ power1, _actionID ] call BIS_fnc_holdActionRemove;
};
 
if ( isServer ) then {
//Remove JIP que Hosted
remoteExec[ "", "HackActionJIPID" ];
};
};
 
вроде как работает,но на рубильнике power1 все так висит два действия.Если удалить код из initServer то действие опять становиться одно.Но не работает в одиночной игре.Только на сервере.Как это все решить уже не знаю.Голову сломал уже и кучу вариаций препробывал.Но либо по два действия висят либо не работает в одиночке,да и в мп тоже не все корректно работает.Помогите если сможете.Уже не знаю как лучше сделать.

  • 0

#10 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 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];

  • 0

#11 OFFLINE   11Varan11

11Varan11

    Ефрейтор

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

Отправлено 14 April 2023 - 02:57

 

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];

Что ж у меня вышла такая петрушка.

 

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 Количество загрузок:

 

Может я что не так прописал?Или это будет работать только так и ни как иначе?

И да прошлый код который скидывал,его мог активировать я(хост),но не второй игрок.У него просто висела иконка,но она не работала.

И в одиночке он не работает,но как я понимаю и не должен работать там,а жаль.Миссия должна проходиться как и в одиночке так и в коопе.Посмотри ещё раз.Может я что-то не так или не там прописал?

 

 

 


  • 0

#12 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 14 April 2023 - 14:36

Что ж у меня вышла такая петрушка.

А почему _object была заменена на power1?
 

Но как висело два действия на объекте так и висит.

Возможно, оно где-то ещё добавляется.
 

У него просто висела иконка,но она не работала.

Это из-за ошибки в аргументах, передаваемых BIS_fnc_holdActionAdd.
 

И в одиночке он не работает,но как я понимаю и не должен работать там,а жаль.

Зависит от того, как написано. Можно написать так, чтобы работало везде. Мой вариант как раз должен работать везде.


Сообщение отредактировал Schatten: 14 April 2023 - 15:06

  • 0

#13 OFFLINE   11Varan11

11Varan11

    Ефрейтор

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

Отправлено 14 April 2023 - 15:53

А почему _object была заменена на power1?

 

 

Тобишь должно быть так?

 

  1. TAG_fnc_addHackAction = {
  2. params ["_object"];
  3.  
  4. _actionId = [
  5. _object,
  6. localize "$STR_Obig1",
  7. "\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_connect_ca.paa",
  8. "\a3\ui_f\data\IGUI\Cfg\holdactions\holdAction_connect_ca.paa",
  9. "_this distance _target < 3",
  10. "_caller distance _target < 2",
  11. {},
  12. { hint "Hacking Terminal" },
  13.  
  14. {
  15. params ["_target"];
  16.  
  17. [_target] remoteExecCall ["TAG_fnc_removeHackAction"];
  18. [_target] remoteExecCall ["TAG_fnc_removeHackActionServer", 2];
  19.  
  20. "Power.sqf" remoteExec ["execVM"];
  21. },
  22. {},
  23. [],
  24. 2,
  25. 0,
  26. true,
  27. false
  28. ] call BIS_fnc_holdActionAdd;
  29.  
  30. _object setVariable ["hackActionId", _actionId];
  31. };
  32. TAG_fnc_removeHackAction = {
  33. params ["_object"];
  34.  
  35. _actionId = _object getVariable ["hackActionId", -1];
  36.  
  37. if (_actionId >= 0) then {
  38. [_object, _actionId] call BIS_fnc_holdActionRemove;
  39. };
  40.  
  41. _object setVariable ["hackActionId", nil];
  42. };

А как игра поймет к какому объекту должно быть прикручено действие.Или я просто чего-то не понимаю


 

Но как висело два действия на объекте так и висит.

Возможно, оно где-то ещё добавляется.
 

Проверил это, ни где оно больше не добавляться,кроме initPlayerLocal.Странно короче все как то.


  • 0

#14 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 14 April 2023 - 15:54

Тобишь должно быть так?

Должно быть так, как у меня написано.
 

А как игра поймет к какому объекту должно быть прикручено действие.Или я просто чего-то не понимаю

Второе предложение -- ключевое. В _object и _target интересующий объект.
 

Проверил это, ни где оно больше не добавляться,кроме initPlayerLocal.Странно короче все как то.

Ну, у меня всё работает. Я, правда, немного переписал, поскольку очередность запуска initPlayerLocal.sqf и initServer.sqf произвольная.

Прикрепленные файлы

  • Прикрепленный файл  Power.VR.zip   2.35К   2 Количество загрузок:

Сообщение отредактировал Schatten: 14 April 2023 - 15:57

  • 0

#15 OFFLINE   11Varan11

11Varan11

    Ефрейтор

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

Отправлено 14 April 2023 - 16:31

 

А как игра поймет к какому объекту должно быть прикручено действие.Или я просто чего-то не понимаю

Второе предложение -- ключевое. В _object и _target интересующий объект.
 

Всё  работает спасибо большое.Наконец то.Только почему то текст стал моргать после запуска действия,текст вывожу так [localize "$STR_GlavGrup", localize "STR_power1"] spawn BIS_fnc_showSubtitle;Не знаю в чем тут беда.Но в остальном все работает.Только вот а если будет несколько таких переключателей,у меня на данный момент два,второй назвал perek2 вписал его так же в client и server и теперь на нем выполняется тоже действие что и на power1,как исправить это?


  • 0

#16 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 14 April 2023 - 16:42

Только вот а если будет несколько таких переключателей,у меня на данный момент два,второй назвал perek2 вписал его так же в client и server и теперь на нем выполняется тоже действие что и на power1,как исправить это?

А что, в моём варианте power1 где-то есть на клиенте?


  • 0

#17 OFFLINE   11Varan11

11Varan11

    Ефрейтор

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

Отправлено 14 April 2023 - 16:55

 

Только вот а если будет несколько таких переключателей,у меня на данный момент два,второй назвал perek2 вписал его так же в client и server и теперь на нем выполняется тоже действие что и на power1,как исправить это?

А что, в моём варианте power1 где-то есть на клиенте?

 

так тупанул,увидел,понял...Тобишь это надо будет прописывать на servere?Или просто создать например client2.sqf или как


  • 0

#18 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 14 April 2023 - 17:10

Тобишь это надо будет прописывать на servere?

Естественно.


  • 0

#19 OFFLINE   11Varan11

11Varan11

    Ефрейтор

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

Отправлено 14 April 2023 - 17:21

 

Тобишь это надо будет прописывать на servere?

Естественно.

 

Спасибо тебе большое,Очень помог.Все объяснил и разъяснил глупому.Можно если возникнут снова вопросы по этой теме я напишу тебе?


  • 0

#20 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1791 сообщений
  • Откуда:Тбилиси, Грузия

Отправлено 14 April 2023 - 17:25

Можно если возникнут снова вопросы по этой теме я напишу тебе?

Лучше на форуме, чтобы другие видели.


  • 0




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