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


Фотография

addaction


Лучший Ответ SteelRat , 19 February 2015 - 00:09

код инита (хотя я думаю Влад плохого не посоветует и стоит прислушаться)

 #include "test1.sqf"
 #include "test2.sqf"

код test1.sqf

_group = createGroup east;
     a = _group createUnit ["O_Soldier_AA_F",getPos b,[],0,"FORM"];

код test2.sqf

if (a distance b <= 50) then {
                actions = [5];
                actions set [5, player addAction [" Move In Driver B ", {a moveInDriver b;}]]};

транспорт создан в редакторе и обозван b

Результат: положительный

Без ЗАДЕРЖЕК


негодяй)

if (a distance b <= 50) then {
    player setVariable ["MoveInDriverB", player addAction [" Move In Driver B ", {a moveInDriver b;}]]};
	
	
// Удаление экшена	
if (condition) then {
	player removeAction (player getVariable "MoveInDriverB");
        player setVariable ["MoveInDriverB", nil]; // удаляем переменную
};
Перейти к сообщению


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

#1 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

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

Отправлено 18 February 2015 - 18:10

В общем э... что не так? :sorry:

 

if ((A distance B <= 5) then {

 

actions = [0];

 

actions set [0, player addAction [" Текст ", {

 

A moveInDriver B;

 

} ] ] };

 

Дак вот, ммм... action - не появляется ... едрить его так.


Сообщение отредактировал D_Donskoy: 18 February 2015 - 18:11

  • 0

#2 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 18 February 2015 - 18:38

со скобками точно напутали, уберите лишние (


  • 1

#3 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 18 February 2015 - 18:45

Параметр запуска армы -showScriptErrors прописан в стиме?

И еще что то я не припомню команды actions, хотя могу ошибаться


Сообщение отредактировал Djon: 18 February 2015 - 19:03

  • 1

#4 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 18 February 2015 - 20:02

И еще что то я не припомню команды actions, хотя могу ошибаться

actions - массив с индексами (Его собственная глобальная переменная)
actions set [index, var] - присвоение элементу с индексом index массива actions переменной var
addAction - возвращает индекс этого действия, так что его можно смело как команду вместо var вписывать в вышенаписанное
obj addAction [
	"script", //Имя
	"script.sqf", //Скрипт (Можно писать в {})
	"", //Аргументы для передачи в скрипт
	1, //Приоритет (Чем выше тем выше в списке будет ваша команда)
	true, // If set to true, players see "Titletext" at mid-lower screen, as they approach the object
	true, //Если true то окно действий закроется при выполнение действия
	"", //One of the key names defined in bin.pbo (e.g. "moveForward")
	"true" //!Условие! - когда условие вернет true, тогда действия появится в списке иначе его не будет
	//Ваш случай: "(A distance B) < 5" (По умолчанию стоит условие на радиус 15 метров)
]

Сообщение отредактировал vlad333000: 18 February 2015 - 20:05

  • 1

#5 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

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

Отправлено 18 February 2015 - 20:03

со скобками точно напутали, уберите лишние (

if ((A distance B) <= 5) then {

 

actions = [0];

 

actions set [0, player addAction [" Текст ", {

 

A moveInDriver B;

 

} ] ] };

Да скобку то я поправил, это я тут не дописал ее, а вот актион так и не появился!?


  • 0

#6 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 18 February 2015 - 20:16

ее не дописывать нужно а убрать вроде как

if (A distance B <= 5) then {

 

Хотя это скорее всего не причина


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


Попробуй так еще, хотя это уже метод тыка пожалуй

actions set [0, "player addAction [' Текст ', {
 
A moveInDriver B;
 
} ] "] };

Сообщение отредактировал Djon: 18 February 2015 - 20:08

  • 1

#7 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 18 February 2015 - 20:17

Djon,

array = ["Пусто","Пусто","Пусто","Пусто","Пусто"];
array set [0, "Тут что-то есть"];
array set [2, player addAction ["Первое действия", "hint 'hello'"]];

Результат:

array = ["Тут что-то есть","Пусто",0,"Пусто","Пусто"];

Вот

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


Сообщение отредактировал vlad333000: 18 February 2015 - 20:16

  • 1

#8 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

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

Отправлено 18 February 2015 - 20:18

Как раз дело и было в скобке))))))


  • 0

#9 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 18 February 2015 - 20:20

Djon, после присвоения 

player removeArction (actions select 0); //Удаление у игрока действия с индексом 0

Сообщение отредактировал vlad333000: 18 February 2015 - 20:21

  • 0

#10 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 18 February 2015 - 20:23

D_Donskoy, Хотя с позиции логики конечно же то выражение, что вы писали было бы правильным, НО Арма считает иначе))) 


  • 0

#11 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 18 February 2015 - 20:27

Djon, с точки зрения программирования/скриптописания она делает все правильно:

Т к if один и без каких-либо задержек, то arma выполняет его сразу при старте миссии, а т к условие не выполняется, то идет дальше и натыкается на конец скрипта, где arma идет гулять себе дальше по просторам её скриптов от BIS


Сообщение отредактировал vlad333000: 18 February 2015 - 20:27

  • 0

#12 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 18 February 2015 - 20:33

vlad333000, Спасибо за информацию, со временем дойдет, обычно это бывает когда начинаю что-то делать и натыкаюсь на подобные команды и на практике усваивается уже) По этому к прочтению этой темы, в частности твоего примера, вернусь еще)))) 

Djon, с точки зрения программирования/скриптописания она делает все правильно:

Т к if один и без каких-либо задержек, то arma выполняет его сразу при старте миссии, а т к условие не выполняется, то идет дальше и натыкается на конец скрипта, где arma идет гулять себе дальше по просторам её скриптов от BIS

Влад я имел введу выражение 

((A distance B) <= 5)

с математической точки зрения будет правильнее чем

(A distance B <= 5) 

но арма (программирование) воспринимает второй вариант как верный.


Сообщение отредактировал Djon: 18 February 2015 - 20:35

  • 0

#13 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 18 February 2015 - 20:37

Djon, почему? Команды программирование отличаются от математики, только тем что все действия идут по порядку (Если явно это не указать скобками)

И в первом и во втором случае команды будут выполняться по-порядку: сначала distance, затем <= - если действия и так идут по порядку не имеет смысла указывать порядок вручную


Сообщение отредактировал vlad333000: 18 February 2015 - 20:40

  • 0

#14 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 18 February 2015 - 20:39

 

Djon, после присвоения 

player removeArction (actions select 0); //Удаление у игрока действия с индексом 0

Только сейчас доперло))) Спасибо еще раз)


  • 0

#15 OFFLINE   D_Donskoy

D_Donskoy

    Старшина

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

Отправлено 18 February 2015 - 20:41

Е.П.Т.

Снова что то не так.

Суть такова:

Init.sqf

               -  #include " Папка \ Action.sqf"

 

Action.sqf

              - if (А distance В <= 50) then {

                actions = [5];

                actions set [5, player addAction [" Move In Driver B ", {A moveInDriver B;}]]}; - Вот это не работает.

 

 

Однако, убираю условие - if и все Ок.

                actions = [5];

                actions set [5, player addAction [" Move In Driver B ", {A moveInDriver B;}]]}; - А это не работает.

В чем дело? Как правильно задать if?


Сообщение отредактировал D_Donskoy: 18 February 2015 - 20:43

  • 0

#16 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 18 February 2015 - 20:43

D_Donskoy,

Еще раз повторю


Т к if один и без каких-либо задержек, то arma выполняет его сразу при старте миссии, а т к условие не выполняется, то идет дальше и натыкается на конец скрипта, где arma идет гулять себе дальше по просторам её скриптов от BIS

 
  • 0

#17 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 18 February 2015 - 20:43

Djon, почему? Скрипты программирование отличаются от математики, только тем что все действия идут по порядку (Если явно это не указать скобками)

И в первом и во втором случае команды будут выполняться по-порядку: сначала distance, затем <= - если действия и так идут по порядку не имеет смысла указывать порядок вручную

Ну смотри в первом случае скрипт не фурычит а во втором все окаюшки, то есть арма не воспринимает то что в дублирующих скобках как выражение сравниваемое с 5 в данном случае. Хотя по сути тебе виднее я думаю. 


  • 0

#18 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 18 February 2015 - 20:48

D_Donskoy, Для начала для теста сделай задержку перед запуском этого дела и при старте все условия должны быть соблюдены на момент окончания задержки. Если не сработает тогда уже ищи ошибку.  

P.S. Задержка нужна в таких случаях всегда потому, что при старте if может быть выполнен раньше чем прогрузятся твои А и В. 


Сообщение отредактировал Djon: 18 February 2015 - 20:49

  • 0

#19 OFFLINE   vlad333000

vlad333000

    Полковник

  • Пользователи
  • 3224 сообщений
  • Откуда:Кострома

Отправлено 18 February 2015 - 20:49

Djon, ищите проблему в другом т к сейчас проверил в редакторе оба варианта работают наура


  • 0

#20 OFFLINE   Djon

Djon

    Старшина

  • Пользователи
  • 433 сообщений

Отправлено 18 February 2015 - 20:54

Влад ну вполне может быть и задержки не хватает. В первом случае зависит от А и В и их появлении в нужном месте а во втором просто экшен игроку который по любому появляется первым)


а ты про скобки?


  • 0




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