Wake of Gods Forum | Форум Во Имя Богов
ГСЧ - Генератор случайных чисел & ЕРМ - Printable Version

+- Wake of Gods Forum | Форум Во Имя Богов (http://wforum.heroes35.net)
+-- Forum: Герои Меча и Магии 3.5 WoG/ERA (/forumdisplay.php?fid=99)
+--- Forum: Скрипты (/forumdisplay.php?fid=103)
+--- Thread: ГСЧ - Генератор случайных чисел & ЕРМ (/showthread.php?tid=650)


ГСЧ - Генератор случайных чисел & ЕРМ - Berserker - 19.04.2009 20:49

Вопросы реализации в игре через скрипты ЕРМ генерации случайных чисел/шансов/вероятностей теперь можно обсуждать ЗДЕСЬ


Для более глубокого понимания вопроса ГСЧ обязательно ознакомьтесь со статьёй Случайность как фактор нейтрализации тактики Yes


RE: Ваши вопросы по ERM-скриптам - Bes - 26.10.2009 13:04

Что это за синтаксис???
Quote:!!VRy2:S0 T20000000 R1/y2;



RE: Ваши вопросы по ERM-скриптам - Berserker - 26.10.2009 16:33

Сперва получаем случайное число от текущего времени, затем устанавливаем значение генератора в оное.


RE: Случайность как фактор нейтрализации тактики - WWWoWaNuS - 07.12.2013 17:56

Вопрос:
В WoG до Era, насколько помню (могу ошибаться), ГСЧ был косвенно привязан к времени, что накладывало запрет на попытки "реплеев вручную". А есть ли возможность вернуть этот или подобный ГСЧ в Эру в виде мода (и что для этого нужно)?


RE: Случайность как фактор нейтрализации тактики - Berserker - 07.12.2013 18:59

ГСЧ не привязан ко времени, но есть вог-команда VR:T для инициализации генератора из текущего времени. Собственно, много лет назад я написал программу, которая все скрипты в папке переводит на VR:R (обычная генерация). Ты повторы сражений имеешь в виду?


RE: Случайность как фактор нейтрализации тактики - WWWoWaNuS - 07.12.2013 22:07

(07.12.2013 18:59)Berserker Wrote:  Ты повторы сражений имеешь в виду?
События на КП. Сражения детально смоделировать не удавалось - "удача" и "мораль" влияли всё же рандомно..

Ок, а перехват VR:R и передача вместо него VR:T реально? (подозреваю, правда, что тогда совсем шиза начнётся)


RE: Случайность как фактор нейтрализации тактики - Berserker - 07.12.2013 22:20

Программу писал этак в 2007-м.
http://rghost.ru/50769996
Поместить в папку с ЕРМ-скриптами и запустить. Если модов и папок много, то в каждую.

Не, не катит. Она только script*.erm обрабатывает. Тогда вручную или утилитами для замены строк по регулярному выражению:
!!VR([^T])*T([^;]*);
на
!!VR\1R\2;


RE: Случайность как фактор нейтрализации тактики - WWWoWaNuS - 08.12.2013 02:33

Ээ..
(07.12.2013 22:07)WWWoWaNuS Wrote:  Ок, а перехват VR:R и передача вместо него VR:T реально?
(07.12.2013 22:20)Berserker Wrote:  !!VR([^T])*T([^;]*);
на
!!VR\1R\2;
Не наоборот ли для моего случая?


RE: Случайность как фактор нейтрализации тактики - Berserker - 08.12.2013 04:08

Нужно менять VR:T (T - Time - время) на VR:R.


RE: Случайность как фактор нейтрализации тактики - GrayFace - 17.12.2013 19:51

(07.12.2013 22:07)WWWoWaNuS Wrote:  Ок, а перехват VR:R и передача вместо него VR:T реально?
VR:T возвращает одно и то же значение при вызове подряд. Это вообще не случайное число, а остаток от деления времени. Он практически не используется. Вообще, ЕРМ тут не при чём.
Я не смог найти, где в ВоГе делается то, о чём ты говоришь, но оно определённо делается. Для СоДа есть даже спец. прога, показывающая деревья навыков героев, а в ВоГе они случайны.


RE: Случайность как фактор нейтрализации тактики - WWWoWaNuS - 18.12.2013 12:31

Ранее спрашивал про VR:R и VR:Т.
Актуальна ли инфо? (Click to View)
Нашёл на DF2, м.б. кому полезно будет..


RE: Ваши вопросы по ERM-скриптам - Alexander_Cw - 14.03.2015 16:37

А какой командой можно установить генератор случайных чисел, чтобы вышедшее значение не добавлялось к переменной, а устанавливалось?


RE: Ваши вопросы по ERM-скриптам - gamecreator - 14.03.2015 16:46

Просто установи переменную в 0 перед этим. 0+х=х.


RE: Ваши вопросы по ERM-скриптам - Alexander_Cw - 14.03.2015 17:03

gamecreator, спасибо!


RE: Ваши вопросы по ERM-скриптам - Valery - 17.07.2016 20:23

Guys, do you have a good randomizer? I always get same values on reload Mad

Using this




RE: Ваши вопросы по ERM-скриптам - Bes - 17.07.2016 21:16

in PM using this simple code



RE: Ваши вопросы по ERM-скриптам - gamecreator - 17.07.2016 21:23

You can do something like this instead:



RE: Ваши вопросы по ERM-скриптам - Valery - 17.07.2016 22:05

In fact I have 3 random values to get in a row (v2-v4), so I thought time based will give same values.


RE: Ваши вопросы по ERM-скриптам - gamecreator - 17.07.2016 23:07

That's why bugyboy and I didn't suggest it.


RE: Ваши вопросы по ERM-скриптам - Valery - 17.07.2016 23:27

Not sure how to use your code: I want random level 8 monster (150-158)

!!VRv1:S0 T2147483647 &2147483647 R0/v1; set random seed to current time

I am lost, don't understand the bit part


RE: Ваши вопросы по ERM-скриптам - gamecreator - 18.07.2016 00:13

Both my and bugyboy's code are initialization-type. You only need to run it once, then you are free to generate whatever and however many times you need.


RE: Ваши вопросы по ERM-скриптам - Valery - 18.07.2016 01:42

ah now makes sense. Thanks both.

I put it in a timer and it runs once a week, before randomizer. When you said "one time", means really one time, in PI or so?


RE: Ваши вопросы по ERM-скриптам - gamecreator - 18.07.2016 01:51

Most likely. VR:R is essentially SoD random, I'm not sure if it's saved in the save file.

But you can execute it several times if you like, just not too often.


RE: Ваши вопросы по ERM-скриптам - Valery - 18.07.2016 02:34

But if it is not saved then I need to recall it in GM, like UN hacks? Will be executed quite often then.


RE: Ваши вопросы по ERM-скриптам - gamecreator - 18.07.2016 03:13

You can check easily if it's saved or not. Save the game and generate random value on load.
(18.07.2016 02:34)Valery Wrote:  Will be executed quite often then.
Do you save several times per turn and load every single of those saves?


RE: Ваши вопросы по ERM-скриптам - Valery - 18.07.2016 03:31

No, as quick saves mod replace previous quick save with the new one, so I have only a maximum of two saves daily, the automatic and the manual.


RE: Ваши вопросы по ERM-скриптам - gamecreator - 18.07.2016 03:41

Then I don't see a problem. You are calling it on load, not on save.


RE: Ваши вопросы по ERM-скриптам - Valery - 18.07.2016 04:13

Right now I only put it in a weekly timer, no on GM. So far there are no problems and random values are really random, I like it.


RE: Ваши вопросы по ERM-скриптам - Sedman7 - 10.04.2018 02:16

катастрофа, сломался рандом

Code:
ZVSE
!#TM20:S2/999/1/1;
!?TM20;
!!VRy1:S0;
!!VRy1:R100;
!!IF:M^%Y1^;
всегда получаю одно и тоже значение - 36
всё работало хорошо, рандом работал как надо, создавал карту, добавлял скрипты и в один день заметил что рандом выдаёт одно и тоже число, в чем может быть причина?

ради эксперимента:
- удалил с карты все скрипты, оставил только этот, один, и всё равно не работает
- создал новую карту, пустую (2 замка только синий и красный), вставил туда этот скрипт, всё нормально работает


RE: Ваши вопросы по ERM-скриптам - Algor - 10.04.2018 13:34

Sedman7, если у тебя не куча рандом-команд за секунду выполняется, можно использовать VR:T вместо VR:R. Ну или вручную инициализировать генератор можно (доп. синтаксис VR:R).


RE: Ваши вопросы по ERM-скриптам - Sedman7 - 10.04.2018 16:54

(10.04.2018 13:34)Algor Wrote:  Sedman7, если у тебя не куча рандом-команд за секунду выполняется
нет, один скрипт на всю карту, полный текст скрипта я привёл, вопрос какбы вроде покачто решил но так и не понял в чем причина, суть в следующем:
было 2 игрока красный (игрок 1) и синий (игрок 2), играю красным, синему дал замок на пустыре и 2 жилища существ просто чтобы ему было чем заняться, рандом работал хорошо, потом я добавил статичного героя, розового (игрок 8) и НЕ дал ему замка, после этого начал виснуть рандом, одно и тоже число выдаёт. я удалил розового героя (игрок 8) и вместо него поставил коричневого (игрок 3) и дал коричневому замок и после этого рандом заработал нормально, хотя число 36 по прежнему выдается, как мне кажется, чаще остальных.
    В общем вроде как получилось что если у комп. игрока один статичный герой и нету замка, некуда ему ходить, то рандом зависает на одном и том же числе.

НО экспериментально повторить такую ситуацию я не смог, создал чистую карту кинул этот скрипт и таких же игроков без возможности ходить и всё работало нормально, но на карте которую создаю помогло изменение с розовго на коричневый цвет, это в высшей степени странно...


RE: Ваши вопросы по ERM-скриптам - ElfbI - 05.10.2019 12:54

Есть ли какой-нибудь способ замены стандартного генератора случайных чисел VR:R?


RE: Ваши вопросы по ERM-скриптам - Berserker - 05.10.2019 15:32

ElfbI, а какой нужен, сбалансированный?


RE: Ваши вопросы по ERM-скриптам - ElfbI - 06.10.2019 14:32

Berserker, который можно использовать для замены оного в скрипте 39 измененные специализации героев (39 wog - hero specialization boost) там в бою автокаст заклинания идет все время в одну тушку.


RE: Ваши вопросы по ERM-скриптам - PerryR - 06.10.2019 14:39

In 39 wog - hero specialization boost script it is not completely random. With every action, like wait, walk, defend the chance increases for the spell to trigger.


RE: Ваши вопросы по ERM-скриптам - ElfbI - 06.10.2019 18:28

PerryR, chance is ok. Autocast at one target every time is not ok.


RE: Ваши вопросы по ERM-скриптам - PerryR - 06.10.2019 18:51

VR:R sometimes bugs yes, it can happen that it always gives same result. I dont know how this happens... 102
Restart sometimes helps


RE: Ваши вопросы по ERM-скриптам - Berserker - 06.10.2019 20:19

VR:R uses Heroes native Random function, used throughout the game. It's not perfect. Would be nice to replace it with Mersenne Twister random number generator, but only with full multiplayer support.


RE: Ваши вопросы по ERM-скриптам - Igor - 25.01.2020 17:33

А можно ли создать в игре таймер непрерывно считающий от 1 до 100 мсек в фоне, а при определенном событии (атака монстра) останавливался и выдавал соответственно значение от 1 до 100. Просто игровой рандом не совсем рандом. Это добавит человеческий фактор как при подкидывании монетки, при этом сознательно повлиять на результат не получится.


RE: Ваши вопросы по ERM-скриптам - Berserker - 25.01.2020 18:31

Igor, смысла никакого нет. Большинство ГСЧ (генераторов случайных чисел) есть на деле генераторы псевдослучайных чисел. Можно при загрузке игры менять значение генератора так, что результаты будут разные.


RE: Ваши вопросы по ERM-скриптам - Igor - 25.01.2020 18:52

Berserker, в том и задумка, что без вмешательства человека невозможно получить истинный ГСЛ. А тут человек активируя событие каждый раз получает случайное время на таймере, т.к. неспособен повторить те же действия с точностью до мсек.


RE: Ваши вопросы по ERM-скриптам - Berserker - 25.01.2020 19:24

Время не случайная, а линейно возрастающая величина. В общем, такой практикой не пользуются нигде, ибо предсказать результат хорошего ГПСЧ невозможно, а против save/load есть возможность как раз генерировать новое стартовое значение генератора по микросекундам или любому другому источнику.


RE: Ваши вопросы по ERM-скриптам - Igor - 25.01.2020 19:44

Berserker, вот, а где взять этот источник? Мне на ум только цикличный таймер пришел. Или можно системное время получить на ERM в мсек? При сохранении игра подписывает время сейва, значит что-то такое должно быть.


RE: Ваши вопросы по ERM-скриптам - Algor - 25.01.2020 20:44

Igor, а чем не устраивает штатный рандом привязаный ко времени? !!VRy1:S0 T99 +1;


RE: Ваши вопросы по ERM-скриптам - Berserker - 25.01.2020 20:45

Поробуй:


Всем на заметку. VR:T есть убийца сетевой игры. Абсолютно не ясно, зачем он. Лучше заменить штатный генератор на Вихрь Мерсена, только я с ходу не разобрался, как это сделать аккуратно.


RE: Ваши вопросы по ERM-скриптам - Berserker - 25.01.2020 20:52

VR:T берёт остаток от деления timeGetTime (текущее время в миллисекундах в int32) на интервал генерации, что не верно, конечно же. Числа получаются смещённые.
Сделаю, скорее всего, VR:T равным VR:R и заменю, если получится, генератор.


RE: Ваши вопросы по ERM-скриптам - Igor - 25.01.2020 21:13

Berserker, круто, спасибо за инфу i nizkiy poklon.


RE: Ваши вопросы по ERM-скриптам - Algor - 25.01.2020 22:01

(25.01.2020 20:52)Berserker Wrote:  ...что не верно, конечно же. Числа получаются смещённые.
Чет не понял. А можно подробнее? VR:T не дает равномерное распределение или не привязан ко времени?

Так-то задача была в исключении возможности просчитать генератор (повторить последовательность).


RE: Ваши вопросы по ERM-скриптам - Berserker - 25.01.2020 22:06

В принципе, даёт, каюсь. Но это не ГСЧ от слова совсем. Номер миллисекунды как база.
Невозможность предсказать и так есть априрори. Невозможность повторить при загрузке лечится через VR:R с автосинхронизацией на всех клиентах.


RE: Случайность как фактор нейтрализации тактики - ElfbI - 15.04.2020 09:48

Berserker! Команды для генерации рабочие? Если вдруг работает, то простой пример в две строчки, пожалуйста!


RE: Случайность как фактор нейтрализации тактики - Berserker - 15.04.2020 21:05

ElfbI, а какая стоит задача?


RE: Случайность как фактор нейтрализации тактики - ElfbI - 16.04.2020 04:18

Berserker, Ну какая задача у гсч, та и стоит, - генерация случайных значений, например двоичного значения с равномерным распределением, выглядит довольно вкусно.


RE: Случайность как фактор нейтрализации тактики - Berserker - 16.04.2020 07:14

Смотри. ГСЧ в последних версиях Эры хороший в VR:T. Он с мультиплеером не дружит, но это Вихрь Мерсена, можешь почитать в вики.
Если же тебе нужно, чтобы, например, из 10 генераций значения 1-9 среднее было строго 5 (а сумма 50), то тогда по адресу.
Либо другой пример. Гарантированно 2 из 7 раз чтобы срабатывало какое-то свойство. Тогда тоже по адресу.
Но библиотека устарела и её нужно обновлять, если она хранит данные в сохранёнках.


RE: Случайность как фактор нейтрализации тактики - ElfbI - 16.04.2020 09:31

Berserker, ясно, спасибо. На новую эру когда еще перейду. .


RE: Случайность как фактор нейтрализации тактики - Zur13 - 20.04.2020 12:36

Так для размышлений, я в трансцендентных комбо артефактах просто сделал ЕРМ обертку над стандартным ГСЧ, которая позволяет параметрами передавать список исключений. В целом получается, что можно получить псевдослучайную последовательность в которой последние 13 чисел (почти)гарантировано не повторяются.


RE: Случайность как фактор нейтрализации тактики - ElfbI - 21.04.2020 00:43

Zur13, спасибо за информацию, гляну на досуге


RE: Сборка HoMM3 ERA с модами. - Berserker - 02.09.2020 21:37

Если используется VR:T, то генератор Вихрь Мерсенна, его в Эре 3 можно вручную синхронизировать, задав начальное значение генерации. А может стоит вообще ввести проверку на сетевую игру и в ней все использования T автоматически считать за R? Мы получим прекрасный рандом в скриптах в сингле и стабильность в мульте. Разве что состояние генератора не сохраняется в файлах сохранения. Можно, конечно, принудительно сохранять/загружать.


RE: Сборка HoMM3 ERA с модами. - Night - 02.09.2020 21:46

Berserker, погуглил значение - крутяк! Всегда нравились такие вещи, жаль, что мало понимаю в глубокой терминологии, но основы ухватил. Ореол вечности в таких вещах интригует, язык вселенной.

Вопрос по сути игры - если я будут T использовать для генерации Боевых полей в сетевой, это скажется на синхронизации? С условием, что игр Человек Vs Человек не будут вестись? Или можно наплевать в данном конкретном случае применения?


RE: Сборка HoMM3 ERA с модами. - Berserker - 02.09.2020 23:19

Night, генератор хороший, много где используется.
В сетевой состояние генератора игрой сотни раз пересылается туда-сюда, чтобы избежать рассинхронизации. Не дай бог на каком-то компьютере хоть один лишний вызов генератора без такого же вызова на другом — и всё. Потому видится мне, что как раз для сетевой игры нужно VR:T делать по действию аналогичным VR:R. Автоматически избавляемся от багов малой кровью. Я ещё поищу генератор на замену оригинальному.

Но любая замена штатного генератора вызова ненависть со стороны картоделов, которые привыкли, что для конкретной локации поле боя и препятствия будут конкретными. А с новым генератором они будут другими.


RE: Сборка HoMM3 ERA с модами. - Night - 02.09.2020 23:30

Ооох, и этот человек, спрашивает, почему он злюка... Ну место тролля у нас занято, остальные тоже заполняются или заняты уже, да и от тебя Berserker, слишком много полезного и незаменимого, но после таких ответов...Только злюка Sm

Мне пожалуйста простой логический оператор True/false - нет, не пользуй в сетевой для боевых полей убьёт. Или можно использовать, но ТОЛЬКО в этом случае, для боевых полей.
Я понял, что:
Quote:В сетевой состояние генератора игрой сотни раз пересылается туда-сюда
но на втором ПК не будет же таких же боевых полей, потому что Human VS Human не играю...

Поэтому:
Quote:Не дай бог на каком-то компьютере хоть один лишний вызов генератора без такого же вызова на другом — и всё

Мне не страшно или же...?? [Для рессивера !!BA:B]


RE: Сборка HoMM3 ERA с модами. - Berserker - 03.09.2020 00:38

Night, в этом случае используй VR:T смело.


RE: Сборка HoMM3 ERA с модами. - Bes - 03.09.2020 01:33

(02.09.2020 21:37)Berserker Wrote:  А может стоит вообще ввести проверку на сетевую игру и в ней все использования T автоматически считать за R? Мы получим прекрасный рандом в скриптах в сингле и стабильность в мульте.
если это реально уберёт часть сетевых вылетов - то СТОИТ Yes
тут просто надо здраво оценивать пользу для игроков, думаю все минусы такого решения куда меньше плюсов


RE: Случайность как фактор нейтрализации тактики - daemon_n - 03.09.2020 01:53

Night, может, sn:r?


RE: Случайность как фактор нейтрализации тактики - Berserker - 03.09.2020 02:59

Bes, это не исправит вылеты в имеющихся скриптах без VR:T, но позволит спокойно использовать VR:T без страха испортить мультиплеер.
По поводу замены штатного генератора вопрос остаётся открытым. Генерация препятствий и ландшафта боя привязана к старому генератору. Разве что найти место, где он используется и временно переключать на оригинальный, как предлагал RoseKavalier.


RE: Ваши вопросы по ERM-скриптам - SergOz - 12.02.2021 20:25

Иногда, нужно задать шанс срабатывания чего-либо с определённой вероятностью. Допустим с вероятностью 33%. Простое
в итоге может давать и 10% и 90%. Yes
Используя следующий код, мы получим шанс очень близкий к желаемому, а при многократном использовании - практически идеальный.
Мы будем получать числа 0; 1; 2; в произвольном порядке, но пока не выпадет весь ряд - числа не повторятся. Выбираем любое из этих чисел на срабатывание шанса (я выбрал 0). Понятно, что если мы хотим иметь шанс в 25%, то нужно создать массив из 4-х ячеек, а если шанс в 10% - то из 10 ячеек.
Можно ли оптимизировать этот скрип на ERM? (не ERM2 108)
Или, может, есть более "крутые" варианты?


RE: Ваши вопросы по ERM-скриптам - Berserker - 13.02.2021 03:37

SergOz, не нужно подобных усложнений.



RE: Ваши вопросы по ERM-скриптам - SergOz - 13.02.2021 04:09

Berserker, согласитесь, что в таком случае из, скажем, 10 вариантов, может ни разу не сгенерироваться число меньше 33. А единица из ряда 1;2;3; в 10 вариантах выпадет наверняка и не раз.
А ведь и там и там предполагаемые 33% вероятности.

Впрочем, это кто как посчитает нужным...


RE: Ваши вопросы по ERM-скриптам - Berserker - 13.02.2021 17:03

SergOz, отправлю тебя к азам теории вероятности. 33% — это и 6666 подряд мимо, 3333 подряд в цель.

То, что ты подсознательно хочешь, это не настоящие 33%, а ограниченный набор результатов с фиксированным соотношением успех/неудача. Скажем, ты хочешь что из 10 бросков гарантированно 3 выпали с ДА, 7 — с НЕТ. При этом если для первого броска вероятность ДА будет 3/10 = 30%, то для второго уже либо 2/9 = 22.2%, либо 3/9 = 33%. С каждым броском вероятности будут другие. Такой подход позволяет гарантировать сбалансированность на небольшом числе генераций, но он также достаточно детерминирован и с ним некорректно писать про фиксированные проценты. Корректно писать: в 3 из 10 раз. При это если все три раза выпали сразу, то следующие 7 бросков будут гарантированно провальными. У меня такой генератор есть в плагине, даже используется в Фениксе. Но для начала определись с тем, что тебе нужно.


RE: Ваши вопросы по ERM-скриптам - SergOz - 13.02.2021 18:20

Berserker, я понял это. Значит я хочу чтобы из 10 вариантов 3 были успешными.

Вопрос в другом. Когда в описании артефакта указано, что он предохраняет от повреждений в 50% случаях, а игрок получает по факту 1 положительный случай из 10, то ему пофиг теория вероятности: он хочет чтобы в половине случаев этот арт оберегал его героя от повреждений. Именно так большинство игроков воспринимает текст
"защита в 50% случаев".
Но, ещё раз повторю: каждый картодел/мододел должен для себя сам решить какой подход использовать.


RE: Ваши вопросы по ERM-скриптам - daemon_n - 13.02.2021 18:25

SergOz, так добавь счётчик, каждый раз повышающий вероятность.


RE: Ваши вопросы по ERM-скриптам - SergOz - 13.02.2021 18:29

daemon_n, меня мой код устраивает по функциональности.
Я лишь хотел узнать какие ещё могут быть подходы для решения гарантированного выпадания 3 из 10.


RE: Ваши вопросы по ERM-скриптам - daemon_n - 13.02.2021 18:35

SergOz, имхо, счётчик - единственный вариант.


RE: Ваши вопросы по ERM-скриптам - SergOz - 13.02.2021 18:42

daemon_n, ты видел мой код? Это тоже своего рода счётчик. Но, если ты имел ввиду что-то другое, то опиши, пожалуйста, хотя бы алгоритм.

P.S. Хотя, для вариантов, когда нужен некий процент везения/невезения, можно просто уменьшать цифровой ряд.
Для 50% шанса писать не
а



RE: Ваши вопросы по ERM-скриптам - daemon_n - 13.02.2021 20:20

SergOz, код только что посмотрел.
Массив он и в Африке массив.
Просто нужен код на автозаполнение массива через 2 цикла. Вот и всё.


RE: Ваши вопросы по ERM-скриптам - Berserker - 13.02.2021 21:25

SergOz, ты ошибаешься, грубо смысл «вероятности» насилуя. 50% — это именно 50%. И даже если предыдущих 5 раз результат был отрицательный, у 6-го вероятность остаётся 50%. Иначе это не полноценно случайные результаты и не значение вероятностей. ГСЧ в игре теперь качественный.

Quote: !!VR(random:y):R0/1/10;
    !!FU&y>5:E; продолжить с вероятностью 50%
Наоборот, лучше 1..1000000 и отсев по 500000.

В остальном верно, у тебя ручной генератор для одного объекта. Для него верно писать «срабатывает Х раз из Y посещений», поскольку вероятность зависит от предыдущих посещений напрямую.
Я делал весьма схожий функционал, но без массива. Храним три значения: число успешных результатов, число заданных успешных результатов и общее число оставшихся результатов до перегенерации.

Скажем, 0 успешных было, 3 успешных гарантированно, 10 заходов осталось.
При посещении генерируем случайное из диапазона 1..заходов осталось и
успехом считаем значение <= (гарантированно - успешных).

Пример:
-) Случайное из 1..10 Выпало 7. 7 <= (3 - 0)? Нет, неудача.
-) Случайное из 1..9. Выпало 5. 5 <= (3 - 0)? Нет, неудача.
-) Случайное из 1..8. Выпало 2. 2 <= (3 - 0)? Да, успех.
-) Случайное из 1..7. Выпало 4. 4 <= (3 - 1)? Нет, неудача.

