| daemon_n   
   
   Posts: 4366
 
 |  | 
	| 03.02.2022 11:55 |  | 
	
		| Guru105   
 Posts: 835
 
 | 
			| 
 
				Raistlin, в воговских исходниках нашел функцию с этими зависимостями, может это поможет. Но я по прежнему не представляю как их в exe найти:
 
Code:
 0x7771E0 ;)// !!!!!!!!! Зависимость кнопок
 void CheckDepend(int Flag)
 {
 #include "templ.h"
 // 3.58 Dependance
 if(PStates[0][2][2]==0) PStates[0][2][3]=2; else PStates[0][2][3]&=1;
 //  if(PStates[0][3][2]==0) PStates[0][3][3]=2; else PStates[0][3][3]&=1;
 if(PStates[0][2][4]==0){
 PStates[0][2][5]=2;
 PStates[2][0][3]=2;
 PStates[2][0][4]=2;
 PStates[3][2][0]=2;
 PStates[3][2][1]=2;
 PStates[3][3][9]=2;
 }else{
 PStates[0][2][5]&=1;
 PStates[2][0][3]&=1;
 PStates[2][0][4]&=1;
 PStates[3][2][0]&=1;
 PStates[3][2][1]&=1;
 PStates[3][3][9]&=1;
 }
 //  if(PStates[0][3][4]==0) PStates[0][3][5]=2; else PStates[0][3][5]&=1;
 if(PStates[0][2][10]==0){
 PStates[0][3][0]=3; // set as default
 PStates[0][3][1]=2;
 PStates[0][3][2]=2;
 PStates[0][3][3]=2;
 PStates[0][3][4]=2;
 PStates[0][3][5]=2;
 PStates[0][3][6]=2;
 PStates[0][3][7]=2;
 }else{
 PStates[0][3][0]&=1;
 PStates[0][3][1]&=1;
 PStates[0][3][2]&=1;
 PStates[0][3][3]&=1;
 PStates[0][3][4]&=1;
 PStates[0][3][5]&=1;
 PStates[0][3][6]&=1;
 PStates[0][3][7]&=1;
 }
 if(PStates[1][0][0]==0) PStates[1][0][1]=2; else PStates[1][0][1]&=1;
 if(PStates[1][1][0]==0){
 PStates[1][1][1]=2;
 PStates[1][1][2]=2;
 PStates[1][1][3]=2;
 PStates[1][1][4]=2;
 }else{
 PStates[1][1][1]&=1;
 PStates[1][1][2]&=1;
 PStates[1][1][3]&=1;
 PStates[1][1][4]&=1;
 if(Flag==2000+100+3){
 if(PStates[1][1][3]==1) PStates[1][1][2]=0;
 if(PStates[1][1][2]==1) PStates[1][1][3]=0;
 }else{
 if(PStates[1][1][2]==1) PStates[1][1][3]=0;
 if(PStates[1][1][3]==1) PStates[1][1][2]=0;
 }
 }
 if(Flag==2000+100+5){ // Mithril Enhancements
 if(PStates[1][1][5]==1) PStates[1][1][6]=1;
 //    if(PStates[1][1][5]==0) PStates[1][1][6]=0;
 }
 if(Flag==2000+100+6){ // Mithril Display
 //    if(PStates[1][1][6]==1) PStates[1][1][5]=1;
 if(PStates[1][1][6]==0) PStates[1][1][5]=0;
 }
 if(Flag==3000+0+6){ // War Machines I
 if(PStates[2][0][6]==1){ PStates[2][0][7]=0; PStates[2][0][8]=0;}
 if(PStates[2][0][6]==0){ PStates[2][0][7]&=1; PStates[2][0][8]&=1;}
 }
 if(Flag==3000+0+7){ // War Machines II
 if(PStates[2][0][7]==1){ PStates[2][0][6]=0; PStates[2][0][8]=0;}
 if(PStates[2][0][7]==0){ PStates[2][0][6]&=1; PStates[2][0][8]&=1;}
 }
 if(Flag==3000+0+8){ // War Machines III
 if(PStates[2][0][8]==1){ PStates[2][0][6]=0; PStates[2][0][7]=0;}
 if(PStates[2][0][8]==0){ PStates[2][0][6]&=1; PStates[2][0][7]&=1;}
 }
 if(PStates[2][0][6]==1){ PStates[2][0][7]=0; PStates[2][0][8]=0;}
 if(PStates[2][0][7]==1){ PStates[2][0][6]=0; PStates[2][0][8]=0;}
 if(PStates[2][0][8]==1){ PStates[2][0][6]=0; PStates[2][0][7]=0;}
 /* 3.57
 if(PStates[0][1][1]==0){
 PStates[0][1][2]=2;
 PStates[0][1][3]=2;
 PStates[0][1][4]=2;
 }else{
 PStates[0][1][2]&=1;
 PStates[0][1][3]&=1;
 PStates[0][1][4]&=1;
 if(Flag==4){
 if(PStates[0][1][4]==1) PStates[0][1][3]=0;
 if(PStates[0][1][3]==1) PStates[0][1][4]=0;
 }else{
 if(PStates[0][1][3]==1) PStates[0][1][4]=0;
 if(PStates[0][1][4]==1) PStates[0][1][3]=0;
 }
 }
 if(PStates[0][2][4]==0) PStates[0][2][5]=2;
 else PStates[0][2][5]&=1;
 if(PStates[0][2][6]==0) PStates[0][2][7]=2;
 else PStates[0][2][7]&=1;
 */
 RETURNV;
 }
Это в wogsetup.cpp если что.
			 
				
(This post was last modified: 20.02.2022 19:01 by Guru105.)
 |  | 
	| 03.02.2022 12:19 |  | 
	
		| daemon_n   
   
   Posts: 4366
 
 |  | 
	| 03.02.2022 14:32 |  | 
	
		| Guru105   
 Posts: 835
 
 | 
			| 
 
				Raistlin, какой адрес, если не секрет?
			 |  | 
	| 03.02.2022 15:04 |  | 
	
		| Guru105   
 Posts: 835
 
 |  | 
	| 03.02.2022 15:14 |  | 
	
		| Guru105   
 Posts: 835
 
 | 
			| 
 
				 (27.02.2022 23:11)XEPOMAHT Wrote:  Настройка ключевых слов - целиком на совести скриптёра, т.к. вог по-умолчанию всегда пишет туда 0.XEPOMAHT , верно ли, что контрольные слова для каждого объекта пишутся в какую-то структуру в памяти или выделенную область памяти? 
И не может ли случиться так, что выделенной области не хватит?
			 |  | 
	| 28.02.2022 11:45 |  | 
	
		| XEPOMAHT   
   
   Posts: 2481
 
 | 
			| 
 
				 (28.02.2022 11:45)wessonsm Wrote:  верно ли, что контрольные слова для каждого объекта пишутся в какую-то структуру в памяти или выделенную область памяти? 
Контрольное слово пишется в структуру клетки карты, память на которую выделяется исходя из размеров карты.
  (28.02.2022 11:45)wessonsm Wrote:  И не может ли случиться так, что выделенной области не хватит? 
Лимит контрольного слова - 32 бита памяти. Но там новые данные лучше не хранить, т.к. места там и так кот наплакал. SoD и так сжимает данные для доброй половины объектов, чтобы они туда вошли, а всё что не входит - записывается и храниться в дополнительных структурах, привязанных к индексам объектов на карте. Для новых объектов карты, естественно, могут быть новые форматы контрольных слов (например, в ERA+ данные новых объектов карт без проблем хранятся в контрольных словах и обрабатываются Тифоном). Для воговских объектов так же выделяется соответствующая память, но... она привязана к максимальному размеру карт, в итоге, тонна неиспользованных нулей пишется в сохранения (а Берсеркер пишет в сохранения ЕЩЁ БОЛЬШЕ нулей для совместимости с XXXL-картами), но особо конечно пользователь это не замечает, т.к. данные архивируются (но в памяти при загрузке сохранения так же будет мегабайты помойки из неиспользованных нулей).
			 |  | 
	| 28.02.2022 12:30 |  | 
	
		| Guru105   
 Posts: 835
 
 | 
			| 
 
				XEPOMAHT, спасибо за подробное разъяснение!
			 |  | 
	| 28.02.2022 13:21 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 28.02.2022 17:50 |  | 
	
		| Guru105   
 Posts: 835
 
 | 
			| 
 
				У меня вопрос по заголовочному файлу era.h. 
Компилятор (Visual Studio Express 2008) ругается на строку 303:
 
Code:
 std::string tr (const char *key, const std::vector<std::string> params = {}) {
 
Code:
 error C2143: синтаксическая ошибка: отсутствие ")" перед "{"error C2059: синтаксическая ошибка: )
 error C2059: синтаксическая ошибка: )
 error C2447: {: отсутствует заголовок функции (возможно, используется формальный список старого типа)
 
Что здесь может быть не так? 
Была еще пара ошибок, но с ними я справился самостоятельно. 
Осталась эта.    |  | 
	| 15.05.2022 21:31 |  | 
	
		| Berserker   
   
   Posts: 16785
 
 |  | 
	| 15.05.2022 22:07 |  | 
	
		| Guru105   
 Posts: 835
 
 | 
			| 
 
				Спасибо! В таком виде компилируется.И еще, я правильно понимаю, что в строке 202
 "typedef char* (__stdcall *ToStaticStr) (const char* Str);"
 - это опечатка и должно быть
 "typedef char* (__stdcall *TToStaticStr) (const char* Str);" ?
 Просто хочу окончательно развеять сомнения.
 |  | 
	| 15.05.2022 22:20 |  |