| 
 
				 (02.09.2017 19:17)RoseKavalier Wrote:  Another question: how about "mouse-over text"? 
Смотри тут. Это недописанное окно командира.
 
Code:
 _DlgStaticDef_* CommDef;_DlgStaticTextPcx8ed_* statbar = NULL;
 
 // показ сообщения по ПКМ на первичных навыках командира
 void Y_New_CommanderDlg_ShowPreSkill_RMC(int npc_id, int skill)
 {
 int skill_power = *(int*)(0x28620C0 + 296 * npc_id + 56 + skill*4); // получить силу скила
 char* text = "";
 int sizeX, sizeY;
 
 bool art_npc_155 = false;
 for (char i = 0; i < 6; ++i ){
 if (o_Npc[npc_id].arts[i][0] == 155 )
 art_npc_155 = true;
 }
 if ( !art_npc_155 || skill_power > 1 )
 {
 text = Get_ITxt(skill_power + 136 + skill *6, 1);        // получить строку в текстовике в зависимости от силы скила
 sizeX = 560; sizeY = 440;
 }
 else
 {
 text = Get_ITxt(skill + 236, 1);
 sizeX = 340; sizeY = 220;
 }
 
 _Dlg_* dlg = _CustomDlg_::Create(-1, -1, sizeX, sizeY, DF_SCREENSHOT | DF_SHADOW, NULL);
 dlg->AddItemByZOrder(_DlgStdBackground_::Create(0, 0, dlg->width, dlg->height, 0, 0, o_GameMgr->GetMeID()), 0);
 
 dlg->AddItem(_DlgStaticDef_::Create(dlg->width/2 -35, 25, 70, 70, 2, "ComSkls2.def", skill_power + skill*7 + 6*art_npc_155, 0, 0x12));
 dlg->AddItem(_DlgStaticText_::Create(25, 95, dlg->width -50, dlg->height -25 -95, text, "medfont.fnt", 1, 3, ALIGN_H_CENTER | ALIGN_V_TOP, 0));
 
 dlg->RMC_Show();
 }
 
 int __stdcall Y_New_CommanderDlg_Proc(_Dlg_* dlg_Npc, _EventMsg_* msg)
 {
 int r = dlg_Npc->DefProc(msg);
 
 int npc_id = dlg_Npc->field_64; // получаем номер командира/героя
 _Npc_* npc = GetNpc(npc_id); // получаем структуру командира
 _Hero_* hero = o_GameMgr->GetHero(npc_id); // структура героя
 int temp_1, temp_2; // временная переменная
 
 // обновление подсказки при движении мыши (id = 10)
 if (msg->type == MT_MOUSEOVER)
 {
 _DlgItem_* it = dlg_Npc->FindItem(msg->x_abs, msg->y_abs);
 char* text = "";
 if (it)
 {
 switch (it->id)
 {
 case 3:     text = Get_ITxt(263, 1); break; // подсказка Уволить командира
 case 4:     text = Get_ITxt(273, 1); break; // подсказка для просмотра биографии
 case 6:  text = Get_ITxt(npc->type + 10, 1); break; // подсказка первого спец_умения
 case 7:  text = Get_ITxt(npc->type + 10, 2); break; // подсказка второго спец_умения
 case 11: text = Get_ITxt(259, 1); break; // подсказка Имя командира
 
 case 12: text = Get_ITxt(npc->lvl_attack + 100, 1);      break; // подсказка дефа навыка атаки
 case 13: text = Get_ITxt(npc->lvl_defence + 106, 1);     break; // подсказка дефа навыка защиты
 case 14: text = Get_ITxt(npc->lvl_hit_points + 112, 1);  break; // подсказка дефа навыка здоровья
 case 15: text = Get_ITxt(npc->lvl_damage + 118, 1);       break; // подсказка дефа навыка урона
 case 16: text = Get_ITxt(npc->lvl_spell_power + 124, 1); break; // подсказка дефа навыка силы магии
 case 17: text = Get_ITxt(npc->lvl_speed + 130, 1);       break; // подсказка дефа навыка скорости
 
 case 31: case 61: sprintf(o_TextBuffer, "%s%d", Get_ITxt(264, 1), npc->now_level +1); text = o_TextBuffer; break;// подсказка уровня командира
 case 32: case 33: text = Get_ITxt(242, 1);       break; // подсказка класса командира
 case 34: case 35: sprintf(o_TextBuffer, "%s%s", Get_ITxt(266, 1), hero->name); text = o_TextBuffer; break;// подсказка хозяина героя
 case 36: case 37: sprintf(o_TextBuffer, "%s%d", Get_ITxt(267, 1), npc->now_expa); text = o_TextBuffer; break;// подсказка текущего опыта
 case 38: case 39: sprintf(o_TextBuffer, "%s%d", Get_ITxt(268, 1), CALL_1(int, __thiscall, 0x769260, npc)); text = o_TextBuffer; break;// подсказка следующего опыта
 
 case 40: text = Get_ITxt(269, 1); break; // подсказка навыки класса
 case 41: text = Get_ITxt(270, 1); break; // подсказка артефакты
 case 42: text = Get_ITxt(271, 1); break; // подсказка основные навыки
 case 43: text = Get_ITxt(272, 1); break; // подсказка вторичные навыки
 
 case 45: temp_1 = Get_NpcSkillPower(npc, 0); temp_2 = hero->attack;
 if ( npc->type == 7 ) temp_2 += (temp_2/2);
 sprintf(o_TextBuffer, Get_ITxt(275, 2), temp_1 + temp_2); text = o_TextBuffer; break;                                            // подсказка атака
 case 46: temp_1 = Get_NpcSkillPower(npc, 1); temp_2 = hero->defence;
 if ( npc->type == 7 ) temp_2 += (temp_2/2);
 sprintf(o_TextBuffer, Get_ITxt(276, 2), temp_1 + temp_2); text = o_TextBuffer; break;                                            // подсказка защита
 
 case 47: sprintf(o_TextBuffer, Get_ITxt(277, 2), Get_NpcSkillPower(npc, 2)); text = o_TextBuffer; break;                                // подсказка здоровье
 case 48: sprintf(o_TextBuffer, Get_ITxt(278, 2), Get_NpcSkillPower(npc, 3)/2, Get_NpcSkillPower(npc, 3)); text = o_TextBuffer; break;    // подсказка сила урон
 case 49: sprintf(o_TextBuffer, Get_ITxt(279, 2), Get_NpcSkillPower(npc, 4)); text = o_TextBuffer; break;                                // подсказка сила магии
 case 50: sprintf(o_TextBuffer, Get_ITxt(280, 2), Get_NpcSkillPower(npc, 6)); text = o_TextBuffer; break;                                // подсказка сопротивление
 case 51: sprintf(o_TextBuffer, Get_ITxt(281, 2), ((npc->specBon[0] & 0x10) ? 24 : 0)); text = o_TextBuffer; break;                        // подсказка боезапас
 case 52: sprintf(o_TextBuffer, Get_ITxt(282, 2), Get_NpcSkillPower(npc, 5)); text = o_TextBuffer; break;                                // подсказка скорость
 
 case 30722:    text = Get_ITxt(261, 1); 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(Get_ITxt(201, 1), MBX_RMC);            break;  // Уволить командира
 case 4: case 11: b_MsgBox(Get_ITxtBio(npc_id, 1), MBX_RMC);            break;  // ПКМ для просмотра биографи
 case 6: b_MsgBox(Get_ITxt(npc->type + 19, 1), MBX_RMC);        break;  // ПКМ первого спец_умения
 case 7: b_MsgBox(Get_ITxt(npc->type + 19, 2), MBX_RMC);        break;  // ПКМ второго спец_умения
 
 case 12: Y_New_CommanderDlg_ShowPreSkill_RMC(npc_id, 0);     break; // ПКМ дефа навыка атаки
 case 13: Y_New_CommanderDlg_ShowPreSkill_RMC(npc_id, 1);     break; // ПКМ дефа навыка защиты
 case 14: Y_New_CommanderDlg_ShowPreSkill_RMC(npc_id, 2);     break; // ПКМ дефа навыка здоровья
 case 15: Y_New_CommanderDlg_ShowPreSkill_RMC(npc_id, 3);     break; // ПКМ дефа навыка урона
 case 16: Y_New_CommanderDlg_ShowPreSkill_RMC(npc_id, 4);     break; // ПКМ дефа навыка силы магии
 case 17: Y_New_CommanderDlg_ShowPreSkill_RMC(npc_id, 5);     break; // ПКМ дефа навыка скорости
 
 case 32: case 33: b_MsgBox(Get_ITxt(npc->type + 186, 1), MBX_RMC);        break;  // ПКМ на описании класса
 
 case 30722: b_MsgBox(Get_ITxt(261, 2), MBX_RMC); break; // ПКМ Ok Выход
 }
 }
 }
 return r;
 }
 // новое диалоговое окно командира для ERA (0x0076A46E)
 int Y_New_CommanderDlg_Show(int NHero_id, bool lvl_up)
 {
 _Npc_* npc = GetNpc(NHero_id); // получаем структуру командира
 _Hero_* hero = o_GameMgr->GetHero(NHero_id); // структура героя
 int sizeX, sizeY;
 char* name_pcx;
 
 if (!lvl_up)    {
 name_pcx = "DlgCom0.pcx";
 sizeX = 634; sizeY = 505;
 }
 else {
 name_pcx = "DlgCom1.pcx";
 sizeX = 634; sizeY = 600;
 }
 
 _Dlg_* dlg = _CustomDlg_::Create(-1, -1, sizeX, sizeY, DF_SCREENSHOT | DF_SHADOW, Y_New_CommanderDlg_Proc);
 
 // деф командира
 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[npc->type + 174].def_name, 0, 0, 0x12)); // шагающий деф командира (id = 5)
 
 // задник диалога под цвет игрока (id = 1)
 _DlgStaticPcx8_* fonPcx;
 dlg->AddItem(fonPcx = b_DlgStaticPcx8_Create(0, 0, dlg->width, dlg->height, 1, name_pcx, 2048));
 fonPcx->Colorize(o_GameMgr->GetMeID());
 
 // кнопки ок и уволить
 dlg->AddItem(_DlgButton_::Create(285, dlg->height -76, 64, 30, 30722, "iOkay.def", 0, 1, 1, 28, 2)); // кнопка ok (id = 30722)
 dlg->AddItem(_DlgButton_::Create(564, dlg->height -76, 51, 35, 3, "hsbtns2.def", 0, 1, 1, 28, 2));   // кнопка удалить командира (id = 3)
 CALL_3 (void, __thiscall, 0x50CEA0, o_MouseMgr, 0, 0);  // установить курсор(0,0)
 
 dlg->AddItem(_DlgStaticText_::Create(20, 70, 100, 130, "", "medfont.fnt", 1, 4, ALIGN_H_CENTER | ALIGN_V_CENTER, 0));  // подсказка на дефе (пустышка, но по ней ПКМ определяет id и выдает окно биографии)
 
 // дефы спец_умений командира
 dlg->AddItem(_DlgStaticDef_::Create(395, 113, 43, 43, 6, "ComSkls.def", npc->type *2, 0, 0x12));    // первый деф спец_умений (id = 6)
 dlg->AddItem(_DlgStaticDef_::Create(504, 113, 43, 43, 7, "ComSkls.def", npc->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, npc->name, "medfont.fnt", 7, 11, ALIGN_H_CENTER | ALIGN_V_CENTER, 0)); // имя командира (id = 11)
 
 // артефакты (id 20...25)
 bool art_npc_155 = false;
 for (char i = 0; i < 6; ++i ){
 if (npc->arts[i][0] > 0 )
 dlg->AddItem(_DlgStaticDef_::Create(330 +48*i, 184, 45, 45, 20, "artifact.def", npc->arts[i][0], 0, 0x12));
 if (npc->arts[i][0] == 155 )
 art_npc_155 = true;
 }
 
 // скилы (id 12...17)
 for (char i = 0; i < 6; ++i ){
 int art_freme_skill = *(int*)(0x28620C0 +296*NHero_id +56 +4*i);
 if (art_freme_skill < 2 && art_npc_155)
 art_freme_skill = 6;
 dlg->AddItem(_DlgStaticDef_::Create(40 +96*i, 270, 70, 70, 12+i, "ComSkls2.def", art_freme_skill +7*i, 0, 0x12));
 }
 
 dlg->AddItem(_DlgStaticText_::Create(22, 46, 96, 18, Get_ITxt(264, 1), "medfont.fnt", 7, 31, ALIGN_H_LEFT | ALIGN_V_CENTER, 0)); // уровень_текст (id = 31)
 sprintf(o_TextBuffer, "%d", npc->now_level +1);
 dlg->AddItem(_DlgStaticText_::Create(22, 46, 96, 18, o_TextBuffer, "medfont.fnt", 1, 61, ALIGN_H_RIGHT | ALIGN_V_CENTER, 0)); // уровень_число (id = 61)
 
 dlg->AddItem(_DlgStaticText_::Create(16, 205, 104, 18, Get_ITxt(265, 1), "medfont.fnt", 7, 32, ALIGN_H_CENTER | ALIGN_V_TOP, 0)); // класс_текст1 (id = 32)
 dlg->AddItem(_DlgStaticText_::Create(16, 220, 104, 18, Get_ITxt(npc->type +216, 1), "medfont.fnt", 1, 33, ALIGN_H_CENTER | ALIGN_V_TOP, 0)); // класс_текст2 (id = 33)
 
 dlg->AddItem(_DlgStaticText_::Create(128, 46, 192, 18, Get_ITxt(266, 1), "medfont.fnt", 7, 34, ALIGN_H_LEFT | ALIGN_V_CENTER, 0)); // Хозяин_текст (id = 34)
 dlg->AddItem(_DlgStaticText_::Create(128, 46, 192, 18, hero->name, "medfont.fnt", 1, 35, ALIGN_H_RIGHT | ALIGN_V_CENTER, 0)); // Хозяин_имя (id = 35)
 
 dlg->AddItem(_DlgStaticText_::Create(330, 46, 284, 18, Get_ITxt(267, 1), "medfont.fnt", 7, 36, ALIGN_H_LEFT | ALIGN_V_CENTER, 0)); // Текущий_опыт_текст (id = 36)
 sprintf(o_TextBuffer, "%d", o_Npc[NHero_id].now_expa);
 dlg->AddItem(_DlgStaticText_::Create(330, 46, 284, 18, o_TextBuffer, "medfont.fnt", 1, 37, ALIGN_H_RIGHT | ALIGN_V_CENTER, 0)); // Текущий_опыт_число (id = 37)
 
 dlg->AddItem(_DlgStaticText_::Create(330, 68, 284, 18, Get_ITxt(268, 1), "medfont.fnt", 7, 38, ALIGN_H_LEFT | ALIGN_V_CENTER, 0)); // Следующий_уровень_текст (id = 38)
 
 sprintf(o_TextBuffer, "%d", CALL_1(int, __thiscall, 0x769260, npc));
 dlg->AddItem(_DlgStaticText_::Create(330, 68, 284, 18, o_TextBuffer, "medfont.fnt", 1, 39, ALIGN_H_RIGHT | ALIGN_V_CENTER, 0));   // Следующий_уровень_число (id = 39)
 
 dlg->AddItem(_DlgStaticText_::Create(377, 91, 192, 18, Get_ITxt(269, 1), "medfont.fnt", 7, 40, ALIGN_H_CENTER | ALIGN_V_CENTER, 0)); // Навыки_класса_текст (id = 40)
 dlg->AddItem(_DlgStaticText_::Create(377, 160, 192, 18, Get_ITxt(270, 1), "medfont.fnt", 7, 41, ALIGN_H_CENTER | ALIGN_V_CENTER, 0)); // Артефакты_текст (id = 41)
 
 dlg->AddItem(_DlgStaticText_::Create(133, 247, 366, 18, Get_ITxt(271, 1), "medfont.fnt", 7, 42, ALIGN_H_CENTER | ALIGN_V_CENTER, 0)); // Основные_навыки_текст (id = 42)
 dlg->AddItem(_DlgStaticText_::Create(133, 344, 366, 18, Get_ITxt(272, 1), "medfont.fnt", 7, 43, ALIGN_H_CENTER | ALIGN_V_CENTER, 0)); // Вторичные_навыки_текст (id = 43)
 
 int temp_1, temp_2; // временные переменные
 
 temp_1 = Get_NpcSkillPower(npc, 0);     temp_2 = hero->attack;
 if ( npc->type == 7 ) temp_2 += (temp_2/2);
 sprintf(o_TextBuffer, "%d (%d)", temp_1, temp_1 + temp_2);
 dlg->AddItem(_DlgStaticText_::Create(128, 69, 192, 18, o_TextBuffer, "medfont.fnt", 1, 65, ALIGN_H_RIGHT | ALIGN_V_CENTER, 0));    // Атака_число (id = 65)
 dlg->AddItem(_DlgStaticText_::Create(128, 69, 192, 18, Get_ITxt(275, 1), "medfont.fnt", 7, 45, ALIGN_H_LEFT | ALIGN_V_CENTER, 0)); // Атака_текст (id = 45)
 
 temp_1 = Get_NpcSkillPower(npc, 1);     temp_2 = hero->defence;
 if ( npc->type == 7 ) temp_2 += (temp_2/2);
 sprintf(o_TextBuffer, "%d (%d)", temp_1, temp_1 + temp_2);
 dlg->AddItem(_DlgStaticText_::Create(128, 91, 192, 18, o_TextBuffer, "medfont.fnt", 1, 66, ALIGN_H_RIGHT | ALIGN_V_CENTER, 0));    // Защита_число (id = 66)
 dlg->AddItem(_DlgStaticText_::Create(128, 91, 192, 18, Get_ITxt(276, 1), "medfont.fnt", 7, 46, ALIGN_H_LEFT | ALIGN_V_CENTER, 0)); // Защита_текст (id = 46)
 
 sprintf(o_TextBuffer, "%d", Get_NpcSkillPower(npc, 2));
 dlg->AddItem(_DlgStaticText_::Create(128, 113, 192, 18, o_TextBuffer, "medfont.fnt", 1, 67, ALIGN_H_RIGHT | ALIGN_V_CENTER, 0));    // Здоровье_число (id = 67)
 dlg->AddItem(_DlgStaticText_::Create(128, 113, 192, 18, Get_ITxt(277, 1), "medfont.fnt", 7, 47, ALIGN_H_LEFT | ALIGN_V_CENTER, 0)); // Здоровье_текст (id = 47)
 
 temp_1 = Get_NpcSkillPower(npc, 3);
 sprintf(o_TextBuffer, "%d - %d", temp_1/2, temp_1);
 dlg->AddItem(_DlgStaticText_::Create(128, 135, 192, 18, o_TextBuffer, "medfont.fnt", 1, 68, ALIGN_H_RIGHT | ALIGN_V_CENTER, 0));    // Урон_число (id = 68)
 dlg->AddItem(_DlgStaticText_::Create(128, 135, 192, 18, Get_ITxt(278, 1), "medfont.fnt", 7, 48, ALIGN_H_LEFT | ALIGN_V_CENTER, 0)); // Урон_текст (id = 48)
 
 sprintf(o_TextBuffer, "%d", Get_NpcSkillPower(npc, 4));
 dlg->AddItem(_DlgStaticText_::Create(128, 157, 192, 18, o_TextBuffer, "medfont.fnt", 1, 69, ALIGN_H_RIGHT | ALIGN_V_CENTER, 0));    // Сила_магии_число (id = 69)
 dlg->AddItem(_DlgStaticText_::Create(128, 157, 192, 18, Get_ITxt(279, 1), "medfont.fnt", 7, 49, ALIGN_H_LEFT | ALIGN_V_CENTER, 0)); // Сила_магии_текст (id = 49)
 
 sprintf(o_TextBuffer, "%d%%", Get_NpcSkillPower(npc, 6));
 dlg->AddItem(_DlgStaticText_::Create(128, 179, 192, 18, o_TextBuffer, "medfont.fnt", 1, 70, ALIGN_H_RIGHT | ALIGN_V_CENTER, 0));    // Сопротивление_число (id = 70)
 dlg->AddItem(_DlgStaticText_::Create(128, 179, 192, 18, Get_ITxt(280, 1), "medfont.fnt", 7, 50, ALIGN_H_LEFT | ALIGN_V_CENTER, 0)); // Сопротивление_текст (id = 70)
 
 sprintf(o_TextBuffer, "%d", (npc->specBon[0] & 0x10 ? 24 : 0));
 dlg->AddItem(_DlgStaticText_::Create(128, 201, 192, 18, o_TextBuffer, "medfont.fnt", 1, 71, ALIGN_H_RIGHT | ALIGN_V_CENTER, 0));    // Боезапас_число (id = 71)
 dlg->AddItem(_DlgStaticText_::Create(129, 201, 192, 18, Get_ITxt(281, 1), "medfont.fnt", 7, 51, ALIGN_H_LEFT | ALIGN_V_CENTER, 0)); // Боезапас_текст (id = 51)
 
 sprintf(o_TextBuffer, "%d", Get_NpcSkillPower(npc, 5));
 dlg->AddItem(_DlgStaticText_::Create(128, 223, 192, 18, o_TextBuffer, "medfont.fnt", 1, 72, ALIGN_H_RIGHT | ALIGN_V_CENTER, 0));    // Скорость_число (id = 72)
 dlg->AddItem(_DlgStaticText_::Create(128, 223, 192, 18, Get_ITxt(282, 1), "medfont.fnt", 7, 52, ALIGN_H_LEFT | ALIGN_V_CENTER, 0)); // Скорость_текст (id = 52)
 
 dlg->Run();
 dlg->Destroy(TRUE);
 
 return 1;
 }
 
Структура командира:
 
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);}
 // функция получения силы первичного командирского навыка
 inline int Get_NpcSkillPower(_Npc_* npc, int skill_id) {return CALL_2 (int, __thiscall, 0x769460, npc, skill_id);}
   
 game bug fixes extended.dll  ||  My Plugins  ||  My GitHub
 
				
(This post was last modified: 27.09.2017 11:29 by igrik.)
 |