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: 16788 
	
		
	 | 
	
		
 | 
	| 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: 16788 
	
		
	 | 
	
		
 | 
	| 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 | 
	
		
	 |