Jump to content


Photo

Вопросы по скриптингу

Arma3 как плотформа для созда Скритпы

  • Please log in to reply
1486 replies to this topic

#901 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1831 posts

Posted 28 November 2017 - 23:19

Допустим я вызвал текстовый документ формата sqf и мне нужно что бы он проверил не являться ли переменная k1 активной(true) если да тогда выводил надпись hint "true" если нет тогда hint "false"
Так вот как это написать кодом?
Вот то что я написал(понятно что оно не работает) Вопрос в том что нужно исправить?
if (k1 = true) then {hint "true"} else {hint "false"}; 

Почти правильно, косяк -- используется

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

, а не

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

. Плюс я бы после hint'ов точки с запятой поставил, хотя и без них работать будет.
 

И да кто может объяснить что такое scheduled и соответственно unscheduled-среда?

Скажем так, unscheduled-среда используется для важных дел, поэтому код там выполняется от начала и до конца без "замораживания". Естественно, ни о каких задержках (например, с использованием sleep) там не может идти речи. Например, большинство обработчиков событий в этой среде крутится -- хреново же будет, если, например, нажатие на кнопку будет обработано через 10 секунд.
Ну а scheduled-среда используется для остального. Например, сценарий непрерывного создания тачек для игроков раз в 5 минут, если игроки поблизости -- никто по большому счёту ведь не заметит, тачки создались через 5 минут, или 5 минут 10 секунд.


Edited by Schatten, 28 November 2017 - 23:29.

  • 0

#902 OFFLINE   Rabbit_V_HD

Rabbit_V_HD

    Рядовой

  • Пользователи
  • 28 posts
  • Откуда:Kiev

Posted 29 November 2017 - 11:40

 

Допустим я вызвал текстовый документ формата sqf и мне нужно что бы он проверил не являться ли переменная k1 активной(true) если да тогда выводил надпись hint "true" если нет тогда hint "false"
Так вот как это написать кодом?
Вот то что я написал(понятно что оно не работает) Вопрос в том что нужно исправить?
if (k1 = true) then {hint "true"} else {hint "false"}; 

Почти правильно, косяк -- используется

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

, а не

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

. Плюс я бы после hint'ов точки с запятой поставил, хотя и без них работать будет.
 

 

 

Что я делаю не так??
if (k1 == true) then {hint "true";} else {hint "false";};20171129092031_1.jpg?extra=llLVVyyWhav7-


  • 0

#903 OFFLINE   HarryWorner

HarryWorner

    Лейтенант

  • Модераторы
  • 1035 posts

Posted 29 November 2017 - 12:12


Что я делаю не так?? if (k1 == true) then {hint "true";} else {hint "false";};

 

Обычно удобно писать так:

if (k1) then {hint "true";} else {hint "false";};

Если k1 вообще нигде не использовалась до этого, то код сверху не будет работать из-за того что переменная не инициализирована.


  • 0

#904 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1831 posts

Posted 29 November 2017 - 12:45

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

.


  • 0

#905 OFFLINE   Rabbit_V_HD

Rabbit_V_HD

    Рядовой

  • Пользователи
  • 28 posts
  • Откуда:Kiev

Posted 29 November 2017 - 14:26

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

.

Очень протупил забыл создать переменную k1, до это го думал что переменная(та же к1) всегда изначально false, почитав про переменные понял что пока я не создам эту переменную она вообще не будет существовать... Ну теперь буду знать на будущее...
Дописал строчку где написал: k1 = false;

Теперь это всё выглядит так:

hint"Запущен";
k1 = false;
sleep 1;
if (k1 == true) then {hint "true";} else {hint "false";};

Но все равно ошибка...


  • 0

#906 OFFLINE   Schatten

Schatten

    Капитан

  • Пользователи
  • 1831 posts

Posted 29 November 2017 - 14:45

Rabbit_V_HD, похоже, таким образом нельзя сравнивать напрямую с true/false.


  • 0

#907 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 29 November 2017 - 15:39

Schatten, в одном из обновлений А3 оператор == похерили по полной, и теперь он может сравнивать только числа (И еще пару типов: объекты и еще что-то), любое другое сравнение будет ошибочным. Нужно использовать isEqualTo, если нужно сравнить два значения

PS == похерили настолько, что он при любом раскладе медленнее, чем isEqualTo (Даже != медленнее, чем !isEqualTo (Один оператор != против двух ! и isEqualTo), приэтом isEqualTo не бросает ошибку, если сравниваются разные типы (Вообщем, хз зачем теперь существуе ==, кроме как для обратной совместимости))

Edited by vlad333000, 29 November 2017 - 20:33.

  • 0

#908 OFFLINE   Rabbit_V_HD

Rabbit_V_HD

    Рядовой

  • Пользователи
  • 28 posts
  • Откуда:Kiev

Posted 29 November 2017 - 15:58

Schatten, в одном из обновлений А3 оператор == похерили по полной, и теперь он может сравнивать только числа, любое другое сравнение будет ошибочным. Нужно использовать isEqualTo, если нужно сравнить два значения
PS == похерили настолько, что он при любом раскладе медленнее, чем isEqualTo (Даже != медленнее, чем !isEqualTo (Один оператор != против двух ! и isEqualTo), приэтом isEqualTo не бросает ошибку, если сравниваются разные типы (Вообщем, хз зачем теперь существуе ==, кроме как для обратной совместимости))

Насколько я понял скрипт должен выглядит так?:
hint"Запущен";
k1 = false;
sleep 1;
if (k1 isEqualTo true) then {hint "true";} else {hint "false";};
  • 0

#909 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 posts
  • Откуда:Севастополь

Posted 29 November 2017 - 16:12

if k1 then {hint "true"} else {hint "false"};
if (!k1) then {hint "false"} else {hint "true"};


  • 0

#910 OFFLINE   Rabbit_V_HD

Rabbit_V_HD

    Рядовой

  • Пользователи
  • 28 posts
  • Откуда:Kiev

Posted 29 November 2017 - 21:48

Попробовал оба варианта

if (k1 isEqualTo true) then {hint "true";} else {hint "false";}; // Вар1


if k1 then {hint "true"} else {hint "false"};  // Вар2

if (!k1) then {hint "false"} else {hint "true"};

Оба работают, СПАСИБО за помощь!

 

if k1 then {hint "true"} else {hint "false"};
if (!k1) then {hint "false"} else {hint "true"};

Только не понял зачем писать еще одно условие но уже с (если это для примера как задавать условие со значением false вопросов нет)


Edited by Rabbit_V_HD, 29 November 2017 - 21:49.

  • 0

#911 OFFLINE   Dimon UA

Dimon UA

    Ст.сержант

  • Пользователи
  • 304 posts
  • Откуда:Севастополь

Posted 29 November 2017 - 22:41

для примера


  • 0

#912 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 posts

Posted 12 December 2017 - 18:18

кто нибудь точно знает:

  может ли DirectPlay ID у подключившегося игрока быть таким же как у до этого отключившегося (без рестарта сервера).

  и можно ли с помощью onPlayerConnected{DPID=str _id}; (или как угодно ещё) получить его точный набор цифр (не округлённый)

?


Edited by Ilias, 12 December 2017 - 18:28.

  • 0

#913 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 12 December 2017 - 20:49

можно ли с помощью onPlayerConnected{DPID=str _id}; (или как угодно ещё) получить его точный набор цифр (не округлённый)

Нет, максимум можно через имя маркера, поставленного самим игроком узнать, но и то не факт

PS Вообще не представляю нахрена он вам потребовался...

Edited by vlad333000, 12 December 2017 - 20:51.

  • 0

#914 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 posts

Posted 12 December 2017 - 21:48

иет, максимум можно через имя маркера, поставленного самим игроком узнать, но и то не факт 

например как?

Вообще не представляю нахрена он вам потребовался...

Для записи состояния скриптов на клиентах, было интересно есть ли доступный, абсолютно уникальный id у подключающихся, придётся видимо тогда журнал сделать


  • 0

#915 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 12 December 2017 - 22:28

например как?

Хз, там вроде как если юзверь поставил маркер, то в скриптовом представлении этого маркера (Это строка с уникальным названием маркера) вроде этот ID и используется

Для записи состояния скриптов на клиентах, было интересно есть ли доступный, абсолютно уникальный id у подключающихся

Стимовский UID чем не угодил?

Edited by vlad333000, 12 December 2017 - 22:33.

  • 1

#916 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 posts

Posted 13 December 2017 - 01:00

Стимовский UID чем не угодил?

Шанс ошибки (переподключение в достаточно короткий промежуток времени), не то чтобы я не понимал что если не писать полностью мусор это почти не возможно, просто вообще всё делаю не на 99.9.. или меньше %, здесь это либо id уникальный для каждого подключения либо поочерёдная обработка каждого подключения, отключения


Edited by Ilias, 13 December 2017 - 01:21.

  • 0

#917 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 13 December 2017 - 01:34

Ilias, какой шанс ошибки? Вы релаьно думаете что игрок сможет полностью переподключится к серверу в течении одного фрейма симуляции? Даже если такое возможно в какой-либо вселенной, то такого игрока либо сразу отключит от сервера (Невозможно нахождение двух клиентов с одним UID одновременно на сервере), либо они будут иметь разные clientID (Которые уникальны в каждый момент времени для каждого игрока не зависимо ни от чего)
  • 0

#918 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 13 December 2017 - 01:39

PS Если ваш код настолько зависит от подключения игрока, то вам реально стоит его переписать...
  • 0

#919 OFFLINE   Ilias

Ilias

    Прапорщик

  • Пользователи
  • 512 posts

Posted 13 December 2017 - 01:51

 

например игрок может переподключиться в промежуток между двумя обращениями клиенту от скрипта (суть записи состояния в обходе оценки при каждом обращении) (clientID очевидно сами по себе также оставляют возможность скрипту пропустить его присвоение другому клиенту)

PS Если ваш код настолько зависит от подключения игрока, то вам реально стоит его переписать... 

читайте внимательнее, дело не этом


Edited by Ilias, 13 December 2017 - 02:04.

  • 0

#920 OFFLINE   vlad333000

vlad333000

    Полковник

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

Posted 13 December 2017 - 02:04

Ilias, я правильно понял: есть скрипт отправляющий запрос на клиенты с определенной частотой, для которого один и тот же клиент подключённый в разные моменты времени должен считаться как два разных клиента?
При подключении клиента на сервере генерируете специальный ID (Просто счетчик, постоянно возрастающий с каждый подключением), отправляете этот специальный ID клиенту, после чего, на каждый ваш запрос он должен отвечать вместе с этим специальным ID
  • 0




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