Разделы:   Введение Работа с процентами Готовые решения Полезные ссылки

Работа с памятью: UN:C/SN:E

Данный материал посвящён скриптам и наборам команд с применением команды UN:C, которые дают возможность изменять в игре то, что не возможно сделать через "обычный" ERM. Здесь также будут показаны решения реализации требуемого с применением команды SN:E.

Простые наборы UN:C-команд можно преобразовать в bin-патч, воспользовавшись онлайн сервисом.

Введение

Команда UN:C#1/#2/$3 позволяет прочитать/записать участок памяти, начиная с адреса #1, длиной #2 в/из переменную $3. Первые 2 параметра самые важные. Неправильная запись в них почти всегда гарантированно вызовет вылет из игры.
Разберём подробнее параметры:
#1 - это адрес участка памяти. Он может быть как статический, так и динамический. Ниже в статье будут указаны только статические адреса (эти адреса всегда одинаковы при запуске игры на любом из ПК, будь то ваш, или друга). Если же нужно будет изменить что-то в динамическом адресе (это адреса, которые на вашем ПК и у друга всегда разные), то обязательно будут указаны способы выхода на последние через статический адрес. По другому выйти на динамический адрес на разных компьютерах невозможно.
#2 - это размер третьего параметра или кол-во байт, которые нам необходимо изменить. Здесь может быть 1, 2 или 4 байта.
$3 - это непосредственно сам параметр, который мы и намереваемся изменить, чтобы добиться какой-то «плюшки». Этот параметр может иметь как положительное значение, так и отрицательное.
Пример: В коде игры WoG по адресу 76C37D установлено заклинание №25h для командира Паладин. Данные адреса имеют шестнадцатиричную систему исчисления. Команда UN:C поддерживает только десятичную систему. Перевести эти числа в десятичную не сложно: включите обычный «виндовский» калькулятор, нажмите "Вид→Программист", поставьте галочку на "Hex", введите "76C37D", после этого нажмите "Dec". В итоге результат будет представлен числом 7783293. Вот мы и научились переводить шестнадцатиричное число в десятичное ;-)
Итак:
7783293 – это адрес, в котором мы меняем интересующее нас значение/параметр;
4 – кол-во байт для изменения;
37 – то, что именно нам нужно поменять.
Т.о., !!UN:C7783293/4/48; позволит Паладину накладывать на дружественных существ Молитву (48).

Не забывайте, что почти все указанные в статье константные ресиверы UN:C необходимо грузить в событии OnGameEnter.
Например:

Работа с процентами

Если игра использует проценты, то нельзя просто написать 30%, надо перевести на понятный программе язык. Это можно сделать 3 путями (работает с навыками Волшебство и т.д.):

  1. Самому посчитать проценты, используя калькуляторы:
    Сначала переводим проценты, например 0.5 (50%) в Binary32, затем полученное hex-значение 3F000000 – в 10-чную систему (например, здесь) и уже результат 1056964608 используем в ERM вместо y1.
  2. ERM сам считает проценты:
  3. Для навыков есть специальная удобная функция: !!FU7703

Не все процентные показатели можно поменять способом выше. Такие параметры, как бонусы атаки и защиты используют значения из массива. Соответственно, надо знать определённый массив, чтобы им подменить существующий.

Готовые решения

При работе с памятью очень часто возникает необходимость «иметь под рукой» вот такие данные: Но, как вы понимаете, это лишь малая часть того, что вам так или иначе сможет понадобиться в процессе моддинга. Ниже вам будет представлена довольно обширная база скриптов, которые вы сможете применить для себя на разных игровых платформах (WoG/TE/ERA)…


Также, в сети Internet доступно ещё больше готовых решений с применением UN:C. Стоит отметить следующие сайты: