<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Взлом игр (средний уровень и выше)]]></title><description><![CDATA[Статьи, уроки, вопросы-ответы для среднего уровня и выше]]></description><link>https://gamehacklab.ru/bb/category/10</link><generator>RSS for Node</generator><lastBuildDate>Sat, 14 Mar 2026 14:26:07 GMT</lastBuildDate><atom:link href="https://gamehacklab.ru/bb/category/10.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Jun 2025 02:37:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Как сделать цветную метку или общий корень имён группы меток? (кроме единого цвета всех меток в настройках CE)]]></title><description><![CDATA[<p dir="auto">Например, метки:<br />
<strong>code_infinity_health</strong>_new<br />
<strong>code_infinity_health</strong><strong>original<br />
return</strong><strong>code_infinity_health</strong></p>
<p dir="auto">Соответственно, выделать одним цветом корень <strong>code_infinity_health</strong></p>
<p dir="auto">В LUA ничего не понимаю, поэтому буду признателен за пример для вставки в окно LUA или в сам скрипт (в идеале оба варианта)</p>
<p dir="auto">Спасибо</p>
]]></description><link>https://gamehacklab.ru/bb/topic/452/как-сделать-цветную-метку-или-общий-корень-имён-группы-меток-кроме-единого-цвета-всех-меток-в-настройках-ce</link><guid isPermaLink="true">https://gamehacklab.ru/bb/topic/452/как-сделать-цветную-метку-или-общий-корень-имён-группы-меток-кроме-единого-цвета-всех-меток-в-настройках-ce</guid><dc:creator><![CDATA[sinkhrophazatron]]></dc:creator><pubDate>Tue, 03 Jun 2025 02:37:27 GMT</pubDate></item><item><title><![CDATA[Stalker Shadow of Chernobyl - движок OGSR - функция без перезарядки]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://gamehacklab.ru/bb/uid/492">@Templar</a>  Пожалуйста :slightly_smiling_face:</p>
]]></description><link>https://gamehacklab.ru/bb/topic/428/stalker-shadow-of-chernobyl-движок-ogsr-функция-без-перезарядки</link><guid isPermaLink="true">https://gamehacklab.ru/bb/topic/428/stalker-shadow-of-chernobyl-движок-ogsr-функция-без-перезарядки</guid><dc:creator><![CDATA[LIRW]]></dc:creator><pubDate>Mon, 03 Feb 2025 09:25:00 GMT</pubDate></item><item><title><![CDATA[Изменение счетчика населения при найме юнитов в Stronghold Crusader]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://gamehacklab.ru/bb/uid/26">@LIRW</a> Это вообще не то, что я описал, что хочу сделать.</p>
]]></description><link>https://gamehacklab.ru/bb/topic/414/изменение-счетчика-населения-при-найме-юнитов-в-stronghold-crusader</link><guid isPermaLink="true">https://gamehacklab.ru/bb/topic/414/изменение-счетчика-населения-при-найме-юнитов-в-stronghold-crusader</guid><dc:creator><![CDATA[W00D]]></dc:creator><pubDate>Wed, 27 Nov 2024 12:26:46 GMT</pubDate></item><item><title><![CDATA[Взлом Mortal Kombat   Mobile]]></title><description><![CDATA[<p dir="auto">Добрый вечер помогите мне взломать Мортал Комбат Мобайл!!!???Умоляююю!</p>
]]></description><link>https://gamehacklab.ru/bb/topic/408/взлом-mortal-kombat-mobile</link><guid isPermaLink="true">https://gamehacklab.ru/bb/topic/408/взлом-mortal-kombat-mobile</guid><dc:creator><![CDATA[MKM]]></dc:creator><pubDate>Tue, 19 Nov 2024 19:17:28 GMT</pubDate></item><item><title><![CDATA[pazzles and chaos]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://gamehacklab.ru/bb/uid/551">@Сказка</a> Где именно?<br />
ВКонтакте<br />
Google Play<br />
App Store<br />
В следующий раз указывайте где именно брать подопытного.</p>
]]></description><link>https://gamehacklab.ru/bb/topic/402/pazzles-and-chaos</link><guid isPermaLink="true">https://gamehacklab.ru/bb/topic/402/pazzles-and-chaos</guid><dc:creator><![CDATA[DieVis]]></dc:creator><pubDate>Sun, 13 Oct 2024 19:45:06 GMT</pubDate></item><item><title><![CDATA[Кто-нибудь разбирается в ядре Windows? (реверс-инжиниринг)]]></title><description><![CDATA[<p dir="auto">Я надеюсь найти единомышленников среди разработчиков читов для игр и разработать надежную стратегию продаж</p>
<p dir="auto">Требования:<br />
Экспертиза в обратной разработке игр для Windows.<br />
Глубокие знания архитектуры ядра Windows.<br />
Умение анализировать и обходить ведущие технологии античита, включая Easy Anti-Cheat (EAC) и BattlEye (BE).<br />
Часто находясь в сети, можно вести хорошее общение<br />
Обязанности:<br />
Проводить глубокий анализ существующих механизмов античита для выявления потенциальных уязвимостей.<br />
Разрабатывать и внедрять сложные стратегии для эффективного обхода протоколов античита.</p>
<p dir="auto">Эта роль требует высокого уровня технических навыков и креативного подхода.</p>
<p dir="auto">Контактная информация:<br />
Telegram: @fentianx     Discord: fen_tian</p>
<p dir="auto">Относительно вознаграждения можно связаться со мной для получения подробной информации</p>
]]></description><link>https://gamehacklab.ru/bb/topic/368/кто-нибудь-разбирается-в-ядре-windows-реверс-инжиниринг</link><guid isPermaLink="true">https://gamehacklab.ru/bb/topic/368/кто-нибудь-разбирается-в-ядре-windows-реверс-инжиниринг</guid><dc:creator><![CDATA[fentian]]></dc:creator><pubDate>Thu, 16 May 2024 04:19:13 GMT</pubDate></item><item><title><![CDATA[Взлом Unturned]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://gamehacklab.ru/bb/uid/1">@StoneWeaver</a>,<br />
Спасибо за ответ! К слову я тоже так думал, но мне никак не приходила в голову мысль о том, как найти смещение трансформа в классе.  И только сейчас, когда я пишу этот ответ, я вспомнил о том, что эти поля, которые инициализируют объекты класса не хранят в себе весь класс, а лишь указатель на него, так же и с функциями. Я просто не мог найти их размер, думая что они хранятся прямо вот так в памяти. Это вообще вылетело у меня из головы и только Ваш ответ натолкнул меня на мысль! Это и вправду моя глупая ошибка. Спасибо огромное за ответ ещё раз!</p>
]]></description><link>https://gamehacklab.ru/bb/topic/361/взлом-unturned</link><guid isPermaLink="true">https://gamehacklab.ru/bb/topic/361/взлом-unturned</guid><dc:creator><![CDATA[Suplin3]]></dc:creator><pubDate>Sat, 13 Apr 2024 18:32:10 GMT</pubDate></item><item><title><![CDATA[Как привязать структуру к постоянному указателю, которую нельзя отладить?]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://gamehacklab.ru/bb/uid/26">@LIRW</a> да, ищу вручную реверсивным поиском, пробовал автоматическим поиском, все-таки получилось найти, но только для одного персонажа, но вот когда на карте спавнятся несколько и я пытаюсь отследить позицию второго то автоматический указатель через несколько просеиваний ничего не выдает, то есть только на самого первого выдает, я вообще не понимаю эту структуру. Но именно с этим вопросом теперь все стало понятно благодаря вашему ответу</p>
<blockquote>
<p dir="auto">Он может там передаётся через параметр типа "add rax,xxxxxxxx" сколько то, и потом далее пошел.</p>
</blockquote>
<p dir="auto">я понял почему вручную не так просто всегда отследить что происходит, то есть для меня эта тема прояснилась, спасибо большое!</p>
]]></description><link>https://gamehacklab.ru/bb/topic/110/как-привязать-структуру-к-постоянному-указателю-которую-нельзя-отладить</link><guid isPermaLink="true">https://gamehacklab.ru/bb/topic/110/как-привязать-структуру-к-постоянному-указателю-которую-нельзя-отладить</guid><dc:creator><![CDATA[Kolyan02]]></dc:creator><pubDate>Sun, 24 Dec 2023 10:43:02 GMT</pubDate></item><item><title><![CDATA[Вопрос по трюку в скрипте автоассеблера]]></title><description><![CDATA[<p dir="auto"><a class="mention plugin-mentions-user plugin-mentions-a" href="https://gamehacklab.ru/bb/uid/3">@Partizan1078</a> Спасибо за ссылку на видео уроки. Тема уже старая, но я посмотрел. Многие навыки уже получил самостоятельно, но несколько заметок из уроков вынес. Но хочу сказать, что я не совсем начинающий в CE, просто сам знаешь, всё знать невозможно и для этого и есть форумы, чтоб делиться опытом.</p>
]]></description><link>https://gamehacklab.ru/bb/topic/55/вопрос-по-трюку-в-скрипте-автоассеблера</link><guid isPermaLink="true">https://gamehacklab.ru/bb/topic/55/вопрос-по-трюку-в-скрипте-автоассеблера</guid><dc:creator><![CDATA[Iniar]]></dc:creator><pubDate>Sat, 15 Apr 2023 12:45:29 GMT</pubDate></item><item><title><![CDATA[Planet Centauri v0.13.9 Бесплатный крафт]]></title><description><![CDATA[<p dir="auto">На примере этой игры расскажу про нюанс который может повстречаться и в других играх.<br />
<a href="https://youtu.be/ezeU7ssJ4lw" target="_blank" rel="noopener noreferrer nofollow ugc">Смотреть</a></p>
]]></description><link>https://gamehacklab.ru/bb/topic/23/planet-centauri-v0-13-9-бесплатный-крафт</link><guid isPermaLink="true">https://gamehacklab.ru/bb/topic/23/planet-centauri-v0-13-9-бесплатный-крафт</guid><dc:creator><![CDATA[Partizan1078]]></dc:creator><pubDate>Sat, 18 Feb 2023 23:34:35 GMT</pubDate></item><item><title><![CDATA[Бесплатный крафт на примере Dying Light 2]]></title><description><![CDATA[<p dir="auto">Меня попросили объяснить как я сделал бесплатный крафт.<br />
Ну что ж.<br />
Из меня учитель так себе.<br />
<a href="https://www.youtube.com/watch?v=sZ5YmDKQyQ8" target="_blank" rel="noopener noreferrer nofollow ugc">Смотреть</a><br />
А как вставлять видео как на старом форуме?</p>
]]></description><link>https://gamehacklab.ru/bb/topic/21/бесплатный-крафт-на-примере-dying-light-2</link><guid isPermaLink="true">https://gamehacklab.ru/bb/topic/21/бесплатный-крафт-на-примере-dying-light-2</guid><dc:creator><![CDATA[Partizan1078]]></dc:creator><pubDate>Fri, 17 Feb 2023 21:00:12 GMT</pubDate></item><item><title><![CDATA[Поиск и вызов игровых функций]]></title><description><![CDATA[<h3>[GTA Vice City] Простой спавн машин</h3>
<p dir="auto">Собственно, выйти на функции создания автомобилей очень просто - в игре есть читы, которые позволяют "вызывать" себе танк, катафалк и другие автомобили.<br />
Поэтому выйдя на функцию обработки чита - мы найдем функции для создания автомобиля. Приступим.</p>
<p dir="auto">Для начала вспомним несколько читов для создания автомобилей.<br />
Я выбрал чит-код создания катафалка - <code>THELASTRIDE</code> , но так же можно использовать наш любимый чит создания танка - <code>PANZER</code>.</p>
<p dir="auto">Собственно ввод кодов - это операция по сохранению текущего введенного символа в строку и последующая проверка получившейся строки на соответствие.</p>
<p dir="auto">Каждый введенный символ записывается как в стек, поэтому в реальности эти читы выглядят как <code>REZNAP</code> и <code>EDIRTSALEHT</code>.</p>
<p dir="auto">Но если поискать данный текст, мы его не найдем. Как же так спросите вы? На самом деле функция обработки чит-кодов срабатывает на вводе последней буквы, поэтому проще всего просто искать часть введенного кода.<br />
Выйдем в меню игры, введем чит-код <code>THELASTRIDE</code> и попробуем поискать подстроку <code>TSALEHT</code> (не забываем переворачивать чит-код) в игре:</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676124996134-f1d20c48-0980-45a6-8b8f-8f6d0d37e105-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="f1d20c48-0980-45a6-8b8f-8f6d0d37e105-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Ура, мы нашли текст по адресу <code>00A0F94F</code>. Не будем его запоминать, он нам не пригодится, а сразу посмотрим, что же творится в памяти.<br />
Нажмем на адрес правой кнопкой мыши и выбираем <code>Browse this memory Region</code>.</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676125138117-bcd73714-7af2-4096-a53f-9dd95131ddf2-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="bcd73714-7af2-4096-a53f-9dd95131ddf2-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">В памяти сразу поднимемся на пару строк вверх, обычно строки длиннее чем мы искали:</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676125197157-6f5bde85-b403-4b24-a1bd-4f3f7f623c50-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="6f5bde85-b403-4b24-a1bd-4f3f7f623c50-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Ура, видим часть введенного нами кода. Так же могут присутствовать и другие куски текста, например на скришоте я немного побегал перед вводом чит-кода.<br />
Теперь мы видим, что в реальности строка ввода чит-кода больше чем мы ожидали, а её начало находится там, где присутсвуют первые символы <code>DW DIRTSAL</code>, т.е. по адресу <code>00A0F94A</code>. Добавим этот адрес в табличку (размер строки вычислен эмпирическим путем - посчитал не нулевые байты):</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676125309685-a6f03172-fffa-4fc7-9f2e-0ed06a944841-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="a6f03172-fffa-4fc7-9f2e-0ed06a944841-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Теперь если в игре мы побегаем или введем другие чит-коды, увидим как они укладываются в памяти.</p>
<p dir="auto">Посмотрим же, что использует этот буфер - попросим CE найти всех, кто использует данный адрес при вводе чит-кода<br />
Сначала жмем ПКМ на адресе в главном окне CE и выбираем <code>Find out what accesses this address</code>:</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676125371729-868a4629-6756-4fdc-8fb7-a9e51f1877d1-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="868a4629-6756-4fdc-8fb7-a9e51f1877d1-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Теперь переключимся в игру и введем любое слово, например <code>HELLOGHL</code>. Этим мы отсеим инструкции, которые используют наш адрес при обычном вводе. В окне появились следующие инструкции, мы будем их игнорировать:</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676125421017-dd5a25bc-7d96-42e1-a2a9-d25cd5c703d2-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="dd5a25bc-7d96-42e1-a2a9-d25cd5c703d2-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Теперь введем чит-код на создание автомобиля - <code>THELASTRIDE</code>. Внимательно следим за окном с инструкциями, т.к. в процессе ввода у меня появились еще несколько инструкций, которые используют адрес, но не влияют на появление машины. После ввода последней буквы видим следующую картину:</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676125451708-39929b27-080c-49b3-b3fb-97585884933d-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="39929b27-080c-49b3-b3fb-97585884933d-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Уже можно заметить несколько функций, выполняющихся один раз. Для того, чтобы отсеять лишние инструкции, попробуем ввести другой чит-код, не относящийся к созданию автомобилей, например <code>LEAVEMEALONE</code>:</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676125472162-7b283ab0-4011-4a89-ad02-69f80a85b3ca-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="7b283ab0-4011-4a89-ad02-69f80a85b3ca-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Ура, из предыдущих инструкций у нас осталось одна - инструкция <code>mov byte ptr [00A0F94A]</code> по адресу <code>004AC84A</code>. Давайте выделим её и нажмем Show disassembler, чтобы увидеть, где она выполняется:</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676125494729-6f4a97e4-d885-45cb-ab40-2a1e2ba2c22f-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="6f4a97e4-d885-45cb-ab40-2a1e2ba2c22f-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Собственно мы видим некое условие, после которого в наш буфер записывает <code>0x20</code>, он же <code>32</code> он же пробел и вызывается некая функция <code>gta-vc.exe+AE7C0</code> с аргументом AC. Заочно можно нас поздравить, потому что мы нашли нужную нам функцию, осталось только убедиться в этом.</p>
<p dir="auto">Попробуйте тем же способом найти чит-функцию для создания танка. Я её уже нашел, давайте посмотрим:</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676125531133-b2f657ee-c347-4847-b56e-740831a5ce26-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="b2f657ee-c347-4847-b56e-740831a5ce26-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Видно, что функция находится немного в другом месте, но отличие состоит только в том, какой аргумент передается в функцию - push записывает в стек <code>A2</code> , вместо <code>AC</code>. В остальном код условия идентичен и я предлагаю попробовать просто вызывать функцию <code>gta-vc.exe+AE7C0</code> с разными параметрами.</p>
<p dir="auto">Для вызова функции мы будем использовать <code>AutoAssembe</code> и функцию <code>createthread</code>.<br />
Зайдем в <code>AutoAssembler</code> (откроем <code>Memory Viewer</code>, меню <code>Tools - AutoAssemble</code>) и набросаем следующий скрипт:</p>
<pre><code class="language-ceaa">[ENABLE]
// код, который выполнится при включении скрипта

// выделяем память под нашу функцию, хватит и 64 байта
alloc(our_func, 64)

// начало нашей функции
// фактически просто копируем код из игры
our_func:
// записываем в стек AC, он же 172
push 000000AC
// вызываем некую функцию
call gta-vc.exe+AE7C0
// убираем из стека наш AC
pop ecx
// конец функции
ret


// создаем поток, который прыгнет на нашу our_func и выполнит код
createthread(our_func)

[DISABLE]
// код, который выполнится при выключении скрипта

// просто освобождаем память от нашей функции
dealloc(our_func)
</code></pre>
<p dir="auto">Добавим его в таблицу через <code>File - Assign to current cheat table</code> и можно закрывать окно <code>Auto assemble</code>.</p>
<p dir="auto">Скрипт выделяет в памяти игры 64 байта для себя, после чего записывает туда инструкции, которые мы скопировали из оригинальной игры и просит createthread выполнить их.</p>
<p dir="auto">Обратите внимание, что аргументы в данную функцию передаются как <code>push AC</code>. В оригинальной игре после call мы можем заметить инструкцию <code>pop ecx</code>. Это значит, что функция не трогает стек и мы сам должны двигать его за ним (т.е. откатить push <code>AC</code>). Поэтому после функции выполняется pop и мы обязательно должны его скопировать, иначе ret будет пытаться вернуть поток не куда-то по адресу <code>0xAA123456</code>, а по адресу <code>0x000000AC</code>. Почему <code>pop</code> использует <code>ecx</code>? В данном случае - потому что левая пятка компилятора так решила и это ни на что не влияет (<code>ecx</code> спокойно можно заменить на <code>eax</code> и другие регистры).</p>
<p dir="auto">Ура, скрипт в нашей таблице, давайте же активируем его! Смотрим на результат и...:</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676125612585-e5831e99-93cf-47f6-a98d-f6479f7d5467-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="e5831e99-93cf-47f6-a98d-f6479f7d5467-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Наш скрипт вызвал чит-функцию создания катафалка! Наверное вы уже догадались, что если мы заменим push AC на push A2 мы увидим заспаунившися танк?</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676125634102-d86d919f-0f3b-4fd7-afd1-26b620e203c5-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="d86d919f-0f3b-4fd7-afd1-26b620e203c5-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Получается, что <code>AC</code> - это катафалк, а <code>A2</code> - танк. Поискав <code>GTA Vice City Vehicle IDs</code>, мы найдем, что действительно, <code>A2 = 162</code> - это Vehicle ID танка, а <code>AC = 172</code> - катафалк. Попробуем указать свой ID, один из списка, например <code>168</code> (такси). Передача аргумента превратится в <code>push #168</code>:</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676125655239-0b1b7e49-109b-41d8-a72b-7282e493a66d-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="0b1b7e49-109b-41d8-a72b-7282e493a66d-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Можно сказать, что наш скрипт работает! Осталось вынести ID модели как переменную:</p>
<pre><code class="language-ceaa">[ENABLE]
// код, который выполнится при включении скрипта

// выделяем память под нашу функцию, хватит и 64 байта
alloc(our_func, 64)
// выделяем память под переменную
alloc(our_vehicle_id, 4)

// объявляем нашу our_func как переменную,
// чтобы можно было вызывать createthread из другого скрипта
registersymbol(our_func)

// объявляем нашу our_vehicle_id как переменную,
// чтобы можно было обращаться из таблицы
registersymbol(our_vehicle_id)

// записываем начальное занчение
our_vehicle_id:
// sabre turbo
dd #206

// начало нашей функции
// фактически просто копируем код из игры
our_func:
// записываем в стек наш ID машины
push [our_vehicle_id]
// вызываем некую функцию
call gta-vc.exe+AE7C0
// убираем из стека наш AC
pop ecx
// конец функции
ret

[DISABLE]
// код, который выполнится при выключении скрипта

// удаляем информацию о функции
dealloc(our_func)
unregistersymbol(our_func)

// удаляем информацию о переменной
dealloc(our_vehicle_id)
unregistersymbol(our_vehicle_id)
</code></pre>
<p dir="auto">Я удалил из скрипта функцию вызова потока, чтобы переместить её в отдельный скрипт:</p>
<pre><code class="language-ceaa">[ENABLE]
createthread(our_func)

[DISABLE]
</code></pre>
<p dir="auto">Теперь можно добавить в таблицу адрес <code>our_vehicle_id</code>, в который после записи скрипта будет записано число <code>206</code> (ID наикрутейшего Sabre Turbo).</p>
<p dir="auto">Это число отвечает за то, что мы передаем в чит-функцию и меня его мы будем менять ID заспаунившегося автомобиля:</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676125727057-61a53748-f154-4855-9665-9fe2c2c5d869-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="61a53748-f154-4855-9665-9fe2c2c5d869-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">Результат:</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676125744596-020e4c2f-2b88-446d-8c57-166804a01519-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="020e4c2f-2b88-446d-8c57-166804a01519-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto">И о проблемах :)</p>
<p dir="auto">Скрипт фактически вызывает чит-код, поэтому мы начинаем слыть читерами, рейтинг в игре уменьшается и т.д. Это довольно легко обходится, т.к. если мы провалимся в функцию <code>gta-vc.exe+AE7C0</code>, перед самым <code>ret</code> есть две инструкции - <code>add [gta-vc.exe+5B4F94],000003E8</code> и <code>mov byte ptr [gta-vc.exe+60FB37],01</code>. Первая накидывает очки читерства (они хранятся отдельно) и устанавливает флаг - "этот парень использовал коды". Если их занопить - игра никогда не узнает о ваших проделках.</p>
<p dir="auto">И вновь, потому что мы просто вызываем функцию чит-кода, она спаунит машины только на дорогу. Она находит ближайшую RoadPoint, прибавляет по оси Z несколько метров и спаунит авто. Поэтому создать авто прямо перед игроком так просто не получится.</p>
<p dir="auto">Ну и основная проблема - это то, что в данной функции использует конструктор только для автомобилей. Он так же используется для вертолетов, но вот байки и лодки с ним заспаунить не получится (заспаунится, но крешится при посадке и выглядит, кхм...):</p>
<p dir="auto"><img src="/bb/assets/uploads/files/1676125774507-d2002f43-939d-4cf9-91b6-94a47fe7a6da-%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5.png" alt="d2002f43-939d-4cf9-91b6-94a47fe7a6da-изображение.png" class=" img-fluid img-markdown" /></p>
<p dir="auto"><em>Спасибо @Imaginary за перенос статьи на форум</em></p>
]]></description><link>https://gamehacklab.ru/bb/topic/6/поиск-и-вызов-игровых-функций</link><guid isPermaLink="true">https://gamehacklab.ru/bb/topic/6/поиск-и-вызов-игровых-функций</guid><dc:creator><![CDATA[srg91]]></dc:creator><pubDate>Sat, 11 Feb 2023 14:30:00 GMT</pubDate></item><item><title><![CDATA[Принцип создания свободной камеры в играх]]></title><description><![CDATA[<h3>Создание свободной камеры для одиночной игры на примере игры War Thunder</h3>
<p dir="auto">Свободная камера, подразумевает возможность полёта камеры отдельно от объекта/персонажа и тому подобного, используется в самых разных целях, для обнаружения противников, для создания красивых снимков, для нахождения секретов и прочего.</p>
<p dir="auto">Принцип создания:<br />
Всё зависит от типа игры. Если реализован поворот камеры мышью - то данную функцию делать не нужно. Для перемещения камеры можно использовать самые разные функции, но я склоняюсь к полёту в ту сторону куда смотрит игрок. Для этого необходимо вычислить синус и косинус для поворота по горизонтальной, и синус для поворота по вертикальной оси. После их надо умножить на радиус, мы получим точку на сфере - это и будет вектор ускорения для камеры. Его следует добавлять к уже существующим координатам камеры, изменяя радиус мы можем изменять скорость.<br />
Для того что бы камера была "свободная", нужно записывать свои значения в координаты, а функцию которая записывает их в игре по стандарту - отключить.</p>
<p dir="auto">Более детально всё показано в следующем видео:<br />
<a href="https://www.youtube.com/watch?v=D646Nfr6hd0" target="_blank" rel="noopener noreferrer nofollow ugc"><img src="https://img.youtube.com/vi/D646Nfr6hd0/0.jpg" alt="My video" class=" img-fluid img-markdown" /></a></p>
<p dir="auto">Видео с демонстрацией работы разных формул:<br />
<a href="https://www.youtube.com/watch?v=sMSx8BH-uhA" target="_blank" rel="noopener noreferrer nofollow ugc"><img src="https://img.youtube.com/vi/sMSx8BH-uhA/0.jpg" alt="My video formules" class=" img-fluid img-markdown" /></a></p>
<p dir="auto">Видео от другого участника форума на примере игры Dark Souls:<br />
<a href="https://www.youtube.com/watch?v=ev37qgSeyBg" target="_blank" rel="noopener noreferrer nofollow ugc"><img src="https://img.youtube.com/vi/ev37qgSeyBg/0.jpg" alt="My video formules" class=" img-fluid img-markdown" /></a></p>
<p dir="auto"><em>Imaginary</em></p>
]]></description><link>https://gamehacklab.ru/bb/topic/5/принцип-создания-свободной-камеры-в-играх</link><guid isPermaLink="true">https://gamehacklab.ru/bb/topic/5/принцип-создания-свободной-камеры-в-играх</guid><dc:creator><![CDATA[Promising]]></dc:creator><pubDate>Sat, 11 Feb 2023 14:09:35 GMT</pubDate></item></channel></rss>