(19.11.2020 17:39)Berserker Wrote: Если Вы используете структуры данных, которые имеют вероятность быть расширенными Эрой или другими плагинами, то для сохранения совместимости и предотвращения вылетов следует поступать следующим образом
На практике это было использовано 1 раз в Тифоне для структуры монстров (и то только после того, как Берсеркер это сделал сам, у меня так и не вышло такое добавить в код плагина), больше нигде "вероятность быть расширенными Эрой" слава богу не встретилась. И вообще, тут понятнее термин "перенесёнными в памяти", а не "расширенными": например Тифон 3.2 расширяет структуру героев, но не переносит её в памяти (сделано для совместимости с HD-модом и прочими модами, в которых RedirectMemoryBlock никогда не будет в силу отсутствия исходных кодов или возможности перекомпиляции или просто автору плагина наплевать на совместимость).
(19.11.2020 17:39)Berserker Wrote: Таким образом Вы обеспечите корректную работу всех других плагинов и новых версий Эры.
Чтобы это работало на практике, нужно, чтобы это применялось в двухстороннем порядке. Например, тот же Тифон 3.2 переносит кучу всяких данных, но RedirectMemoryBlock применяется только для структуры монстров для совместимости с era.dll, но абсолютно не известно, какие перенесённые структуры потребуются ЭРЕ в будущем
(а Тифон переносит ещё много что...
).
В подавляющем большинстве случаев для чтения перенесённых структур лучше использовать базовые адреса структур (любая прямая адресация в коде может быть принята за базовый адрес) - это позволяет не договариваться с автором плагина, в котором перенесена структура, о добавлении RedirectMemoryBlock. Тем более, одна структура может быть перенесена только одним плагином (например Тифон никогда не заработает вместе с Аметистом так же как ERA+ будет всегда конфликтовать с вражеским Knightmare Kingdoms), а самих плагинов, меняющих структуры, существует не так много.
Для совместимости плагинов как раз и созданы сборники плагинов - никому не нужный отечественный ERA+ и никому не нужный его зарубежный аналог Knightmare Kingdoms. Т.е. для создания какого-то по-настоящему глобального мода для ERA, типа Horn of the Abyss, выбираются сборники плагинов, которые имеют проверенную совместимость (но, как понимаете, до этого ещё дело не дошло, ВСЕ современные моддеры на ERA ограничиваются созданием небольших модов), а не подбираются отдельные плагины (которые всё равно будут частью подплатформ ERA).