19

» WarCraft 3 / Открытая виртуальная машина

На чем основано решение выбрать мертвый язык для реализации?
Я начинал с JASS'а, после чего перешел на Delphi. Там мне что-то не понравилось и я пересел на Lazarus/FreePascal. Потом я знакомился с Java, Python, Lua, но ни один из них не годился для хаков.
Еще есть Rust, но писать хаки на этом языке, сосредоточеном на безопасности, будет тем еще развлечением.
Лишь недавно я начал изучать C++, благодаря которому появился выбор и на котором теперь я буду предпочитать делать все новые моды.
Вот только этот проект уже написан на FreePascal и переписывать его на другой язык пока лень, хотя я уже успел настрадаться от него. Мог бы даже написать небольшую статью о том, почему не стоит на нём работать и о всех тех минах, что там расставлены.
19

» WarCraft 3 / Открытая виртуальная машина

ScorpioT1000, игра не использует STL, вместо этого у неё свои велосипеды. Массив в JASS использует шаблонный класс TSGrowableArray, который при росте выделяет про запас до 63-х элементов, как я уже писал ранее.
Далеко не факт, что понадобится весь размер массива
Делалось в первую очередь для локалок. А для глобалок, наверное, можно вернуть как было.
19

» WarCraft 3 / Открытая виртуальная машина

Вышла новая версия! Прокрутить к ресурсу
  • Исправил у себя утечки памяти, при удалении переменных с типом массив.
  • Теперь, во избежание десинхронизации, по умолчанию используется эмуляция вещественных чисел.
  • Добавил поддержку нативки TriggerRegisterVariableEvent.
19

» WarCraft 3 / Можно ли узнать свой ключ RoC/TFT

RatzCard, я сделал небольшой мод (исходники прилагаются), который создает в папке с игрой файл "cd_key_dumper.log" с информацией о лицензии. Первый ключ для ROC'а, а второй для дополнения TFT. Перемести ".mix" файл в папку с игрой версии 1.26a и запусти её, после чего проверяй результат.
Загруженные файлы
19

» WarCraft 3 / Можно ли узнать свой ключ RoC/TFT

RatzCard, в игре версии 1.26a по адресу Game.dll+0x555630 находится функция для расшифровки:
size_t __fastcall DecodeCredentials(void *data, size_t size, const char *password)
Я незнаю что за алгоритм там внутри используется, но я видел внутри константы SHA-1. Вот только это ведь алгоритм хэширования, а не шифрования?
Наверное, чем писать программу для расшифровки, будет проще сделать мод, который подождет, пока игра сама не прочитает ключи, после чего запишет подсмотреные значения на диск.
19

» WarCraft 3 / Можно ли узнать свой ключ RoC/TFT

Информация о лицензии содержится в следующих файлах:
Содержание Путь в архиве Размер данных (байт)
Ключ ROC font/font.gid 32
Ключ TFT font/font.exp 32
Имя владельца font/font.clh 64
Не используется? font/font.ccd 8
Но она зашифрована, так что врядли тебе поможет это знание.
Формат файла:
  • Произвольное количество зашифрованых блоков размером 64 байта.
  • 4 байта с подписью?
  • 1 байт обязательно должный быть нулем.
  • 2 байта равные нулю не используются.
Все файлы содержат лишь по одному блоку каждый, так что и занимают по 72 байта.
19

» WarCraft 3 / как заранее автоматически узнать кодировку каждого символа в строке?

Помнится, мне тоже понадобилось пройтись по символам в строке для того, чтобы проверить её на присутствие запрещенных символов или превышение длины, при этом допуская использование русских букв. В итоге я нашел эту библиотеку.
19

» WarCraft 3 / Карта не может запуститься в локальной игре

При размере карты начиная примерно с 41 МиБ игру начинает глючить. На хостботах такого не наблюдается, так как там, видимо, нормально написан код для расчета процентов прогресса скачивания карты.
Есть мод решающий эту проблему.
19

» WarCraft 3 / ЦВЕТ - как из игры получить точные значения playercolor в RGB кодировке ?

У есть игры текстуры цветов, находящиеся по путям, указаным в ключах "TeamColor" и "TeamGlow" файла "war3skins.txt".
[Default]
TeamColors=16
TeamColor=ReplaceableTextures\TeamColor\TeamColor
TeamGlow=ReplaceableTextures\TeamGlow\TeamGlow
Цвета имен игроков получаются путем извлечения первого пикселя текстуры командного цвета.
Чтобы получить путь к текстуре, нужно приклеить к пути из "TeamColor" номер игрока с нулем в начале и расширение ".tga" или ".blp", если первый вариант не нашелся.
Пример:
Игрок Путь к текстуре
Красный ReplaceableTextures\TeamColor\TeamColor00.blp
Синий ReplaceableTextures\TeamColor\TeamColor01.blp
Цвета игроков от нулевого до шестнадцатого
FFFF0303
FF0042FF
FF1CE6B9
FF540081
FFFFFC01
FFFE8A0E
FF20C000
FFE55BB0
FF959697
FF7EBFF1
FF106246
FF4E2A04
FF282828
FF282828
FF282828
FF282828
19

» WarCraft 3 / Неограниченый размер карт без багов

Вышла новая версия! Прокрутить к ресурсу
  • Исправил ошибку с зависающим счетчиком процента скачивания карты в лобби, возникающую из-за арифметического переполнения.
19

» WarCraft 3 / Наработка: Онлайн фича с животными

Насколько я помню, в моей карте примере для сценария на любом языке для взрыва использовались те же эффекты, что применили близарды для своего взрыва нейтралов (подсмотрел в game.dll). Единственное отличие — невозможность изменения масштаба спецффекта из-за отсутствия соответствующих нативок. Можешь оттуда скопировать.
19

» WarCraft 3 / зачем в Substring start -1 (minus) ?

Менеджер памяти варкрафта размещает перед каждой выделеной единицей памяти служебные данные. Непосредственно перед строкой находятся 16 байт, содержащие старшие два байта адреса текущего региона памяти, за которыми следует константа 0x6F6D ("mo"), которая, вероятно, является маркером, нужным для проверок блока на правильность во время освобождения.
Нативка SubString позволяет читать память перед строкой с минимальным рабочим индексом равным -32768. Если дотянуться до незанятой памяти, то должно быть возможно и крашнуть игру.
Проверка, что символ перед строкой не равен букве "o" всегда будет возвращать false, если только кто-нибудь не сделает мод, который заменит стандартный менеджер памяти на альтернативный, что может привести к изменению содержимого служебной памяти перед строкой.
Загруженные файлы
19

» WarCraft 3 / Ошибка

В игре версии 1.26a, по адресу game.dll+0x4CC4C0 находится функция, которая, как мне кажется, вычисляет ширину текста.
В данном случае краш произошел из-за того, что указатель на объект со шрифтом оказался равен nullptr'у.
19

» WarCraft 3 / Супер хоткей

KaneThaumaturge, они там использовали обфускатор на своем коде, а я прежде не занимался расшифровкой программ, разработчики которых используют защиту от анализа кода.
Да и если близарды не хотят, чтобы пользователи делали моды для их новой игры, то пускай сами всё делают.
19

» WarCraft 3 / черный экран

Подобное может происходить при запуске игры с параметром "-loadfile", в котором указан неверный путь к карте.
19

» WarCraft 3 / Супер хоткей

Вышла новая версия! Прокрутить к ресурсу
  • Удалил недоделанную систему хоткеев с активацией по двойному нажатию.
  • Исправил вновь появившийся баг с невозможностью использования предметов на содержимое инвентаря, используя хоткеи.
19

» WarCraft 3 / Супер хоткей

Вышла новая версия! Прокрутить к ресурсу
  • Добавлен хоткей для быстрого каста на выделеного юнита.
  • Добавлен хоткей для быстрого каста на юнита/точку под курсором.
19

» WarCraft 3 / Игра воспринимает строящееся здание как полноценное

В карте "Vampirism NewGen" тоже были здания, периодически дающие золото — золотые шахты.
Там у них была включенная по умолчанию автоприменяемая способносность, использование которой давало игроку золото. Она была настроена таким образом, что шахта сама прожимала её.
Таким образом, золото будет приходить не в фиксированые интервалы времени, а у каждой шахты будет свой личный таймер. Не будет такого, что немного опоздал с постройкой и потерял деньги или напротив, построил кучу зданий прямо перед зарплатой и получил много золота.
19

» WarCraft 3 / Не поддерживается русский текст

В настройках операционной системы нужно переключить язык для программ, не поддерживающих юникод, на русский.
19

» WarCraft 3 / Супер хоткей

hacaigivay, я скачал архив с сайта, распаковал в папку с игрой и у меня всё работает.
Ты уверен, что установил правильную версию? Попробуй удалить все старые хоткеи и скачать заново.
Если проблема продолжится, то скинь мне краш лог из папки Errors (дата в имени файла должна соответствовать времени краша).
19

» WarCraft 3 / Супер хоткей

Вышла новая версия! Прокрутить к ресурсу
  • Добавлена поддержка версии игры «1.27a».
  • Исправлена невозможность использования предмета в инвентаре на себя при помощи хоткея.
  • Исправлено, что хоткеи панели приказов и инвентаря не работали при зажатой клавише Shift.
  • Исправлена невозможность закрытия подменю нажатием клавиши Escape. Теперь этот хоткей настраивается в конфиге.
  • Исправлена ошибка, когда при использовании хоткея для пустого слота инвентаря, нажималась первая кнопка на панели приказов.
  • Исправлено, что хоткеи игнорировались во время выделения (с зажатой левой кнопкой мыши) и промотки (с зажатым колесиком мыши).
  • Исправлено, что при изменении позиции кнопок способностей с переключаемым автокастом, менялась только конкретная версия (вкл/выкл).
19

» WarCraft 3 / Супер хоткей

hacaigivay, спасибо, что сообщил об ошибке.
Сам я во время тестов использую инжектор для внедрения мода в память игры, а протестировать загрузку игрой mix файлов я забыл.
Перезалил исправленую версию.
19

» WarCraft 3 / Монитор памяти агентов

Вышла новая версия! Прокрутить к ресурсу
  • Убрал из файла с базой данных типов поле с размером экземпляра класса. Теперь эта информация будет считываться из памяти игры.
  • Добавил поддержку 1.27a версии игры.