Antonshka Опубликовано 14 ноября, 2020 Поделиться Опубликовано 14 ноября, 2020 Привет, В игре Дирт 5 появился редактор карты, теперь можно самому выбирать и расставлять объекты, но разработчики установили ограничение на 2500 объектов максимум. Как можно обойти это ограничение? Отталкиваясь от экранного значения заполненности памяти в процентах я вышел на функцию которая циклически проверяет количество созданных объектов. Именно флаг 0-1 в блоке памяти каждого объекта. Как я понял, в игре нет простого значения максимального числа объектов, а есть просто выделенная память, поделенная на блоки для каждого объекта. Функция цикл проверяя количество задействованных блоков решает заканчивать создание объектов или нет. Вот. Ссылка на комментарий Поделиться на другие сайты Поделиться
KRYPTOPUNK Опубликовано 14 ноября, 2020 Поделиться Опубликовано 14 ноября, 2020 Очень туманно ты всё объяснил, конечно. Листинг из дизассемблера и/или псевдокод немного помогли бы понять суть проблемы. Из того, что ты описал, имеется возможность занопить операторы сравнения или операторы присваивания при прохождении проверки. Или нет? Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 14 ноября, 2020 Автор Поделиться Опубликовано 14 ноября, 2020 Я даже не знаю какую часть кода выкладывать. Там тьма всего. Второй день занимаюсь этим делом, не получается. Сложилось твердая уверенность что это не в моих силах. Оставлю эту затею в общем. Жаль конечно, такое можно было бы настроить. А еще такой вопрос, - кто-нибудь пробовал в играх сдвигать объекты? У меня получается без проблем переместить текстуру, но вот сам объект (в который упираешься), не получается. Либо получается, но тогда на новом месте он становится проходимым (и на стандартном тоже). Ссылка на комментарий Поделиться на другие сайты Поделиться
AlisaCodeDragon Опубликовано 14 ноября, 2020 Поделиться Опубликовано 14 ноября, 2020 6 часов назад, Antonshka сказал: А еще такой вопрос, - кто-нибудь пробовал в играх сдвигать объекты? У меня получается без проблем переместить текстуру, но вот сам объект (в который упираешься), не получается. Либо получается, но тогда на новом месте он становится проходимым (и на стандартном тоже). Пробовала ев разных играх обычно идет смещение статических мешей по осям x y z с заданными координатами ( float ) и эм термина текстура как такового не существует ) ты смещаешь тока статик на который уже закреплена текстура вот так будет писать правильнее на мой взгляд в некоторых онлайн играх где идет проверка на что то ну пример в той же aion или lineage2 это гео дата нужно понимать как устроены гео данные и по высотам пример можно делать обходы обычно статический меш ( в нашем случае лесенка ) даже дает возможность куда то залазить или передвигаться по нему если он правильно был смещен ) Ссылка на комментарий Поделиться на другие сайты Поделиться
ChestGlaring Опубликовано 14 ноября, 2020 Поделиться Опубликовано 14 ноября, 2020 12 часов назад, Antonshka сказал: а есть просто выделенная память, поделенная на блоки для каждого объекта Восстанови структуру блока (если есть), а после выдели памяти больше, после чего сделай подмену указателей на массив объектов. В теории это должно работать, ведь какая разница игре из какого и в какой массивы добавлять объекты, но могут быть проверки, работающие с оригинальным указателем на массив, которые будут разбросаны по разным методам. Что-то похожее я делал для Left 4 Dead 2. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 15 ноября, 2020 Автор Поделиться Опубликовано 15 ноября, 2020 (изменено) 9 часов назад, AlisaCodeDragon сказал: Пробовала ев разных играх обычно идет смещение статических мешей по осям x y z с заданными координатами ( float ) и эм термина текстура как такового не существует ) ты смещаешь тока статик на который уже закреплена текстура вот так будет писать правильнее на мой взгляд в некоторых онлайн играх где идет проверка на что то ну пример в той же aion или lineage2 это гео дата нужно понимать как устроены гео данные и по высотам пример можно делать обходы обычно статический меш ( в нашем случае лесенка ) даже дает возможность куда то залазить или передвигаться по нему если он правильно был смещен ) Игра поддерживает онлайн, но я пытаюсь сдвинуть объект в сингле. Что значит "если он правильно был смещен"? Я перемещал объект изменяя его XYZ координаты. Сделал скан памяти на например значение координаты X, затем во всех найденных адресах поменял значение. Текстура (видимая часть объекта) смещалась, но невидимая нет. 9 часов назад, ChestGlaring сказал: Восстанови структуру блока (если есть), а после выдели памяти больше, после чего сделай подмену указателей на массив объектов. В теории это должно работать, ведь какая разница игре из какого и в какой массивы добавлять объекты, но могут быть проверки, работающие с оригинальным указателем на массив, которые будут разбросаны по разным методам. Что-то похожее я делал для Left 4 Dead 2. Спасибо за идею. Что-то такое я попробовал сделать, с выделением памяти, но мне не хватило усердия. Также не мой уровень знаний. Изменено 15 ноября, 2020 пользователем Antonshka Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 15 ноября, 2020 Автор Поделиться Опубликовано 15 ноября, 2020 Игра сохраняет расположение и количество объектов в файле XXX.play в папке стим. Если открыть этот файл в редакторе Neo Hex Editor и поменять всего лишь одну цифру (например координату Y какого-нибудь объекта с 2.35 на 7.35), то после этого игра уже не принимает этот файл. Количество байт в файле не изменилось, изменился лишь один байт, и то, текстового значения. Неужто игра хранит где-либо продублированный файл и при запуске проверяет его схожесть с этим. Или Hex Editor затрагивает какую-нибудь другую информацию, которая не видна в самом Hex Editor, например время создания файла или еще чего. Ссылка на комментарий Поделиться на другие сайты Поделиться
ChestGlaring Опубликовано 15 ноября, 2020 Поделиться Опубликовано 15 ноября, 2020 (изменено) 34 минуты назад, Antonshka сказал: Неужто игра хранит где-либо продублированный файл и при запуске проверяет его схожесть с этим Долго проверять целый файл, скорее просто в заголовке файла XXX.play указана контрольная сумма в каком-нибудь CRC-32, одна записывается в память при открытии редактора карты, другая хранится в файле, при попытке считывания или записи в файл, сначала проверяется контрольная сумма, если они не сходятся - файл поврежден. Изменено 15 ноября, 2020 пользователем ChestGlaring Ссылка на комментарий Поделиться на другие сайты Поделиться
KRYPTOPUNK Опубликовано 15 ноября, 2020 Поделиться Опубликовано 15 ноября, 2020 (изменено) 33 минуты назад, Antonshka сказал: Неужто игра хранит где-либо продублированный файл и при запуске проверяет его схожесть с этим. Или Hex Editor затрагивает какую-нибудь другую информацию, которая не видна в самом Hex Editor, например время создания файла или еще чего. Хеш-сумму файлов сохранения может где-то хранить. Поэтому лучше все манипуляции производить в оперативной памяти Изменено 15 ноября, 2020 пользователем KRYPTOPUNK Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 15 ноября, 2020 Автор Поделиться Опубликовано 15 ноября, 2020 Да, видимо всё так, всё дело в хеш-сумме. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения