Вопросы реализации в игре через скрипты ЕРМ генерации случайных чисел/шансов/вероятностей теперь можно обсуждать ЗДЕСЬ
Для более глубокого понимания вопроса ГСЧ обязательно ознакомьтесь со статьёй Случайность как фактор нейтрализации тактики 
Что это за синтаксис???
Quote:!!VRy2:S0 T20000000 R1/y2;
Сперва получаем случайное число от текущего времени, затем устанавливаем значение генератора в оное.
Вопрос:
В WoG до Era, насколько помню (могу ошибаться), ГСЧ был косвенно привязан к времени, что накладывало запрет на попытки "реплеев вручную". А есть ли возможность вернуть этот или подобный ГСЧ в Эру в виде мода (и что для этого нужно)?
ГСЧ не привязан ко времени, но есть вог-команда VR:T для инициализации генератора из текущего времени. Собственно, много лет назад я написал программу, которая все скрипты в папке переводит на VR:R (обычная генерация). Ты повторы сражений имеешь в виду?
(07.12.2013 18:59)Berserker Wrote: [ -> ]Ты повторы сражений имеешь в виду?
События на КП. Сражения детально смоделировать не удавалось - "удача" и "мораль" влияли всё же рандомно..
Ок, а перехват VR:R и передача вместо него VR:T реально?
(подозреваю, правда, что тогда совсем шиза начнётся)
Программу писал этак в 2007-м.
http://rghost.ru/50769996
Поместить в папку с ЕРМ-скриптами и запустить. Если модов и папок много, то в каждую.
Не, не катит. Она только script*.erm обрабатывает. Тогда вручную или утилитами для замены строк по регулярному выражению:
!!VR([^T])*T([^;]*);
на
!!VR\1R\2;
Ээ..
(07.12.2013 22:07)WWWoWaNuS Wrote: [ -> ]Ок, а перехват VR:R и передача вместо него VR:T реально?
(07.12.2013 22:20)Berserker Wrote: [ -> ]!!VR([^T])*T([^;]*);
на
!!VR\1R\2;
Не наоборот ли для моего случая?
Нужно менять VR:T (T - Time - время) на VR:R.
(07.12.2013 22:07)WWWoWaNuS Wrote: [ -> ]Ок, а перехват VR:R и передача вместо него VR:T реально?
VR:T возвращает одно и то же значение при вызове подряд. Это вообще не случайное число, а остаток от деления времени. Он практически не используется. Вообще, ЕРМ тут не при чём.
Я не смог найти, где в ВоГе делается то, о чём ты говоришь, но оно определённо делается. Для СоДа есть даже спец. прога, показывающая деревья навыков героев, а в ВоГе они случайны.
Ранее спрашивал про VR:R и VR:Т.
Horn, 28 Oct 2006, 17:23 Wrote:Druin,25 Sep 2006, 13:22 Wrote:Системного времени...
Чесс гря сам до конца не понимаю где там что и как, но не раз сталкивался в паскале с следущим: простой генератор при каждом запуске програмы выдавал одну и туже комбинацию чисел, генератор со временем всегда разную...
1. Комп не умеет генерить настоящие случайные числа, т.к. любой алгоритм (пока что) вещь в принципе жестко детерминированная.
2. Стандартный ГСЧ выдает последовательность псевдослучайных чисел, каждое из которых однозначно определяет последующие по некоторому правилу (тут есть разные варианты, чаще всего используют остатки от деления на большие числа). Текущее число, по которому будет определяться следующее, называется "зерном" генератора. В сетевом бою при ударе одного монстра другим, например, урон на каждой машине рассчитывается отдельно, а не передается по сети. Но для этого в начале боя машины синхронизируются, устанавливая одинаковое зерно (в ЕРМ есть специальная команда для этого). И в дальнейшем нужно, чтобы количество запусков ГСЧ на машинах игроков строго совпадало, иначе может случиться та самая печально известная рассинхронизация - у одного игрока ходит гоблин противника, а на компе противника выпал бОльший урон, в результате этот гоблин уже труп и ходит другой отряд.
3. VR:R - это тот самый ГСЧ, стартующий всегда с одной и той же точки. То есть первый его вызов (первый - после запуска НММ) даст всегда Х1, второй - Х2 и т.д.
4. А в VR:Т в качестве зерна используется системное время (с точностью до миллисекунд), поэтому иногда он предпочтительнее. С другой стороны, если его вызвать в цикле несколько раз подряд, то он возможно вернет одно и то же число, ведь цикл успеет прокрутиться несколько раз в течение одной миллисекунды.
5. В ТЕ я сделал так - в начале партии генерю число с помощью VR:Т, записываю в переменную, а в дальнейшем вызываю только VR:R, но к результату "подмешиваю" это число. Интересующиеся могут глянуть текст функции 23013 (она генерит случайное число между х1 и х2) скрипта01. Есть еще интересная функция 23017, переставляющая случайным образом значения v-переменных в диапазоне vx1 - vx2.
Нашёл на
DF2, м.б. кому полезно будет..
А какой командой можно установить генератор случайных чисел, чтобы вышедшее значение не добавлялось к переменной, а устанавливалось?
Просто установи переменную в 0 перед этим. 0+х=х.
Guys, do you have a good randomizer? I always get same values on reload
Using this