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

Три простых вопроса по Lua скриптам


Razi

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

5 минут назад, Razi сказал:

Буду пробовать пока твой последний написанный скрипт. Скажу позже как работает.

Скорее всего не сработает, ты на строчку обратил внимание внизу скрипта:

17 час назад, Garik66 сказал:

И ещё кое-чего не хватает в скрипте. Нужно дать понять компьютеру, что при [00A3F3E5]  = 2, значение value больше не нужно читать, а только записывать. 

 

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

Вот нашёл скрипт на ассемблер для 4 конкретных значений и переделал его на более универсальный, добавив метку value и flag.

Проверь работу скрипта.

Скрытый текст

{ Game   : ePSXe ENG.exe
  Version:
  Date   : 2016-02-01
  Author : User

  This script does blah blah blah
}

[ENABLE]
aobscan(INJECT,89 1C 08 81 E2 FC FF 1F 00) // should be unique
alloc(newmem,$1000)
label(code)
label(code1)
label(return)
label(value)
label(flag)
registersymbol(INJECT)

newmem:
  cmp byte ptr [00A3F3E5],2
  jne @f
  push edx
  lea edx,[eax+ecx]
  cmp edx,00A444E8
  pop edx
  jne code
  cmp [flag],1
  jne code1
  mov [flag],0
  mov [value],ebx
  jmp code1

@@:
  mov [flag],1
  jmp code

code1:
  mov ebx,[value]

code:
  mov [eax+ecx],ebx
  and edx,001FFFFC
  jmp return

flag:
dd 1
value:
dd 0

INJECT:
  jmp newmem
  nop
  nop
  nop
  nop
return:

[DISABLE]
INJECT:
  db 89 1C 08 81 E2 FC FF 1F 00

unregistersymbol(INJECT)
dealloc(newmem)

{
// ORIGINAL CODE - INJECTION POINT: 03050434

0305040B: 81 FA 00 00 80 1F     -  cmp edx,1F800000
03050411: 74 62                 -  je 03050475
03050413: 8B 0D 84 0A 51 00     -  mov ecx,["ePSXe ENG.exe"+110A84]
03050419: F7 C1 00 00 01 00     -  test ecx,10000
0305041F: 75 53                 -  jne 03050474
03050421: 8B C8                 -  mov ecx,eax
03050423: 89 C2                 -  mov edx,eax
03050425: C1 E9 10              -  shr ecx,10
03050428: 25 FF FF 00 00        -  and eax,0000FFFF
0305042D: 8B 0C 8D 40 AF 82 00  -  mov ecx,[ecx*4+"ePSXe ENG.exe"+42AF40]
// ---------- INJECTING HERE ----------
03050434: 89 1C 08              -  mov [eax+ecx],ebx
03050437: 81 E2 FC FF 1F 00     -  and edx,001FFFFC
// ---------- DONE INJECTING  ----------
0305043D: BB 20 00 26 03        -  mov ebx,03260020
03050442: 03 DA                 -  add ebx,edx
03050444: 8B 03                 -  mov eax,[ebx]
03050446: 3D 40 00 05 03        -  cmp eax,03050040
0305044B: 75 01                 -  jne 0305044E
0305044D: C3                    -  ret
0305044E: B8 40 00 05 03        -  mov eax,03050040
03050453: 8B 0C 10              -  mov ecx,[eax+edx]
03050456: B8 20 00 4F 03        -  mov eax,034F0020
0305045B: 8B 04 10              -  mov eax,[eax+edx]
}

 

 

Вот его и нужно переделать на LUA (я синтаксиса LUA не знаю, приходится постоянно лазить в справочник и в примеры). В этом скрипте заморозятся не только 4 значению (вдруг ты не все их заметил), а и больше  и меньше, т.е. все значения, которые проскакивают через адрес 00A444E8, при значении в первом адресе 00A3F3E5 2. 

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

1 час назад, Garik66 сказал:

на строчку обратил внимание внизу скрипта

Видел, конечно. Попробовал пару вариантов, но не получилось. Делал вот так.

Скрытый текст

[ENABLE]
{$LUA}
timer = createTimer(true)
timer:setInterval(100)
timer.OnTimer = function()
FreezingConditions = readBytes('00A3F3E5',1)
if (FreezingConditions == 2) then
value = readInteger('00A444E8')
else
if (FreezingConditions == 2) then
value = writeInteger('00A444E8')
writeInteger('00A444E8',value)
end
end
end
{$ASM}

[DISABLE]
{$LUA}
timer:setEnabled(false)

 

 

1 час назад, Garik66 сказал:

приходится постоянно лазить в справочник

Справочник это main.lua ?

АА скрипт сейчас проверю.

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

АА скрипт проверил. Замораживает слишком рано, то есть когда в первом адресе становится 2, то во втором адресе еще не успевает стать 72 и замораживает неверное значение. Также и в том твоем скрипте на четыре значения сначало было.

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

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

Замораживает слишком рано

Ну тогда остаётся либо добавлять паузу (но это удлинит скрипт - оно того не стоит), либо возвращаться к старому варианту скрипта (к конкретным значениям, т.е. к 72, 8 и т.д).  

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

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

остаётся либо добавлять паузу

Посмотрел, и по идее пауза даже не поможет потому что, даже когда значение 72, то при изменении значения на другое число, меняется только на ноль.

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

В 14.02.2016в03:51, Razi сказал:

3) Как в нижеприведенный скрипт еще добавить , что если другой адрес 00A444E8 равен значению 88, то изменять значение в этом адресе на 72. И если этот же адрес 00A444E8 равен значению 24, то изменять значение в этом адресе на 8 ? (адреса по 1 байту, кроме 00A9D874 - 4 байта)

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

Скрытый текст

[ENABLE]
{$LUA}
PlaySound(findTableFile([[Activate]]))
timer = createTimer(true)
timer:setInterval(100)
timer.OnTimer = function()
value = readInteger('00A9D874')
value1 = readInteger(' 00A444E8 ')
if (value == 600000) then
writeInteger('00A9D874',10000)
end
if (value1 == 88) then
writeInteger('00A444E8',72)
end
if (value1 == 24) then
writeInteger('00A444E8',8)
end
end
[DISABLE]
{$LUA}
PlaySound(findTableFile([[Deactivate]]))
timer:setEnabled(false)

 

 

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

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

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

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