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

Как передать значение из указателя в CEEdit?


Iniar

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

Добрый день. Подскажите пожалуйста, как передать значение из скрипта автоассемблера в поле CEEdit? Есть вот такая функция на кнопку. Идея в том, чтоб передать в поле CEEdit1 значение указателя [predm]+0, чтоб в тренере отображалось число предмета который я выбрал в игре.  Строка формата - control_setCaption(CETrainer.CEEdit1, [predm]+0) выдаёт ошибку, что "[" нельзя использовать. Как передать значение указателя и скрипта автоассемблера в CEEdit?

Спойлер

function CEButton1Click(sender)
if (gButtonOnPredm) then
gButtonOnPredm=false
--CETrainer.CEButton1.Caption = "Стоп"--
control_setCaption(CETrainer.CEButton1, "Выключить")
control_setEnabled(CETrainer.CHEATPANEL,true)
a=('[predm]+0')
autoAssemble([[
               aobscan(predmet,48 63 80 48 01 00 00 4C 89 85 C8 F3 FF FF 89 95 60 F3 FF FF 89 8D 58 F3 FF FF 89 85 50 F3 FF FF EB 3C 4C 8B 85 C8 F3 FF FF 48 63 95 60 F3 FF FF 48 63 8D 58 F3 FF FF 48 8B 85 90 F2 FF FF 48 63 80 E4 02 00 00 4C 89 85 C8 F3 FF FF 89 95 60 F3 FF FF 89 8D 58 F3 FF FF 89 85 50 F3 FF FF 48 8B 8D C8 F3 FF FF 48 63 95 60 F3 FF FF 4C 63 85 58 F3 FF FF 4C 63 8D 50 F3 FF FF 66 90) // should be unique
               alloc(newmem,$1000,692A44B2)

               label(code)
               label(return)
               label(predm)
               registersymbol(predm)
               registersymbol(predmet)

               newmem:
                      lea rax,dword ptr [rax+00000148]
                      //movsxd  rax,dword ptr [rax+00000148]
                      mov [predm],rax
                      xor rax,rax
                      jmp return

               predm:
                     db 0

               code:
                    //movsxd  rax,dword ptr [rax+00000148]
                    //jmp return

               predmet:
                       jmp newmem
                       nop
                       nop
               return:
]])
control_setCaption(CETrainer.CELabel1, "Вкл")
control_setCaption(CETrainer.CEEdit1, a)
else
gButtonOnPredm=true
--if CETrainer.CELabel1.Caprion == "Вкл" then--
--CETrainer.CEButton1.Caption = "Активный"--
control_setEnabled(CETrainer.CHEATPANEL,false)
control_setCaption(CETrainer.CEButton1, "Включить")

autoAssemble([[
               predmet:
                       db 48 63 80 48 01 00 00
                       unregistersymbol(predm)
                       unregistersymbol(predmet)
                       dealloc(newmem)
]])
control_setCaption(CETrainer.CELabel1, "Откл")
end
end

 

 

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

21 час назад, Iniar сказал:

Добрый день. Подскажите пожалуйста, как передать значение из скрипта автоассемблера в поле CEEdit? Есть вот такая функция на кнопку. Идея в том, чтоб передать в поле CEEdit1 значение указателя [predm]+0, чтоб в тренере отображалось число предмета который я выбрал в игре.  Строка формата - control_setCaption(CETrainer.CEEdit1, [predm]+0) выдаёт ошибку, что "[" нельзя использовать. Как передать значение указателя и скрипта автоассемблера в CEEdit?

  Показать контент


function CEButton1Click(sender)
if (gButtonOnPredm) then
gButtonOnPredm=false
--CETrainer.CEButton1.Caption = "Стоп"--
control_setCaption(CETrainer.CEButton1, "Выключить")
control_setEnabled(CETrainer.CHEATPANEL,true)
a=('[predm]+0')
autoAssemble([[
               aobscan(predmet,48 63 80 48 01 00 00 4C 89 85 C8 F3 FF FF 89 95 60 F3 FF FF 89 8D 58 F3 FF FF 89 85 50 F3 FF FF EB 3C 4C 8B 85 C8 F3 FF FF 48 63 95 60 F3 FF FF 48 63 8D 58 F3 FF FF 48 8B 85 90 F2 FF FF 48 63 80 E4 02 00 00 4C 89 85 C8 F3 FF FF 89 95 60 F3 FF FF 89 8D 58 F3 FF FF 89 85 50 F3 FF FF 48 8B 8D C8 F3 FF FF 48 63 95 60 F3 FF FF 4C 63 85 58 F3 FF FF 4C 63 8D 50 F3 FF FF 66 90) // should be unique
               alloc(newmem,$1000,692A44B2)

               label(code)
               label(return)
               label(predm)
               registersymbol(predm)
               registersymbol(predmet)

               newmem:
                      lea rax,dword ptr [rax+00000148]
                      //movsxd  rax,dword ptr [rax+00000148]
                      mov [predm],rax
                      xor rax,rax
                      jmp return

               predm:
                     db 0

               code:
                    //movsxd  rax,dword ptr [rax+00000148]
                    //jmp return

               predmet:
                       jmp newmem
                       nop
                       nop
               return:
]])
control_setCaption(CETrainer.CELabel1, "Вкл")
control_setCaption(CETrainer.CEEdit1, a)
else
gButtonOnPredm=true
--if CETrainer.CELabel1.Caprion == "Вкл" then--
--CETrainer.CEButton1.Caption = "Активный"--
control_setEnabled(CETrainer.CHEATPANEL,false)
control_setCaption(CETrainer.CEButton1, "Включить")

autoAssemble([[
               predmet:
                       db 48 63 80 48 01 00 00
                       unregistersymbol(predm)
                       unregistersymbol(predmet)
                       dealloc(newmem)
]])
control_setCaption(CETrainer.CELabel1, "Откл")
end
end

 

 

Решение нашёл сам. Вопрос снят.

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

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

Решение нашёл сам. Вопрос снят.

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

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

Вот предыдущая функция, из неё убраны 

a=('[predm]+0')

и

control_setCaption(CETrainer.CEEdit1, a)

:

Спойлер

function CEButton1Click(sender)
if (gButtonOnPredm) then
gButtonOnPredm=false
--CETrainer.CEButton1.Caption = "Стоп"--
control_setCaption(CETrainer.CEButton1, "Выключить")
control_setEnabled(CETrainer.CHEATPANEL,true)

autoAssemble([[
               aobscan(predmet,48 63 80 48 01 00 00 4C 89 85 C8 F3 FF FF 89 95 60 F3 FF FF 89 8D 58 F3 FF FF 89 85 50 F3 FF FF EB 3C 4C 8B 85 C8 F3 FF FF 48 63 95 60 F3 FF FF 48 63 8D 58 F3 FF FF 48 8B 85 90 F2 FF FF 48 63 80 E4 02 00 00 4C 89 85 C8 F3 FF FF 89 95 60 F3 FF FF 89 8D 58 F3 FF FF 89 85 50 F3 FF FF 48 8B 8D C8 F3 FF FF 48 63 95 60 F3 FF FF 4C 63 85 58 F3 FF FF 4C 63 8D 50 F3 FF FF 66 90) // should be unique
               alloc(newmem,$1000,692A44B2)

               label(code)
               label(return)
               label(predm)
               registersymbol(predm)
               registersymbol(predmet)

               newmem:
                      lea rax,dword ptr [rax+00000148]
                      //movsxd  rax,dword ptr [rax+00000148]
                      mov [predm],rax
                      xor rax,rax
                      jmp return

               predm:
                     db 0

               code:
                    //movsxd  rax,dword ptr [rax+00000148]
                    //jmp return

               predmet:
                       jmp newmem
                       nop
                       nop
               return:
]])
control_setCaption(CETrainer.CELabel1, "Вкл")
else
gButtonOnPredm=true
--if CETrainer.CELabel1.Caprion == "Вкл" then--
--CETrainer.CEButton1.Caption = "Активный"--
control_setEnabled(CETrainer.CHEATPANEL,false)
control_setCaption(CETrainer.CEButton1, "Включить")

autoAssemble([[
               predmet:
                       db 48 63 80 48 01 00 00
                       unregistersymbol(predm)
                       unregistersymbol(predmet)
                       dealloc(newmem)
]])
control_setCaption(CETrainer.CELabel1, "Откл")
end

 

 

Далее я создал кнопку - Обновить

И поместил в неё такой код:

function CEButton3Click(sender)
local a = getAddress("[predm]+0")
local b = string.format('0%x',a)
local stored = readInteger (b)
control_setCaption(CETrainer.CEEdit1, stored)
end

Немного коряво и с точки зрения программирования есть лишний код, но это заработало и гнаться за краткостью кода у меня нет желания. Работает и хорошо.

Таким образом когда запускаю тренер, у меня в поле CEEdit1 отображается текст по умолчанию, так как по смыслу скрипта необходимо сначала щёлкнуть в игре по конкретному предмету, тогда в переменной predm появится его адрес. Далее когда нажимаю кнопку Обновить, переменная predm заполняется адресом предмета, из этого адреса берётся указатель на значение кол-ва предмета в инвентаре на данный момент и это кол-во передаётся в CEEdit1 в человеческом десятичном виде.

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

44 минуты назад, Xipho сказал:

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

Ещё в таком случае вопрос, как мне по кнопке Записать произвести запись введённого числа в указатель кол-ва предмета?

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

1 минуту назад, Iniar сказал:

Ещё в таком случае вопрос, как мне по кнопке Записать произвести запись введённого числа в указатель кол-ва предмета?

Это уже вопрос для отдельной темы. И, кстати, подобное вроде уже обсуждалось на форуме, поищи по темам.

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

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

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

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