Megaladon Опубликовано 28 июня, 2013 Поделиться Опубликовано 28 июня, 2013 Привет всем. Я долго и нудно, разбирался на примерах как работает "ProgresBar".У меня вроде бы как получилось, попутно понял как работает таймер и научился добавлять в код более одного таймера.( Чему очень обрадовался когда у меня все заработало).Вот что получилось:Теперь у меня возник вопрос, возможно ли, и как сделать чтобы параметры которые отображает progresbar вывести на его полоске, чтобы получить такой результат:http://imgfast.ru/51cdf46db3c53/qB/Lua-скрипт привожу:<?xml version="1.0" encoding="utf-8"?><CheatTable CheatEngineTableVersion="14"> <CheatEntries> <CheatEntry> <ID>0</ID> <Description>"base"</Description> <ShowAsHex>1</ShowAsHex> <Color>80000008</Color> <VariableType>4 Bytes</VariableType> <Address>Engine.dll+73D248</Address> </CheatEntry> <CheatEntry> <ID>1</ID> <Description>"full"</Description> <Color>80000008</Color> <VariableType>4 Bytes</VariableType> <Address>Engine.dll+73D248</Address> <Offsets> <Offset>10E214</Offset> </Offsets> </CheatEntry> <CheatEntry> <ID>2</ID> <Description>"current"</Description> <Color>80000008</Color> <VariableType>4 Bytes</VariableType> <Address>Engine.dll+73D248</Address> <Offsets> <Offset>10E1F0</Offset> </Offsets> </CheatEntry> <CheatEntry> <ID>3</ID> <Description>"full2"</Description> <Color>80000008</Color> <VariableType>4 Bytes</VariableType> <Address>Engine.dll+73D248</Address> <Offsets> <Offset>10E210</Offset> </Offsets> </CheatEntry> <CheatEntry> <ID>4</ID> <Description>"current2"</Description> <Color>80000008</Color> <VariableType>4 Bytes</VariableType> <Address>Engine.dll+73D248</Address> <Offsets> <Offset>10E1F4</Offset> </Offsets> </CheatEntry> </CheatEntries> <UserdefinedSymbols/> <LuaScript>function progresbar01(senderTimer) full1 = readInteger(full1adr) current1 = readInteger(current1adr) control_setCaption(label2, current1.." / "..full1) progressbar_setMax(progressbar1, full1) progressbar_setPosition(progressbar1, current1) endfunction progresbar02(senderTimer) full2 = readInteger(full2adr) current2 = readInteger(current2adr) control_setCaption(label4, current2.." / "..full2) progressbar_setMax(progressbar2, full2) progressbar_setPosition(progressbar2, current2) end function CloseForm(sender) form_close(MyForm) MyForm = nil endMyForm = createForm() label1 = createLabel(MyForm) label2 = createLabel(MyForm) label3 = createLabel(MyForm) label4 = createLabel(MyForm) progressbar1 = createProgressBar(MyForm) progressbar2 = createProgressBar(MyForm) btnExit= createButton(MyForm) control_setCaption(MyForm, "My First Lua ") control_setCaption(label1, "Progressbar 1") control_setCaption(label2, "Current1/Full1") control_setCaption(label3, "Progressbar 2") control_setCaption(label4, "Current2/Full2") control_setCaption(btnExit, "Exit") control_setSize(progressbar1, 120, 15) control_setSize(progressbar2, 120, 15) progressbar_setMin(progressbar1, 0) progressbar_stepBy(progressbar1, 1) progressbar_setMax(progressbar1, full1) progressbar_setMin(progressbar2, 0) progressbar_stepBy(progressbar2, 1) progressbar_setMax(progressbar2, full2) control_onClick(btnExit, CloseForm) x = 10 y = 10 dy = 20 control_setPosition(label1, x+200, y+0*dy) control_setPosition(progressbar1, x+78, y+0*dy) control_setPosition(label2, x, y+0*dy) control_setPosition(label3, x+200, y+1*dy) control_setPosition(progressbar2, x+78, y+1*dy) control_setPosition(label4, x, y+1*dy) control_setPosition(btnExit, x + 220, y+9*dy) form_show(MyForm) timer1 = createTimer(MyForm) timer_setInterval(timer1, 200) timer_onTimer(timer1, progresbar01) timer2 = createTimer(MyForm) timer_setInterval(timer2, 200) timer_onTimer(timer2, progresbar02)-------- offsets ------------------- status = readInteger(0x1073D248) full1adr = status + 0x10E214 current1adr = status + 0x10e1f0 full2adr = status + 0x10e210 current2adr = status + 0x10e1f4-------------------------------------------</LuaScript></CheatTable>Вопрос второй.при поиске текста в главной таблице СЕ текст на кирилице отображаеться правильно, но если считать этот текст в скриптеtext = readString(textadr, 76)print(text)то цифры и латиница отображаются как надо, а кирилица в виде вопросительных знаков??????????????????????http://imgfast.ru/51cdf46db3c53/pB/P.S. почему то при попытке прикрепления изображения, пишет недопустимое расширение файла. удалось прикрепить лишь первое изображение, остальные ссылками фотохостинг. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 29 июня, 2013 Поделиться Опубликовано 29 июня, 2013 >>Теперь у меня возник вопрос, возможно ли, и как сделать чтобы параметры которые отображает progresbar вывести на его полоске, чтобы получить такой результат:1. Попытаться разместить label на полоске2. Попытаться разместить label на полоски через Disigned редактор3. Если не получается, то посмотреть описание ProgressBar класса. Я вроде помню, у него должен быть TCanvas слой, который позволяет рисовать текст.Я бы попробовал решить задачу, но лень.>>то цифры и латиница отображаются как надо, а кирилица в виде вопросительных знаковРешение скорее всего в функциях в работе с кодировкой. В main.lua есть описание этих функции, возможно они помогут.Ещё могу посоветовать написать о проблеме на форуме Cheat Engine. Я думаю, там помогут быстрее дав готовое решение.>> почему то при попытке прикрепления изображения, пишет недопустимое расширение файлаМожно обратить к Xipho по этому вопросу Ссылка на комментарий Поделиться на другие сайты Поделиться
Megaladon Опубликовано 30 июня, 2013 Автор Поделиться Опубликовано 30 июня, 2013 по поводу вопроса о выводе текста внутри полоски прогресс бара,на форуме в примерах нашел способ вывести свойства класса:print(strings_getText(getPropertyList(UDF1_CEProgressbar1)))NameTagAnchorSideLeftAnchorSideTopAnchorSideRightAnchorSideBottomCursorLeftHeightHintTopWidthHelpTypeHelpKeywordHelpContextAlignAnchorsBorderSpacingBorderWidthConstraintsEnabledMaxMinPositionOrientationParentShowHintShowHintSmoothStepStyleTabOrderTabStopVisibleBarShowText -- этот параметр видимо мне и нуженвопрос какой синтаксис должен быть у BarShowText?пробовал progressbar_setBarShowText(progressbar1,true)и progressbar_BarShowText(progressbar1,true)выдает ошибку, к ДаркБайту писать пока не хочу, так как английским языком не владею, и не факт что он правильно поймет мою писанину, коряво переведенную на английский гугл-переводчиком, и уж совсем не факт что я пойму переведенный гуглом его ответ.Ещё вопрос имеется ли возможность менять цвет полосы у прогрессбара?по поводу readString() нашел функцию:ansiToUtf8(string): Converts a string in Ansi encoding to UTF8utf8ToAnsi(string): Converts a string in UTF8 encoding to AnsiNote: GUI components mainly show in UTF8, some other functions use Ansi, try to find out which ones...Но ожидаемого результата не получил, видимо нужно именно строку вводить как аргумент, а не подставлять переменную,MyForm = createForm()control_setCaption(MyForm, "My First Lua ")label1 = createLabel(MyForm)form_show(MyForm)text = readString(adress, 16)ansiToUtf8(text)control_setCaption(label1, text)print(text)все равно выдает ????????? вместо кирилицы.Возник ещё один вопрос как правильно написать код чтобы работало:value = readInteger([[EntitiesMP.dll+0x20F770]])adress = [[EntitiesMP.dll+0x20F770]]value = readInteger(adress)adress1 = [[EntitiesMP.dll]]adress2 = adress1 + 0x20F770value = readInteger(adress2)все варианты выдают ошибку, в главной таблице адресс EntitiesMP.dll+0x20F770 работает правильно, а в скрипте не могу использовать такой формат адресса, проблемма в том что у меня Win-7 x64, и почему-то этот адресс после перезапуска программы меняеться (адресс зеленый, и меняеться у него всегда только 2 байт, 0x00**5A4D ), Cheat Engine находит его всегда если привести адресс к такому виду как привел выше EntitiesMP.dll+0x20F770. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 30 июня, 2013 Поделиться Опубликовано 30 июня, 2013 Попробуй записать:value = readInteger('[EntitiesMP.dll+0x20F770]')P.S. Напиши Дарк Байту,заодно и с днём рожденья его поздравишь)) Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 2 июля, 2013 Поделиться Опубликовано 2 июля, 2013 BarShowText - булева переменная, должна показывать текст, но скорее всего ни у кого не работает (судя по записям на немецком форуме). Как я понял это какие-то заморочки Lazarus или связанного с ним компилятора, или связанных модулей, или какие-то особенности ОС. Это проблему нужно изучать довольно кропотливо. Тут я не помогу.Разместить Label на самом Progress Bar в дизайнере форм у меня не получается.Рисовать на Progress Bar текст - вариант, но не через TCanvas. А каким-то другим способом, не знаю не пробовал.Во всяком случае проще разместить Label с текстом рядом и показывать текущее значение в нем. Ещё вариант взять TImage и рисовать в нем этот progress bar просто как прямоугольник заполняющийся с цифрами.По поводу кодировки. Если значение в игре по адресу в ANSI, то нужно конвертировать в UTF и передать строку в GUI. Не нужно работать с кодировкой в/из log консоли, там кажется только ANSI. Нужно экспериментировать с компонентами формы и значением в игре, а не с консолью. И советую работать с дизайнером форм по созданию окон - ускоряет процесс написания кода. Если текст русский есть в Lua скрипте, я сохранял таблицу как .CT или .CETRAINER открывал NotePad++ и ставил кодировку UTF-8(без BOM) тогда русский текст у меня отображался корректно.По поводу " readInteger([[EntitiesMP.dll+0x20F770]])" Насколько я помню сочетание двойных скобок даже в кавычках рассматривается как оборачивание в комментарий. Скобка это служебный символ, а перед ним вроде нужно ставить знак % (или какой-то другой я мог ошибиться)readInteger("%[%[EntitiesMP.dll+0x20F770%]%]") Ссылка на комментарий Поделиться на другие сайты Поделиться
Megaladon Опубликовано 2 июля, 2013 Автор Поделиться Опубликовано 2 июля, 2013 Приветствую всех снова.Проблемму сvalue = readInteger([[EntitiesMP.dll+0x20F770]])удалось решить.Сперва нужно получить адрес модуля с помощью командыgetAddress(string, local OPTIONAL): returns the address of a symbol. Can be a modulename or an export. set Local to true if you wish to querry the symboltable of the ce processи затем уже работать с полученным адресом.вот какой у меня получился рабочий код:function onTimer(senderTimer)speed = readInteger(speedadr)control_setCaption(label1, "1 status = "..status)control_setCaption(label2, "2 EntitiesMP.dll = "..EntitiesMP)control_setCaption(label3, "3 actionadr = "..actionadr)control_setCaption(label4, "4 action = "..action)control_setCaption(label5, "5 speedadr = "..speedadr)control_setCaption(label6, "6 speed = "..speed)endMyForm = createForm()label1 = createLabel(MyForm)label2 = createLabel(MyForm)label3 = createLabel(MyForm)label4 = createLabel(MyForm)label5 = createLabel(MyForm)label6 = createLabel(MyForm)control_setCaption(MyForm, "My First Lua ")control_setCaption(label1, "1 status = ")control_setCaption(label2, "2 EntitiesMP.dll = ")control_setCaption(label3, "3 actionadr = ")control_setCaption(label4, "4 action = ")control_setCaption(label5, "5 speedadr = ")control_setCaption(label6, "6 speed = ")control_setPosition(label1, 10, 5)control_setPosition(label2, 10, 30)control_setPosition(label3, 10, 55)control_setPosition(label4, 10, 80)control_setPosition(label5, 10, 105)control_setPosition(label6, 10, 130)timer = createTimer(MyForm)timer_setInterval(timer, 1000)timer_onTimer(timer, onTimer)-------- offsets text ----------------------------status = readInteger(0x1073D248)textadr2 = status + 0x10E1B8textadr1 = readInteger(textadr2)textadr = textadr1 + 0----------- offsets memoryModul ----------------EntitiesMP = getAddress('EntitiesMP.dll')actionadr = EntitiesMP + 0x20F770action = readInteger(actionadr)speedadr = action + 0xDD8-------------------------------------------Что косается прогрессбара, то я решил остановиться на варианте выводить значения переменных max и current в лабеле перед полоской. Что касаеться возможности покрасить цвет полосы прогрессбара, хотелось бы конечно, но это не принципиально. главное что бы работало. Пошарился в main.lua и не нашел там ни строчки о color или rgb в progressbar.Проблему с функцией readString() пока решить не удалось.То ли потому чтоansiToUtf8(string)в параметре string должна быть строка и туда нельзя подставлять переменную, то ли потому что функция выполняет другие задачи, Не знаю, но приведенный ниже код выдает внутри сгенернированной формы:Пример считанного текста из памяти процессасчитанный текст : ???????function onTimer(senderTimer) text = readString(textadr, 16, true) --[[пробовал несколько вариантов1. text = readString(textadr, 16, true) результат всегда один и тот же2. text = readString(textadr, 16, false)3. text = readString(textadr, 16)]] ansiToUtf8(text) control_setCaption(label2, "считанный текст : "..text) end MyForm = createForm() label1 = createLabel(MyForm) label2 = createLabel(MyForm) control_setCaption(MyForm, "My First Lua ") control_setCaption(label1, "Пример считанного текста из памяти процесса ") control_setCaption(label2, "Тут будет то что СЕ считает из памяти...") control_setPosition(label1, 10, 5) control_setPosition(label2, 10, 30) timer = createTimer(MyForm) timer_setInterval(timer, 2000) timer_onTimer(timer, onTimer)-------- offsets text ---------------------------- status = readInteger(0x1073D248) textadr2 = status + 0x10E1B8 textadr1 = readInteger(textadr2) textadr = textadr1 + 0----------- offsets memoryModul ---------------- EntitiesMP = getAddress('EntitiesMP.dll') actionadr = EntitiesMP + 0x20F770 action = readInteger(actionadr) speedadr = action + 0xDD8По поводу кодировки. Если значение в игре по адресу в ANSI, то нужно конвертировать в UTF и передать строку в GUI. Не нужно работать с кодировкой в/из log консоли, там кажется только ANSI. Нужно экспериментировать с компонентами формы и значением в игре, а не с консолью.И советую работать с дизайнером форм по созданию окон - ускоряет процесс написания кода.Если текст русский есть в Lua скрипте, я сохранял таблицу как .CT или .CETRAINER открывал NotePad++ и ставил кодировку UTF-8(без BOM) тогда русский текст у меня отображался корректно.Проблеммы с отображение русского текста в консоле набора Lua (Ctrl+Alt+L) нет, русский текст и в Lua-консоли и в Notepad++ отображаеться корректно. А считанный из памяти текст на форме отображаеться в виде ????????, причем структураcontrol_setCaption(label, "текст на русском языке: "..text)дает результат: текст на русском языке: ????????? .Как я понимаю проблема не в неправильной кодировке на компьютере, а в том что в памяти текст лежит в ansi, а в GUI-Label этот текст надо отправить в юникоде. Причем в главной таблице СЕ текст отображается корректно.И советую работать с дизайнером форм по созданию окон - ускоряет процесс написания кода.Полностью с вами согласен, когда нужен сложный интерфейс то дизайнер форм сэкономит много времени, чем прописывать все формы и элементы в ручную, да и работать будет корректнее, но я пока что тока на стадии освоения Lua-Engine. и мне проше работать с формой с одним элементом, так получаеться быстрее. и меньше пространстра для ошибок.Вожможно, что бы содержимое переменной text отображалось корректно, надо как-то подгружать кодовую страницу-1251. Буду писать ДаркБайту, надеюсь найдеться решение данной проблеммы.И напоследок: как установить положение трэкбара в нужное?у меня трэкбар при запуске скрипта всегда находиться в начальном положении, даже если значение парамерта другое.первый раз trackbar_setPosition(progressbar, integer) почему-то не отрабатываеться, а после того как подвигаю трэкбар и нажму сброс, то эта же команда в функции ResetZ срабатывает, я думал сперва что дело в том что переменная standart являеться числом с точкой и я строку standart = memoryrecord_getValue(memoryrec1) (значение переменной = 9,5) заменил на standart = 9, но это не помогло. При запуске скрипта ползунок не смотря на это все равно оказывается на нуле.--[[TrackBar Class : (Inheritance: WinControl->Control->Component->Object)createTrackBar(owner): Creates a TrackBar class object which belongs to the given owner. Owner can be any object inherited from WinControltrackbar_getMax(trackbar)trackbar_setMax(trackbar, integer)trackbar_getMin(trackbar)trackbar_setMin(trackbar, integer)trackbar_getPosition(progressbar)trackbar_setPosition(progressbar, integer)trackbar_onChange(trackbar, function)]]addresslist = getAddressList()description1= [[Zoom]]memoryrec1 = addresslist_getMemoryRecordByDescription(addresslist, description1)standart = memoryrecord_getValue(memoryrec1)function ResetZ(sender)zoom = standartmemoryrecord_setValue(memoryrec1, zoom) --sets value for the memoryrecordcontrol_setCaption(label1, zoom)trackbar_setPosition(TrackBar, zoom)endMyForm = createForm()label1 = createLabel(MyForm)TrackBar = createTrackBar(MyForm)ResetZoom = createButton(MyForm)control_setCaption(MyForm, "My First Lua ")control_setCaption(ResetZoom, "Сброс")control_setPosition(label1, 100, 5)control_onClick(ResetZoom, ResetZ)control_setPosition(ResetZoom, 130, 5)control_setCaption(label1, zoom)trackbar_setMin(TrackBar, 1)trackbar_setMax(TrackBar, 210)function ZoomHack()zoom = trackbar_getPosition(TrackBar)memoryrecord_setValue(memoryrec1, zoom)control_setCaption(label1, zoom)endsetMethodProperty(TrackBar , "OnChange" , "ZoomHack")Зарание благодарю всех откликнувшихся. Ссылка на комментарий Поделиться на другие сайты Поделиться
Megaladon Опубликовано 3 июля, 2013 Автор Поделиться Опубликовано 3 июля, 2013 Вот ответ Дарк Байта о не корректном отображении кирилицы в форме:according to the add address window it should be "readString(textadr, 16)"besides that I have no ideausually ansiToUtf8 does something, but I can't really test thisЯ так понимаю что проблемма кроется в неправильно работающей функции ansiToUtf8. Ссылка на комментарий Поделиться на другие сайты Поделиться
Megaladon Опубликовано 4 июля, 2013 Автор Поделиться Опубликовано 4 июля, 2013 получил ответ с http://forum.cheatengine.orgдолжен быть следующий синтаксис.local text = ansiToUtf8(readString(textadr, 16,false))control_setCaption(label2, "считанный текст : "..text)тогда все работает.Пишу тут ответ, может кому нибудь пригодиться.вообще в main.lua не раскрыто какой должен быть синтаскис, у той или иной функции, и угадывание правильного написания комманды отнимает много времени. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Zligger Опубликовано 11 июня, 2019 Поделиться Опубликовано 11 июня, 2019 Можно ли у вас попросить помощи разобраться с прогресбаром а именно офсетами? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения