Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Bes, вот тебе решение вопроса по совместимости.
Вместо SN:O функцию делаешь
!?FU(bes_GetObjectEntrance); получить вход объекта
!#VA(x:x) (y:x) (z:x);
!#VA(resX:x) (resY:x) (resZ:x);
; получить версию Эры, если >= 3100, например, то
!!SN:O?(x)/?(y)/?(z)
+ скопировать x, y, z в resX, resY, resZ
иначе вызвать ЕРМ функцию от Хероманта или кого-либо ещё.
так, никак не могу решить, так как мне обозвать глобальную переменную, взамен использования PO:H
по скрипту 05 там записывают три значения, распределив их по всему байту.
Я же хочу просто завести три глобальные, но с хитровыстроенным именем, дабы оперировать в цикле удобно было
у меня длинно выходит, зараза
эти три переменные потом будут в диалоге и по ПКМ по фабрике машин считываться, и в теле !?DL соответственно
короче, у меня беда только с тем, как для оф.wog скрипта назвать переменные

Если не знаешь как назвать функцию, напиши, что она конкретно делает.
А переменные — что хранили, и что хранят.
У тебя, как я вижу, есть необходимость хранить число машин для покупки в спец. строениях на карте. Жилище машин, то бишь. Тут хватит точно так же одной переменной.
i^wm_num_machines_%(warMachine)_%(x)_%(y)_%(l)^
КоличествоМашин = КолвоМашин = numMachines (читается как Number of machines = количество машин).
да, я просто не так выразился. Одна универсальная переменная... хотя по факту будет в памяти туева хуча создаваться
мне твой вариант не нравится, он и длиньше и... не нравится
P.S. да, кстати, чего ты не любишь точки использовать в названиях? как я понимаю, это не возброняется?
В ЕРМ 2 не пройдут точки. Синтаксис очень строгий:
имяЛокальнойПеременной (с маленькой, a-zA-Z в начале, a-zA-Z0-9 далее)
имя_какойтоСложнойФункции (отличается наличием префикса с аббревиуаторой мода). Без префикса — глобальные функции и события Эры.
НАЗВАНИЕ_КАКОЙТО_КОНСТАНТЫ (константы)
Для глобальных именованных переменных таких ограничений нет, но:
1) Всё равно рекомендуется уникальный префикс мода (нет конфликтов, удобно читать дамп в журнале с сортировкой)
2) Лучше без точек, но с нижним подчёркиванием. Тогда Sublime будет считать такую строку одним словом, а это:
-) Выделение по двойному щелчку, cltr + влево/вправо
-) Автозавершение по уже упомянутому ранее слову
Потому от точек теперь избавляюсь.
(09.10.2020 15:00)Berserker Wrote: [ -> ]
смотрел, смотрел. и не увидел куда дальше ушла переменная !!VR(bit:y)
здесь может ошибка в имени переменной?

Задача: сгенерировать различные 4 цифры от 1 до 9.
Написал:
!!IF:M^%Y1 %Y2 %Y3 %Y4^;
А как это можно сделать на ERM2?
И ещё, пожалуйста, маленький пример с использованием
!!co в цикле
Quote:И маленький пример с использованием !!co в цикле
Скажем, пусть нам надо заменить всех в армии героя на монстра (boost_mon)
Bes, пожалуйста, русским языком: что делает эта !!co?
При выпонении или невыполнении условия как продллжается работа цикла?
Куда что переходит? я ни хрена не могу понять и не могу проверить. Все варианты которые я придумал, дают одинаковый результат, не зависимо от верности условия после !!co
ну, грубо говоря,
давай на старом цикле объясню (мне чёт кажется что ты в старой школе сечёшь)
!!co прерывает текущий круг цикла (итерацию), не пуская дальше после себя команды в теле цикла.., и цикл перезапускается, увеличив счётчик на единицу (или закончится если последний круг, конечно же)
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)
Попробуй поэкспериментировать. Если не выйдет, приведу полный код.
Bes, спасибо, я понял.

По сути
!!co является
!!en если выполнено его условие.
А
в этом скрипте меня интересует не просто замена y1/y2 на (one:y)/(two:y), а новые возможности (если они есть:z), о которых я ещё не знаю.
P.S. Спасибо,
Berserker .

Тот код, что я привёл - старый. Я и пытался его написать по-новому через массивы SN:M, примерно по тому же алгоритму, что Вы мне привели, но у мення что-то Эра ругалась на код. Попробую ещё раз.
Но, не сегодня
(21.11.2020 04:32)Berserker Wrote: [ -> ]!#VA(uniqueNumbers[9]:y); Массив, в котором хранятся уникальные числа
Здесь [9] - это номер массива или его размер?
P.S. С масссивами !!SN:M уже написал
сейчас потею над ERM2
Размер. Это локальный массив. Скажем, [y5, y6, y7, y8, y9, y10, y11, y12, y13]
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16