Перейти к содержанию
  • запись
    81
  • комментариев
    97
  • просмотров
    4959

Записи в этом блоге

 

Задачка по IDA и Python

Вдохновение появилось после просмотра видео @Xipho по Ultimap Когда в Ultimap появляются Nx адресов с одним счетчиком, то хочется увидеть эти связи на графиках IDA. Появилась идея загуглить как в IDA через IDC скрипт отрисовать ветвь кода или ветви кода, на которых эти самые адреса связаны между собой, а все вложенные другие скрывать.   Пока из подсказок я нашел это и это   Допустим для тренировки даны два адреса из одной ветви кода (это я точно знаю, т.к. получен не из ultimap, а из tracelog)     Адрес1 - Tutorial-i386.exe+2578F - 29 83 AC040000        - sub [ebx+000004AC],eax" или адрес 0x00402B77
Адрес2 - Tutorial-i386.exe+16DBED - 89 45 FC              - mov [ebp-04],eax или адрес  0x0056DBED   И вот думаю, как  скрипт ниже переделать, чтобы сначала вывести текстовый маршрут, а потом и хотя бы одну ветвь кода. Т.е. поднимаясь вверх по иерархии вызовов нужно остановиться до Адреса2.     Пока просто вывод от стартовой функции без условий   Как будет время попробую доделать...   p.s. Ну ничего так idc скрипты. Много всего, но смысл тот же, что и в CE Lua у некоторых функций. Еще не разобрался как Python подключить к IDA, пока на idc скриптах. Будет интересно еще посмотреть эту же задачу на Hydra и Radare, ну и в CE (в новой версии появилось окно диаграмм)  

MasterGH

MasterGH

 

Составление критериев в к плагинам Cheat Engine

Для тех кому интересно, вопрос к ним. Какие критерии можно добавить спрашивая оценку плагина? Например, по 5-ти бальной шкале спрашивать оценку у пользователей:   Необходимость плагина в Cheat Engine Работает без ошибок                            Понятно как пользоваться Интерфейс плагина Удобство плагина Нравится Простая установка   Думаю, прикрутить аналитику прямо в плагины. Там будет как аналитика использования плагина, так и будет опросник выше. Ну и пользовательское соглашение об анонимном сборе данных для улучшения качества приложения. Чтобы можно было улучшать только те плагины, которые устанавливают и которыми пользуются.

MasterGH

MasterGH

 

User Action Logger 1.0 Beta

Обновлен и залит плагин "User Action Logger 1.0 Beta"      Для тех кто хочет, для поддержки плагина или других плагинов для CE принимаются пожертвования: yandex кошелек: 410015719959843  (можно добавить сообщение "Плагины CE" как примечание при переводе или иное)
paypal: masterGH.developer@gmail.com (тоже самое, добавьте сообщение "Плагины CE" как примечания при переводе или иное)

MasterGH

MasterGH

 

Разработка плагинов для Cheat Engine

Планируется улучшать и дорабатывать плагины, показать как с ними работать.   1. Вывод данных в окно логов: сканирование, подключение к процессу, опции сканирования, состояния активации и деактивации записией в таблице CE и другие 
2. Запись действий из пункта 1, сохранение этих действий и воспроизведение по кнопке или горячим клавишам
3. Показ в дизассемблере CE ветвлений кода при проходе потоками разными цветами (можно видеть код, который не был пройден в разных ситуациях)
4. Дополнительное окно дизассемблера с опциями подсветки инструкций по типу в градации черно-белых цветов: математические инструкции, логические инструкции, инструкции ветвления, на чтение и запись. 
5. Улучшение плагина "Dessect Data Scanner" с DBVM или на 4-HW брекйпоинта. В случае DBVM количество брейкпоинтов не ограничено и можно определить тип данных одновременно для каждого байта в структуре по смещениям, а в случае 4-х байтов это в режиме без DBVM одновременно задействуются все 4 hw брейкпоинта, а не 1 hw как сейчас.   Улучшения возможны при добровольной материальной поддержке для тех кто хочет yandex кошелек: 410015719959843  (добавьте сообщение "Плагины CE" как примечание при переводе)
paypal: masterGH.developer@gmail.com (тоже самое, добавьте сообщение "Плагины CE" как примечания при переводе)   На данный момент список плагинов https://bitbucket.org/MasterGH/   Extensions: 

MasterGH

MasterGH

 

Unreal Engine 4.22. Как захотеть делать игры

У меня бывают такие случаи, когда увидишь простой пример кода после которого захочется заняться разработкой какой-нибудь игры.  Вот один из таких примеров о том, как сделать подъем и опускание предмета и затем его вращение. Это 5 строчек "таких" и 5 строчек "таких", вот подъем и вращение   На видео код можно применять для левитации предметов и вражеских персонажей, которых  можем поднимать, удерживать и бросать.    Если кто-то очень хочет узнать как сделать бросок предметов и персонажей на тестовых проектах игровых движков Unity и UE4 , то по желанию можно поддержать меня лично донатом: yandex кошелек: 410015719959843  (добавьте сообщение "Левитация" как примечание при переводе)
paypal: masterGH.developer@gmail.com (тоже самое, добавьте сообщение "Левитация" как примечания при переводе)

MasterGH

MasterGH

 

Программирование с помощью патернов проектирования

Отличная книга по изучению паттернов проектирования. Ее можно читать со шпаргалкой по паттернам (иллюстрацию по паттернам можно загуглить). Перед этим еще загуглить SOLID + Unity . До кучи еще алгоритмы и структуры данных.  Все это  пригодится, чтобы пойти работать на программиста игр или приложений с разными типами реальности: дополненная, виртуальная и смешанная. А так же сейчас можно встретить вакансии по программированию не только Android, iOS устройств, шлемов и очков, но различных устройств и дронов. Об алгоритмах может быть позже напишу

MasterGH

MasterGH

 

Lua плагины в CE

Нет времени, пока напишу заметки.   1. Можно сделать плагин с визуализацией счетчиков обращений к видимым данным в MemoryView с подключенным DBVM. 2. По аналогии в Dessect Data Scanner сделать выбор DBVM режима.   DBVM позволяет обойти ограничение в 4 аппаратных брейкопинта и в реальном времени визуализировать данные, которые обращаются к памяти на чтение, запись. Показывать счетчик обращения и даже показывать спискок инструкций при наведении курсором на байт или иные данные в MemoryView. В случае c Dessect Data Scanner может ускорить расструктуризацию, а не по 1-ому брейкпоинту снимать показания X секунд пробегаясь по структуре.   Кстати, кто-нибудь шарит в алгоритмах, структурах данных и паттернах проектирования? Если шарите, поделитесь в каких задачах применяли.  

MasterGH

MasterGH

 

О новинках в мире. Виртуальная реальность и другое..

Unity + ARKit 2.0 + Apple Device + iOS > 12.x  позволят сканировать через визуальную одометрию реальный мир и расставлять в нем виртуальные объекты и загружать их в точные места, куда раньше поставили. Особенность в том, что чем больше информации собрали физической камерой из разных положений и углов, тем больше шансов, что увидим объекты именно там куда их поставили. Это еще классно тем, что карту мира можно расширять, сохранять, загружать, передавать в реальном времени на разные устройства в мультиплеере. Далее ArKit похож на ArCore и Vuforia, EasyAR и т.п. сканируя изображения - маркеры, 3d-фигуры, сканирование плоскостей... И короче говоря,  могу добавить, что ARKit интересная штука.    Шлем и система виртуальной реальности + Unity. Стоит такая штука за 100К в России. Хотя цены бывают разные. На работе есть такая система и в ней очень круто. Манипуляторами как реальными руками можно делать много интересных вещей в 3д-комнате, при чем отфотканной с высоким качеством. Брать 3д-вещи в руки как реальные. Вращать, менять положение, бросать и так далее. Также было интересно на крыше в демке  "человека-паука". Это пейзаж с крыши, надевание маски, стрельба, звуки. В общем можно в шлеме путешествовать просто сидя дома. Если на Unity шаришь, можешь что хочешь сделать с этим шлемом. 3д- двери открывать,  делать механику разную, делать игры, так и что-то с пользой придумать, если конечно придумать.   HaloLens - очки смешанной реальность. Стоят за 300К.  Они интересны тем можно связать обучение работы с приборами (с 30-той секунды). Сейчас тут взрослые люди обучаются, а могут так обучаться и дети, и студенты и взрослые.  Можно придумать: 1) куда идти в аэропорте, могут показать очки (а это для смартфонов, а не для очков, таскаться с ними еще) 1) как пользоваться плитой, стиральной машиной. телевизором... и другой техникой 3) как приготовить еду 4) ну и так далее...  Обучение программируется судя по видео С выставки. Самое интересное где-то с пятой минуты   Все идет к тому, что у всех вместо телефонов могут быть очки, а передвигаться мы будем все на колесе, самокате или летающей машине, или индивидуальном пропеллере. Если сейчас можно видеть как все гоняют на самокатах и некоторые на колесе, то может лет через 100-300 люди могут летать на работу на пропеллерах за спиной.  Также все идет к том, что работа будет для большинства становится удаленной или роботы будут заменять людей, или люди будут управлять роботами как аватарами. Ну а путешествовать на пропеллере лучше на отдыхе чем на работу)

MasterGH

MasterGH

 

Встраиваем C декомпилятор в CE 6.8.3

Вступление   В CE выделим участок кода и функцию Sub eax,edx - вычитание и наиболее значимее чем запись и чтение. После декомпиляции Если выделили две инструкции   Обращать внимание будем на математику, логику, условия и потом на чтение и запись. В данном случае, нужно найти вычитание из адреса "eax4->f1152 = eax4->f1152 - (eax3 + 1)"     Как поставить декомпилятор 1. С форума Cheat Engine качаем архив 2. Распаковываем в папку с Cheat Engine 3. В настройках открываем плагин cesmartdec.dll 4. Идем на инструкцию, выделяем функцию  5. Декомпилируем на первой выделенной инструкции из всех выделенных  

MasterGH

MasterGH

 

CE 6.8.2. Lua .Считаем размер инъекции в байтах

Пост для тех, кто интересуется Lua в Cheat Engine.    Можно подхватить разные моменты активации и деактивации записи в таблице CE и рассчитать размер кода между метками   1. По шаблону вставляем АА код для туториала Cheat Engine 2. Регистрируем метки-маркеры в АА коде 3. Этими метками в Lua считаем и выводим ""endCode - startCode" размер байтов   Пример, который подсчитал 15 байтов       Пример скрипта   Документация кому интересно  

MasterGH

MasterGH

 

Самое интересное в дополненной реальности

Дополненная реальность похоже на спецэффекты в кино, только на экране видим изображение получаемое с видео камеры, которой управляет пользователь.    Что интересно. Камера, которая есть у многих на телефоне и допустим некоторая программа с API(какой-нибудь дополненной реальности написанная вами) определяет, что происходит на изображении и по этим данным можно   1) определить плоскости реальные в нашем мире 2) определить положение объектов относительно друг друга в нашем мире 3) определить уникальные маркеры и изображения   Это было чтение данных, затем идет запись данных. На изображение накладывается поверх другое.   Чтение данных с реального мира и запись данных поверх изображения по данным чтения это основные процессы.   Что меня заинтересовало. Так это, что можно что-то делать в реальности, а камера будет писать программу. Самый простой пример. Берем маркер - бумагу с рисунком. Камера увидела и поставила на нем 3д-дом или светофор. Резко убираем маркер и дом остается в этом месте. Таким образом можно построить виртуальный город. Есть на Ютубе.   Теперь можно взять вместо 3д-дома, 3д-светофоров маркеры для выстраивания алгоритма программы. Таким образом направив камеру можно что-то подхватывать из дополненной реальности, вытаскивать,  размещать таким образом программируя действия без строчки кода.   Берем маркер А и рядом с ним ставим маркер S. Означает, чтобы запомнилось положение макера А в пространстве. Убираем маркер S. Далее ставим маркер R, означает запись движения. Далее перемещаем А на точку2. Убираем маркер R, что означает остановку слежеия за маркеромА. Далее ставим маркер P, который запускает движение 3д объекта связанного с маркером А.   Ну и так далее. Это очень интересно в плане программирования маркерами...   Видео по построению объектов в городе  

MasterGH

MasterGH

 

Временное отсутствие

Привет всем. Я думаю, что меня может не быть на форуме продолжительное время от 2х месяцев в связи с обстоятельствами. Переезд, поиск работы и семейные обстоятельства. Второй момент. Я создал кнопки яндекс кошелька в некоторых темах моего блога. Толку от кнопок нет, т.к. там все по нулям. Поэтому я их удалю. Lua плагины для CE пока делать нет возможности. До встречи в Москве! ) Буду искать работу в новой игровой студии уже в Москве

MasterGH

MasterGH

 

Плагин для ведения логов в CE

Плагин ведет историю поиска, отсева, отмены. Логи выглядят следующим образом Для чего может применятся На шаге отсева посмотреть в логах, какое значение искали до этого и какой способ поиска использовали. При неудачных поисках мы просматриваем как и что мы сканировали раньше. Если вообще ничего не получается при сканировании, то логами можно обмениваться. Горячие клавиши, которые настраиваются из окна настроек CE работают и в логах.   Установка: скопировать GHL_log.lua в директорию "/autorun" Lua скрипт:  В комментариях можно написать про ошибки или про идеи улучшения плагина.

MasterGH

MasterGH

 

CE 6.8 Обзор нового инструмента поиска по структурам

1. Открываем trainme Dark Byte. 2. Проходим первый шаг (там нужно сделать One Hit Kill чит через прогресс бар, количество патронов тоже интересно поломать) 3. Так вот на Step2  ищем адрес здоровья нашего космического корабля. Ставим брейкпоинт на доступ, стреляем. Видим, три адреса и вот теперь новые функции в контекстном меню как на скриншоте   На "(1)-(2)" - вызываем контекстное меню выделив адрес своего корабля и добавляем его в группу1. Тоже самое делаем для красных адресов кораблей противников На "(2)" вызываем опцию сканирования и видим "(3)" На (3) выбираем скан по RAX или по другим значениям. Например, когда по RAX не нашли ничего.   Дальше видим окно и галку ставим "Only find matching groups" и сканим. Видим результат    Т.е. по +70 и другим смещениям можно сделать фильтр свой - чужой.  В общем замечательный инструмент для работы со структурами с заданием уровня сканирования по оффестам

MasterGH

MasterGH

 

Обработка исключения в Cheat Engine AA

Новые директивы try/except в AA доступны Cheat Engine 6.8 Beta2   Задача  try/except в AA обработать исключение, не допустить crash. Чтобы игра продолжалась, а чит в лучшем случае не закрыл бы процесс. В теории возможно определить, что был crash и что-то сделать. Например, отправить логи в свой или иной удаленный сервис аналитики, что такой-то чит не сработал...   Пример от DarkByte для  try/except с счетчиком crashes    

MasterGH

MasterGH

 

Обработка исключения в Cheat Engine Lua

pcall() функция может вызывать функцию, которая может вызывать исключение. Возвращает статус в виде булевой о том, есть ли исключение или нет и возвращает текст исключения.    Источник   Как этим пользоваться? Если вдруг знаем, что может произойти ошибка, то можно её обработать и выполнить правильное действие не останавливая работу Lua скрипта. Или например если  не выполняется условие, то можем сами создать ошибку с помощью функции error, что остановит скрипт.

MasterGH

MasterGH

 

Интересные программы

1. WebSite-Watcher позволяет отслеживать изменения на веб-страницах в том числе по по регулярным выражениям. Можно отслеживать изменения на сайтах Cheat Engine и других. Форум отслеживать смысла особого нет. Проще подписаться на обновление и почтовый клиент поставить. 2. Программы тестирования и автоматизации под разные ОС:     Sikuli — открытая кросс-платформенная визуальная среда создания сценариев-скриптов     AirTest IDE — почти как Sikuli и более того, китайские разработчики были вдохновлены Sikili и решили взять из него многое и использоваться  в QA тестировании.  3. Автоматический скрывать значков на рабочем столе AutoHideDesctopIcons 4. LightShot - быстро делаем скриншоты и заметки к ним. Можно еще использовать SnagIt, он еще и видео может снимать 5. f.lux — софтина регулирующее цветовую температуру компьютерного монитора 6. VerseQ — лучший на мой взгляд клавиатурный тренажер. Есть плагины тренировки на языки программирования 7. Scanner — показывает график в виде секторов о данных на жестком диске 8. ProcessExplorer, ProcessMonitor, WinScanner, API Monitor... все по системе 9. Возможно понравится XYplorer как замена или дополнение к файловому браузеру 10. NotePad ++ и sublime_text - на мой взгляд хорошие редакторы текста, может быть даже одни из лучших   Как-то раз нужно было поставить пробелы между китайскими иероглифами в гугл таблице (все для игры на Unity), чтобы в игре разрядить текст и он не был мелким. На notepad++ это выгладило так

MasterGH

MasterGH

 

CE Lua. Ищем свойства userData.

UserData в Lua это пользовательский тип.  Точно не знаю, но я думаю  в документации в CE Lua (celua.txt или здесь на офф. сайте) тип userData у всех классов или большинства классов. Например,  проверим, что главная форма CE это userData тип local mainFormCE = getMainForm() print(type(mainFormCE)) > userdata (вывод из консоли) Выводим список свойств следующим образом через getmetatable функцию. Метатаблица — это  особая  таблица свойств Lua-переменной (подробнее здесь) local mainForm = getMainForm() local listUserData = createStringlist() for k,_ in pairs(getmetatable(mainForm)) do listUserData.add(k) end local allowCustomInput = false local id, name = showSelectionList("Title", "Caption", listUserData, allowCustomInput) print ('Index: '..id..", Name: "..name) listUserData.destroy()   Результат в виде списка свойство переменной mainForm   Чтобы наглядно было. Свойства эти похожи на свойства из Дельфи. Можно загуглить, они поддробно описываются. Берем например свойство цвет. Прочитаем оригинальное и запишем свое любое   local mainFormCE = getMainForm() print(mainFormCE.getColor()) > 536870912 -- в hex-е это 0x20000000. Можно перевести в калькуляторе или через print(string.format("%08X", 536870912)) Случайное свое впишем ради наглядного примера mainFormCE.setColor(546484)
   

MasterGH

MasterGH

 

Cheat Engine 6.8 Beta 1. ShowSelectionList функция

Довольно интересная функция, мне понравилась.  showSelectionList() позволяет просмотреть список класса Strings и выбрать свойство через список.
  Как пример посмотрим список свойств главной формы и выберем любое свойство local mainForm = getMainForm() local listProperties = getPropertyList(mainForm) local allowCustomInput = false local id, name = showSelectionList("Title", "Caption", listProperties, allowCustomInput) print ('Index: '..id..", Name: "..name) --> Примеры выполнения: --> Index: 55, Name: ShowHint --> Index: 10, Name: Top После исполнения Lua скрипта вот такой диалог появится. Можно искать свойство через ввод текста     Список строк (Stringlist Class) используют: createStringlist(): Strings  - постой список getAutoAttachList(): Strings  - список имен процессов для автоподключения getPropertyList(class) : Strings - список свойств getCommonModuleList(): Strings  - список пропускаемых при сканировании модулей getProcesslist(Strings) - список процессов getWindowlist(Strings) - список окон getThreadlist(Strings) - список потоков Database.Params: Strings  - свойство  базы данных SQL ListItem.SubItems: Strings - свойство подстрок в визуальном компоненте списка ComboBox.Items: Strings - комбобокс Memo.Lines: Strings  - мемо компонент RadioGroup.Items: Strings  - компонент RadioGroup ListBox.Items: Strings - компонент ListBox FileDialog.Files: Strings  -  выбранные файлы в диалоге

MasterGH

MasterGH

 

Взлом крафта в StarsOne

В оригинале, если нет всех компонентов рецепта, то нельзя скрафтить вещь. Цель: скрафтить без компонетов по нажатию кнопки   Игра на Unity и можно пробовать использовать в dnSpy модифицировать файл Assembly-CSharp.dll Открываем файлик и смотрим на классы связанные с крафтом   Так находим кнопку, которая создаст указанное количество вещей крафта в CreateItem     Задача скрафтить по имеющемуся рецепту любую вещь. Для этого я добавляю проверку количества вещей  и удаляю лишний код. Под сполерами оригинальный и модифицированный код   Визуальное сравнение   Модифицированный код   Оригинальный   Изменяем весь класс или метов в этом окне   Если выводит ошибки при компяляции, то скачиваем IlSpy и его код вставляем в код в dnSpy. Или качаем DnSpy 3.2.0 или ранее   Изменения сохраняем в модуль, запускаем игру и крафтим.   Получить все рецепты (не проверял правда, попробуйте если хотите)   Вещи не ломаются. Убрать отнятие "здоровья" у вещи    

MasterGH

MasterGH

 

Unity набирает обороты

В версии Unity 2018 довольно много интересного.   1. Это Unity Hub. Та штука, которая позволяет быть в курсе новых версий Unity.  2. PackageManager. Покажет пакаджи установленный в проекте. 3. Pro Builder. Довольно интересный инструмент, который позволяет моделить оркужение в Unity и творить простые локации, здания и создавать примитивы с наложением текстур... там очень много чего, я не не смотрел особо. Это альтернатива террейну. Фишка в том, что мы не являясь художниками (2д, 3д артистами), на Pro Buildere можем вполне сносное сделать окружение в нереалистичном стиле.  И не очень мультяшный и не похожий на реалистичный стиль. В таком стиле в теории можно сделать быстро игру. Встроить туда рекламы и инаппов, ну и если все будет ок, то будет приносить прибыль на маркетах. Важнее продвинуть аппу вверх, на вид, чем сделать её; 4. У Unity развиваются мощные системы сервисов. Есть поддержка иннпов, рекламы, аналитики, багрепорты (альфа версия), стеки крашей и исключений с характеристиками устройств пользователей. Не все баги там можно увидеть. Google Play консоль ловит больше багов, крашей и ANR (диалоги с "подождите ваша программа что-то долго делает или не отвечает, или будет закрыта"). 5. Запомнился 2d аниматор с ригом. Т.е. риг это склет обычно на 3д модель, а теперь риг можно делать на 2д модели. 6. Пока больше не помню, что такого интересно...    В 2017 версии появилась возможность скрипты связывать с отдельными dll сборками. В теории это позволит увеличить скорость компиляции. Например, у нас в проекте на младших версиях Unity на правку уходит 8 секунд компиляции на мощном компе,т.к. все скрипты в одной сборке dll. Пока не тестили эту фичу...

MasterGH

MasterGH

 

Не работает плагин сборки Firebase для AirTest IDE

Почти месяц ковыряюсь со сборкой апк, которая не запускается на инструментальном тестировании в Firebase   Рис.1 Сборка апк на инструментальное тестирование TestLab  от Firebase. Окно AirTest IDE   Две апк-шки создается. 1. В Unity, с иvпортом Poco SDK  2. В Плагине как на рисунке   Затем обе апк-шки отправляются на инструметальное тестирование в Firebase  Запускаю тест. Шесть секунд видео со стандартной заставкой и конец теста.   На данный момент тестирование проводим через GameLoop тест, а не через инструментальный тест от AirTest IDE. Продолжаю искать решение, пока не понятно. Также в AirTest IDE еще не закончили свою документацию и в Firebase ничего не сказано про этот инструмент. Однако, известно что этот замечательный инструмент тестирования будет участвовать в FireBase TestLab. В 2018 году китайские разработчики официально договорились с гуглом об участии их продукта в тестировании на удаленных устройствах сервиса TestLab

MasterGH

MasterGH

 

Lua поиск элемента до и после строки

Была задача получить два списка из документа, в котором было с пару десятков тысяч строк. На практике выяснилось, что искать текст после ключевого слова легче чем искать текст до ключевого слова. Об этом и будет дальше   В утилите, которую я делал "Lua Regular Expressions (v. 1.0)"   Текст во вкладке "gmatch"   Game1
gameCompany
DAU
53.21k
-20% Game2
gameCompany
DAU
20.35k
-20%   Поиск элемента после строки   "DAU "DAU%c%c(.-)%c%c""
 > 53.21k;20.35k;   Поиск элемента до строки Вот такой паттерн со двигом скобок для поиска прыдыдущеей фразы   "%c%c(.-)gameCompany%c%c"   не прокатит для вывода списка игр над фразой gameCompany
  
 > ;53.21k
 > -20%
 > 
 > Game2
 > ;   Очевидно, можно сделать поиск по похожим фрагментам, которые идут последовательно сверху вниз.    Для просты сначала добавим первую пустую строку и видим повторяющиеся фрагменты   %c%cGame1%c%cgameCompany%c%c   пишем шаблон ".*%c%c(.-)%c%cgameCompany%c%c" и опять мимо    > Game1;53.21k
 > -20%
 > 
 > Game2;   Потому что текст над Game2 пошел выше Game2. Тогда делаем захват, только первой фразы и дальше не идем   "%c%c(%w-)%c%cgameCompany%c%c"
 > Game1;Game2;
 
И тогда все ок.   Но это еще не все. Осталась первая пустая строка, которую добавили, если её удалить, тогда   "%c%c(%w-)%c%cgameCompany%c%c"
 > Game2;
 
 Не видит Game1.
 
 Значит мы можем  убрать %c%c,
 
 "(%w-)%c%cgameCompany
 > Game1;Game2;   Дальше название игры может быть таким "My Game: my Game". Здесь и пробел и двоеточие. В таком случае текст уже будет
 
My Game1: my Game
gameCompany
DAU
53.21k
-20% My Game2: my Game
gameCompany
DAU
20.35k
-20%   Пробуем (%w-)%c%cgameCompany > Game;Game;   Что не верно, т.к. захват одним (%w-)   Мы должны в скобках развернуть фразу имени игры. В ней могут быть пробелы, числа, текст и двоеточие   ([%w%s]-)%c%cgameCompany
>  my Game; my Game;   Затем
([:%w%s]-)%c%cgameCompany
> My Game1: my Game;

> My Game2: my Game;   Затем
%c?%c?([:%w%s]-)%c%cgameCompany
> My Game1: my Game;
> My Game2: my Game;
  Вот и все. Если  попариться один раз, то тексты уже парсить будет гораздо быстрее.   Так я вывел столбы DAU и названий игр в таблицу, что было в районе 500 строк из пару десятков тысяч строк   p.s. Текст в консоли Lua отличается %c%c, а %с p.s.p.s. Можно разсплитить текст по "/n/r" или "/n" в таблицу строк и по индексам данных находить предыдущую или последующую фразу. Но мне проще две строки ввести "%c?%c?([:%w%s]-)%c%cgameCompany" и "DAU%c%c(.-)%c%c"

MasterGH

MasterGH

×

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

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