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

MasterGH

Ветераны
  • Постов

    2 999
  • Зарегистрирован

  • Победитель дней

    129

Весь контент MasterGH

  1. Слова для поисковиков : TreeView, IsSynchronizedCurrentItem, DataSet, TreeView1SelectedItemChanged,реляционные данные... Если Вы начинающий разработчик WPF и не знаете, как связывать данные с TreeView как на рисунке выше, то я помогу Вам справиться с этой задачей. Решение этой задачи может показаться сложным Начинающим, но, тем не менее, я направлю на путь решения. Сначала я рассмотрю решение с XML данными, а реляционные данные оставлю на закуску. Задача: отображать данные узла в TreeView при выделении этого узла. 1. XML данные Начинающий разработчик привык к такому свойству как IsSynchronizedCurrentItem у различных контролов. Но у TreeView такое свойство отсутсвует. Почему оно отсутсвует Чёрт его знает. Это отсутсвие может обезкуражить, и спровоцировать нелучшие идеи решения данной задчи. Если Вы попытаетесь в посковике найти решение проблемы, то скорее всего вы ничего не найдете. Даже в MSDN я не нашёл конкретный пример. Для решения задачи Вам надо мыслить как заядлый WPF-щик. Боже упаси, Вам придумать идею с обработкой события TreeView1SelectedItemChanged() внутри которого был бы код синхронизации. Итак. Чтобы в правом поле ТекстБокса отображались данные xml нужно использовать следующую связку свойства-зависимости “Text”: <TextBox Name="textBoxShowComment" Text="{Binding ElementName=treeView1, Path=SelectedItem, Converter={StaticResource XmlElementConverter1}, Mode=OneWay}" /> Суть в том, что вы привязываете Текст именно к элементу TreeView->SelectedItem, который был только что выделен. Поскольку Item это объект тип которого зависит от поставщика данных, то надо использовать преобразователь. В данном случае это XmlElementConverter1. [ValueConversion(typeof(XmlElement), typeof(string))] public class XmlElementConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { var element = value as XmlElement; return element != null ? element.FirstChild.InnerText : ""; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { // напишите свой код записи в element.FirstChild.InnerText return null; } } Эта разметка позволит вам лучше соориентироваться. <Window x:Class="CELua_Support2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="267" Width="637" WindowStartupLocation="CenterScreen" xmlns:my="clr-namespace:CELua_Support2"> <Window.Resources> <XmlDataProvider x:Key="myDB" XPath="LuaDataSet/P"> <x:XData xmlns=""> <LuaDataSet revision="r1004">x1 <P name="Don Hall">x2 <P name="Alice Ciccu">x3 <P name="David Pelton">x4 <P name="Vivian Atlas">Комментарии1</P> </P> <P name="Andy Pelton">Комментарии2</P> <P name="Andy Jacobs">Комментарии3</P> </P> <P name="Bill Malone">x5 <P name="Maurice Taylor">Комментарии4</P> <P name="Sunil Uppal">Комментарии5</P> <P name="Qiang Wang">Комментарии6</P> </P> </P> </LuaDataSet> </x:XData> </XmlDataProvider> <HierarchicalDataTemplate x:Key="ItemTemplate" ItemsSource="{Binding XPath=P}"> <TextBlock Text="{Binding XPath=@name}" ></TextBlock> </HierarchicalDataTemplate> <Style TargetType="TreeViewItem"> <Setter Property="IsExpanded" Value="True"/> </Style> <my:XmlElementConverter x:Key="XmlElementConverter1" /> </Window.Resources> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="244" /> <ColumnDefinition Width="279*" /> </Grid.ColumnDefinitions> <TreeView x:Name="treeView1" ItemsSource="{Binding Source={StaticResource myDB}}" ItemTemplate="{StaticResource ItemTemplate}" /> <TextBox Name="textBoxShowComment" TextWrapping="Wrap" Grid.Column="1" Margin="5,0,0,0" BorderBrush="#FF828790" SelectionBrush="#FF828790" Text="{Binding ElementName=treeView1, Path=SelectedItem, Converter={StaticResource XmlElementConverter1}, Mode=OneWay}" /> <GridSplitter Grid.Column="1" HorizontalAlignment="Left" Name="gridSplitter1" Width="5" /> </Grid> </Window> 2. Реляционные данные По реляционным данным почитайте тутор(Josh Smith). Напоминаю, что реляционные данные можно строить визуально в VisualStudio ипользуя таблицы и связи.
  2. В Lua поддержке появился Thread Class. Это тоже значимое событие. Оно позволит выполнять множество задач параллельно. Например, у меня замораживалось отображение формы, когда работало сканирование памяти. Теперь эта проблема судя по всему может запросто решиться Modify /trunk/Cheat Engine/bin/main.lua diff ... 859 859 hexadecimalview_onByteSelect(hexadecimalview, function): function(hexadecimalview, address, address2) 860 860 861 861 862 + Thread Class: (Inheritance: Object) 863 + createNativeThread(function) : 864 + Executes the given function in another thread using the systems thread mechanism 865 + The function returns the Thread class object 866 + function declaration: function (Thread) 867 + 868 + thread_freeOnTerminate(thread, state) : 869 + When set to true the thread object will free itself when the function ends (default=true) 870 + Note: Use this only from inside the thread function as the thread might have already terminated and freed itself when called 871 + 872 + thread_synchronize(thread, function) : 873 + Called from inside the thread. This wil cause the tread to get the main thread to execute the given function and wait for it to finish. 874 + Usually for gui access 875 + function () 876 + 877 + thread_waitfor(thread) : Waits for the given thread to finish
  3. В Автоассемблрере ревизии r1007 добавлена новая команда: LuaCall(luacommand) [Enable] LuaCall(ВАШ Lua-код ВАШ Lua-код ВАШ Lua-код ) [Disable] Данная команда не встраивается в код игры. Она просто выполняется.
  4. Большинство людей знают о HTML/CSS/javascript/XML, но никогда не знали, что по XML данным можно формировать, например, HTML по другой разметке XSL. Формат XML это необычно мощная маркап разметка данных. XML и HTML = XSL = XSLT+ EXSLT + XPath + XSL-FO XSL - языки преобразования и визуализации XML-документов: 1) XSLT: язык преобразования XML-документов 2) EXSLT (Extensions to Extensible Stylesheet Language Transformations) — общественная инициатива по созданию расширений для XSLT, придающих бо?льшую функциональность языку трансформаций. Образцами расширений являются математические функции (генерация случайного числа), работа с датами, расширенные операции со строками и регулярными выражениями. 3) XPath (XML Path Language) — язык запросов к элементам XML-документа.Разработан для организации доступа к частям документа XML в файлах трансформации XSLT. Входит в XQuery. 4) XSL-FO - язык разметки типографских макетов и иных предпечатных материалов. Короче из XML можно сгенерировать HTML, XHTML, тестовый файл и даже можно сформовать другой XML. А также благодаря языку XSL-FO можно сформовать документ для печати в виде текстового фалйа, PDF, PS, RTF. А также SQL, или даже SWF (flash-запускаемый модуль), а также сформировать другую XSL разметку. Наиболее востребованное это XSLT и XPath с помощью которых можно создавать стили формирования документов из динамично изменяющейся базы данных. Таким образом вам достаточно иметь в Интернете вирутальную папку с ftp доступом для обновления вашей базы данных XML. Когда пользователь открывает ваш сайт, то формируется из XSLT+XPath. Весьма удобно если у вас нет доступа к инфраструктурам: серверу базы данных, веб-серверу и т.п. Хороший пример: Группировка и сортировка годов XML: <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="years.xsl"?> <root> <object year="2003"/> <object year="2001"/> <object year="2005"/> <object year="2005"/> <object year="2003"/> <object year="2006"/> <object year="2006"/> <object year="2006"/> <object year="2005"/> <object year="2001"/> </root> years.xsl: <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:key name="years" match="/root/object" use="@year" /> <xsl:template match="root" priority="-1"> <HTML> <BODY> <xsl:for-each select="object[generate-id()=generate-id(key('years',@year))]"> <xsl:sort select="@year" order="descending"/> <xsl:value-of select="@year" /> <xsl:if test="position()!=last()"> <xsl:text>, </xsl:text> </xsl:if> </xsl:for-each> </BODY> </HTML> </xsl:template> </xsl:stylesheet> Результат: 2006, 2005, 2003, 2001 Теперь не только программисты, но и вы знаете о роли XLS.
  5. Например Вы запустили скрипт *.CETRAINER из некоторой директории в которой есть файл DownloadXM.lua, содержащий код. require("Hello") Эта директория становится директорией по умолчанию и все Lua файлы в ней можно вызывать без указания полного пути. require("DownloadXM") Вы получите ответ: Hello Вы решили исправить DownloadXM.lua: require("Hello, user!") Но если вы теперь снова напишите: require("DownloadXM") Вы получите старый ответ: Hello Т.е. ваш старый модуль уже подгрузился в память, а новый не подгружается. Таким образом всё что было в старом модуле: переменные, функции и т.п. всё остаётся старым. Так как же загрузить модуль заново и при этом не запускать повторно *.CETRAINER? Для этого нужно написать следующее: package.loaded["DownloadXM"] = nil require("DownloadXM") И тогда вы увидите уже: Hello, user! Поэтому ключевой момент этой темы это использование: package.loaded["Ваш модуль"] = nil
  6. Это скорее к тем кто уже что-то подобное делал: VoLT, aliast. А мне разбираться со спавном некогда.
  7. 3. Случай Игра вылетает и ошибка в скрипте абсолютная не узнаваема. Что делать?! Используйте отладчик CheatEngine с пошаговым выполнением. Например у вас такой скрипта [ENABLE] alloc(newmem,2048) label(returnhere) label(originalcode) label(exit) newmem: cmp [esi+0000038c],0 jne short originalcode mov eax,#999 originalcode: mov [edi],eax mov edi,eax mov eax,[esp+14] exit: jmp returnhere 101337F4: jmp newmem nop nop nop returnhere: [DISABLE] dealloc(newmem) 101337F4: mov [edi],eax mov edi,eax mov eax,[esp+14] //Alt: db 89 07 8B F8 8B 44 24 14 1) Поставить игру в оконный режим 2) На инструкции выше адреса 0x101337F4нажать на F5 в дизассемблере. (это установка брейкпоинта на выполнение кода, зелёное выделение) 2) Сделать в игре что-нибудь чтобы игра прервалась на брейкпоинте. 3) Активировать скрипт Автоассемблера. 4) Нажимать F7 и смотреть регистры. 5) Запомнить инструкцию перед крахом игры. Проанализировать. Изменить скрипт. Если вылета нет, то при выходе из тела чита нажать F9 чтобы "отпустить" процесс. Чтобы снять брейкпоинт выделить зелёную инструкцию и нажать F5. Стоит запомнить. Отладчик специально создан для того чтобы отлавливать ошибки кода. В том числе и отлавливать ошибки ваших скриптов.
  8. Самый простой способ. Найти адреса значений здоровья, патронов, усталость используя сканер памяти (CheatEngine, Atmoney ...) Поставить своё значение по адресу и заморозить.
  9. Чтобы определить ошибку пользуйтесь пошаговой отладкой перед входом в тело чит-кода.
  10. Продолжение о setProperty Если Вы хотите узнать открытые свойства некоторого объекта некоторого класса для использования их в функции setProperty, то это можно сделать, например, так. trainerForm = createForm() print(strings_getText(getPropertyList(trainerForm))) В данном примере вы получите publish свойства. Их вы можете увидеть также в дизайнере форм. Например, я захотел сделать Лейбл названия игры, чтобы он выравнивался по центру, а также чтобы колонка Листбокса выравнивалась по центру. .... gameNameLabel = createLabel(trainerForm) control_setCaption(gameNameLabel, "The game") setProperty(gameNameLabel, 'Alignment', 'taCenter') setProperty(gameNameLabel, "AutoSize", "false") .... lv = createListView(trainerForm) control_setPosition(lv, 4, 99 + 20) control_setSize(lv, 590, 250-20) -- control_setSize(lv, 350, 250) setProperty(lv, "Checkboxes", "true") setProperty(lv, 'RowSelect', 'True') setProperty(lv, 'ReadOnly', 'True') lvc=listview_getColumns(lv) column2=listcolumns_add(lvc) listcolumn_setCaption(column2, 'Hot-Keys') setProperty(column2, 'Alignment', 'taCenter') ....
  11. В таком случае я проверяю тело чит-кода Olly-дебагером. Сделай сразу пошаговую трассировку. И ты найдёшь ответ. Иначе мы будем гадать Кстати CE может не правильно ассемблировать
  12. Uchiha Sasuke Как минимум одна ошибка: _cmp: dd 0 Заменить на _cmp: db 0 ------- В главной таблице добавить адрес "_cmp" типа 1 байт. А всё потому что у тебя инструкции cmp byte ... Aliast однажды напоролся на тоже самое )
  13. О, я ещё это дело не тестировал. Судя по описанию ДаркБайта этот инструмент часть виртуальной машины dbvm. Устанавливается особым образом...Кажется, ведёт лог call-ов без подключения отладчика. -- Проверил. У меня крашит систему в BSOD с ошибкой 1E. Судя по заголовку главного окна CE это может случится в преАльфа версии, точнее это должно ожидаться.
  14. Как уже SER[G]ANT написал появилась Pre Alpha v6.2. Однако, есть ещё одна ссылка для скачивания, скачав и распаковав архив по которой, вы получите полный комплект файлов. Когда выйдет реализ CE6.2 с убранными багами для Русской кодировки я постараюсь написать тутор по созданию трейнера на Lua-Engine. О багах я уже сообщил. Если кто следил, то предыдущий тутор я удалил из форума по Lua-Engine, т.к. посчитал что он сложен для восприятия и его надо переписать. Тем более CE 6.2 ещё не вышла и не исправлены баги с кодировкой: название трейнера не может быть на русском и пути директорий так же не могут быть на расском языке.
  15. // eax = 7, ebx=5, mov esi,[eax+ebx+3] При выполнении этой инструкции esi будет равен не 15, а значению располагающемуся по адресу 15. Это все равно что написать mov esi,[15] Что именно лежит по адресу 15, посмотрите сами. И учтите, что я писал пример в десятичной системе для упрощения, а в реальной ситуации всё в 16-ричной системе: и адреса, и смещения, и значения.
  16. live_4_ever, у нас нет сплочённой команды, которая делала бы трейнеры на языках программирования как это делают хакерские группы. Но те, кто публикуют трейнеры вполне могут написать, что они относятся к команде gamehacklab[RU], т.к. как состоят в группе разработчиков. Ты кстати в этой команде раньше состоял... Трейнеры у нас вполне нормальные, т.к. подразумевается, что они работают как минимум к одной версии игры. Факт того, что трейнеры сделаны на CheatEngine не значит, что они ненормальные, т.к. это дело принципа и вкуса. У CheatEngine хорошая функциональная и информационная база для массы всё новых и новых пользователей. Программистские дебри в виде автоассемблреных скритпов более терпимы, чем если писать трейнер на зыке программирования. Создание команды это вообще отдельный вопрос и с "нормальностью" трейнера, конечно, никак не связан. Трейнеры проще делать на CheatEngine и более доступно для "массового пользователя". И если все с "начального/среднего уровня" начнут писать трейнеры на Lua-engine я буду очень рад. Сложно это или нет каждый может оценить по своим силам взглянув на мой тестовый пример для CE 6.2(которая ещё не появилась) и файл документации по которому это было сделано. Этот трейнер смогут запустить только те, кто скомпилит 64-разрядную CheatEngine из комплекта SVN. Последняя ревизия на сегодня не компилируется для 32-разрядной CE.
  17. aliast, можно тоже самое только с адресами. А также по какому адресу ты изменял инструкцию и каким образом изменял. В окне дизассемблера или через скрипы?
  18. GodGame, если нужно мнение про "заценить", то моё мнение "неплохо". Только жаль, что ничего нового нет из того, что есть в других программах: CheatEngine, MHS и т.п. В кчаестве чего-то нового и полезного, советую вам создать поддержку скриптов для работы с дизассемблированием и ассемблированием. Как именно уже решайте сами. Может быть так для инструкции 0x00410000: mov eax,[ebx+0C] : PROCESS game.exe SCRIPT "God-mode" FOR 0x00410000,0x00420000,0x00440000 TYPE mov reg32,[reg32+varA] WHERE varA=0xC ADDNEWASSEMBLE mov [reg32+varA], 0x10000 ADDNEWASSEMBLE mov [reg32+varA+4], 0x10000 На всех указанных адресах при условии WHERE будет создана инъекция ADDNEWASSEMBLE, которая если потребуется будет создана в новом блоке памяти с восстановлением оригинальных инструкций. Это новая фишка похожа чем-то на SQL запросы и негде не реализована. И могла быть бичом в Вашей программе, если её хорошо продумать. Так же с помощью аналогичных SQL запросов аналогично можно извлекать структуры данных из памяти, фильтровать, соединять и делать какие-то действия.
  19. Полазай по контекстному меню вызываемым правой кнопкой мыши при клике на область дизассемблерного кода.
  20. Не за что. Судя по типам защит блоков виртуальной памяти думаю ты ошибаешься с + $41A8, но если работает, то пускай работает. Я уверен, что нет кода, который бы обращался к этому адресу через + $41A8. Обращение должно происходить совсем другим образом по другой цепочке указателей. Но как я писал, если работает, то пускай работает. Возможно блоки памяти распределяются "устойчивым" образом и их расположение не меняется. Остаётся только на это надеяться.
  21. Экспресс выпуск поддерживает один язык программирования. Поэтому потребуется установить несколько экспресс выпусков, если требуется несколько языков программирования.
  22. >>Адрес 003F0000 я так понял указывает на первый байт в модуле Inter.dll? Правильно >>Тоесть чтобы мне найти смещение на указатель мне нужно вычесть разницу между адресами 003F41A8 и 003F0000 и потом перевести в десятичную систему? Я правильно мыслю? 003F41A8+1264 = 0x003F4000 + 0x1A8 + 1264 Если я не ошибаюсь, надо искать указатель на 0x003F4000, а не на 003F0000. >> И еще вопросик по программированию... Сразу оговорюсь, что в интернете по подобному информация очень скудная. Собственно как в Делфи прилепить это смещение на Dll? Подключиться к процессу, извлечь PID и т.п. Найти базовый адрес модуля используя CreateToolHelp32Snapshot... Использовать циклически ReadProcessMemory с добавлением смещений. Почему скудно написано? Смотри сколько ссылок я нашёл (это я ещё не искал специально на иностранных сайтах) Нужная функция: ссылка В uses добавь: Windows, Tlhelp32 и может быть SysUtils Пример как этой функций пользоваться: ссылка Ещё так для размышлений: ссылка ----- Может пригодится, а может нет на языке C: ссылка
  23. Администрация пока разрешает задавать вопросы согласно текущим главным правилам форума всем пользователям и тому же mylukov-ову. SER[G]ANT, Вы стремитесь к пункту 1.3. Надеюсь, Вы не придёте к тому, чтобы пользователей прямо называть "идиотами". Если вопросы mylukov-ва вызывают раздражение, то лучше дать голый ответ без негатива, либо не отвечать. Я не хочу чтобы новые пользователи боялись задавать свои вопросы, смотря на то, как Вы оцениваете других. Спасибо.
  24. Новое руководство CE6.2 Lua-Engine r969. Июль, 2011 год Для тех кто недавно познакомился с Cheat Engine 6.1
×
×
  • Создать...

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

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