Tzeentch Опубликовано 31 марта, 2021 Поделиться Опубликовано 31 марта, 2021 Проверено на лицензии. Ломается также. Но тут версия по сути отличается от "The First Encounter". На одноручный и двуручный револьвер оказывается разные инструкции срабатывают. Так что по револьверам нужно тереть в двух местах. Можно объединить их в один. Но вставлю их тут отдельно для наглядности. NoDamageHealth: Обходит урон здоровью если игрок Спойлер { Game : SeriousSam.exe THE SECOND ENCOUNTER Version: Date : 2021-03-31 Author : Templar This script does blah blah blah } [ENABLE] aobscanmodule(NoDamageHealth,Engine.dll,D8 65 10 8D 4D C4) // should be unique alloc(newmem,$1000) label(code) label(return) label(nosub) newmem: code: ///фильтр cmp [esi+000000CC+18],#1 ///id игрока je nosub ///перепрыгиваем урон если игрок fsub dword ptr [ebp+10] ///урон nosub: lea ecx,[ebp-3C] jmp return NoDamageHealth: jmp newmem nop return: registersymbol(NoDamageHealth) [DISABLE] NoDamageHealth: db D8 65 10 8D 4D C4 unregistersymbol(NoDamageHealth) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: Engine.CLiveEntity::ReceiveDamage+2F Engine.CLiveEntity::ReceiveDamage+11: 64 89 25 00 00 00 00 - mov fs:[00000000],esp Engine.CLiveEntity::ReceiveDamage+18: 83 EC 64 - sub esp,64 Engine.CLiveEntity::ReceiveDamage+1B: 56 - push esi Engine.CLiveEntity::ReceiveDamage+1C: 8B F1 - mov esi,ecx Engine.CLiveEntity::ReceiveDamage+1E: 85 F6 - test esi,esi Engine.CLiveEntity::ReceiveDamage+20: 89 75 F0 - mov [ebp-10],esi Engine.CLiveEntity::ReceiveDamage+23: 74 03 - je Engine.CLiveEntity::ReceiveDamage+28 Engine.CLiveEntity::ReceiveDamage+25: FF 46 18 - inc [esi+18] Engine.CLiveEntity::ReceiveDamage+28: 57 - push edi Engine.CLiveEntity::ReceiveDamage+29: D9 86 CC 00 00 00 - fld dword ptr [esi+000000CC] // ---------- INJECTING HERE ---------- Engine.CLiveEntity::ReceiveDamage+2F: D8 65 10 - fsub dword ptr [ebp+10] // ---------- DONE INJECTING ---------- Engine.CLiveEntity::ReceiveDamage+32: 8D 4D C4 - lea ecx,[ebp-3C] Engine.CLiveEntity::ReceiveDamage+35: C7 45 FC 00 00 00 00 - mov [ebp-04],00000000 Engine.CLiveEntity::ReceiveDamage+3C: D9 9E CC 00 00 00 - fstp dword ptr [esi+000000CC] Engine.CLiveEntity::ReceiveDamage+42: E8 D9 33 05 00 - call Engine.EDamage::EDamage Engine.CLiveEntity::ReceiveDamage+47: 8B 7D 08 - mov edi,[ebp+08] Engine.CLiveEntity::ReceiveDamage+4A: C6 45 FC 01 - mov byte ptr [ebp-04],01 Engine.CLiveEntity::ReceiveDamage+4E: 85 FF - test edi,edi Engine.CLiveEntity::ReceiveDamage+50: 74 03 - je Engine.CLiveEntity::ReceiveDamage+55 Engine.CLiveEntity::ReceiveDamage+52: FF 47 18 - inc [edi+18] Engine.CLiveEntity::ReceiveDamage+55: 8B 45 CC - mov eax,[ebp-34] } RevolverNoReload(OneHand): Револьвер в одной руке без перезарядки Спойлер { Game : SeriousSam.exe THE SECOND ENCOUNTER Version: Date : 2021-03-31 Author : Templar This script does blah blah blah } [ENABLE] aobscanmodule(RevolverNoReload,EntitiesMP.dll,4F 6A 00 8B CE) // should be unique registersymbol(RevolverNoReload) RevolverNoReload: db 90 6A 00 8B CE ///перетираем один байт на отнимание [DISABLE] RevolverNoReload: db 4F 6A 00 8B CE unregistersymbol(RevolverNoReload) { // ORIGINAL CODE - INJECTION POINT: EntitiesMP.CPlayerWeapons::FireColt+B1 EntitiesMP.CPlayerWeapons::FireColt+88: 68 70 C7 1C 08 - push EntitiesMP.CPlayerWeapons_DLLClass+2068 EntitiesMP.CPlayerWeapons::FireColt+8D: FF 15 14 B5 14 08 - call dword ptr [EntitiesMP.dll+17B514] EntitiesMP.CPlayerWeapons::FireColt+93: 83 C4 04 - add esp,04 EntitiesMP.CPlayerWeapons::FireColt+96: 8B CE - mov ecx,esi EntitiesMP.CPlayerWeapons::FireColt+98: E8 B3 5A FF FF - call EntitiesMP.CPlayerWeapons::DoRecoil EntitiesMP.CPlayerWeapons::FireColt+9D: 68 00 00 20 42 - push 42200000 EntitiesMP.CPlayerWeapons::FireColt+A2: 8B CE - mov ecx,esi EntitiesMP.CPlayerWeapons::FireColt+A4: E8 27 AE FF FF - call EntitiesMP.CPlayerWeapons::SpawnRangeSound EntitiesMP.CPlayerWeapons::FireColt+A9: 8B BE 14 03 00 00 - mov edi,[esi+00000314] EntitiesMP.CPlayerWeapons::FireColt+AF: 6A 02 - push 02 // ---------- INJECTING HERE ---------- EntitiesMP.CPlayerWeapons::FireColt+B1: 4F - dec edi // ---------- DONE INJECTING ---------- EntitiesMP.CPlayerWeapons::FireColt+B2: 6A 00 - push 00 EntitiesMP.CPlayerWeapons::FireColt+B4: 8B CE - mov ecx,esi EntitiesMP.CPlayerWeapons::FireColt+B6: 89 BE 14 03 00 00 - mov [esi+00000314],edi EntitiesMP.CPlayerWeapons::FireColt+BC: E8 AF 77 FF FF - call EntitiesMP.CPlayerWeapons::SetFlare EntitiesMP.CPlayerWeapons::FireColt+C1: 6A 00 - push 00 EntitiesMP.CPlayerWeapons::FireColt+C3: 6A 04 - push 04 EntitiesMP.CPlayerWeapons::FireColt+C5: 8B CE - mov ecx,esi EntitiesMP.CPlayerWeapons::FireColt+C7: E8 04 7A FF FF - call EntitiesMP.CPlayerWeapons::PlayLightAnim EntitiesMP.CPlayerWeapons::FireColt+CC: 8B 86 EC 00 00 00 - mov eax,[esi+000000EC] EntitiesMP.CPlayerWeapons::FireColt+D2: 6A 06 - push 06 } TwoHandRevolverNoReload: Револьвер в двух руках без перезарядки Спойлер { Game : SeriousSam.exe THE SECOND ENCOUNTER Version: Date : 2021-03-31 Author : Templar This script does blah blah blah } [ENABLE] aobscanmodule(TwoHandRevolverNoReload,EntitiesMP.dll,48 6A 00 8B CE) // should be unique registersymbol(TwoHandRevolverNoReload) TwoHandRevolverNoReload: db 90 6A 00 8B CE ///перетираем один байт на отнимание [DISABLE] TwoHandRevolverNoReload: db 48 6A 00 8B CE unregistersymbol(TwoHandRevolverNoReload) dealloc(newmem) { // ORIGINAL CODE - INJECTION POINT: EntitiesMP.CPlayerWeapons::FireDoubleColt+8F EntitiesMP.CPlayerWeapons::FireDoubleColt+66: 68 88 C7 FA 07 - push EntitiesMP.CPlayerWeapons_DLLClass+2080 EntitiesMP.CPlayerWeapons::FireDoubleColt+6B: FF 15 14 B5 F2 07 - call dword ptr [EntitiesMP.dll+17B514] EntitiesMP.CPlayerWeapons::FireDoubleColt+71: 83 C4 04 - add esp,04 EntitiesMP.CPlayerWeapons::FireDoubleColt+74: 8B CE - mov ecx,esi EntitiesMP.CPlayerWeapons::FireDoubleColt+76: E8 45 56 FF FF - call EntitiesMP.CPlayerWeapons::DoRecoil EntitiesMP.CPlayerWeapons::FireDoubleColt+7B: 68 00 00 48 42 - push 42480000 EntitiesMP.CPlayerWeapons::FireDoubleColt+80: 8B CE - mov ecx,esi EntitiesMP.CPlayerWeapons::FireDoubleColt+82: E8 B9 A9 FF FF - call EntitiesMP.CPlayerWeapons::SpawnRangeSound EntitiesMP.CPlayerWeapons::FireDoubleColt+87: 8B 86 14 03 00 00 - mov eax,[esi+00000314] EntitiesMP.CPlayerWeapons::FireDoubleColt+8D: 6A 02 - push 02 // ---------- INJECTING HERE ---------- EntitiesMP.CPlayerWeapons::FireDoubleColt+8F: 48 - dec eax // ---------- DONE INJECTING ---------- EntitiesMP.CPlayerWeapons::FireDoubleColt+90: 6A 00 - push 00 EntitiesMP.CPlayerWeapons::FireDoubleColt+92: 8B CE - mov ecx,esi EntitiesMP.CPlayerWeapons::FireDoubleColt+94: 89 86 14 03 00 00 - mov [esi+00000314],eax EntitiesMP.CPlayerWeapons::FireDoubleColt+9A: E8 41 73 FF FF - call EntitiesMP.CPlayerWeapons::SetFlare EntitiesMP.CPlayerWeapons::FireDoubleColt+9F: 6A 00 - push 00 EntitiesMP.CPlayerWeapons::FireDoubleColt+A1: 6A 04 - push 04 EntitiesMP.CPlayerWeapons::FireDoubleColt+A3: 8B CE - mov ecx,esi EntitiesMP.CPlayerWeapons::FireDoubleColt+A5: E8 96 75 FF FF - call EntitiesMP.CPlayerWeapons::PlayLightAnim EntitiesMP.CPlayerWeapons::FireDoubleColt+AA: 8B 86 EC 00 00 00 - mov eax,[esi+000000EC] EntitiesMP.CPlayerWeapons::FireDoubleColt+B0: 6A 06 - push 06 } AmmoNoSub: Патроны не тратятся Спойлер { Game : SeriousSam.exe THE SECOND ENCOUNTER Version: Date : 2021-03-31 Author : Templar This script does blah blah blah } [ENABLE] aobscanmodule(AmmoNoSub,EntitiesMP.dll,29 08 5D C3 90) // should be unique registersymbol(AmmoNoSub) AmmoNoSub: db 90 90 5D C3 90 ///перетираем два байта на отнимание [DISABLE] AmmoNoSub: db 29 08 5D C3 90 unregistersymbol(AmmoNoSub) { // ORIGINAL CODE - INJECTION POINT: EntitiesMP.EWeaponChanged::EWeaponChanged+177D EntitiesMP.EWeaponChanged::EWeaponChanged+1760: 55 - push ebp EntitiesMP.EWeaponChanged::EWeaponChanged+1761: 8B EC - mov ebp,esp EntitiesMP.EWeaponChanged::EWeaponChanged+1763: A1 FC B2 14 08 - mov eax,[EntitiesMP.dll+17B2FC] EntitiesMP.EWeaponChanged::EWeaponChanged+1768: 8B 08 - mov ecx,[eax] EntitiesMP.EWeaponChanged::EWeaponChanged+176A: FF 15 F8 B2 14 08 - call dword ptr [EntitiesMP.dll+17B2F8] EntitiesMP.EWeaponChanged::EWeaponChanged+1770: 8B 48 54 - mov ecx,[eax+54] EntitiesMP.EWeaponChanged::EWeaponChanged+1773: 85 C9 - test ecx,ecx EntitiesMP.EWeaponChanged::EWeaponChanged+1775: 75 08 - jne EntitiesMP.EWeaponChanged::EWeaponChanged+177F EntitiesMP.EWeaponChanged::EWeaponChanged+1777: 8B 45 08 - mov eax,[ebp+08] EntitiesMP.EWeaponChanged::EWeaponChanged+177A: 8B 4D 0C - mov ecx,[ebp+0C] // ---------- INJECTING HERE ---------- EntitiesMP.EWeaponChanged::EWeaponChanged+177D: 29 08 - sub [eax],ecx // ---------- DONE INJECTING ---------- EntitiesMP.EWeaponChanged::EWeaponChanged+177F: 5D - pop ebp EntitiesMP.EWeaponChanged::EWeaponChanged+1780: C3 - ret EntitiesMP.EWeaponChanged::EWeaponChanged+1781: 90 - nop EntitiesMP.EWeaponChanged::EWeaponChanged+1782: 90 - nop EntitiesMP.EWeaponChanged::EWeaponChanged+1783: 90 - nop EntitiesMP.EWeaponChanged::EWeaponChanged+1784: 90 - nop EntitiesMP.EWeaponChanged::EWeaponChanged+1785: 90 - nop EntitiesMP.EWeaponChanged::EWeaponChanged+1786: 90 - nop EntitiesMP.EWeaponChanged::EWeaponChanged+1787: 90 - nop EntitiesMP.EWeaponChanged::EWeaponChanged+1788: 90 - nop } 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
LIRW Опубликовано 31 марта, 2021 Поделиться Опубликовано 31 марта, 2021 1 час назад, Tzeentch сказал: db 90 6A 00 8B CE ///перетираем один байт на отнимание А что не так к примеру db 90 61 00 8B CE 89 BE 14 03 00 00 E8 AF 77 FF FF 6A 00 6A 04 8B CE E8 04 74 FF FF 8B 86 EC 00 00 00 // < перетираем 1 байт Это я к тому, что перетираем то один, а тащим с собой все 5 зачем то. Тогда уж и надо было. db 90 С другой стороны работать будет и в твоём случаи и в моём (менее универсальном) но зато всё лишнее, не понятно... Наверное как СЕ сгенерировало на 5 байт, так и оставил. Ссылка на комментарий Поделиться на другие сайты Поделиться
Tzeentch Опубликовано 31 марта, 2021 Автор Поделиться Опубликовано 31 марта, 2021 3 минуты назад, LIRW сказал: С другой стороны работать будет и в твоём случаи и в моём (менее универсальном) но зато всё лишнее, не понятно... Наверное как СЕ сгенерировало на 5 байт, так и оставил. Мне так удобнее оказалось оформить. В моём случае тоже работает. Я в редакторе памяти смотрел, вроде всё нормально было. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти