Wake of Gods Forum | Форум Во Имя Богов

Full Version: New Era Of Heroes
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
а почему cdecl и stdcall совмещены? Эра запоминает указатель стека перед вызовом?
Да.
(17.08.2011 19:54)Sav Wrote: [ -> ]18. Невозможно объединить последний отряд одного героя с отрядом дргугого в окне города.
5C7821 B800000000
MOP, ты не смотрел проблему потери опыта, если передаётся последний отряд?
Имеется:
   - программа BinGen
   - патч вида 678948 06000000100000009090909090909090909090001C000000C5000000 (замена специальности Тана)
   - необходимость сгенерить бинарник.

Бинарник генерится, но в память пишет не
Code:
06000000 10000000 90909090 90909090
90909000 1С000000 С5000000
, а какую-то фигню вида

Code:
06000000 10000000 90909090 90909090
90909000 B1000000 15000000

А, да, и 678948 - это не ошибка, с 278948 игра вылетает на кнопке "Новая игра"
Не, сам патч-то я в редакторе подправил, но что за ерунда такая?

Подопытные:
http://zalil.ru/31603412
Буква "С" русская. BinMagic сразу ругнётся и кажет название символа и его позицию.
:facepalm: Я идиот.
Ненавижу эту клавишу.

Но BinMagic не ругнулся, кстати.
Image: original.png
BinGen может быть не ругнулся?
(22.08.2011 19:05)Berserker Wrote: [ -> ]MOP, ты не смотрел проблему потери опыта, если передаётся последний отряд?
Посмотрел, но ни черта не понял. Бряк на вог-хук срабатывает в любом случае, последний это отряд или нет. Какая такая проверка может стоять в ВОГе и зачем она нужна - ума не приложу.
(27.08.2011 17:17)Berserker Wrote: [ -> ]Патчит Arsenal.dll - плагин Мора, позволяющий в кузнице нанимать все три машины войны.
Посмотрел - у меня нет его исходников.
Кое-как откопал. Моя самая первая длл:
Code:
LIBRARY Arsenal;
{!INFO
MODULENAME = 'Arsenal'
VERSION = '1.0'
AUTHOR = 'Master Of Puppets'
}

USES Win, Utils, SysUtils, VPUtils;

//PROCEDURE HookCode(P: POINTER; NewAddr: POINTER; UseCall: BOOLEAN); external 'angel' name 'HookCode';

CONST
(* HookCode constants *)
C_HOOKTYPE_JUMP = FALSE;
C_HOOKTYPE_CALL = TRUE;
C_OPCODE_JUMP = $E9;
C_OPCODE_CALL = $E8;
C_UNIHOOK_SIZE = 5;

TYPE
(* Caienu, iaiaoiaeiay aey ?aaiou n ooieoeyie iao?eiaa *)
THookRec = RECORD
Opcode: BYTE;
Ofs: INTEGER;
END; // .record THookRec

VAR
Temp: INTEGER; // Oieaa?naeuiay a?aiaiiay ia?aiaiiay

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 ARSENAL_FUNCTION; ASSEMBLER; {$FRAME-}
ASM
PUSH EBP
MOV EBP,ESP
MOV ECX,DWORD PTR DS:[$69954C]
PUSH -1
PUSH $63656B
MOV EAX, LARGE FS:0
PUSH EAX
MOV LARGE FS:0, ESP
PUSH ECX
PUSH ESI
MOV ESI,ECX
MOV ECX,DWORD PTR DS:[ESI+$38]
CMP DWORD PTR DS:[ECX+$3C],-1
JNZ @@No_call
MOV EAX, $5BDB50
CALL EAX
@@No_call:
MOV EAX,DWORD PTR DS:[ESI+$38]
PUSH EDI
MOV EAX,DWORD PTR DS:[$69CCFC]
MOV EDX,DWORD PTR DS:[$69CCF4]
IMUL EDX,EDX,$168
SUB EAX,EDX
MOV EDX,DWORD PTR SS:[EBP+8]
IMUL EDX,EDX,$492
ADD EDX,EAX
ADD EDX,$0B50
MOV DWORD PTR SS:[EBP+8],EDX
PUSH $4AA2F5
END;

//Вклиниваемся в адрес, откуда начинается вызов диалога Кузницы
PROCEDURE HOOK_Blacksmith; ASSEMBLER; {$FRAME-}
ASM
PUSH 0
PUSH ESI
CALL ARSENAL_FUNCTION
PUSH $5D22E1
END;

//Вырубаем все функции обновления экрана мира при входе в город
PROCEDURE Disable_Redraw_Map; ASSEMBLER; {$FRAME-}
ASM
PUSH EBP
MOV EBP, ESP
PUSH -1
MOV DWORD PTR DS:[$415D44],$114E9
MOV BYTE PTR DS:[$415D48],0
MOV DWORD PTR DS:[$4032E5],$124E9
MOV BYTE PTR DS:[$4032E9],0
MOV DWORD PTR DS:[$403423],$123E9
MOV BYTE PTR DS:[$403427],0
PUSH $5C6C75
END;

//Врубаем все функции обновления экрана мира при выходе из города
PROCEDURE Enable_Redraw_Map; ASSEMBLER; {$FRAME-}
ASM
MOV DWORD PTR DS:[$415D44],$BE83F18B
MOV BYTE PTR DS:[$415D48],$98
MOV DWORD PTR DS:[$4032E5],$0D8BF18B
MOV BYTE PTR DS:[$4032E9],$38
MOV DWORD PTR DS:[$403423],$8B565351
MOV BYTE PTR DS:[$403427],$0F1
MOV EAX,2
PUSH $5D4C74
END;

BEGIN
HookCode(POINTER($5D21A4), @HOOK_Blacksmith, C_HOOKTYPE_JUMP);
HookCode(POINTER($5C6C70), @Disable_Redraw_Map, C_HOOKTYPE_JUMP);
HookCode(POINTER($5D4C6F), @Enable_Redraw_Map, C_HOOKTYPE_JUMP);
END.
(22.08.2011 19:05)Berserker Wrote: [ -> ]Пока что удали его лучше, а потом нужно выловить Мора и поругать.
Пусть лучше мир прогнётся под нас...
(29.08.2011 19:22)MOP Wrote: [ -> ]Пусть лучше мир прогнётся под нас...
для этого не надо динамические патчи делать. а то мир потом обратно выгнется.
Уже забыл, а вот теперь надо вспоминать.
В состав входит обновлённый h3wog.exe (видимо, добавлена подгрузка angel.dll и больше никаких изменений?), библиотека angel.dll (видимо, ранняя версия era.dll?) и папка с плагинами.
Моды не поддерживаются? Начиная с какой версии поддерживаются?
Моды с версии 2.0.
Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
Reference URL's