Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 04.11.2009 17:04 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 04.11.2009 22:44 | 
	
		
	 | 
	
		
		MOP 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 1468 
	
		
	 | 
	
		
			
			 
			
				Я, как дилетант, думал, что сейв сам по себе - как в нём сохранено, так и будет грузиться, вне зависимости от железа. Как простейший дамп.   
Но тогда вопрос: функции 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: 16788 
	
		
	 | 
	
		
			
			 
			
				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: 16788 
	
		
	 | 
	
		
 | 
	| 05.11.2009 01:03 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 05.11.2009 18:11 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 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: 16788 
	
		
	 | 
	
		
 | 
	| 05.11.2009 21:59 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 05.11.2009 22:29 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
			
			 
			
				Решил сделать в виде плагина. Универсальнее. 
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 | 
	
		
	 |