(10.02.2024 23:06)XEPOMAHT Wrote: igrik, по какому принципу wog_native_dialogs.era решает, отрисовывать эти кнопки или нет? Т.к. при вызове диалога из главного меню игры, кнопки на форму не ставятся:
Заполнение состояния кнопок просходит в функции BuildAll 0x7787CE (wogsetup.cpp в исходниках WOG).
Как именно - я уже не и помню. Но в этот механизм я не лез. Тут всё делает сам Вог
]
Code:
// _DlgSetup* ds = o_DlgSetup // 0x2918390
char* bttnName = "WoGBttn.def";
if (ds->ButtonsStates[5] == 1) {dlg->AddItem(_DlgButton_::Create(375, 528, 64, 30, 5, bttnName, 15, 16, 0, HK_B, 0)); } // id = 5 // выбрать всё
if (ds->ButtonsStates[4] == 1) {dlg->AddItem(_DlgButton_::Create(440, 528, 64, 30, 6, bttnName, 18, 19, 0, HK_N, 0)); } // id = 6 // сбросить всё
if (ds->ButtonsStates[2] == 1) {dlg->AddItem(_DlgButton_::Create(510, 528, 64, 30, 7, bttnName, 12, 13, 0, HK_R, 0)); } // id = 7 // по умолчанию
if (ds->ButtonsStates[8] == 1) {dlg->AddItem(_DlgButton_::Create(580, 528, 64, 30, 8, bttnName, 6, 7, 0, HK_L, 0)); } // id = 8 // загрузить
if (ds->ButtonsStates[1] == 1) {dlg->AddItem(_DlgButton_::Create(645, 528, 64, 30, 9, bttnName, 9, 10, 0, HK_S, 0)); } // id = 9 // сохранить
if (ds->ButtonsStates[3] == 1) {dlg->AddItem(_DlgButton_::Create(305, 528, 64, 30, 10, bttnName, 21, 22, 0, HK_M, 0)); } // id = 10 // мультиплеер
if (ds->ButtonsStates[0] == 1) {dlg->AddItem(_DlgButton_::Create(715, 528, 64, 30, DIID_OK, bttnName, 0, 1, 1, HK_ENTER, 2)); } // id = 30725
Code:
// #define o_DlgSetup ((_DlgSetup*)0x2918390)
struct _DlgSetup{
char *Name; // название окна
char *Hint; // текст хинта внизу (при наведении на имя окна)
char *PopUp; // текст в окне по правой мыши (при клике на имя окна)
char *Intro; // текст вступления
DlgSetup_Page *Pages[8]; // страницы
int (*Listener)(int Type,int Page, int ItemList,int Item); // 0x7775EC
// ук. на функцию, которую надо вызывать при каждом изменении
// Type - 0 - кнопки, 1 - элементы списков, 2 - страничка
// Page - # страницы
// ItemList - # списка (0 - LT, 1 - LB, 2 - RT, 3 - RB)
// Item - # элемента списка (для кнопок: 0 - OK, 1 - Save,
// 2 - Restore, 3 - Multiplayer)
// Реагирование на возвращаемые значения:
// 0 - ничего, 1 - перерисовка, 2 - закрытие диалога
int *ButtonsStates; // указатель на массив состояний кнопок
// -1 - нет кнопки, 0 - кнопка неактивна, 1 - активна
// #0 - кнопка Ok, (-1 не действует)
// #1 - Save,
// #2 - Restore,
// #3 - Multiplayer,
// #4 - UnSelectAll,
// #5 - SelectAll,
// #6 - Next,
// #7 - Back,
// #8 - Load,
// #9 - Restore Multiplayer
char* NextButtonHint; // хинт для кнопки Next
char* BackButtonHint; // хинт для кнопки Back
Dword Flags;
};
game bug fixes extended.dll || My Plugins || My GitHub
|