(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
|