Current time: 26.09.2017, 07:04 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Исследование героев
» туториал(ы)
Author Message
igrik Offline
Moderators

Posts: 1158
Post: #841

(02.09.2017 19:17)RoseKavalier Wrote:  Another question: how about "mouse-over text"?
Смотри тут. Это недописанное окно командира.
Code:
_DlgStaticDef_* CommDef;
_DlgStaticTextPcx8ed_* statbar;

// показ сообщения по ПКМ на первичных навыках командира
void New_CommanderDlg_ShowPreSkill_RMC(int npc_id, int skill)
{
    _Dlg_* dlg = _CustomDlg_::Create(-1, -1, 440, 420, DF_SCREENSHOT | DF_SHADOW, NULL);                            
    dlg->AddItemByZOrder(_DlgStdBackground_::Create(0, 0, dlg->width, dlg->height, 0, 0, o_GameMgr->GetMeID()), 0);  

    int cadr_id = *(int*)(0x28620C0 + 296 * npc_id + 56 + skill*4); // получить силу скила
    char* text = text = Get_ITxt(cadr_id + 136 + skill *6, 1);          // получить строку в текстовике в зависимости от силы скила
    
    dlg->AddItem(_DlgStaticDef_::Create(dlg->width/2 -35, 25, 70, 70, 2, "ComSkls2.def", cadr_id, 0, 0x12));          
    dlg->AddItem(_DlgStaticText_::Create(25, 100, dlg->width -50, dlg->height -25 -100, text, "medfont.fnt", 1, 3, ALIGN_H_CENTER | ALIGN_V_CENTER, 0));

    dlg->RMC_Show();
}

int __stdcall New_CommanderDlg_Proc(_Dlg_* this_, _EventMsg_* msg)
{
    int r = this_->DefProc(msg);

    // обновление подсказки при движении мыши (id = 10)
    if (msg->type == MT_MOUSEOVER)
        {
            _DlgItem_* it = this_->FindItem(msg->x_abs, msg->y_abs);
            char* text = "";
            if (it)    
            {
                switch (it->id)
                {
                    case 3:     text = "Уволить командира"; break; // подсказка Уволить командира
                    case 4:     text = "ПКМ для просмотра биографии"; break; // подсказка для просмотра биографии
                    case 6:  text = Get_ITxt(o_Npc[this_->field_64].type + 10, 1); break; // подсказка первого спец_умения
                    case 7:  text = Get_ITxt(o_Npc[this_->field_64].type + 10, 2); break; // подсказка второго спец_умения
                    case 11: text = "Имя командира"; break; // подсказка Имя командира

                    case 12: text = Get_ITxt(o_Npc[this_->field_64].lvl_attack + 100, 1);      break; // подсказка дефа навыка атаки
                    case 13: text = Get_ITxt(o_Npc[this_->field_64].lvl_defence + 106, 1);     break; // подсказка дефа навыка защиты
                    case 14: text = Get_ITxt(o_Npc[this_->field_64].lvl_hit_points + 112, 1);  break; // подсказка дефа навыка здоровья
                    case 15: text = Get_ITxt(o_Npc[this_->field_64].lvl_damage + 118, 1);       break; // подсказка дефа навыка урона
                    case 16: text = Get_ITxt(o_Npc[this_->field_64].lvl_spell_power + 124, 1); break; // подсказка дефа навыка силы магии
                    case 17: text = Get_ITxt(o_Npc[this_->field_64].lvl_speed + 130, 1);       break; // подсказка дефа навыка скорости

                    case 30722:    text = "Ok"; break; // Ok Выход
                    default: text = "";    break;
                }
            statbar->SetText(text);
            statbar->Draw();
            statbar->RedrawScreen();
            }
        }

    if (msg->type == MT_MOUSEBUTTON)
            {
                if (msg->subtype == MST_RBUTTONDOWN) // клик ПКМ
                {
                    switch (msg->item_id)
                    {
                        case 3: b_MsgBox("Щелкните здесь, чтобы уволить командира.", MBX_RMC);            break;  // Уволить командира
                        case 4: case 11: b_MsgBox(Get_ITxtBio(this_->field_64, 1), MBX_RMC);            break;  // ПКМ для просмотра биографи
                        case 6: b_MsgBox(Get_ITxt(o_Npc[this_->field_64].type + 19, 1), MBX_RMC);        break;  // описание первого спец_умения
                        case 7: b_MsgBox(Get_ITxt(o_Npc[this_->field_64].type + 19, 2), MBX_RMC);        break;  // описание второго спец_умения
                        case 30722: b_MsgBox("Щелкните здесь, чтобы выйти из окна командира.", MBX_RMC); break; // Ok Выход

                        case 12: New_CommanderDlg_ShowPreSkill_RMC(this_->field_64, 0);     break; // подсказка дефа навыка атаки
                        case 13: New_CommanderDlg_ShowPreSkill_RMC(this_->field_64, 1);     break; // подсказка дефа навыка защиты
                        case 14: New_CommanderDlg_ShowPreSkill_RMC(this_->field_64, 2);     break; // подсказка дефа навыка здоровья
                        case 15: New_CommanderDlg_ShowPreSkill_RMC(this_->field_64, 3);     break; // подсказка дефа навыка урона
                        case 16: New_CommanderDlg_ShowPreSkill_RMC(this_->field_64, 4);     break; // подсказка дефа навыка силы магии
                        case 17: New_CommanderDlg_ShowPreSkill_RMC(this_->field_64, 5);     break; // подсказка дефа навыка скорости
                    }
                }
            }
    return r;
}


// новое диалоговое окно командира для ERA (0x0076A46E)
void New_CommanderDlg_Show(int NHero_id)
{
    _Npc_* npc = GetNpc(NHero_id); // получаем структуру командира

    _Dlg_* dlg = _CustomDlg_::Create(-1, -1, 634, 505, DF_SCREENSHOT | DF_SHADOW, New_CommanderDlg_Proc);

    // задник диалога под цвет игрока (id = 1)
    _DlgStaticPcx8_* fonPcx;
    dlg->AddItem(fonPcx = b_DlgStaticPcx8_Create(0, 0, dlg->width, dlg->height, 1, "DlgCom1.pcx", 2048));
    fonPcx->Colorize(o_GameMgr->GetMeID());

    // кнопки ок и уволить
    dlg->AddItem(_DlgButton_::Create(285, 429, 64, 30, 30722, "iOkay.def", 0, 1, 1, 28, 2)); // кнопка ok (id = 30722)
    dlg->AddItem(_DlgButton_::Create(564, 429, 51, 35, 3, "hsbtns2.def", 0, 1, 1, 28, 2));   // кнопка удалить командира (id = 3)
    CALL_3 (void, __thiscall, 0x50CEA0, o_MouseMgr, 0, 0);  // установить курсор(0,0)

    // деф командира
    dlg->field_64 = NHero_id; // сохраняем номер командира в структуре диалога для Dlg_Proc
    dlg->AddItem(_DlgStaticPcx8_::Create(20, 70, 100, 130, 4, "CRBKGNEU.pcx")); // фон замка под дефом командира нейтральный (id = 4)
    dlg->AddItem(CommDef = _DlgStaticDef_::Create(-130, -80, 100, 130, 5, o_CreatureInfo[o_Npc[NHero_id].type + 174].def_name, 0, 0, 0x12)); // шагающий деф командира (id = 5)
    
    // дефы спец_умений командира
    dlg->AddItem(_DlgStaticDef_::Create(395, 113, 43, 43, 6, "ComSkls.def", o_Npc[NHero_id].type *2, 0, 0x12));    // первый деф спец_умений (id = 6)
    dlg->AddItem(_DlgStaticDef_::Create(504, 113, 43, 43, 7, "ComSkls.def", o_Npc[NHero_id].type *2 +1, 0, 0x12)); // первый деф спец_умений (id = 7)

    // подсказка в статус баре    
    statbar = _DlgStaticTextPcx8ed_::Create(8, dlg->height -18 -8, dlg->width - 16, 18, "Подсказка", "smalfont.fnt", "HD_TStat.pcx", 1, 10, ALIGN_H_CENTER | ALIGN_V_CENTER);
    dlg->AddItem(statbar);

    dlg->AddItem(_DlgStaticText_::Create(131, 18, 370, 17, o_Npc[NHero_id].name, "medfont.fnt", 7, 11, ALIGN_H_CENTER | ALIGN_V_CENTER, 0)); // имя командира (id = 11)

    // скилы (id 12...17)
    dlg->AddItem(_DlgStaticDef_::Create(40, 270, 70, 70, 12, "ComSkls2.def", o_Npc[NHero_id].lvl_attack, 0, 0x12));           // Атака    (id = 12)
    dlg->AddItem(_DlgStaticDef_::Create(136, 270, 70, 70, 13, "ComSkls2.def", o_Npc[NHero_id].lvl_defence +7, 0, 0x12));      // Защита   (id = 13)
    dlg->AddItem(_DlgStaticDef_::Create(232, 270, 70, 70, 14, "ComSkls2.def", o_Npc[NHero_id].lvl_hit_points +14, 0, 0x12));  // Здоровье (id = 14)
    dlg->AddItem(_DlgStaticDef_::Create(328, 270, 70, 70, 15, "ComSkls2.def", o_Npc[NHero_id].lvl_damage +21, 0, 0x12));      // Урон      (id = 15)
    dlg->AddItem(_DlgStaticDef_::Create(424, 270, 70, 70, 16, "ComSkls2.def", o_Npc[NHero_id].lvl_spell_power +28, 0, 0x12)); // Магия    (id = 16)
    dlg->AddItem(_DlgStaticDef_::Create(520, 270, 70, 70, 17, "ComSkls2.def", o_Npc[NHero_id].lvl_speed +35, 0, 0x12));       // Скорость (id = 17)

    dlg->Run();
    dlg->Destroy(TRUE);
}

Структура командира:
Code:
#define o_Npc ((_Npc_*)0x28620C0)         // получение структуры командира

struct _Npc_;

// Структура командира 0x128h (296)
NOALIGN struct _Npc_
{
_dword_ on;               // 0x00     +0    Доступность
_dword_ alive;            // 0x04     +4    Жив_или_мёртв  
_dword_ id;               // 0x08     +8    Номер_героя_хозяина (ну и номер командира)
_dword_ type;             // 0x0C     +12   Тип_командира
_dword_ type_Hero;        // 0x10     +16   Тип_героя
_dword_ LastExpaInBattle; // 0x14     +20   Опыт в прошлых битвах
_dword_ CustomPrimary;    // 0x18     +24   Если вы установить 1 (вкл), первичные навыки не будут изменяться с продвижением командира по уровням
                           //                Если установить 0, то здоровье и урон  будут автоматически прибавляться вместе с уровнем командира (из ERM Help = CO:P)
_dword_ attack;           // 0x1C     +28   Атака
_dword_ defence;          // 0x20     +32   Защита
_dword_ hit_points;       // 0x24     +36   Здоровье
_dword_ damage;           // 0x28     +40   Урон
_dword_ spell_power;      // 0x2C     +44   Сила_магии
_dword_ speed;            // 0x30     +48   Скорость
_dword_ resistance;       // 0x34     +52   Сопротивление

_dword_ lvl_attack;       // 0x38     +56   Уровень_Атаки
_dword_ lvl_defence;      // 0x3C     +60   Уровень_Защиты
_dword_ lvl_hit_points;   // 0x40     +64   Уровень_Здоровья
_dword_ lvl_damage;       // 0x44     +68   Уровень_Урона
_dword_ lvl_spell_power;  // 0x48     +72   Уровень_Сила_магии
_dword_ lvl_speed;        // 0x4C     +76   Уровень_Скорости
_dword_ lvl_resistance;   // 0x50     +80   Уровень_Сопротивления

_word_ arts[10][8];       // 0x54     +84   Номер_артефакта; Кол-во проведённых с ним битв
_char_ name[32];          // 0xF4     +244  Имя
_dword_ old_expa;         // 0x114    +276  Старый_опыт_героя
_dword_ now_expa;         // 0x118    +280  Текущий_опыт
_dword_ now_level;        // 0x11C    +284  Текущий_уровень (при отображении добавляем +1)
_dword_ specBon[2];       // 0x120    +288  Особые_бонусы(сумма_битов); Запрещенные_бонусы(сумма_битов)
};

// функция получения адреса структуры командира
inline _Npc_*  GetNpc(_int_ hero_id) {return ((_Npc_ *)(0x28620C0 + 296 * hero_id));}
// функция получения строк из командирского текстовика "znpc00.txt"
inline char* Get_ITxt(int StrNum, int ItemNum) {return CALL_3 (char*, __cdecl, 0x77710B, StrNum, ItemNum, 0x2860724);}
// функция получения строк из командирского текстовика "znpc01.txt" Имена и биографии
inline char* Get_ITxtBio(int StrNum, int ItemNum) {return CALL_3 (char*, __cdecl, 0x77710B, StrNum, ItemNum, 0x286072C);}
Image: CXeNCc7.jpg


Скачать HoMM3 ERA 2.461
И пара мелочей для ERA
(This post was last modified: 08.09.2017 11:22 by igrik.)
03.09.2017 01:15
Visit this user's website Find all posts by this user Quote this message in a reply
RoseKavalier Offline

Posts: 12
Post: #842

Очень приятно, спасибо еще раз за помощь)

EDIT:
Modified to use with short_tip_text. Works great, thanks x2
Code:
int __stdcall show_text_hint(_Dlg_* this_, _EventMsg_* msg)
{
    int r = this_->DefProc(msg);
    char* text;
    text = "";
    if (msg->type == MT_MOUSEOVER) {
        _DlgItem_* it = this_->FindItem(msg->x_abs, msg->y_abs);        
        if (it) {
            if (it->short_tip_text != NULL)
                text = it->short_tip_text;
        }
        statbar->SetText(text);
        statbar->Draw();
        statbar->RedrawScreen();
    }        
    return r;
}
(This post was last modified: 03.09.2017 23:43 by RoseKavalier.)
03.09.2017 18:39
Find all posts by this user Quote this message in a reply
RoseKavalier Offline

Posts: 12
Post: #843

I read conversation at DF2 (don't have account there...) and your solution below.
Я читал разговор на DF2 (нет аккаунта там...) и ваше решение ниже.
Graphic mode

It seems bug is related to different graphic mode,
32-bit GDI ok
True not ok
Image: tFuHLND.png

By any chance, could there be updated versions of dialog files?
Случайно, может быть обновленных версий диалоговые файлы?

If not, is there a way to make Set_DlgStdBackground() more... dynamic and less "one-size fits all". Seems to increment in +64
Если нет, есть ли способ, чтобы сделать Set_DlgStdBackground() в более... динамичным и менее "одну гребенку". Кажется, прирост в +64

Спасибо за ваше время)

Code:
width = 272;
dlg->AddItemByZOrder(_DlgStdBackground_::Create(0, 0, d_w, d_h, 0, 0, o_GameMgr->GetMeID()), 0);
Image: vzITrz1.png

Code:
width = 250
Set_DlgStdBackground (dlg);
Image: KR3sUij.png

Code:
width = 260
Set_DlgStdBackground (dlg);
Image: EMrhDFS.png
07.09.2017 04:06
Find all posts by this user Quote this message in a reply
igrik Offline
Moderators

Posts: 1158
Post: #844

(07.09.2017 04:06)RoseKavalier Wrote:  By any chance, could there be updated versions of dialog files?
Случайно, может быть обновленных версий диалоговые файлы?

