daemon_n
Posts: 4343
|
|
03.02.2022 11:55 |
|
wessonsm
Posts: 792
|
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 wessonsm.)
|
|
03.02.2022 12:19 |
|
daemon_n
Posts: 4343
|
|
03.02.2022 14:32 |
|
wessonsm
Posts: 792
|
Raistlin, какой адрес, если не секрет?
|
|
03.02.2022 15:04 |
|
wessonsm
Posts: 792
|
|
03.02.2022 15:14 |
|
wessonsm
Posts: 792
|
(27.02.2022 23:11)XEPOMAHT Wrote: Настройка ключевых слов - целиком на совести скриптёра, т.к. вог по-умолчанию всегда пишет туда 0.
XEPOMAHT, верно ли, что контрольные слова для каждого объекта пишутся в какую-то структуру в памяти или выделенную область памяти?
И не может ли случиться так, что выделенной области не хватит?
|
|
28.02.2022 11:45 |
|
XEPOMAHT
Posts: 2356
|
(28.02.2022 11:45)wessonsm Wrote: верно ли, что контрольные слова для каждого объекта пишутся в какую-то структуру в памяти или выделенную область памяти?
Контрольное слово пишется в структуру клетки карты, память на которую выделяется исходя из размеров карты.
(28.02.2022 11:45)wessonsm Wrote: И не может ли случиться так, что выделенной области не хватит?
Лимит контрольного слова - 32 бита памяти. Но там новые данные лучше не хранить, т.к. места там и так кот наплакал. SoD и так сжимает данные для доброй половины объектов, чтобы они туда вошли, а всё что не входит - записывается и храниться в дополнительных структурах, привязанных к индексам объектов на карте. Для новых объектов карты, естественно, могут быть новые форматы контрольных слов (например, в ERA+ данные новых объектов карт без проблем хранятся в контрольных словах и обрабатываются Тифоном). Для воговских объектов так же выделяется соответствующая память, но... она привязана к максимальному размеру карт, в итоге, тонна неиспользованных нулей пишется в сохранения (а Берсеркер пишет в сохранения ЕЩЁ БОЛЬШЕ нулей для совместимости с XXXL-картами), но особо конечно пользователь это не замечает, т.к. данные архивируются (но в памяти при загрузке сохранения так же будет мегабайты помойки из неиспользованных нулей).
|
|
28.02.2022 12:30 |
|
wessonsm
Posts: 792
|
XEPOMAHT, спасибо за подробное разъяснение!
|
|
28.02.2022 13:21 |
|
Berserker
Posts: 16657
|
|
28.02.2022 17:50 |
|
wessonsm
Posts: 792
|
У меня вопрос по заголовочному файлу 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: 16657
|
|
15.05.2022 22:07 |
|
wessonsm
Posts: 792
|
Спасибо! В таком виде компилируется.
И еще, я правильно понимаю, что в строке 202
"typedef char* (__stdcall *ToStaticStr) (const char* Str);"
- это опечатка и должно быть
"typedef char* (__stdcall *TToStaticStr) (const char* Str);" ?
Просто хочу окончательно развеять сомнения.
|
|
15.05.2022 22:20 |
|