-
Постов
2 999 -
Зарегистрирован
-
Победитель дней
129
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные MasterGH
-
-
В группу добавлен.
При публикация нужно писать версию игры.
На счёт трейнера.
Я рекомендую использовать MasterGHLuaTrainerSource_V1.lua и использовать Cheat Engine6.2 в качестве исполняемой программы для скриптов .CETRAINER.
-
Класс VAMemory должен иметь методы чтения не только ReadByte, но и других. Соответственно Byte заменить на нужный тип.
По аналогии Byte.Parse, так нужно заменить на нужный тип. Да и почти все ответы можно найти в MSDN.
-
Еще вопрос как взломать звездочки?(Поконкретней)
И как сделать так, что бы стрелять без перезарядки?(Поконкретней)
Если своей работы ноль и вопросы общего характера, то и ответы на эти вопросы не могут быть подробнее и также относятся к ответам общего характера.
<< Еще вопрос как взломать звездочки?
<< И как сделать так, что бы стрелять без перезарядки?
Ответ. Берете сканер памяти, отладчик/дизассемблер и исследуете машинный код который работает с адресом количества звёздочек и машинный код который работает с логикой перезарядки. Затем меняете код на тот, который даёт нужный результат.
-
Создание повторной темы.
Оформление не соответствует образцу.
-
2. Пока не вижу смысла вводить дополнительные модераторские посты, так как Кваз вполне справляется. Но насчет назначения "наместников" (модераторов в определенные разделы) мы с МастерGH подумаем.
Вот на текущий момент опубликованная не по правилам тема. Kvaz этой темой не занимался к примеру.
Один из лучших модераторов для форума "Трейнеры, скрипты, модули (PC, Windows)" этот тот человек который постоянно и чаще всех находится в этом форуме. Но это моё ИМХО.
Что касается меня я, например, устал следить за порядком и читать одну за другой создаваемые темы.
-
Пока никто никому не обещает дать права модератора. Посмотрим. Если кого-то назначат, тому сообщат.
-
Я вот что хочу предложить. В разделе трейнеры создавать только одну тему для какой либо игры. Ее соответственно описать. И выкладывать в этой теме все для этой игры. Трейнеры таблицы.. И тд. И тп. А ни как сейчас. Одна тема с таблицей, другая с трейнером...
Да, по правилам публикуется одна тема для одной игры. В этой теме писать скрипты, трейнеры, модули... для одной игры.
Хочу предложить кандидатуры Grom-Skynet, ZOCKIR на доступ к модераторским функциям в форуме "Трейнеры, скрипты, модули (PC, Windows)". Если вы оба согласны, а также согласны Xipho, Kvazimado, то почему бы и нет.
Кажется многие путают предназначение сайта и форума.
У меня такое предложение - сделать как на cheatengine.org:
сайт - для таблиц и софта.
форум - для общения и обсуждения таблиц.
ввод дополнительных правил и цензуры форуму на пользу не пойдёт ИМХО.
Никто ничего не путает. Публикация файлов на форуме это временная мера.
На сколько я знаю Xipho писал, что делал или делает поддержку публикации трейнеров. Так что ждём. Я в php и в настройках доступа не очень шарю.
-
Версию эту искать я не буду. Версии которыми я пользуюсь можно было увидеть по ссылке которая опубликована мной в соответствующей теме. Там есть более новые версии. Но я так понял проблема в этих ошибках.
frmStringMapUnit.pas(31,26) Error: Identifier not found "TREGExprEngine"
frmStringMapUnit.pas(31,26) Error: Error in type definition
frmStringMapUnit.pas(41,146) Error: Identifier not found "TREGExprEngine"
frmStringMapUnit.pas(69,26) Error: Identifier not found "TRegExprEngine"
frmStringMapUnit.pas(69,26) Error: Error in type definition
frmStringMapUnit.pas(85,1) Fatal: There were 5 errors compiling module, stoppingТ.е здесь ошибка в отсутсвии класса TREGExprEngine. Этот класс нужен для вычисления регулярных выражений. Он находится в модуле RegExpr версии от 2008 года (C:\lazarus32\fpc\2.5.1\source\packages\regexpr\src\regexpr.pp). Также нужно иметь regex.pp(C:\lazarus32\fpc\2.5.1\source\packages\regexpr\src\regex.pp)
Как можно было заметить со сборкой с сайта снапшотов(ссылку на него я давал в теме комплияции CE) с lazarus32 всё пучком, а с lazaruz64 указанные файлы regexpr.ppи RegExpr.pp старые вроде аж от 2002 (или 2004) года. Раньше в ревизиях CE класс TREGExprEngine не использовался.
Выход в данном случае, видимо, установить/обновить новый пакадж(или пакет) или заменить вручную старые файлы на новые. Пока эту проблему я тоже не решил и компилирую CE 32-разрядным lazarus-ом с сайта снапшотов.
-
Внимание
Я что забыл написать.
На форуме control_onClick(btnAboutExit, OnMusicStopAndExit) там где красная буковка надо исправить на заглавную. Иначе у вас скрипт будет выдавать ошибку. Дело в том что форум автоматически исправляет букву "C" на букву нижнего регистра для защиты от XSS.
btnAboutExit = createButton(formInfo)
control_setCaption(btnAboutExit,"Exit")
btnAboutExitWidth, btnAboutExitHeight = control_getSize(btnAboutExit)
control_setPosition(btnAboutExit, formInfoWidth - 3 - btnAboutExitWidth, formInfoHeight - 3 - btnAboutExitHeight)
control_onСlick(btnAboutExit, OnMusicStopAndExit) // здесь исправить! -
function timerGUIAboutLabel()
if deltaAboutY < -50*15 then
formInfoWidth, formInfoHeight = control_getSize(formInfo)
deltaAboutY = formInfoHeight + 10
else
deltaAboutY = deltaAboutY - 1
end
control_setPosition(AboutLbl, 40, deltaAboutY) -- вот эта команда устанавливает позицию длинной строки титров с фиксированной шириной
endПрежде всего на скорость влияет:
timer_setInterval(timerGUIAbout, 20)
Здесь 20 это интервал таймера, чем он больше, тем медленнее.
Ещё скорость можно увеличить перемещая строку не на одну позицию, а более:
function timerGUIAboutLabel()
if deltaAboutY < -50*15 then
formInfoWidth, formInfoHeight = control_getSize(formInfo)
deltaAboutY = formInfoHeight + 10
else
deltaAboutY = deltaAboutY - 1 -- если изменить 1 на большее значение, то текст будет двигаться менее плавно, но быстрее
end
control_setPosition(AboutLbl, 40, deltaAboutY)
end -
Не забудьте указать свой путь к треку с музыкой
function OnMusicStopAndExit(sender)
if (xmplayer_isPlaying()) then
xmplayer_pause()
else
xmplayer_resume()
end
form_hide(formInfo)
end
deltaAboutY = 0
function timerGUIAboutLabel()
if deltaAboutY < -50*15 then
formInfoWidth, formInfoHeight = control_getSize(formInfo)
deltaAboutY = formInfoHeight + 10
else
deltaAboutY = deltaAboutY - 1
end
control_setPosition(AboutLbl, 40, deltaAboutY)
end
function ShowFormInfo()
formInfo = createForm(true)
control_setCaption(formInfo, "About Trainer")
form_onClose(formInfo, OnMusicStopAndExit)
formInfoWidth, formInfoHeight = control_getSize(formInfo)
aboutPanel = createPanel(formInfo)
control_setPosition(aboutPanel, 10, 10)
control_setSize(aboutPanel, formInfoWidth - 20, formInfoHeight - 40)
AboutLbl = createLabel(aboutPanel)
deltaAboutY = formInfoHeight+20
control_setPosition(AboutLbl, 40, formInfoHeight+20)
baseString = " BLA .. BLA ... BLA ... BLA .. BLA ... BLA\n\r"
for i=1, 50 do
baseString = baseString..i..")" .." BLA .. BLA ... BLA ... BLA .. BLA ... BLA\n" --i .. ") ".. baseString
end
control_setCaption(AboutLbl, baseString)
btnAboutExit = createButton(formInfo)
control_setCaption(btnAboutExit,"Exit")
btnAboutExitWidth, btnAboutExitHeight = control_getSize(btnAboutExit)
control_setPosition(btnAboutExit, formInfoWidth - 3 - btnAboutExitWidth, formInfoHeight - 3 - btnAboutExitHeight)
control_onClick(btnAboutExit, OnMusicStopAndExit)
form_centerScreen(formInfo)
xmplayer_playXM('C:\\Users\\master\\Desktop\\Gamehack\\CE\\CETrainer\\TrainerTest\\Trainer_GameHackLab[RU]\\GameHackLab[RU]_Trainers\\Resources(v1.0)\\musics\\SnD - Ahead DVD Ripper 2.4.1 kg.xm')
if timerGUIAbout == nil then
timerGUIAbout = createTimer(formInfo,false)
timer_setInterval(timerGUIAbout, 20)
timer_onTimer(timerGUIAbout, timerGUIAboutLabel)
end
timer_setEnabled(timerGUIAbout, true)
end
ShowFormInfo()formInfo = nil
-
Ramil, это надо писать Дарк Байту на английском. на его форуме.
Ошибка похоже связана с тем что не хватает где-то места для записи 753 МБ. Происходит исключительная ситуация и исключение это заведомо не обрабатывается так чтобы продолжить сканирование, а просто как видим выдаётся сообщение.
-
К тому же, сообщение WM_NCLBUTTONDOWN предназначено как раз для обработки нажатия мыши на окне без заголовка.
Такого предназначения в MSDN не указано. И вообще формулировки о том, что это сообщение предназначено для чего-то нет. Есть описание в связи с чем это сообщение появляется. И появляется по клику по не рабочей клиентской области и это не только заголовок. Никакой речи не может быть чтобы рекомендовалось или только использовалось WM_NCLBUTTONDOWN с HTCAPTION. Есть только одна рекомендация, где-то я её видел. Использовать только документированные функции и константы. В примере который я привёл одна из "переменных" не документирована в winuser.h.
-
Это для тех кто заходит в первый раз и для тех кто выключает какиезы.
-
Читайте статьи и форум.
Ваш вопрос это вопрос "новичка",а новичок должен учиться самостоятельно по существующим статьям, видео и т.п. Если хотите больше шансов на ответ, то нужно задавать более конкретные вопросы, предоставляя больше начальной и подробной информации.
По поводу скорострельности и отдачи боюсь, если Вам ответят как это сделать Вы все равно ничего не поймете. Кстати и не каждому это под силу.
-
Поправьте это безобразие:
PS: Браузер Мозила.
Исправлено мной спустя год )
-
control_setPosition() - устанавливает позицию объекта TControl или объекта, который наследует класс TControl.
Файл примера:
Статья:
Перетаскиваемая форма на Lua.rar
Код из статьи:
dragTimer = nil
function OnTimerDrag()
mx,my = getMousePos()
control_setPosition(UDF1, mx+dx, my+dy)
end
function CEImage1MouseDown(sender, button, x, y)
if dragTimer == nil then
dragTimer = createTimer(UDF1, false)
timer_setInterval(dragTimer, 10)
timer_onTimer(dragTimer, OnTimerDrag)
mx,my = getMousePos()
x, y = control_getPosition(UDF1)
dx = x - mx
dy = y - my
timer_setEnabled(dragTimer, true)
return
end
if not timer_getEnabled(dragTimer) then
mx,my = getMousePos()
x, y = control_getPosition(UDF1)
dx = x - mx
dy = y - my
timer_setEnabled(dragTimer, true)
end
end
function CEImage1Click(sender)
if dragTimer == nil then
return
end
if timer_getEnabled(dragTimer) then
timer_setEnabled(dragTimer, false)
object_destroy(dragTimer)
dragTimer = nil
end
end
function CEButtonExitClick(sender)
closeCE()
return caFree
endform_show(UDF1)
Пока не могу выделить время на публикацию статьи на главном сайте.
-
Пример, который я предложил Дарк Байту.
function FormMouseDown(sender, button, x, y)
ReleaseCapture() // новая функция
frmHandle = wincontrol_getHandle(UDF1) // новая функция
if frmHandle==nil then
return
WM_SYSCOMMAND = 274
SendMessageA(frmHandle,WM_SYSCOMMAND,0xF012,0) // новая функция
endНадеюсь он введёт поддержку. Ну а до тех пор, проще всего сделать движение формы за мышкой по текущим и новым её координатм обрабатывая события удерживания и отпуска.
--------
Я всё-таки решил тебе чуть помочь, потому что понял, что по первому способу у тебя трудности. Тем не менее тебе ещё предстоит написать dx и dy работу для того чтобы курсор мышки был там где он должен быть а не в левом верхнем углу при перетаскивании.
На форме UDF1 есть картинка. Когда на картинку нажали или был клик, то ставим булевы переменные. Таймер работает по логике этих переменных. В данном коде курсор всегда будет в верхнем левом углу и только при клике на картинку. Остальное предоставляю тебе доработать самому.
form_show(UDF1)
isMouseDown = false;
isMouseUp = false;
--dx = 0
--dy = 0
function OnTimerDrag()
if isMouseDown then
mx,my = getMousePos()
--dx = dx - mx
--dy = dy - my
--x, y = control_getPosition(UDF1)
control_setPosition(UDF1, mx, my)
end
end
timer1 = createTimer(UDF1)
timer_setInterval(timer1, 50)
timer_onTimer(timer1, OnTimerDrag)
function CEImage1MouseDown(sender, button, x, y)
isMouseDown = true
isMouseUp = false
end
function FormClick(sender)
isMouseDown = false
isMouseUp = true
endНу и на всякий случай, таблица в формате .CT.
Откроешь таблицу.
Согласишься запустить Lua -скрипт.
Удерживаем левую кнопку мышки на картинке и тянем куда-нибудь и видим перемещение.
-
По точнее не могу объяснить
Как я писал используй первый способ.
Простой способ 1: перемещать форму за курсором когда нажата левая кнопка мышки. Это способ можно найти в Интернете задав запрос "перемещение формы за курсором" -
Если было бы именно так просто, то я бы наверняка написал бы готовый ответ
Речь идёт о Lua-Engine поддержке, а не о полноценном языке программирования под Windows.
1) Lua-engine явно не поддерживает посылку сообщений: SendMessage(Handle,WM_NCLBUTTONDOWN,HTCAPTION,0)
2) Явно не поддерживает поиск дескриптора окна.
3) Мелочь, но все же, имхо, некрасиво эмулировать HTCAPTION, когда заголовка в окне не видно. Если делаем перетаскивание, то делаем его через WM_SYSCOMMAND и SC_DRAGMOVE.
Первый и второй пункт означают, что нужно изворачиваться с автоассемблером совместно с Lua-Engine. Вижу несколько способов решения с таймером/потоком или тот способ который я описал. Да, ещё один способ написать Даркб Байту чтобы ввел поддержу работу с дескрипторами форм.
-
Данную функцию нужно писать.
Простой способ 1: перемещать форму за курсором когда нажата левая кнопка мышки. Это способ можно найти в Интернете задав запрос "перемещение формы за курсором"
Самый красивый способ 2 это сделать инъекцию кода в процесс CE с помощью АА-скрипта на обработку любых поступающих сообщений в форму трейнера с выполнением следующего условия. Если было сообщение о нажатии левой кнопки мышкив окне трейнера, то выполнить внутри
Новая память:
WM_SYSCOMMAND = 0x0112;
SC_DRAGMOVE = 0xF012;
ReleaseCapture();
SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);
Возврат назадЕстественно этот код нужно написать на автоассемблере и это надо сделать на Lua-Engine открыв процесс CE и на том же Lua коде использовать функцию выполнения скрипта автоассемблера. Сделав инъекцию кода можно спокойно отключиться от процесса CE. Если это автономный трейнер, то нужно делать инъекцию в процесс этого трейнера и затем отключиться от него.
-
memcpy((void*)4553935, "\x75\x12", 3);
Вместо "\x75\x12" должен быть указатель на данные.
-
Как уже написали у версии CE 6.1 проблемы с кодировкой. А точнее с ANSI и UTF8. В CE 6.1 не используйте русские символы: ни в таблицах, ни в трейнерах, не в формах, не в путях каких-либо, ни в комментариях. Используйте только английский язык.
Русский текст можно делать на картинках.
В CE 6.2 этих проблем не будет, т.е тех о которых сообщали Дарк Байту.
-
А что сложного?
В "документации" всё написано ( все функции написаны в main.lua, который лежит в папке с CE )
Предполагается, что фай музыки добавлен в ресурсы.
Создана форма и на форме есть кнопка, у которой есть событие CEButton1Click
musicName = 'music.xm'
XMFILE=findTableFile(musicName)
if (XMFILE==nil) then
print('Er.: File '..musicName..' is not found!')
setProperty(CEButton1, "Caption", "Er.")
else
xmplayer_playXM(XMFILE)
setProperty(CEButton1, "Caption", "Music On")
end
function CEButton1Click(sender)
if xmplayer_isPlaying() then
xmplayer_pause()
setProperty(CEButton1, "Caption", "Music Off")
else
xmplayer_resume()
setProperty(CEButton1, "Caption", "Music On")
end
end
Создаем Трейнер на C#
in Создание трейнеров в специальных студиях
Опубликовано
1) Да исключения хорошо было бы обрабатывать, если они возникают хотя бы два: нет процесса, нет доступа к адресу.
2) По поводу вновь создаваемого
Так можно писать и возможно даже нужно в данном случае, т.к. нет кода поиска процесса или его запуска и подразумевается, что трейнер будет работать, если игра будет открыта и закрыта несколько раз (типа подстраховки, чтобы не запускать трейнер вновь). Помним, что сборщик мусора следит за "мусором в памяти" и можно писать new в случаях, когда он не очень часто применяется.
3) Ну и наконец неплохо бы использовать такой метод как инкапсуляция и по возможности не писать код в одну строчку.
На ошибки я не проверял...