Оффсеты кс

Начинающий
Статус
Оффлайн
Регистрация
19 Июл 2018
Сообщения
50
Реакции[?]
6
Поинты[?]
0
Всем халла, я делаю мини проект для себя и мне нужна помощь. Тем буду делать достаточно много, ибо много вопросов. В чём суть: почитал я достаточно много тем по поводу их обновления и как вообще их доставать (оффсеты), но вопросы остались, конкретно такие:
1. Не могу понять конкретные значения определённых оффсетов, к примеру: зачем они нужны, типо есть класс Player и в этом классе хранятся оффсеты: flag, jump, localplayer, потом в основной функции мы каждой даём какие-то значения, как правило, но вот что за localplayer? flag отвечает за перемещение по карте и состояние игрока (в воздухе он или на земле), jump за прыжок, тогда по логике localplayer за наличие текстурки игрока на карте? (и вообще, вот эти значения: 0xFHGH (пример), - это и есть те ячейки в памяти, в которых хранятся определённые данные об игроке?)
2. Что такое сигнатуры?
3. Хочу понять, как сделать автообновление оффсетов. У меня при прочтении часто перед глазами мелькали такие слова, как дампер, парсер, нетвар, вроде, всё, но это всё относится к автообновлениям и в каждой теме шёл спор о лучшем способе автообновления оффсетов, так какой способ вообще лучше, и что это всё значит, как это выглядет, вызывается в коде и работает? Без хейта плез, просто я уже запутался со всей этой парашей :/
 
Последнее редактирование:
money++
Разработчик
Статус
Оффлайн
Регистрация
14 Июн 2018
Сообщения
638
Реакции[?]
339
Поинты[?]
22K
1) localplayer - это указатель на начало класса, которое описывает конкретно твоего персонажа. Оффсет 0xFHGH (пример) - это сдвиг относительно чего-то, который указывает на начало чего-то. Например в строке g_LocalPlayer = *(C_LocalPlayer*)(Utils::PatternScan(client, "8B 0D ? ? ? ? 83 FF FF 74 07") + 2); 2 - это оффсет (т.е. сдвиг) от паттерна "8B 0D ? ? ? ? 83 FF FF 74 07" на 2 байта. То есть у тебя какое-то место в памяти модуля client, а ты добавляешь к нему 2 байта и говоришь что это будет указатель на начало локалплеера.
2) Сигнатуры (они же паттерны) - пример того, что будет в памяти компьютера. Грубо говоря если бы ты хотел найти в книге что-то вроде "привет, ???? Как дела?" то "привет, ???? Как дела?" было бы сигнатурой aka паттерном. 4 вопросительных знака в середине потому что мы не знаем в данном случае имя. Кстати, функция FindPattern в большинстве SDK находит только первую встречу сигнатуры.
3) Для экстернал читов, с которых проще всего начать, просто скачиваешь в коде файлик из github hazedumper и копируешь оффсеты оттуда. В интернал читах есть более сложный, зато более красивый метод, но пока разберись с экстерналами
 
Начинающий
Статус
Оффлайн
Регистрация
19 Июл 2018
Сообщения
50
Реакции[?]
6
Поинты[?]
0
1) localplayer - это указатель на начало класса, которое описывает конкретно твоего персонажа. Оффсет 0xFHGH (пример) - это сдвиг относительно чего-то, который указывает на начало чего-то. Например в строке g_LocalPlayer = *(C_LocalPlayer*)(Utils::PatternScan(client, "8B 0D ? ? ? ? 83 FF FF 74 07") + 2); 2 - это оффсет (т.е. сдвиг) от паттерна "8B 0D ? ? ? ? 83 FF FF 74 07" на 2 байта. То есть у тебя какое-то место в памяти модуля client, а ты добавляешь к нему 2 байта и говоришь что это будет указатель на начало локалплеера.
Не совсем разобрался с локалплеером, тк я вроде как понял, что это указатель на начало класса, но этот указатель имеет оффсет как-то.
Вот пример того, как я понял localplayer, если сказать словами, то я это понял как простую переменную(указатель) или указатели тоже могут иметь оффсеты?
(Я плюсы знаю, не в совершенстве, но знаю, правда только базу. Поэтому пытаюсь поставить все точки над "и", чтобы понять, как вообще всё это работает и как писать код, я не говорю об использовании библиотек или каких-то заголовочных файлов, хотя с ними я тоже хочу разбираться и хочу понять, какой смысл они в себе несут и как были написаны, тот же самый MemMan.h)

class Player
{
m_flag;
m_health;
m_jump;
};

int main
{
Player *localplayer;
*localplayer.m_flag = (хз что тут, скорее всего эти самые сигнатуры, если я правильно понял их назначение);

return 0;
}


2) Сигнатуры (они же паттерны) - пример того, что будет в памяти компьютера. Грубо говоря если бы ты хотел найти в книге что-то вроде "привет, ???? Как дела?" то "привет, ???? Как дела?" было бы сигнатурой aka паттерном. 4 вопросительных знака в середине потому что мы не знаем в данном случае имя. Кстати, функция FindPattern в большинстве SDK находит только первую встречу сигнатуры.
Так, я понял, что паттерны aka сигнатуры записываются или уже записаны в память, но что они под собой подразумевают? Что они хранят, если они вообще это делают. На счёт аналогии с именем понял, но какое имя может быть у сигнатур?

3) Для экстернал читов, с которых проще всего начать, просто скачиваешь в коде файлик из github hazedumper и копируешь оффсеты оттуда. В интернал читах есть более сложный, зато более красивый метод, но пока разберись с экстерналами
Говорят, что этот хэйздампер долго обновляет эти оффсеты или что-то в этом роде, но я попробую
 
money++
Разработчик
Статус
Оффлайн
Регистрация
14 Июн 2018
Сообщения
638
Реакции[?]
339
Поинты[?]
22K
Не совсем разобрался с локалплеером, тк я вроде как понял, что это указатель на начало класса, но этот указатель имеет оффсет как-то.
Вот пример того, как я понял localplayer, если сказать словами, то я это понял как простую переменную(указатель) или указатели тоже могут иметь оффсеты?
(Я плюсы знаю, не в совершенстве, но знаю, правда только базу. Поэтому пытаюсь поставить все точки над "и", чтобы понять, как вообще всё это работает и как писать код, я не говорю об использовании библиотек или каких-то заголовочных файлов, хотя с ними я тоже хочу разбираться и хочу понять, какой смысл они в себе несут и как были написаны, тот же самый MemMan.h)

class Player
{
m_flag;
m_health;
m_jump;
};

int main
{
Player *localplayer;
*localplayer.m_flag = (хз что тут, скорее всего эти самые сигнатуры, если я правильно понял их назначение);

return 0;
}



Так, я понял, что паттерны aka сигнатуры записываются или уже записаны в память, но что они под собой подразумевают? Что они хранят, если они вообще это делают. На счёт аналогии с именем понял, но какое имя может быть у сигнатур?


Говорят, что этот хэйздампер долго обновляет эти оффсеты или что-то в этом роде, но я попробую
1) локалплеер, это тоже плеер. Просто локалплеер это конкретно ты
2) Сигнатура это просто пример того, как должна выглядеть память в каком-то месте. По сигнатуре ищут это самое место в памяти
 
Начинающий
Статус
Оффлайн
Регистрация
19 Июл 2018
Сообщения
50
Реакции[?]
6
Поинты[?]
0
1) локалплеер, это тоже плеер. Просто локалплеер это конкретно ты
А ты (надеюсь Вы не против, что я на ты перешёл) не мог бы написать какой-то незамысловатый код, просто пример того, как этот локалплеер работает с классом, просто ты написал, что локалплеер - это тот же плеер, но как он выглядит в коде? Он тоже является каким-то конкретным классом или он как раз является тем, что я указал в своём шаблонном коде? Ну и да, я понимаю, что локалплеер - это я, ибо название говорит само за себя

2) Сигнатура это просто пример того, как должна выглядеть память в каком-то месте. По сигнатуре ищут это самое место в памяти
То есть это тупо адрес? (Адрес в который записана какая-то статическая точка и при её изменении идёт прибавление к этой статической точке (адресу в памяти) оффсет (смещение))
 
Начинающий
Статус
Оффлайн
Регистрация
19 Июл 2018
Сообщения
50
Реакции[?]
6
Поинты[?]
0
3) Для экстернал читов, с которых проще всего начать, просто скачиваешь в коде файлик из github hazedumper и копируешь оффсеты оттуда. В интернал читах есть более сложный, зато более красивый метод, но пока разберись с экстерналами
И всё же, что за нетвар? Просто пишут, что сейчас через него все оффсеты получают. Где можно про это почитать и инфу надыбать?
 
money++
Разработчик
Статус
Оффлайн
Регистрация
14 Июн 2018
Сообщения
638
Реакции[?]
339
Поинты[?]
22K
А ты (надеюсь Вы не против, что я на ты перешёл) не мог бы написать какой-то незамысловатый код, просто пример того, как этот локалплеер работает с классом, просто ты написал, что локалплеер - это тот же плеер, но как он выглядит в коде? Он тоже является каким-то конкретным классом или он как раз является тем, что я указал в своём шаблонном коде? Ну и да, я понимаю, что локалплеер - это я, ибо название говорит само за себя


То есть это тупо адрес? (Адрес в который записана какая-то статическая точка и при её изменении идёт прибавление к этой статической точке (адресу в памяти) оффсет (смещение))
1) В разных сдк это может немного отличаться. Обычно локалплеер или наследует функции класса CBasePlayer и добавляет, или просто имеет внутри себя одно поле с классом CBasePlayer и несколько своих операторов(==, bool(), ->).
2) Нет нет нет. Представь что память это текст. Тогда сигнатура это предложение. Когда ты хочешь найти место этого предложения ты читаешь книгу и сравниваешь каждое предложение с тем, которое хочешь найти
 
money++
Разработчик
Статус
Оффлайн
Регистрация
14 Июн 2018
Сообщения
638
Реакции[?]
339
Поинты[?]
22K
Начинающий
Статус
Оффлайн
Регистрация
19 Июл 2018
Сообщения
50
Реакции[?]
6
Поинты[?]
0
2) Нет нет нет. Представь что память это текст. Тогда сигнатура это предложение. Когда ты хочешь найти место этого предложения ты читаешь книгу и сравниваешь каждое предложение с тем, которое хочешь найти
Но эта сигнатура - она имеет какой-то смысл? Она ведь что-то значит, раз мы именно к ней прибавляем смещение. Судя по дамперу, сигнатуры никогда не меняются или очень редко, в отличии от оффсетов или наоборот. И кстати почему они изменяются после обновлений? Стим же вряд ли изменяет как-то принцип перемещения или принцип прыжков в игре, как это работает? Есть ведь отличие оффсетов от сигнатур?
 
money++
Разработчик
Статус
Оффлайн
Регистрация
14 Июн 2018
Сообщения
638
Реакции[?]
339
Поинты[?]
22K
Но эта сигнатура - она имеет какой-то смысл? Она ведь что-то значит, раз мы именно к ней прибавляем смещение. Судя по дамперу, сигнатуры никогда не меняются или очень редко, в отличии от оффсетов или наоборот. И кстати почему они изменяются после обновлений? Стим же вряд ли изменяет как-то принцип перемещения или принцип прыжков в игре, как это работает? Есть ведь отличие оффсетов от сигнатур?
Ты не к сигнатуре что-то прибавляешь. Ты при помощи сигнатуры находишь место в памяти какое-то. И уже с ним работаешь. Просто берешь его или что-то добавляешь это уже другое дело. Utils::PatternScan(client, "8B 0D ? ? ? ? 83 FF FF 74 07") это нахождение места в памяти по сигнатуре(в разных сдк функция будет называться по разному), а "8B 0D ? ? ? ? 83 FF FF 74 07" это сама сигнатура
Сигнатуры меняются если вальве решают поменять что-то более глобальное.
Оффсет - это смещение в памяти относительно чего-то, сигнатура - это "пример" места памяти
 
Начинающий
Статус
Оффлайн
Регистрация
19 Июл 2018
Сообщения
50
Реакции[?]
6
Поинты[?]
0
Оффсет - это смещение в памяти относительно чего-то
Вроде понял, но теперь трабл с оффсетами в башке :/. Вот если мы начнём ходить в игре, то как будет всё это работать в памяти или прыгать (нахождение на земле или в воздухе)? Типо относительно чего мы будем перемещаться, к чему мы прибавляем это смещение (этот сдвиг - оффсет) в самом начале (не понимаю просто как мы передвигаемся по памяти и относительно чего). И я опять загнался по поводу сигнатуры, типо сигнатура - по ней находится место в памяти и с ним начинается работа, но в тоже время сигнатурой называют dwForceJump. Вот как это работает в бхопе: if(сигнатура чего-то или точнее место в памяти, которое мы нашли с помощью сигнатуры + флаг с значением где мы находимся на земле (оффсет), я прост хуй знает как написать, что мы находимся на земле и зажат пробел) {сигнатура чего-то или точнее место в памяти, которое мы нашли с помощью сигнатуры + сигнатура прыжка или оффсет прыжка - этого как раз я и не понимаю}. Типо в дампере он записан как сигнатура, он редко обновляется, кодеры его записывают как оффсет
 
money++
Разработчик
Статус
Оффлайн
Регистрация
14 Июн 2018
Сообщения
638
Реакции[?]
339
Поинты[?]
22K
Вроде понял, но теперь трабл с оффсетами в башке :/. Вот если мы начнём ходить в игре, то как будет всё это работать в памяти или прыгать (нахождение на земле или в воздухе)? Типо относительно чего мы будем перемещаться, к чему мы прибавляем это смещение (этот сдвиг - оффсет) в самом начале (не понимаю просто как мы передвигаемся по памяти и относительно чего)
От перемещений по карте адрес персонажа в памяти не меняется. Только значения его координат, скорости, направления глаз, ног и т.д.
 
Начинающий
Статус
Оффлайн
Регистрация
19 Июл 2018
Сообщения
50
Реакции[?]
6
Поинты[?]
0
От перемещений по карте адрес персонажа в памяти не меняется. Только значения его координат, скорости, направления глаз, ног и т.д.
А ты же написал " Оффсет - это смещение в памяти относительно чего-то ". И что по поводу сигнатура прыжка или оффсет прыжка. Типо в дампере он записан как сигнатура, он редко обновляется, кодеры его записывают как оффсет
 
money++
Разработчик
Статус
Оффлайн
Регистрация
14 Июн 2018
Сообщения
638
Реакции[?]
339
Поинты[?]
22K
А ты же написал " Оффсет - это смещение в памяти относительно чего-то ". И что по поводу сигнатура прыжка или оффсет прыжка. Типо в дампере он записан как сигнатура, он редко обновляется, кодеры его записывают как оффсет
Смотри. У тебя есть память. В памяти например 0x2725FB13AA4 находиться начало переменной localplayer(которая является классом). В точке 0x2725FB13AA4 + 0x13(например) находиться начало int с его здоровьем. Здесь 0x2725FB13AA4 это адрес памяти, а 0x13 - оффсет. Теперь посмотрим что храниться по этому адресу памяти - например "8B 0D 4E 8C C2 AA 83 FF FF 74 07". Тогда по сигнатуре "8B 0D 4E 8C C2 AA 83 FF FF 74 07" мы могли бы найти этот адрес в памяти (потому что знаем, что в нем находится)
 
Начинающий
Статус
Оффлайн
Регистрация
19 Июл 2018
Сообщения
50
Реакции[?]
6
Поинты[?]
0
Смотри. У тебя есть память. В памяти например 0x2725FB13AA4 находиться начало переменной localplayer(которая является классом). В точке 0x2725FB13AA4 + 0x13(например) находиться начало int с его здоровьем. Здесь 0x2725FB13AA4 это адрес памяти, а 0x13 - оффсет. Теперь посмотрим что храниться по этому адресу памяти - например "8B 0D 4E 8C C2 AA 83 FF FF 74 07". Тогда по сигнатуре "8B 0D 4E 8C C2 AA 83 FF FF 74 07" мы могли бы найти этот адрес в памяти (потому что знаем, что в нем находится)
Вау, 1 понял прям шикарно, реально, очень понятно объяснил, спасибо, а со вторым всё же не понял. Типо ты пишешь "посмотрим по этому адресу памяти", но говорил, что сигнатура не является адресом памяти. Или ты имел ввиду, что в этом адресе памяти - 0x2725FB13AA4 хранится эта сигнатура - 8B 0D 4E 8C C2 AA 83 FF FF 74 07? Типо адрес памяти - это координаты в которых хранится допустим слово(сигнатура), мы ищем слово и когда находим его - мы и координаты его узнаём, верно? Но всё же типо понятно, что флаг тот же самый или здоровье находится по адрес + их оффсет, но прыжок ведь, как я понял, это же сигнатура, или всё же это тоже оффсет? Просто я много раз просматривал разные исходники (небольшие) и видел там только оффсеты, модули, процессы, но не сигнатуры
 
Последнее редактирование:
money++
Разработчик
Статус
Оффлайн
Регистрация
14 Июн 2018
Сообщения
638
Реакции[?]
339
Поинты[?]
22K
Вау, 1 понял прям шикарно, реально, очень понятно объяснил, спасибо, а со вторым всё же не понял. Типо ты пишешь "посмотрим по этому адресу памяти", но говорил, что сигнатура не является адресом памяти. Или ты имел ввиду, что в этом адресе памяти - 0x2725FB13AA4 хранится эта сигнатура - 8B 0D 4E 8C C2 AA 83 FF FF 74 07? Типо адрес памяти - это координаты в которых хранится допустим слово(сигнатура), мы ищем слово и когда находим его - мы и координаты его узнаём, верно? Но всё же типо понятно, что флаг тот же самый или здоровье находится по адрес + их оффсет, но прыжок ведь, как я понял, это же сигнатура, или всё же это тоже оффсет? Просто я много раз просматривал разные исходники (небольшие) и видел там только оффсеты, модули, процессы, но не сигнатуры
Да, адрес памяти это что-то вроде координат. Да, мы смотрим память, если в ней находим сигнатуру, то мы записываем коодинаты (они же адрес в памяти) и дальше работаем с ними. Прыжок это не сигнатура, а оффсет. Точнее... Блин, смотря что ты имеешь в виду под словом "прыжок". В ксго есть flag'и, ты про них уже говорил. В том числе есть флаг FL_ONGROUND (или как-то созвучно), который говорит на земле сейчас персонаж, или же нет. Как работают флаги? Один флаг занимает 1 бит (0 - false, 1 - true). Но, чтобы было удобнее и программа быстрее работала, несколько флагов обычно объединяют в несколько байт. В байте 8 бит -> значит может храниться 8 флагов. В int (занимает 4 байта) может храниться 32 флага. Более того, ты сам можешь определять байт ты возьмешь. Например пускай FL_ONGROUND храниться по адресу 0x32ABD232890E.
1597068202281.png (Чукча не художник)
Ты можешь просто сказать, что есть указатель на bool по адресу 0x32ABD232890E и это и будет значение FL_ONGROUND, а можешь сказать, что указатель по адресу 0x32ABD232890B это начало BYTE со значениями флагов игрока, и тогда чтобы получить значение FL_ONGROUND тебе нужно узнать бит по номеру 4 (индексация с 0 идет, но это как бы все знают). Например так можно это сделать - bool onGround = (RPM(0x32ABD232890B) & (1 << 4));
Базовый метод работы бхопа (я так понимаю для этого ты именно прыжок выделяешь) - каждый момент времени проверять на земле ли игрок, и если на земле и нажата клавиша бхопа - совершать прыжок.
 
Начинающий
Статус
Оффлайн
Регистрация
19 Июл 2018
Сообщения
50
Реакции[?]
6
Поинты[?]
0
Да, адрес памяти это что-то вроде координат. Да, мы смотрим память, если в ней находим сигнатуру, то мы записываем коодинаты (они же адрес в памяти) и дальше работаем с ними. Прыжок это не сигнатура, а оффсет. Точнее... Блин, смотря что ты имеешь в виду под словом "прыжок". В ксго есть flag'и, ты про них уже говорил. В том числе есть флаг FL_ONGROUND (или как-то созвучно), который говорит на земле сейчас персонаж, или же нет. Как работают флаги? Один флаг занимает 1 бит (0 - false, 1 - true). Но, чтобы было удобнее и программа быстрее работала, несколько флагов обычно объединяют в несколько байт. В байте 8 бит -> значит может храниться 8 флагов. В int (занимает 4 байта) может храниться 32 флага. Более того, ты сам можешь определять байт ты возьмешь. Например пускай FL_ONGROUND храниться по адресу 0x32ABD232890E.
Посмотреть вложение 92700 (Чукча не художник)
Ты можешь просто сказать, что есть указатель на bool по адресу 0x32ABD232890E и это и будет значение FL_ONGROUND, а можешь сказать, что указатель по адресу 0x32ABD232890B это начало BYTE со значениями флагов игрока, и тогда чтобы получить значение FL_ONGROUND тебе нужно узнать бит по номеру 4 (индексация с 0 идет, но это как бы все знают). Например так можно это сделать - bool onGround = (RPM(0x32ABD232890B) & (1 << 4));
Базовый метод работы бхопа (я так понимаю для этого ты именно прыжок выделяешь) - каждый момент времени проверять на земле ли игрок, и если на земле и нажата клавиша бхопа - совершать прыжок.
Ух, очень много всего, но написано достаточно конкретно, поэтому посижу и подумаю. Да, я решил бхоп наисать, вчера я начал всё это изучать и вчера же дописал, сегодня узнал, что сейчас слиента панорамы нет, поставил обычный и прога стала быстро заканчиваться, тогда я понял, что нужно сделать бесконечный цикл проверки игрока на земле и самого, собственно, прыжка, но почему-то всё равно не робит, я создал условие else if, чтобы понять, работает ли условие самого прыжка и никакой отзывчивости, похоже, что функция прыжка по какой-то причине не работает, хотя флаги локалплеера находит (я это проверял). И ещё вопрос, нужно ли нахождение флагов локал плеера пихать в бесконечный цикл? Типо, я сделал так, что я сначала нахожу флаги, потом создаю бесконечный цикл в котором условие (если нажат пробел, найдены флаги и состояние игрока (1 << 0)) ну и в цикле сам прыжок + добавил вывод на консоль "ок" (проверка), ну и как видно, в консоль ничего не выводит, значит вовсе условие прыжка не удовлетворяется, я даже уже нахождение флага засунул в бесконечный цикл и всё равно толка нет
 
money++
Разработчик
Статус
Оффлайн
Регистрация
14 Июн 2018
Сообщения
638
Реакции[?]
339
Поинты[?]
22K
Ух, очень много всего, но написано достаточно конкретно, поэтому посижу и подумаю. Да, я решил бхоп наисать, вчера я начал всё это изучать и вчера же дописал, сегодня узнал, что сейчас слиента панорамы нет, поставил обычный и прога стала быстро заканчиваться, тогда я понял, что нужно сделать бесконечный цикл проверки игрока на земле и самого, собственно, прыжка, но почему-то всё равно не робит, я создал условие else if, чтобы понять, работает ли условие самого прыжка и никакой отзывчивости, похоже, что функция прыжка по какой-то причине не работает, хотя флаги локалплеера находит (я это проверял). И ещё вопрос, нужно ли нахождение флагов локал плеера пихать в бесконечный цикл? Типо, я сделал так, что я сначала нахожу флаги, потом создаю бесконечный цикл в котором условие (если нажат пробел, найдены флаги и состояние игрока (1 << 0)) ну и в цикле сам прыжок + добавил вывод на консоль "ок" (проверка), ну и как видно, в консоль ничего не выводит, значит вовсе условие прыжка не удовлетворяется, я даже уже нахождение флага засунул в бесконечный цикл и всё равно толка нет
Без кода не разобраться скорее всего...
Сама программа у тебя в бесконечном цикле?
Дожно быть примерно так:
C++:
//К этому моменту ты уже должен проверить, что кс запущена и т.д.
while (!g_Unload) //в твоем случае по-другому как-то проверять вышел ты из ксго или нет,
                    //можно впринипе просто while(true)
{
    bool onGround = KakToPoluchilZnachenieFlaga();
    if(ProbelNazhat() && onGround)
    {
         EmulirovatPrizhok();
    }
    PriostanovitProcessChitaNaNeskolkoMsDlyaOptimizacii();
}
 
Начинающий
Статус
Оффлайн
Регистрация
19 Июл 2018
Сообщения
50
Реакции[?]
6
Поинты[?]
0
Без кода не разобраться скорее всего...
Сама программа у тебя в бесконечном цикле?
Дожно быть примерно так:
C++:
//К этому моменту ты уже должен проверить, что кс запущена и т.д.
while (!g_Unload) //в твоем случае по-другому как-то проверять вышел ты из ксго или нет,
                    //можно впринипе просто while(true)
{
    bool onGround = KakToPoluchilZnachenieFlaga();
    if(ProbelNazhat() && onGround)
    {
         EmulirovatPrizhok();
    }
    PriostanovitProcessChitaNaNeskolkoMsDlyaOptimizacii();
}
У меня так же, я изначально смотрел исходник один, но потом некоторое поправил и раскидал всё по функциям (не люблю, когда жирная масса кода вся лежит в мейне), а в мейне сделал только вызоф функ. У тебя есть тг? Мб я там тебе скину сурс и ты глянешь, ибо тут не хочу светить. Кстати говоря, я считаю, что проблема с флагами или с тем, что я разделил на 2 функции нахождение процесса и бхоп (мб они в мейне отдельно себя ведут, хотя воид должен полноценно возвращать в мейн код внутри него или инициализированные переменные в нём)
 
money++
Разработчик
Статус
Оффлайн
Регистрация
14 Июн 2018
Сообщения
638
Реакции[?]
339
Поинты[?]
22K
У меня так же, я изначально смотрел исходник один, но потом некоторое поправил и раскидал всё по функциям (не люблю, когда жирная масса кода вся лежит в мейне), а в мейне сделал только вызоф функ. У тебя есть тг? Мб я там тебе скину сурс и ты глянешь, ибо тут не хочу светить. Кстати говоря, я считаю, что проблема с флагами или с тем, что я разделил на 2 функции нахождение процесса и бхоп (мб они в мейне отдельно себя ведут, хотя воид должен полноценно возвращать в мейн код внутри него или инициализированные переменные в нём)
Инициализированные переменные не должен! Если у тебя что-то объявлено внутри фигурных скобок, оно там и останется.
C++:
{
    int a;
    a = 1;
}
cout << a; //Ошибка при компиляции
------------------------------
int a = 0;
{
    int a = 1;
}
std::cout << a; //Выведет 0
------------------------------
void f()
{
    int a = 1;
}

int main()
{
    int a = 0;
    f();
    std::cout << a; //Выведет 0
}
-------------------------------
int a;
void f()
{
    a = 1;
}

int main()
{
    a = 0;
    f();
    std::cout << a; //Выведет 1
}
------------------------------
int a;
void f()
{
    int a = 1;
}

int main()
{
    a = 0;
    f();
    std::cout << a; //Выведет 0
}
-----------------------------
int a;
void f()
{
    a = 1;
}

int main()
{
    int a = 0;
    f();
    std::cout << a; //Выведет 0
}
 
Сверху Снизу