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

[CE] LUA - Edit поле и Перевод dec->hex


pachela

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

Задача следующая:

Нужно оживить поле Edit. (Ранее я с ним не работал. Посему если ссылку на уже готовую тему дадите, то буду благодарен.)

Введенное в поле значение нужно перевести с dec в hex.

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

Попробуй использовать tonumber() Edit твой Editbox или как он называется.

 

Документация

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

tonumber (e [, base])

Попытка преобразования параметра в число. Если параметр уже является числом или строкой, конвертируемой в число, то tonumber возвращает это число; иначе, возвращает nil.

Необязательный параметр указывает основание системы счисления для интерпретации числа. Основание может быть любым целым числом в диапазоне от 2 до 36, включительно. Если основание больше 10, то символ 'A' (как в верхнем, так и в нижнем регистре) представляет 10, 'B' представляет 11, и так далее, символ 'Z' представляет 35. При основании 10 (по умолчанию), число может быть представлено в экспоненциальной форме (см. §2.1). Для других оснований можно указывать только беззнаковые целые числа.


tostring(e)

Принимает параметр любого типа и конвертирует его в строку в подходящем формате. Если требуется специальное форматирование, используйте функцию string.format.

Если метатаблица для e имеет поле "__tostring", tostring вызывает его значение с параметром e, и возвращает результат этого вызова

 

Example:
print(tonumber(Edit,10))  //DEC
print(tonumber(Edit,16))  //HEX

А если из всего этого строка нужна, то tosting()

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

41 минуты назад, partoftheworlD сказал:

Попробуй использовать tonumber() Edit твой Editbox или как он называется.


Example:
print(tonumer(Edit,10))  //DEC
print(tonumer(Edit,16))  //HEX

А если из всего этого строка нужна, то tosting()

Ты меня извини, я тут  туплю. Можно немного рассосать для начального уровня?

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

5 часов назад, pachela сказал:

Можно немного рассосать для начального уровня?

Я не знаю как в CE, но для примера Visual Basic, чтобы получить/передать текст используют Editbox1.text или Editbox1.value, в СЕ мне кажется так же сработает, но это не точно т.к не проверял.

 

a = tonumer(Editbox1.text,16) //перевод в HEX текста который ты взял их Editbox
Label1.text = tosring(a)      //передача конвертированного значения лейблу

 

Кто трейнеры собирает под СЕ должен знать как получить доступ к элементам CE, чтобы использовать их в Lua.

А мой ответ был только на счет того как конвертировать значения в луа.

 

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

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

-- Это число?
function CheckDigits(line)
  return string.find(line,'%d') ~= nil and string.find(line,'%D') == nil
end
-- Это Hex число?
function CheckHexadecimalDigits(line)
  return string.find(line,'%x') ~= nil and string.find(line,'%X') == nil
end

-- Конвертация
function DecToHex(stringValue)  return string.format('%08X', stringValue) end
function HexToDec(stringValue)  return tonumber(stringValue, 16) end


function OnChangeEdit1(sender, key)
	if CheckDigits(edit1.Text) then
		edit2.OnChange = nil
		edit2.Text = DecToHex(edit1.Text)
		edit2.OnChange = OnChangeEdit2
	end
end

function OnChangeEdit2(sender, key)
	if CheckHexadecimalDigits(edit2.Text) then
		edit1.OnChange = nil
		edit1.Text = HexToDec(edit2.Text)
		edit1.OnChange = OnChangeEdit1
	end
end

form = createForm()
edit1 = createEdit(form)
edit2 = createEdit(form)
edit1.Text = '0'
edit2.Text = '0'
edit1.OnChange = OnChangeEdit1
edit2.OnChange = OnChangeEdit2
edit2.Top = edit1.Height

 

 

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

47 минуты назад, MasterGH сказал:

-- Это число?

MasterGH, добавил в скрипт для наглядности:

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

-- Это число?
function CheckDigits(line)
  return string.find(line,'%d') ~= nil and string.find(line,'%D') == nil
end
-- Это Hex число?
function CheckHexadecimalDigits(line)
  return string.find(line,'%x') ~= nil and string.find(line,'%X') == nil
end

-- Конвертация
function DecToHex(stringValue)  return string.format('%08X', stringValue) end
function HexToDec(stringValue)  return tonumber(stringValue, 16) end


function OnChangeEdit1(sender, key)
	if CheckDigits(edit1.Text) then
		edit2.OnChange = nil
		edit2.Text = DecToHex(edit1.Text)
		edit2.OnChange = OnChangeEdit2
	end
end

function OnChangeEdit2(sender, key)
	if CheckHexadecimalDigits(edit2.Text) then
		edit1.OnChange = nil
		edit1.Text = HexToDec(edit2.Text)
		edit1.OnChange = OnChangeEdit1
	end
end

form = createForm()
label1 = createLabel(form)
edit1 = createEdit(form)
label2 = createLabel(form)
edit2 = createEdit(form)
form.Caption = 'Example for pachela'
label1.Caption = 'Ваше значение в DEC:'
edit1.Text = '0'
label2.Caption = 'Ваше значение в HEX:'
edit2.Text = '0'
edit1.OnChange = OnChangeEdit1
edit2.OnChange = OnChangeEdit2
edit1.Top = label1.Height
label2.Top = edit1.Top + edit1.Height
edit2.Top = label2.Top + label2.Height

 

13676778.jpg

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

Для себя пока что выбрал следующий вариант

function CEEdit1Change(sender)
exte = string.format('0%X', UDF1.CEEdit1.Text)
end

function CEButton1Click(sender)
showMessage(exte)
end

Минус тут следующий, когда отчищаю поле ввода, выводит ошибку, типа "плохая идея, тут же стринг идет". Но это терпимо, не терпимо следующее, получившийся Hex у нас задом на перед, т.е. отличительный от того, что используется в СЕ. Как сделать так, что бы значение было корректно?

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

Наверно мне нужно объяснить заранее для чего это мне нужно:

У меня есть 3 значения, которые идут одно за другим. И взяв 3 таких (4байтовых) значения можно получить уникальную сигнатуру.

Моя задумка, сделать 3 таких вот окна ввода. По нажатию на кнопку, берется 3 значения переведенных в хекс и образуется массив байт. Этот массив мы используем в AOBscan и находим адреса по которым записаны нужные нам значения.

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

Порылся немного по просторам гугла и узнал, что такое Grouped scan в СЕ. Раньше и не знал, что подобное есть. Теперь вот пытаюсь разобраться как в Луа использовать найденное.

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

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

Grouped scan в СЕ.


Для большинства игр это бесполезна штука, лично мне ни разу не помогла что-либо найти..

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

Только что, partoftheworlD сказал:


Для большинства игр это бесполезна штука, лично мне ни разу не помогла что-либо найти..

Я попробовал на своей игруле, 3 значения постоянно находятся рядом и в одной и той же последовательности.

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

37 минуты назад, partoftheworlD сказал:


Для большинства игр это бесполезна штука, лично мне ни разу не помогла что-либо найти..

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

Помогало и ранее, когда ещё и в помине не знал о существовании СЕ и ассемблера, на Артмани и сейчас на СЕ.

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

4 часа назад, pachela сказал:

Моя задумка, сделать 3 таких вот окна ввода. По нажатию на кнопку, берется 3 значения переведенных в хекс и образуется массив байт. Этот массив мы используем в AOBscan и находим адреса по которым записаны нужные нам значения.

 

Ручных операций не так много и думаю, их не надо делать очень часто и в большом объеме. Думаю, ты можешь вручную это сделать или пользоваться  групповым поиском. В чем смысл автоматизации поиска адреса на Lua?

 

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

13 часа назад, MasterGH сказал:

 

Ручных операций не так много и думаю, их не надо делать очень часто и в большом объеме. Думаю, ты можешь вручную это сделать или пользоваться  групповым поиском. В чем смысл автоматизации поиска адреса на Lua?

 

Создание трейнера, который я могу передать другому?

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

22 минуты назад, pachela сказал:

Создание трейнера, который я могу передать другому

 

Все равно не понятно. Ладно. Закрываю тему. Решение заголовка темы уже написали.

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

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...

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

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