Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ UO Pilot _ --lua readmem (address, "F")

Автор: фонарик 1.10.2023, 21:18

Здравствуйте, не могу понять почему так. Мне нужно прочитать значение с точкой из памяти. На простом пилоте значение читается правильно:

Код
readmem $param1 "0x036F7548" F  // 121,650543212891
readmem $param2 "0x036F7548" D  // 1123241236

Но то же самое на луа - не робит sad.gif
Код
param1 = readmem ("0x036F7548", "F") -- -1
param2 = readmem ("0x036F7548", "D") -- 1123241236


В чём может быть проблема, подскажите пожалуйста.

Автор: DarkMaster 3.10.2023, 18:09

попробуй загнать общим стрингом. возможно так же имеет значение регистр.

Автор: фонарик 4.10.2023, 1:58

lua два последних типа данных F:float = 4b; R:real = 6b выдает всегда -1, тогда как обычным пилотом все считывается правильно. Остальные типы считываются правильно и пилотом, и луа. Единственно какое решение я нашёл как решить проблему - нашел в интернетах функцию-конвертер dec to float, т.е считываем дестичное значение типа D и конвертим его в тип F float. Почему оно сразу не считывается правильно на луа, а выдаёт -1 так и осталось загадкой biggrin.gif

Автор: cirus 4.10.2023, 3:39

Код
param1 = readmem ("0x036F7548, F") 

Вернёт string.

Автор: фонарик 4.10.2023, 18:29

Какие же вы умные ребята здесь на форуме, не перестаю вами восхищаться biggrin.gif Часов пять своих мытарств, потом совет-намёк от товарища DarkMaster так и не поддался разгадке своими силами, что же всё-таки такое этот "общий стринг" unsure.gif Товарищ cirus и вовсе лишил своё сообщение какой-либо тайны или намёков smile.gif Вот такие вот мы, простые граждане, порой мало нам сказать как правильно biggrin.gif Спасибо вам большое thanks.gif Действительно, "общим стрингом" всё работает laugh.gif

Автор: фонарик 15.2.2024, 14:42

Цитата(cirus @ 4.10.2023, 3:39) *
Код
param1 = readmem ("0x036F7548, F") 

Вернёт string.
А если адрес 0x036F7548 в переменной, то каким образом его подставить нужно? unsure.gif Подскажите пожалуйста, никак не получается sad.gif

Автор: DarkMaster 15.2.2024, 18:12

local address = 0x12345678
param1 = readmem ('"' .. address .. ', F"')
вроде как-то так. Главное с кавычками не запутаться.

Автор: DarkMaster 15.2.2024, 20:14

Код
do
    local readmem_orig = readmem
    _G.readmem = function(...)
        return readmem_orig('"' .. table.concat({...}, ", ") .. '"')
    end
end

Можешь закинуть это в шапку и не выносить больше мозг. Оно просто будет работать (я надеюсь smile.gif если, что - поправлю).

Автор: DarkMaster 16.2.2024, 6:47

Код
do
    local readmem_orig = readmem
    _G.readmem = function(...)
        return tonumber(readmem_orig(table.concat({...}, ", ")))
    end
end

вот так чуть корректнее и вернет number, а не string.

Автор: фонарик 18.2.2024, 11:50

Цитата(DarkMaster @ 15.2.2024, 18:12) *

local address = 0x12345678
param1 = readmem ('"' .. address .. ', F"')
вроде как-то так. Главное с кавычками не запутаться.
Как вы только это делаете unsure.gif Просто какая-то магия sorcerer.gif Большое спасибо вам, DarkMaster.

Автор: DarkMaster 18.2.2024, 12:14

Рад помочь. Я бы все-таки рекомендовал использовать код из https://forum.uokit.com/index.php?s=&showtopic=71377&view=findpost&p=445741
Далее можно пользоваться обычным readmem и не заниматься никакой ерундой с кавычками. Данный код нужно выполнить только один раз в начале скрипта.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)