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

CE 6.6 Lua скрипт "Рабочий адрес среди не рабочих"


MasterGH

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

Бывает отсеиваем адрес, а адресов бывает 10, 20, 100 и более.

Значения одинаковые и не хотят отсеиваться.

Чтобы вручную не искать рабочий адрес (заморозками, изменениями значений) можно попробовать воспользоваться скриптом Lua, который я написал.

 

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

function SetRedColor(memoryRecord)	memoryRecord.Color = 255 end

local addressList = getAddressList()
local countRecords = addressList.Count

for index = 1, countRecords do
	local memoryRecord = addressList.getMemoryRecord(index-1)
	-- Поддержка типов от vtByte до vtDouble
	if (memoryRecord.Type <= 5) then
		memoryRecord.Description = index + 1
		memoryRecord.Value = index + 1;
	end
end

if (messageDialog('Если значения изменились от порядковых 2,3,4,5 и т.д, то нажми "ок". Если нет или ты не понял, то зайди в игру и что-то сделай в ней. Вернись и нажми "Ок". Красным цветом выделится один рабочий адрес', mbHelp, mbOK) == mrOK) then
	for index = 1, countRecords do
		local memoryRecord = addressList.getMemoryRecord(index-1)
		-- Поддержка типов от vtByte до vtDouble
		if (memoryRecord.Type <= 5) then
			if (memoryRecord.Description == memoryRecord.Value) then
				SetRedColor(memoryRecord)
                memoryRecord.Description = 'Рабочий адрес'
			end
		end
	end
end

 

 

Я тестил этот скрипт на игре TimeShift при поиске патронов на пистолете. Рабочий адрес определился верно после захода в игру, возврата и нажатия на кнопку Ок.

 

5852b08e533ca_.thumb.png.d6e06f199e09f99

 

Логика работы

Значения и имена адресов заполняются порядковыми номерами. Идем в игру. Игра перезаписывает значения "по рабочему адресу". Скриптом сравниваем рабочий адрес и значение, и красим в красный цвет эту запись.

 

Недостатки:

1. Таблица CE должна хранить адреса среди которых ищем, без других записей (без АА скриптов, без читов и т.п.)

2. Типы данных целые, что будет с float или другими не тестил

3. Копировать/вставлять Lua скрипт и выполнят его, вместо клика по контекстному меню

 

Вот когда не отсеиваемых адресов этак за 100 штук, то наверно этот скрипт бы пригодился, чтобы вручную не искать.

 

Сделал пока так, а дальше посмотрим.

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

2 минуты назад, Xipho сказал:

Удобный инструмент, надо будет потестировать.

Это ты наверное Хипхо о Doome подумал :) В котором у тебя много адресов было...  Подобное конечно не часто встретишь, но всё же... 

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

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

2. Типы данных целые, что будет с float или другими не тестил

C float работает. 

C byte выделяет все адреса рабочими. В которых значение может быть только 1 или 0.

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

Да, с порядком может быть проблема, когда значение должно быть 0, 1 или вещественные 0,0-1,0.

 

Пока идеи такие

1. Делать заморозку процесса перед записью всех значений, чтобы не успели поменяться. Есть игры, которые работаю в фоном режиме.

2. Сделать как плагин и пункт в контекстное меню. Еще подумать над этим как удобнее. Окон новых не хочется и не хочется чтобы в таблице CE находилось много адресов. Скорее всего, будет контекстное меню над областью найденных адресов (там где адреса отображаются после отсева)

3. Подумать над порядком значений и типами.

 

Скачать игры, где много рабочих и не рабочих адресов и на них потестить. Помню HalfLife здоровье. Конечно, Doom как на видео.

 

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

Обновление

1. FindMasterAddress.lua

2. Репозиторий

 

Для установки плагина перетащить lua файл в папку autorun.

 

Подсказка как пользоваться. Ищем адреса как обычно, кроме типов: "строк", "цепочки байт", "всех типов", "группа поиска" и "бинарный". Если настал момент, что адреса ну никак не отсеиваются до одного, то на области адресов вызываем всплывающее меню правой кнопкой мыши и активируем опцию

 

585509139ac87_2.thumb.png.d8de0fbf9a5867

 

Потом начнут появляться последовательно окна:

1. Ввод стартового значения. По умолчанию 2,  можно брать другое.

2. Ввод максимального значения. Оставить по умолчанию или написать свое. Если адресов будет больше чем максимальное значения, то запись по адресам будет продолжаться со стартового значения

3. Диалог с информацией. Заходим в игру, выходим. В игре ничего не делали, т.е. не изменяли значение рабочего адреса. Жмем ок и рабочий адрес добавляется в таблицу.

 

Тестил с типом integer. Остальные типы еще на проверке.

 

P.S. Что интересного в скрипте.

1. Пример того как писать и читать тип word и byte через Lua.

2. Встраивание меню и подписка на событие показа меню. В функции-обработчике делаем меню активным или не активным, когда можно или нельзя пользоваться

3. Узнать тип поиска из формы Cheat Engine.

4. Чтение данных адресов, которые были найдены при поиске

5. Ну, и добавление записи в таблицу адресов

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

:offtopic:Мастер, а на пример функцию завершения процесса, можно реализовать в СЕ  

То есть смотри, вот я щас на пример ковырялся в игре и сделал кое что не так и игра просто зависла и всё. Не мышки нет на раб столе не чего нет.. Задачу не снимешь в диспетчере тоже - так как мыши нет, да и окно игры перекрыло панель эту.. В СЕ же есть функция заморозки процесса, а если сделать что нажал на клавишу - бам и процесс отвалился :rolleyes: К игре же СЕ подрублен, а значит как процесс морозит, так же его и снять может. Эта функция не плохая в обще и очень полезная.. Я вот щас на пример сидел пол часа, искал гранаты какие то кодированные в Сталкере - осталось 4 адреса, я их на отладчик посадил, иструкции посмотрел, но только решил попробовать, да видать что то сделал не так и всё игра встала.. Единственный выход - это выход из системы, так как он быстрее перезагрузки, но данные то уже потеряны и искать по новой надо.. Наверное скажешь, надо сохранить было, а потом уже пробовать - но игра встать может даже во время пробы и вот снять бы задачу как бы в СЕ реализовать возможно эту... Прям очень удобно было бы.

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

Надо гуглить.

Либо shellExecute(command, parameters OPTIONAL, folder OPTIONAL, showcommand OPTIONAL): Executes a given command
Либо сторонняя программа.
Либо инжект в саму CE и исполнение.

 

Я всегда игры ставлю в оконный режим и у меня никогда таких проблем не бывает. Если что-то подвисает очень редко и намертво, то "Process Explorer" убивает игру спокойно.

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

19 час назад, LIRW сказал:

Единственный выход - это выход из системы, так как он быстрее перезагрузки, но данные то уже потеряны и искать по новой надо..

А в Диспетчере задач убить процесс?

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

29 минуты назад, Garik66 сказал:

А в Диспетчере задач убить процесс?

Игорь - там в обще окно игры всё блокирует... Единственный выход из подобной ситуации, это жать выход из системы и всё. Есть такие игры чудные - вот как раз Сталкер и она не единственная такая, где окно если зависнет - то всё. Либо аварийная перезагрузака, либо выход из системы,а с нею и потеря данных. Надо как не будь дарк байту намекнуть. Ну а что Игорь - процесс замораживает и к нему подключен, а значит на клавишу и завершить его можно реализовать. Не уж то у тебя не разу подобного не было ? :) Есть такие игры и они обычно такого раритетного образца. 

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

1 минуту назад, LIRW сказал:

Не уж то у тебя не разу подобного не было ? 

Сталкивался, действительно всё висло и как ты и написал - использовал выход из системы, а потом уже по новой вход, загрузка игры и т.д.

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

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

Я всегда игры ставлю в оконный режим и у меня никогда таких проблем не бывает.

Мастер я тоже был в оконном режиме - Сталк завис и всё... Это окно какое то как буд то оно всё перехватывает - ну не шеволится мышка (её по сути в обще нету на рабочем столе) после зависания игры. Диспетчер задач не проблема вызвать, но мышки то нет. И окно перекрывает его - как буд то у него функция такая по верх всего работать. Игра кстати по дифолту от админа работает, а значит наверное и делать может что угодно. Есть же игры такие настырные, которые даже в окно не как не свернуть. 

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

9 минут назад, Garik66 сказал:

Сталкивался, действительно всё висло и как ты и написал - использовал выход из системы, а потом уже по новой вход, загрузка игры и т.д.

Вот я об этом моменте и говорю. А вот представь кнопка была завершения процесса в СЕ бам и завершили бы.. Я вот видел на пример, что СЕ сам то активен и замораживает процесс игры, даже после её зависания, а значит он бы и снять смог этот процесс. Вот эта опции именно хороша - что бы данные не потерять, а более она не к чему. 

PS: 

Игорь я не буду цитировать, а тут допишу... Что СЕ сам активен - я прям видел, что процесс и замораживается и размораживается. Ты видать просто писал и не успел прочитать сообщение моё и отправил уже своё. Да и ещо одно - Игорь я прям мог переключится на любое окно активное, но в этом окне не чего не сделать - так как мышки нету. А вот клавиша думаю бы сработала на завершения.. 100% не уверен - это надо думаю тестировать всё, а пока и функции то этой нету. Её же дописать не сложно - главное знать как :) 

Просто вот по сути если подумать - то СЕ подрублен к процессу игры, а если он его замораживает и размораживает, значит может и вырубить его. 

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

5 минут назад, LIRW сказал:

Есть такие игры и они обычно такого раритетного образца. 

ЗЫ: только я ещё не всё дописал - доступа к СЕ тоже нет (после зависания), так что опция, которую ты хочешь скорее всего будет бесполезная.

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

20 часа назад, LIRW сказал:

:offtopic:Мастер, а на пример функцию завершения процесса, можно реализовать в СЕ  

Можно, и это не сложно. Протестируй.
Закинуть в папку autorun директории СЕ. Активация по клавишам F12+Delete.

KillProcess.lua

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

9 минут назад, Vlad2 сказал:

Закинуть в папку autorun директории СЕ. Активация по клавишам F12+Delete.

Испытаем - Спасибо!:) кнопки случай чего свои там подрисовать можно.. Как подобная проблема опять возникнет - проверю сразу. Так как надо именно момент зависания, а не что бы возник краш игры, а тут раз на раз не приходится.

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

1 час назад, LIRW сказал:

я прям мог переключится на любое окно активное, но в этом окне не чего не сделать - так как мышки нету

 

Помню у меня тоже было пропадание курсора мышки. Точнее мышка работает, но ты не видишь курсора. Это было на играх про Сталкера, то ли в пошаговой отладке, то ли при брейкпоинтах с остановкой процесса. Вот только я не помню способ как я курсор включал.

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

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

Точнее мышка работает, но ты не видишь курсора. Это было на играх про Сталкера

Мастер игра как раз Сталкер... в принципе я и имел введу курсор мыши, а то не то, что прям сама мышка не работает. Ну думаю тут и так понятно, что я имел введу. Подобная проблема не только на такой игре как сталкер возникает. Обычно она возникает на старых играх - это когда оконный режим был ещо не так продвинут и игры то бывает не как не скинешь в трей. Вот на подобной игре если зависнуть - то всё... На мертво.

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

10 минуту назад, LIRW сказал:

 кнопки случай чего свои там подрисовать можно.

Можно:

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

createHotkey(function() os.execute('taskkill /PID '..getOpenedProcessID()..' /F /T') end, VK_F12, VK_DELETE) -- меняй на свои

 

 

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

Я еле-еле вспомнил. Я включал курсор двумя способами. Первый способ очень костыльный вспомнил, а второй не помню.

 

Была у меня такая платная программа для снятия скриншотов Snagit. Если её умудришься запустить без мышки, с помощью клавиатуры из меню "Пуск", то после запуска и нажатия на кнопку "Prt Scr" на клавиатуре курсор появится. Если Snagit запускать при старте системы, то просто нажимаешь на клаве "Prt Scr" и курсор появляется.

 

Есть какие-то функции из API, которые работают с курсором. Если поковыряться, то я думаю, можно найти решение через Cheat Engine.

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

  • 1 месяц спустя...
В 19.12.2016в22:43, LIRW сказал:

Единственный выход из подобной ситуации, это жать выход из системы и всё.

А если вместо выхода из системы попробовать заблокировать комп (Win+L) и разблокировать - не поможет? Тогда ничего не потеряется, открытые программы не закроются. Мне вроде бы помогало, но со Сталкером не пробовал.

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

12 минуты назад, aliast сказал:

А если вместо выхода из системы попробовать заблокировать комп (Win+L) и разблокировать - не поможет?

Я не пробовал так... Как не будь попробую - ну как ещо подобная игра попадется. Подобное обычно только в старых играх случается и особенно часто в тех, которые не имеют оконного режима - да какой там оконный, они даже не сворачиваются в трей. Вот игра то про вампиров с кубиком то ещо как то обсуждали - там надо за определенное время семью спасти и через какое то время 1 член семьи умирает. Так вот у меня когда был монитор под 1024х768 максимум - прям свернуть и развернуть можно было за просто, а щас вот стоит 22 и уже и не свернуть, а если даже каким то способом это и получится, то уже её не развернуть... 

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

×
×
  • Создать...

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

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