Quote:Так в HE:E при установке уровня окна и не должны вроде появляться.
Конечно не должны. А в x2 - мусор по ходу.
Sav, ты не понял. Не о том речь. При срабатывании хука все переменные перемещаются нормально и выдают верные значения. Но отображается лишь одно окно (даже если герой получил 3 уровня) и герою накидываются уровни до 34.
(10.02.2011 01:16)Sav Wrote: [ -> ]Откуда появляются значения в переменных LevelUp_HeroNumber и LevelUp_HeroLevel?
Из указателей. Дело не в этом.
(10.02.2011 01:18)Berserker Wrote: [ -> ]Quote:Так в HE:E при установке уровня окна и не должны вроде появляться.
Конечно не должны. А в x2 - мусор по ходу.
Почему же мусор? Показывает, какого уровня достиг герой.
Уровни до 34 накидываются всегда или только при использовании HE:E?
Всегда. А HE:E было призвано исправить ситуацию, сменив уровень героя на тот, которого он достигает. Но ситуация не меняется. Я бы пошел иным путем: устанавливал бы значение в ассемблере, но я никак не могу найти указатель на реальный уровень героя (а не получаемый).
При вводе чита woggandalfwhite все проходит нормально, кстати. Получаемый уровень соответствует реальному.
А зачем ты восстанавливаешь так много кода? Хуку же одного call хватает, чтобы больше ничего не затирать.
Sav, не понял. Можешь пояснить? Или показать, как должен выглядеть мой код?
HookCode(POINTER($4DAC9B), @HookTrigger_LevelUp, C_HOOKTYPE_JUMP); // 90000
***
// Restore default code
MOV DataTemp, $59A890
CALL DataTemp
MOV EAX, DWORD PTR DS:[$69959C]
MOVSX ECX, AX
***
PUSH $4DACA7
Можно было бы сделать адресом хука адрес call-а и не восстанавливать ничего, кроме него.
И push-ить адрес call-а + 5.
Как это точно сделать - не знаю (нет кода игры перед глазами).
Здесь не видно связи с твоей ошибкой, но иногда при исправлении понятных недочётов исправляются и непонятные ошибки
Sav, спасибо, помогло. Теперь всегда буду ставить хук на CALL.
З.Ы. X2 - и впрямь мусор. Точнее, не совсем мусор, но не то, что нужно. Не совсем то я искал.
(10.02.2011 18:07)GhostManSD Wrote: [ -> ]З.Ы. X2 - и впрямь мусор. Точнее, не совсем мусор, но не то, что нужно. Не совсем то я искал. 
Извиняюсь, таки соврал. Нужное. Это уровень, которого достигнет герой, когда закончит щелкать по окошкам, выбирая новые навыки.

Допустим, в адресе A идет значение (по дампу) [01 00 00 04 00 08 1F 00]. Могу ли я загнать в EAX только начало этого значения, т.е. (в данном случае) 01?
А если надо закинуть второй байт? mov eax, byte ptr [A+1]?
Error 45: Operand types do not match.
Да. Кроме того можно использовать не весь eax (4 байта), а только его четвертинку al:
mov al, [A]