Перейти к содержанию

[Borderlands 2] Новый уровень с каждым убийством


Рекомендуемые сообщения

Я нашел инструкцию которая добавляет опыт при убийстве.Потом я нашел адрес который отвечает за максимальный опыт до следующего уровня.Проблема в том что максимальный опыт он 4 bytes а текущий опыт он типа float.Как из  4 bytes перевести во float при этом не меняя само значение.

Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, mumut сказал:

Как из  4 bytes перевести во float при этом не меняя само значение.

Зависит от твоей инструкции, можно и так

fild[Max_Exp_Level]
fadd[Exp]
fstp[Exp]

 

Ссылка на комментарий
Поделиться на другие сайты

40 минут назад, mumut сказал:

.Как из  4 bytes перевести во float при этом не меняя само значение.

кинь АА-скрипт из своей инструкции.

Ссылка на комментарий
Поделиться на другие сайты

подожди 5 минут

Что то типо этого

Спойлер

{ Game   : Borderlands2.exe
  Version: 
  Date   : 2019-01-31
  Author : ?????

  This script does blah blah blah
}

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat

 
 
aobscanmodule(INJECT,Borderlands2.exe,F3 0F 10 45 10 83 C4 0C 8B) // should be unique
alloc(newmem,$1000)

label(code)
label(return)

newmem:
  push eax
  mov eax,[ebp+16623E58]
  mov [ebp+10],eax
code:
  movss xmm0,[ebp+10]
  jmp return

INJECT:
  jmp newmem
return:
registersymbol(INJECT)

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
INJECT:
  db F3 0F 10 45 10

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "Borderlands2.exe"+ADD77B

"Borderlands2.exe"+ADD75F: 74 22                    -  je Borderlands2.exe+ADD783
"Borderlands2.exe"+ADD761: 8B 55 0C                 -  mov edx,[ebp+0C]
"Borderlands2.exe"+ADD764: F3 0F 5C C1              -  subss xmm0,xmm1
"Borderlands2.exe"+ADD768: 0F 57 C9                 -  xorps xmm1,xmm1
"Borderlands2.exe"+ADD76B: F3 0F 10 C8              -  movss xmm1,xmm0
"Borderlands2.exe"+ADD76F: F3 0F 2C C9              -  cvttss2si ecx,xmm1
"Borderlands2.exe"+ADD773: 51                       -  push ecx
"Borderlands2.exe"+ADD774: 52                       -  push edx
"Borderlands2.exe"+ADD775: 56                       -  push esi
"Borderlands2.exe"+ADD776: E8 95 1B 3B 00           -  call Borderlands2.exe+E8F310
// ---------- INJECTING HERE ----------
"Borderlands2.exe"+ADD77B: F3 0F 10 45 10           -  movss xmm0,[ebp+10]
// ---------- DONE INJECTING  ----------
"Borderlands2.exe"+ADD780: 83 C4 0C                 -  add esp,0C
"Borderlands2.exe"+ADD783: 8B CF                    -  mov ecx,edi
"Borderlands2.exe"+ADD785: F3 0F 11 47 6C           -  movss [edi+6C],xmm0
"Borderlands2.exe"+ADD78A: E8 01 A3 C5 FF           -  call Borderlands2.exe+737A90
"Borderlands2.exe"+ADD78F: 5F                       -  pop edi
"Borderlands2.exe"+ADD790: 5E                       -  pop esi
"Borderlands2.exe"+ADD791: 8B E5                    -  mov esp,ebp
"Borderlands2.exe"+ADD793: 5D                       -  pop ebp
"Borderlands2.exe"+ADD794: C2 0C 00                 -  ret 000C
"Borderlands2.exe"+ADD797: CC                       -  int 3 
}

 

 

забыл написать "pop eax"

Ссылка на комментарий
Поделиться на другие сайты

1. я убил монстра. но чёй-то не то с твоей инструкцией. Скорее всего ты что-то не то нашел.

2. На этой инструкции проскакивает несколько значений

3.  откуда такое смещение ebp+16623E58 и как ты его сумел получить?

4. твой скрипт неправильный.

 

На выходных посмотрю, как устроен опыт в этой игре.

 

Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, Garik66 сказал:

3.  откуда такое смещение ebp+16623E58 и как ты его сумел получить?

1. https://prnt.sc/meva0y

2. https://prnt.sc/mevb8n

Я узнал адрес ebp.И просто адрес максимальный левел до следующего уровня уменьшал с адресом ebp и так я получал это смещение.

Ссылка на комментарий
Поделиться на другие сайты

В 31.01.2019 в 19:50, mumut сказал:

1. https://prnt.sc/meva0y

2. https://prnt.sc/mevb8n

Я узнал адрес ebp.И просто адрес максимальный левел до следующего уровня уменьшал с адресом ebp и так я получал это смещение.

Есть инструкции, которые постоянно/после каждого убийства читают с адреса, в котором лежит количество опыта для следующего уровня?

Изменено пользователем Sanic
Ссылка на комментарий
Поделиться на другие сайты

В 31.01.2019 в 20:50, mumut сказал:

Я узнал адрес

скрипт "Lavel UP"

Спойлер

{ Game   : Borderlands2.exe
  Version: 
  Date   : 2019-02-02
  Author : Garik66

  This script does blah blah blah
}

[ENABLE]
aobscanmodule(Exp,Borderlands2.exe,F3 0F 10 4F 6C 0F 5B) // should be unique
alloc(newmem,$1000)
label(code)
label(return)
label(Lavel_UP)
registersymbol(Lavel_UP)
registersymbol(Exp)

newmem:
  cmp [Lavel_UP],1
  jne code
  mov [Lavel_UP],0
  cvtdq2ps xmm0,xmm0
  movss [edi+6C],xmm0

code:
  movss xmm1,[edi+6C]
  jmp return

Lavel_UP:
  dd 0

Exp:
  jmp newmem
return:

[DISABLE]
Exp:
  db F3 0F 10 4F 6C

unregistersymbol(Lavel_UP)
unregistersymbol(Exp)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "Borderlands2.exe"+9CEC87

"Borderlands2.exe"+9CEC5F: 0F 84 E9 00 00 00              -  je Borderlands2.exe+9CED4E
"Borderlands2.exe"+9CEC65: 8B 86 94 01 00 00              -  mov eax,[esi+00000194]
"Borderlands2.exe"+9CEC6B: 53                             -  push ebx
"Borderlands2.exe"+9CEC6C: 50                             -  push eax
"Borderlands2.exe"+9CEC6D: E8 BE 87 6A FF                 -  call Borderlands2.exe+77430
"Borderlands2.exe"+9CEC72: 8B D8                          -  mov ebx,eax
"Borderlands2.exe"+9CEC74: 83 C4 04                       -  add esp,04
"Borderlands2.exe"+9CEC77: 85 DB                          -  test ebx,ebx
"Borderlands2.exe"+9CEC79: 0F 84 CE 00 00 00              -  je Borderlands2.exe+9CED4D
"Borderlands2.exe"+9CEC7F: 66 0F 6E 83 5C 02 00 00        -  movd xmm0,[ebx+0000025C]
// ---------- INJECTING HERE ----------
"Borderlands2.exe"+9CEC87: F3 0F 10 4F 6C                 -  movss xmm1,[edi+6C]
// ---------- DONE INJECTING  ----------
"Borderlands2.exe"+9CEC8C: 0F 5B C0                       -  cvtdq2ps xmm0,xmm0
"Borderlands2.exe"+9CEC8F: 0F 2F C8                       -  comiss xmm1,xmm0
"Borderlands2.exe"+9CEC92: C7 45 F8 00 00 00 00           -  mov [ebp-08],00000000
"Borderlands2.exe"+9CEC99: 0F 82 9D 00 00 00              -  jb Borderlands2.exe+9CED3C
"Borderlands2.exe"+9CEC9F: 90                             -  nop 
"Borderlands2.exe"+9CECA0: 83 BB 5C 02 00 00 00           -  cmp dword ptr [ebx+0000025C],00
"Borderlands2.exe"+9CECA7: 7E 70                          -  jle Borderlands2.exe+9CED19
"Borderlands2.exe"+9CECA9: 8B CE                          -  mov ecx,esi
"Borderlands2.exe"+9CECAB: E8 F0 19 49 00                 -  call Borderlands2.exe+E606A0
"Borderlands2.exe"+9CECB0: 39 83 58 02 00 00              -  cmp [ebx+00000258],eax
}

 

видео:

Табличка:

Borderlands2.CT

  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

Ситуация такова сижу пишу скрипт на "Новый уровень при каждом убийстве" и когда все сделал включил скрипт и тут у меня вылетело.С горем по полам я все же сделал так что бы у меня не вылетало но у меня образовалась вторая проблема.У меня просто не прибавляется левел. Потом я выяснил что в место адреса с максимальным опытом до следующего уровня и текущего у меня лежали другие адреса.Пожалуйста укажите где я накосячил.

Вот код:

Спойлер

{ Game   : Borderlands2.exe
  Version: 
  Date   : 2019-02-04
  Author : mumut

  This script does blah blah blah
}

