А чем тебя ecx не устраивает? Полистай код, найди процедуру, в которую передается тип города, в зависимости от твоих потребностей, и меняй себе на здоровье.
Дьякон, я не совсем понял, что ты имеешь в виду. Можешь пояснить или привести примерный код?
приведи код и поставь задачу
Опять нашел ответы на свои вопросы.

Размещаю здесь, авось кому пригодится.
Code:
[$6AAAB8] - номер города
[[$69954C]+$110] - тип города
Дьякон, спасибо, уже не надо.

Научился вроде искать указатели. АртМани тут и впрямь не помощник.
Мне может кто-нибудь объяснить, что означает эта команда?
Code:
MOV DWORD PTR FS:[0], ECX
При попытке поставить хук в ту область, где она выполняется, происходит вылет при записи.
Установка обработчика структурных исключений. Если очень хочется мозголома, то гугл: Structured Exceptions Handling.
Обычно тебе этот код не должен быть нужен.
Берс, уже поставил хук на другое место. Но почитаю, спасибо. Хотя вряд ли пойму, если даже ты говоришь, что мозголом.
Такой вот вопрос: когда заклинания Гильдии магов добавляются герою? Если нет книги, то, по идее, сразу после покупки оной. А если есть книга, то при заходе в город?
подозреваю, что если портануться в город, но зайти в город не двойным кликом а через Управление королевством, то могут не добавиться. не проверял
SAG, проверю.
Товарищи, поставил хук на получение уровня и после получения уровня (огромное спасибо MOP). Есть один досадный минус: почему-то лишь раз показывается окошко получения нового уровня (независимо от опыта), а уровень героя приравнивается к 34. Помогите отыскать жука.
Code:
//////////////////////////////////////////////////
// 90000: LevelUp
// X1 - hero who got a level
//////////////////////////////////////////////////
PROCEDURE HookTrigger_LevelUp; ASSEMBLER; {$FRAME-}
ASM
// Restore default code
MOV DataTemp, $59A890
CALL DataTemp
MOV EAX, DWORD PTR DS:[$69959C]
MOVSX ECX, AX
// Push all registers
PUSHAD
// Move hero number to X1
MOV EAX, [LevelUp_HeroNumber]
ADD EAX, 4
MOV EAX, [EAX]
MOV ECX, VAR_X
MOV [ECX], EAX
// Move level to X2
MOV EAX, [LevelUp_HeroLevel]
MOV ECX, VAR_X+4
MOV [ECX], EAX
// Call ERM function
PUSH 90000
MOV EAX, ERMFunction
CALL EAX
ADD ESP, 4
// Restore all registers
POPAD // Restore all registers
// Return
PUSH $4DACA7
END; // .PROCEDURE HookTrigger_LevelUp
//////////////////////////////////////////////////
// 90001: AfterLevelUp
// X1 - hero who got a level
//////////////////////////////////////////////////
PROCEDURE HookTrigger_AfterLevelUp; ASSEMBLER; {$FRAME-}
ASM
// Restore default code
MOV EDX, DWORD PTR SS:[EBP-10]
MOVSX ECX, AX
CMP ECX, EDX
// Push all registers
PUSHAD
// Move hero number to X1
MOV EAX, [LevelUp_HeroNumber]
ADD EAX, 4
MOV EAX, [EAX]
MOV ECX, VAR_X
MOV [ECX], EAX
// Move level to X2
MOV EAX, [LevelUp_HeroLevel]
MOV ECX, VAR_X+4
MOV [ECX], EAX
// Call ERM function
PUSH 90001
MOV EAX, ERMFunction
CALL EAX
ADD ESP, 4
// Restore all registers
POPAD // Restore all registers
// Return
PUSH $4DAF12
END; // .PROCEDURE HookTrigger_AfterLevelUp
BEGIN
HookCode(POINTER($4DAC9B), @HookTrigger_LevelUp, C_HOOKTYPE_JUMP); // 90000
HookCode(POINTER($4DAF0A), @HookTrigger_AfterLevelUp, C_HOOKTYPE_JUMP); // 90001
END.
Quote:на получение уровня
!?HL?
X1 - Erm x1?
Да. Но только для любого героя.
(09.02.2011 23:51)Berserker Wrote: [ -> ]Quote:на получение уровня
!?HL?
X1 - Erm x1?
Угу. Ибо с EventParams у меня опять какая-то херь выходит. Потом поменяю, пока что хватает и этого. Так, код
Code:
!?FU90000;
!!IF:M^%X1 - герой, %X2 - уровень^;
выводит все правильно.
А код
Code:
!?FU90001;
!!HEx1:Ed/x2;
не работает.
Установить уровень в x2?
Quote:Да. Но только для любого героя.
!?HL-1;
Так в HE:E при установке уровня окна и не должны вроде появляться.
Откуда появляются значения в переменных LevelUp_HeroNumber и LevelUp_HeroLevel?