Если имеем 10/10 заходов, то сбрасываем счётчики на начальное состояние. Массив не нужен даже для сложных решений вроде 17 из 45.
Побочный эффект. Если пара раз повезло — дальше гарантированное «невезение», что человек точно так же болезненно воспринимает.


RE: Ваши вопросы по ERM-скриптам - SergOz - 13.02.2021 22:51

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


RE: ГСЧ - Генератор случайных чисел & ЕРМ - Bes - 03.03.2021 22:05

JC_coffee // вопросы/решения, связанные с ГСЧ, теперь будут в отдельной теме для удобства


RE: ГСЧ - Генератор случайных чисел & ЕРМ - Demon_dante - 25.05.2022 17:52

Можно ли из данного примера узнать какое было выбранное случайное число и исключить его дальше из случайной генерации??
Чтобы каждое заклинание точно сработало

!!VRv600:C0/3/5/15/27/31/32/35/37/41/42/43/46/53/54;
- таблица номеров заклинания первого уровня
!!VRy1:S600 R14; - случайное число в интервале 600..614
!!VRv1:Svy1; - теперь v1 хранит случайное заклинание первого уровня


RE: ГСЧ - Генератор случайных чисел & ЕРМ - daemon_n - 25.05.2022 19:57

Demon_dante, тогда лучше использовать массив с последующим удалением элемента из списка

либо пройтись по текущему списку, как по массиву


RE: ГСЧ - Генератор случайных чисел & ЕРМ - Raistlin - 25.05.2022 21:39

Как вариант - запоминать номер элемента (индекс v-переменной), который уже выпадал. Это можно сделать через массив флагов, массив других переменных или с помощью !!SN:W.


RE: ГСЧ - Генератор случайных чисел & ЕРМ - daemon_n - 25.05.2022 21:44

просто создать массив через SN:M или уже готовую ф-цию NewIntArray
или:

брать последнее заклинание из этого списка
ставить его на место выпавшего
уменьшить диапазон рандома на 1

данный алгоритм выглядит самым оптимальным здесь, мне кажется


RE: ГСЧ - Генератор случайных чисел & ЕРМ - SergOz - 26.05.2022 00:06

Demon_dante, в этой теме есть готовый код здесь


RE: ГСЧ - Генератор случайных чисел & ЕРМ - daemon_n - 26.05.2022 00:20

SergOz, на самом деле массив уже есть
работать здесь надо с v600-v614, уменьшая лишь !!VRy1 S600 R[этоЗначение];


RE: ГСЧ - Генератор случайных чисел & ЕРМ - SergOz - 26.05.2022 00:46

daemon_n, вся проблема в переменных v: нужен контроль использования.
С массивом SN:M такой опасности нет.


RE: ГСЧ - Генератор случайных чисел & ЕРМ - Berserker - 26.05.2022 01:33

Можно массив y-переменных.
Отдельная переменная — размер списка/длина массива. В цикле генерируем число 0..размер списка - 1. Запоминаем результат из соответствующей y-переменной массива. После чего устанавливаем массив[выпавший_индекс] = массив[размера списка - 1] и уменьшаем на один размер списка.

Или проще говоря. Стоят 14 человек в очереди. Выходит врач, бросает кубик 1-14. Выпало 3. Третий идёт на приём, 14-й занимает его место, а новый размер очереди — 13.


RE: ГСЧ - Генератор случайных чисел & ЕРМ - daemon_n - 26.05.2022 01:50

SergOz, где проблема-то? у нас уже зарезервирован массив
в v615 можно записать то самое число с текущим размером массива

Вот, Berserker, понял, что я имел в видуYes


RE: ГСЧ - Генератор случайных чисел & ЕРМ - Berserker - 26.05.2022 19:50

daemon_n, понял, но если макс. размер небольшой (до 70, скажем), то можно и с y-переменными на ЕРМ 2.


RE: ГСЧ - Генератор случайных чисел & ЕРМ - daemon_n - 26.05.2022 21:08

Berserker, я понял задачу так, что данные надо сохранить после выхода из ф-ции:
Либо создаётся нелокальный массив SN:M, либо используются sn:W / v-переменные

Если я ошибся в цели, то конечно подойдут y-переменные.


RE: ГСЧ - Генератор случайных чисел & ЕРМ - Berserker - 27.05.2022 01:54

Если сохранять, то глобальный динамический массив лучше, согласен.


RE: ГСЧ - Генератор случайных чисел & ЕРМ - Demon_dante - 27.05.2022 23:06

Всем спасибо, сделал по коду с прошлой странице. Работает как часы !!! Ab


RE: ГСЧ - Генератор случайных чисел & ЕРМ - SergOz - 13.03.2024 23:51

ГСЧ выдал цифру 87% 128


RE: ГСЧ - Генератор случайных чисел & ЕРМ - Berserker - 14.03.2024 00:06

Это детерминированный ГСЧ. Не переживай, точно такой же, как и у всех соседей.