Berserker
Posts: 16618
|
|
04.11.2009 17:04 |
|
Berserker
Posts: 16618
|
|
04.11.2009 22:44 |
|
MOP
Posts: 1468
|
Я, как дилетант, думал, что сейв сам по себе - как в нём сохранено, так и будет грузиться, вне зависимости от железа. Как простейший дамп. ![Sm Sm](http://wforum.heroes35.net/images/smilies/sm.gif)
Но тогда вопрос: функции 77001 и 77002 предназначались для сохранения того, что игра сама не хочет сохранять?
Quote:Если нужен механизм дополнительной памяти, то я могу расширить функционал Эры новыми командами.
Нужно, как воздух. Месяца два, почитай, страдаю. )
Ещё: можно привести пример с процедурой HookCode? Не вникаю, а вдруг понадобится...
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery
(This post was last modified: 04.11.2009 23:02 by MOP.)
|
|
04.11.2009 22:52 |
|
Berserker
Posts: 16618
|
Quote:Я, как дилетант, думал, что сейв сам по себе - как в нём сохранено, так и будет грузиться, вне зависимости от железа. Как простейший дамп.
Сейв распаковывается частями, процедурой GZipRead. Под неё выделяется динамический буфер памяти, за который отвечает менеджер памяти.
Quote:Но тогда вопрос: функции 77001 и 77002 предназначались для сохранения того, что игра сама не хочет сохранять?
Для сохранения дополнительных данных с возможностью их загрузки после. Всё, что тебе нужно, это команды для выделения произвольных буферов в оперативной памяти + команды очистки оных (новая карта, загрузка игры и т.д.).
Тогда алгоритм будет следующий:
Выделить буфер
Юзать его
При сохранении записать его в архив
При загрузке очистить буферы
Выделить буфер
Загрузить в него данные из сейва
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
|
|
05.11.2009 00:23 |
|
AKuHAK
Posts: 116
|
(04.11.2009 17:04)Berserker Wrote: gamecreator, там много нужно было поменять, в частности адреса WaitForSingleObject и hWnd другие. Готовый ехе залил.
http://www.multiupload.com/ONQWINCK0A
большое спасибо - теперь всё работает
|
|
05.11.2009 01:00 |
|
Berserker
Posts: 16618
|
|
05.11.2009 01:03 |
|
Berserker
Posts: 16618
|
|
05.11.2009 18:11 |
|
Berserker
Posts: 16618
|
|
05.11.2009 18:44 |
|
MOP
Posts: 1468
|
Да. В основном, доп. память нужна для расширения некоторых таблиц.
(05.11.2009 00:23)Berserker Wrote: Выделить буфер
Юзать его
При сохранении записать его в архив
При загрузке очистить буферы
Выделить буфер
Загрузить в него данные из сейва
Понятно. А если я захочу заполнить динамическую память своими статическими данными, то я могу просто через ту же CopyMemory скопировать из текстовика весь объём информации, там записанный, в буфер. И дальше работать только с ним. Верно?
Circle of destruction, hammer comes crushing
Powerhouse of energy
Whipping up a fury, dominating flurry
We create the battery
|
|
05.11.2009 21:04 |
|
Berserker
Posts: 16618
|
|
05.11.2009 21:59 |
|
Berserker
Posts: 16618
|
|
05.11.2009 22:29 |
|
Berserker
Posts: 16618
|
Решил сделать в виде плагина. Универсальнее.
http://www.multiupload.com/MGLXP27WOE
EraUtils.dll
FUNCTION MemAlloc (Size: INTEGER): POINTER; PASCAL;
PROCEDURE MemFree (Ptr: POINTER); PASCAL;
PROCEDURE MemClear; PASCAL;
Первая выделяет блок памяти указанного размера и возвращает адрес, вторая освобождает память по адресу (размер указывать не нужно, сохраняется автоматически). Третья - полностью освобождает память и должна вызываться при старте и загрузке карты до работы с памятью (иначе будут утечки оной до вызова MemClear).
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
|
|
06.11.2009 19:52 |
|