Wake of Gods Forum | Форум Во Имя Богов

Full Version: ГСЧ - Генератор случайных чисел & ЕРМ
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6 7
Berserker, да я понял, спасибо.
Я изначально и имел ввиду не ГСЧ самой игры, а возможность обеспечить некий гарантированный результат выпадания "плюшек" в скриптах.
JC_coffee // вопросы/решения, связанные с ГСЧ, теперь будут в отдельной теме для удобства
Можно ли из данного примера узнать какое было выбранное случайное число и исключить его дальше из случайной генерации??
Чтобы каждое заклинание точно сработало

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

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

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

данный алгоритм выглядит самым оптимальным здесь, мне кажется
Demon_dante, в этой теме есть готовый код здесь
SergOz, на самом деле массив уже есть
работать здесь надо с v600-v614, уменьшая лишь !!VRy1 S600 R[этоЗначение];
daemon_n, вся проблема в переменных v: нужен контроль использования.
С массивом SN:M такой опасности нет.
Можно массив y-переменных.
Отдельная переменная — размер списка/длина массива. В цикле генерируем число 0..размер списка - 1. Запоминаем результат из соответствующей y-переменной массива. После чего устанавливаем массив[выпавший_индекс] = массив[размера списка - 1] и уменьшаем на один размер списка.

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

Вот, Berserker, понял, что я имел в видуYes
daemon_n, понял, но если макс. размер небольшой (до 70, скажем), то можно и с y-переменными на ЕРМ 2.
Berserker, я понял задачу так, что данные надо сохранить после выхода из ф-ции:
Либо создаётся нелокальный массив SN:M, либо используются sn:W / v-переменные

Если я ошибся в цели, то конечно подойдут y-переменные.
Если сохранять, то глобальный динамический массив лучше, согласен.
Всем спасибо, сделал по коду с прошлой странице. Работает как часы !!! Ab
Pages: 1 2 3 4 5 6 7
Reference URL's