-
Постов
9 -
Зарегистрирован
-
Посещение
-
Победитель дней
2
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные Megaladon
-
-
Всем привет!
local Sme = 15448
local Zna = 123
writeInteger('[00030040]' + '0x' .. Sme, Zna)Помогите найти ошибку. Данный кусок кода должен записывать Значение из переменной Zna по поинтеру,Смещением которого является переменная Sme.
Тоесть я хочу сам записать любое значение по смещению,которому я хочу из переменной.
если я правильно понял то:
'[00030040]' - адресс начала структуры
Sme - указатель на параметр Zna.
local Sme = 15448
local Zna = 123
Sme = string.format('0x%08X', Sme)
readInteger(0x00030040, base_value)
Sme_address = base_value + Sme
writeInteger(Sme_address, Zna)К сожалению, я не телепат. Если это не то решение которое тебе нужно, то могу сказать только одно:
"какой вопрос - такой и ответ."
Что бы получить максимально исчерпывающий ответ надо и вопрос описывать подробнее.
- 1
-
получил ответ с http://forum.cheatengine.org
должен быть следующий синтаксис.
local text = ansiToUtf8(readString(textadr, 16,false))
control_setCaption(label2, "считанный текст : "..text)тогда все работает.
Пишу тут ответ, может кому нибудь пригодиться.
вообще в main.lua не раскрыто какой должен быть синтаскис, у той или иной функции, и угадывание правильного написания комманды отнимает много времени.
- 1
-
Вот ответ Дарк Байта о не корректном отображении кирилицы в форме:
according to the add address window it should be "readString(textadr, 16)"
besides that I have no idea
usually ansiToUtf8 does something, but I can't really test this
Я так понимаю что проблемма кроется в неправильно работающей функции ansiToUtf8.
-
Приветствую всех снова.
Проблемму с
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)
end
MyForm = 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 + 0x10E1B8
textadr1 = readInteger(textadr2)
textadr = textadr1 + 0
----------- offsets memoryModul ----------------
EntitiesMP = getAddress('EntitiesMP.dll')
actionadr = EntitiesMP + 0x20F770
action = 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 WinControl
trackbar_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 = standart
memoryrecord_setValue(memoryrec1, zoom) --sets value for the memoryrecord
control_setCaption(label1, zoom)
trackbar_setPosition(TrackBar, zoom)
end
MyForm = 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)
end
setMethodProperty(TrackBar , "OnChange" , "ZoomHack")Зарание благодарю всех откликнувшихся.
-
по поводу вопроса о выводе текста внутри полоски прогресс бара,
на форуме в примерах нашел способ вывести свойства класса:
print(strings_getText(getPropertyList(UDF1_CEProgressbar1)))
Name
Tag
AnchorSideLeft
AnchorSideTop
AnchorSideRight
AnchorSideBottom
Cursor
Left
Height
Hint
Top
Width
HelpType
HelpKeyword
HelpContext
Align
Anchors
BorderSpacing
BorderWidth
Constraints
Enabled
Max
Min
Position
Orientation
ParentShowHint
ShowHint
Smooth
Step
Style
TabOrder
TabStop
Visible
BarShowText -- этот параметр видимо мне и нуженвопрос какой синтаксис должен быть у BarShowText?
пробовал progressbar_setBarShowText(progressbar1,true)
и progressbar_BarShowText(progressbar1,true)
выдает ошибку, к ДаркБайту писать пока не хочу, так как английским языком не владею, и не факт что он правильно поймет мою писанину, коряво переведенную на английский гугл-переводчиком, и уж совсем не факт что я пойму переведенный гуглом его ответ.
Ещё вопрос имеется ли возможность менять цвет полосы у прогрессбара?
по поводу readString() нашел функцию:
ansiToUtf8(string): Converts a string in Ansi encoding to UTF8
utf8ToAnsi(string): Converts a string in UTF8 encoding to Ansi
Note: 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 + 0x20F770
value = readInteger(adress2)все варианты выдают ошибку, в главной таблице адресс EntitiesMP.dll+0x20F770 работает правильно, а в скрипте не могу использовать такой формат адресса, проблемма в том что у меня Win-7 x64, и почему-то этот адресс после перезапуска программы меняеться (адресс зеленый, и меняеться у него всегда только 2 байт, 0x00**5A4D ), Cheat Engine находит его всегда если привести адресс к такому виду как привел выше EntitiesMP.dll+0x20F770.
-
Привет всем. Я долго и нудно, разбирался на примерах как работает "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)
end
function 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
end
MyForm = 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. почему то при попытке прикрепления изображения, пишет недопустимое расширение файла. удалось прикрепить лишь первое изображение, остальные ссылками фотохостинг.
-
Andrey, подскажите тогда может возможен такой вариант. Делаем на основном окне тренера кнопки "вкладка-1", "вкладка-2", "вкладка-3". и при нажатии на кнопки появляется окно поверх основного окна тренера желательно привязанное к координатам внутри основного окна, закрывается вкладка или по второму нажатию на кнопку вкладка, если не возможно так, то на окне "вкладки" сделать кнопку закрыть, по которой бы мы возвращались в основное окно.
2. в программировании я не силен, база информатика в 9 классе, изучал бейсик на электронике 1850 =). еще неплохо знаком и синтаксисом батником *.bat WinXP.
подскажите пожалуйста, как ячейку памяти из таблицы привязать к активному элементу тренера, желательно используя только возможности самого Cheat Engine 6.1 и по возможности разжуйте в комментариях шаги, зачем то или иная строка и что она выполняет
Пример файла *.CETRAINER выкладываю, и отталкивался от примера телепорта, на нем же и пробовал добавлять елементы,
<?xml version="1.0" encoding="utf-8"?>
<CheatTable CheatEngineTableVersion="13">
<Forms>
<trainerMainForm>8555CF6F1B45145EAF8BD789230715A40A21A4A9D41B10D96E43D31C901A3751AB26AD894D0151148DE371BCEA7AD7AC3728A197C4555BA10482E81FC0999B1B70E3264D72E53873299CB970E502E2C89B1FBBEB4D1D5691323BBB6FDEF7CDF7BDF73C3EA26995D25CCEA81467E71CB739EEB9D8B489BB00FFF9FECC3CA97BC91FF5D47562AE34BCE4F78964C569251F68AF7D62D6BC46F2652233E3B835E2DE5876EC7666AC6A96D7DB1E692E107B75B46A2E98B6D934BF269A8A2A7BEB1631D2D5F635135BCE8A51C42DCF74ECD449D8B1A26512DB0B403372EF631AB7EDA2E5B48931C283C5A396861BCCE32AB1D26ACD0BEEFA05455D7F9D33D7B38AF8132D007F273F81CAF82B825A4EDBE46FA651CB25ED36BA89EE91F54C09BB005D742CC74D6BAFC21486C2E415CC0F0330855360E687C06401A6E43A2B3C6006BBD97057C5AEBC59F26CC2C77C5360AE494CBD96AEE0EA6D2EB7AE0D217C51126EF987B3E2705D113E9B0808CF0C1040F4981ED17DDAA57B6C8BEED22EFB8E7D43FBF439A2CF60D9A3876C9BC7F4D806DB84C843887C46BB63738EED4D141BD82D13CF185FFCB85CBE71F5D652F1FAD5C5F26C2523BE2A1A7F8F88DD2DDC2429E30E716BD8C6A3E255C9F4961BC668BD7507BB26AE5A4466FD68155BA6B76E18F52FAFB9B8EE45141C951B1E38CCB44B52C15FB5A86BF795826F041A240BB95C5C054CCA647F9C922C15244BDC8D4BF5814CF5573CAFFCC5C9B86497A5D10B915C50F8CA691696E665B8257A1FB16F59871E21EE2618FC98F660EDD31E623B62F31CFCEFA34F97EAAB96D520D8F21A710CA624835294C14F3E83F9B0D63E87FB0083FF87FE6C49C222D81D71AA6C034AAD87E80B1ECF76A0FA3A6C9B6DB21DC4BF2379AB93FEF151375B333D432EAA993A41339D13245F2A92FA85B09B12672A64CD4BE9F99CA665204BC5C5CBF7A03932E1A3CA762EC8F696C8F69B16F4664975BFAE8589F521DA5D91997AD15248FEEE67AA04DABD0D1DB72FC580BB7778233E05417EA65D347D9A4323FE90CC498B4814E55FDFA20F438BBE78D59C082E1814E08AC08760CE2F6060E0C92E2AB708A92DAEDAFC194E74E1C001EDB347B4174B548DF346946836A188FE1956F31531A7F6611C01B53EDD85C2D8033A5C1834E014A2FDBBF019F091AA04144BA23094C4799FC4CD50AD1A7B2C9BE929DB0A0AF4447D4B4DC4D3435EFC7E191F0829F9B921E1031D112F9A9AF5CD28DF699FEF3FA16885D09A634EBB0BD66D40436DC2DF03B4EC9ACDB6635BD8AE4D9035F2EED4D4E4A5622CBA9CB2FAF928FAA28FFE2454EB7E8827AB078A0B76F0F6806D83265BB4F7DE808A7D583AFCB70644017ABCEF793176E90BDFF443F6080E1D8BCB88A6109342A9C8EB56441DF31A3C710DED3F</trainerMainForm>
</Forms>
<CheatEntries>
<CheatEntry>
<ID>4</ID>
<Description>"X_fullhealth"</Description>
<Color>80000008</Color>
<VariableType>Float</VariableType>
<Address>crimsonland.exe+8853C</Address>
</CheatEntry>
<CheatEntry>
<ID>5</ID>
<Description>"Y_heath"</Description>
<Color>80000008</Color>
<VariableType>Float</VariableType>
<Address>crimsonland.exe+8853C+4</Address>
</CheatEntry>
<CheatEntry>
<ID>6</ID>
<Description>"SpeedRun"</Description>
<Color>80000008</Color>
<VariableType>4 Bytes</VariableType>
<Address>crimsonland.exe+8854C</Address>
</CheatEntry>
</CheatEntries>
<UserdefinedSymbols/>
<LuaScript>X = 0.0
Y = 0.0
local isUserAction = false
function SavePosition()
X = readFloat('crimsonland.exe + 8853C')
Y = readFloat('crimsonland.exe + 8853C + 4')
isUserAction = true
end
function LoadPosition()
if isUserAction then
writeFloat('crimsonland.exe + 8853C', X)
writeFloat('crimsonland.exe + 8853C + 4',Y)
end
end
function OnCheckHotkeys()
if isKeyPressed(VK_K) then
SavePosition()
return
end
if isKeyPressed(VK_L) then
LoadPosition()
return
end
end
form_show(trainerMainForm)
control_setCaption(trainerMainForm, 'Teleport Crimsonland v1.9.8 RUS (game not found)')
function FormClose(sender)
closeCE()
return caFree
end
processlist = getAutoAttachList()
strings_add(processlist, 'crimsonland.exe')
function onOpenProcess(processid)
hotKeyTimer = createTimer(trainerForm)
timer_setInterval(hotKeyTimer, 100)
timer_onTimer(hotKeyTimer, OnCheckHotkeys)
control_setCaption(trainerMainForm, 'Teleport Crimsonland v1.9.8 RUS (game is run)')
end
</LuaScript>
</CheatTable>Заранее благодарю за проявленное ко мне терпение.
-
Доброго времени суток всем, прошу помочь разобраться с дизайнером форм в Cheat Engine 6.1. я не знаю как сделать вкладки. подскажите ка можно реализовать такой вид тренера как на картинке.
заранее благодарю, за помощь, если такая реализация формы не возможно, какая есть альтернатива вкладкам
Компонент "Вкладки"
in Cheat Engine
Опубликовано
Именно так я и поступил, сделал панели и менял их свойства:
А с чего вы взяли что использование Lua в Cheat Engine ограничевается только написанием тренеров?
Я на lua сделал себе конвертер Hex->Dec Dec->Hex, ну и ещё пару вещей общего назначения, добавляющих удобств в повседневной жизни.