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

Full Version: New Era Of Heroes
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
gamecreator, там много нужно было поменять, в частности адреса WaitForSingleObject и hWnd другие. Готовый ехе залил.
http://www.multiupload.com/ONQWINCK0A
Функции 77001 и 77002 иногда приводят к невозможности загрузки сейва с другого компа.
Сейвы, созданные на моём грохнутом компе, отказываются грузиться на новом (вылет).
Конкретно: я сохранял и загружал таким образом изменённый мной ZSETUP00.TXT объёмом в 2.000.000 байт, адрес начала которого точно нашёл и использовал в качестве дополнительной памяти.
Quote:адрес начала которого точно нашёл
Адрес начала на твоём компе, не на другом (адрес-то динамический). Если нужен механизм дополнительной памяти, то я могу расширить функционал Эры новыми командами. И функции 77001 и 77002 не при чём.
Я, как дилетант, думал, что сейв сам по себе - как в нём сохранено, так и будет грузиться, вне зависимости от железа. Как простейший дамп. Sm
Но тогда вопрос: функции 77001 и 77002 предназначались для сохранения того, что игра сама не хочет сохранять?
Quote:Если нужен механизм дополнительной памяти, то я могу расширить функционал Эры новыми командами.
Нужно, как воздух. Месяца два, почитай, страдаю. )

Ещё: можно привести пример с процедурой HookCode? Не вникаю, а вдруг понадобится...
Quote:Я, как дилетант, думал, что сейв сам по себе - как в нём сохранено, так и будет грузиться, вне зависимости от железа. Как простейший дамп.
Сейв распаковывается частями, процедурой GZipRead. Под неё выделяется динамический буфер памяти, за который отвечает менеджер памяти.

Quote:Но тогда вопрос: функции 77001 и 77002 предназначались для сохранения того, что игра сама не хочет сохранять?
Для сохранения дополнительных данных с возможностью их загрузки после. Всё, что тебе нужно, это команды для выделения произвольных буферов в оперативной памяти + команды очистки оных (новая карта, загрузка игры и т.д.).

Тогда алгоритм будет следующий:

Выделить буфер
Юзать его
При сохранении записать его в архив
При загрузке очистить буферы
Выделить буфер
Загрузить в него данные из сейва
(04.11.2009 17:04)Berserker Wrote: [ -> ]gamecreator, там много нужно было поменять, в частности адреса WaitForSingleObject и hWnd другие. Готовый ехе залил.
http://www.multiupload.com/ONQWINCK0A

большое спасибо - теперь всё работает
AKuHAK, приходите ещё (С). Sm
CopyMemory - божественная вещь. 132 Никакого сравнения с громоздкими круговыми функциями UN:C. Быстро, как одна команда ERM - что так и есть, в общем-то.
Естественно, работа с памятью через UN:C вообще извращение по сути, хотя по-другому никак.
MOP, ты с какими данными работаешь? Числа (4 байта) и строки?
Да. В основном, доп. память нужна для расширения некоторых таблиц.
(05.11.2009 00:23)Berserker Wrote: [ -> ]Выделить буфер
Юзать его
При сохранении записать его в архив
При загрузке очистить буферы
Выделить буфер
Загрузить в него данные из сейва
Понятно. А если я захочу заполнить динамическую память своими статическими данными, то я могу просто через ту же CopyMemory скопировать из текстовика весь объём информации, там записанный, в буфер. И дальше работать только с ним. Верно?
Ты текстовик держишь в дате? Если да, то проще добавить функции для нормального чтения из файлов.
Где ж ещё, в Data... Просто однажды заметил, что текстовые ресурсы ВОГ (кроме тех, что заменяют содовские) загружаются в память полностью, даже если их заполнишь чёрт-те чем. Ну и решил использовать ставший мне ненужным ZSETUP00.TXT под свои нужды.
P.S. Приятно, что ты так живо откликнулся на просьбу. Sm
ОК, это будут команды A (Alloc) и F (Free). Сроки реализации - думаю, завтра. Сегодня брат приехал...
Решил сделать в виде плагина. Универсальнее.
http://www.multiupload.com/MGLXP27WOE

EraUtils.dll
FUNCTION MemAlloc (Size: INTEGER): POINTER; PASCAL;
PROCEDURE MemFree (Ptr: POINTER); PASCAL;
PROCEDURE MemClear; PASCAL;

Первая выделяет блок памяти указанного размера и возвращает адрес, вторая освобождает память по адресу (размер указывать не нужно, сохраняется автоматически). Третья - полностью освобождает память и должна вызываться при старте и загрузке карты до работы с памятью (иначе будут утечки оной до вызова MemClear).
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Reference URL's