Нашёл) Найдём инструкцию, которая модифицирует значения параметров нашего персонажа(и не только) 6FDA837F - 8D 3C 29 - lea edi,[ecx+ebp] 6FDA8382 - 85 FF - test edi,edi 6FDA8384 - 89 78 04 - mov [eax+04],edi << 6FDA8387 - 7E 12 - jle D2Common.Ordinal11140+14B 6FDA8389 - 8B 54 24 18 - mov edx,[esp+18] EAX=06B54F20 EBX=05816300 ECX=00000100 EDX=00060000 ESI=05816348 EDI=00002500 ESP=0018F528 EBP=00002400 EIP=6FDA8387 Пройдя всю цепочку указателей получаем такую формулу [6FBCCA04] => ... + 38 => ... + C8 => ... + 4 - сила + C - энергия + 14 - ловкость + 1C - живучесть + 24 - здоровье +2C - макс. здоровье + 34 - мана +3C - макс. мана + 44 - выносливость +4C - макс. выносливость + 5C - опыт +7С - опыт для след. уровня Фактически текущие и максимальные значения здоровья, маны и выносливости смещены на +1 байт, т. е. + 25 - здоровье 2D - макс. здоровье + 35 - мана 3D - макс. мана + 45 - выносливость 4D - макс. выносливость ,а в 4 и C байтах текущих значений находятся счётчики, которые при переносе увеличивают текущее значение, если не достигнут максимум - это регенерация. Поэтому НЕ НАДО модифицировать эти значения самим. Либо морозим полное значение 4 байта при записи по этому адресу, либо извращаемся дальше) Структура персонажа без наличия очков параметров(да, это Варвар)) ========================================================= 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F --------------------------------------------------------- 0000|00 00 00 00 1E 00 00 00 00 00 01 00 0A 00 00 00 0010|00 00 02 00 14 00 00 00 00 00 03 00 19 00 00 00 0020|00 00 06 00 00 37 00 00 00 00 07 00 00 37 00 00 0030|00 00 08 00 00 0A 00 00 00 00 09 00 00 0A 00 00 0040|00 00 0A 00 98 50 00 00 00 00 0B 00 00 5C 00 00 0050|00 00 0C 00 01 00 00 00 00 00 0D 00 78 00 00 00 0060|00 00 15 00 03 00 00 00 00 00 16 00 06 00 00 00 0070|00 00 1D 00 FF FF FF FF 00 00 1E 00 F4 01 00 00 0080|00 00 1F 00 05 00 00 00 00 00 43 00 96 00 00 00 0090|00 00 44 00 64 00 00 00 00 00 45 00 64 00 00 00 00A0|00 00 48 00 27 00 00 00 00 00 49 00 28 00 00 00 00B0|00 00 5F 00 0A 32 00 00 00 00 AC 00 02 00 00 00 00C0|00 00 48 01 09 00 00 00 00 00 00 00 00 00 00 00 00D0|00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00E0|00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00F0|00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ========================================================= D2Common.Ordinal11140+103 (6FDA8353) - 8B 7C 24 10 - mov edi,[esp+10] - в [esp+10] ID параметра например для модификации выносливости в edi будет 000A0000, ID размещены в первых 4 байтах каждых 8-ми байт. 40h - 43h для выносливости. 00070000 28h - 2Bh для макс. здоровья и т.д. Всё бы хорошо, сравнивай адреса по которым пишутся значения и нужные нам, НО после повышения уровня, полученные 5 очков пишутся по адресам 20h - 27h с ID=4, таким образом все значения сдвигаются на 8 байт. После распределения этих очков всё становится на место. В скрипте при каждой записи можно сравнивать значение по адресу +22h с 4, тогда делаем правку в +8. Наброски скрипта: !!!пока есть небольшой глюк при получении очков параметров, может кто исправит,буду рад!!! alloc(newmem,256) label(returnhere) label(originalcode) label(changedcode) label(not8) label(notMax) label(exit) newmem: push ebx mov ebx, [6FBCCA04] cmp ebx, 0 je originalcode mov ebx, [ebx+38] mov ebx, [ebx+C8] lea ebx, [ebx+22] cmp [ebx], 4 jne not8 lea ebx, [ebx+8] not8: lea ebx, [ebx-2] cmp eax, ebx je changedcode lea ebx, [ebx+10] cmp eax, ebx je changedcode lea ebx, [ebx+10] cmp eax, ebx jne originalcode changedcode: push ecx mov ecx, edi and ecx, FFFFFF00 cmp ecx, [ebx+C] jle notMax pop ecx jmp exit notMax: mov ebx, [ebx+4] and ebx, FFFFFF00 cmp ecx, ebx pop ecx jle exit originalcode: mov [eax+04],edi exit: pop ebx test edi,edi jmp returnhere 6FDA8382: jmp newmem returnhere: Структура персонажа при наличии очков параметров ========================================================= 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F --------------------------------------------------------- 0000|00 00 00 00 1E 00 00 00 00 00 01 00 0A 00 00 00 0010|00 00 02 00 14 00 00 00 00 00 03 00 19 00 00 00 0020|00 00 04 00 05 00 00 00 00 00 06 00 00 39 00 00 0030|00 00 07 00 00 39 00 00 00 00 08 00 00 0B 00 00 0040|00 00 09 00 00 0B 00 00 00 00 0A 00 00 5D 00 00 0050|00 00 0B 00 00 5D 00 00 00 00 0C 00 02 00 00 00 0060|00 00 0D 00 F5 01 00 00 00 00 0E 00 09 00 00 00 0070|00 00 15 00 03 00 00 00 00 00 16 00 06 00 00 00 0080|00 00 1D 00 FF FF FF FF 00 00 1E 00 DC 05 00 00 0090|00 00 1F 00 05 00 00 00 00 00 43 00 64 00 00 00 00A0|00 00 44 00 64 00 00 00 00 00 45 00 64 00 00 00 00B0|00 00 48 00 25 00 00 00 00 00 49 00 28 00 00 00 00C0|00 00 5F 00 0A 32 00 00 00 00 AC 00 02 00 00 00 00D0|00 00 48 01 20 00 00 00 00 00 48 01 20 00 00 00 00E0|00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00F0|00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ========================================================= Пока всё. Дальше надо тестить на наличие других лазеек игры, чтобы навредить нам) Всё оказалось немного сложнее, чем в версии 1.09