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

Окно String Map + Сохранение Данных (Заготовка Lua Plagin)


MasterGH

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

Зачем собирать текст из памяти игры?

Если из огромного количества строк наудачу найти слова похожие на настройки, то можно поставить бряк на чтение перед запуском игры. Если во время запуска игры или её отдельного уровня бряк сработает, то можно (опять же наудачу) увидеть в пошаговой отладке параметр настройки. Он может быть любого типа. Это может быть число целое, число вещественное, текст. Положение может быть в регистрах или стеке 

Как искать текст в памяти игры?

Подключаем процесс к CE

Начинаем игру

Идем из главного окна в CE по кнопке Memory View в окно дизассемблера

В окне дизассемблера идем в меню как на скриншоте

post-3-0-51701600-1426434221_thumb.png

Выбираем опции сканирования и запускаем Generate String Map

После того как поиск начался и завершился (или был прерван), то нажимаем на ShowList. Получаем текст в окне

post-3-0-66307200-1426434343_thumb.png

 

Как сохранить текст в файл?

Из главного окна CE вызываем консоль Lua

post-3-0-44351700-1426434532_thumb.png

Вписываем скрипт, который я написал ниже

post-3-0-17129400-1426434538_thumb.png

Выполнить скрипт, нажав на кнопку Execute Script. Появится диалог с выбор директории и выбором названия файла. После подтверждения у нас будет файл с текстом *.txt

 

Как работать с *.txt файлом?

Существует множество редакторов с регулярными выражениями поиска и замены текста. Хотя можно использовать простой поиск. Пример использования поиска на NotePad++ после сортировки и удаления одинаковых слов.

Если есть вопросы по работе с NotePad++, то поищите в Интернете.

post-3-0-05094900-1426434543_thumb.png

isSorted = trueisCaseSensitive = falsemaxCountLines = 100000function FindForm(formName)	local formCount = getFormCount()	for i=0, formCount-1 do		if(getForm(i).Name == formName) then			return getForm(i)		end	endendfrmSaveDialog = nilfunction SaveToAdressesList(path)	local frmStringMap = FindForm("frmStringMap")	local stringMapListView = frmStringMap.findComponentByName('ListView1')	local items1 = stringMapListView.Items	local linesCount = items1.getCount()	local stringList = createStringlist()	if(linesCount > maxCountLines) then		linesCount = maxCountLines	end	for i=0, linesCount-1 do		local subItems = items1.getItem(i).subItems		local itemCount = subItems.getCount()		stringList.add(string.format('%s %s', subItems[0], items1.getItem(i).Caption))	end	stringList.CaseSensitive = isCaseSensitive	stringList.Sorted = isSorted 	stringList.saveToFile(path)	stringList.destroy()endfunction OnCloseSaveDialog(argFrmSaveDialog)	local path = argFrmSaveDialog.FileName	SaveToAdressesList(path)endif(frmSaveDialog == nil) then	frmSaveDialog = createSaveDialog(nil)endfrmSaveDialog.DefaultExt = '.txt'frmSaveDialog.FileName = fileNamefrmSaveDialog.Filter = '*.txt'frmSaveDialog.FilterIndex = -1frmSaveDialog.OnClose = OnCloseSaveDialogfrmSaveDialog.Execute()
Ссылка на комментарий
Поделиться на другие сайты

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

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

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