Модератор форума: Slon |
Форум РЕДАКТОР - ArmA 2 Скрипты Глобальная переменная, рандом |
Глобальная переменная, рандом |
› Четверг
› 12.03.2015
› 00:23
› Сообщение #
Доброго здоровья, форумчане. Скачал недавно скрипт бомбы к Арме 2, но вот беда, в нём присутствует команда рандома,
которая работает для каждого игрока в отдельности. Объясните, уважаемые, как мне создать передачу значения переменной, чтобы при запуске сервера сработал рандом, код сгенерировался и у каждого игрока он был бы одинаков. Кажется, скрипт написан для одиночной игры, потому как в мультиплеере после деактивации бомбы одним игроком, возможность деактивировать остаётся за другим и для него код уже совсем иной.
|
› Четверг
› 12.03.2015
› 01:11
› Сообщение #
надо её сделать не просто Глобальной. а Сетевой.
лучше всего это делать через переменные привязанные к неуничтожаемым объектам. https://community.bistudio.com/wiki/getVariable https://community.bistudio.com/wiki/setVariable скрипт будет такой например объект - Логика (синий квадрат-как модуль). - имя Lk if isServer then { Lk setVariable ["CODE", [round(random 9), round(random 9), round(random 9), round(random 9), round(random 9), round(random 9)], true] }; sleep 0.5; CODE = Lk getVariable "CODE"; сервер создаст переменную, остальные её прочитают |
› Четверг
› 12.03.2015
› 15:31
› Сообщение #
Slon, спасибо, помогло. Если не затруднит, объясни, как изменить скрипт, чтобы переменные работали, как Сетевые?
а то после деактивации бомбы одним игроком, за другим всё ещё сохраняется его Личное состояние переменной. В этой области скриптов ещё не разобрался, поэтому приходится обращаться к людям за помощью. |
› Четверг
› 12.03.2015
› 15:47
› Сообщение #
|
› Четверг
› 12.03.2015
› 17:26
› Сообщение #
_code = _this select 0; - переменная кода, то, что я сделал Сетевой переменной "CODE"
_inputcode = _this select 1; - как я понял, это обозначает игрока, вводящего код. Вот сами скрипты, откуда были взяты. http://www.armaholic.com/page.php?id=15032 |
› Четверг
› 12.03.2015
› 18:43
› Сообщение #
Со скриптами понятно
а что по сюжету? |
› Четверг
› 12.03.2015
› 19:39
› Сообщение #
Slon, разминирование бомбы закрепляется только за одним игроком, а нужно глобально, на весь сервер. Саму суть setVariable я понял, но как его использовать в этом случае, не вполне. Как быть с _DEFUSED и приватными переменными?
|
› Четверг
› 12.03.2015
› 20:32
› Сообщение #
это проверка совпадения кода. результат - _DEFUSED - true/false савпало - разминировал. не совпало рвануло. этот скрипт http://arma.at.ua/forum/46-11122-166716-16-1426111892 уже сделал код деактивации доступным всем. закрепляй за всеми теперь расскажи. как игроки получают доступ к меню деактивации ? |
› Четверг
› 12.03.2015
› 21:29
› Сообщение #
Цитата этот скрипт http://arma.at.ua/forum/46-11122-166716-16-1426111892 уже сделал код деактивации доступным всем. да, но код деактивации не даёт полного выхода из положения Цитата закрепляй за всеми в том то и вопрос. _DEFUSED как ты заметил, это проверка совпадения кода. Результат - _DEFUSED - true/false. Но если один игрок разминирует бомбу, у второго продолжит тикать таймер, будто ничего не изменилось. Каким образом я могу сделать _DEFUSED такой же сетевой переменной, как и CODE, чтобы бомба была "одна на всех"? Тоже через логику? Цитата как игроки получают доступ к меню деактивации ? через меню действий addAction. Вот вызываемый через него скрипт. Я его уже несколько изменил. Это скрипт таймера. Это последний скрипт, который вызывается при нажатии кнопки "ввод" на панели. |
› Четверг
› 12.03.2015
› 21:44
› Сообщение #
теперь понятно.
сделаем сетевую из DEFUSED там же где делали код if isServer then { Lk setVariable ["CODE", [round(random 9), round(random 9), round(random 9), round(random 9), round(random 9), round(random 9)], true]; }; sleep 0.5; DEFUSED = Nil; CODE = Lk getVariable "CODE"; три состояния nil - ожидание разминирования. true - разминировано false - рвануло в строке addAction , в конце есть условие используем его для отключения Ктототам addAction ["чтото", "файл", 0, 1,true, true, "", "isNil 'DEFUSED' "] изменения в таймере waitUntil {_timer = _timer - 1; sleep 1; hintsilent format ["Time: %1", _timer]; _timer < 0 || !isNil "DEFUSED"}; изменения в контроль деактивации private ["_code", "_inputcode", "_DEFUSED"]; _code = _this select 0; _inputcode = _this select 1; // compare arrays to see if code matches DEFUSED = [_code, _inputcode] call BIS_fnc_areEqual; publicVariable "DEFUSED"; ................... |
› Четверг
› 12.03.2015
› 22:17
› Сообщение #
Slon, сейчас буду проверять. Как я могу, используя меню действий, осуществить передачу переменной из одного скрипта в другой, не делая её глобальной? Читал у бисов насчёт параметров addAction, но что то у меня не работает эта схема, либо нужен пример
|
› Четверг
› 12.03.2015
› 22:18
› Сообщение #
это длинная запись для АА3
сделал изменения в посте № 10 |
› Четверг
› 12.03.2015
› 22:29
› Сообщение #
Slon, значит, в Arma 2 возможность передачи переменной в другой скрипт отсутствует?
|
› Четверг
› 12.03.2015
› 22:30
› Сообщение #
в какой другой? откуда куда?
вот тебе пробник DEFUSED = nil; Player addAction ["12345", "file.sqf", 0, 1,true, true, "", "isNil 'DEFUSED'"]; sleep 3; DEFUSED = true; publicVariable "DEFUSED"; |
› Четверг
› 12.03.2015
› 22:39
› Сообщение #
Slon, пример: есть у меня скрипт, где я создаю технику veh1 = createVehicle и т.д.
далее, я добавляю в этом же скрипте addAction (который будет вызывать скрипт №2) игроку, и мне нужно употребить переменную с тем же значением (именно та, созданная техника, которая значится как veh1), уже в скрипте №2. Есть варианты? Добавлено (12.03.2015, 22:39) Цитата вот тебе пробник DEFUSED = nil; Player addAction ["12345", "file.sqf", 0, 1,true, true, "", "isNil 'DEFUSED'"]; насчёт этого я уже понял, addAction с передачей переменной мне нужен для совсем другого, не бомбы |
| |||
Чат сайта |