-
Постов
2 999 -
Зарегистрирован
-
Победитель дней
129
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные MasterGH
-
-
Возможные причины:
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] // например код пытался вызвать эту перемещённую инструкцию -
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 -
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.
-
Izmalkoff, вот когда свой код приведёшь не меньше на 70% написанный для телепорта, тогда тебе скорее всего помогут подсказками.
А так с "голыми" инструкциями (да ещё без оригинального кода под инструкциями, названия игры)... тебе можно советовать искать примеры телепорта в Интернете.
-
Сайт DB существует не меньше 10 лет (вроде), а наш второй год. И мы не являемся авторами такой программы как Cheat Engine
-
Я не знаю в чём ошибка. Есть SDK есть Lazurus. Запускаешь в режиме отладки и узнаёшь причину. Maxs, если не хочешь с этим возиться, то забей.
-
Мне интересно как вставить треккерную музыку в мой проект?
Можешь поискать dll-ку проигрывания музыки или .exe - плеер. Пакуешь в ресурсы это дело и работаешь с ресурсами во время выполнения. Подробности писать не буду (мне лень) в Интернете можно найти необходимую информацию.
По поводу второго вопроса, думаю сам сможешь разобраться ( наверно, перебирая пароли к чьей-то почте )) ) не зная при этом как с кнопками работать.
-
В новых версия CE этот баг будет исправлен. Точнее он уже исправлен в SDK.
-
Я без понятия.
Зайди в SDK и найди эту ошибку по английскому названию и возможно ты определишь причину.
-
Слова для поисковиков : TreeView, IsSynchronizedCurrentItem, DataSet, TreeView1SelectedItemChanged, LINQ to XML, XmlDataProvider ...
Эта статья не претендует на полноту.
Всем известно что WPF поддерживает XmlDataProvider, а вот SIlverlight нет. В MSDN рекомендуется пользоваться LINQ to XML. Что собственно я и сделал в этом примере.
Пример:
http://mastergh.gamehacklab.ru/
Код заммеля:
<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") { }
}//---------------------------
-
Повторяющаяся музыка при запуске и до загрузки сайта.
Пример
<audio src="http://mastergh.gamehacklab.ru/sound.ogg" controls autoplay autobuffer loop>Ваш браузер не поддерживает теги <audio> </audio>! Обновите версию браузера!</audio>
Вы увидите плеер. Можно остановить музыку. Убавить громкость. Установить позицию проигрывания.
Мой сайт с музыкой
-
Хочу показать Вам ещё интересный пример на HTML5:
Когда кликаете мышкой на видео, то оно рассыпается.
Только я не понял зачем было именно такое описание типа документа:
<!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 по размеру исходника и возможно по производительности...
-
Веб-технологии не стоят на месте. Хочу показать пример того, что можно сделать на HTML5.
<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". Так же я был удивлён, что новый стандарт имеет поддержку многопоточности. Если Вы хотите подробностей, то посмотрите их в Интернете.
-
Ошибочка вышла. В LuaCall в скобках может быть только одна строка: LuaCall(функция Lua)В Автоассемблрере ревизии r1007 добавлена новая команда: LuaCall(luacommand)
[Enable]
LuaCall(ВАШ Lua-код
ВАШ Lua-код
ВАШ Lua-код
)
[Disable]Данная команда не встраивается в код игры. Она просто выполняется.
-
Слова для поисковиков : 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 ипользуя таблицы и связи.
-
В 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 -
В Автоассемблрере ревизии r1007 добавлена новая команда: LuaCall(luacommand)
[Enable]
LuaCall(ВАШ Lua-код
ВАШ Lua-код
ВАШ Lua-код
)
[Disable]Данная команда не встраивается в код игры. Она просто выполняется.
-
Большинство людей знают о 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.
-
Например Вы запустили скрипт *.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 -
И не по структуре, необходимо сделать спавн машин, и запретить спавнится машинам в городе... Но это уже к MasterGH
Это скорее к тем кто уже что-то подобное делал: VoLT, aliast. А мне разбираться со спавном некогда.
-
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 141) Поставить игру в оконный режим
2) На инструкции выше адреса 0x101337F4нажать на F5 в дизассемблере. (это установка брейкпоинта на выполнение кода, зелёное выделение)
2) Сделать в игре что-нибудь чтобы игра прервалась на брейкпоинте.
3) Активировать скрипт Автоассемблера.
4) Нажимать F7 и смотреть регистры.
5) Запомнить инструкцию перед крахом игры. Проанализировать. Изменить скрипт.
Если вылета нет, то при выходе из тела чита нажать F9 чтобы "отпустить" процесс.
Чтобы снять брейкпоинт выделить зелёную инструкцию и нажать F5.
Стоит запомнить. Отладчик специально создан для того чтобы отлавливать ошибки кода. В том числе и отлавливать ошибки ваших скриптов.
-
Люди, здрасьте, ваш скрипт на бессметрие очень хорошо работает, а как бы сделать патроны беск. и бег?
А, и еще, как сделать бессмертие в первой части игры патч 2.2
Самый простой способ.
Найти адреса значений здоровья, патронов, усталость используя сканер памяти (CheatEngine, Atmoney ...)
Поставить своё значение по адресу и заморозить.
-
Чтобы определить ошибку пользуйтесь пошаговой отладкой перед входом в тело чит-кода.
-
Продолжение о 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)
Например, я захотел сделать Лейбл названия игры, чтобы он выравнивался по центру, а также чтобы колонка Листбокса выравнивалась по центру.
....
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')
....
Частые ошибки и редкие пакостные сюрпризы
in Cheat Engine
Опубликовано
Случа4 и Случай5
Чтение(или запись) из не существующего адреса (или адреса с протекцией памяти не для чтения) и случай выполнения перемещённой инструкции.