If not, is there a way to make Set_DlgStdBackground() more... dynamic and less "one-size fits all". Seems to increment in +64
Если нет, есть ли способ, чтобы сделать Set_DlgStdBackground() в более... динамичным и менее "одну гребенку". Кажется, прирост в +64
Обновленных версий нет.

Да, там проиходит увеличение дилогового окна на +64.
Если хотите сделать более динамичным, то вам необходимо исследовать функцию 0x48FA80 и перед показом диалога изменять все "64" на нужное увеличение размера, а потом возвращать этот параметр (=64).
Я бы сделал так.


Скачать HoMM3 ERA 2.461
И пара мелочей для ERA
07.09.2017 13:41
Visit this user's website Find all posts by this user Quote this message in a reply
RoseKavalier Offline

Posts: 12
Post: #845

Отличный ответ, спасибо!

EDIT: good news ---
you can place any custom *.pcx, *.def, *.bmp inside your plugin folder and it can be used directly.
вы можете разместить любой заказ, *.pcx, *.def, *.bmp ..., внутри папки плагинов и его можно использовать напрямую.

Image: mdDrR8w.png

EDIT2: after some thinking... started making a function for dynamic background.
Lacks color but maybe that can be fixed...
после некоторых размышлений, я начал делать функцию для динамического фона.

It works will all graphic modes as far as I could tell.
Code:
int create_standard_background(_Dlg_* dlg, int status_bar)
{
    //dlg->AddItem(_DlgStaticPcx8_::Create(0, 0, min(dlg->width,256), min(dlg->height,256), 0, "DiBoxBck.pcx"));
    
    int current_x, remaining_x, current_y, remaining_y, horizontal_row;

    current_x = 0;
    remaining_x = dlg->width;
    current_y = 0;
    remaining_y = dlg->height;
    horizontal_row = 0;

    if (remaining_x < 64 || remaining_y < 64)
        return 0;

    while (TRUE) {        
        while (TRUE) { // do horizontal pass first
            if (remaining_x > 0) {
                dlg->AddItem(_DlgStaticPcx8_::Create(current_x, horizontal_row * 256, min(remaining_x, 256), min(remaining_y, 256), 0, "DiBoxBck.pcx"));
                current_x = current_x + 256;
                remaining_x = remaining_x - 256;
            }
            else break;
        }        
        current_x = 0;        // reset x position to 0        
        remaining_x = dlg->width; // reset length of horizontal line
        remaining_y = remaining_y - 256; // update remaining y since we're done with horizontal pass
        horizontal_row = horizontal_row + 1;    // we might be working on a new row soon if condition below is met        
        if (remaining_y <= 0)
            break;        // no more rows to add
    }

    int top_left = 0;
    int top_right = 1;
    int bottom_left = 2;
    int bottom_right = 3;
    int left_middle = 4;
    int right_middle = 5;
    int top_middle = 6;
    int bottom_middle = 7;

    if (status_bar) {
        bottom_left = 8;
        bottom_right = 9;
        bottom_middle = 10;
    }

    // add horizontal borders    
    current_x = 0;
    remaining_x = dlg->width;
    while (remaining_x >= 64) {
        dlg->AddItem(_DlgStaticDef_::Create(current_x, 0, 0, "dialgbox.def", top_middle, 0, 0));
        dlg->AddItem(_DlgStaticDef_::Create(current_x, dlg->height - 64, 0, "dialgbox.def", bottom_middle, 0, 0));
        current_x += 64;
        remaining_x -= 64;
    }
    // add vertical borders
    current_y = 0;
    remaining_y = dlg->height;
    while (remaining_y >= 64) {
        dlg->AddItem(_DlgStaticDef_::Create(0, current_y, 0, "dialgbox.def", left_middle, 0, 0));
        dlg->AddItem(_DlgStaticDef_::Create(dlg->width - 64, current_y, 0, "dialgbox.def", right_middle, 0, 0));
        current_y += 64;
        remaining_y -= 64;
    }

    // add four corners
    dlg->AddItem(_DlgStaticDef_::Create(0, 0, 0, "dialgbox.def", top_left, 0, 0));
    dlg->AddItem(_DlgStaticDef_::Create(0, dlg->height - 64, 0, "dialgbox.def", bottom_left, 0, 0));
    dlg->AddItem(_DlgStaticDef_::Create(dlg->width - 64, 0, 0, "dialgbox.def", top_right, 0, 0));    
    dlg->AddItem(_DlgStaticDef_::Create(dlg->width - 64, dlg->height - 64, 0, "dialgbox.def", bottom_right, 0, 0));
}
Image: HWByect.png
(This post was last modified: 08.09.2017 10:24 by RoseKavalier.)
08.09.2017 04:00
Find all posts by this user Quote this message in a reply
igrik Offline
Moderators

Posts: 1158
Post: #846

(08.09.2017 04:00)RoseKavalier Wrote:  EDIT2: after some thinking... started making a function for dynamic background.
Lacks color but maybe that can be fixed...
после некоторых размышлений, я начал делать функцию для динамического фона.

It works will all graphic modes as far as I could tell.
Wow nice!!
Add a repainted dialogue to the player's color. Like this
Code:
// add color this player
CALL_5 (int, __thiscall, 0x5FF400, dlg, 512, 13, 0, o_GameMgr->GetMeID());

// add four corners
dlg->AddItem(_DlgStaticDef_::Create(0, 0, 0, "dialgbox.def", top_left, 0, 0));
dlg->AddItem(_DlgStaticDef_::Create(0, dlg->height - 64, 0, "dialgbox.def", bottom_left, 0, 0));
dlg->AddItem(_DlgStaticDef_::Create(dlg->width - 64, 0, 0, "dialgbox.def", top_right, 0, 0));    
dlg->AddItem(_DlgStaticDef_::Create(dlg->width - 64, dlg->height - 64, 0, "dialgbox.def", bottom_right, 0, 0));
}
Image: Q5zoYrS.jpg


Скачать HoMM3 ERA 2.461
И пара мелочей для ERA
(This post was last modified: 08.09.2017 11:31 by igrik.)
08.09.2017 11:16
Visit this user's website Find all posts by this user Quote this message in a reply
RoseKavalier Offline

Posts: 12
Post: #847

(08.09.2017 11:16)igrik Wrote:  Wow nice!!
Add a repainted dialogue to the player's color. Like this
Code:
// add color this player
CALL_5 (int, __thiscall, 0x5FF400, dlg, 512, 13, 0, o_GameMgr->GetMeID());
Image: Q5zoYrS.jpg

!!!!!

Я не знаю, почему и как это работает, но это **** невероятно! Огромное спасибо)

109

Ed: same logic, blue background.
же логику, синий фон.

Code:
int create_blue_background(_Dlg_* dlg)
{
    int current_x, remaining_x, current_y, remaining_y, horizontal_row;

    current_x = 0;
    remaining_x = dlg->width;
    current_y = 0;
    remaining_y = dlg->height;
    horizontal_row = 0;

    if (remaining_x < 42 || remaining_y < 42)
        return 0;

    while (TRUE) {
        while (TRUE) { // do horizontal pass first
            if (remaining_x > 0) {
                dlg->AddItem(_DlgStaticPcx8_::Create(current_x, horizontal_row * 256, min(remaining_x, 256), min(remaining_y, 256), 0, "DlgBluBk.bmp"));
                current_x += 256;
                remaining_x -= 256;
            }
            else break;
        }
        current_x = 0;        // reset x position to 0        
        remaining_x = dlg->width; // reset length of horizontal line
        remaining_y = remaining_y - 256; // update remaining y since we're done with horizontal pass
        horizontal_row = horizontal_row + 1;    // we might be working on a new row soon if condition below is met        
        if (remaining_y <= 0)
            break;        // no more rows to add
    }

    int top_left = 0;
    int top_right = 1;
    int bottom_left = 2;
    int bottom_right = 3;
    int left_middle = 4;
    int right_middle = 5;
    int top_middle = 6;
    int bottom_middle = 7;

    // add horizontal borders    
    current_x = 0;
    remaining_x = dlg->width;
    while (remaining_x >= 42) {
        dlg->AddItem(_DlgStaticDef_::Create(current_x, 0, 0, "DlgBluBo.def", top_middle, 0, 0));
        dlg->AddItem(_DlgStaticDef_::Create(current_x, dlg->height - 42, 0, "DlgBluBo.def", bottom_middle, 0, 0));
        current_x += 42;
        remaining_x -= 42;
    }
    // add vertical borders
    current_y = 0;
    remaining_y = dlg->height;
    while (remaining_y >= 42) {
        dlg->AddItem(_DlgStaticDef_::Create(0, current_y, 0, "DlgBluBo.def", left_middle, 0, 0));
        dlg->AddItem(_DlgStaticDef_::Create(dlg->width - 42, current_y, 0, "DlgBluBo.def", right_middle, 0, 0));
        current_y += 42;
        remaining_y -= 42;
    }

    // add four corners
    dlg->AddItem(_DlgStaticDef_::Create(0, 0, 0, "DlgBluBo.def", top_left, 0, 0));
    dlg->AddItem(_DlgStaticDef_::Create(0, dlg->height - 42, 0, "DlgBluBo.def", bottom_left, 0, 0));
    dlg->AddItem(_DlgStaticDef_::Create(dlg->width - 42, 0, 0, "DlgBluBo.def", top_right, 0, 0));
    dlg->AddItem(_DlgStaticDef_::Create(dlg->width - 42, dlg->height - 42, 0, "DlgBluBo.def", bottom_right, 0, 0));
}
(This post was last modified: 08.09.2017 17:45 by RoseKavalier.)
08.09.2017 17:36
Find all posts by this user Quote this message in a reply
RoseKavalier Offline

Posts: 12
Post: #848

Small modification for create_standard_background(...) to prevent border appearance in status bar... actually would be slightly more efficient starting from (dlg->height - 64) and working back but this works fine)
Небольшая модификация для create_standard_background(...) для предотвращения появления границы в строке состояния...

Code:
    // add vertical borders
    current_y = 0;
    remaining_y = dlg->height;
    while (remaining_y >= 64) {
        if (remaining_y - 64 <= 37)
            current_y = dlg->height - 64 - 37; // hide a bit for status bar
        dlg->AddItem(_DlgStaticDef_::Create(0, current_y, 0, "dialgbox.def", left_middle, 0, 0));
        dlg->AddItem(_DlgStaticDef_::Create(dlg->width - 64, current_y, 0, "dialgbox.def", right_middle, 0, 0));
        current_y += 64;
        remaining_y -= 64;
    }

~~~~~

Are there structures available for Quest Guards / Seer Huts? Only thing I could find is QU receiver from ERA but no structure... I could probably map these myself but if someone has and is willing to share, would be quite helpful!
Имеющиеся конструкции для охранников квеста / хижины Провидца? Единственное, что я мог найти, это QU приемник от эпохи, но не структура... Я мог бы сопоставить его сам, но если кто-то имеет и готов поделиться, это было бы очень полезно!

e.g.
struct + 0x3C = deadline / крайний срок
(This post was last modified: 18.09.2017 05:38 by RoseKavalier.)
18.09.2017 05:05
Find all posts by this user Quote this message in a reply
gamecreator Offline
Administrators

Posts: 7116
Post: #849

(18.09.2017 05:05)RoseKavalier Wrote:  Are there structures available for Quest Guards / Seer Huts? Only thing I could find is QU receiver from ERA but no structure... I could probably map these myself but if someone has and is willing to share, would be quite helpful!
Link updated. It has the sources you need.


When all gods have burnt to ashes in eternity of sorrow,
Demons gonna tear your soul because there is no tomorrow.
18.09.2017 20:55
Find all posts by this user Quote this message in a reply
RoseKavalier Offline

Posts: 12
Post: #850

Wonderful, much appreciated. What a great community!
19.09.2017 05:14
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2017 MyBB Group