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

Full Version: ERA II
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
+1

Era is for H3 what fire invention was to humanity!

I would never have worked so much for 3.58.

Pouah! Start map, find erm error turn 145, restart map, find error turn 245, restart. 148
totkotoriy, спасибо за добрый отзыв. В свою очередь хочу передать благодарность ZVS, MoP, Sav-у, Bes-у, SyDr-у, Валерию и ещё доброй д.жине людей, благодаря которым стало возможным сделать то, что было сделано.

Valery, don't even remind that hell! Btw, I used DEE program to upload scripts to existing game at those times Sm
По-моему я нашёл ошибку. Пишу
Если верить справке, должно создать массив из 200 целых элементов (они 4-байтовые хоть?) и вернуть индекс в v1. Но v1=-2 и понятно, что никак к массиву не обратиться.
Эра 2.4 (из первого сообщения), новее не нашёл.
Возвращается автоматически выделенный ID массива. Автоматические выделенные ID или слоты начинаются с -2 и являются отрицательными числами. Дальше
Хмм... действительно, ошибка в другом. Даже не знаю Эра тут виновата или нет, но такого быть не должно. Вот мой код:
Получилось обойти этот загадочный баг вот таким костылём:
Ну и не говоря о том, что в ЕРМ = и ? в FU:P работают исключительно с v-переменными, но это уже проблема Вога, а не Эры.
y-переменные затираются раньше, чем выполняется P?[...]. Это известная вещь, исправлена в 3.59.
x1..x16 тоже глобальные, так что ?x1 довольно опасно.

Как скопировать строковое значение из массива в массив напрямую? Потому что как-то мало толку от длинных строк если их нельзя получить кроме как через z-переменную.
Знаю, но в настоящий момент никак. Ну то бишь нужно написать несложную функцию. Добавлять подстроки с 2.46 стало легко:
Code:
[+] Added new modifier syntax for SN command parameters:
  SN:X$ (without &), SN:M#/$, SN:M#/#/$, SN:W#/$.
  Traditional "d" adds 0 or empty string, d[...] is equivalent to d+.
  d+, d-, d*, d:, d& (string concatenation).
  Example: !!SN:W^Gold^/y1 W^Gold^/d-500 W^Gold^/d*11 W^Gold^/d:10; Gold = y1 -500 * 1.1

Код для копирования длинной строки в другую длинную ниже:

Quote:!?FU(array item to item copy);
; x1 - array 1 ID (source)
; x2 - array 1 index (source)
; x3 - array 2 ID (destination)
; x4 - array 2 index (destination)
!!SN:Mx1/?y1/x2 Ky1/?y2; y1 - source] string address, y2 - string length

!!if&y2=0:;
    !!SN:Mx3/x4/^^; zero length string
!!el:;
    !!VRy3:Sy2 :4 +1; y3 - length of buffer in integers
    !!SN:M-1/y3/0/0; allocate temporal array
    !!VRy4:Sv1; y4 - temporal array
    !!SN:My4/?y5/0; y5 - temporal buffer address
    !!SN:Ky2/y1/y5; copy source string to temporal buffer
    !!VRy6:Sy5+y2; y6 - address of terminating byte
    !!UN:Cy6/1/0; write terminating byte
    что за ерунду я пишу? )
!!en:;
ууу. черная магия...
(09.09.2014 00:31)Berserker Wrote: [ -> ]команды Эры, принимающие строки, одинаково хорошо переваривают и адреса pchar-ов
О, точно то что надо. Спасибо.
igrik, да нет )
Все команды Эры получают параметры в виде 4-байтовых чисел. Для строк это обычно адрес первого символа. Когда ты пишешь z1, команда получает адрес ЕРМ-переменной. Когда ^hello^, строка сперва сохраняется во временном буфере, затем команде передаётся её адрес, после чего буфер освобождается.

!!SN:M(src array)/?y1/(src index); записывает в y1 адрес первого символа строки в указанном массиве
!!SN:M(dst array)/(dst index)/y1; устанавливает новое значение элемента массива. Команде передаётся адрес строки )
Таким образом, длинные строки (> 512 байт) можно копировать между собой и использовать как буфер для накопления:
!!SN:M../../d&^ соединение строк^;
Вот ещё баг. Эра не понимает ссылки на переменные типа zx4. Например, вот эта команда не работает:
Ещё мод WoG Rus требует Secondary Skills Scrolling (иначе игра вылетает при открытии окна героя), про это нигде не сказано.
Reference URL's