Current time: 22.11.2024, 08:33 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Школа ERM 2
» ERM 2.0 для ERA III
Author Message
Berserker Offline
Administrators

Posts: 16657
Post: #91

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

иначе вызвать ЕРМ функцию от Хероманта или кого-либо ещё.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
29.10.2020 04:22
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5422
Post: #92

так, никак не могу решить, так как мне обозвать глобальную переменную, взамен использования PO:H
по скрипту 05 там записывают три значения, распределив их по всему байту.
Я же хочу просто завести три глобальные, но с хитровыстроенным именем, дабы оперировать в цикле удобно было
у меня длинно выходит, зараза
эти три переменные потом будут в диалоге и по ПКМ по фабрике машин считываться, и в теле !?DL соответственно

короче, у меня беда только с тем, как для оф.wog скрипта назвать переменные Dry
30.10.2020 03:19
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #93

Если не знаешь как назвать функцию, напиши, что она конкретно делает.
А переменные — что хранили, и что хранят.

У тебя, как я вижу, есть необходимость хранить число машин для покупки в спец. строениях на карте. Жилище машин, то бишь. Тут хватит точно так же одной переменной.
i^wm_num_machines_%(warMachine)_%(x)_%(y)_%(l)^

КоличествоМашин = КолвоМашин = numMachines (читается как Number of machines = количество машин).


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
30.10.2020 03:47
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5422
Post: #94

да, я просто не так выразился. Одна универсальная переменная... хотя по факту будет в памяти туева хуча создаваться
мне твой вариант не нравится, он и длиньше и... не нравится 96-copy
P.S. да, кстати, чего ты не любишь точки использовать в названиях? как я понимаю, это не возброняется?
30.10.2020 04:03
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #95

В ЕРМ 2 не пройдут точки. Синтаксис очень строгий:

имяЛокальнойПеременной (с маленькой, a-zA-Z в начале, a-zA-Z0-9 далее)
имя_какойтоСложнойФункции (отличается наличием префикса с аббревиуаторой мода). Без префикса — глобальные функции и события Эры.
НАЗВАНИЕ_КАКОЙТО_КОНСТАНТЫ (константы)

Для глобальных именованных переменных таких ограничений нет, но:
1) Всё равно рекомендуется уникальный префикс мода (нет конфликтов, удобно читать дамп в журнале с сортировкой)
2) Лучше без точек, но с нижним подчёркиванием. Тогда Sublime будет считать такую строку одним словом, а это:
-) Выделение по двойному щелчку, cltr + влево/вправо
-) Автозавершение по уже упомянутому ранее слову

Потому от точек теперь избавляюсь.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
30.10.2020 04:21
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5422
Post: #96

(09.10.2020 15:00)Berserker Wrote:  
Пример скрипта на информацию о посещении университетов (Click to View)
смотрел, смотрел. и не увидел куда дальше ушла переменная !!VR(bit:y)
здесь может ошибка в имени переменной?144
31.10.2020 23:29
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #97

Это testBit, исправил.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
01.11.2020 00:31
Find all posts by this user Quote this message in a reply
SergOz Offline

Posts: 1315
Post: #98

Задача: сгенерировать различные 4 цифры от 1 до 9.
Написал:
!!IF:M^%Y1 %Y2 %Y3 %Y4^;

А как это можно сделать на ERM2?
И ещё, пожалуйста, маленький пример с использованием !!co в цикле


Карта-мод "Война на Холсте"
21.11.2020 02:03
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5422
Post: #99

Quote:И маленький пример с использованием !!co в цикле
Скажем, пусть нам надо заменить всех в армии героя на монстра (boost_mon)

21.11.2020 03:28
Visit this user's website Find all posts by this user Quote this message in a reply
SergOz Offline

Posts: 1315
Post: #100

Bes, пожалуйста, русским языком: что делает эта !!co?
При выпонении или невыполнении условия как продллжается работа цикла?
Куда что переходит? я ни хрена не могу понять и не могу проверить. Все варианты которые я придумал, дают одинаковый результат, не зависимо от верности условия после !!co


Карта-мод "Война на Холсте"
(This post was last modified: 21.11.2020 04:04 by SergOz.)
21.11.2020 04:03
Find all posts by this user Quote this message in a reply
Bes Offline

Posts: 5422
Post: #101

ну, грубо говоря,
давай на старом цикле объясню (мне чёт кажется что ты в старой школе сечёшь)

!!co прерывает текущий круг цикла (итерацию), не пуская дальше после себя команды в теле цикла.., и цикл перезапускается, увеличив счётчик на единицу (или закончится если последний круг, конечно же)
21.11.2020 04:11
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #102

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
Find all posts by this user Quote this message in a reply
SergOz Offline

Posts: 1315
Post: #103

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

P.S. Спасибо, Berserker . Thank_you
Тот код, что я привёл - старый. Я и пытался его написать по-новому через массивы SN:M, примерно по тому же алгоритму, что Вы мне привели, но у мення что-то Эра ругалась на код. Попробую ещё раз.
Но, не сегодня Lazy3


Карта-мод "Война на Холсте"
(This post was last modified: 21.11.2020 05:13 by SergOz.)
21.11.2020 04:41
Find all posts by this user Quote this message in a reply
SergOz Offline

Posts: 1315
Post: #104

(21.11.2020 04:32)Berserker Wrote:  !#VA(uniqueNumbers[9]:y); Массив, в котором хранятся уникальные числа
Здесь [9] - это номер массива или его размер?

P.S. С масссивами !!SN:M уже написал
сейчас потею над ERM2


Карта-мод "Война на Холсте"
(This post was last modified: 21.11.2020 19:12 by SergOz.)
21.11.2020 18:14
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16657
Post: #105

Размер. Это локальный массив. Скажем, [y5, y6, y7, y8, y9, y10, y11, y12, y13]


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
21.11.2020 18:18
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group