| 
 Плагин  messages.dll - igrik -  03.05.2019 15:31
 
 
  (01.05.2019 00:46)XEPOMAHT Wrote:  Понял. Спасибо. (30.04.2019 19:38)igrik Wrote:  По messages.dll: есть исходник или хотя бы инструкция как им пользоваться? Там просто прописывается в typemsgs.txt имя дефа, номер спрайта, текст под картинкой и подсказка по пкм. Затем можно вызывать сообщение с картинкой любыми средствами, например "!!IF:Q1/100/1/4/z100504;" (ERM) или "Message стр ebx*4+524 MoPSpec, Type_Msg_RMBINFO, Pic_MoP, Pic_Арена" (WERD)
 Плохо, что нужно писать в txt название дефа. Это меня не очень устраивает.
 Я наверное для сборки запилю триггер IF:Y<тип_клика>/z<текст>/z<название_дефа>/<номер_кадра_дефа>;
 
 
 RE: ERA PLUS - XEPOMAHT -  03.05.2019 16:04
 
 
  (03.05.2019 15:31)igrik Wrote:  Я наверное для сборки запилю триггер IF:Y<тип_клика>/z<текст>/z<название_дефа>/<номер_кадра_дефа>; Было бы очень здорово, если бы вместо <номер_кадра_дефа> можно было б задать номера кадров начального и конечного для вывода анимации из def в диалоге, а не только одного спрайта. В MoP это работает, а в ЭРА так и не сделали.
 
 
 RE: ERA PLUS - MOP -  03.05.2019 16:37
 
 Неужели кто-то вспомнил о Messages.dll? А ведь эта библиотека всю дорогу шла вместе с Buttons.dll. И исходники их тоже рядышком лежали. И в инструкции по использованию эта длл упоминалась и расписывалась.
 
 Впрочем, кому нужна эта громоздкая хрень, которая, к тому же, не поддерживает сообщения с более чем тремя картинками (преодолено только в третьей версии MoP).LIBRARY Messages;{!INFO
 MODULENAME = 'Messages'
 VERSION = '1'
 AUTHOR = 'Master Of Puppets'
 DESCRIPTION = 'DLL для использования пользовательских картинок в сообщений Героев 3'
 }
 
 USES Win;
 
 CONST
 (* HookCode constants *)
 C_HOOKTYPE_JUMP = FALSE;
 C_HOOKTYPE_CALL = TRUE;
 C_OPCODE_JUMP = $E9;
 C_OPCODE_CALL = $E8;
 C_UNIHOOK_SIZE = 5;
 C_MOP_DLLNAME = 'Messages.dll';
 
 TYPE
 THookRec = RECORD
 Opcode: BYTE;
 Ofs: INTEGER;
 END; // .record THookRec
 
 VAR
 hMessages: Win.THandle; // Дескриптор библиотеки
 TxtName: STRING = 'TypeMsgs.txt'; //название используемого текстового ресурса
 PointerOfTable: INTEGER; //используется для хранения указателя на загруженный текстовик
 Temp: INTEGER; //универсальная временная переменная
 
 PROCEDURE WriteAtCode(P: POINTER; Buf: POINTER; Count: INTEGER);
 BEGIN
 Win.VirtualProtect(P, Count, PAGE_READWRITE, @Temp);
 Win.CopyMemory(P, Buf, Count);
 Win.VirtualProtect(P, Count, Temp, NIL);
 END; // .procedure WriteAtCode
 
 PROCEDURE HookCode(P: POINTER; NewAddr: POINTER; UseCall: BOOLEAN);
 VAR
 HookRec: THookRec;
 BEGIN
 IF UseCall THEN BEGIN
 HookRec.Opcode:=C_OPCODE_CALL;
 END // .if
 ELSE BEGIN
 HookRec.Opcode:=C_OPCODE_JUMP;
 END; // .else
 HookRec.Ofs:=INTEGER(NewAddr)-INTEGER(P)-C_UNIHOOK_SIZE;
 WriteAtCode(P, @HookRec, 5);
 END; // .procedure HookCode
 
 //Функция загрузки текстовика
 PROCEDURE MSGTABLE; ASSEMBLER;
 ASM
 MOV ECX, TxtName //название текстовика
 MOV EAX, $55C2B0
 CALL EAX
 TEST EAX, EAX
 JNZ @@TRUE
 XOR AL, AL
 RET
 @@TRUE:
 MOV ECX, [EAX+$20]
 MOV [PointerOfTable], ECX
 MOV AL, 1
 END; // .PROCEDURE MSGTABLE
 
 PROCEDURE TXTLoad; ASSEMBLER;
 ASM
 JE @@Error //случай ошибки загрузки предыдущего текстовика
 CALL MSGTABLE //вызов функции загрузки текстовика
 TEST AL, AL
 JNZ @@Continuation //файл успешно загружен
 @@Error: //ошибка загрузки
 PUSH $4EE006 // прыжок на вывод сообщения об ошибке
 RET
 @@Continuation:
 PUSH $4EDEF0 //возврат в код игры
 END; // .PROCEDURE TXTLoad
 
 PROCEDURE MainMessages; ASSEMBLER;
 ASM
 JNZ @@OK
 PUSH $4F6388
 RET
 @@OK:
 CMP EDI, 100
 JE @@OK2
 PUSH $4F558A
 RET
 @@OK2:
 PUSH 1
 MOV ECX, [PointerOfTable]
 MOV ECX, [ECX+EAX*4+4]
 MOV ECX, [ECX+4]
 MOV ESI, [ECX+8] //текст под картинкой
 OR ECX, $FFFFFFFF
 XOR EAX,EAX
 MOV EDI,ESI
 LEA EDX,DWORD PTR DS:[EBX+$18]
 REPNE SCASB
 NOT ECX
 DEC ECX
 MOV [EBP+8],ECX
 PUSH ECX
 MOV ECX,EDX
 MOV EAX, $404A40
 CALL EAX
 TEST AL,AL
 JE @@trampam
 MOV ECX, [EBP+8]
 MOV EDI, [EBX+$1C]
 LEA EAX, [EBX+$18]
 MOV EDX,ECX
 SHR ECX,2
 REP MOVSD
 MOV ECX,EDX
 AND ECX,3
 REP MOVSD
 MOV ECX,EDX
 PUSH ECX
 MOV ECX,EAX
 MOV EAX, $404A20
 CALL EAX
 @@trampam:
 MOV EDI, [EBX+4]
 MOV ECX, [PointerOfTable]
 MOV ECX, [ECX+EDI*4+4]
 MOV ECX, [ECX+4]
 MOV EDI, [ECX] //деф
 OR ECX, $FFFFFFFF
 XOR EAX,EAX
 LEA EDX,[EBX+8]
 REPNE SCASB
 NOT ECX
 DEC ECX
 PUSH 1
 MOV [EBP+8],ECX
 PUSH ECX
 MOV ECX,EDX
 MOV EAX, $404A40
 CALL EAX
 TEST AL,AL
 JE @@LALA
 MOV ESI, [EBX+4]
 MOV ECX, [PointerOfTable]
 MOV ECX, [ECX+ESI*4+4]
 MOV ECX, [ECX+4]
 MOV ESI, [ECX] //деф
 MOV ECX, [EBP+8]
 MOV EDI, [EBX+$C]
 LEA EAX, [EBX+8]
 MOV EDX,ECX
 SHR ECX,2
 REP MOVSD
 MOV ECX,EDX
 AND ECX,3
 REP MOVSD
 MOV ECX,EDX
 PUSH ECX
 MOV ECX,EAX
 MOV EAX, $404A20
 CALL EAX
 @@LALA:
 MOV ESI,[EBX+4]
 MOV ECX, [PointerOfTable]
 MOV ECX, [ECX+ESI*4+4]
 MOV ECX, [ECX+4]
 PUSH DWORD [ECX+4] //Номер кадра в дефе
 MOV EAX, $77D3D7
 CALL EAX
 MOV EDX,EAX
 PUSH $4F6226
 RET
 END; // .PROCEDURE MainMessages
 
 PROCEDURE Messages_hints; ASSEMBLER;
 ASM
 MOV EAX, [ecx+$38]
 CMP EAX, 100
 JE @@OK
 CMP EAX, $24
 PUSH $4F11E7
 RET
 @@OK:
 MOV ECX, [ECX+$3C]
 MOV EDX, [PointerOfTable]
 MOV EDX, [EDX+ECX*4+4]
 MOV EDX, [EDX+4]
 MOV ECX, [EDX+12] //текст подсказки
 PUSH 0
 PUSH -1
 PUSH $4F1206
 END; // .PROCEDURE Messages_hints
 
 BEGIN
 hMessages:=Win.GetModuleHandle(C_MOP_DLLNAME);
 Win.DisableThreadLibraryCalls(hMessages);
 HookCode(POINTER($4EDEEA), @TXTLoad, C_HOOKTYPE_JUMP); //загрузка текстовика
 HookCode(POINTER($4F5584), @MainMessages, C_HOOKTYPE_JUMP); //обработка типа
 HookCode(POINTER($4F11E1), @Messages_hints, C_HOOKTYPE_JUMP); //обработка подсказки по ПКМ
 END.
Проще названия дефов в памяти заменить на время показа сообщения.
 
 Ну а анимация дефов в MoP работает только в DL-диалогах. Желающие могут попытаться разобраться в прекрасно упорядоченном и, не побоюсь этого слова, величественном исходнике бинарника DL.txt, где, помимо сего, представлена не менее превосходная и качественная реализация других прелестных вещей.
 
 
 Плагин  messages.dll - Bes -  19.06.2020 11:15
 
 Berserker, задался сегодня вопросом, а почему ты не включил в инструментарий ERA эту библиотеку от Master'а ???
  напомню, благодаря этой примочки можно делать стандартные IF:Q диалоги с ЛЮБОЙ картинкой из игрового def (любой кадр)
 Тип картинки для активации в IF:Q должен быть 100. Подтип соответствует строке (нумерация с 0) в файле настроек typemsgs.txt (помещать в Data)
 
 
 
Формат тхт-шника таков 
Code:
 DefName    Frame    Text under picture    Hintpskilbon.def    3    {Имеющиеся {очки}    ...
 
Эта строка по счёту 6-ая в файле
 весьма удобная и простая штука, когда нужен диалог быстро и просто с нестандартной картинкой (эдакий лайт DL-диалог)
 
 
 RE: Технич. тема - Sandris -  19.06.2020 11:45
 
 
  (19.06.2020 11:15)Bes Wrote:  весьма удобная и простая штука, когда нужен диалог быстро и просто с нестандартной картинкой (эдакий лайт DL-диалог)О как удобно. Я как раз хотел предложить в будущем подобные инфо-диалоги с изображением (к примеру, чтобы окошко с неделей конкретного монстра сопровождалось и картинкой этого монстра... и ряд других схожих окон)
 
 
 RE: Технич. тема - XEPOMAHT -  19.06.2020 14:13
 
 
  (19.06.2020 11:15)Bes Wrote:  не включил в инструментарий ERA библиотеку messages.dll от Master'а ???  Её нельзя использовать несколькими модами. Там нумерация подтипа картинки статическая. Т.е. автор мода сам добавляет её при необходимости (например messages.dll есть в ERA+ месте с примером использования).
 
 
 RE: Технич. тема - Berserker -  19.06.2020 15:31
 
 Bes, МоР вклинился в код геройской функции. Добавил возможность, но не гибкую. Для Эры 3 проще было бы писать:
 А если нужно ещё и таймер автозакрытия прикрутить? Или две картинки такие? Ведь эта функция используется везде.
 
 В целом простой способ должен быть в будущем для всевозможных диалогов, но можно улучшить и базовый диалог. У кого-нибудь исходники библиотеки есть? На ASM/WERD/BrainFuck/Pascal/C?
 
 
 RE: Технич. тема - XEPOMAHT -  19.06.2020 16:32
 
 
  (19.06.2020 15:31)Berserker Wrote:  У кого-нибудь исходники библиотеки есть? Если там порт с MoP (что скорее всего так), то примерный исходник - в исходниках MoP. Если кратко - перехват в функции универсального диалога игры перед проверкой на тип/подтип картинки (проверка на тип картинки 100, если да - подсовывается имя и номер кадра из загруженного текстовика, если нет - возвращается на стандартную проверку).
 
 НО! Для совместимости с ERA+ не стоит трогать сам кейс на типы картинок, т.к. для поддержки новых городов он перенесён и расширен.
 
 Если всё-таки нужно для базовой версии ERA, то устанавливайте эровский перехват на тип картинки ДО перехвата messages.dll, с сохранением функционала этой dll, тогда всё должно быть ОК.
 
 
 RE: Технич. тема - Berserker -  19.06.2020 17:13
 
 XEPOMAHT, у меня исходники Тифона. И МоР 2.х тоже, если верно помню, были. Понял, спасибо.
 А какие типы добавлены?
 
 
 RE: Технич. тема - MOP -  19.06.2020 17:14
 
 Messages.dll всю дорогу шла в одном архиве с Buttons.dll. Вторая стала известна и уже давно вошла в ЭРУ как неотъемлемая часть. Первую наглухо забыли и никогда о ней не говорили. Загадка.
 Исходники в том же архиве.
 
 
 RE: Технич. тема - Berserker -  19.06.2020 17:16
 
 MOP, да из-за привязки к одному текстовику (чай, немодульности) и не прижилось за пределами больших модов-конверсий. А из памяти со временем стирается, что и с чем лежало рядом
   
 
 RE: Технич. тема - MOP -  19.06.2020 17:23
 
 Там недостаток еще в том, что не поддерживается количество картинок >3 (где уже не IF:Q, а IF:N работает). Исправлено лишь в MoP третьей версии, но он обходится без dll.
 
 
 RE: Технич. тема - XEPOMAHT -  19.06.2020 17:41
 
 
  (19.06.2020 17:13)Berserker Wrote:  А какие типы добавлены? Типы 37..46, ну и далее, если будут добавляться новые города.
 
 
 RE: Технич. тема - Berserker -  19.06.2020 17:43
 
 MOP, если можешь, поделись, пожалуйста, кодом. Вдруг, получится всех осчастливить с указанием первоисточника
   
 
 RE: Технич. тема - MOP -  19.06.2020 18:26
 
 
 Не знаю, есть ли тут исправление для IF:N или оно в другом куске кода. Исходников RTL для сравнения у меня нет, а в чём была проблема - вообще не помню. Помню лишь, что ларчик просто открывался - исправил свою же ошибку или даже опечатку, допущенную во время разработки Seek & Destroy.
Code:
 ; НАЗВАНИЕ: TypeMessages; ВЕРСИЯ: 1.0
 ; АВТОР: Master Of Puppets
 ; ОПИСАНИЕ: Расширение функции показа сообщения (новые типы картинок)
 ; EXE: MOP
 ; StatFree = YES
 
 ; дополнительная ветка свитча в SUB_L004F5540 (тип картинки №37):
 F558A 83FF26;                            cmp    edi,00000026h
 F5595 8A8FB8064400;                      mov    cl,[edi+CASE_004406B8]
 F559B FF248D64064400;                    jmp    [CASE_PROCTABLE_00440664+ecx*4]
 
 40664 EA554F00;                         dd    CASE_004F639C_PROC0000
 40668 92584F00;                         dd    CASE_004F639C_PROC0001
 4066C 38594F00;                         dd    CASE_004F639C_PROC0002
 40670 DB594F00;                         dd    CASE_004F639C_PROC0003
 40674 E7604F00;                         dd    CASE_004F639C_PROC0004
 40678 3A614F00;                         dd    CASE_004F639C_PROC0005
 4067C 8D614F00;                         dd    CASE_004F639C_PROC0006
 40680 EE5F4F00;                         dd    CASE_004F639C_PROC0007
 40684 41604F00;                         dd    CASE_004F639C_PROC0008
 40688 94604F00;                         dd    CASE_004F639C_PROC0009
 4068C FF5D4F00;                         dd    CASE_004F639C_PROC000A
 40690 0C5D4F00;                         dd    CASE_004F639C_PROC000B
 40694 B95B4F00;                         dd    CASE_004F639C_PROC000C
 40698 A2554F00;                         dd    CASE_004F639C_PROC000D
 4069C 745A4F00;                         dd    CASE_004F639C_PROC000E
 406A0 475F4F00;                         dd    CASE_004F639C_PROC000F
 406A4 23574F00;                         dd    CASE_004F639C_PROC0010
 406A8 DD614F00;                         dd    CASE_004F639C_PROC0011
 406AC BDAB4700;                         dd    CASE_004F639C_PROC0012 - новая ветка (сообщения из MTypeMsg.txt)
 406B0 17706300;                 dd    CASE_004F639C_PROC0013 - новая ветка (произвольное сообщение)
 406B4 90909090; - зарезервировано
 
 406B8 00000000000000110102030405060708
 406C8 090A11110B0C0D0D0D0D0D0D0D0D0D0E
 406D8 0E0E0E0F10121390; 1 зарезервированное значение
 
 ; CASE_004F639C_PROC0012:
 7ABBD 6A01;                             PUSH 1
 7ABBF 8B0D5C354000;                     MOV ECX,DWORD PTR DS:[40355C]
 7ABC5 8B4C8104;                         MOV ECX,DWORD PTR DS:[ECX+EAX*4+4]
 7ABC9 8B4904;                           MOV ECX,DWORD PTR DS:[ECX+4]
 7ABCC 8B7108;                           MOV ESI,DWORD PTR DS:[ECX+8] //текст под картинкой
 7ABCF 83C9FF;                           OR ECX,FFFFFFFF
 7ABD2 33C0;                              XOR EAX,EAX
 7ABD4 8BFE;                              MOV EDI,ESI
 7ABD6 8D5318;                           LEA EDX,DWORD PTR DS:[EBX+18]
 7ABD9 F2AE;                             REPNE SCAS BYTE PTR ES:[EDI]
 7ABDB F7D1;                              NOT ECX
 7ABDD 49;                                DEC ECX
 7ABDE 894D08;                           MOV DWORD PTR SS:[EBP+8],ECX
 7ABE1 51;                                PUSH ECX
 7ABE2 8BCA;                              MOV ECX,EDX
 7ABE4 E8579EF8FF;                       CALL mop.00404A40
 7ABE9 84C0;                              TEST AL,AL
 7ABEB 741F;                             JE SHORT mop.0047AC0C
 7ABED 8B4D08;                           MOV ECX,DWORD PTR SS:[EBP+8]
 7ABF0 8B7B1C;                           MOV EDI,DWORD PTR DS:[EBX+1C]
 7ABF3 8D4318;                           LEA EAX,DWORD PTR DS:[EBX+18]
 7ABF6 8BD1;                              MOV EDX,ECX
 7ABF8 C1E902;                           SHR ECX,2
 7ABFB F3A5;                             REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
 7ABFD 8BCA;                              MOV ECX,EDX
 7ABFF 83E103;                           AND ECX,3
 7AC02 F3A5;                             REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
 7AC04 52;                                PUSH EDX
 7AC05 8BC8;                              MOV ECX,EAX
 7AC07 E8149EF8FF;                       CALL mop.00404A20
 7AC0C 8B7B04;                           MOV EDI,DWORD PTR DS:[EBX+4]
 7AC0F 8B0D5C354000;                     MOV ECX,DWORD PTR DS:[40355C]
 7AC15 8B4CB904;                         MOV ECX,DWORD PTR DS:[ECX+EDI*4+4]
 7AC19 8B4904;                           MOV ECX,DWORD PTR DS:[ECX+4]
 7AC1C 8B39;                              MOV EDI,DWORD PTR DS:[ECX] //деф
 7AC1E 83C9FF;                           OR ECX,FFFFFFFF
 7AC21 33C0;                              XOR EAX,EAX
 7AC23 8D5308;                           LEA EDX,DWORD PTR DS:[EBX+8]
 7AC26 F2AE;                             REPNE SCAS BYTE PTR ES:[EDI]
 7AC28 F7D1;                              NOT ECX
 7AC2A 49;                                DEC ECX
 7AC2B 6A01;                             PUSH 1
 7AC2D 894D08;                           MOV DWORD PTR SS:[EBP+8],ECX
 7AC30 51;                                PUSH ECX
 7AC31 8BCA;                              MOV ECX,EDX
 7AC33 E8089EF8FF;                       CALL mop.00404A40
 7AC38 84C0;                              TEST AL,AL
 7AC3A 7431;                             JE SHORT mop.0047AC6D
 7AC3C 8B7304;                           MOV ESI,DWORD PTR DS:[EBX+4]
 7AC3F 8B0D5C354000;                     MOV ECX,DWORD PTR DS:[40355C]
 7AC45 8B4CB104;                         MOV ECX,DWORD PTR DS:[ECX+ESI*4+4]
 7AC49 8B4904;                           MOV ECX,DWORD PTR DS:[ECX+4]
 7AC4C 8B31;                              MOV ESI,DWORD PTR DS:[ECX] //деф
 7AC4E 8B4D08;                           MOV ECX,DWORD PTR SS:[EBP+8]
 7AC51 8B7B0C;                           MOV EDI,DWORD PTR DS:[EBX+C]
 7AC54 8D4308;                           LEA EAX,DWORD PTR DS:[EBX+8]
 7AC57 8BD1;                              MOV EDX,ECX
 7AC59 C1E902;                           SHR ECX,2
 7AC5C F3A5;                             REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
 7AC5E 8BCA;                              MOV ECX,EDX
 7AC60 83E103;                           AND ECX,3
 7AC63 F3A5;                             REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
 7AC65 52;                                PUSH EDX
 7AC66 8BC8;                              MOV ECX,EAX
 7AC68 E8B39DF8FF;                       CALL mop.00404A20
 7AC6D 8B7304;                           MOV ESI,DWORD PTR DS:[EBX+4]
 7AC70 8B0D5C354000;                     MOV ECX,DWORD PTR DS:[40355C]
 7AC76 8B4CB104;                         MOV ECX,DWORD PTR DS:[ECX+ESI*4+4]
 7AC7A 8B4904;                           MOV ECX,DWORD PTR DS:[ECX+4]
 7AC7D FF7104;                           PUSH DWORD PTR DS:[ECX+4] //Номер кадра в дефе
 7AC80 E8ACC20100;      CALL mop.00496F31
 7AC85 8BD0;                              MOV EDX,EAX
 7AC87 E99AB50700;                       JMP mop.004F6226
 
 ; CASE_004F639C_PROC0013:
 237017 6A01;            PUSH 1
 237019 8B359C268302;    MOV ESI,DWORD PTR DS:[283269C]
 23701F 83C9FF;          OR ECX,FFFFFFFF
 237022 33C0;             XOR EAX,EAX
 237024 8BFE;             MOV EDI,ESI
 237026 8D5318;          LEA EDX,DWORD PTR DS:[EBX+18]
 237029 F2AE;            REPNE SCAS BYTE PTR ES:[EDI]
 23702B F7D1;             NOT ECX
 23702D 49;               DEC ECX
 23702E 894D08;          MOV DWORD PTR SS:[EBP+8],ECX
 237031 51;               PUSH ECX
 237032 8BCA;             MOV ECX,EDX
 237034 E807DADCFF;      CALL mop.00404A40
 237039 84C0;             TEST AL,AL
 23703B 741F;            JE SHORT mop.0063705C
 23703D 8B4D08;         MOV ECX,DWORD PTR SS:[EBP+8]
 237040 8B7B1C;          MOV EDI,DWORD PTR DS:[EBX+1C]
 237043 8D4318;          LEA EAX,DWORD PTR DS:[EBX+18]
 237046 8BD1;             MOV EDX,ECX
 237048 C1E902;          SHR ECX,2
 23704B F3A5;            REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
 23704D 8BCA;             MOV ECX,EDX
 23704F 83E103;          AND ECX,3
 237052 F3A5;            REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
 237054 52;               PUSH EDX
 237055 8BC8;             MOV ECX,EAX
 237057 E8C4D9DCFF;      CALL mop.00404A20
 23705C 8B3D94268302;    MOV EDI,DWORD PTR DS:[2832694]
 237062 83C9FF;          OR ECX,FFFFFFFF
 237065 33C0;             XOR EAX,EAX
 237067 8D5308;          LEA EDX,DWORD PTR DS:[EBX+8]
 23706A F2AE;            REPNE SCAS BYTE PTR ES:[EDI]
 23706C F7D1;             NOT ECX
 23706E 49;               DEC ECX
 23706F 6A01;            PUSH 1
 237071 894D08;          MOV DWORD PTR SS:[EBP+8],ECX
 237074 51;               PUSH ECX
 237075 8BCA;             MOV ECX,EDX
 237077 E8C4D9DCFF;      CALL mop.00404A40
 23707C 84C0;             TEST AL,AL
 23707E 7425;            JE SHORT mop.006370A5
 237080 8B3594268302;    MOV ESI,DWORD PTR DS:[2832694]
 237086 8B4D08;          MOV ECX,DWORD PTR SS:[EBP+8]
 237089 8B7B0C;          MOV EDI,DWORD PTR DS:[EBX+C]
 23708C 8D4308;          LEA EAX,DWORD PTR DS:[EBX+8]
 23708F 8BD1;             MOV EDX,ECX
 237091 C1E902;          SHR ECX,2
 237094 F3A5;            REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
 237096 8BCA;             MOV ECX,EDX
 237098 83E103;          AND ECX,3
 23709B F3A5;            REP MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
 23709D 52;               PUSH EDX
 23709E 8BC8;             MOV ECX,EAX
 2370A0 E87BD9DCFF;      CALL mop.00404A20
 2370A5 8B1598268302;    MOV EDX,DWORD PTR DS:[2832698]
 2370AB E976F1EBFF;      JMP mop.004F6226
 
 
 
 ; дополнительная ветка свитча в L004F11B0 (текст сообщения при нажатии ПКМ на картинке):
 ; сокращение кода:
 23FE64 B5114F00;                         dd    L004F11B5
 
 F11B5 55;                               PUSH EBP
 F11B6 8BEC;                             MOV EBP,ESP
 F11B8 6AFF;                            PUSH -1
 F11BA 68706D7B00;                      PUSH mop.007B6D70
 F11BF 64A100000000;                   MOV EAX,DWORD PTR FS:[0]
 F11C5 50;                               PUSH EAX
 F11C6 64892500000000;                 MOV DWORD PTR FS:[0],ESP
 F11CD 83EC28;                          SUB ESP,28
 F11D0 8A4508;                          MOV AL,BYTE PTR SS:[EBP+8]
 F11D3 84C0;                             TEST AL,AL
 F11D5 7405;                            JE SHORT mop.004F11DC
 F11D7 8A450C;                          MOV AL,BYTE PTR SS:[EBP+C]
 F11DA 84C0;                             TEST AL,AL
 F11DC 0F84F0030000;                    JE mop.004F15D2
 F11E2 8B4138;                          MOV EAX,DWORD PTR DS:[ECX+38]
 F11E5 83F826;                          CMP EAX,26
 F11E8 0F87D2030000;                    JA mop.004F15C0
 F11EE 0FB69028164F00;                  MOVZX EDX,BYTE PTR DS:[EAX+4F1628]
 
 F161C F86D4900;                         dd    CASE_004F15E4_PROC000E - новая ветка (сообщения из MTypeMsg.txt)
 F1620 E55A7100;                         dd    CASE_004F15E4_PROC000E - новая ветка (произвольное сообщение)
 F1624 90909090;                         dd    CASE_004F15E4_PROC000E  - зарезервировано
 ; перенесённая таблица
 F1628 000000000000000D01020D0304050607
 F1638 08090D0D0A0D0D0D0D0D0D0D0D0D0D0B
 F1648 0B0B0B0C000E0F90;
 
 ; Смена местами команд, чтобы сюда прыгать:
 F11FC 8B0D94536A00;    MOV ECX,DWORD PTR DS:[6A5394]
 F1202 6A00;            PUSH 0 - сюда
 F1204 6AFF;            PUSH -1
 
 ; CASE_004F15E4_PROC000E
 96DF8 8B493C;                           MOV ECX,DWORD PTR DS:[ECX+3C]
 96DFB 8B155C354000;                     MOV EDX,DWORD PTR DS:[40355C]
 96E01 8B548A04;                         MOV EDX,DWORD PTR DS:[EDX+ECX*4+4]
 96E05 8B5204;                           MOV EDX,DWORD PTR DS:[EDX+4]
 96E08 8B4A0C;                           MOV ECX,DWORD PTR DS:[EDX+C] - текст сообщения при ПКМ на картинке
 96E0B E9F2A30500;                       JMP mop.004F1202
 
 ; CASE_004F15E4_PROC000F
 2B0AE5 8B0DA0268302;    MOV ECX,DWORD PTR DS:[28326A0]
 2B0AEB E912B7DDFF;      JMP mop.004F1202
 
 RE: Технич. тема - Berserker -  19.06.2020 18:44
 
 MOP, спасибо большое!
 
 
 
 |