MasterGH Опубликовано 15 марта, 2015 Поделиться Опубликовано 15 марта, 2015 Зачем собирать текст из памяти игры?Если из огромного количества строк наудачу найти слова похожие на настройки, то можно поставить бряк на чтение перед запуском игры. Если во время запуска игры или её отдельного уровня бряк сработает, то можно (опять же наудачу) увидеть в пошаговой отладке параметр настройки. Он может быть любого типа. Это может быть число целое, число вещественное, текст. Положение может быть в регистрах или стеке Как искать текст в памяти игры?Подключаем процесс к CEНачинаем игруИдем из главного окна в CE по кнопке Memory View в окно дизассемблераВ окне дизассемблера идем в меню как на скриншотеВыбираем опции сканирования и запускаем Generate String MapПосле того как поиск начался и завершился (или был прерван), то нажимаем на ShowList. Получаем текст в окне Как сохранить текст в файл?Из главного окна CE вызываем консоль LuaВписываем скрипт, который я написал нижеВыполнить скрипт, нажав на кнопку Execute Script. Появится диалог с выбор директории и выбором названия файла. После подтверждения у нас будет файл с текстом *.txt Как работать с *.txt файлом?Существует множество редакторов с регулярными выражениями поиска и замены текста. Хотя можно использовать простой поиск. Пример использования поиска на NotePad++ после сортировки и удаления одинаковых слов.Если есть вопросы по работе с NotePad++, то поищите в Интернете.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() Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения