<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="https://wfhack.mybb.forum/export.php?type=rss" rel="self" type="application/rss+xml" />
		<title>ha-ck</title>
		<link>http://wfhack.mybb.forum/</link>
		<description>ha-ck</description>
		<language>ru-ru</language>
		<lastBuildDate>Wed, 04 Mar 2015 03:57:06 +0300</lastBuildDate>
		<generator>MyBB/mybb.ru</generator>
		<item>
			<title>нормальная чистка логов</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=48#p48</link>
			<description>&lt;p&gt;ееееее ты крут шорошо обьясняеш&amp;#160; :cool:&lt;/p&gt;</description>
			<author>mybb@mybb.ru (семен)</author>
			<pubDate>Wed, 04 Mar 2015 03:57:06 +0300</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=48#p48</guid>
		</item>
		<item>
			<title>Private Address Scanner [PAS] - Сканер адресов для WarFace [RU/EU]</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=47#p47</link>
			<description>&lt;p&gt;Привет, продаю приватный сканер адресов для WarFace /WarFace Europe. Сканер имеет 2 типа лицензии а именно Standart и Extreme.&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;Standart -  Сканирует адреса только на WarFace Russia.&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;Extreme - Сканирует сразу на двух серверах а именно на WarFace Russia и WarFace Europe.&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;В будущем лицензия Extreme будет пополняться другими играми для сканирования. При этом цена будет увеличиваться.&lt;br /&gt;Для лицензии Standart цена будет всегда прежней.&lt;/p&gt;
						&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://img.chitachok.ru/image.uploads/12-09-2014/original-044bc3a9753880d63b261c1942678d92.png&quot; alt=&quot;http://img.chitachok.ru/image.uploads/12-09-2014/original-044bc3a9753880d63b261c1942678d92.png&quot; /&gt;&amp;#160; &amp;#160;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://img.chitachok.ru/image.uploads/12-09-2014/original-f2bde3e99df1a93650923176411bf69b.png&quot; alt=&quot;http://img.chitachok.ru/image.uploads/12-09-2014/original-f2bde3e99df1a93650923176411bf69b.png&quot; /&gt;&lt;/p&gt;
						&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://img.chitachok.ru/image.uploads/12-09-2014/original-a7532a2da1df2e6faf3614d448409f70.png&quot; alt=&quot;http://img.chitachok.ru/image.uploads/12-09-2014/original-a7532a2da1df2e6faf3614d448409f70.png&quot; /&gt;&lt;/p&gt;
						&lt;p&gt;Стоимость лицензий:&lt;br /&gt;Standart - 600р [Навсегда]&lt;br /&gt;Extreme - 1000р [Навсегда]&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 10.5em&quot;&gt;&lt;pre&gt;Работоспособность на:
Windows 8.1 x32/x64
Windows 8 x32/x64
Windows 7 x32/x64
Windows Vista&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Перевязка сканера бесплатная при наличии старого логина.&lt;br /&gt;Всех кого заинтересовало пишем в скайп asdwe123384&lt;/p&gt;
						&lt;p&gt;&amp;#8203;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (администратор)</author>
			<pubDate>Wed, 22 Oct 2014 09:59:55 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=47#p47</guid>
		</item>
		<item>
			<title>Если у вас не работает программа,чит или возникают иные проблемы</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=46#p46</link>
			<description>&lt;p&gt;Если у вас не работает программа,чит или возникают иные проблемы,мы постараемся вам помочь!&lt;/p&gt;
						&lt;p&gt;В этой теме обсуждаются и решаются проблемы наших пользователей,с которыми они столкнулись при использовании программ,читов скаченные с нашего сайта,то есть,если у вас не запускается/не работает ранее упомянутый софт,эта тема для вас! &lt;br /&gt;Прежде всего в обязательном порядке вы должны скачать программы которые указаны ниже,установить и перезагрузить компьютер. Если же проблема осталась,изучите внимательно эту тему и сообщения к ней,возможно проблема уже обсуждалась и была решена. &lt;br /&gt;Ну и конечно хочу озвучить очевидное,никто и ничего вам не обязан делать,все что делается на нашем сайте,все делается на добровольной основе. Если вы будите нарушать правила,хамить и грубить,вы ничего не добьетесь,кроме как заблокированного аккаунта.Прежде всего это нужно вам и только вам,так что проявите уважение к тем,кто для вас хоть что-то делает. &lt;/p&gt;
						&lt;p&gt;Программы которые обязательно должны быть установлены: &lt;br /&gt;Microsoft .NET Framework 3.5 (SP1) И Microsoft .NET Framework 4 &lt;br /&gt;Microsoft Visual C++ 2008 (x86) И Microsoft Visual C++ 2010 (x86) &lt;br /&gt;Microsoft Visual C++ 2008 SP1 x64) И Microsoft Visual C++ 2010 (x64) &lt;br /&gt;DirectX И После (SP1) &lt;br /&gt;Vcredist &lt;/p&gt;
						&lt;p&gt;Вопрос: &lt;br /&gt;При запуске чита у меня появляется диалоговое окошко,которое сообщает об отсутствии определенных файлов:d3d9.dll,msvcr80.dll,msvcr90.dll, msvcr100d и т.д.,что мне делать? &lt;br /&gt;Ответ: &lt;br /&gt;Диалоговое сообщение сообщает о том что,вы не установили программы которые указаны выше и программа или чит не может запуститься. &lt;/p&gt;
						&lt;p&gt;Прошу обратить внимание! &lt;br /&gt;Чтобы избежать блокировки игрового аккаунта,после очередного обновления проверяйте читы на твинках. &lt;br /&gt;(Твинк-аккаунт для проверки читов,фарма и т.д.) &lt;/p&gt;
						&lt;p&gt;Если вы не решили проблему после прочтения этого сообщения и изучения этой темы,оставьте заявку ниже: &lt;br /&gt;1.Ссылка на тему(на нашем сайте) &lt;br /&gt;2.В чем заключается проблема,объясните как можно более подробней,без мата,флуда и оскорблений. &lt;br /&gt;3.Скриншот по возможности. &lt;/p&gt;
						&lt;p&gt;Кто в данной теме будет писать сообщения не по теме,типа &amp;quot;Я получил бан&amp;quot; или просить помощи не по заявке-ПОЛУЧИТ БАН!&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:33:58 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=46#p46</guid>
		</item>
		<item>
			<title>Вот некоторые полные байты на замену:</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=45#p45</link>
			<description>&lt;p&gt;Вот некоторые полные байты на замену:&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;основное оружее&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;AUG A3---&amp;gt;E0 5C 92 23 41 33 00 00 00 00 00 00 30 22 28 21&lt;br /&gt;M4A1 ---&amp;gt;4D 34 41 31 00 6E 63 65 31 37 00 24 70 72 65 76&lt;br /&gt;Z84---&amp;gt;5A 38 34 00 D0 9A 00 00 00 00 00 00 50 56 77 24 75&lt;br /&gt;MG4---&amp;gt;4D 47 34 00 61 6E 63 65 39 32 00 00 4D 31 36 41&lt;br /&gt;Tavor TAR-21---&amp;gt;54 61 76 6F 72 20 54 41 52 2D 32 31 00 79 00 00&lt;br /&gt;Calico M960A---&amp;gt;43 61 6C 69 63 6F 20 4D 39 36 30 41 00 79 00 00&lt;br /&gt;Kel-Tec Shotgun---&amp;gt;4B 65 6C 2D 54 65 63 20 53 68 6F 74 67 75 6E 20&lt;br /&gt;MC 255 12---&amp;gt;4D 43 20 32 35 35 20 31 32 00 32 00 6C 69 73 74&lt;br /&gt;Piledriver---&amp;gt;50 69 6C 65 64 72 69 76 65 72 00 00 6E 65 77 00&lt;br /&gt;SPAS-12---&amp;gt; 53 50 41 53 2D 31 32 00 00 00 00 00 D0 57 CA 23&lt;br /&gt;Richmond 770---&amp;gt;52 69 63 68 6D 6F 6E 64 20 37 37 30 00 00 00 00&lt;br /&gt;CBK---&amp;gt;43 42 4B 07 DE 10 B5 2F B0 29 13 56 79 5E C0 3D&lt;br /&gt;Z84 SNR---&amp;gt;5A 38 34 20 53 4E 52 00 34 37 00 00 5F 5F 67 65&lt;br /&gt;GS Garrota---&amp;gt;47 53 20 47 61 72 72 6F 74 61 00 00 69 6E 73 74&lt;br /&gt;AS50---&amp;gt;41 53 35 30 00 20 31 20 D0 B4 2E 00 54 61 76 6F&lt;br /&gt;AC7 SNR---&amp;gt;41 43 37 20 53 4E 52 00 32 33 38 00 6E 6F 72 6D&lt;br /&gt;Kriss super V---&amp;gt;4B 72 69 73 73 20 73 75 70 65 72 20 56 00 B9 23 E0&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;пистолеты&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;Desert Eagle---&amp;gt; 44 65 73 65 72 74 20 45 61 67 6C 65 00 24 9E 1E&lt;br /&gt;Beretta M9 ---&amp;gt; 42 65 72 65 74 74 61 20 4D 39 00 00 69 6E 73 74 &lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:33:13 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=45#p45</guid>
		</item>
		<item>
			<title>Решение проблем с .dll файлами!</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=44#p44</link>
			<description>&lt;p&gt;&lt;/p&gt;
						&lt;p&gt;После этого у меня пропали проблемы с .dll файлами.&lt;br /&gt;&lt;/p&gt;
						&lt;p&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;a href=&quot;http://qps.ru/Hyg7U&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://www.rango-hack.ru/styles/default/xenforo/smilies/1885636.jpg&quot; alt=&quot;http://www.rango-hack.ru/styles/default/xenforo/smilies/1885636.jpg&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
						&lt;p&gt;&lt;a href=&quot;http://qps.ru/B2cRf&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://www.rango-hack.ru/styles/default/xenforo/smilies/18446.jpg&quot; alt=&quot;http://www.rango-hack.ru/styles/default/xenforo/smilies/18446.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:32:11 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=44#p44</guid>
		</item>
		<item>
			<title>INJECTOR ДЛЯ WARFACE</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=43#p43</link>
			<description>&lt;p&gt;Injector для Warface — Очень хорошо подойдет для тех, кто не знает использовать инжектор. В этом инжекторе не требуется вписывать значения или процесс игры, все уже было вложено в программу, а пользователю только придётся выбрать нужный ему чит в dll формате.&lt;br /&gt;----------------------------------------------------обратите внимание-------------------------------------------------&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://s019.radikal.ru/i610/1206/85/6434d12e39a5.jpg&quot; alt=&quot;http://s019.radikal.ru/i610/1206/85/6434d12e39a5.jpg&quot; /&gt;&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;инструкция запуска&lt;br /&gt;--------------------&lt;br /&gt;1. Скачать Injector для Warface.&lt;br /&gt;2. Распаковать и запустить файл Injector Warface.exe&lt;br /&gt;3. Нажать в запущенном инжекторе на «Открыть DLL» и выбрать нужный вам чит в dll формате.&lt;br /&gt;4. Далее запускаем игру, инжектор автоматически закроется и можно играть с читом в Warface.&lt;/p&gt;
						&lt;p&gt;Скачать с Getzilla&lt;br /&gt;&lt;a href=&quot;http://www.getzilla.net/files/3891136/injektor__19_07_12.zip.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://www.getzilla.net/files/3891136/i &amp;#8230; 2.zip.html&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:31:02 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=43#p43</guid>
		</item>
		<item>
			<title>СПЕЦИАЛЬНЫЙ ИНЖЕКТОР ДЛЯ WARFACE</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=42#p42</link>
			<description>&lt;p&gt;Всем привет!&lt;br /&gt;Представляю Вашему вниманию&lt;br /&gt;новый инжектор&lt;br /&gt;специально для игры:&lt;br /&gt;&amp;quot;Warface&amp;quot;&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://s58.radikal.ru/i159/1308/78/19c302436776.jpg&quot; alt=&quot;http://s58.radikal.ru/i159/1308/78/19c302436776.jpg&quot; /&gt;&lt;br /&gt;Инжектор аналогичен по работе и использованию с инжектором &lt;br /&gt;&amp;quot;Perx&amp;quot;&lt;br /&gt;сылка&lt;br /&gt;&lt;a href=&quot;http://dfiles.ru/files/t71gbsx1m&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://dfiles.ru/files/t71gbsx1m&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:30:42 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=42#p42</guid>
		</item>
		<item>
			<title>мини-инжектор dll для WarFace</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=41#p41</link>
			<description>&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://s53.radikal.ru/i141/1307/23/368ab1e85972.jpg&quot; alt=&quot;http://s53.radikal.ru/i141/1307/23/368ab1e85972.jpg&quot; /&gt;&lt;br /&gt;Описание:&lt;br /&gt;Данный инжектор для Warface крайне прост в обращении и что самое главное он удивительно мал в размерах.&lt;br /&gt;инструкция&lt;br /&gt;1.Качаем архив &lt;br /&gt;2.Открываем файл Injector DLL.exe&lt;br /&gt;3.Выбираем dll нашего чита&lt;br /&gt;4.В game process пишем Game.exe и &amp;quot;инжектим&amp;quot;&lt;/p&gt;
						&lt;p&gt;Качаем от сюда:&lt;br /&gt;&lt;a href=&quot;http://dfiles.ru/files/xhmn4dy0n&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://dfiles.ru/files/xhmn4dy0n&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://turbobit.net/yp6jm9cgmd26.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://turbobit.net/yp6jm9cgmd26.html&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:30:10 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=41#p41</guid>
		</item>
		<item>
			<title>ИНЖЕКТОР PERX ДЛЯ WARFACE ОТ 11.08.2013</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=40#p40</link>
			<description>&lt;p&gt;инжектор Perx&lt;br /&gt;Инжектор был переработан и процесс WarFace уже прописан,вам нужно только указать DLL файл&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://s020.radikal.ru/i711/1308/a2/310ee6bbc7b4.jpg&quot; alt=&quot;http://s020.radikal.ru/i711/1308/a2/310ee6bbc7b4.jpg&quot; /&gt;&lt;br /&gt;Описание:&lt;br /&gt;Данный инжектор для Warface крайне прост в обращении,полностью на русском языке, и что самое главное он удивительно мал в размерах.&lt;br /&gt;инструкция&lt;br /&gt;1.Качаем архив/распаковываем &lt;br /&gt;2.Открываем файл Perx.exe&lt;br /&gt;3.Выбираем dll нашего чита&lt;br /&gt;4.Запускаем игру и радуемся.&lt;br /&gt;&lt;a href=&quot;http://dfiles.ru/files/93fu20x72&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://dfiles.ru/files/93fu20x72&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:29:35 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=40#p40</guid>
		</item>
		<item>
			<title>FLAME INJECTOR ОТ [20.12.13]</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=39#p39</link>
			<description>&lt;p&gt;Привет!&lt;/p&gt;
						&lt;p&gt;Выкладываю Flame Injector от [20.12.13] для Warface&lt;/p&gt;
						&lt;p&gt;Данный инжектор может подойти и для других игр&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://s017.radikal.ru/i426/1312/84/68966bc6691d.png&quot; alt=&quot;http://s017.radikal.ru/i426/1312/84/68966bc6691d.png&quot; /&gt;&lt;br /&gt;инструкция&lt;br /&gt;1) Скачать инжектор&lt;br /&gt;2) Запустить его от админа&lt;br /&gt;3) В Process пишите Game (если это Warface), либо находите процесс вашей игры и вписывайте&lt;br /&gt;4) Нажимаете Browse и выбираете dll вашего чита&lt;br /&gt;5) Выбираете способ инжекта: Auto-Inject - авто инжект, Manual Inject - ручной инжект&lt;br /&gt;6) Close after Injection - Закрыть инжектор после того как dll вашего чита будет инжектирован&lt;br /&gt;7) Если вы выбрали авто инжект то после входа в игру dll автоматически инжектися&lt;br /&gt;8) Если вы выбрали ручной инжект то когда вы войдёти в игру, сверните её и нажмите кнопку Inject&lt;br /&gt;Всё:)&lt;br /&gt;сылка&lt;br /&gt;&lt;a href=&quot;http://turbobit.net/7xdh8hq369k1.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://turbobit.net/7xdh8hq369k1.html&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:28:29 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=39#p39</guid>
		</item>
		<item>
			<title>EXTREME INJECTOR V2 [18.12.13]</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=38#p38</link>
			<description>&lt;p&gt;Всем привет! Выкладываю инжектор для игры Warface.&lt;/p&gt;
						&lt;p&gt;Обновление от 18.12.13.&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://s020.radikal.ru/i716/1312/7d/ad408a65f8cb.png&quot; alt=&quot;http://s020.radikal.ru/i716/1312/7d/ad408a65f8cb.png&quot; /&gt;&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://s42.radikal.ru/i095/1312/d8/3660e00e35b9.png&quot; alt=&quot;http://s42.radikal.ru/i095/1312/d8/3660e00e35b9.png&quot; /&gt;&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://s019.radikal.ru/i602/1312/1f/df0aa6e2f978.png&quot; alt=&quot;http://s019.radikal.ru/i602/1312/1f/df0aa6e2f978.png&quot; /&gt;&lt;br /&gt;инструкция&lt;br /&gt;1) Скачивате Extreme Injector v2 &lt;br /&gt;1) Запускаете инжектор от админа&lt;br /&gt;2) В поле Process Name пишите: Game.exe&lt;br /&gt;3) Нажимаете Add DLL, выбираете dll вашего чита&lt;br /&gt;4) Запускаете игру и когда она загрузится, сворачиваете и жмёте Inject&lt;br /&gt;сылка&lt;br /&gt;&lt;a href=&quot;http://turbobit.net/h55bo5o82xpw.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://turbobit.net/h55bo5o82xpw.html&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:27:57 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=38#p38</guid>
		</item>
		<item>
			<title>ИНЖЕКТОР ДЛЯ WARFACE</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=37#p37</link>
			<description>&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://www.pixic.ru/i/702042m534P1P8k7.png&quot; alt=&quot;http://www.pixic.ru/i/702042m534P1P8k7.png&quot; /&gt;&lt;br /&gt;Инструкция&lt;br /&gt;Скачать инжектор &lt;br /&gt;Запустит его &lt;br /&gt;Написать процесс Без .exe &lt;br /&gt;Выбрать режим&lt;br /&gt;Открыть DLL&lt;br /&gt;сылка&lt;br /&gt;&lt;a href=&quot;http://turbobit.net/fhf7427b6kgo.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://turbobit.net/fhf7427b6kgo.html&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:27:28 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=37#p37</guid>
		</item>
		<item>
			<title>ИНЖЕКТОР VALKYRIE V 3.0 FINA</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=36#p36</link>
			<description>&lt;p&gt;Valkirie V 3.0 — очень компактный, удобный и работающий инжектор, скачать его вы можете на нашем сайте.&lt;/p&gt;
						&lt;p&gt;Скриншот инжектора:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://s45.radikal.ru/i109/1310/25/5068276c0f8f.png&quot; alt=&quot;http://s45.radikal.ru/i109/1310/25/5068276c0f8f.png&quot; /&gt;&lt;br /&gt;Инструкция:&lt;br /&gt;1) Запускаем инжектор &lt;br /&gt;2) Заходим в настройки ставим галочку над пунктом «Автоинжектирование» &lt;br /&gt;3) Вписываем процесс Game.exe &lt;br /&gt;4) Нажимаем на добавить и выбираем dll чит &lt;br /&gt;5) Жмем на слово «Инжектор» &lt;br /&gt;6) Запускаем игру.&lt;br /&gt;сылка&lt;br /&gt;&lt;a href=&quot;http://turbobit.net/25mce3s2z2ew.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://turbobit.net/25mce3s2z2ew.html&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:26:57 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=36#p36</guid>
		</item>
		<item>
			<title>ИНЖЕКТОР ДЛЯ WARFACE RADARINJECTOR</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=35#p35</link>
			<description>&lt;p&gt;Всем привет ;)&lt;/p&gt;
						&lt;p&gt;Инжекторы на Warface, если кто не знает, созданы специально чтобы внедряться в процесс игры тем самым внедрять чит в формате .dll. К примеру: wh.dll speedhack.dll или же всем известный MultiHack для Warface - SWW2.dll&lt;br /&gt;======================================================================&lt;br /&gt;Скриншот инжектора:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://i019.radikal.ru/1310/b3/49f105faaef9.jpg&quot; alt=&quot;http://i019.radikal.ru/1310/b3/49f105faaef9.jpg&quot; /&gt;&lt;br /&gt;======================================================================&lt;/p&gt;
						&lt;p&gt;1. Для начала скачать сам инжектор RadarInjector бесплатно с нашего сайта и распаковать на рабочий стол. &lt;br /&gt;2. Запустить RadarInjector. &lt;br /&gt;3. В поле &amp;quot;Process&amp;quot; пишем: Game.exe и ставим галочку возле AutoInjection. &lt;br /&gt;4. Далее выбираем нужный вам dll файл. &lt;br /&gt;5. Потом просто заходим в игру Warface, и если инжектор закрылся значит все проделано успешно и чит будет работать.&lt;br /&gt;===================================================================&lt;br /&gt;сылка&lt;br /&gt;&lt;a href=&quot;http://turbobit.net/lqwl0568dzz3.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://turbobit.net/lqwl0568dzz3.html&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:26:33 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=35#p35</guid>
		</item>
		<item>
			<title>ИНЖЕКТОР РОБОЧИЙ НА 21.20.2014</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=34#p34</link>
			<description>&lt;p&gt;Привет друзья!&lt;br /&gt;Выкладываю инжектор.&lt;br /&gt;Скрин:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://i065.radikal.ru/1309/b9/fa3451dda471.png&quot; alt=&quot;http://i065.radikal.ru/1309/b9/fa3451dda471.png&quot; /&gt;&lt;br /&gt;Инструкция по инжекту:&lt;br /&gt;Как Инжектить&lt;/p&gt;
						&lt;p&gt;1) Качаем Инжектор &lt;br /&gt;2) Запускаем Игру&lt;br /&gt;3) Запускаем Инжектор&lt;br /&gt;4) Вставляем чит в формате длл&lt;br /&gt;5) В процесах выбираем Game&lt;br /&gt;6) Нажимаем Инжект&lt;br /&gt;7) Розворачиваем Игру&lt;br /&gt;8) Включаем функции Чита&lt;br /&gt;9) Играем!&lt;br /&gt;сылка&lt;br /&gt;&lt;a href=&quot;http://dfiles.ru/files/m9jhh4s32&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://dfiles.ru/files/m9jhh4s32&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:25:40 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=34#p34</guid>
		</item>
		<item>
			<title>инжектор</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=33#p33</link>
			<description>&lt;p&gt;Всем привет,решил выложить инжектор.&lt;br /&gt;Скриншот инжектора:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://s018.radikal.ru/i516/1309/cb/1afcce04db78.jpg&quot; alt=&quot;http://s018.radikal.ru/i516/1309/cb/1afcce04db78.jpg&quot; /&gt;&lt;br /&gt;Инструкция по применению:&lt;br /&gt;Скачать архив&lt;br /&gt;Распаковать архив&lt;br /&gt;Открыть папку с файлами&lt;br /&gt;Открыть инжектор&lt;br /&gt;В процесс ввести Game ( Без .exe )&lt;br /&gt;Открыть DLL&lt;br /&gt;Нажать &amp;quot; Инжект &amp;quot;&lt;br /&gt;Открыть игру&lt;br /&gt;сылка&lt;br /&gt;&lt;a href=&quot;http://turbobit.net/ezktab45bxz2.html&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://turbobit.net/ezktab45bxz2.html&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:24:52 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=33#p33</guid>
		</item>
		<item>
			<title>ИНЖЕКТОР DY UFDHBI</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=32#p32</link>
			<description>&lt;p&gt;Всем привет!&lt;br /&gt;Предтсавляю вашему вниманию&lt;br /&gt;Новый инжектор by ufdhbi&lt;br /&gt;Специально для игры Warface&lt;br /&gt;Скриншот:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://s018.radikal.ru/i513/1308/aa/df4b9a8dd832.jpg&quot; alt=&quot;http://s018.radikal.ru/i513/1308/aa/df4b9a8dd832.jpg&quot; /&gt;&lt;br /&gt;Описание:&lt;br /&gt;Данный инжектор для Warface крайне прост в обращении,полностью на русском языке, и что самое главное он удивительно мал в размерах.&lt;br /&gt;Инструкция:&lt;br /&gt;Качаем архив/распаковываем&lt;br /&gt;Открываем инжектор by ufdhbi&lt;br /&gt;Ставим режим автоматический&lt;br /&gt;пишем процесс Game.exe&lt;br /&gt;Выбираем dll чита который нам нужен&lt;br /&gt;запускаем и радуемся&lt;br /&gt;сылка&lt;br /&gt;&lt;a href=&quot;http://dfiles.ru/files/ioz6jwao2&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://dfiles.ru/files/ioz6jwao2&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:24:24 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=32#p32</guid>
		</item>
		<item>
			<title>Создаем свой Wallhack для Warface</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=31#p31</link>
			<description>&lt;p&gt;Данная статья для тех кому надоело искать рабочий читы для warface. В данной статьи речь пойдёт от том как создать свойwallhack для игры warface без знаний программирования.&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;делаем свой wallhack&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;Для начала нам понадобится:&lt;br /&gt;DirectX SDK ( ищем сами или скачайте на сайте microsoft )&lt;br /&gt;Логгер текстур: СКАЧАТЬ&lt;br /&gt;Direct3D StarterKit v3.0b (by Azorbix): СКАЧАТЬ&lt;/p&gt;
						&lt;p&gt;Microsoft Visual Studio 2010&amp;#160; ( ищем сами или скачайте на сайте microsoft )&lt;br /&gt;Немного знаний C++, D3D - _Google_&lt;/p&gt;
						&lt;p&gt;================================================== ===========================================&lt;/p&gt;
						&lt;p&gt;Настройка D3D StarterKit:&lt;/p&gt;
						&lt;p&gt;Первым делом устанавливаем Microsoft Visual Studio и DirectX SDK&lt;br /&gt;Запускаем программу и идём в Tools-&amp;gt;Options-&amp;gt;Projects and Solutions&amp;gt;VC++ Directories&lt;/p&gt;
						&lt;p&gt;Во вкладке Show directories for: Выбираем Include files и добавляем путь к нашему DirectX SD K к папке \Include&lt;/p&gt;
						&lt;p&gt;Делаем тоже самое для Library Files (..\Lib\x86), Executable files(..\)&lt;/p&gt;
						&lt;p&gt;Всё, теперь мы сможем откомпилить наш Direct3D StarterKit v3.0b&lt;/p&gt;
						&lt;p&gt;================================================== ===========================================&lt;br /&gt;Настройка Injector&#039;а:&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;В main.cpp нужно изменить только 1 строчку:&lt;br /&gt;Код:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;#define APP_EXE &amp;quot;target_application.exe&amp;quot;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;де target_application.exe прописываем название вашей игры&lt;/p&gt;
						&lt;p&gt;Например:&lt;/p&gt;
						&lt;p&gt;xrEngine.exe, FarCry2.exe, iw3mp.exe.&lt;/p&gt;
						&lt;p&gt;Важно!&lt;br /&gt;Название .dll файла и инжектора должны быть одинаковыми.&lt;/p&gt;
						&lt;p&gt;================================================== ===========================================&lt;/p&gt;
						&lt;p&gt;Как сделать обычный валлхак&lt;/p&gt;
						&lt;p&gt;1. Ищем текстуры которые нам нужны используя логгер текстур.&lt;/p&gt;
						&lt;p&gt;2. Прописываем их в нашем Direct3D StarterKit v3.0b в d3d9dev.cpp в начале файла&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;Пример:&lt;br /&gt;Код:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;#define MyWallhack ((NumVertices == xx &amp;amp;&amp;amp; primCount == xx) || (NumVertices == xx &amp;amp;&amp;amp; primCount == xx))
bool bWallHack = false;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;3. Теперь идём в DrawIndexedPrimitive&lt;/p&gt;
						&lt;p&gt;и добавляем:&lt;br /&gt;Код:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 18em&quot;&gt;&lt;pre&gt;if (bWallHack)
{
if (MyWallhack)
{
DWORD dwOldZEnable;
m_pD3Ddev-&amp;gt;GetRenderState(D3DRS_ZENABLE,&amp;amp;dwOldZEnable);
m_pD3Ddev-&amp;gt;SetRenderState(D3DRS_ZENABLE,D3DZB_FALSE);
m_pD3Ddev-&amp;gt;DrawIndexedPrimitive(Type,BaseVertexIndex,MinVertexIndex,NumVertices,startIndex,primCount);
m_pD3Ddev-&amp;gt;SetRenderState(D3DRS_ZENABLE,dwOldZEnable);
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;}&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;4. Идём в EndScene и ставим валлхак на кнопку включить\выключить:&lt;br /&gt;Код:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;if(GetAsyncKeyState( VK_NUMPAD1 ) &amp;amp;1 )
bWallHack = !bWallHack;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;5. Компилим, инжектим, заходим в игру жмём NUMPAD 1 и видим результат.&lt;br /&gt;================================================== ===========================================&lt;/p&gt;
						&lt;p&gt;Как убрать туман в игре:&lt;/p&gt;
						&lt;p&gt;Тут всё ещё проще.&lt;/p&gt;
						&lt;p&gt;С верху файла добавляем: &lt;br /&gt;Код:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 13.5em&quot;&gt;&lt;pre&gt;bool bFog = false;
Код:
Идём в DrawIndexedPrimitive и добавляем такую строчку:
if(bFog)
{
m_pD3Ddev-&amp;gt;SetRenderState( D3DRS_FOGENABLE , false );
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;Теперь в EndScene&lt;br /&gt;Код:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;if(GetAsyncKeyState( VK_NUMPAD2 ) &amp;amp;1 )
bFog = !bFog;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;unsigned int m_Stride;&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;unsigned int m_Stride;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;Далее, идем в SetStreamSource и прописываем там перед return m_pD3Ddev-&amp;gt;SetStreamSource:&lt;br /&gt;Код:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;if(StreamNumber==0) m_Stride=Stride;
Теперь вместо строчки вначале кода #define MyWallhack ((NumVertices == xx &amp;amp;&amp;amp; primCount == xx) || (NumVertices == xx &amp;amp;&amp;amp; primCount == xx))&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;вставляем строчку:&lt;br /&gt;Код:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;#define MyWallhack ((m_Stride == 28))&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;вставляем строчку:&lt;br /&gt;Код:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;#define MyWallhack ((m_Stride == 28))&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;от и всё! Вы будете видеть других игроков сквозь стены!&lt;br /&gt;Теперь о том, как сделать из Wallhack&#039;a Chams:&lt;br /&gt;В начале d3d9dev.cpp прописываем:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;int a=1;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;Далее после всех bool&#039;ов вставляем этот код:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;LPDIRECT3DTEXTURE9 Pink;
const BYTE bPink[58] =
{
0x42, 0x4D, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0xFF, 0x00
};
LPDIRECT3DTEXTURE9 Blue;
const BYTE bBlue[60] =
{
0x42, 0x4D, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00
};&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;Можно использовать и другие цвета, на ваш вкус, байты которых можно найти в гугле, в частности, они есть здесь:&lt;br /&gt;&lt;a href=&quot;http://ghbsys.net/ghb/index.php?showtop&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;http://ghbsys.net/ghb/index.php?showtop&lt;/a&gt; … e=threaded&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;Идём в BeginScene() и вставляем такие строки перед return &lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 12em&quot;&gt;&lt;pre&gt;if (a==1)
{
D3DXCreateTextureFromFileInMemory(m_pD3Ddev,(LPCVOID)&amp;amp;bPink,58,&amp;amp;Pink);
D3DXCreateTextureFromFileInMemory(m_pD3Ddev,(LPCVOID)&amp;amp;bBlue,60,&amp;amp;Blue);
a=0;
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;Теперь идем в DrawIndexedPrimitive, к нашему волхаку и после строчки&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;m_pD3Ddev-&amp;gt;SetRenderState(D3DRS_ZENABLE,D3DZB_FALSE);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;вставляем такую:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;m_pD3Ddev-&amp;gt;SetTexture(0,Blue);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;Вот собственно и всё! Chams готов! xrEngine.exe dll - это либа, которая компилится из D3D Starterkit&#039;a(TatniumD3D.vcproj) Инжектор - это прога, которая инжектит либу в игру(main.cpp/TatniumInjector.vcproj) В общем у тебя должно быть откомпилино: 1 либа, которую называешь TatniumD3D.dll и 1 екзешник, который обзываешь TatniumD3D.exe, ложешь их рядом(в одну папку пох куда) и запускаешь TatniumD3D.exe, нажимаешь ОК, запускаешь игру, нажимаешь 1 на дополнительной(цифровой) клавиатуре, только не забудь включить NumLock.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:22:34 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=31#p31</guid>
		</item>
		<item>
			<title>делаем своё d3d Меню</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=30#p30</link>
			<description>&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;D3D9_Menu от А до Я (DirectX, C++,Dll)&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot; style=&quot;text-align: center&quot;&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;color: lime&quot;&gt;D3D9_Menu от А до Я (DirectX, C++,Dll)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;display: block; text-align: center&quot;&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;Иногда нечем занятся, поэтому решил написать серию туториалов на тему &amp;quot;написания своего &amp;quot;скелета&amp;quot; для ......&amp;quot;. Постараюсь обьяснить все от А до Я(хотя это зависит от настроения и желания).&lt;br /&gt;Сразу огаворюсь: Описание будет направлено на юзера которы хоть немного знаком с матчастью(т.е. тот которому не придется подробно объяснять чем переменная int отличается от переменной bool, и какие значения они могут принимать.)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
						&lt;p&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;display: block; text-align: center&quot;&gt;После каждого &amp;quot;тутора&amp;quot; будет прикреплен исходный код проделанного(полнаценный проект). Писаться будет все на одном проекте и с каждым последующем уроком выкладываться будет дополненный предыдущий проект. Таким образом в конце всей ленейки будет предаставлен полноценный &amp;quot;скелет&amp;quot; .&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
						&lt;p&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;Пока не решил каким образом будет оформлены уроки. варианта два: - Все будет в одной теме, каждый урок в новом сообщении, либо второй вариант - каждый новый урок в новой теме.&lt;/span&gt;&lt;/p&gt;
						&lt;p&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;display: block; text-align: center&quot;&gt;Текст скорее всего будет с орф. ошибками и иправлять их скорее всего не буду(хотя постараюсь писать грамотно), поэтому по этому поводу прошу не поднимать шум и принять это как стиль написания автора)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot; style=&quot;text-align: center&quot;&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;color: lime&quot;&gt;Les #1 - SDK&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;display: block; text-align: center&quot;&gt;ИСПОЛЬЗУЕТСЯ &amp;quot;Microsoft Visual Studio 2010&amp;quot;&lt;/p&gt;
						&lt;p&gt;Первым делом сделаем свою жизнь проще, а именно подключим DirectX Software Development Kit(SDK). Но делать это мы будем не указывая пути в настройках проекта, а используя для этого стандартные пути включаемых фаилов и библиотек Microsoft Visual Studio(MVS).&lt;/p&gt;
						&lt;p&gt;Узнаем где у нас установлена MVS. Если во время установки все осталось по дефолту, то искать нужно в папке &amp;quot;С:\Program Files\Microsoft Visual Studio 10.0&amp;quot; (это для 32-х битных систем, какой дефолтный путь на 64-х я не знаю).&lt;br /&gt;Открыв папку с MVS видим среди всего прочего папку &amp;quot;VC&amp;quot;, именно сюда нужно поместить фаилы SDK.&lt;/p&gt;
						&lt;p&gt;Скачиваем относительно своей системы: SDK x86(x32) SDK x64&lt;br /&gt;Распаковываем архив в папку &amp;quot;VC&amp;quot;, соглашаясь на слияние папок и замену фаилов.&lt;/p&gt;
						&lt;p&gt;С установкой SDK мы закончили. Теперь нет необходимости вручную указывать пути в настройках, тем самым экономим время в будующем и избигаем некоторых проблем)&lt;/span&gt;\&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;display: block; text-align: center&quot;&gt;&lt;span style=&quot;color: lime&quot;&gt;Les #2 - Создание проекта&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;&lt;span style=&quot;display: block; text-align: center&quot;&gt;Открываем MVS. Создаем новый проект:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://forumstatic.ru/files/2013/12/04/10a7fa37b5eeab50cd0b.jpg&quot; alt=&quot;http://forumstatic.ru/files/2013/12/04/10a7fa37b5eeab50cd0b.jpg&quot; /&gt;&lt;/span&gt;&lt;/p&gt;
						&lt;p&gt;Нажимаем &amp;quot;Далее&amp;quot;. Настраиваем проект:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://img812.imageshack.us/img812/2254/m5gu.png&quot; alt=&quot;http://img812.imageshack.us/img812/2254/m5gu.png&quot; /&gt;&lt;/p&gt;
						&lt;p&gt;Нажимаем по проекту ПКМ -&amp;gt; Свойства и выставляем все согласно скрину&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://i.imgur.com/nVHOiGa.png&quot; alt=&quot;http://i.imgur.com/nVHOiGa.png&quot; /&gt;&lt;/p&gt;
						&lt;p&gt;Добавляем к проекту фаил .cpp: ПКМ по проекту - Добавить - Создать новый фаил - Выбираем &amp;quot;Фаил .cpp&amp;quot; - называем его любым именем(я назову Base.cpp).Это будет основной фаил проекта и &amp;quot;на него&amp;quot; будем лепить все остальное.&lt;/p&gt;
						&lt;p&gt;Теперь заполним минимум, а именно напишем точку иницализации\входа нашей dll.&lt;br /&gt;Подключаем к проекту:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;#include &amp;lt;Windows.h&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;quote-box quote-main&quot;&gt;&lt;blockquote&gt;&lt;p&gt;windows.h является Windows-конкретный файл заголовков для языка C программирования, который содержит заявления для всех функций в Windows API...&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
						&lt;p&gt;Сама точка доступа имеет вид:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 15em&quot;&gt;&lt;pre&gt;BOOL WINAPI DllMain(HMODULE hDll, DWORD dwReason, LPVOID lpReserved)
{
if (dwReason==DLL_PROCESS_ATTACH)
{

}
return TRUE;
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Пока из всех значений dwReason нам потребуется только &amp;quot;DLL_PROCESS_ATTACH&amp;quot;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;display: block; text-align: center&quot;&gt;&lt;span style=&quot;color: lime&quot;&gt;Les #3 - d3d9 hook &amp;amp; EndScene&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;Напишем функцию которая будет перехватывать оригинальный метод DirectX9 - EndScene(ES), выполнять необходимые нам действия и возвращала бы все &amp;quot;на круги своя&amp;quot;...&lt;/p&gt;&lt;div class=&quot;quote-box quote-main&quot;&gt;&lt;blockquote&gt;&lt;p&gt;EndScene - метод который вызывается после окончания сцены.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
						&lt;p&gt;Работать будем пока только с этим методом(впринципе его достаточно для наших действий)&lt;/p&gt;
						&lt;p&gt;Для описания хука нам потребуется несколько функций для работы с памятью. Завернем их все в класс cMemory.&lt;br /&gt;Будем добавлять с помощью &amp;quot;Мастера классов&amp;quot;&lt;/p&gt;&lt;div class=&quot;quote-box quote-main&quot;&gt;&lt;blockquote&gt;&lt;p&gt;ПКМ по проекту -&amp;gt; Добавить -&amp;gt; Класс&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
						&lt;p&gt;в открывшемся окне нажимаем &amp;quot;Далее&amp;quot; и заполняем согласно скрину:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://i.imgur.com/64lh6Lw.png&quot; alt=&quot;http://i.imgur.com/64lh6Lw.png&quot; /&gt;&lt;/p&gt;
						&lt;p&gt;Можно и вручную создать фаилы, но зачем нужны лишние движения?&lt;/p&gt;
						&lt;p&gt;После этого у вас появятся два фаила: cMemory.cpp и cMemory.h&lt;br /&gt;Работаем с cMemory.h:&lt;br /&gt;подключим &amp;quot;Windows.h&amp;quot;&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;#include &amp;lt;Windows.h&amp;gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;добавим три прототипа для функций в класс:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 16.5em&quot;&gt;&lt;pre&gt;class cMemory
{
public:
cMemory(void);
~cMemory(void);
BOOL  bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask);
DWORD FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask);
void *Create_Hook(BYTE *src, const BYTE *dst, const int len);
};&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;FindPattern - функция для поиска адресса по уникальному набору байт.&lt;br /&gt;Create_Hook - функция для установки хука.&lt;/p&gt;
						&lt;p&gt;работаем с cMemory.cpp&lt;br /&gt;Описываем указанные функции:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;BOOL   cMemory::bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask)
{
for(;*szMask;++szMask,++pData,++bMask)
  if(*szMask==&#039;x&#039; &amp;amp;&amp;amp; *pData!=*bMask)
   return false;
return (*szMask) == NULL;
}
DWORD  cMemory::FindPattern(DWORD dwAddress,DWORD dwLen,BYTE *bMask,char * szMask)
{
for(DWORD i=0; i &amp;lt; dwLen; i++)
  if( bCompare((BYTE*)(dwAddress+i),bMask,szMask))
   return (DWORD)(dwAddress+i);
return 0;
}
void * cMemory::Create_Hook(BYTE *src, const BYTE *dst, const int len)
{
BYTE *jmp;
DWORD dwback;
DWORD jumpto, newjump;
VirtualProtect(src,len,PAGE_READWRITE,&amp;amp;dwback);
if(src[0] == 0xE9)
{
  jmp = (BYTE*)malloc(10);
  jumpto = (*(DWORD*)(src+1))+((DWORD)src)+5;
  newjump = (jumpto-(DWORD)(jmp+5));
  jmp[0] = 0xE9;
  *(DWORD*)(jmp+1) = newjump;
  jmp += 5;
  jmp[0] = 0xE9;
  *(DWORD*)(jmp+1) = (DWORD)(src-jmp);
}
else
{
  jmp = (BYTE*)malloc(5+len);
  memcpy(jmp,src,len);
  jmp += len;
  jmp[0] = 0xE9;
  *(DWORD*)(jmp+1) = (DWORD)(src+len-jmp)-5;
}
src[0] = 0xE9;
*(DWORD*)(src+1) = (DWORD)(dst - src) - 5;
for(int i = 5; i &amp;lt; len; i++)
  src[i] = 0x90;
VirtualProtect(src,len,dwback,&amp;amp;dwback);
return (jmp-len);
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Подключаем cMemory.h к Base.cpp:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;#include &amp;quot;cMemory.h&amp;quot;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;И задаем указатель на класс&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;cMemory *MemHack;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Теперь будем описывать перехват ES(работаем с Base.cpp).&lt;br /&gt;Подключаем необходимые фаилы и либы:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 12em&quot;&gt;&lt;pre&gt;#include &amp;lt;d3d9.h&amp;gt;
#include &amp;lt;d3dx9.h&amp;gt;
#define D3DparamX  , UINT paramx
#define D3DparamvalX , paramx
#pragma comment(lib, &amp;quot;d3d9.lib&amp;quot;)
#pragma comment(lib, &amp;quot;d3dx9.lib&amp;quot;)&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Далее указываем:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;typedef HRESULT (WINAPI* oEndScene)(LPDIRECT3DDEVICE9 pDevice);
oEndScene pEndScene = NULL;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Более менее сносное объяснение этому:&lt;/p&gt;&lt;div class=&quot;quote-box quote-main&quot;&gt;&lt;blockquote&gt;&lt;p&gt;oEndScene - указатель на функцию с соглашением вызова WINAPI, принимающую один параметр типа LPDIRECT3DDEVICE9 и возвращающую HRESULT&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
						&lt;p&gt;Описываем метод ES:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 12em&quot;&gt;&lt;pre&gt;typedef HRESULT (WINAPI* oEndScene)(LPDIRECT3DDEVICE9 pDevice);
oEndScene pEndScene = NULL;
HRESULT APIENTRY myEndScene( LPDIRECT3DDEVICE9 pDevice )
{
return pEndScene( pDevice );
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;именно здесь мы будем &amp;quot;рисовать&amp;quot;)&lt;/p&gt;
						&lt;p&gt;И непосредственно сам поток с хуком:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 16.5em&quot;&gt;&lt;pre&gt;int D3d9_Hook(void)
{
DWORD*vtbl=0;
DWORD hD3D9=(DWORD)LoadLibraryA(&amp;quot;d3d9.dll&amp;quot;);
DWORD table=MemHack-&amp;gt;FindPattern(hD3D9,0x128000,(PBYTE)&amp;quot;\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86&amp;quot;,&amp;quot;xx????xx????xx&amp;quot;);
memcpy(&amp;amp;vtbl,(void*)(table+2),4);
pEndScene=(oEndScene)MemHack-&amp;gt;Create_Hook((PBYTE)vtbl[42],(PBYTE)myEndScene,5);
return 0;
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Код самый примитивный) подробно разбирать его не вижу смысла.&lt;/p&gt;
						&lt;p&gt;Теперь на иницализацию нашей DLL запустим поток. Что бы не писать постоянно всю функцию CreateThread(вдруг еще гне нужно будет) опишем для нее небольшой макрос:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;#define new_My_Thread(Function) CreateThread(0,0,(LPTHREAD_START_ROUTINE)Function,0,0,0);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;и на дописываем к точке доступа:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 15em&quot;&gt;&lt;pre&gt;BOOL WINAPI DllMain(HMODULE hDll, DWORD dwReason, LPVOID lpReserved)
{
if (dwReason==DLL_PROCESS_ATTACH)
{
  new_My_Thread(D3d9_Hook);
}
return TRUE;
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;ыыыыЫ:Будет дополнятся в зависимости от свободного времени и настроения&lt;/p&gt;
						&lt;p&gt;Писать в одном сообщении все - сложно, поэтому туторы быдут разбиты на сообщения. На усмотрение администрации все останется в таком виде, либо соеденятся со стартовым сообщением.&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot; style=&quot;text-align: center&quot;&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;color: lime&quot;&gt;Les #4 - Text&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;Для рисования(текста, боксов, бордеров и прочего) опишим еще один класс - cRender.как это сделать было описано выше.&lt;/p&gt;
						&lt;p&gt;Подключаем cRender.h к Base.cpp:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;#include &amp;quot;cRender.h&amp;quot;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;задаем указатель на класс&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;cRender Render;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Также для всего нам понадобится определения цветов. Создадим фаил Colors.h.&lt;br /&gt;Для определения будем использовать структуру enum:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 7.5em&quot;&gt;&lt;pre&gt;enum Colors : D3DCOLOR
{
};&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;У меня это выглядит так:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;enum Colors : D3DCOLOR
{
ORANGE       =   D3DCOLOR_ARGB(255,255,125,0),
YELLOW        =   D3DCOLOR_ARGB(255,255,255,0),
GREY          =   D3DCOLOR_ARGB(255,128,128,128),
PURPLE        =   D3DCOLOR_ARGB(255,125,0,255),
WHITE    =   D3DCOLOR_ARGB(255, 255, 255, 255),
RED     =   D3DCOLOR_ARGB(255, 255, 000, 000),
GREEN    =   D3DCOLOR_ARGB(255, 000, 255, 000),
BLUE    =   D3DCOLOR_ARGB(255, 000, 000, 255),
BLACK    =   D3DCOLOR_ARGB(255, 000, 000, 000),
AliceBlue = 0xFFF0F8FF,
RED_1    =   D3DCOLOR_ARGB(40, 255, 000, 000),
line_Color = 0xff00ffff,
AntiqueWhite = 0xFFFAEBD7,
Aqua = 0xFF00FFFF,
Aquamarine = 0xFF7FFFD4,
Azure = 0xFFF0FFFF,
Beige = 0xFFF5F5DC,
Bisque = 0xFFFFE4C4,
BlanchedAlmond = 0xFFFFEBCD,
BlueViolet = 0xFF8A2BE2,
Brown = 0xFFA52A2A,
BurlyWood = 0xFFDEB887,
CadetBlue = 0xFF5F9EA0,
Chartreuse = 0xFF7FFF00,
Chocolate = 0xFFD2691E,
Coral = 0xFFFF7F50,
CornflowerBlue = 0xFF6495ED,
Cornsilk = 0xFFFFF8DC,
Crimson = 0xFFDC143C,
Cyan = 0xFF00FFFF,
DarkBlue = 0xFF00008B,
DarkCyan = 0xFF008B8B,
DarkGoldenrod = 0xFFB8860B,
DarkGray = 0xFFA9A9A9,
DarkGreen = 0xFF006400,
DarkKhaki = 0xFFBDB76B,
DarkMagenta = 0xFF8B008B,
DarkOliveGreen = 0xFF556B2F,
DarkOrange = 0xFFFF8C00,
DarkOrchid = 0xFF9932CC,
DarkRed = 0xFF8B0000,
DarkSalmon = 0xFFE9967A,
DarkSeaGreen = 0xFF8FBC8B,
DarkSlateBlue = 0xFF483D8B,
DarkSlateGray = 0xFF2F4F4F,
DarkTurquoise = 0xFF00CED1,
DarkViolet = 0xFF9400D3,
DeepPink = 0xFFFF1493,
DeepSkyBlue = 0xFF00BFFF,
DimGray = 0xFF696969,
DodgerBlue = 0xFF1E90FF,
Firebrick = 0xFFB22222,
FloralWhite = 0xFFFFFAF0,
ForestGreen = 0xFF228B22,
Fuchsia = 0xFFFF00FF,
Gainsboro = 0xFFDCDCDC,
GhostWhite = 0xFFF8F8FF,
Gold = 0xFFFFD700,
Goldenrod = 0xFFDAA520,
GreenYellow = 0xFFADFF2F,
Honeydew = 0xFFF0FFF0,
HotPink = 0xFFFF69B4,
IndianRed = 0xFFCD5C5C,
Indigo = 0xFF4B0082,
Ivory = 0xFFFFFFF0,
Khaki = 0xFFF0E68C,
Lavender = 0xFFE6E6FA,
LavenderBlush = 0xFFFFF0F5,
LawnGreen = 0xFF7CFC00,
LemonChiffon = 0xFFFFFACD,
LightBlue = 0xFFADD8E6,
LightCoral = 0xFFF08080,
LightCyan = 0xFFE0FFFF,
LightGoldenrodYellow = 0xFFFAFAD2,
LightGray = 0xFFD3D3D3,
LightGreen = 0xFF90EE90,
LightPink = 0xFFFFB6C1,
LightSalmon = 0xFFFFA07A,
LightSeaGreen = 0xFF20B2AA,
LightSkyBlue = 0xFF87CEFA,
LightSlateGray = 0xFF778899,
LightSteelBlue = 0xFFB0C4DE,
LightYellow = 0xFFFFFFE0,
Lime = 0xFF00FF00,
LimeGreen = 0xFF32CD32,
Linen = 0xFFFAF0E6,
Magenta = 0xFFFF00FF,
Maroon = 0xFF800000,
MediumAquamarine = 0xFF66CDAA,
MediumBlue = 0xFF0000CD,
MediumOrchid = 0xFFBA55D3,
MediumPurple = 0xFF9370DB,
MediumSeaGreen = 0xFF3CB371,
MediumSlateBlue = 0xFF7B68EE,
MediumSpringGreen = 0xFF00FA9A,
MediumTurquoise = 0xFF48D1CC,
MediumVioletRed = 0xFFC71585,
MidnightBlue = 0xFF191970,
MintCream = 0xFFF5FFFA,
MistyRose = 0xFFFFE4E1,
Moccasin = 0xFFFFE4B5,
NavajoWhite = 0xFFFFDEAD,
Navy = 0xFF000080,
OldLace = 0xFFFDF5E6,
Olive = 0xFF808000,
OliveDrab = 0xFF6B8E23,
Orange = 0xFFFFA500,
OrangeRed = 0xFFFF4500,
Orchid = 0xFFDA70D6,
PaleGoldenrod = 0xFFEEE8AA,
PaleGreen = 0xFF98FB98,
PaleTurquoise = 0xFFAFEEEE,
PaleVioletRed = 0xFFDB7093,
PapayaWhip = 0xFFFFEFD5,
PeachPuff = 0xFFFFDAB9,
Peru = 0xFFCD853F,
Pink = 0xFFFFC0CB,
Plum = 0xFFDDA0DD,
PowderBlue = 0xFFB0E0E6,
RosyBrown = 0xFFBC8F8F,
RoyalBlue = 0xFF4169E1,
SaddleBrown = 0xFF8B4513,
Salmon = 0xFFFA8072,
SandyBrown = 0xFFF4A460,
SeaGreen = 0xFF2E8B57,
SeaShell = 0xFFFFF5EE,
Sienna = 0xFFA0522D,
Silver = 0xFFC0C0C0,
SkyBlue = 0xFF87CEEB,
SlateBlue = 0xFF6A5ACD,
SlateGray = 0xFF708090,
Snow = 0xFFFFFAFA,
SpringGreen = 0xFF00FF7F,
SteelBlue = 0xFF4682B4,
Tan = 0xFFD2B48C,
Teal = 0xFF008080,
Thistle = 0xFFD8BFD8,
Tomato = 0xFFFF6347,
Transparent = 0x00FFFFFF,
Turquoise = 0xFF40E0D0,
Violet = 0xFFEE82EE,
Wheat = 0xFFF5DEB3,
WhiteSmoke = 0xFFF5F5F5,
YellowGreen = 0xFF9ACD32
};&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;в сRender.h дописываем:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 10.5em&quot;&gt;&lt;pre&gt;#include &amp;lt;d3d9.h&amp;gt;
#include &amp;lt;d3dx9.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;quot;Colors.h&amp;quot;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Теперь непосредственно о самом тексте:&lt;br /&gt;Внутри класса добавляем указатель на интерфейс &lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;ID3DXFont* pFont;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;и прототип нашей будущей функции отрисовки текста:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;void  Draw_Text(int x,int y,DWORD color,LPSTR text,DWORD ST);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;x,y - положение текста&lt;br /&gt;color - цвет&lt;br /&gt;text - непосредственно сам текст&lt;br /&gt;ST - стиль и выравнивание.&lt;/p&gt;
						&lt;p&gt;Выше класса укажим константы для переменной ST:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 7.5em&quot;&gt;&lt;pre&gt;#define C_Text (DT_CENTER|DT_NOCLIP)
#define L_Text (DT_LEFT|DT_NOCLIP)
#define R_Text (DT_RIGHT|DT_NOCLIP)&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;C_Text - выравнивание текста по центру&lt;br /&gt;L_Text - выравнивание текста по левому краю&lt;br /&gt;R_Text- выравнивание текста по правому краю&lt;/p&gt;
						&lt;p&gt;работаем с cRender.cpp и описываем функцию Draw_Tex:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 15em&quot;&gt;&lt;pre&gt;void  cRender::Draw_Text(int x,int y,DWORD color,LPSTR text,DWORD ST)
{
RECT rect, rect2;
SetRect( &amp;amp;rect, x, y, x, y );
SetRect( &amp;amp;rect2, x - 0.1, y + 0.2, x - 0.1, y + 0.1 );
pFont-&amp;gt;DrawTextA(NULL,text,-1,&amp;amp;rect2, ST, 0xff000000 );
pFont-&amp;gt;DrawTextA(NULL,text,-1,&amp;amp;rect,  ST, color );
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Теперь нужно иницализировать все написаное выше. Для этого в классе cRender заводим булевую переменную&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;bool Init;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;И переходим к Base.cpp к методу myEndScene и пишем :&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 10.5em&quot;&gt;&lt;pre&gt;if( !Render.Init )
{
D3DXCreateFont(pDevice, 15, 0, FW_BLACK,0, FALSE, DEFAULT_CHARSET, OUT_TT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, &amp;quot;Arial&amp;quot;, &amp;amp;Render.pFont);
Render.Init = true;
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;теперь отрисуем текст(все в том же блоке myEndScene)&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 18em&quot;&gt;&lt;pre&gt;if( !Render.pFont)
  Render.pFont-&amp;gt;OnLostDevice();
else
{
 
  Render.Draw_Text(40,40, GREEN, &amp;quot;Hello World. (Les#4)&amp;quot;,L_Text);

  Render.pFont-&amp;gt;OnLostDevice();
  Render.pFont-&amp;gt;OnResetDevice();
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;При потере контекста устройства будет произведена сброс и перегрузка шрифта, что в свою очередь позволит избежать черных экранов и потери текста при сворачивании\разворачивании проложения.&lt;/p&gt;
						&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://i.imgur.com/FyZ9Bu2.png&quot; alt=&quot;http://i.imgur.com/FyZ9Bu2.png&quot; /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;color: lime&quot;&gt;&lt;span style=&quot;display: block; text-align: center&quot;&gt;Les #5 - Box &amp;amp; Border&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;Работаем с cRender.h.&lt;/p&gt;
						&lt;p&gt;добавляем прототипы для двух функций:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;void Draw_Box( int x, int y, int w, int h, D3DCOLOR Color, LPDIRECT3DDEVICE9 m_pD3Ddev);
void Draw_Border(int x, int y, int w, int h,int s, D3DCOLOR Color, LPDIRECT3DDEVICE9 m_pD3Ddev);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;x,y - положение в пространстве&lt;br /&gt;w,h - ширина и высота соответственно&lt;br /&gt;s - ширина линии обводки&lt;br /&gt;Color - цвет&lt;br /&gt;m_pD3Ddev - указатель на устройство&lt;/p&gt;
						&lt;p&gt;переходим к сRender.cpp&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 22.5em&quot;&gt;&lt;pre&gt;void cRender::Draw_Box(int x, int y, int w, int h, D3DCOLOR Color,IDirect3DDevice9* mDevice)
{
D3DRECT rec;
rec.x1 = x;
rec.x2 = x + w;
rec.y1 = y;
rec.y2 = y + h;
mDevice-&amp;gt;SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1);
mDevice-&amp;gt;SetRenderState(D3DRS_ALPHABLENDENABLE,true);
mDevice-&amp;gt;SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
mDevice-&amp;gt;SetRenderState(D3DRS_ALPHABLENDENABLE, D3DPT_TRIANGLESTRIP);
mDevice-&amp;gt;Clear( 1, &amp;amp;rec, D3DCLEAR_TARGET, Color, 1, 1 );
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Это самый простой вариант(прозрачность не поддерживается). Более сложный, с поддержкой прозрачности - по запросу пользователей.&lt;/p&gt;
						&lt;p&gt;Отрисуем:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 18em&quot;&gt;&lt;pre&gt;if( !Render.pFont)
Render.pFont-&amp;gt;OnLostDevice();
else
{
Render.Draw_Box(10,10,180,250,GREY,pDevice);
Render.Draw_Text(40,40, GREEN, &amp;quot;Hello World. (Les#4)&amp;quot;,L_Text);

Render.pFont-&amp;gt;OnLostDevice();
Render.pFont-&amp;gt;onresetDevice();
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://img43.imageshack.us/img43/8172/bvk6.png&quot; alt=&quot;http://img43.imageshack.us/img43/8172/bvk6.png&quot; /&gt;&lt;/p&gt;
						&lt;p&gt;Теперь опишем функцию Draw_Border(обводка)&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 13.5em&quot;&gt;&lt;pre&gt;void cRender::Draw_Border(int x, int y, int w, int h,int s, D3DCOLOR Color,IDirect3DDevice9* mDevice)
{
Draw_Box(x, y, s, h,Color,mDevice);
Draw_Box(x,y+h, w, s,Color,mDevice);
Draw_Box(x, y, w, s,Color,mDevice);
Draw_Box(x+w,y, s,h+s,Color,mDevice);
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Отрисуем:&lt;/p&gt;
						&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://img196.imageshack.us/img196/9876/zv8u.png&quot; alt=&quot;http://img196.imageshack.us/img196/9876/zv8u.png&quot; /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot; style=&quot;text-align: center&quot;&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;color: lime&quot;&gt;Les #6 - Мышка и Кнопки&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;Для &amp;quot;обнаружения&amp;quot; курсора в нужной нам позиции опишем функцию:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 13.5em&quot;&gt;&lt;pre&gt;BOOL  cRender::IsInBox(int x,int y,int w,int h)
{
POINT MousePosition;
GetCursorPos(&amp;amp;MousePosition);
ScreenToClient(GetForegroundWindow(),&amp;amp;MousePosition);
return(MousePosition.x &amp;gt;= x &amp;amp;&amp;amp; MousePosition.x &amp;lt;= x + w &amp;amp;&amp;amp; MousePosition.y &amp;gt;= y &amp;amp;&amp;amp; MousePosition.y &amp;lt;= y + h);
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;в класс cRender пишем прототип:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;BOOL  IsInBox(int x,int y,int w,int h);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Для работы с кнопками можно использовать метод GetAsyncKeyState(Байт_код), но с ней иногда бывают проблеммы(залипание, фантомное срабатывание иногда просто не действует), поэтому опишем свою функцию.&lt;br /&gt;Прототип:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;BOOL  State_Key(int Key,DWORD dwTimeOut);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Key - байт код клавиши&lt;br /&gt;dwTimeOut - время до возможности повторного действия в Мсек(не совсем точное определение)&lt;/p&gt;
						&lt;p&gt;Вне класса cRender определим структуру:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 10.5em&quot;&gt;&lt;pre&gt;static struct _Keys
{
bool        bPressed;
DWORD       dwStartTime;
}kPressingKeys[256];&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Сама функция выглядит так:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 27em&quot;&gt;&lt;pre&gt;BOOL  cRender::State_Key(int Key,DWORD dwTimeOut)
{
if(HIWORD(GetKeyState(Key)))
{
  if(!kPressingKeys[Key].bPressed || (kPressingKeys[Key].dwStartTime &amp;amp;&amp;amp; (kPressingKeys[Key].dwStartTime + dwTimeOut) &amp;lt;= GetTickCount()))
  {
   kPressingKeys[Key].bPressed = TRUE;
   if( dwTimeOut &amp;gt; NULL )
    kPressingKeys[Key].dwStartTime = GetTickCount();
   return TRUE;
  }
}
else
  kPressingKeys[Key].bPressed = FALSE;
return FALSE;
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;&lt;span style=&quot;color: lime&quot;&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;display: block; text-align: center&quot;&gt;Les #7 - Блок меню + решение избавления от координат&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;Конфигурирование меню предлагаю вынести в отдельный зоголовочный фаил. Так будет проще ориентироваться в будущем.&lt;/p&gt;
						&lt;p&gt;Создаем заголовочный фаил Menu.h. К нему подключаем cRender&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;#include &amp;quot;cRender.h&amp;quot;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;В фаиле Base.cpp уазываем созданный нами фаил&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;#include &amp;quot;Menu.h&amp;quot;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;в класс cRender добавляем прототип:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;void  SHOW_MENU(LPDIRECT3DDEVICE9  pDevice);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;В фаиле Menu.h описываем функцию:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 7.5em&quot;&gt;&lt;pre&gt;void  cRender::SHOW_MENU(LPDIRECT3DDEVICE9  pDevice)
{
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Именно в этом блоке мы и будем рисовать внешний вид.&lt;/p&gt;
						&lt;p&gt;Строить меню можно различными способами. Например самый распространенный - указывать вручную координаты для каждого элемента, но это в каком-то смысле очень трудно и накладно(хотя если развито пространственное мышление и дальномер то.....)В любом случаи я покажу как можно избавится от необходимости координировать каждый из элементов. Для этого будем использовать struct.&lt;/p&gt;
						&lt;p&gt;В класс cRender добавляем структуру с двумя переменными типи int и пишим для нее указатель.&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 12em&quot;&gt;&lt;pre&gt;struct stMenu
{
  int x,
       y;
};
stMenu pos_Menu;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;pos_Menu - указатель на нашу структуру.&lt;/p&gt;
						&lt;p&gt;Теперь зделаем &amp;quot;иницализацию&amp;quot; координатного положения и возможность открывать\скрывать меню по нажатию указанной клавиши:&lt;br /&gt;В cRender добавляем прототип для будущей функции:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;void  Init_PosMenu(int x,int y,DWORD KEY,stMenu* pos_Menu,IDirect3DDevice9* m_pD3Ddev);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;x,y - начальное положение меню&lt;br /&gt;KEY - клавиша открыть\закрыть меню&lt;br /&gt;pos_Menu - указатель на нашу структуру&lt;br /&gt;m_pD3Ddev - указатель на наше устройство&lt;/p&gt;
						&lt;p&gt;Так же добавим еще одну булевую переменную:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;bool Show;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Теперь в cRender.cpp описываем функцию:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 7.5em&quot;&gt;&lt;pre&gt;void  cRender::Init_PosMenu(int x,int y,DWORD KEY,stMenu* pos_Menu,IDirect3DDevice9* m_pD3Ddev)
{
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Что бы не засорять блок myEndScene вырезаем из нее&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 18em&quot;&gt;&lt;pre&gt;if( !Render.pFont)
  Render.pFont-&amp;gt;OnLostDevice();
else
{
  Render.Draw_Box(10,10,180,250,GREY,pDevice);
Render.Draw_Border(10,10,180,250,2,RED,pDevice);
Render.Draw_Text(40,40, GREEN, &amp;quot;Hello World. (Les#4)&amp;quot;,L_Text);
  Render.pFont-&amp;gt;OnLostDevice();
  Render.pFont-&amp;gt;onresetDevice();
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;и вставляем в &lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;void  cRender::Init_PosMenu(int x,int y,DWORD KEY,stMenu* pos_Menu,IDirect3DDevice9* m_pD3Ddev)&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;в таком виде:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 13.5em&quot;&gt;&lt;pre&gt;if( !pFont)
  pFont-&amp;gt;OnLostDevice();
else
{
  pFont-&amp;gt;OnLostDevice();
  pFont-&amp;gt;onresetDevice();
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Допишем возможность указания клавиши и условие появления\скрытия меню:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;if(State_Key(KEY,3000))Show=!Show;
  if(Show)SHOW_MENU(m_pD3Ddev);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;3000 - раз в три секунды возможно срабатывание условия Show=!Show&lt;/p&gt;
						&lt;p&gt;Так же тут укажем инициализацию нашей структуры:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;(*pos_Menu).x = x;
(*pos_Menu).y = y;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;После всего у нас Init_PosMenu(....) имеет следущий вид:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 24em&quot;&gt;&lt;pre&gt;void  cRender::Init_PosMenu(int x,int y,DWORD KEY,stMenu* pos_Menu,IDirect3DDevice9* m_pD3Ddev)
{
(*pos_Menu).x = x;
(*pos_Menu).y = y;
if( !pFont)
  pFont-&amp;gt;OnLostDevice();
else
{
  if(State_Key(KEY,3000))Show=!Show;
  if(Show)SHOW_MENU(m_pD3Ddev);
  pFont-&amp;gt;OnLostDevice();
  pFont-&amp;gt;onresetDevice();
}
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Теперь в myEndScene пропишем:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;Render.Init_PosMenu(20,20,VK_END,&amp;amp;Render.pos_Menu,pDevice);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;20,20 - начальное положение&lt;br /&gt;VK_END - клавиша открытия\скрытия меню(в данном случаи это клавиши END)&lt;br /&gt;&amp;amp;Render.pos_Menu - указатель на структуру&lt;br /&gt;pDevice - устройство&lt;/p&gt;
						&lt;p&gt;По дефолту у нас меню в скрытом положении. Исправить это можно иницализировав переменную Show , например в конструкторе класса:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 9em&quot;&gt;&lt;pre&gt;cRender::cRender(void)
{
Show = true;
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;quot;Show = true;&amp;quot; - меню открыто сразу&lt;br /&gt;&amp;quot;Show = false;&amp;quot; - меню закрыто&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;&lt;span style=&quot;color: lime&quot;&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;display: block; text-align: center&quot;&gt;Les #8 - Рисуем кнопку для основного меню&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;Основное меню: Что это должно из себя представлять? Кнопки, строки или любые выдуманные элементы, при активации которых на экран выводилось бы соответствующее субменю. При этом, при нажатии на одну из кнопок, предедушее открытое субменю скрывалось.&lt;br /&gt;Вариантов решения несколько: для каждого субменю завести переменную и при клике на кнопку сначало все переменные обнулять, а затем активировать переменную соответствующую нажатой кнопке. Второй вариант - использовать для этой цели массивы.&lt;br /&gt;Именно массивы я буду использовать в туториале.&lt;/p&gt;
						&lt;p&gt;Рисовать я решил кнопку примерно следущего вида:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://i.imgur.com/pC8uoe4.png&quot; alt=&quot;http://i.imgur.com/pC8uoe4.png&quot; /&gt;&lt;br /&gt;основная идея следующая: Рисуем прямоугольник с обводкой и текстом. При наведении на кнопку корсором цвет текста и обводки меняется, а при активации меняется цвет текста.&lt;/p&gt;
						&lt;p&gt;прототип кнопки:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;void  Draw_Menu_But(stMenu *pos_Menu,char* text,IDirect3DDevice9* pDevice);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;то есть имеем указатель на структуру, указатель на текст и указатель на устройство.&lt;/p&gt;
						&lt;p&gt;Для задумки нам потребуется в фаиле cRender.cpp завести массив и две переменных типа int. Указывать их нужно в корне cRender.cpp.&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 7.5em&quot;&gt;&lt;pre&gt;int Button_Mass[20] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
    Button_Number = 0,
    Button_Max = 0;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Так как эти переменные находятся в фаиле типа .cpp , то с помощью дерективы &amp;quot;extern&amp;quot; мы их укажим в фаиле Menu.h:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;extern int Button_Mass[20],
           Button_Number;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Так же в этом фаиле, в блоке &amp;quot;SHOW_MENU(.....){}&amp;quot; мы будем обнулять переменную &amp;quot;Button_Number&amp;quot;:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 13.5em&quot;&gt;&lt;pre&gt;void  cRender::SHOW_MENU(LPDIRECT3DDEVICE9  pDevice)
{



    Button_Number=0;
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Вернемся к cRender.cpp и заполним функцию Draw_Menu_But:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;void  cRender::Draw_Menu_But(stMenu *pos_Menu,char* text,IDirect3DDevice9* pDevice)
{
    if(IsInBox(x,y,w,h))
    {    
    //если наведен курсор
        if (State_Key(VK_LBUTTON,30) )
            if (Button_Mass[Button_Number]!= 1)
                Button_Mass[Button_Number]= 1;
    }

    if (Button_Mass[Button_Number])
    {        
        //Если активна
        for ( int i = 0; i &amp;lt; 20; i++ )
            if ( i != Button_Number )
                Button_Mass[i] = 0;
    }
    

    Button_Number = Button_Number + 1;

    if (Button_Max &amp;lt; Button_Number )
        Button_Max = Button_Number;

}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Так выглядит основная рабочая часть кода. &lt;br /&gt;Теперь займемся рисованием:Нам нужно завести две переменных типа D3DCOLOR для смены цвета при взаимодействии. Так же нарисовать прямоугольник, обводку и текст.&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;    D3DCOLOR text_Activ = line_Color;


    if(IsInBox(x,y,w,h))
    {    
                     //если наведен курсор
        Bord_text = text_Activ =Lime;
        if (State_Key(VK_LBUTTON,30) )
            if (Button_Mass[Button_Number]!= 1)
                Button_Mass[Button_Number]= 1;
    }

    Draw_GradientBox(x, y, w, h, DarkRed, BLACK,vertical , pDevice );
    Draw_Border(x, y, w, h,1,Bord_text,pDevice);
    if (Button_Mass[Button_Number])
    {        
                       //Если активна
        text_Activ = YellowGreen;
        for ( int i = 0; i &amp;lt; 20; i++ )
            if ( i != Button_Number )
                Button_Mass[i] = 0;
    }
    Draw_Text(x+(w/2),y+3,text_Activ, text,C_Text);

    Button_Number = Button_Number + 1;

    if (Button_Max &amp;lt; Button_Number )
        Button_Max = Button_Number;

}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Теперь разберемся с положением в пространстве и размерами:&lt;br /&gt;заводим четыре переменных типа int:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 9em&quot;&gt;&lt;pre&gt;int x  ,
       y ,
       h,
       w ;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;И задаем им значения:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 9em&quot;&gt;&lt;pre&gt;int x = (*pos_Menu).x,
        y = (*pos_Menu).y,
        h = 22,
        w = 101;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;x = текущее положение\значение &amp;quot;х&amp;quot;(структура)&lt;br /&gt;y = текущее положение\значение &amp;quot;y&amp;quot;(структура) &lt;br /&gt;w = длинна кнопки&lt;br /&gt;h = ширина кнопки&lt;/p&gt;
						&lt;p&gt;Указываем это в самом начале тела функции:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 19.5em&quot;&gt;&lt;pre&gt;void  cRender::Draw_Menu_But(stMenu *pos_Menu,char* text,IDirect3DDevice9* pDevice)
{
    int x = (*pos_Menu).x,
        y = (*pos_Menu).y,
        h = 22,
        w = 101;
......
......
......
......
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;При таком раскладе мы уже сможем нарисовать одну кнопку, но последующие будут накладываться друг на друга, так как у нас еще не задано &amp;quot;смещение&amp;quot;. Для этого в конце теля функции добавим:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;(*pos_Menu).y = y+24;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Итог:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;void  cRender::Draw_Menu_But(stMenu *pos_Menu,char* text,IDirect3DDevice9* pDevice)
{
    int x = (*pos_Menu).x,
        y = (*pos_Menu).y,
        h = 22,
        w = 101;
    D3DCOLOR Bord_text = line_Color;
    D3DCOLOR text_Activ = line_Color;


    if(IsInBox(x,y,w,h))
    {    
        Bord_text = text_Activ =Lime;
        if (State_Key(VK_LBUTTON,30) )
            if (Button_Mass[Button_Number]!= 1)
                Button_Mass[Button_Number]= 1;
    }

    Draw_GradientBox(x, y, w, h, DarkRed, BLACK,vertical , pDevice );
    Draw_Border(x, y, w, h,1,Bord_text,pDevice);
    if (Button_Mass[Button_Number])
    {        
        text_Activ = YellowGreen;
        for ( int i = 0; i &amp;lt; 20; i++ )
            if ( i != Button_Number )
                Button_Mass[i] = 0;
    }
    Draw_Text(x+(w/2),y+3,text_Activ, text,C_Text);

    Button_Number = Button_Number + 1;

    if (Button_Max &amp;lt; Button_Number )
        Button_Max = Button_Number;

    (*pos_Menu).y = y+24;
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Смысл: При вызове считываем координаты со структуры -&amp;gt; рисуем задуманое -&amp;gt; записываем в структуру новые координаты.&lt;/p&gt;
						&lt;p&gt;Используем это в меню так:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;void  cRender::SHOW_MENU(LPDIRECT3DDEVICE9  pDevice)
{

    Draw_Menu_But(&amp;amp;pos_Menu,&amp;quot;New Button 1&amp;quot;, pDevice);
    if(Button_Mass[0])
    {
    }

    Draw_Menu_But(&amp;amp;pos_Menu,&amp;quot;New Button 2&amp;quot;, pDevice);
    if(Button_Mass[1])
    {
    }

    Draw_Menu_But(&amp;amp;pos_Menu,&amp;quot;New Button 3&amp;quot;, pDevice);
    if(Button_Mass[2])
    {
    }

    Draw_Menu_But(&amp;amp;pos_Menu,&amp;quot;New Button 4&amp;quot;, pDevice);
    if(Button_Mass[3])
    {
    }




    Button_Number=0;
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;В результате мы получаем:&lt;/p&gt;
						&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://i.imgur.com/l93UsNS.png&quot; alt=&quot;http://i.imgur.com/l93UsNS.png&quot; /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;color: lime&quot;&gt;&lt;span style=&quot;display: block; text-align: center&quot;&gt;Les #9 - Рисуем checkBox&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;Цель: Нарисовать элемент который имел бы два положения - вкл\выкл. &lt;/p&gt;
						&lt;p&gt;Этот и последующие элементы будут всегда пренадлежать суб-меню. Поэтому что бы не замарачиваться с начальной координатой положения - допишем еще одну переменную в структуру stMenu:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 10.5em&quot;&gt;&lt;pre&gt;struct stMenu
    {
        int x,
            y, _y;
    };&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;так же &amp;quot;иницализируем ее в Init_PosMenu():&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 30em&quot;&gt;&lt;pre&gt;void  cRender::Init_PosMenu(int x,int y,DWORD KEY,stMenu* pos_Menu,IDirect3DDevice9* m_pD3Ddev)
{
    (*pos_Menu).x = x;
    (*pos_Menu).y = y;
    (*pos_Menu)._y = y;

    if( !pFont)
        pFont-&amp;gt;OnLostDevice();
    else
    {

        if(State_Key(KEY,3000))Show=!Show;
        if(Show)SHOW_MENU(m_pD3Ddev);

        pFont-&amp;gt;OnLostDevice();
        pFont-&amp;gt;onresetDevice();
    }
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;перейдем непосредственно к рисованию контрола. &lt;br /&gt;Внешний вид его будет такой:&lt;/p&gt;
						&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://img571.imageshack.us/img571/6790/pjj8.png&quot; alt=&quot;http://img571.imageshack.us/img571/6790/pjj8.png&quot; /&gt;&lt;/p&gt;
						&lt;p&gt;Определяем прототип в классе cRender:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;void  Draw_CheckBox(stMenu *pos_Menu,bool &amp;amp;Var,char *Text,IDirect3DDevice9 *pDevice);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;И описываем функцию:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;void cRender::Draw_CheckBox(stMenu *pos_Menu,bool &amp;amp;Var,char *Text,IDirect3DDevice9 *pDevice)
{
    int x = (*pos_Menu).x+115,
        y = (*pos_Menu)._y,
        w = 16,
        h = 16;


    Draw_Box( x,  y, w, h, 0xff305C5F,pDevice);
    Draw_Border( x,  y, w, h,1, line_Color,pDevice);


    if(IsInBox(x,y ,w,h))
    { 
        if (State_Key(VK_LBUTTON,300) ) 
                       Var=!Var;
    }
    if(Var)
        Draw_GradientBox(x+3, y+3, 11, 11, DarkRed, BLACK,vertical , pDevice );
    

    Draw_Text(x+24,y+2,line_Color, Text,L_Text);

    (*pos_Menu)._y = y+20;
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Система думаю будет ясна из предыдущего тутора.&lt;br /&gt;Единственное о чем можно сказать, так это о &amp;quot;x = (*pos_Menu).x+115&amp;quot;.&lt;br /&gt;(*pos_Menu).x - это начальное положение меню&lt;br /&gt;+115 - это цифра определяет смещение от начала.Складывается она из длинны Draw_Menu_But() + небольшое дополнение, что бы был зазор между основным меню и суб-меню.&lt;/p&gt;
						&lt;p&gt;Запись у меня в меню получилась следущая:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 18em&quot;&gt;&lt;pre&gt;Draw_Menu_But(&amp;amp;pos_Menu,&amp;quot;New Button 1&amp;quot;, pDevice);
    if(Button_Mass[0])
    {

        Draw_CheckBox(&amp;amp;pos_Menu,b_Fun_1,&amp;quot;New CheckBox 1&amp;quot;,pDevice);
        Draw_CheckBox(&amp;amp;pos_Menu,b_Fun_2,&amp;quot;New CheckBox 2&amp;quot;,pDevice);
        Draw_CheckBox(&amp;amp;pos_Menu,b_Fun_3,&amp;quot;New CheckBox 3&amp;quot;,pDevice);
        Draw_CheckBox(&amp;amp;pos_Menu,b_Fun_4,&amp;quot;New CheckBox 4&amp;quot;,pDevice);

    }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://img138.imageshack.us/img138/6606/97ca.png&quot; alt=&quot;http://img138.imageshack.us/img138/6606/97ca.png&quot; /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot; style=&quot;text-align: center&quot;&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;color: lime&quot;&gt;Les #10 - Рисуем ColorBox&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;Цель: Нарисовать контрол который бы наглядно переключал цвета(цвет меню, самс, ESP и тд и тп). &lt;/p&gt;
						&lt;p&gt;Рисовать будем такой вот контрол:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://img707.imageshack.us/img707/3517/l4mk.png&quot; alt=&quot;http://img707.imageshack.us/img707/3517/l4mk.png&quot; /&gt;&lt;/p&gt;
						&lt;p&gt;Приступим:&lt;/p&gt;
						&lt;p&gt;Определяем прототип:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;void  Draw_ColorBox(stMenu *pos_Menu, char *Text, int &amp;amp;Var,DWORD *Sel_color,int SizeArr, IDirect3DDevice9 * pDevice);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;quot;DWORD *Sel_color&amp;quot; - указатель на массив где будут хранится цвета&lt;br /&gt;&amp;quot;int SizeArr&amp;quot; - количество элементов в массиве&lt;/p&gt;&lt;div class=&quot;quote-box quote-main&quot;&gt;&lt;blockquote&gt;&lt;p&gt;тут следует учесть, что исчисление массива начинается с 0, поэтому в этот аргумент следует передавать число на один меньше чем элементов в массиве&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
						&lt;p&gt;Остальные аргументы думаю не стоит представлять.&lt;/p&gt;
						&lt;p&gt;Описываем функцию:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;void  cRender::Draw_ColorBox(stMenu *pos_Menu, char *Text, int &amp;amp;Var,DWORD *Sel_color,int SizeArr, IDirect3DDevice9 * pDevice)
{
    int x = (*pos_Menu).x+110,
        y = (*pos_Menu)._y,
        w = 25,
        h = 16;

    if(IsInBox(x,y ,w,h))
    { 
        if (State_Key(VK_LBUTTON,300) ) 
            if(Var&amp;gt;=0 &amp;amp;&amp;amp; Var&amp;lt;SizeArr)
                       Var++;


        if (State_Key(VK_RBUTTON,300) )
            if(Var!=0)
                       Var--;
    }

    Draw_Box( x,  y, w, h, Sel_color[Var],pDevice);
    Draw_Border( x,  y, w, h,1,line_Color ,pDevice);
           Draw_Text(x+34,y+2,line_Color, Text,L_Text);

    (*pos_Menu)._y = y+20;
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;При нажатии ЛКМ по прямоугольнику цвет будет переключаться на одну позицию вперед, при ПКМ - на одну назад.&lt;/p&gt;
						&lt;p&gt;Использование(на примере бокса):&lt;br /&gt;Заводим массив типа DWORD и переменную типа int в области видимости:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;int i_Fun__1;
DWORD test_Color_1[] = {0xff305C5F,RED,BLUE,BLACK,WHITE,GREEN,Violet,ORANGE,YELLOW,line_Color,DarkGoldenrod };&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;В меню:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;Draw_ColorBox(&amp;amp;pos_Menu, &amp;quot;Draw_ColorBox 1&amp;quot;, i_Fun__1,test_Color_1,10,  pDevice);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Теперь на примере бокса показываем работу:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;Draw_Box(320,18,50,20,test_Color_1[i_Fun__1],pDevice);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Результат:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://i.imgur.com/70JGDKF.png&quot; alt=&quot;http://i.imgur.com/70JGDKF.png&quot; /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;color: lime&quot;&gt;&lt;span style=&quot;display: block; text-align: center&quot;&gt;Les #11 - Рисуем ScrolBox&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;Цель: Нарисовать контрол который бы накручивал бы переменную до заданного предела.&lt;/p&gt;
						&lt;p&gt;Рисовать будем такой вот контрол:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://img853.imageshack.us/img853/7182/0ms3.png&quot; alt=&quot;http://img853.imageshack.us/img853/7182/0ms3.png&quot; /&gt;&lt;br /&gt;Прототип:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;void  Draw_ScrolBox(stMenu *pos_Menu, char *Text, int &amp;amp;Var,int Maximal,IDirect3DDevice9 *pDevice);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Функция:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;void  cRender::Draw_ScrolBox(stMenu *pos_Menu, char *Text, int &amp;amp;Var,int Maximal,IDirect3DDevice9 *pDevice)
{
int x = (*pos_Menu).x+110,
  y = (*pos_Menu)._y,
  w = 16,
  h = 16;

D3DCOLOR inActiv = line_Color;
char c_Value[MAX_PATH];
if(IsInBox(x+7,  y+2, 20, 16))
{
  inActiv = GREEN;
  if(State_Key(VK_LBUTTON,100))
   if(Var&amp;gt;=0 &amp;amp;&amp;amp; Var&amp;lt;Maximal)Var++;
  if(State_Key(VK_RBUTTON,100))
   if(Var!=0)Var--;
}

sprintf(c_Value, &amp;quot;[ %d ]&amp;quot;, Var);
int lenText = GetTextLen(c_Value);
Draw_Text(x+7,y+3,inActiv,c_Value,L_Text);
Draw_Text(x+lenText+10 ,y+3,line_Color,Text,L_Text);
(*pos_Menu)._y = y+20;
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Можно заметить новую функцию GetTextLen:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 12em&quot;&gt;&lt;pre&gt;int   cRender::GetTextLen(LPCTSTR szString)
{
RECT rect = {0,0,0,0};
pFont-&amp;gt;DrawText(NULL, szString, -1, &amp;amp;rect, DT_CALCRECT, 0);
return rect.right;
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Эта функция возвращает длинну указанного текста.&lt;/p&gt;
						&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://i.imgur.com/JOhl8h0.png&quot; alt=&quot;http://i.imgur.com/JOhl8h0.png&quot; /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;&lt;span style=&quot;color: lime&quot;&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;display: block; text-align: center&quot;&gt;Les #12 - Структурное хранение переменных&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;Так или иначе нам придется использовать переменные различного типа. Удобнее всего будет завести структуру и обращатся к переменным с помощью указателя на структуру.&lt;/p&gt;
						&lt;p&gt;Для этого создадим заголовочный фаил &amp;quot;Structure.h&amp;quot; с таким содержинием:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 16.5em&quot;&gt;&lt;pre&gt;#pragma once


struct cFun
{


};
extern cFun Fun;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;quote-box quote-main&quot;&gt;&lt;blockquote&gt;&lt;p&gt;#pragma once — нестандартная, но широко распространенная препроцессорная директива, разработанная для контроля за тем, чтобы конкретный исходный файл при компиляции подключался строго один раз&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;
						&lt;p&gt;В фаиле cRender.h подключим его&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;#include &amp;quot;Structure.h&amp;quot;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;так же поступим и в фаиле Base.cpp и опишем указатель на структуру:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;#include &amp;quot;Structure.h&amp;quot;
cFun Fun;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;теперь указав внутри структуры необходимую нам переменную:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 9em&quot;&gt;&lt;pre&gt;struct cFun
{
    bool _Peremennay;
};&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;мы можем получить доступ к ней практически из любого места проекта используя указатель &amp;quot;Fun&amp;quot;:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;Fun._Peremennay&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-size: 20px&quot;&gt;&lt;span style=&quot;display: block; text-align: center&quot;&gt;&lt;span style=&quot;color: blue&quot;&gt;Завершение&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
						&lt;p&gt;В конечном проекте я завел две переменных в классе cRender:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;w_menu   //ширина основного меню
	w_sub_menu&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;w_menu - ширина основного меню&lt;br /&gt;w_sub_menu - ширина суб-меню&lt;br /&gt;Так же эти переменные влияют на: размеры кнопок, ширину фона, растояние между текстом и контролом.&lt;/p&gt;
						&lt;p&gt;Добавил задний фон и заголовок. Заголовок вынес в Init_PosMenu():&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;Init_PosMenu(int x,int y,DWORD KEY,char* Titl,stMenu* pos_Menu,IDirect3DDevice9* m_pD3Ddev)&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;Render.Init_PosMenu(20,20,VK_END,&amp;quot;D3D9 Menu от А до Я&amp;quot;,&amp;amp;Render.pos_Menu,pDevice);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Немного поправил элементы управления, добавив выравнивание по краям:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://i.imgur.com/DCxFCro.png&quot; alt=&quot;http://i.imgur.com/DCxFCro.png&quot; /&gt;&lt;/p&gt;
						&lt;p&gt;Так же в структуре stMenu завел две переменных:&lt;/p&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;int height_fon,
    	height_sub_fon;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;Эти переменные отвечают за ширину фона меню. То есть, при дабавлении луюого из элементов управления задний фон будет подгонятся под размеры. &lt;/p&gt;
						&lt;p&gt;Так же все цвета вынес в константы, что бы можно было легко изменить цвет лубого из элементов меню.&lt;br /&gt;&lt;/p&gt;
						&lt;p&gt;Сконфигурировал меню по такому виду:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://i.imgur.com/UlktTqo.png&quot; alt=&quot;http://i.imgur.com/UlktTqo.png&quot; /&gt;&lt;/p&gt;
						&lt;p&gt;В итоге получил:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://i.imgur.com/PTVZluX.png&quot; alt=&quot;http://i.imgur.com/PTVZluX.png&quot; /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;http://qps.ru/eiVcr&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Скачать завершенный проект&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/div&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:15:41 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=30#p30</guid>
		</item>
		<item>
			<title>Мой исход красивого трейнера EXPHack.</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=29#p29</link>
			<description>&lt;p&gt;Исходник от 14.06.2014&lt;br /&gt;Скрин:&lt;br /&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://i031.radikal.ru/1406/98/7230afe03ccf.png&quot; alt=&quot;http://i031.radikal.ru/1406/98/7230afe03ccf.png&quot; /&gt;&lt;br /&gt;Исход был сделан лично мной, под чек боксы остался код, но адреса убрал.&lt;br /&gt;Вам нужно только подставить адреса и обновить байты.&lt;br /&gt;_________________________________________________________________&lt;br /&gt;&lt;a href=&quot;http://qps.ru/uCKvy&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Скачать&lt;/a&gt;&lt;br /&gt;_________________________________________________________________&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:14:51 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=29#p29</guid>
		</item>
		<item>
			<title>RGB цвета!</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=28#p28</link>
			<description>&lt;p&gt;Всем привет&lt;br /&gt;может кому понадобиться!&lt;/p&gt;
						&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://www.pixic.ru/i/Q0j024V5Z9d63950.png&quot; alt=&quot;http://www.pixic.ru/i/Q0j024V5Z9d63950.png&quot; /&gt;&lt;/p&gt;
						&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://www.pixic.ru/i/O0f0k43549a68809.png&quot; alt=&quot;http://www.pixic.ru/i/O0f0k43549a68809.png&quot; /&gt;&lt;/p&gt;
						&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://www.pixic.ru/i/5010H4A5R9x69941.png&quot; alt=&quot;http://www.pixic.ru/i/5010H4A5R9x69941.png&quot; /&gt;&lt;/p&gt;
						&lt;p&gt;&lt;img class=&quot;postimg&quot; loading=&quot;lazy&quot; src=&quot;http://www.pixic.ru/i/F0P02445g9u6v9B2.png&quot; alt=&quot;http://www.pixic.ru/i/F0P02445g9u6v9B2.png&quot; /&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:14:12 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=28#p28</guid>
		</item>
		<item>
			<title>Исходники D3D Меню для Warface</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=27#p27</link>
			<description>&lt;p&gt;&lt;a href=&quot;http://qps.ru/xFMEG&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Меню от IROBOT скачать&lt;/a&gt;&lt;/p&gt;
						&lt;p&gt;&lt;a href=&quot;http://qps.ru/fy5ts&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;Меню NNP&amp;#160; скачать&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:13:43 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=27#p27</guid>
		</item>
		<item>
			<title>Урок По Созданию Чита Для Warface На (Исходник Трейнера Warface )C#</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=26#p26</link>
			<description>&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;создайм чит&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;-Создаем проект C#-&amp;gt;WinForm.&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;-объявим using;&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;using System.Diagnostics;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;-Добавим таймер(он будет следить за запуском игры)&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;-Глобально обновляем имя нужного процесса:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;const string name_Game = &amp;quot;Game&amp;quot;;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;-На таймер вешаем проверку запуска(не самый лучший код, но он первый под руку попался)&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 22.5em&quot;&gt;&lt;pre&gt;Process[] Proc__Game = Process.GetProcessesByName(name_Game);
            if (Proc__Game.Length != 0)
            {
                statusStrip1.Text = &amp;quot;Игра определена!&amp;quot;;
                statusStrip1.ForeColor = Color.Green;
                timer1.Stop();
                
            }
            else
            {
                statusStrip1.Text = &amp;quot;Ожидаем запуск Игры!&amp;quot;;
                statusStrip1.ForeColor = Color.Red;
            }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;-Для наглядности я добавил статус-Панель(statusStrip)&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;-Стартуем при инициализации&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;timer1.Start();&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;Теперь самое интересное: Работа с памятью&lt;br /&gt;-Добавим новый класс, я назвал его MemoryHack.cs&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;Полный листинг файла MemoryHack.cs:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;using System;

using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Diagnostics;
using System.Runtime.InteropServices;

namespace Treiner_DemoSource
{
    public class MemoryHack
    {


        private enum ProcessAccessFlags : uint
        {
            All = 0x1f0fff,
            CreateThread = 2,
            DupHandle = 0x40,
            QueryInformation = 0x400,
            SetInformation = 0x200,
            Synchronize = 0x100000,
            Terminate = 1,
            VMOperation = 8,
            VMRead = 0x10,
            VMWrite = 0x20

        }
        private enum VirtualMemoryProtection : uint
        {
            PAGE_EXECUTE = 0x10,
            PAGE_EXECUTE_READ = 0x20,
            PAGE_EXECUTE_READWRITE = 0x40,
            PAGE_EXECUTE_WRITECOPY = 0x80,
            PAGE_GUARD = 0x100,
            PAGE_NOACCESS = 1,
            PAGE_NOCACHE = 0x200,
            PAGE_READONLY = 2,
            PAGE_READWRITE = 4,
            PAGE_WRITECOPY = 8,
            PROCESS_ALL_ACCESS = 0x1f0fff

        }
        public static bool debugMode = false;
        private IntPtr baseAddress;
        private ProcessModule processModule;
        private Process[] mainProcess;
        private IntPtr processHandle;
        public string processName
        {
            get;
            set;
        }
        public long getBaseAddress
        {
            get
            {
                this.baseAddress = (IntPtr)0;
                this.processModule = this.mainProcess[0].MainModule;
                this.baseAddress = this.processModule.BaseAddress;
                return (long)this.baseAddress;
            }
        }
        [DllImport(&amp;quot;kernel32.dll&amp;quot;, SetLastError = true)]
        private static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint dwSize, uint lpNumberOfBytesRead);
        [DllImport(&amp;quot;kernel32.dll&amp;quot;)]
        private static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, uint lpNumberOfBytesWritten);
        [DllImport(&amp;quot;kernel32.dll&amp;quot;)]
        private static extern IntPtr OpenProcess(uint dwDesiredAccess, bool bInheritHandle, int dwProcessId);
        [DllImport(&amp;quot;kernel32.dll&amp;quot;)]
        private static extern bool CloseHandle(IntPtr hObject);
        [DllImport(&amp;quot;kernel32.dll&amp;quot;)]
        private static extern bool VirtualProtectEx(IntPtr hProcess, IntPtr lpAddress, UIntPtr dwSize, uint flNewProtect, out uint lpflOldProtect);
        [DllImport(&amp;quot;kernel32.dll&amp;quot;, ExactSpelling = true, SetLastError = true)]
        private static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
        public MemoryHack()
        {
        }
        public MemoryHack(string pProcessName)
        {
            this.processName = pProcessName;
        }
        public bool CheckProcess()
        {
            bool result;
            if (this.processName != null)
            {
                this.mainProcess = Process.GetProcessesByName(this.processName);
                if (this.mainProcess.Length == 0)
                {
                    this.ErrorProcessNotFound(this.processName);
                    result = false;
                }
                else
                {
                    this.processHandle = MemoryHack.OpenProcess(2035711u, false, this.mainProcess[0].Id);
                    if (this.processHandle == IntPtr.Zero)
                    {
                        this.ErrorProcessNotFound(this.processName);
                        result = false;
                    }
                    else
                    {
                        result = true;
                    }
                }
            }
            else
            {

                result = false;
            }
            return result;
        }

        private void ErrorProcessNotFound(string p)
        {
            throw new NotImplementedException();
        }
        public byte[] ReadByteArray(IntPtr pOffset, uint pSize)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            byte[] result;
            try
            {
                uint flNewProtect;
                MemoryHack.VirtualProtectEx(this.processHandle, pOffset, (UIntPtr)pSize, 4u, out flNewProtect);
                byte[] array = new byte[pSize];
                MemoryHack.ReadProcessMemory(this.processHandle, pOffset, array, pSize, 0u);
                MemoryHack.VirtualProtectEx(this.processHandle, pOffset, (UIntPtr)pSize, flNewProtect, out flNewProtect);
                result = array;
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadByteArray&amp;quot; + ex.ToString());
                }
                result = new byte[1];
            }
            return result;
        }
        public string ReadStringUnicode(IntPtr pOffset, uint pSize)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            string result;
            try
            {
                result = Encoding.Unicode.GetString(this.ReadByteArray(pOffset,
                 pSize), 0, (int)pSize);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadStringUnicode&amp;quot; + ex.ToString());
                }
                result = &amp;quot;&amp;quot;;
            }
            return result;
        }
        public string ReadStringASCII(IntPtr pOffset, uint pSize)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            string result;
            try
            {
                result = Encoding.ASCII.GetString(this.ReadByteArray(pOffset,
                 pSize), 0, (int)pSize);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadStringASCII&amp;quot; + ex.ToString());
                }
                result = &amp;quot;&amp;quot;;
            }
            return result;
        }
        public char ReadChar(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            char result;
            try
            {
                result = BitConverter.ToChar(this.ReadByteArray(pOffset, 1u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadChar&amp;quot; + ex.ToString());
                }
                result = &#039; &#039;;
            }
            return result;
        }
        public bool ReadBoolean(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = BitConverter.ToBoolean(this.ReadByteArray(pOffset, 1u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadByte&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public byte ReadByte(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            byte result;
            try
            {
                result = this.ReadByteArray(pOffset, 1u)[0];
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadByte&amp;quot; + ex.ToString());
                }
                result = 0;
            }
            return result;
        }
        public short ReadInt16(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            short result;
            try
            {
                result = BitConverter.ToInt16(this.ReadByteArray(pOffset, 2u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadInt16&amp;quot; + ex.ToString());
                }
                result = 0;
            }
            return result;
        }
        public short ReadShort(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            short result;
            try
            {
                result = BitConverter.ToInt16(this.ReadByteArray(pOffset, 2u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadInt16&amp;quot; + ex.ToString());
                }
                result = 0;
            }
            return result;
        }
        public int ReadInt32(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            int result;
            try
            {
                result = BitConverter.ToInt32(this.ReadByteArray(pOffset, 4u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadInt32&amp;quot; + ex.ToString());
                }
                result = 0;
            }
            return result;
        }
        public int ReadInteger(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            int result;
            try
            {
                result = BitConverter.ToInt32(this.ReadByteArray(pOffset, 4u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadInteger&amp;quot; + ex.ToString());
                }
                result = 0;
            }
            return result;
        }
        public long ReadInt64(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            long result;
            try
            {
                result = BitConverter.ToInt64(this.ReadByteArray(pOffset, 8u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadInt64&amp;quot; + ex.ToString());
                }
                result = 0L;
            }
            return result;
        }
        public long ReadLong(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            long result;
            try
            {
                result = BitConverter.ToInt64(this.ReadByteArray(pOffset, 8u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadLong&amp;quot; + ex.ToString());
                }
                result = 0L;
            }
            return result;
        }
        public ushort ReadUInt16(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            ushort result;
            try
            {
                result = BitConverter.ToUInt16(this.ReadByteArray(pOffset, 2u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadUInt16&amp;quot; + ex.ToString());
                }
                result = 0;
            }
            return result;
        }
        public ushort ReadUShort(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            ushort result;
            try
            {
                result = BitConverter.ToUInt16(this.ReadByteArray(pOffset, 2u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadUShort&amp;quot; + ex.ToString());
                }
                result = 0;
            }
            return result;
        }
        public uint ReadUInt32(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            uint result;
            try
            {
                result = BitConverter.ToUInt32(this.ReadByteArray(pOffset, 4u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadUInt32&amp;quot; + ex.ToString());
                }
                result = 0u;
            }
            return result;
        }
        public uint ReadUInteger(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            uint result;
            try
            {
                result = BitConverter.ToUInt32(this.ReadByteArray(pOffset, 4u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadUInteger&amp;quot; + ex.ToString());
                }
                result = 0u;
            }
            return result;
        }
        public ulong ReadUInt64(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            ulong result;
            try
            {
                result = BitConverter.ToUInt64(this.ReadByteArray(pOffset, 8u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadUInt64&amp;quot; + ex.ToString());
                }
                result = 0uL;
            }
            return result;
        }
        public long ReadULong(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            long result;
            try
            {
                result = (long)BitConverter.ToUInt64(this.ReadByteArray(pOffset,
                 8u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadULong&amp;quot; + ex.ToString());
                }
                result = 0L;
            }
            return result;
        }
        public float ReadFloat(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            float result;
            try
            {
                result = BitConverter.ToSingle(this.ReadByteArray(pOffset, 4u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadFloat&amp;quot; + ex.ToString());
                }
                result = 0f;
            }
            return result;
        }
        public double ReadDouble(IntPtr pOffset)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            double result;
            try
            {
                result = BitConverter.ToDouble(this.ReadByteArray(pOffset, 8u), 0);
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: ReadDouble&amp;quot; + ex.ToString());
                }
                result = 0.0;
            }
            return result;
        }
        public bool WriteByteArray(IntPtr pOffset, byte[] pBytes)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                uint flNewProtect;
                MemoryHack.VirtualProtectEx(this.processHandle, pOffset, (UIntPtr)((ulong)((long)pBytes.Length)), 4u, out flNewProtect);
                bool flag = MemoryHack.WriteProcessMemory(this.processHandle, pOffset, pBytes, (uint)pBytes.Length, 0u);
                MemoryHack.VirtualProtectEx(this.processHandle, pOffset, (UIntPtr)((ulong)((long)pBytes.Length)), flNewProtect, out flNewProtect);
                result = flag;
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteByteArray&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteStringUnicode(IntPtr pOffset, string pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, Encoding.Unicode.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteStringUnicode&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteStringASCII(IntPtr pOffset, string pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, Encoding.ASCII.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteStringASCII&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteBoolean(IntPtr pOffset, bool pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteBoolean&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteChar(IntPtr pOffset, char pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteChar&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteByte(IntPtr pOffset, byte pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes((short)pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteByte&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteInt16(IntPtr pOffset, short pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteInt16&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteShort(IntPtr pOffset, short pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteShort&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteInt32(IntPtr pOffset, int pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteInt32&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteInteger(IntPtr pOffset, int pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteInt&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteInt64(IntPtr pOffset, long pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteInt64&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteLong(IntPtr pOffset, long pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteLong&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteUInt16(IntPtr pOffset, ushort pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteUInt16&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteUShort(IntPtr pOffset, ushort pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteShort&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteUInt32(IntPtr pOffset, uint pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteUInt32&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteUInteger(IntPtr pOffset, uint pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteUInt&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteUInt64(IntPtr pOffset, ulong pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteUInt64&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteULong(IntPtr pOffset, ulong pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteULong&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteFloat(IntPtr pOffset, float pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteFloat&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
        public bool WriteDouble(IntPtr pOffset, double pData)
        {
            if (this.processHandle == IntPtr.Zero)
            {
                this.CheckProcess();
            }
            bool result;
            try
            {
                result = this.WriteByteArray(pOffset, BitConverter.GetBytes(pData));
            }
            catch (Exception ex)
            {
                if (MemoryHack.debugMode)
                {
                    Console.WriteLine(&amp;quot;Error: WriteDouble&amp;quot; + ex.ToString());
                }
                result = false;
            }
            return result;
        }
    }

}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;-Следует понимать что в данном случаи пространство имени&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;namespace Treiner_DemoSource&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;у вас будет другим...&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;-Возвращаемся к нашему конструктору и объявляем указатель на наш класс(глобально):&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;MemoryHack MemHack;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;-Возвращаемся к таймеру и дописываем инициализацию класса:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 25.5em&quot;&gt;&lt;pre&gt;Process[] Proc__Game = Process.GetProcessesByName(name_Game);
            if (Proc__Game.Length != 0)
            {
                statusStrip1.Text = &amp;quot;Игра определена!&amp;quot;;
                statusStrip1.ForeColor = Color.Green;
                timer1.Stop();
                MemHack = new MemoryHack(name_Game);

                // Тут прописываем обход защиты 
            }
            else
            {
                statusStrip1.Text = &amp;quot;Ожидаем запуск Игры!&amp;quot;;
                statusStrip1.ForeColor = Color.Red;
            }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;С этим все. Теперь займемся непосредственно функциями:&lt;br /&gt;-Добавим на форму кнопку(для вкл\выкл функции)&lt;br /&gt;-Подписываемся на событие Click для нашей кнопки(даойной клик по ней)&lt;br /&gt;Сделаем что бы функция включалась и выключалась при помощи одной кнопки, для этого:&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;-Глобально объявим нулевую переменную.&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;static bool But_Fun = false;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;-Вешаем на кнопку следующую конструкцию:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 24em&quot;&gt;&lt;pre&gt;if (But_Fun == true)
            {
                //Код выключения функции
                
                button1.Text = &amp;quot;Выключено&amp;quot;;
                But_Fun = false;
            }
            else
            {
                //Код включения функции
                
                button1.Text = &amp;quot;Включено&amp;quot;;
                But_Fun = true;
            }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;- Для примера я взял функцию &amp;quot;Бесконечный бег&amp;quot;&amp;#160; (адресс и байты не обновлены не использоватать&lt;br /&gt;Адресс - 0x11E0010&lt;br /&gt;Оригинальные байты - \xD9\x81\xCC\x0E\x00\x00&lt;br /&gt;Байты для патча - \x90\x90\x90\x90\x90\x90&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;-Привернем все это к нашей кнопке:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 25.5em&quot;&gt;&lt;pre&gt;int dw_run = 0x11E0010; 
            if (But_Fun == true)
            {
                //Код выключения функции
                MemHack.WriteByteArray((IntPtr)dw_run, new byte[] { 0xD9, 0x81, 0xCC, 0x0E, 0x00, 0x00 });
                button1.Text = &amp;quot;Выключено&amp;quot;;
                But_Fun = false;
            }
            else
            {
                //Код включения функции
                MemHack.WriteByteArray((IntPtr)dw_run, new byte[] { 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 });
                button1.Text = &amp;quot;Включено&amp;quot;;
                But_Fun = true;
            }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;Аналогично делаем и с другими функциями...... Удачи...&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:12:09 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=26#p26</guid>
		</item>
		<item>
			<title>Исходник универсальный Hook</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=25#p25</link>
			<description>&lt;p&gt;Описание:&lt;br /&gt;Универсальный D3D хук для d3d9, d3d10 и d3d11. Работает на всех играх с d3d9, d3d10 и d3d11 и даже на примерах DirectX&lt;br /&gt;Проверено в играх:&lt;br /&gt;Crysis 2, Crysis 3, Warface, CoD Online, World of Tanks, FarCry3, CSS, Hitman Absolution, Metro Last Light, Just Cause 2 и т.д.&lt;/p&gt;
						&lt;p&gt;Хук уже давно находиться в открытом доступе и я подумал может кто про не го не знает&lt;/p&gt;
						&lt;p&gt;Вот и сам исходник хука &lt;/p&gt;
						&lt;p&gt;&lt;a href=&quot;http://qps.ru/OCD8p&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot;&gt;скачать&lt;/a&gt;&lt;/p&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:11:15 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=25#p25</guid>
		</item>
		<item>
			<title>&quot;Вылавливаем Клавиши&quot; [C#]</title>
			<link>http://wfhack.mybb.forum/viewtopic.php?pid=23#p23</link>
			<description>&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;&amp;quot;Вылавливаем Клавиши&amp;quot; [C#]&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;Всем привет.&lt;br /&gt;Сегодня мы научимся &amp;quot;отлавливать&amp;quot; клавиши,например для каспера,нажал Q каспер работает,отжал не работает.&lt;br /&gt;Скажу сразу я - Говнокодер,но все работает.&lt;/p&gt;
						&lt;p&gt;Так вот.Будем делать через поток.&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;Для начала подключим пространство имен:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;using System.Runtime.InteropServices;
using System.Threading;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;Затем &amp;quot;GetAsyncKeyState&amp;quot;:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 6em&quot;&gt;&lt;pre&gt;[DllImport(&amp;quot;User32.dll&amp;quot;)]
private static extern short GetAsyncKeyState(System.Int32 vKey);&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;Создадим булеву переменную:&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;Создадим булеву переменную:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 4.5em&quot;&gt;&lt;pre&gt;public bool check = true;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 30em&quot;&gt;&lt;pre&gt;public void Key()
{
   while(check)  //Цикл
   {
         if(!casper) //Название функции
         {
               short casperKey = GetAsyncKeyState(0x51); //0x51 - код клавиши,ниже выложу коды клавиш
               if(casperKey != 0)
               {
               MemHack.WriteByteArray((IntPtr)АДРЕСС, new byte[] { Байты }); //Включаем его
               }
               else
               {
               MemHack.WriteByteArray((IntPtr)АДРЕСС, new byte[] { Байты }); //Выключаем его
               }
         }
   }
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;в public_Form1() пишем:&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 12em&quot;&gt;&lt;pre&gt;public_Form1()
{
      InitializeComponent();
      Thread wk = new Thread(WaitKey); //Обьявляем,что функция WaitKey поток и называем её wk
      wk.Start(); //Запускаем Поток
}&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;p&gt;В принципе,все.&lt;/p&gt;&lt;div class=&quot;quote-box spoiler-box&quot;&gt;&lt;div onclick=&quot;$(this).toggleClass(&#039;visible&#039;); $(this).next().toggleClass(&#039;visible&#039;);&quot;&gt;коды клавиш&lt;/div&gt;&lt;blockquote&gt;&lt;div class=&quot;code-box&quot;&gt;&lt;strong class=&quot;legend&quot;&gt;Код:&lt;/strong&gt;&lt;div class=&quot;blockcode&quot;&gt;&lt;div class=&quot;scrollbox&quot; style=&quot;height: 35em&quot;&gt;&lt;pre&gt;0x41, //A key 
0x42, //B key 
0x43, //C key 
0x44, //D key 
0x45, //E key 
0x46, //F key 
0x47, //G key 
0x48, //H key 
0x49, //I key 
0x4A, //J key 
0x4B, //K key 
0x4C, //L key 
0x4D, //M key 
0x4E, //N key 
0x4F, //O key 
0x50, //P key 
0x51, //Q key 
0x52, //R key 
0x53, //S key 
0x54, //T key 
0x55, //U key 
0x56, //V key 
0x57, //W key 
0x58, //X key 
0x59, //Y key 
0x5A, //Z key&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;/div&gt;</description>
			<author>mybb@mybb.ru (qwe123_sg)</author>
			<pubDate>Wed, 22 Oct 2014 09:09:47 +0400</pubDate>
			<guid>http://wfhack.mybb.forum/viewtopic.php?pid=23#p23</guid>
		</item>
	</channel>
</rss>
