|
|
Модератор форума: Slon |
Форум РЕДАКТОР - ArmA 2 Вопрос-Ответ рандомный выбор |
рандомный выбор |
› Среда
› 18.11.2009
› 17:29
› Сообщение #
Как сделать чтоб команды выбиралось случайно.
К приму случайный выбор звуков или просто команд: playsond "test" playsond "test1" и т.д ? |
› Среда
› 18.11.2009
› 17:52
› Сообщение #
Рендом работает только с цифрой, диапазон выбирается от 0 до Х
Number = random x На выходе дробное число, необходимо округлять Number = floor x Дальше используется оператор ветвлений switch () do {exp} Итак что получилось (формат sqf) Switch (floor (random 10)) do { |
› Среда
› 18.11.2009
› 19:54
› Сообщение #
спасибо
|
› Четверг
› 17.02.2011
› 04:01
› Сообщение #
А в рандом можно вписывать комманды например анимацию?
Сообщение отредактировал Strannik2024 - Четверг, 17.02.2011, 09:00
|
› Понедельник
› 21.02.2011
› 15:51
› Сообщение #
Slon, а реально ли как нибудь сделать рандом в мультиплеере? Я написал скрипт:
В котором Doc - счётчик документов (надо собрать три, изначально равен нулю), Do первоначально равен трём. По сюжету на карте валяется шесть кейсов, в которых лежит три документа, распределяемых рандомно между кейсами. В сингле всё прекрасно работает, а в мультиплеере возникает проблема - для каждого игрока рандом рассчитывается отдельно. То есть, если, например, на моём компьютере кейс будет пустым, то на других может отобразиться, что в нём оказался документ. Также странно ведёт себя переменная Doc, показывая разным игрокам разные значения. Жду помощи! P.S если внести в скрипт изменение ?(isServer):Doc1 = round(random 1); То становится ещё хуже, так как переменная Doc прибавляется только на одном компьютере. |
› Понедельник
› 21.02.2011
› 20:45
› Сообщение #
Для сетевой скрипт нужно разбить на части, для сервера и клиентов
На карте поставь логику имя LK , она будет почтовым яшиком тут добавляется действие для кейсов.
Code Eho_doc = -1; { _x addAction ["Открыть чемодан", "file_doc.sqf"]; } forEach [doc_0, doc_1, doc_2, doc_3, doc_4, doc_5]; - имена кейсов Бок для сервера, цикл, завершается после сбора всех документов. If isServer then { _seiv = []; While {count _seiv < 3} do { - выбор трёх штук _dk = [doc_0, doc_1, doc_2, doc_3, doc_4, doc_5] select (floor (random 5.4)); if ! (_dk in _seiv) then { _seiv set [count _seiv, _dk]; - список выбраных }; }; While { LK setVariable ["Val_Doc", _seiv, true]; - передача списка всем игрокам count _seiv > 0 } do { Eho_doc = -1; - переменная для общения с игроками publicVariable "Eho_doc"; WaitUntil {Eho_doc > -1}; - ожидание вскрытия кейса _seiv = _seiv - [_seiv select Eho_doc]; - из списка убирается вскрытый ящик }; hint "ПУСТО"; }; Файл file_doc.sqf
Code _nm = (LK getVariable "Val_Doc") find (_this select 0); - проверка наличие этого кейса в списке (-1 - пусто) (_this select 0) removeAction (_this select 2); if (_nm > -1) then { hint "Тут есть документы"; Eho_doc = _nm; publicVariable "Eho_doc"; }; |
› Понедельник
› 21.02.2011
› 21:08
› Сообщение #
Slon, спасибо! Только я не очень понимаю как это работает, а точнее, где у нас счётчик документов и
" _dk = [doc_0, doc_1, doc_2, doc_3, doc_4, doc_5] select (floor (random 5.4));" находится именно в том месте. Если можно, то поясните пожалуйста |
› Понедельник
› 21.02.2011
› 21:14
› Сообщение #
счётчик документов на сервере в переменной _seiv
в ней находятся имена кейсов переменная передаётся для чтения игрокам через логику и её переменную LK setVariable ["Val_Doc", _seiv, true]; игрок может узнать сколько ещё осталось Прикрепления:
Doc.utes.rar
(1.5 Kb)
|
| |||
| |||
Чат сайта |