Bo0m21 Опубликовано 3 октября, 2020 Поделиться Опубликовано 3 октября, 2020 (изменено) Всем привет! Ребят занимаюсь написанием экстелнал чита для игры и наблюдаю проблему, она заключается в том что некоторые игроки или монстры просто не читаются. Хотя большая асть читается и работает правильно. Кто с таким сталкивался? И как быть в подобной ситуации? Спойлер public static class Offsets { // Client dll public static readonly int PlayerLocal = 0x007094D8; public static readonly int PlayersList = 0x0071A044; public static readonly int PlayersListCount = 0x00824D14; public static readonly int PlayerNext = 0x10; public static readonly int PlayerHealth = 0xEC; public static readonly int PlayerCommand = 0xE4; public static readonly int PlayerСoordinates = 0x94; public static readonly int PlayerCoordinatesView = 0xF4; // Engine dll public static readonly int ViewMatrixBase = 0x00605EEC; public static readonly int ViewMatrix = 0x2E4; } public static class Players { public static PlayerModel LocalPlayer; public static List<PlayerModel> AllPlayers; private static byte[] buffer; /// <summary> /// Update local player /// </summary> public static void UpdatePlayerLocal() { PlayerModel newLocalPlayer = new PlayerModel(); MemoryHelpers.ReadMemory(Game.ClientdllAdress + Offsets.PlayerLocal, 4, out buffer); newLocalPlayer.Adress = BitConverter.ToInt32(buffer, 0); MemoryHelpers.ReadMemory(newLocalPlayer.Adress + Offsets.PlayerHealth, 4, out buffer); newLocalPlayer.Health = BitConverter.ToInt32(buffer, 0); MemoryHelpers.ReadMemory(newLocalPlayer.Adress + Offsets.PlayerCommand, 4, out buffer); newLocalPlayer.Command = BitConverter.ToInt32(buffer, 0); newLocalPlayer.Coordinates = new float[3]; for (int i = 0; i < 3; i++) { MemoryHelpers.ReadMemory(newLocalPlayer.Adress + Offsets.PlayerСoordinates + i * 4, 4, out buffer); newLocalPlayer.Coordinates[i] = BitConverter.ToSingle(buffer, 0); } newLocalPlayer.CoordinatesView = new float[3]; for (int i = 0; i < 3; i++) { MemoryHelpers.ReadMemory(newLocalPlayer.Adress + Offsets.PlayerCoordinatesView + i * 4, 4, out buffer); newLocalPlayer.CoordinatesView[i] = BitConverter.ToSingle(buffer, 0); } newLocalPlayer.ViewMatrix = new float[4, 4]; MemoryHelpers.ReadMemory(Game.EnginedllAdress + Offsets.ViewMatrixBase, 4, out buffer); int viewMatrixAdress = BitConverter.ToInt32(buffer, 0); for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++) { MemoryHelpers.ReadMemory(viewMatrixAdress + Offsets.ViewMatrix + (i * 16) + (j * 4), 4, out buffer); newLocalPlayer.ViewMatrix[i, j] = BitConverter.ToSingle(buffer, 0); } } LocalPlayer = newLocalPlayer; } /// <summary> /// Update all players /// </summary> public static void UpdateAllPlayer() { int playersCount = 4096; // TODO: Rewrite get count players List<PlayerModel> newPlayers = new List<PlayerModel>(); for (int i = 0; i < playersCount; i++) { PlayerModel player = new PlayerModel(); MemoryHelpers.ReadMemory(Game.ClientdllAdress + Offsets.PlayersList + i * Offsets.PlayerNext, 4, out buffer); player.Adress = BitConverter.ToInt32(buffer, 0); MemoryHelpers.ReadMemory(player.Adress + Offsets.PlayerHealth, 4, out buffer); player.Health = BitConverter.ToInt32(buffer, 0); MemoryHelpers.ReadMemory(player.Adress + Offsets.PlayerCommand, 4, out buffer); player.Command = BitConverter.ToInt32(buffer, 0); // Check Health and Command player if (player.Health == 0 || player.Command == 0) { continue; } player.Coordinates = new float[3]; for (int j = 0; j < 3; j++) { MemoryHelpers.ReadMemory(player.Adress + Offsets.PlayerСoordinates + j * 4, 4, out buffer); player.Coordinates[j] = BitConverter.ToSingle(buffer, 0); } player.CoordinatesView = new float[3]; for (int j = 0; j < 3; j++) { MemoryHelpers.ReadMemory(player.Adress + Offsets.PlayerCoordinatesView + j * 4, 4, out buffer); player.CoordinatesView[j] = BitConverter.ToSingle(buffer, 0); } newPlayers.Add(player); } AllPlayers = newPlayers; } } Изменено 3 октября, 2020 пользователем Xipho В следующий раз будет пред за незнание правил форума. Ссылка на комментарий Поделиться на другие сайты Поделиться
KRYPTOPUNK Опубликовано 3 октября, 2020 Поделиться Опубликовано 3 октября, 2020 (изменено) Не уверен, но у тебя цикл ограничен тремя проходами, а игроки могут быть по другому смещению, насколько я знаю, в сурсе так и есть, поэтому имеет смысл сделать больше проходов и просто сделать валидацию. UPD: А, я немного неверно прочитал исходный код, вроде бы по коду всё правильно, попробуй другое смещение до PlayerList'a или увеличь/уменьши playersCount, не уверен, что поможет, но попробуй Изменено 3 октября, 2020 пользователем KRYPTOPUNK нормально перечитал исходный код Ссылка на комментарий Поделиться на другие сайты Поделиться
ChestGlaring Опубликовано 3 октября, 2020 Поделиться Опубликовано 3 октября, 2020 Скорее всего дело в списке игроков, соурс движок славиться своим "отзеркаливанием" структур, которые разделены на кешированые и постоянные, в первых хранятся данные об игроках с которыми было какое-то взаимодействие ранее, в постоянных все остальные. Ссылка на комментарий Поделиться на другие сайты Поделиться
Bo0m21 Опубликовано 3 октября, 2020 Автор Поделиться Опубликовано 3 октября, 2020 Я уже испробовал много способов по смещению и всему остальному и это работает не правильно, и пока не могу понять в чем дело. Тут вопрос такой, как найти всех отзеркаленных игроков или наоборот постоянных? Возможно на форуме есть кто нибудь кто делал эксиклнал чит и может что то подсказать. Листок я хочу сделать все через экстернат и дописать аим и разброс. Так как лично я не видел таких витков на эту игру и поэтому есть интерес сделать подобне. Ссылка на комментарий Поделиться на другие сайты Поделиться
ChestGlaring Опубликовано 3 октября, 2020 Поделиться Опубликовано 3 октября, 2020 (изменено) Если тебе нужны структуры для того, чтобы подсвечивать игроков, то вот некоторые наработки. сигнатура на функцию-активатор подсветки: E8 ?? ?? ?? ?? 8B 45 F8 8B 55 F4 40 89 45 F8 3B 42 18 0F 8C ?? ?? ?? ?? 5F 5E 8B E5 5D 8B E3 5B C3 и сигнатура на функцию, которая перебирает списки npc для дальнейшей подсветки: 53 8B DC 83 EC 08 83 E4 F0 83 C4 04 55 8B 6B 04 89 6C 24 04 8B EC 83 EC 28 56 8B F1 83 7E 18 00 57 89 75 F4 0F 84 ?? ?? ?? ?? 6A FF E8 ?? ?? ?? ?? 83 C4 04 89 45 FC 85 C0 0F 84 ?? ?? ?? ?? 83 7E 18 00 C7 45 ?? ?? ?? ?? ?? 0F 8E ?? ?? ?? ?? EB 02 Спойлер и немного восстановленная функция на которую указывает сигнатура, надеюсь это как-то поможет Спойлер И смещения на свойства подсветки, хотя похоже они у тебя и так есть Спойлер Изменено 3 октября, 2020 пользователем ChestGlaring 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Bo0m21 Опубликовано 3 октября, 2020 Автор Поделиться Опубликовано 3 октября, 2020 Слушай а можно как нибудь разобраться в том почему проблемы у меня? Хотелось бы сделать экстернал и не использовать готовую подсветку а рисовода самому, только вот проблема со считыванием игроков. Можно твои контакты? Скайп телегу? Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения