19

» WarCraft 3 / Какая версия карты земли бога не вылетает?

Tredor46, это баг варкрафта, а не конкретной карты. Если есть триггеры, реагирующие на приказ, то создается объект с данными о событии, но затем не уничтожается.
19

» WarCraft 3 / Какая версия карты земли бога не вылетает?

То что вылетает у тебя, вовсе не означает что вылетает у других.
Если проблемы с твоим оборудованием, то смена версии карты тебе не поможет.
В случае вопросов о крашах стоит прикладывать отчет об ошибке, создаваемый игрой в папке Errors и имеющий имя %Дата краша%.txt, тогда есть вероятность, что кто-нибудь сможет по нему понять причину.
Убедись в том, что у тебя исправный компьютер (из корпуса не идёт дыма), с операционной системой всё в порядке (синие экраны появляются разве что в страшных снах) и в папке с игрой нет файлов с расширением .mix (это исполняемые файлы, которые игра подгружает на старте и они могут сделать с игрой и компьютером что угодно).
Если крашится с нехваткой памяти, то дело может быть в утечках памяти создаваемых картой, что должен исправлять разработчик.
Но бывает такое, что утечек карта не создает, а память всё равно куда-то улетучивается.
Как я подозреваю, из-за кривых драйверов для видеокарт, которые позволяют памяти течь, либо неэкономно используют её.
В таком случае, можешь попробовать:
  • Запустить игру в режиме OpenGL (передав параметр командной строки "-opengl"), вроде некоторым это помогает.
  • Переключиться на DirectX 9, скинув d3d8.dll отсюда в папку с игрой (незнаю, может ли это действительно помочь).
  • Обновить/откатить версию видеодрайверов.
  • Пойти играть на Linux'е под Wine'ом. Вероятно, там будут другие версии драйверов, если повезет, то без багов.
  • Поменять видеокарту на другую.
Если проблема всё же в карте, то начни перебирать все версии, одну за другой, пока не найдешь исправную (если таковая имеется).
19

» Администрация XGM / Отсутствует короткое описание в ленте

Я загрузил скриншот и поставил галочку "Вставить изображения в текст", но похоже что-то пошло не так. Ресурс редактировать почему-то нельзя, поэтому попробую снова через комментарий.
Загруженные файлы
19

» WarCraft 3 / Баги из-за сокрытия кнопок

Только что мне делать этой ссылкой по скачиванию?
Под кнопкой "Скачать" есть кнопка "Инструкция по установке".
Только другие то игроки не будут себе это добавлять и какой тогда в этом смысл?
Так хотя бы не будут страдать те, кто установил мод.
А если собираться играть компанией, то можно договориться заранее всем поставить этот мод.
19

» WarCraft 3 / Баги из-за сокрытия кнопок

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

» WarCraft 3 / Последнее убежище

периодический перезапуск помогает
Не знаю на сколько он действительно помогает, ведь ты не поделился информацией о том, каковы значения потребления памяти процессом до и после, но раз ты так говоришь, то поверю на слово.
В таком случае, пользуйся этим решением и дальше, чтобы сбрасывать утечки памяти, создаваемые непонятно кем (я подозреваю видеодрайвера).
Надеюсь, это позволит тебе играть неограничено долго.
теряется часть прокачки
Если в карте и правда есть такие баги, то это печально. Я бы мог посмотреть, где там автор накосячил, но не уверен, что смогу найти на это время, тем более, что сам я в эту карту не играю.
Bezimyannii.png
Было бы удобнее, если бы ты отсортировал таблицу по колонке "Count", которая отображает количество агентов, но и так уже сойдет.
Не вижу чтобы каких-нибудь агентов было слишком много. Похоже, что группы утекают, но их количество не смертельно.
19

» WarCraft 3 / Последнее убежище

Сколько времени должна длиться игра, чтобы крашнуться?
Еще интересно, сколько памяти игра занимает на старте и как быстро она растет по мере игры.
в программе не понял на что смотреть
Нужно было отсортировать список по колонке с количеством объектов и либо сделать скриншот окна, в котором видно самые многочисленые виды агентов, либо скопировать текст всех ячеек и залить сюда файл.
Тогда можно было бы проверить, не утекает ли там что-то слишком сильно.
вот краши за сегодняшние испытания
Для крашей памяти я делал скрипт, который формирует удобную таблицу с регионами памяти:
2024-12-09_20.51.54_Error.txt
total size: 364.39 MiB.
69.92 MiB	1422	.?AUCustomObjectField@@	-2
57.06 MiB	33281	.\cmemblock.cpp	372
36.74 MiB	22730	.?AVC3Vector@NTempest@@	-2
15.94 MiB	4102	.?AUChunk@CDataStoreChunked@@	-2
10.88 MiB	9276	.?AVC2Vector@NTempest@@	-2
9.38 MiB	1	.?AUWOModel@@	-2
8.22 MiB	229	HMODEL	-2
7.53 MiB	82	.?AVCAgentBaseAbs@@	-2
7.44 MiB	239	.\SFile.cpp	4072
6.72 MiB	1	.\Jass.cpp	390
6.38 MiB	11563	.G	-2
5.98 MiB	19768	.?AVCImVector@NTempest@@	-2
5.77 MiB	1	.?AVTerrainVertex@@	-2
5.03 MiB	14329	HCAMERA	-2
4.90 MiB	27	.?AUslkRow@@	-2
4.42 MiB	1004	.?AVCPmRegion@NIpse@@	-2
4.15 MiB	3773	.?AUCliffModel@@	-2
4.08 MiB	7638	e:\Drive1\temp\buildwar3x\War3\Source\WorldEdit/CWeatherArea.cpp	63
3.46 MiB	30	.?AVCPlaneParticleEmitter@@	-2
3.38 MiB	83	.\W32\OsSnd.cpp	377
3.28 MiB	1	.?AVShadowPixel@@	-2
3.27 MiB	132352	e:\Drive1\temp\buildwar3x\Storm\H\stpl.h	2617
3.00 MiB	12	.\GxuFontUtil.cpp	2329
...
Менеджер памяти игры утверждает, что занял меньше 400 мегабайт, что не так уж и много.
Может быть, фрагментация памяти слишком велика или кто-то еще (например, драйвера для видеокарты) занял всю память.
Попробуй переключиться на OpenGL или DirectX 9 и сравни потребление памяти.
Еще, если проблема в утечках памяти, вызваных не варкрафтом, то может помочь периодический перезапуск игры и загрузка сохранения. Посмотри сколько памяти игра занимает в момент сохранения и после загрузки.
19

» WarCraft 3 / Последнее убежище

cmemblock.cpp line 372
Я так понимаю, речь идёт о краше из-за нехватки памяти. В карте, конечно, еще остались утечки, но не настолько критичные, чтобы играть было совсем невозможно. Я видел на иринаботе лобби с игроками, которые играли 2 часа.
Покажешь отсортированую по количеству объектов таблицу, показываему этой программой?
А еще не помешает отчет об ошибке, создаваемый игрой в папке Errors.
Бывают невезучие игроки, у которых карты постоянно крашатся с нехваткой памяти, в то время как остальные играют как ни в чём не бывало. Может у тебя варкрафт сломаный с модами кривыми или операционная система/драйвера глючат.
Еще слышал, что иногда помогает переключение игры в режим OpenGL передачей параметра командной строки "-opengl" (один человек утверждал, что в его карте потребление памяти отличалось на гигабайт).
при сейф-лоаде теряется развитие навыков персонажа и прокачка статов
Мне говорили, что при загрузке ломается мультиборд. Возможно, что это лишь визуалый баг, а все статы остаются на месте.
19

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

было бы интересно почитать
Что сразу могу вспомнить, так это три вещи:

WriteLn

Функция вывода в консоль крашится, если к программе не подключена консоль.
Краш-код
program my_first_program;

begin
	WriteLn('Hello, World!'); // Ты пытался, но у тебя ничего не вышло.
end.

printf

При конструировании массива, который передается функциям с переменным числом аргументов, при передаче DWORD'а тот конвертируется в int32 и, если его значение вне диапазона 0..0x7FFFFFFF, то выкидывается исключение RangeError, которое приводит к крашу моих модов. Это происходит независимо от режима сборки (релиз/отладка) и состояния флага проверки ошибок диапазонов.
Remark: Note that there is no support for DWord (or cardinal) arguments in array of const. They are converted to vtInteger/vtLongint. This is for Delphi compatibility, and the compiler will ignore any resulting range checks when in mode Delphi.
В документации написано, что это сделано для совместимости с Delphi, но каким образом это (краши везде, кроме Delphi) способствует ей я так и не понял.
Пример кода с крашем
program omg;

uses
	SysUtils;

var
	number: Dword = 0xFFFFFFFF;

begin
	WriteLn(Format('number = %d', [number])); // crash
end.
Этот код не в состоянии вывести в консоль значение переменной.
Исправляется ручным конвертированием значения в тип, который точно вместит в себя все его значения:
	WriteLn(Format('number = %d', [Int64(number)]));

Память мертвого потока

При попытке освободить память, которая была выделена во время исполнения точки входа библиотеки, можно легко получить краш.
Происходит это в случае, если поток, во время исполнения которого была выделена память, уже завершился. Такое может произойти в случае, когда вместо помещения .mix файла в папку с игрой (тогда игра сама загрузит его и точка входа выполнится в главном потоке, который будет долго жить), используется инъектор DLL (в таком случае, в целевом процессе создается поток, который завершается сразу после загрузки библиотеки).
Вообще, в freepascal'е есть функция создания потока BeginThread которая, возможно, корректно обрабатывает завершение потока, перекладывая права владения на кого-нибудь другого, но поток в котором исполняется точка входа находится вне моей власти.
Для решения этой пролемы можно попробовать в точке входа сразу создавать новый поток через BeginThread и уже в нём выделять память, либо воспользоваться возможностью смены менеджера памяти (подключение модуля cmem самым первым в главном файле программы позволит использовать менеджер памяти из msvcr.dll).
Пример краш-кода
program dead_memory;

var
	memory: Pointer;

procedure OnChatMessage(s: PChar);
begin
	// ...
	FreeMem(memory); // crash
end;

begin
	memory:= GetMem(1024);
	AddChatHandler(@OnChatMessage);
end.
19

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

Вышла новая версия!
Прокрутить к ресурсу
  • ИИ скрипт больше не должен крашиться.
  • Теперь использую стандартные булеаны: 0 — ложь, 1 — истина.
  • Теперь игра не выделяет память для каждой строки дважды.
  • Исправлена моя утечка объектов CStringRep.
  • Исправлена моя утечка глобальных массивов.
19

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

Вышла новая версия!
Прокрутить к ресурсу
Объединил мод на устранение лимита размера карты и мод на исправление появляющихся в результате работы первого багов.
19

» WarCraft 3 / Секретные поля камеры

prizraknadache, ты на JASS'е умеешь кодить?
Объяви константы, скопировав себе в код следующие строчки:
globals
	constant camerafield CAMERA_FIELD_NEARZ = ConvertCameraField(7)
	constant camerafield CAMERA_FIELD_LISTENER_DISTANCE = ConvertCameraField(8)
	constant camerafield CAMERA_FIELD_LISTENER_AOA = ConvertCameraField(9)
endglobals
А потом когда будешь вызывать нативную функцию SetCameraField передай нужную константу:
call SetCameraField(CAMERA_FIELD_NEARZ, 15.0, 0.0)
19

» WarCraft 3 / Что изменить в mpq чтоб грохнуть диалоги

quq_CCCP, значит не нашлось никого, кого бы это беспокоило достаточно сильно, чтобы тот был готов оплатить разработку нового мода. Сам я уже давно перестал зависать в варкрафте, но иногда ко мне приходят с просьбами сделать мод и я берусь, если задача мне по силам и оплата устраивает.
Но, как по мне, в данном случае проще перезапустить игру.
19

» WarCraft 3 / Секретные поля камеры

prizraknadache, зачем редактировать common.j? Просто объяви эти константы у себя в коде карты и используй.
19

