Bes
Сообщений: 5422
|
так, никак не могу решить, так как мне обозвать глобальную переменную, взамен использования PO:H
по скрипту 05 там записывают три значения, распределив их по всему байту.
Я же хочу просто завести три глобальные, но с хитровыстроенным именем, дабы оперировать в цикле удобно было
у меня длинно выходит, зараза
эти три переменные потом будут в диалоге и по ПКМ по фабрике машин считываться, и в теле !?DL соответственно
короче, у меня беда только с тем, как для оф.wog скрипта назвать переменные
|
|
30.10.2020 03:19 |
|
Bes
Сообщений: 5422
|
да, я просто не так выразился. Одна универсальная переменная... хотя по факту будет в памяти туева хуча создаваться
мне твой вариант не нравится, он и длиньше и... не нравится
P.S. да, кстати, чего ты не любишь точки использовать в названиях? как я понимаю, это не возброняется?
|
|
30.10.2020 04:03 |
|
Bes
Сообщений: 5422
|
(09.10.2020 15:00)Berserker писал(а):
смотрел, смотрел. и не увидел куда дальше ушла переменная !!VR(bit:y)
здесь может ошибка в имени переменной?
|
|
31.10.2020 23:29 |
|
Berserker
Сообщений: 16634
|
|
01.11.2020 00:31 |
|
SergOz
Сообщений: 1313
|
Задача: сгенерировать различные 4 цифры от 1 до 9.
Написал: !!IF:M^%Y1 %Y2 %Y3 %Y4^;
А как это можно сделать на ERM2?
И ещё, пожалуйста, маленький пример с использованием !!co в цикле
Карта-мод "Война на Холсте"
|
|
21.11.2020 02:03 |
|
Bes
Сообщений: 5422
|
Цитата:И маленький пример с использованием !!co в цикле
Скажем, пусть нам надо заменить всех в армии героя на монстра (boost_mon)
|
|
21.11.2020 03:28 |
|
SergOz
Сообщений: 1313
|
Bes, пожалуйста, русским языком: что делает эта !!co?
При выпонении или невыполнении условия как продллжается работа цикла?
Куда что переходит? я ни хрена не могу понять и не могу проверить. Все варианты которые я придумал, дают одинаковый результат, не зависимо от верности условия после !!co
Карта-мод "Война на Холсте"
(Последний раз сообщение было отредактировано 21.11.2020 в 04:04, отредактировал пользователь SergOz.)
|
|
21.11.2020 04:03 |
|
Bes
Сообщений: 5422
|
ну, грубо говоря,
давай на старом цикле объясню (мне чёт кажется что ты в старой школе сечёшь)
!!co прерывает текущий круг цикла (итерацию), не пуская дальше после себя команды в теле цикла.., и цикл перезапускается, увеличив счётчик на единицу (или закончится если последний круг, конечно же)
|
|
21.11.2020 04:11 |
|
Berserker
Сообщений: 16634
|
SergOz, твоя задача решается следующим образом:
1) Тебе нужен массив на 9 чисел. По умолчанию в них будут значения 1, 2, 3, 4, 5, 6, 7, 8, 9.
2) Тебе нужна переменная, которая будет хранить длину массива.
Для генерации случайного числа выполняем следующее:
1) Генерируем случайный индекс от 0 до РазмерМассива - 1.
2) Смотрим элемент в массиве под данным индексом и запоминаем его в результат.
3) Копируем последний элемент массива в тот, что выпал случайно.
4) Уменьшаем размер массива на один.
Привожу пример.
Массив: 1 2 3 4 5 6 7 8 9
Размер массива: 9
Генерируем случайный индекс от 0 до (9 - 1) = 4.
Под индексом 4 у нас значение 5. 5 → первый результат. Копируем в этот элемент значение последнего (9) и уменьшаем длину массива на один.
Массив: 1 2 3 4 9 6 7 8
Размер массива: 8.
Как видишь, после указанной операции у нас массив чисел, в котором уже гарантированно нет ранее сгенерированного числа.
Повторяем процедуру. Случайный индекс от 0 до (8 - 1) = 2.
В результат помещаем ещё одно число (3), которое заменяем на 8 в массиве.
Массив: 1 2 8 4 9 6 7
Размер массива: 7.
Случайный индекс: 6. В результат помещаем 7, заменяем 7 на 7 и уменьшаем размер массива на один.
Массив: 1 2 8 4 9 6
Размер массива: 6.
На ЕРМ тебе понадобятся:
!#VA(uniqueNumbers[9]:y); Массив, в котором хранятся уникальные числа
!!VR(uniqueNumbers):C1/2/3/4/5/6/7/8/9; сразу же его заполни
!!VR(sampleSize:y):S9; начальный размер массива
Сгенерировать случайный индекс можно командой R0/мин/макс.
Если нужно сгенерировать число от 0 до 9 - 1, можно сгенерировать от 1 до 9, а затем вычесть 1.
!!VR(randomInd:y):R0/1/(sampleSize) -1; получили случайный индекс.
!!VR(randomItemPtr:y):S(@uniqueNumbers) +(randomInd); Random item pointer — указатель на случайный элемент в переводе
Вычисляется как индекс начала массива + смещение в массиве. Если у тебя массив y50..y58, то 50 — его начальный индекс.
@uniqueNumbers и компилируется в начальный индекс массива
само значение по указателю можно получить так: y(randomItemPtr)
Попробуй поэкспериментировать. Если не выйдет, приведу полный код.
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
|
|
21.11.2020 04:32 |
|
SergOz
Сообщений: 1313
|
Bes, спасибо, я понял. По сути !!co является !!en если выполнено его условие.
А в этом скрипте меня интересует не просто замена y1/y2 на (one:y)/(two:y), а новые возможности (если они есть:z), о которых я ещё не знаю.
P.S. Спасибо, Berserker .
Тот код, что я привёл - старый. Я и пытался его написать по-новому через массивы SN:M, примерно по тому же алгоритму, что Вы мне привели, но у мення что-то Эра ругалась на код. Попробую ещё раз.
Но, не сегодня
Карта-мод "Война на Холсте"
(Последний раз сообщение было отредактировано 21.11.2020 в 05:13, отредактировал пользователь SergOz.)
|
|
21.11.2020 04:41 |
|
SergOz
Сообщений: 1313
|
(21.11.2020 04:32)Berserker писал(а): !#VA(uniqueNumbers[9]:y); Массив, в котором хранятся уникальные числа
Здесь [9] - это номер массива или его размер?
P.S. С масссивами !!SN:M уже написал
сейчас потею над ERM2
Карта-мод "Война на Холсте"
(Последний раз сообщение было отредактировано 21.11.2020 в 19:12, отредактировал пользователь SergOz.)
|
|
21.11.2020 18:14 |
|
Berserker
Сообщений: 16634
|
Размер. Это локальный массив. Скажем, [y5, y6, y7, y8, y9, y10, y11, y12, y13]
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
|
|
21.11.2020 18:18 |
|