Gerbant, если у зашедшего в лобби с большой картой игрока висит застывший счетчик прогресса скачивания и не дает хосту стартануть игру, то может помочь этот мод.
Скачай Ladik MPQ Editor. Там же в конце есть ссылка на скачивание архива со списками файлов. Когда будешь открывать War3Patch.mpq укажи дополнительный список файлов "WarCraft III.txt" и тогда имена всех файлов определятся.
Но, чем редактировать стандартные архивы, куда удобнее использовать mix-архивы.
nazarpunk, то что её добавили в рефе не указывает на её наличие в 1.26a версии.
Также, похоже, что там удалили настройку слушателя и добавили еще каких-то полей.
SLina, если не можешь адаптировать код под компилятор microsoft'а, то попробуй воспользоваться GCC. Если сидишь на windows'е, то установи MSYS или WSL. Там можно будет установить компилятор и запускать bash скрипты.
Вот скрипт, который может скомпилировать пакет wc3 (хотя лучше, конечно, воспользоваться какой-нибудь системой сборки):
Здесь я использую "__attribute__((packed))", чтобы выключить выравнивание данных.
Вероятно, это какое-то нестандартное расширение компилятора, которое понимает мой GCC, но не принимает твой MSVC. В таком случае, замени эту опцию на аналог из своей системы.
Я сделал mix-архив, который меняет модельку футмана на артаса, и загрузил в процесс игры (после загрузки карты) при помощи инжектора, после чего нанял футмана и у того, ожидаемо, оказалась моделька артаса с мечом. Так что, не вижу проблем с этим.
Главное, загрузить архив с моделью до первого появления модели на карте, а иначе игра закеширует её и новые файлы останутся неиспользоваными.
Впрочем, если хакать игру, то должно быть возможно сбросить файловый кеш и тогда можно будет менять модельку когда угодно. Или, как вариант, можно поменять модельку для всех юнитов определенного типа на другую, если в мемхаке есть такая функция.
На чем основано решение выбрать мертвый язык для реализации?
Я начинал с JASS'а, после чего перешел на Delphi. Там мне что-то не понравилось и я пересел на Lazarus/FreePascal. Потом я знакомился с Java, Python, Lua, но ни один из них не годился для хаков.
Еще есть Rust, но писать хаки на этом языке, сосредоточеном на безопасности, будет тем еще развлечением.
Лишь недавно я начал изучать C++, благодаря которому появился выбор и на котором теперь я буду предпочитать делать все новые моды.
Вот только этот проект уже написан на FreePascal и переписывать его на другой язык пока лень, хотя я уже успел настрадаться от него. Мог бы даже написать небольшую статью о том, почему не стоит на нём работать и о всех тех минах, что там расставлены.
ScorpioT1000, игра не использует STL, вместо этого у неё свои велосипеды. Массив в JASS использует шаблонный класс TSGrowableArray, который при росте выделяет про запас до 63-х элементов, как я уже писал ранее.
RatzCard, я сделал небольшой мод (исходники прилагаются), который создает в папке с игрой файл "cd_key_dumper.log" с информацией о лицензии. Первый ключ для ROC'а, а второй для дополнения TFT. Перемести ".mix" файл в папку с игрой версии 1.26a и запусти её, после чего проверяй результат.
Я незнаю что за алгоритм там внутри используется, но я видел внутри константы SHA-1. Вот только это ведь алгоритм хэширования, а не шифрования?
Наверное, чем писать программу для расшифровки, будет проще сделать мод, который подождет, пока игра сама не прочитает ключи, после чего запишет подсмотреные значения на диск.
Помнится, мне тоже понадобилось пройтись по символам в строке для того, чтобы проверить её на присутствие запрещенных символов или превышение длины, при этом допуская использование русских букв. В итоге я нашел эту библиотеку.
При размере карты начиная примерно с 41 МиБ игру начинает глючить. На хостботах такого не наблюдается, так как там, видимо, нормально написан код для расчета процентов прогресса скачивания карты.
Цвета имен игроков получаются путем извлечения первого пикселя текстуры командного цвета.
Чтобы получить путь к текстуре, нужно приклеить к пути из "TeamColor" номер игрока с нулем в начале и расширение ".tga" или ".blp", если первый вариант не нашелся.
Насколько я помню, в моей карте примере для сценария на любом языке для взрыва использовались те же эффекты, что применили близарды для своего взрыва нейтралов (подсмотрел в game.dll). Единственное отличие — невозможность изменения масштаба спецффекта из-за отсутствия соответствующих нативок. Можешь оттуда скопировать.
Менеджер памяти варкрафта размещает перед каждой выделеной единицей памяти служебные данные. Непосредственно перед строкой находятся 16 байт, содержащие старшие два байта адреса текущего региона памяти, за которыми следует константа 0x6F6D ("mo"), которая, вероятно, является маркером, нужным для проверок блока на правильность во время освобождения.
Нативка SubString позволяет читать память перед строкой с минимальным рабочим индексом равным -32768. Если дотянуться до незанятой памяти, то должно быть возможно и крашнуть игру.
Проверка, что символ перед строкой не равен букве "o" всегда будет возвращать false, если только кто-нибудь не сделает мод, который заменит стандартный менеджер памяти на альтернативный, что может привести к изменению содержимого служебной памяти перед строкой.
В игре версии 1.26a, по адресу game.dll+0x4CC4C0 находится функция, которая, как мне кажется, вычисляет ширину текста.
В данном случае краш произошел из-за того, что указатель на объект со шрифтом оказался равен nullptr'у.
Ред. IceFog
» WarCraft 3 / Помогите запустить карту
Ред. IceFog
» WarCraft 3 / Секретные поля камеры
» WarCraft 3 / Открытая виртуальная машина
» WarCraft 3 / Как получить нормальный доступ к содержимому War3Patch.mpq?
» WarCraft 3 / Секретные поля камеры
» WarCraft 3 / Секретные поля камеры
Также, похоже, что там удалили настройку слушателя и добавили еще каких-то полей.
» WarCraft 3 / Просмотр состояния виртуальной машины JASS
» WarCraft 3 / Просмотр состояния виртуальной машины JASS
Прокрутить к ресурсу
Ред. IceFog
» WarCraft 3 / Супер хоткей
Ред. IceFog
» WarCraft 3 / Супер хоткей
Вероятно, это какое-то нестандартное расширение компилятора, которое понимает мой GCC, но не принимает твой MSVC. В таком случае, замени эту опцию на аналог из своей системы.
Ред. IceFog
» WarCraft 3 / [MemHack] Загрузка .mix файла с модельками прямо в игре
» WarCraft 3 / Открытая виртуальная машина
Еще есть Rust, но писать хаки на этом языке, сосредоточеном на безопасности, будет тем еще развлечением.
Лишь недавно я начал изучать C++, благодаря которому появился выбор и на котором теперь я буду предпочитать делать все новые моды.
Ред. IceFog
» WarCraft 3 / Открытая виртуальная машина
» WarCraft 3 / Открытая виртуальная машина
Прокрутить к ресурсу
Ред. IceFog
» WarCraft 3 / Можно ли узнать свой ключ RoC/TFT
Ред. IceFog
» WarCraft 3 / Можно ли узнать свой ключ RoC/TFT
Ред. IceFog
» WarCraft 3 / Можно ли узнать свой ключ RoC/TFT
Ред. IceFog
» WarCraft 3 / как заранее автоматически узнать кодировку каждого символа в строке?
» WarCraft 3 / Карта не может запуститься в локальной игре
Ред. IceFog
» WarCraft 3 / ЦВЕТ - как из игры получить точные значения playercolor в RGB кодировке ?
Чтобы получить путь к текстуре, нужно приклеить к пути из "TeamColor" номер игрока с нулем в начале и расширение ".tga" или ".blp", если первый вариант не нашелся.
Ред. IceFog
» WarCraft 3 / Неограниченый размер карт без багов
Прокрутить к ресурсу
Ред. IceFog
» WarCraft 3 / Наработка: Онлайн фича с животными
» WarCraft 3 / зачем в Substring start -1 (minus) ?
» WarCraft 3 / Автопереводчик карт
Ред. IceFog
» WarCraft 3 / Ошибка
В данном случае краш произошел из-за того, что указатель на объект со шрифтом оказался равен nullptr'у.