[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat

 
 
aobscanmodule(New_level_with_every_kill,Borderlands2.exe,F3 0F 11 00 5D C2 08 00 CC CC 55) // should be unique
aobscanmodule(Address,Borderlands2.exe,F3 0F 10 4F 6C 0F 5B)
alloc(newmem,$1000)
label(newmem2)
label(code)
label(code2)
label(return)
label(return2)
label(LeveL)
label(MaX_LeveL)
registersymbol(New_level_with_every_kill)
registersymbol(Address)

newmem:
//================================
  cmp [eax+70],(float)1
  jne code
  cmp [eax+D0],AB4992D5
  jne code
  cmp [eax+210],AB4992D5
  jne code
  cmp [eax+350],AB4992D5
  jne code                        //идет проверка враг ли это
  cmp [eax+490],AB4992D5
  jne code
  cmp [eax+5C8],AB4992D5
  jne code
  cmp [eax+710],AB4992D5
  jne code
//================================
  cmp [eax],(float)0              //у врага 0 хп ?
  jne code                        //Если нет то прыгаем в код
//================================
  movss xmm0,[MaX_LeveL+25C]      //Если да то в xmm0 ложится значение максимального левела
  cvtdq2ps xmm0,xmm0              //Превращает из 4 bytes в float
  movss [LeveL+6C],xmm0           //И ложится в значение текущего опыта
code:
  movss [eax],xmm0
  pop ebp
  jmp return

newmem2:
  mov [MaX_LeveL],ebx             //В ebx находится начало структуры с максимальным левелом
  mov [LeveL],edi                 //В edi находится начало структуры с текущим левелом
code2:
  movss xmm1,[edi+6C]
  jmp return2

LeveL:
  dd 0
MaX_LeveL:
  dd 0

New_level_with_every_kill:
  jmp newmem
return:

Address:
  jmp newmem2
return2:

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
New_level_with_every_kill:
  db F3 0F 11 00 5D
Address:
  db F3 0F 10 4F 6C

unregistersymbol(New_level_with_every_kill)
unregistersymbol(Address)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: "Borderlands2.exe"+245476

"Borderlands2.exe"+24545E: CC                       -  int 3 
"Borderlands2.exe"+24545F: CC                       -  int 3 
"Borderlands2.exe"+245460: 55                       -  push ebp
"Borderlands2.exe"+245461: 8B EC                    -  mov ebp,esp
"Borderlands2.exe"+245463: 8B 4D 08                 -  mov ecx,[ebp+08]
"Borderlands2.exe"+245466: 8B 41 18                 -  mov eax,[ecx+18]
"Borderlands2.exe"+245469: F3 0F 10 00              -  movss xmm0,[eax]
"Borderlands2.exe"+24546D: 83 C0 04                 -  add eax,04
"Borderlands2.exe"+245470: 89 41 18                 -  mov [ecx+18],eax
"Borderlands2.exe"+245473: 8B 45 0C                 -  mov eax,[ebp+0C]
// ---------- INJECTING HERE ----------
"Borderlands2.exe"+245476: F3 0F 11 00              -  movss [eax],xmm0
"Borderlands2.exe"+24547A: 5D                       -  pop ebp
// ---------- DONE INJECTING  ----------
"Borderlands2.exe"+24547B: C2 08 00                 -  ret 0008
"Borderlands2.exe"+24547E: CC                       -  int 3 
"Borderlands2.exe"+24547F: CC                       -  int 3 
"Borderlands2.exe"+245480: 55                       -  push ebp
"Borderlands2.exe"+245481: 8B EC                    -  mov ebp,esp
"Borderlands2.exe"+245483: 8B 45 08                 -  mov eax,[ebp+08]
"Borderlands2.exe"+245486: 8B 50 18                 -  mov edx,[eax+18]
"Borderlands2.exe"+245489: 56                       -  push esi
"Borderlands2.exe"+24548A: 8B F1                    -  mov esi,ecx
"Borderlands2.exe"+24548C: 8A 0A                    -  mov cl,[edx]
}
{
// ORIGINAL CODE - INJECTION POINT: "Borderlands2.exe"+9CEC87

"Borderlands2.exe"+9CEC5F: 0F 84 E9 00 00 00              -  je Borderlands2.exe+9CED4E
"Borderlands2.exe"+9CEC65: 8B 86 94 01 00 00              -  mov eax,[esi+00000194]
"Borderlands2.exe"+9CEC6B: 53                             -  push ebx
"Borderlands2.exe"+9CEC6C: 50                             -  push eax
"Borderlands2.exe"+9CEC6D: E8 BE 87 6A FF                 -  call Borderlands2.exe+77430
"Borderlands2.exe"+9CEC72: 8B D8                          -  mov ebx,eax
"Borderlands2.exe"+9CEC74: 83 C4 04                       -  add esp,04
"Borderlands2.exe"+9CEC77: 85 DB                          -  test ebx,ebx
"Borderlands2.exe"+9CEC79: 0F 84 CE 00 00 00              -  je Borderlands2.exe+9CED4D
"Borderlands2.exe"+9CEC7F: 66 0F 6E 83 5C 02 00 00        -  movd xmm0,[ebx+0000025C]  Это инструкция работает только с адресо максимального левела
// ---------- INJECTING HERE ----------
"Borderlands2.exe"+9CEC87: F3 0F 10 4F 6C                 -  movss xmm1,[edi+6C] Это инструкция работает только с адресо текущиго левела
// ---------- DONE INJECTING  ----------
"Borderlands2.exe"+9CEC8C: 0F 5B C0                       -  cvtdq2ps xmm0,xmm0
"Borderlands2.exe"+9CEC8F: 0F 2F C8                       -  comiss xmm1,xmm0
"Borderlands2.exe"+9CEC92: C7 45 F8 00 00 00 00           -  mov [ebp-08],00000000
"Borderlands2.exe"+9CEC99: 0F 82 9D 00 00 00              -  jb Borderlands2.exe+9CED3C
"Borderlands2.exe"+9CEC9F: 90                             -  nop 
"Borderlands2.exe"+9CECA0: 83 BB 5C 02 00 00 00           -  cmp dword ptr [ebx+0000025C],00
"Borderlands2.exe"+9CECA7: 7E 70                          -  jle Borderlands2.exe+9CED19
"Borderlands2.exe"+9CECA9: 8B CE                          -  mov ecx,esi
"Borderlands2.exe"+9CECAB: E8 F0 19 49 00                 -  call Borderlands2.exe+E606A0
"Borderlands2.exe"+9CECB0: 39 83 58 02 00 00              -  cmp [ebx+00000258],eax
}

 

 

Изменено пользователем mumut
Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, mumut сказал:

Пожалуйста укажите где я накосячил.

А чем не устроил мой скрипт?

Смогу посмотреть только в среду. (если кто-нибудь раньше не поможет.)

Ссылка на комментарий
Поделиться на другие сайты

Вот скрипт и видео, 2 инструкции, при убийстве врага записывается значение очков для уровня *забавно получилось - игра показывает кучу опыта при победе над врагом, будто так и должно быть)

Действует только если за врага дают опыт, после достижения определённого уровня за слабых врагов больше не дают, за сильных дают.


Скрипт:

 

Спойлер

[ENABLE]
aobscanmodule(Finder,Borderlands2.exe,66 0F 6E 83 5C 02 00 00 F3 0F 10 4F)
alloc(newmem,$100)

label(code)
label(return)
label(needCount)
registersymbol(needCount)

newmem:
fild dword [ebx+0000025C]
fstp dword [needCount]

code:
  movd xmm0,[ebx+0000025C]
  jmp return

needCount:
db 0

Finder:
  jmp newmem
  nop
  nop
  nop
return:
registersymbol(Finder)

aobscanmodule(LevelUp,Borderlands2.exe,F3 0F 11 47 6C E8)
alloc(newmem2,$100)

label(code2)
label(return2)

newmem2:
movss [edi+6C],xmm0
fld dword [needCount]
fstp dword [edi+6C]

code2:
  jmp return2

LevelUp:
  jmp newmem2
return2:
registersymbol(LevelUp)

[DISABLE]
Finder:
  db 66 0F 6E 83 5C 02 00 00

unregistersymbol(needCount)
unregistersymbol(Finder)
dealloc(newmem)

LevelUp:
  db F3 0F 11 47 6C

unregistersymbol(LevelUp)
dealloc(newmem2)

 

 

Видео:

 

Спойлер

 

 

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

7 часов назад, mumut сказал:

Твой скрипт работает при нажатии.А же хочу сделать при убийстве.

:DЧтобы убить, нужно больше нажатий сделать.

А тут сразу, независимо - Халява.:P

Ссылка на комментарий
Поделиться на другие сайты

16 часов назад, inaginary сказал:

Действует только если за врага дают опыт, после достижения определённого уровня за слабых врагов больше не дают, за сильных дают.

У меня тоже есть скрипт "Новый уровень при получении опыта".

Ссылка на комментарий
Поделиться на другие сайты

23 часа назад, inaginary сказал:

Действует только если за врага дают опыт, после достижения определённого уровня за слабых врагов больше не дают, за сильных дают.

Тыды выход, либо юзать мой скрипт. который не зависит от врага.

Либо привязывать флаг на мой скрипт, к скрипту на жизни врагов. (ну думаю ты понял, что нужно сделать. 

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.