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

MasterGH

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

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

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

    129

Сообщения, опубликованные MasterGH

  1. Случа4 и Случай5

    Чтение(или запись) из не существующего адреса (или адреса с протекцией памяти не для чтения) и случай выполнения перемещённой инструкции.

    ANT' date='27 Май 2011 - 00:04' timestamp='1306440261' post='3117']

    Можно всегда сразу с ebx (или др. выбранным регистром) сравнивать. Просто я привык по шаблону делать.

    После внедрения твоего скрипта, текущее здоровье принимает текущее макс. значение, однако, стоит шевельнуться и герой умирает.

    только такой вариант у меня нормально работает


    [ENABLE]
    alloc(newmem,2048)
    label(vitality)
    label(returnhere)
    label(originalcode)

    newmem:
    vitality:
    push ebx
    mov ebx,[witcher2.exe+022BC5F4]
    mov ebx,[ebx+14]
    mov ebx,[ebx+14]
    mov ebx,[ebx+8]
    cmp [eax],ebx
    pop ebx
    jne short originalcode
    push esi
    mov esi,[witcher2.exe+022BC5F4]
    mov esi,[esi+14]
    mov esi,[esi+14]
    mov esi,[esi+0C]
    mov [eax],esi
    pop esi
    originalcode:
    fld dword ptr [eax]
    mov eax,[ebp+08]
    jmp returnhere

    witcher2.exe+8CA4:
    jmp vitality
    returnhere:

    [DISABLE]
    dealloc(newmem)

    witcher2.exe+8CA4:
    fld dword ptr [eax]
    mov eax,[ebp+08]

    Скрипт работает нормально но при переходе в другой уровень игры, (в локации при загрузках) игра вылетает.

    Возможные причины:

    1) По этому указателю:


    mov ebx,[witcher2.exe+022BC5F4]
    mov ebx,[ebx+14]
    mov ebx,[ebx+14] // например в скобках оказался не существующий адрес и вызвало крах игры
    mov ebx,[ebx+8]

    где-то на уровнях отсутствует указатель, например, там где [ebx+8] бывает ноль. Чтение этого значения вызовет вылет. Чтобы этого не было, нужно проверять указатели.

    2) Причина, может быть вызов перемещённой инструкции:


    witcher2.exe+8CA4:
    fld dword ptr [eax]
    mov eax,[ebp+08] // например код пытался вызвать эту перемещённую инструкцию

  2. Возможные причины:

    1) По этому указателю:


    mov ebx,[witcher2.exe+022BC5F4]
    mov ebx,[ebx+14]
    mov ebx,[ebx+14]
    mov ebx,[ebx+8]

    где-то на уровнях отсутствует указатель, например, там где [ebx+8] бывает ноль. Чтение этого значения вызовет вылет. Чтобы этого не было, нужно проверять указатели.

    2) Причина, может быть вызов перемещённой инструкции:


    witcher2.exe+8CA4:
    fld dword ptr [eax]
    mov eax,[ebp+08] // например код пытался вызвать эту перемещённую инструкцию

  3. r1014

    Добавления в Lua:

    Описания стилей окна
    bsNone=0
    bsSingle=1
    bsSizeable=2
    bsDialog=3
    bsToolWindow=4
    bsSizeToolWin=5

    Методы установки стелей и получения

    	340	+	form_setBorderStyle(form, borderstyle): 6.2+: Sets the borderstyle of the window. Possible options:
    341 + form_getBorderStyle

    Класс Graphic "оброс мясцом"

     	614    +    graphic_getWidth(graphic): Gets the current width in pixels of this graphics object
    615 + graphic_setWidth(graphic, width): Sets thw width in pixels
    616 + graphic_getHeight(graphic)
    617 + graphic_setHeight(graphic, height)
    618 +
    619 + RasterImage class: (Inheritance: Graphic->Object) : Base class for some graphical controls
    620 + rasterimage_getCanvas(RasterImage): Returns the Canvas object for this image

    Приветсвуем новые классы:

     	623	+	Bitmap class: (Inheritance: CustomBitmap->RasterImage->Graphic->Object) : Bitmap based Graphic object
    624 + PortableNetworkGraphic Class: (Inheritence: TCustomBitmap->RasterImage->Graphic->Object)
    625 + JpegImage Class: (Inheritence: TCustomBitmap->RasterImage->Graphic->Object)

    У Picture Class новые методы:

     
    635 + picture_getPNG(picture): Returns a PortableNetworkGraphic Class object (Can be used from scratch)
    636 + picture_getBitmap(picture): Returns a Bitmap Class object (Can be used from scratch)
    637 + picture_getJpeg(picture): Returns a JpegImage Class object (Picture must be initialized with a jpeg file first)

    Кульминация, новый класс d3dhook, который обрадует тех, кто знае как им пользоваться:


    999 + d3dhook_initializeHook(overlaystoragesize):
    1000 + Hooks direct3d and allocates a buffer with given size for storage of for the overlay images
    1001 + (for one screen stretching overlay sized 1920x1080 you need at least 6220800 bytes)
    1002 + If no size is provided 16MB is is used
    1003 +
    1004 + Note: You can call this only once for a process
    1005 +
    1006 + d3dhook_createOverlay(Picture, x,y)
    1007 + Sets the Picture object to be used for the overlay.
    1008 +
    1009 + Call this each time you have made a change to the bitmap and want to update it in the game.
    1010 + About the bitmap. The collor 0,0,0 (black) is used for transparency. If you wish black, try 0,0,1 or something similar
    1011 +
    1012 + This functions returns an ID you can use with the d3dhook_updateOverlay function
    1013 + If out of memory or the initialization failed, this returns nil
    1014 +
    1015 + d3dhook_updateOverlayImage(overlayid)
    1016 + Call this function when you have changed anything to the image of the specified overlay
    1017 +
    1018 + d3dhook_updateOverlayPosition(overlayid, x,y)
    1019 + Call this function when you wish to change the position this overlay has on the screen
    1020 +
    1021 + d3dhook_setOverlayVisibility(overlayid, booleanstate) : Sets if the overlay should be drawn or not.
    1022 +
    1023 +
    1024 + d3dhook_beginUpdate() : Use this function when you intend to update multiple overlays. Otherwise each update will have to wait for a frame render
    1025 + d3dhook_endUpdate() : When done updating, call this function to apply the changes

  4. Izmalkoff,

    1) значения координат разве не находятся в памяти процесса рядом друг с другом?

    structureCoordinates:

    dd 00000000 // адрес X

    dd 00000000// адрес Y

    dd 00000000// адрес Z

    Если адреса находятся рядом, то из самой часто обращаемой инструкции из трёх

    X :mov [ebx],eax

    Y :mov [ebx+08],edx

    Z :mov [esi+0000029C],ecx

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

    Короче мой вариант, если использовать только АА-скрипты (кстати не очень удобно, из-за активирующего скрипта, который надо активировать вручную).

    Z :mov [esi+0000029C],ecx

    X :mov [ebx],eax

    Y :mov [ebx+08],edx

    Надо реализовать поточное выполнение:

    1) запоминание координат

    2) запись запомненных координат

    3) инициализация

    Удобне было бы сделать на Lua, но подозреваю это будет для тебя сложнее.

    Скрипт1 - Запоминание координат (выполнится в любом случае при активации или деактивации)


    CREATETHREAD(memThreadSave)
    [ENABLE]
    [DISABLE]

    Скрипт2 - Восстановление координат (выполнится в любом случае при активации или деактивации)


    CREATETHREAD(memThreadRestore)
    [ENABLE]
    [DISABLE]

    Скрипт3 - Инициализация


    [ENABLE]
    alloc(newmem,1024)
    alloc(memThreadSave,1024)
    alloc(memThreadRestore,1024)

    registersymbol(memThreadSave)
    registersymbol(memThreadRestore)

    label(SaveStructureCoordinates)
    label(returnhereX)

    memThreadSave:
    mov ecx, 3
    mov esi,[SaveStructureCoordinates]
    lea edi,[SaveStructureCoordinates+4]
    rep movsd
    ret

    memThreadRestore:
    mov ecx, 3
    lea esi,[SaveStructureCoordinates+4]
    mov edi,[SaveStructureCoordinates]
    rep movsd
    ret

    newmem:
    mov [ebx],eax
    mov [SaveStructureCoordinates],ebx
    // если нужно, то вписать оригинальный код
    jmp returnhereX

    SaveStructureCoordinates:
    dd 0 // указатель на структуру координат в игре
    dd 0 // Запомненнное значение X
    dd 0 // Запомненнное значение Y
    dd 0 // Запомненнное значение Z


    //X
    jmp newmem
    nop
    nop
    nop
    nop
    returnhereX:

    [DISABLE]

    Сначала пишем и запускаем 3-скрипт.

    Затем пишем два остальных.

    Ставим горячие клавиши на скрипты

    В игре при запуске трейнера, нужно вручную активировать 3-скрипт, тогда будут работать первый и второй. Автоматизировать это можно в связке с Lua.

  5. Izmalkoff, вот когда свой код приведёшь не меньше на 70% написанный для телепорта, тогда тебе скорее всего помогут подсказками.

    А так с "голыми" инструкциями (да ещё без оригинального кода под инструкциями, названия игры)... тебе можно советовать искать примеры телепорта в Интернете.

  6. Мне интересно как вставить треккерную музыку в мой проект?

    Можешь поискать dll-ку проигрывания музыки или .exe - плеер. Пакуешь в ресурсы это дело и работаешь с ресурсами во время выполнения. Подробности писать не буду (мне лень) в Интернете можно найти необходимую информацию.

    По поводу второго вопроса, думаю сам сможешь разобраться ( наверно, перебирая пароли к чьей-то почте )) ) не зная при этом как с кнопками работать.

  7. Слова для поисковиков : TreeView, IsSynchronizedCurrentItem, DataSet, TreeView1SelectedItemChanged, LINQ to XML, XmlDataProvider ...

    Эта статья не претендует на полноту.

    Всем известно что WPF поддерживает XmlDataProvider, а вот SIlverlight нет. В MSDN рекомендуется пользоваться LINQ to XML. Что собственно я и сделал в этом примере.

    Пример:

    http://mastergh.gamehacklab.ru/

    post-3-1313738935,81_thumb.png

    post-3-1313738936,42_thumb.png

    Код заммеля:


    <UserControl x:Class="SearchClientRC.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
    xmlns:local="clr-namespace:SearchClientRC"
    mc:Ignorable="d"
    d:DesignHeight="577" d:DesignWidth="945" x:Name="Control" Background="Black" BorderBrush="Black">

    <UserControl.Resources>
    <local:Cheats x:Key="CheatsDB"/>
    <CollectionViewSource x:Name="CollectionViewCheat" Source="{Binding Source={StaticResource CheatsDB}}" />

    <local:DocumentLuaViewModel x:Key="LuaDB"/>
    <local:DocumentAAViewModel x:Key="AADB"/>
    <sdk:HierarchicalDataTemplate x:Key="ItemTemplate" ItemsSource="{Binding}" >
    <TextBlock Text="{Binding Title}" />
    </sdk:HierarchicalDataTemplate>
    </UserControl.Resources>
    <Grid >
    ...
    <Grid Grid.Row="2" HorizontalAlignment="Stretch" Margin="10,5,10,10" VerticalAlignment="Stretch">
    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="309" />
    <ColumnDefinition Width="771*" />
    </Grid.ColumnDefinitions>
    <sdk:GridSplitter Grid.Column="1" HorizontalAlignment="Left" Margin="2,0,0,0" VerticalAlignment="Stretch" Width="10" >
    <sdk:GridSplitter.Background>
    <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
    <GradientStop Color="#FFDEDEDE" Offset="1" />
    <GradientStop Color="#FFF2F2F2" Offset="0.288" />
    <GradientStop Color="#FFDEDEDE" Offset="0" />
    <GradientStop Color="#FFEBEBEB" Offset="0.714" />
    </LinearGradientBrush>
    </sdk:GridSplitter.Background>
    </sdk:GridSplitter>
    <RichTextBox Padding="10,10,0,0" IsReadOnly="True" Grid.Column="1" Margin="13,0,0,0" TextWrapping="Wrap" HorizontalScrollBarVisibility="Auto" HorizontalContentAlignment="Left" VerticalContentAlignment="Top" UseLayoutRounding="False">
    <RichTextBox.Background >
    <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
    <GradientStop Color="Black" Offset="0" />
    <GradientStop Color="Black" Offset="1" />
    <GradientStop Color="Transparent" Offset="0.983" />
    <GradientStop Color="#29FCFCFC" Offset="0.014" />
    </LinearGradientBrush>
    </RichTextBox.Background>
    <Paragraph>
    <Run Text="{Binding Path=SelectedItem.SubTitle, Mode=OneWay, ElementName=myTreeView2}"/>
    </Paragraph>
    </RichTextBox>
    <sdk:TreeView Name="myTreeView2" ItemsSource="{Binding}" ItemTemplate="{StaticResource ItemTemplate}" DataContext="{Binding Source={StaticResource AADB}}" />
    </Grid>
    ...
    </Grid>
    </UserControl>

    Код C#:


    public class TreeItemModel : List<TreeItemModel>
    {
    public string Title { get; set; }
    public string SubTitle { get; set; }
    public TreeItemModel(string title, string subTitle)
    {
    Title = title;
    SubTitle = subTitle;
    }
    }
    public class DocumentViewModel: List<TreeItemModel>
    {
    private string _localDataBaseName = "";

    private static string GetName(XElement xelement)
    {
    var xAttribute = xelement.Attribute("name");
    if (xAttribute == null)
    throw new Exception("Не найден атрибут 'name'. Исправьте базу данных и перезапустите приложение.");
    return xAttribute.Value;
    }
    private static string GetComment(XElement xelement)
    {
    return xelement.Elements("Comment").Count() > 0 ? xelement.Elements("Comment").First().Value : "";
    }

    // Текущий узел -> дочерние
    private static void CreateInheritItem(XElement xelement, TreeItemModel treeParentItemModel)
    {
    var currentTreeItemViewModel = new TreeItemModel(GetName(xelement), GetComment(xelement));

    foreach (var subXElement in xelement.Elements("P"))
    CreateInheritItem(subXElement, currentTreeItemViewModel);

    treeParentItemModel.Add(currentTreeItemViewModel);
    }

    public DocumentViewModel(string localDataBaseName)
    {
    _localDataBaseName = localDataBaseName;
    var dbLua = XElement.Load(localDataBaseName);
    foreach (var subXElement in dbLua.Elements("P"))
    {
    var currentTreeItemViewModel = new TreeItemModel(GetName(subXElement), GetComment(subXElement));
    foreach (var xsubXElement in subXElement.Elements("P"))
    CreateInheritItem(xsubXElement, currentTreeItemViewModel);
    Add(currentTreeItemViewModel);
    }
    }
    }

    public class DocumentLuaViewModel : DocumentViewModel
    {
    public DocumentLuaViewModel() : base("LuaHelpRU.xml") { }
    }

    public class DocumentAAViewModel : DocumentViewModel
    {
    public DocumentAAViewModel() : base("AAHelpRU.xml") { }
    }
        //---------------------------

  8. Повторяющаяся музыка при запуске и до загрузки сайта.

    Пример

    <audio src="http://mastergh.gamehacklab.ru/sound.ogg" controls autoplay autobuffer loop>Ваш браузер не поддерживает теги <audio> </audio>! Обновите версию браузера!</audio>

    Вы увидите плеер. Можно остановить музыку. Убавить громкость. Установить позицию проигрывания.

    Мой сайт с музыкой

  9. Хочу показать Вам ещё интересный пример на HTML5:

    post-3-1313646883,87_thumb.png

    Когда кликаете мышкой на видео, то оно рассыпается.

    Только я не понял зачем было именно такое описание типа документа:

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

    Помимо всего яваскрипта, самые интересные теги:


    <div style="display:none">
    <video id="sourcevid" autoplay="true" loop="true">
    <source src="BigBuckBunny_640x360.mp4" type="video/mp4"/>
    <source src="BigBuckBunny_640x360.ogv" type="video/ogg"/>
    </video>
    <canvas id="sourcecopy" width="640" height="360"></canvas>
    </div>
    <div><center>
    <div style="z-index:1;position:relative;text-align:center;font-size:16px;font-weight:bold;width:1000px;top:60px;">Click video to blow it up!</div>
    <canvas id="output" width="1000" height="600" onmousedown="dropBomb(event, this)" style="border: solid 5px #666666"></canvas>

    Я невольно задумался какая конкуренция между HTML5, Silverlight, Adobe Flash. Сразу увидел достоинства последних. Яваскрипт в HTML5 сильно проигрывает C#, ActionScript последних версий. Яваскрипт текущей версий это серьёзный тормоз в HTML5 по удобству программирования против ООП на C#, ActionScript.... В случае последнего не знаю. Зато знаю козыри Silverlight- это привязка данных по свойствам зависимости + ООП с кодбихайндом + заммель разметка для проектирования интерфейса.... Только данный пример на HTML5 значительно выигрывает у Silverlight по размеру исходника и возможно по производительности...

  10. Веб-технологии не стоят на месте. Хочу показать пример того, что можно сделать на HTML5.

    post-3-1313603340,11_thumb.png

    <html> 
    <head>
    <title>Дерево Пифагора</title>
    <script type="text/javascript">
    // функция рисует под углом линию из указанной точки длиной ln
    function drawLine(x, y, ln, angle) {
    context.moveTo(x, y);
    context.lineTo(Math.round(x + ln * Math.cos(angle)), Math.round(y - ln * Math.sin(angle)));
    }
    // Функция рисует дерево
    function drawTree(x, y, ln, minLn, angle) {
    if (ln > minLn) {
    ln = ln * 0.75;
    drawLine(x, y, ln, angle);
    x = Math.round(x + ln * Math.cos(angle));
    y = Math.round(y - ln * Math.sin(angle));
    drawTree(x, y, ln, minLn, angle + Math.PI/4);
    drawTree(x, y, ln, minLn, angle - Math.PI/6);
    // если поставить угол Math.PI/4 , то выйдет классическое дерево
    }
    }
    // Инициализация переменных
    function init() {
    var canvas = document.getElementById("tree");
    context = canvas.getContext("2d");
    canvas.width = 480; // Ширина холста
    canvas.height = 320; // высота холста
    var x = canvas.width / 2;
    var y = canvas.height;
    var ln = 120; // начальная длина линии
    var minLn = 4; // минимальная длина до которой рисуются линии
    context.fillStyle = "#ddf"; // цвет фона
    context.strokeStyle = "#020"; //цвет линий
    context.fillRect(0, 0, canvas.width, canvas.height);
    context.lineWidth = 2; // ширина линий
    context.beginPath();
    drawTree(x, y, ln, minLn, Math.PI / 2);
    context.stroke();
    }
    </script>
    </head>
    <body onload="init();">
    <canvas id="tree"></canvas>
    </body>
    </html>

    Скажем спасибо элементу "canvas". Так же я был удивлён, что новый стандарт имеет поддержку многопоточности. Если Вы хотите подробностей, то посмотрите их в Интернете.

  11. В Автоассемблрере ревизии r1007 добавлена новая команда: LuaCall(luacommand)


    [Enable]

    LuaCall(ВАШ Lua-код
    ВАШ Lua-код
    ВАШ Lua-код
    )

    [Disable]

    Данная команда не встраивается в код игры. Она просто выполняется.

    Ошибочка вышла. В LuaCall в скобках может быть только одна строка: LuaCall(функция Lua)
  12. Слова для поисковиков : TreeView, IsSynchronizedCurrentItem, DataSet, TreeView1SelectedItemChanged,реляционные данные...

    post-3-1313396227,91_thumb.png

    Если Вы начинающий разработчик 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 ипользуя таблицы и связи.

  13. В 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

  14. Большинство людей знают о 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.

  15. Например Вы запустили скрипт *.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

  16. И не по структуре, необходимо сделать спавн машин, и запретить спавнится машинам в городе... Но это уже к MasterGH

    Это скорее к тем кто уже что-то подобное делал: VoLT, aliast. А мне разбираться со спавном некогда.

  17. 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.

    Стоит запомнить. Отладчик специально создан для того чтобы отлавливать ошибки кода. В том числе и отлавливать ошибки ваших скриптов.

  18. Люди, здрасьте, ваш скрипт на бессметрие очень хорошо работает, а как бы сделать патроны беск. и бег?

    А, и еще, как сделать бессмертие в первой части игры патч 2.2

    Самый простой способ.

    Найти адреса значений здоровья, патронов, усталость используя сканер памяти (CheatEngine, Atmoney ...)

    Поставить своё значение по адресу и заморозить.

  19. Продолжение о setProperty

    Если Вы хотите узнать открытые свойства некоторого объекта некоторого класса для использования их в функции setProperty, то это можно сделать, например, так.


    trainerForm = createForm()
    print(strings_getText(getPropertyList(trainerForm)))

    В данном примере вы получите publish свойства. Их вы можете увидеть также в дизайнере форм.


    Name
    Tag
    AnchorSideLeft
    AnchorSideTop
    AnchorSideRight
    AnchorSideBottom
    Cursor
    Left
    Height
    Hint
    Top
    Width
    HelpType
    HelpKeyword
    HelpContext
    HorzScrollBar
    VertScrollBar
    Align
    AlphaBlend
    AlphaBlendValue
    Anchors
    AutoScroll
    AutoSize
    BiDiMode
    BorderIcons
    BorderStyle
    BorderWidth
    Caption
    ChildSizing
    ClientHeight
    ClientWidth
    Color
    Constraints
    DefaultMonitor
    DockSite
    DragKind
    DragMode
    Font
    FormStyle
    Icon
    KeyPreview
    ParentBiDiMode
    ParentFont
    PixelsPerInch
    Position
    ShowInTaskBar
    WindowState
    DoNotSaveInTable

    Эти свойства классов вы не найдёте в описании Lua-поддержки.

    В дизайнере форм вы можете увидеть свойства, которых в подобном списке нет. Это значит, что вы не можете обратиться к ним.

    Как можно использовать эти свойства? Вот ответ:

    undefined property functions. Not all properties of all classes have been explicitly exposed to lua, but if you know the name of a property of a specific class you can still access them (assuming they are declared as published in the pascal class declaration)

    getPropertyList(class) : Returns a stringlist object containing all the published properties of the specified class (free the list when done) (Note, not all classed with properties have 'published' properties. E.g: stringlist)

    setProperty(class, propertyname, propertyvalue) : Sets the value of a published property of a class (Won't work for method properties)

    getProperty(class, propertyname) : Gets the value of a published property of a class (Won't work for method properties)

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

    post-3-1312708926,84_thumb.png


    ....
    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')
    ....

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

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

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