» WarCraft 3 / Что изменить в mpq чтоб грохнуть диалоги

В файле "UI/FrameDef/UI/ScriptDialog.fdf" есть какие-то настройки для скриптового диалога и его кнопок, попробуй поиграться с ним.
Если умеешь делать хаки, то при помощи этой программы ты можешь увидеть список нативных функций и их адреса. Отредактируй функцию DialogDisplay и заглуши её, после чего сможешь больше не видеть никаких диалогов.
Правда, если ты играешь на платформе с античитом, то он может обратить внимание на модификацию игры.
19

» WarCraft 3 / Помогите запустить карту

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

» WarCraft 3 / Секретные поля камеры

ValdionWorld, потому, что это касается только классики. Поля не объявлены в common.j, но их можно добавить самому и затем использовать.
19

» WarCraft 3 / Как получить нормальный доступ к содержимому War3Patch.mpq?

Принятый ответ
Скачай Ladik MPQ Editor. Там же в конце есть ссылка на скачивание архива со списками файлов. Когда будешь открывать War3Patch.mpq укажи дополнительный список файлов "WarCraft III.txt" и тогда имена всех файлов определятся.
Но, чем редактировать стандартные архивы, куда удобнее использовать mix-архивы.
19

» WarCraft 3 / Секретные поля камеры

Makeba, мне казалось очевидным, что ресурс касается лишь класической версии игры, но раз не все так считают, я решил добавить этот факт в описание.
19

» WarCraft 3 / Секретные поля камеры

nazarpunk, то что её добавили в рефе не указывает на её наличие в 1.26a версии.
Также, похоже, что там удалили настройку слушателя и добавили еще каких-то полей.
constant camerafield CAMERA_FIELD_NEARZ       = ConvertCameraField(7)
constant camerafield CAMERA_FIELD_LOCAL_PITCH = ConvertCameraField(8)
constant camerafield CAMERA_FIELD_LOCAL_YAW   = ConvertCameraField(9)
constant camerafield CAMERA_FIELD_LOCAL_ROLL  = ConvertCameraField(10)
19

» WarCraft 3 / Просмотр состояния виртуальной машины JASS

Последние новости!
Обновил deprotect.mix, чтобы тот перестал показывать раздражающее окно "Disk full" при запуске игры.
19

» WarCraft 3 / Просмотр состояния виртуальной машины JASS

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

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

SLina, если не можешь адаптировать код под компилятор microsoft'а, то попробуй воспользоваться GCC. Если сидишь на windows'е, то установи MSYS или WSL. Там можно будет установить компилятор и запускать bash скрипты.
Вот скрипт, который может скомпилировать пакет wc3 (хотя лучше, конечно, воспользоваться какой-нибудь системой сборки):
раскрыть
mkdir -p build || exit 1
files=$(find src -iname *.cpp)

echo "$files" | while read file_path
do
	relative_path=$(realpath -s --relative-to=src "$file_path")
	i686-w64-mingw32-g++ "$file_path" -Iinclude -c -O2 -o "build/$relative_path.o" || exit 1
done

i686-w64-mingw32-ar csr build/wc3.lib build/*.o || exit 1
Приложил архив со скомпилированой статической библиотекой, но в следующий раз тебе стоит сделать это самостоятельно.
Загруженные файлы
19

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

SLina, нужно смотреть на место первой ошибки: "На строке 33 отсутствует «;»".
раскрыть
class __attribute__((packed)) CPlayer: TSHashObject<CPlayer, HASHKEY_NONE> {
public:
	BYTE start_loc;
	PLAYERDATA data;
	DWORD field32;
	BYTE Index;
	BYTE field37;
	DWORD pauses_counter_;
	DWORD saves_performed_;
	DWORD finished_saving__;
	DWORD finished_saving_result__;
};
Здесь я использую "__attribute__((packed))", чтобы выключить выравнивание данных.
Вероятно, это какое-то нестандартное расширение компилятора, которое понимает мой GCC, но не принимает твой MSVC. В таком случае, замени эту опцию на аналог из своей системы.