Current time: 18.10.2019, 11:39 Hello There, Guest! (LoginRegister)
Language: english | russian  

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

Posts: 22
Post: #856

(27.09.2017 15:50)Valery Wrote:  Nope, typing directly digits has no effect, need to hold control key in HD mod. Without HD is ok.
I tried on 4.208, few 5.0s and control key is not needed?
Anyhow, not really important.

@igrik
I tried my idea from previous post... it kind of works. It's not perfect but in the end only digits remain. 105
Я попробовал то, что написал в предыдущем посте... Это работает. Это не идеально, но в конце концов только цифры.

Code:
int __stdcall edit_text_proc(_Dlg_* dlg, _EventMsg_* msg)
{
    int r = dlg->DefProc(msg);

    if (msg->type == MT_KEYDOWN || msg->type == MT_KEYUP || msg->type == MT_MOUSEBUTTON) {            // not absolutely necessary, less cpu intensive
        _DlgTextEdit_ *edit = (_DlgTextEdit_*)(dlg->GetItem(55));    // id of _DlgTextEdit_
        char edit_text[25];                                            // _DlgTextEdit_ max_len
        sprintf(edit_text, edit->text);                                // copy _DlgTextEdit_ text
        keep_digits(edit_text);                                        // keep only '0123456789' in string (with !is_digit())
        if (edit_text[0] == 0) {                                    // strlen == 0
            edit_text[0] = '0';                                        // put '0' as default
            edit_text[1] = 0;                                        // terminate string
        }
        sprintf(edit->text, edit_text);                                // replace _DlgTextEdit_ text
        dlg->Redraw();                                                // redraw
    }
    return r;
}

EDIT:
Got it working nice and fine 109

Add this also when creating. Noticed it was happening with creature dialog.
Code:
_DlgTextEdit_* edit= (_DlgTextEdit_*)(dlg->GetItem(#EDIT_ID#));
edit->redraw_actions = FALSE;

In proc, have keep_digits(edit_text) return 1 / 0 depending whether a non-digit was found e.g.
Code:
int keep_digits(char* input)
{
    char* dest = input;
    char* src = input;
    int non_digit = 0;

    while (*src)
    {
        if (!isdigit(*src)) {
            non_digit = 1;
            src++;
            continue;
        }
        *dest++ = *src++;
    }
    *dest = '\0';
    return non_digit;
}

If true, decrease position of cursor "caret".
Code:
if (keep_digits(edit_text))    
    edit->caret_pos--;

Only "slight" bug is CTRL-V "paste"... cursor "caret" vanishes with non-digits.
...don't care too much about that one.
(This post was last modified: 06.10.2017 07:48 by RoseKavalier.)
29.09.2017 22:28
Find all posts by this user Quote this message in a reply
totkotoriy Offline

Posts: 851
Post: #857

Я тут пытался запилить окно героя с 10ю вторичными навыками место 8ми через плагин с кнопками... почти получилось :\
Оказывается поверх кнопок выводится текст и иконка вторичного навыка. С иконками справился - вставил деф с прозрачными кадрами, с названием навыков тоже - при открытии стираю названия навыков, а при закрытии восстанавливаю, но вот эти надписи базовое, продвинутое и экспертное если затереть в тхт они затрутся везде. +Сами области для нажатия от старых навыков остаются активными. Может знает кто-нибудь как это обойти? В Сагамосе помнится сделали такое как-то...
Image: 10ss.jpg


Ты роешься в моих паках, но ты делаешь это без уважения...
08.03.2018 00:16
Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 1829
Post: #858

(08.03.2018 00:16)totkotoriy Wrote:  Я тут пытался запилить окно героя с 10ю вторичными навыками место 8ми через плагин с кнопками... почти получилось :\
Сделаю, ничего сложного. Также доступными для изучения станут 10, а не 8 втор.навыков. !!!Но сделаю не в эти праздники.
Для этого подготовь pcx с замененными расположениями опыта и маны, перенесенными в другое место. Можно в место WoG Спец абилок (блого и проклятий). В общем распланируй окно героя, а я его подгоню под твою задумку


Скачать HoMM3 ERA 2.8.3 (Repack: Rus & HD)
08.03.2018 23:50
Visit this user's website Find all posts by this user Quote this message in a reply
Algor Offline
Administrators

Posts: 2979
Post: #859

igrik, totkotoriy, а можно это будет оформить отдельным модом? Что бы можно было в обычной игре использовать вместо WoG-опции на 10 навыков.
А то мне 10 навыков нравится, а прокручивать их - нет.

И, имхо, лучше не уменьшать иконки втор. навыков, а получить место за счет первичных и удачи/морали.
У первичных убрать подписи "Атака/Защита/пр", оставив только иконки (уменьшенные) и числовые значения, а для удачи/морали также добавить числа.
Специализацию логично будет засунуть наверх к герою и его имени/классу, т.к. эта часть неизменна.


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
09.03.2018 11:41
Visit this user's website Find all posts by this user Quote this message in a reply
totkotoriy Offline

Posts: 851
Post: #860

(08.03.2018 23:50)igrik Wrote:  
(08.03.2018 00:16)totkotoriy Wrote:  Я тут пытался запилить окно героя с 10ю вторичными навыками место 8ми через плагин с кнопками... почти получилось :\
Сделаю, ничего сложного. Также доступными для изучения станут 10, а не 8 втор.навыков. !!!Но сделаю не в эти праздники.
Для этого подготовь pcx с замененными расположениями опыта и маны, перенесенными в другое место. Можно в место WoG Спец абилок (блого и проклятий). В общем распланируй окно героя, а я его подгоню под твою задумку
Было бы круто!
Вот так сделать?
Image: heroscr4.jpg

(09.03.2018 11:41)Algor Wrote:  igrik, totkotoriy, а можно это будет оформить отдельным модом? Что бы можно было в обычной игре использовать вместо WoG-опции на 10 навыков.
А то мне 10 навыков нравится, а прокручивать их - нет.
Думаю да


Ты роешься в моих паках, но ты делаешь это без уважения...
(This post was last modified: 09.03.2018 16:34 by totkotoriy.)
09.03.2018 16:34
Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 1829
Post: #861

(09.03.2018 16:34)totkotoriy Wrote:  Вот так сделать?
Наверное да. Я пошаманю, а там будет более ясно видно что и куда лучше перенести.
(09.03.2018 11:41)Algor Wrote:  igrik, totkotoriy, а можно это будет оформить отдельным модом? Что бы можно было в обычной игре использовать вместо WoG-опции на 10 навыков.
А то мне 10 навыков нравится, а прокручивать их - нет.
Значит будет модом


Скачать HoMM3 ERA 2.8.3 (Repack: Rus & HD)
09.03.2018 19:05
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 11118
Post: #862

Изучение некромантии в университете героями любых классов:
http://wforum.heroes35.net/showthread.ph...8#pid99678


Скачать Герои 3 Эра и всё, что с ней связано
Поддержать проект
09.04.2018 02:17
Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 1829
Post: #863

Наконец, то я разобрался с этой хренью

скрин (Click to View)

Всё для того, чтобы полноценно и нормально запилить кастующих монстров (link UN:C)


Скачать HoMM3 ERA 2.8.3 (Repack: Rus & HD)
12.07.2018 18:30
Visit this user's website Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 1829
Post: #864

Интересная недокументированная особенность.

Все мы прекрасно знаем, что описания Джедита и Нагаша в Воге всегда были на английском языке.
На самом деле, русский язык для описания специальностей тоже предусмотрен. В коде игры даже есть переменная, отвечающая за русскую или английскую локализацию.
Code:
// тип игры 0-английская, 1-русская
int WoGType=0; // для ERA 0x80321C

0x703F28 void FileLoader(void) - это функция, которая инициализирует некоторые воговские параметры и заодно устанавливает английский или русский язык в переменную WoGType.
Вот выдержка кода, отвечающая за установку типа локализации:
Code:
if(LoadTXT("ZMESS00.TXT",&Strings)) Exit(); // не может загрузить TXT
  // выносим внутренние сообщения в файл наружу
  TxtOutOfExe();
  // тип локализации
  switch(ITxt(0,0,&Strings)[0]){ // считываем первый символ ZMESS00.TXT
    case 'R': WoGType=1; break;  // русский язык
    default : WoGType=0;         // иначе английский язык
  }
Суммарно русских строк в коде немного: менее десяти наберется. В том числе и описания специализаций героев Джедита и Нагаша
Так вот, видимо при переводе на русский язык о данной особенности не знали. А всё что нужно было сделать для инициализации русских строк и описания специальностей, это в файле "ZMESS00.TXT" первый символ в моде "WoG Rus" изменить с E на R

ENG Wrote:E All New Messages are to be placed below.
RUS Wrote:R All New Messages are to be placed below.



Скачать HoMM3 ERA 2.8.3 (Repack: Rus & HD)
08.11.2018 17:25
Visit this user's website Find all posts by this user Quote this message in a reply
Algor Offline
Administrators

Posts: 2979
Post: #865

Bers'у в ЛС продублируй, чтоб не забылось до подготовки следующего русификатора.


BattleHeroes Rus/Eng | ERA scripts (+ReMagic) Rus/Eng
09.11.2018 13:13
Visit this user's website Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 1829
Post: #866

Так. Как я понимаю - для некоторых - о давно наболевшем.

Отключение ТЮРЕМ (скачать)
Файл класть в папку "EraPlugins\AfterWoG" любого активного мода.
Вообще, наверное, нужно включить в официальную эру эту заплатку в отключенном состоянии. ИМХО

Это bin файл, позволяющий отключать генерацию тюрем на случайных картах.
Одно уточнение: я оставил генерацию тюрем только с героями 1 уровня. Тюрьмы с героями 5, 15, 30 уровней вырезаны.
Еще раз: данная фича работает только для случайных карт, поэтому за авторские карты можно не беспокоиться.

Code:
// вырезаем генерацию тюрем
JMP отсюда         0x53A317    (5481239)        тюрьмы все
... или ...
JMP отсюда         0x53A363    (5481315)        тюрьмы с опытом >= 5000
... и ...
JMP сюда           0x53A48E    (5481614)        создание объекта с №63

ИТОГО КОД ЗАПЛАТКИ: 0053A363 E926010000  (0x53A363 JMP 0053A48E)


Скачать HoMM3 ERA 2.8.3 (Repack: Rus & HD)
06.06.2019 23:15
Visit this user's website Find all posts by this user Quote this message in a reply
igrik Offline
Administrators

Posts: 1829
Post: #867

Решение проблемы отображения некоторых строк (в русской локализации) в диалоге экспы монстров.
Суть в подмене типа копирования символов со знакового на беззнаковое ( MOVSX -> MOVZX )

Image: 111.jpg


Полный код для заплатки: (скачать)
Code:
0071F3FC B6
0071F5BA B6
0071F5D3 B6
00723657 B6
00723219 B6
007238D8 B6
007217BB B6
00723CBD B6
00721B03 B6
00722792 B6
00723ACB B6
00723F1C B6


Сравнение отображения линий в диалоге:

Image: Dlg_Expo.gif

На сколько я знаю, MoP уже давно решил эту проблему, но как он это сделал я нигде не встречал.


Скачать HoMM3 ERA 2.8.3 (Repack: Rus & HD)
02.07.2019 11:51
Visit this user's website Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 11118
Post: #868

igrik, отличная заплатка, спасибо!


Скачать Герои 3 Эра и всё, что с ней связано
Поддержать проект
02.07.2019 12:36
Find all posts by this user Quote this message in a reply
XEPOMAHT Offline

Posts: 229
Post: #869

(02.07.2019 11:51)igrik Wrote:  MoP уже давно решил эту проблему, но как он это сделал я нигде не встречал.

Если интересно, то вот код из исходников:

Code:
; настраиваем тексты и подсказки способностей:
        xor ebx, ebx
      .repeat
        mov eax, [ebx*4+840E40h]
       .if eax
        ChangeDlgItem esi, addr ebx + 1100, 3, eax
        fn Настройка_подсказки_к_элементу_игрового_диалога, esi, addr ebx + 1100, dword [ebx*4+85D308h]
        mov edi, ebx
        imul edi, 100h
        fn Настройка_подсказки_к_элементу_игрового_диалога, esi, addr ebx + 1300, addr edi + 845B00h
        add edi, 85DB48h
        mov dword [ebp-8], 0
         .repeat
        imul eax, ebx, 11
        add eax, [ebp-8]
        add eax, 1116
        xchg byte [edi+8], bh; обнуляем конец строки
        ChangeDlgItem esi, eax, 3, edi
        xchg byte [edi+8], bh; возвращаем исходный символ
        add edi, 8
        inc dword [ebp-8]
         .until signed dword [ebp-8] > 10
       .endif
        inc ebx
      .until signed ebx > 15

Соответственно, сам воговский код этого дела в MoP заглушен и, скорее всего, затёрт.
02.07.2019 13:34
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 11118
Post: #870

Формат файлов кампаний:

Code:
Heroes 3 Campaign (h3c) format after unpacking (gz).
=================================
byte    = 1 byte (0..255)
word    = 2 bytes (0..65535)
integer = 4 bytes (-2147483648..2147483647)
boolean = 1 byte (0 = false, 1 = true)
---------------------------------
const
  (* Hardcoded in camptext.txt, differs for each campaign index. Number of zones in current campaign *)
  NUM_ZONES = ?;

var
  Header: THeader;
  Zones:  array NUM_ZONES of TZone;
  Maps:   array NUM_ZONES of TMap | None;

type
  TString = record
    Length: integer;
    Value:  array Length of char;
  end;

  THeader = record
    GameVersion:             integer = 5 (Armageddon Blade) | 6 (WoG);
    CampaignInd:             byte; // Index of campaign (from 0), see camptext.txt
    CampaignName:            TString;
    CampaignDesc:            TString; // Description
    UserCanSelectDifficulty: boolean;
    MusicTheme:              byte;
  end; // THeader

  TZonePrologue = record
    HasPrologue: boolean;

    if HasPrologue then
      VideoId: byte;
      MusicId: byte;
      Text:    TString;
    end;
  end;

  TZoneEpilogue = record
    HasEpilogue: boolean;

    if HasEpilogue then
      VideoId: byte;
      MusicId: byte;
      Text:    TString;
    end;
  end;

  TStartingOpts = record
    OptsType: byte; // StartingBonus = 1, CrossoverHero = 2, InitialHero = 3

    if OptsType = 1 then
      PlayerColor: byte;
      NumBonuses:  byte;
      Bonuses:     array NumBonuses of record
        BonusType: byte;

        if Bonuses = 0 (spell) then
          Hero:  word; 65023 for most powerful hero
          Spell: byte;
        end;

        if Bonuses = 1 (creature) then
          Creature: word;
          Number:   word;
        end;

        if Bonuses = 3 (artifact) then
          Hero: word;
          Art:  word;
        end;

        if Bonuses = 4 (spell scroll) then
          Hero:  word;
          Spell: byte;
        end

        if Bonuses = 5 (primary skills) then
          Hero:       word;
          PrimSkills: array 4] of byte;
        end;

        if Bonuses = 6 (secondary skill) then
          Hero:     word;
          SecSkill: byte;
          Level:    byte;
        end;

        if Bonuses = 7 (resource) then
          Resource: byte;
          Quantity: integer;
        end;
      end; // Bonuses
    end; // if

    if OptsType = 2 then
      PlayerColor: byte;
      ZoneIndex:   byte;
    end;
  end; // .TStartingOpts

  TZone = record
    FileName:           TString;
    FileSize:           integer;
    RequiredZones:      byte; // Zone prerequisites; bitmask: 1 bit for each zone
    ZoneColor:          byte;
    DifficultyLevel:    byte;
    RegionRmbText:      TString; // Right mouse button hint
    Prologue:           TZonePrologue;
    Epilogue:           TZoneEpilogue;
    HeroesRetain:       byte; // Bitmask of Experience (bit 0), Primary Skills (bit 1), Secondary Skills (bit 2), Spells (bit 3), Artifacts (bit 4)
    CrossoverCreatures: array of 19 bytes; // 1 bit for every creature. Creature ID: 0..159
    CrossoverArts:      array of 18 bytes; // 1 bit for every artifact. Artifact ID: 0..143
    StartingOpts:       TStartingOpts;
  end;

  TMap = unpacked h3m (gz) map


Скачать Герои 3 Эра и всё, что с ней связано
Поддержать проект
14.07.2019 23:59
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-2019 MyBB Group