Garik66 Опубликовано 5 февраля, 2017 Поделиться Опубликовано 5 февраля, 2017 Скрипты LUA-скрипт: Скрытый текст function CETimer1Timer(sender) sum = readInteger('006920DC') if sum ~= nill then UDF1.CELabel1.setCaption(sum) end end "15 Снятие ограничения к-ва выпавших предметов на этаже." Скрытый текст { Game : TH.exe Version: Date : 2017-02-05 Author : Garik66 This script does blah blah blah } [ENABLE] aobscanmodule(Sum1,TH.exe,3B 1D DC 20 69 00 0F) // should be unique alloc(newmem,$1000) label(code) label(return) registersymbol(Sum1) newmem: cmp [TH.exe+2920DC],#100 jae @f jmp code @@: sub [TH.exe+2920DC],#100 code: cmp ebx,[TH.exe+2920DC] jmp return Sum1: jmp newmem db 90 return: [DISABLE] Sum1: db 3B 1D DC 20 69 00 unregistersymbol(Sum1) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "TH.exe"+280C4 "TH.exe"+28092: 8B 0C 85 68 59 4A 00 - mov ecx,[eax*4+TH.exe+A5968] "TH.exe"+28099: E8 26 06 FF FF - call TH.exe+186C4 "TH.exe"+2809E: 8B 86 9C 62 68 00 - mov eax,[esi+TH.exe+28629C] "TH.exe"+280A4: 39 86 A0 62 68 00 - cmp [esi+TH.exe+2862A0],eax "TH.exe"+280AA: 7C 14 - jl TH.exe+280C0 "TH.exe"+280AC: 89 86 A0 62 68 00 - mov [esi+TH.exe+2862A0],eax "TH.exe"+280B2: 83 A6 94 62 68 00 00 - and dword ptr [esi+TH.exe+286294],00 "TH.exe"+280B9: C6 86 B0 62 68 00 01 - mov byte ptr [esi+TH.exe+2862B0],01 "TH.exe"+280C0: 43 - inc ebx "TH.exe"+280C1: 83 C7 04 - add edi,04 // ---------- INJECTING HERE ---------- "TH.exe"+280C4: 3B 1D DC 20 69 00 - cmp ebx,[TH.exe+2920DC] // ---------- DONE INJECTING ---------- "TH.exe"+280CA: 0F 8C 3F FF FF FF - jl TH.exe+2800F "TH.exe"+280D0: 5E - pop esi "TH.exe"+280D1: 5F - pop edi "TH.exe"+280D2: E8 C5 FE FF FF - call TH.exe+27F9C "TH.exe"+280D7: 5B - pop ebx "TH.exe"+280D8: C3 - ret "TH.exe"+280D9: 56 - push esi "TH.exe"+280DA: BE 28 1E 69 00 - mov esi,TH.exe+291E28 "TH.exe"+280DF: 8B 0E - mov ecx,[esi] "TH.exe"+280E1: 83 26 00 - and dword ptr [esi],00 } Видео: Табличка: таблица в следующем сообщении 3 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 5 февраля, 2017 Автор Поделиться Опубликовано 5 февраля, 2017 Сейчас обнаружил (не дождался реакции заказчика), что табличка из-за скрипта LUA работает не правильно (я думал, что без его активации таймер не будет активироваться, а оказалось активируется).. Удалил LUA-скрипт (если понадобится переделаю его) и форму. Табличку перезалью: таблицу выложил здесь. Ссылка на комментарий Поделиться на другие сайты Поделиться
lilker Опубликовано 7 февраля, 2017 Поделиться Опубликовано 7 февраля, 2017 В 05.02.2017в21:45, Garik66 сказал: Сейчас обнаружил (не дождался реакции заказчика), что табличка из-за скрипта LUA работает не правильно (я думал, что без его активации таймер не будет активироваться, а оказалось активируется).. Удалил LUA-скрипт (если понадобится переделаю его) и форму. Табличку перезалью: Thehell_v1_209plus15byGarik66.CT при одновременном включении скриптов "шанс и кол-во дропа" + "кол-во на этаже" дроп не осуществляется вообще. Вместо этого рисуются контуры предметов в воздухе(( Это же последняя актуальная версия? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 7 февраля, 2017 Автор Поделиться Опубликовано 7 февраля, 2017 56 минут назад, lilker сказал: при одновременном включении скриптов "шанс и кол-во дропа" + "кол-во на этаже" дроп не осуществляется вообще. Вместо этого рисуются контуры предметов в воздухе(( Это же последняя актуальная версия? Проверю на выходных. ЗЫ: Стоп - ты замораживаешь адрес "кол-во на этаже" ( ), или активируешь скрипт "15 Снятие ограничения к-ва выпавших предметов на этаже."? Если первое, то извини - это уже твой косяк - этот адрес конечно замораживать нельзя - он показывает именно количество предметов на этаже. А если скрипт - то проверю, хотя на видео явно видно, что скрипт правильный и всё работает. Ссылка на комментарий Поделиться на другие сайты Поделиться
lilker Опубликовано 8 февраля, 2017 Поделиться Опубликовано 8 февраля, 2017 да, напутал. заморозил адрес проверю снова вечером Гарик, в двух словах, где включить вынесенный счетчик в СЕ ? такой как ты использовал для подсчета предметов Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 8 февраля, 2017 Автор Поделиться Опубликовано 8 февраля, 2017 13 часа назад, lilker сказал: да, напутал. заморозил адрес проверю снова вечером Гарик, в двух словах, где включить вынесенный счетчик в СЕ ? такой как ты использовал для подсчета предметов В последней версии таблицы я его удалил - Lua скрипт ( а точнее таймер) мешал загрузке таблицы. Его нужно переписать. Ссылка на комментарий Поделиться на другие сайты Поделиться
lilker Опубликовано 12 февраля, 2017 Поделиться Опубликовано 12 февраля, 2017 Добрый день) проверил таблицу с удаленным LUA ( если правильно все понял по ссылкам) - накладок с дропом нет. Каждый моб кидает вещь - все ок) 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 марта, 2017 Автор Поделиться Опубликовано 18 марта, 2017 Diablo The Hell v1 209 Пишем программный перебор шмоток по заданным характеристикам. Скрипт "16. Подбор брони": Скрытый текст { Game : TH.exe Version: Date : 2017-03-18 Author : Garik66 This script does blah blah blah } [ENABLE] {$LUA} -- запись в файл Garik66.txt function write_file() if readInteger('WriteID') == 1 then file=io.open('Garik66.txt','a+') file:write("newID - "..readInteger('IDItem66 '.."\n").."; ") file:close() writeInteger('WriteID', 0) end end -- таймер для проверки t=createTimer(nil) timer_setInterval(t, 100) timer_onTimer(t, write_file) timer_setEnabled(t, true) {$ASM} aobscanmodule(IDItemG66,TH.exe,8B 02 89 06 66 8B 42 04) // should be unique alloc(newmem,$1000) label(code) label(return) label(WriteID) registersymbol(WriteID) label(IDItem66) registersymbol(IDItem66) registersymbol(IDItemG66) newmem: cmp ebx,1 jne code cmp [edx+128],#-35 jne @f cmp [edx+FC],#35 jne @f cmp [edx+d4],#200 jne @f mov eax,[edx] mov [IDItem66],eax mov [WriteID],1 @@: inc [edx] code: mov eax,[edx] mov [esi],eax mov ax,[edx+04] jmp return WriteID: dd 0 IDItem66: dd 0 IDItemG66: jmp newmem db 90 90 90 return: [DISABLE] {$LUA} -- отключение таймера timer_setEnabled(t, false) {$ASM} IDItemG66: db 8B 02 89 06 66 8B 42 04 unregistersymbol(IDItem66) unregistersymbol(WriteID) unregistersymbol(IDItemG66) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "TH.exe"+54D7C "TH.exe"+54D63: 0B C1 - or eax,ecx "TH.exe"+54D65: 0F BE 4A 52 - movsx ecx,byte ptr [edx+52] "TH.exe"+54D69: C1 E0 08 - shl eax,08 "TH.exe"+54D6C: 0B C1 - or eax,ecx "TH.exe"+54D6E: 0F BE 4A 53 - movsx ecx,byte ptr [edx+53] "TH.exe"+54D72: C1 E0 08 - shl eax,08 "TH.exe"+54D75: 0B C1 - or eax,ecx "TH.exe"+54D77: 89 46 0F - mov [esi+0F],eax "TH.exe"+54D7A: 5E - pop esi "TH.exe"+54D7B: C3 - ret // ---------- INJECTING HERE ---------- "TH.exe"+54D7C: 8B 02 - mov eax,[edx] "TH.exe"+54D7E: 89 06 - mov [esi],eax "TH.exe"+54D80: 66 8B 42 04 - mov ax,[edx+04] // ---------- DONE INJECTING ---------- "TH.exe"+54D84: 66 89 46 04 - mov [esi+04],ax "TH.exe"+54D88: 8A 42 3C - mov al,[edx+3C] "TH.exe"+54D8B: 8A 4A 38 - mov cl,[edx+38] "TH.exe"+54D8E: D0 E0 - shl al,1 "TH.exe"+54D90: 02 C8 - add cl,al "TH.exe"+54D92: 88 4E 08 - mov [esi+08],cl "TH.exe"+54D95: 8A 82 EC 00 00 00 - mov al,[edx+000000EC] "TH.exe"+54D9B: 88 46 09 - mov [esi+09],al "TH.exe"+54D9E: 8A 82 F0 00 00 00 - mov al,[edx+000000F0] "TH.exe"+54DA4: 88 46 0A - mov [esi+0A],al } Видео: И табличка: табличку выложил здесь 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 18 марта, 2017 Поделиться Опубликовано 18 марта, 2017 Если интересно, набросал инфу 1. Для увеличения скорости записи в файл можно использовать спидхак (тем же Lua) speedhack_setSpeed(speed) : Enables the speedhack if needed and sets the specific speed speedhack_getSpeed(): Returns the last set speed 2. Таймер может проскочить адрес, в этом случае можно вызывать функцию Lua из AA кода. На форуме где-то была тема. Может быть сложно. 3. Вывод в файл может быть с одинаковыми id-шникиами. Возможно, надо исправить 4. Можно использоваться функцию print('запись') для проверки происходящих действий в скрипте Lua. Т.е. пишет в файл ли, выполняются ли условия, что записал в файл и так далее... 5. Можно использовать звуковое оповещение из Lua, в конце расчета Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 марта, 2017 Автор Поделиться Опубликовано 18 марта, 2017 1 минуту назад, MasterGH сказал: 1. Для увеличения скорости записи в файл можно использовать спидхак (тем же Lua) Да уже с Ликером обсудили это. Garik66 1022 Ответил: 23 минуты назад · Жалоба 26 минуты назад, lilker сказал: на 13 минуте - инструкция замедляет перебор я когда вручную тыкал, ускорял процесс в 5 раз, и шуршул без остановки Да думаю можно будет использовать СЕ-ный спидхак, чтобы ускорить всю игру - можно и в 100 раз попробывать ускорить. - думаю сработатет. 2 минуты назад, MasterGH сказал: 2. Таймер может проскочить адрес, в этом случае можно вызывать функцию Lua из AA кода. На форуме где-то была тема. Может быть сложно. это пока не уловил. Потом разберёмся. 3 минуты назад, MasterGH сказал: 3. Вывод в файл может быть с одинаковыми id-шникиами. Возможно, надо исправить Это на врятли. Включили скрипт, оставили на ночь - пишет. записали куда-нить последний ID-ник перед выключением скрипта, выключили комп, решили продолжить, забили ID, который был последний, включили скрипт и продолжаем. Можно конечно и это всё автоматизировать, но у меня к сожалению столько времени нет. 6 минут назад, MasterGH сказал: 4. Можно использоваться функцию print('запись') для проверки происходящих действий в скрипте Lua. Т.е. пишет в файл ли, выполняются ли условия, что записал в файл и так далее... да можно было сделать, но я скрипт полностью протестил, на одной характеристики. 7 минут назад, MasterGH сказал: 5. Можно использовать звуковое оповещение из Lua, в конце расчета Об этом тоже думал, но опять же из-за не хватки времени не стал делать. Может кто-нибудь, если захочет доведёт скрипт до ума, особенно. если захочет написать трейнер по данной табличке. (как знаешь я трейнеры практически и не пишу.) Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 18 марта, 2017 Автор Поделиться Опубликовано 18 марта, 2017 ЗЫ: Но сомневаюсь, что кто-нибудь захочет это делать Перебрать 4 байта инфы со скоростью даже 1 сек это 136 лет. У меня написание самого скрипта, вызвало академический интерес. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 19 марта, 2017 Автор Поделиться Опубликовано 19 марта, 2017 Diablo The Hell v1 209 Пишем программный перебор шмоток по заданным характеристикам. (Часть 2) Скрипт "16.1. Перебор брони": Скрытый текст { Game : TH.exe Version: Date : 2017-03-18 Author : Garik66 This script does blah blah blah } [ENABLE] {$LUA} showMessage("Вас приветствует скрипт Garik66 для перебора в данном случае брони. Запишите последний проверенный ID предмета из файла ID_Item.txt, который находится в директории CE, измените характеристики, по которым проверяете бронь, если нужно, и активируйте скрипт Start. Перед завершением перебора, вначале отключите скрипт Start. Также посмотрите видео-инструкцию, активировав скрипт Видео-инструкция. Удачи в переборе! :)") -- запись в файл Garik66.txt function write_file() if readInteger('WriteID') == 1 then file=io.open('ID_Item.txt','a+') file:write("newID - "..readInteger('IDItem66 '.."\n").."; ") file:close() writeInteger('WriteID', 0) end end -- таймер для проверки t=createTimer(nil) timer_setInterval(t, 5) timer_onTimer(t, write_file) timer_setEnabled(t, true) {$ASM} aobscanmodule(IDItemG66,TH.exe,8B 02 89 06 66 8B 42 04) // should be unique alloc(newmem,$1000) label(code) label(return) label(Value_DFE) registersymbol(Value_DFE) label(PlusArmor) registersymbol(PlusArmor) label(Armor) registersymbol(Armor) label(WriteID) registersymbol(WriteID) label(IDItem666) registersymbol(IDItem666) label(IDItem66) registersymbol(IDItem66) label(Start) registersymbol(Start) registersymbol(IDItemG66) newmem: mov [IDItem666],edx cmp [Start],0 je code cmp ebx,1 jne code mov eax,0 sub eax,[edx+128] cmp eax,[Value_DFE] jb @f mov eax,[PlusArmor] cmp [edx+FC],eax jb @f mov eax,[Armor] cmp [edx+d4],eax jb @f mov eax,[edx] mov [IDItem66],eax mov [WriteID],1 @@: inc [edx] code: mov eax,[edx] mov [esi],eax mov ax,[edx+04] jmp return WriteID: dd 0 IDItem66: dd 0 IDItem666: dd 0 Value_DFE: dd #33 PlusArmor: dd #30 Armor: dd #190 Start: dd 0 IDItemG66: jmp newmem db 90 90 90 return: [DISABLE] {$LUA} -- отключение таймера timer_setEnabled(t, false) {$ASM} IDItemG66: db 8B 02 89 06 66 8B 42 04 unregistersymbol(Start) unregistersymbol(Value_DFE) unregistersymbol(PlusArmor) unregistersymbol(Armor) unregistersymbol(IDItem66) unregistersymbol(IDItem666) unregistersymbol(WriteID) unregistersymbol(IDItemG66) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "TH.exe"+54D7C "TH.exe"+54D63: 0B C1 - or eax,ecx "TH.exe"+54D65: 0F BE 4A 52 - movsx ecx,byte ptr [edx+52] "TH.exe"+54D69: C1 E0 08 - shl eax,08 "TH.exe"+54D6C: 0B C1 - or eax,ecx "TH.exe"+54D6E: 0F BE 4A 53 - movsx ecx,byte ptr [edx+53] "TH.exe"+54D72: C1 E0 08 - shl eax,08 "TH.exe"+54D75: 0B C1 - or eax,ecx "TH.exe"+54D77: 89 46 0F - mov [esi+0F],eax "TH.exe"+54D7A: 5E - pop esi "TH.exe"+54D7B: C3 - ret // ---------- INJECTING HERE ---------- "TH.exe"+54D7C: 8B 02 - mov eax,[edx] "TH.exe"+54D7E: 89 06 - mov [esi],eax "TH.exe"+54D80: 66 8B 42 04 - mov ax,[edx+04] // ---------- DONE INJECTING ---------- "TH.exe"+54D84: 66 89 46 04 - mov [esi+04],ax "TH.exe"+54D88: 8A 42 3C - mov al,[edx+3C] "TH.exe"+54D8B: 8A 4A 38 - mov cl,[edx+38] "TH.exe"+54D8E: D0 E0 - shl al,1 "TH.exe"+54D90: 02 C8 - add cl,al "TH.exe"+54D92: 88 4E 08 - mov [esi+08],cl "TH.exe"+54D95: 8A 82 EC 00 00 00 - mov al,[edx+000000EC] "TH.exe"+54D9B: 88 46 09 - mov [esi+09],al "TH.exe"+54D9E: 8A 82 F0 00 00 00 - mov al,[edx+000000F0] "TH.exe"+54DA4: 88 46 0A - mov [esi+0A],al } Видео: Табличка: Здесь Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 21 марта, 2017 Автор Поделиться Опубликовано 21 марта, 2017 В 19.03.2017в14:44, Garik66 сказал: Скрипт "16.1. Перебор брони": и двухдневная работа самого заказчика lilker принесли результаты - получена самая крутая броня в Моде: Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 27 апреля, 2017 Автор Поделиться Опубликовано 27 апреля, 2017 Diablo The Hell v1 209 Пишем программный перебор шмоток по заданным характеристикам. (Часть 3) Скрипт "16.1. Перебор предмета по заданным характеристикам": Скрытый текст { Game : TH.exe Version: Date : 2017-03-18 Author : Garik66 This script does blah blah blah } [ENABLE] {$LUA} --showMessage("Вас приветствует скрипт Garik66 для перебора в данном случае брони. Запишите последний проверенный ID предмета из файла ID_Item.txt, который находится в директории CE, измените характеристики, по которым проверяете бронь, если нужно, и активируйте скрипт Start. Перед завершением перебора, вначале отключите скрипт Start. Также посмотрите видео-инструкцию, активировав скрипт Видео-инструкция. Удачи в переборе! :)") -- запись в файл Garik66.txt function write_file() if readInteger('WriteID') == 1 then file=io.open('ID_Item.txt','a+') file:write("newID - "..readInteger('IDItem66 '.."\n").."; ") file:close() writeInteger('WriteID', 0) end end -- таймер для проверки t=createTimer(nil) timer_setInterval(t, 5) timer_onTimer(t, write_file) timer_setEnabled(t, true) {$ASM} aobscanmodule(IDItemG66,TH.exe,8B 02 89 06 66 8B 42 04) // should be unique alloc(newmem,$1000) label(code) label(return) label(Value_DFE) registersymbol(Value_DFE) label(PlusArmor) registersymbol(PlusArmor) label(Armor) registersymbol(Armor) label(WriteID) registersymbol(WriteID) label(IDItem666) registersymbol(IDItem666) label(DamageMin) registersymbol(DamageMin) label(DamageMax) registersymbol(DamageMax) label(DamagePlus) registersymbol(DamagePlus) label(IDItem66) registersymbol(IDItem66) label(Start) registersymbol(Start) registersymbol(IDItemG66) newmem: mov [IDItem666],edx cmp [Start],0 je code cmp ebx,1 jne code mov eax,0 sub eax,[edx+128] cmp eax,[Value_DFE] jb @f mov eax,[PlusArmor] cmp [edx+FC],eax jb @f mov eax,[Armor] cmp [edx+D4],eax jb @f mov eax,[DamageMin] cmp [edx+CC],eax jb @f mov eax,[DamageMax] cmp [edx+D0],eax jb @f mov eax,[DamagePlus] cmp [edx+F4],eax jb @f mov eax,[edx] mov [IDItem66],eax mov [WriteID],1 @@: inc [edx] code: mov eax,[edx] mov [esi],eax mov ax,[edx+04] jmp return WriteID: dd 0 IDItem66: dd 0 IDItem666: dd 0 Value_DFE: dd 0 PlusArmor: dd 0 Armor: dd 0 Start: dd 0 DamageMin: dd 0 DamageMax: dd 0 DamagePlus: dd 0 IDItemG66: jmp newmem db 90 90 90 return: [DISABLE] {$LUA} -- отключение таймера timer_setEnabled(t, false) {$ASM} IDItemG66: db 8B 02 89 06 66 8B 42 04 unregistersymbol(Start) unregistersymbol(Value_DFE) unregistersymbol(PlusArmor) unregistersymbol(Armor) unregistersymbol(IDItem66) unregistersymbol(IDItem666) unregistersymbol(WriteID) unregistersymbol(DamageMin) unregistersymbol(DamageMax) unregistersymbol(DamagePlus) unregistersymbol(IDItemG66) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "TH.exe"+54D7C "TH.exe"+54D63: 0B C1 - or eax,ecx "TH.exe"+54D65: 0F BE 4A 52 - movsx ecx,byte ptr [edx+52] "TH.exe"+54D69: C1 E0 08 - shl eax,08 "TH.exe"+54D6C: 0B C1 - or eax,ecx "TH.exe"+54D6E: 0F BE 4A 53 - movsx ecx,byte ptr [edx+53] "TH.exe"+54D72: C1 E0 08 - shl eax,08 "TH.exe"+54D75: 0B C1 - or eax,ecx "TH.exe"+54D77: 89 46 0F - mov [esi+0F],eax "TH.exe"+54D7A: 5E - pop esi "TH.exe"+54D7B: C3 - ret // ---------- INJECTING HERE ---------- "TH.exe"+54D7C: 8B 02 - mov eax,[edx] "TH.exe"+54D7E: 89 06 - mov [esi],eax "TH.exe"+54D80: 66 8B 42 04 - mov ax,[edx+04] // ---------- DONE INJECTING ---------- "TH.exe"+54D84: 66 89 46 04 - mov [esi+04],ax "TH.exe"+54D88: 8A 42 3C - mov al,[edx+3C] "TH.exe"+54D8B: 8A 4A 38 - mov cl,[edx+38] "TH.exe"+54D8E: D0 E0 - shl al,1 "TH.exe"+54D90: 02 C8 - add cl,al "TH.exe"+54D92: 88 4E 08 - mov [esi+08],cl "TH.exe"+54D95: 8A 82 EC 00 00 00 - mov al,[edx+000000EC] "TH.exe"+54D9B: 88 46 09 - mov [esi+09],al "TH.exe"+54D9E: 8A 82 F0 00 00 00 - mov al,[edx+000000F0] "TH.exe"+54DA4: 88 46 0A - mov [esi+0A],al } Видео: Табличка: Здесь. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 1 мая, 2017 Автор Поделиться Опубликовано 1 мая, 2017 Diablo The Hell v1 209 Пишем программный перебор шмоток по заданным характеристикам. (Часть 4) Скрипт "16.1. Перебор предмета по заданным характеристикам": Скрытый текст { Game : TH.exe Version: Date : 2017-03-18 Author : Garik66 This script does blah blah blah } [ENABLE] {$LUA} --showMessage("Вас приветствует скрипт Garik66 для перебора в данном случае брони. Запишите последний проверенный ID предмета из файла ID_Item.txt, который находится в директории CE, измените характеристики, по которым проверяете бронь, если нужно, и активируйте скрипт Start. Перед завершением перебора, вначале отключите скрипт Start. Также посмотрите видео-инструкцию, активировав скрипт Видео-инструкция. Удачи в переборе! :)") -- запись в файл Garik66.txt function write_file() if readInteger('WriteID') == 1 then file=io.open('ID_Item.txt','a+') file:write("newID - "..readInteger('IDItem66 '.."\n").."; ") file:close() writeInteger('WriteID', 0) end end -- таймер для проверки t=createTimer(nil) timer_setInterval(t, 5) timer_onTimer(t, write_file) timer_setEnabled(t, true) {$ASM} aobscanmodule(IDItemG66,TH.exe,8B 02 89 06 66 8B 42 04) // should be unique alloc(newmem,$1000) label(code) label(return) label(Value_DFE) registersymbol(Value_DFE) label(PlusArmor) registersymbol(PlusArmor) label(Armor) registersymbol(Armor) label(WriteID) registersymbol(WriteID) label(IDItem666) registersymbol(IDItem666) label(DamageMin) registersymbol(DamageMin) label(DamageMax) registersymbol(DamageMax) label(DamagePlus) registersymbol(DamagePlus) label(DamagePlus1) registersymbol(DamagePlus1) label(IDItem66) registersymbol(IDItem66) label(Start) registersymbol(Start) registersymbol(IDItemG66) newmem: mov [IDItem666],edx cmp [Start],0 je code cmp ebx,1 jne code mov eax,0 sub eax,[edx+128] cmp eax,[Value_DFE] jb @f mov eax,[PlusArmor] cmp [edx+FC],eax jb @f mov eax,[Armor] cmp [edx+D4],eax jb @f mov eax,[DamageMin] cmp [edx+CC],eax jb @f mov eax,[DamageMax] cmp [edx+D0],eax jb @f mov eax,[DamagePlus] cmp [edx+F4],eax jb @f mov eax,[DamagePlus1] cmp [edx+124],eax jb @f mov eax,[edx] mov [IDItem66],eax mov [WriteID],1 @@: inc [edx] code: mov eax,[edx] mov [esi],eax mov ax,[edx+04] jmp return WriteID: dd 0 IDItem66: dd 0 IDItem666: dd 0 Value_DFE: dd 0 PlusArmor: dd 0 Armor: dd 0 Start: dd 0 DamageMin: dd 0 DamageMax: dd 0 DamagePlus: dd 0 DamagePlus1: dd 0 IDItemG66: jmp newmem db 90 90 90 return: [DISABLE] {$LUA} -- отключение таймера timer_setEnabled(t, false) {$ASM} IDItemG66: db 8B 02 89 06 66 8B 42 04 unregistersymbol(Start) unregistersymbol(Value_DFE) unregistersymbol(PlusArmor) unregistersymbol(Armor) unregistersymbol(IDItem66) unregistersymbol(IDItem666) unregistersymbol(WriteID) unregistersymbol(DamageMin) unregistersymbol(DamageMax) unregistersymbol(DamagePlus) unregistersymbol(DamagePlus1) unregistersymbol(IDItemG66) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "TH.exe"+54D7C "TH.exe"+54D63: 0B C1 - or eax,ecx "TH.exe"+54D65: 0F BE 4A 52 - movsx ecx,byte ptr [edx+52] "TH.exe"+54D69: C1 E0 08 - shl eax,08 "TH.exe"+54D6C: 0B C1 - or eax,ecx "TH.exe"+54D6E: 0F BE 4A 53 - movsx ecx,byte ptr [edx+53] "TH.exe"+54D72: C1 E0 08 - shl eax,08 "TH.exe"+54D75: 0B C1 - or eax,ecx "TH.exe"+54D77: 89 46 0F - mov [esi+0F],eax "TH.exe"+54D7A: 5E - pop esi "TH.exe"+54D7B: C3 - ret // ---------- INJECTING HERE ---------- "TH.exe"+54D7C: 8B 02 - mov eax,[edx] "TH.exe"+54D7E: 89 06 - mov [esi],eax "TH.exe"+54D80: 66 8B 42 04 - mov ax,[edx+04] // ---------- DONE INJECTING ---------- "TH.exe"+54D84: 66 89 46 04 - mov [esi+04],ax "TH.exe"+54D88: 8A 42 3C - mov al,[edx+3C] "TH.exe"+54D8B: 8A 4A 38 - mov cl,[edx+38] "TH.exe"+54D8E: D0 E0 - shl al,1 "TH.exe"+54D90: 02 C8 - add cl,al "TH.exe"+54D92: 88 4E 08 - mov [esi+08],cl "TH.exe"+54D95: 8A 82 EC 00 00 00 - mov al,[edx+000000EC] "TH.exe"+54D9B: 88 46 09 - mov [esi+09],al "TH.exe"+54D9E: 8A 82 F0 00 00 00 - mov al,[edx+000000F0] "TH.exe"+54DA4: 88 46 0A - mov [esi+0A],al } Видео: Табличка: Здесь. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 2 мая, 2017 Автор Поделиться Опубликовано 2 мая, 2017 Diablo The Hell v1 209 Бонусная серия. Скрипты: "17. Отключение некоторых проверок Мордора": Скрытый текст { Game : TH.exe Version: 1.0 Date : 05-02-17 Author : [open aamaker.lua and pastle Author] Version CE: 6.5 Make by aamaker Lua plagin Version 2.4.0.G66.1 :) [EN] Technical support: http://forum.cheatengine.org/viewtopic.php?p=5645967 [RU] Техническая поддержка: https://forum.gamehacklab.ru/index.php?/topic/1415-plugin-aa-maker-создание-аа-скриптов } [ENABLE] aobscanmodule(INJECT0,TH.exe+3182C6,e8xxxxxxxxxxxxxxxxxxxxxxe8xxxxxxxx8bxxxxxxxxxx83xxxx89xx81) registersymbol(INJECT0) INJECT0: db 90 90 90 90 90 [DISABLE] INJECT0: db E8 0B CD D3 FF unregistersymbol(INJECT0) { // ORIGINAL CODE - INJECTION POINT: TH.exe+3182C6 TH.exe+3182AA: 00 00 - add [eax],al TH.exe+3182AC: 00 00 - add [eax],al TH.exe+3182AE: 00 00 - add [eax],al TH.exe+3182B0: 56 - push esi TH.exe+3182B1: 89 CE - mov esi,ecx TH.exe+3182B3: B9 B060A300 - mov ecx,00A360B0 TH.exe+3182B8: 89 F2 - mov edx,esi TH.exe+3182BA: E8 00CAD3FF - call 00454CBF TH.exe+3182BF: B9 B060A300 - mov ecx,00A360B0 TH.exe+3182C4: 89 F2 - mov edx,esi // ---------- INJECTING HERE ----------- TH.exe+3182C6: E8 0BCDD3FF - call 00454FD6 // ---------- DONE INJECTING ---------- TH.exe+3182CB: 5E - pop esi TH.exe+3182CC: C3 - ret TH.exe+3182CD: 90 - nop TH.exe+3182CE: 90 - nop TH.exe+3182CF: 90 - nop TH.exe+3182D0: 57 - push edi TH.exe+3182D1: 53 - push ebx TH.exe+3182D2: E8 F91EFFFF - call 0070A1D0 TH.exe+3182D7: 8B 98 D8470000 - mov ebx,[eax+000047D8] TH.exe+3182DD: 83 C3 07 - add ebx,07 } "18. Бонус от Garik66": Скрытый текст [ENABLE] aobscan(address37,8D XX XX XX XX XX XX F3 A5 E8 XX XX XX XX FF XX XX XX XX XX XX 8D XX XX XX XX XX XX) alloc(newMem37,4000) label(returnHere37) registersymbol(address37) newMem37: lea esi,[eax+edx+00000DB8] repe movsd mov [eax+53dc],1 mov [eax+5421],6564614D mov [eax+5425],20796220 mov [eax+5429],69726147 mov [eax+542D],0036366B mov [eax+5431],00000000 mov [eax+5435],00000000 mov [eax+5478],#66 mov [eax+5498],#6666 mov [eax+54A4],#66 mov [eax+54A8],#66 mov [eax+54AC],#66 mov [eax+54B0],#66 mov [eax+54B4],#66 mov [eax+54B8],#66 mov [eax+54BC],#66 mov [eax+54F0],00001B0B mov [eax+5504],00000000 mov [eax+5508],1 mov [eax+5528],#66 jmp returnHere37 address37: jmp newMem37 db 90 90 90 90 returnHere37: [DISABLE] address37: {TH.exe+20CB5:} lea esi,[eax+edx+00000DB8] repe movsd unregistersymbol(address37) dealloc(newMem37 "19. DFE -66": Скрытый текст { Game : TH.exe Version: Date : 2017-05-02 Author : Garik66 This script does blah blah blah } [ENABLE] aobscanmodule(INJECT38,TH.exe,89 8C 30 44 55 00 00) // should be unique alloc(newmem,$1000) label(code) label(return) registersymbol(INJECT38) newmem: mov ecx,#-66 mov [eax+esi+00005544],#-66 code: mov [eax+esi+00005544],ecx jmp return INJECT38: jmp newmem db 90 90 return: [DISABLE] INJECT38: db 89 8C 30 44 55 00 00 unregistersymbol(INJECT38) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: "TH.exe"+23C56 "TH.exe"+23C26: 8B 4D CC - mov ecx,[ebp-34] "TH.exe"+23C29: 89 8C 30 40 55 00 00 - mov [eax+esi+00005540],ecx "TH.exe"+23C30: A1 14 AE 6E 00 - mov eax,[TH.exe+2EAE14] "TH.exe"+23C35: 8B 4D B0 - mov ecx,[ebp-50] "TH.exe"+23C38: 89 8C 30 88 55 00 00 - mov [eax+esi+00005588],ecx "TH.exe"+23C3F: A1 14 AE 6E 00 - mov eax,[TH.exe+2EAE14] "TH.exe"+23C44: 8B 4D AC - mov ecx,[ebp-54] "TH.exe"+23C47: 89 8C 30 30 55 00 00 - mov [eax+esi+00005530],ecx "TH.exe"+23C4E: 8B 4D A8 - mov ecx,[ebp-58] "TH.exe"+23C51: E9 7A 39 2E 00 - jmp TH.exe+3075D0 // ---------- INJECTING HERE ---------- "TH.exe"+23C56: 89 8C 30 44 55 00 00 - mov [eax+esi+00005544],ecx // ---------- DONE INJECTING ---------- "TH.exe"+23C5D: 58 - pop eax "TH.exe"+23C5E: 39 45 F0 - cmp [ebp-10],eax "TH.exe"+23C61: 7D 03 - jnl TH.exe+23C66 "TH.exe"+23C63: 89 45 F0 - mov [ebp-10],eax "TH.exe"+23C66: 6A 0F - push 0F "TH.exe"+23C68: 58 - pop eax "TH.exe"+23C69: 39 45 F0 - cmp [ebp-10],eax "TH.exe"+23C6C: 7E 03 - jle TH.exe+23C71 "TH.exe"+23C6E: 89 45 F0 - mov [ebp-10],eax "TH.exe"+23C71: A1 14 AE 6E 00 - mov eax,[TH.exe+2EAE14] } Видео: Табличка: выложил здесь. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 5 мая, 2017 Автор Поделиться Опубликовано 5 мая, 2017 В 01.05.2017 в 22:48, Garik66 сказал: Diablo The Hell v1 209 Пишем программный перебор шмоток по заданным характеристикам. (Часть 4) В этой серии, в скрипте и таблице мною допущена ошибка: Скрытый текст mov eax,[DamagePlus] cmp [edx+F4],eax jb @f mov eax,[DamagePlus1] cmp [edx+F4],eax // нужно cmp [edx+124],eax jb @f хотя смещение я посчитал на 21.30 минуте видео. Обнаружил ошибку lilker (Спасибо за внимательный просмотр видео). Скрипт поправил, табличку перезалил. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 21 мая, 2017 Автор Поделиться Опубликовано 21 мая, 2017 Добавлен скрипт: "17.1 Отключение некоторых проверок Мордора": Скрытый текст { Game : TH.exe Version: Date : 2017-05-21 Author : Garik66 This script does blah blah blah } [ENABLE] aobscanmodule(INJECTION_POINT,TH.exe,56 8B F1 57 8B FA 66) // should be unique registersymbol(INJECTION_POINT) INJECTION_POINT: db C3 [DISABLE] INJECTION_POINT: db 56 unregistersymbol(INJECTION_POINT) { // ORIGINAL CODE - INJECTION POINT: "TH.exe"+54FD6 "TH.exe"+54FB3: 89 86 D2 04 00 00 - mov [esi+000004D2],eax "TH.exe"+54FB9: 8B 87 84 55 00 00 - mov eax,[edi+00005584] "TH.exe"+54FBF: 89 86 D6 04 00 00 - mov [esi+000004D6],eax "TH.exe"+54FC5: 8B 87 88 55 00 00 - mov eax,[edi+00005588] "TH.exe"+54FCB: 89 86 DA 04 00 00 - mov [esi+000004DA],eax "TH.exe"+54FD1: 5F - pop edi "TH.exe"+54FD2: 5E - pop esi "TH.exe"+54FD3: 5B - pop ebx "TH.exe"+54FD4: C9 - leave "TH.exe"+54FD5: C3 - ret // ---------- INJECTING HERE ---------- "TH.exe"+54FD6: 56 - push esi "TH.exe"+54FD7: 8B F1 - mov esi,ecx "TH.exe"+54FD9: 57 - push edi "TH.exe"+54FDA: 8B FA - mov edi,edx // ---------- DONE INJECTING ---------- "TH.exe"+54FDC: 66 8B 46 06 - mov ax,[esi+06] "TH.exe"+54FE0: 66 3D FF FF - cmp ax,FFFF "TH.exe"+54FE4: 75 09 - jne TH.exe+54FEF "TH.exe"+54FE6: 83 4F 08 FF - or dword ptr [edi+08],-01 "TH.exe"+54FEA: E9 91 00 00 00 - jmp TH.exe+55080 "TH.exe"+54FEF: 66 3D 17 00 - cmp ax,0017 "TH.exe"+54FF3: 75 31 - jne TH.exe+55026 "TH.exe"+54FF5: 0F B7 46 0D - movzx eax,word ptr [esi+0D] "TH.exe"+54FF9: FF 76 0F - push [esi+0F] "TH.exe"+54FFC: 66 8B 56 04 - mov dx,[esi+04] } TH.CT 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Redear Опубликовано 28 июня, 2017 Поделиться Опубликовано 28 июня, 2017 (изменено) Здравствуйте Гарик Играю неделю с Вашими таблицами. (ускорение, дроп, снятие ограничений дропа на уровень). большое спасибо. Игрок я бывалый, периодический стаж в эту игру 6+ лет. Следил за темой. Возник вопрос по скриптам. Как работает скрипт 14. Скрипт Шанс и качество дропа. 1) - как я понимаю, там идет подстановка для обычного монстра как с босса. Если я прав, то все правила дропа для обычных мобов такие же как у боссов (монстрлвл/3 + 0(2) * 20 в зависимости от сложности + 3 +4. В игре самые топовые аффиксы и суффиксы не могут быть выбиты с боссов, соответственно используя скрипт такое чудо не выбить, вопрос как можно сделать дроп синьки для мобов (вероятность выпадения как обычно нереальное 0,12512501%) постоянным, т.е. вместо дпропа как с босса, дропало как с моба, но только постоянно синьку (без белых предметов, уники можно). следовательно формула дропа с моба должна стать (монстрлвл/3 + 0(2) * 20 в зависимости от сложности + 3) 2) Порядок формирования предмета: 1. Игра генерит шмотку в виде неких первичных половых признаков - "тяжесть" аффиксов, сочетание аф/преф и тд 2. Игра рандомно генерит базу для новой шмотки. (id. предмета). 3. Игра с определенной вероятностью делает его синим. (для мобов около 0,12%, для боссов 100%) 4. Игра с определенной вероятностью делает СИНИЙ ПРЕДМЕТ уникальным (12%). Как сделать скрипт (и можно ли его вообще сделать) по подстановки базы предмета (id) при дропе. Чтобы существенно сократить рандом. К примеру в первой фазе генерация происходит автоматически игрой, а во второй фазе скрипт подсовывает базу амулета. 3) шанс того, что синий предмет станет уником по стандарту 12%, в скрипте он как то увеличивается? по наблюдению нет). или я ошибаюсь. Заранее благодарю за уделенное время. *В ассамблере полный ноль, однако есть опыт работы в дельфи. **С Cheat Engine познакомился только в рамках данного обсуждения) Изменено 28 июня, 2017 пользователем Redear 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 29 июня, 2017 Автор Поделиться Опубликовано 29 июня, 2017 9 часов назад, Redear сказал: Как работает скрипт 14. Скрипт Шанс и качество дропа. Я уже и не помню ("Винт" и "Оперативка" с возрастом "сыпятся" - память стала "Девечья" ), что и как делал, но судя по игровому коду в скрипте: TH.exe+27506: 74 04 - je 0042750C // занопив эту инструкцию в скрипте // ---------- DONE INJECTING ---------- TH.exe+27508: 6A 0F - push 0F // мы попадаем сюдым и соответственно в стек грузим 15 TH.exe+2750A: EB 02 - jmp 0042750E // так что скорее всего ты прав, это максимальный уровень монстра, т.е. боссы. TH.exe+2750C: 6A 01 - push 01 TH.exe+2750E: E9 4D272F00 - jmp 00719C60 Со временем у меня сейчас очень плохо, так что на вряд ли смогу помочь. Может кто-нить, из Ваших фанатов игры, знает ассемблер и покопается ещё в игровом коде? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 29 июня, 2017 Автор Поделиться Опубликовано 29 июня, 2017 ЗЫ: 9 часов назад, Redear сказал: большое спасибо. Да и не за что. Просто было очень интересно покопаться в коде. Ссылка на комментарий Поделиться на другие сайты Поделиться
Redear Опубликовано 29 июня, 2017 Поделиться Опубликовано 29 июня, 2017 7 минут назад, Garik66 сказал: Я уже и не помню ("Винт" и "Оперативка" с возрастом "сыпятся" - память стала "Девечья" ), что и как делал, но судя по игровому коду в скрипте: TH.exe+27506: 74 04 - je 0042750C // занопив эту инструкцию в скрипте // ---------- DONE INJECTING ---------- TH.exe+27508: 6A 0F - push 0F // мы попадаем сюдым и соответственно в стек грузим 15 TH.exe+2750A: EB 02 - jmp 0042750E // так что скорее всего ты прав, это максимальный уровень монстра, т.е. боссы. TH.exe+2750C: 6A 01 - push 01 TH.exe+2750E: E9 4D272F00 - jmp 00719C60 Со временем у меня сейчас очень плохо, так что на вряд ли смогу помочь. Может кто-нить, из Ваших фанатов игры, знает ассемблер и покопается ещё в игровом коде? Наше игровое сообщество крайне скудно) Попробую потыкаться самостоятельно Как я понимаю, моя задача найти адрес, когда с простого моба дропается синька и заменить, в доне инжектион Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 29 июня, 2017 Автор Поделиться Опубликовано 29 июня, 2017 1 минуту назад, Redear сказал: Как я понимаю, моя задача найти адрес, когда с простого моба дропается синька и заменить, в доне инжектион Ну да. Собственно нужно перейти на адрес: jmp 00719C60 // мы сюда попадаем и изучить игровой код, что и как там делается. Так как в игре, качество дропа зависит по-моему от уровня монстра, от уровня подземелья, от уровня ГГ и т.д. Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Celsior Опубликовано 30 сентября, 2017 Поделиться Опубликовано 30 сентября, 2017 Заменил файл, игра перестала запускаться. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 30 сентября, 2017 Автор Поделиться Опубликовано 30 сентября, 2017 21 минуту назад, Celsior сказал: Заменил файл, игра перестала запускаться. Ух...Очень информативно. Не знаю даже что и ответить. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения