2
8
11 месяцев назад
2

» WarCraft 3 / как написать *.mix камерахак? zoom

.mix - динамическая библиотека, они пишутся не на джасе. Близы подразумевали, что таким образом будут подгружаться кодеки для видео и оставили дырку для загрузки любыл дллок с выставленным разрешением соответственно.
Собственно, сырцы этого вашего ксенона есть на гитхабе. Посмотрите как там сделано: github.com/F7eak/Xenon
Для варкрафта выше 9900, какой бы версией это ни было вам вероятно придется допиливать самостоятельно самостоятельно, (это же старше 1.26, да?)
1
8
1 год назад
Отредактирован goodlyhero
1

» WarCraft 3 / Good Jassspy (JASS логер)

Ладно. Я сюда пришел.
Строго говоря это не только жасс логгер. Например в комментарии показана на самом вторая часть полезного функционала - логгирование выдачи тегов агентам.
Но есть и собственно жасс логер. Он быстрый и пишит как вызовы нативок, так и жасс функций. Для нативок предоставляет информацию о том, с какими аргументами они вызваны.
Были мысли о том, чтобы научиться разбирать, в каком потоке был вызван код, но мне не особо это интересно.
По идеям: soon™️
добавить системное время в каждой строке
Вот конкретно это - если добалять системное время, то логи записанные в разные моменты времени станут несравнимы тривиальным сравнением текстовиков, чего бы хотелось избежать.
Но я некоторое время назад делал некоторые вещи по просьбе одного товарища. Так что некоторый бонусный функционал имеется, если кому-то нужно:
  • Экспортируемая из библиотеки функция AgentPresence_BreakThisPlease будет вызываться каждый раз когда будет достигнута одна из заданных комбинаций тегов. (способ задания см. в обновленном файле)
  • Добавлена настройка для мгновенного вывода в файл, при выдаче новых тэгов.
  • Добавлена настройка не выводить выдаваемые тэги и связанную информацию до того момента, пока не не начнется выполнение основного жасс кода.
Если кто-то хочет добавить какой-нибудь функционал или еще что-нидь сделать - вот сурцы
Загруженные файлы
0
8
1 год назад
Отредактирован goodlyhero
0

» WarCraft 3 / Как контрить Alt+QQ?

Была такая функция на мемхаке:
function DoNotExitThisGame takes nothing returns nothing
    local integer oldprotection= VirtualProtect(pGameDLL+$36D510 , 0x64 , 0x40)

    call WriteRealMemory(pGameDLL+0x36D517 , $90909000)
    call WriteRealMemory(pGameDLL+0x36D51F , $90909000)
    call WriteRealMemory(pGameDLL+0x36D51B , $04C29090)
    call WriteRealMemory(pGameDLL+0x36D523 , $04C29090)
    call WriteRealMemory(pGameDLL+0x36D527 , $2F23E800)
    
    call VirtualProtect(pGameDLL+$36D510 , 0x64 , oldprotection)
endfunction
После нее alt qq не сработает.
0
8
1 год назад
Отредактирован goodlyhero
0

» WarCraft 3 / Вообще нет идей с десинхроном...

Ну, есть ряд пунктов, которые можно уточнить.
  1. Отваливаются какие-то конкретные игроки или случайно
  1. 1 Отваливаются ли игроки, которые перезашли в варкрафт.
  1. 2 Отваливаются ли игроки, которые уже имели скачанную карту
0
8
1 год назад
0

» WarCraft 3 / Вообще нет идей с десинхроном...

Можешь попробовать штуку из этого комментария:
Может помочь.
3
8
1 год назад
3

» WarCraft 3 / Рандром дроп для каждого типа юнита

Бог дал человеку хэштаблицы, чтобы таким не заниматься хитрой массивной арифметикой.
Создаем итемпул для каждого типа юнита, сохраняем его в хэштаблицу:
	//....
	//hpea
	set pool = CreateItemPool()
	call ItemPoolAddItemType(pool,'I000',1)
	//.....	
	call SaveItemPoolHandle(ht,'hpea',0,pool)
	//Hblm
	set pool = CreateItemPool()
	call ItemPoolAddItemType(pool,'I001',1)
	call ItemPoolAddItemType(pool,'I002',1)
	//.....	
	call SaveItemPoolHandle(ht,'Hblm',0,pool)
	//.....
В случае смерти юнита загружаем итемпул, создаем айтем:
	set pool = LoadItemPoolHandle(ht,GetUnitTypeId(GetDyingUnit()),0)
	call PlaceRandomItem(pool,GetWidgetX(GetDyingUnit()),GetWidgetY(GetDyingUnit()))
1
8
1 год назад
Отредактирован goodlyhero
1

» WarCraft 3 / Рандром дроп для каждого типа юнита

Итемпулы - вот ваше решение. Они именно для этого и придуманы.
native CreateItemPool           takes nothing returns itempool
native DestroyItemPool          takes itempool whichItemPool returns nothing
native ItemPoolAddItemType      takes itempool whichItemPool, integer itemId, real weight returns nothing
native ItemPoolRemoveItemType   takes itempool whichItemPool, integer itemId returns nothing
native PlaceRandomItem          takes itempool whichItemPool, real x, real y returns item
0
8
1 год назад
0

» WarCraft 3 / Десинхронизация

Когда-то давно я предлагал инструмент для продвинутого поиска причин десинхронов, работающий не всегда, но все равно полезный.
А еще там есть настройка на запись того, как исполнялся jass код, как в известной программе для этого дела, так что при желании вы можете в точности просмотреть еще и порядок выполнения кода и где же вознико расхождение в жасе, если оно возникло там.
Настройка hookjvm = true отвечает за это.
Ну а если вы думаете, что проблема точно в той самой строчке, то попробуйте запихать инициализацию ХТ в отдельный триггер на событие прошло времени(0) или в функцию, вызываемую из мейна любым другим образом.
0
8
1 год назад
Отредактирован goodlyhero
0

» WarCraft 3 / Фатал

Сообщение об ошибке с подписью .\cmemblock примерно всегда говорит о том, что варкрафт попросил себе памяти, но не смог ее получить, так как вероятно она кончилась.
0
8
1 год назад
Отредактирован goodlyhero
0

» WarCraft 3 / Задержка в функции, которая выполняется для локального игрока

Вы неправильно действуете. Запускать таймер надо для всех игроков.
В таймер уже можно передать, например через ХТ, какому игроку что-то вывести.
Альтернативно (но не точно) можно запустить для нужного игрока таймер с нужным кодом, а для остальных с пустышкой.
Альтернативно 2 - сделать слип у всех игроков, но вывести только у нужного через проверку условия.
Делать TimerStart для локального игрока нельзя.
Делать TriggerSleepAction для локального игрока тоже нельзя.
0
8
1 год назад
Отредактирован goodlyhero
0

» WarCraft 3 / Отслеживание статуса выполнения приказа юнита

Если ты хочешь, чтобы ремонтник не перемещался, но чинил - запрети ему бегать. Тогда он будет пытаться чинить только то, до чего дотягивается. И не будет пытаться бежать и чинить то, до чего не дотягивается.
3
8
1 год назад
Отредактирован goodlyhero
3

» WarCraft 3 / Десинхроны в карте

Некоторое количество времени назад я проводил исследование десинков в моей карте.
Они случались после 20 минуты в игре, но были раздражающе часты. Отваливалась часто половина игроков, что было крайне раздражающе.
Вершиной моего расследования стал небольшой микс для логгирования всякого, позволяющий потом сравнить это всякое у разных игроков.
Я выяснил, что в моем случае причиной проблем были 2 вещи - пламя феникса, и что-то в поведении нейтралов на 12+ слотах. (защита союзников или типо того, я не разобрался до конца.)
Сам микс я не довел до окончательной красоты, но на текущий момент он вполне может быть использован для записи JASS и тэгов в игре.
В общем виде, идея довольно проста - сделать запись у двух игроков до десинхрона и сравнить что получилось. Соответственно, если один игрок отвалился а другой остался - один десинкнул и можно сравнивать.
Если воспроизводится в реплеях - совсем хорошо. В моем конретном случае при просмотре одного и того же реплея несколько раз вылезала разница, например, и это было заметно. Если не воспроизводится - остается только отыскать тестеров, которые согласятся посмотреть.
Микс приложил, соответственно.
Загруженные файлы
0
8
1 год назад
Отредактирован goodlyhero
0

» WarCraft 3 / Можно ли отследить нападение?

Если Переменная типа unit или handle не обнулена, при этом после смерти юнита и даже принудительного удаления(!) GetHandleId(Переменная) не выдает 0, причём после проверки условием Переменная != null, это говорит о том, что handle или unit существуют в игре? Или это неверная проверка данных?
По разному. Но для хэндла не требуется наличие юнита. Т.е если у вас есть ненулевой хэндл с типом юнит, но юнит был удален - есть все шансы что юнита в игре уже не существует.
Более того, далеко не все объекты, созданные в игре будут иметь хэндлы. Например если создан предмет, далеко не факт, что у него будет хэндл вообще, до того, как вы к нему обратитесь.
Собственно, проверка на то, остался ли за хэндлом юнит - GetUnitTypeId(h)!=null
Еще удаленные юниты автоматически выходят из всех групп, например.
0
8
1 год назад
0

» WarCraft 3 / Time Defenders

Не смог разобраться в управлении. Так или иначе, при нажатии на w активируется какая-то способность, хотя судя по иконке она должна работать на пробел?
Загруженные файлы
1
8
1 год назад
Отредактирован goodlyhero
1

» WarCraft 3 / Wc3 - google таблицы

А где в рефордже хранятся сами таблицы?
В игровом CASC-архиве.
Программа для просмотра:
Для получения данных программа требует либо установленной игры, либо может сама подтянуть нужные файлы с серверов близов, но не очень быстро.
В основном, данные лежат по путям:
war3.w3mod:units/
основные статы тут.
war3.w3mod:_balance\custom_v0.w3mod
war3.w3mod:_balance\custom_v1.w3mod
war3.w3mod:_balance\melee_v0.w3mod
Это разные версии баланса.
1
8
1 год назад
1

» WarCraft 3 / Wc3 - google таблицы

Все данные по балансу игры хранятся в slk таблицах. Извлечь из них данные не сложно, я точно знаю, что они конвертируемы в приличные форматы, а эксель например их вообще из коробки читает.
Соответственно вместо ручного выписывания достаточно импортировать нужные таблицы
0
8
1 год назад
Отредактирован goodlyhero
0

» WarCraft 3 / Как сделать рандом

Использовать API пулов юнитов и предметов.
Точно доступно в ГУИ, но где я не уверен.
0
8
1 год назад
Отредактирован goodlyhero
0

» WarCraft 3 / Быстрые анимации в главном меню

По неизвестным причинам иногда крашит варкрафт при запуске.
Обратил внимание, что если использовать загрузчик от Ev3nt для загрузки mpq, то краши не случаются. (спасибо ему за это ❤️)
0
8
1 год назад
0

» WarCraft 3 / Сохранение карты в Reforged и Автозагрузка героев. Десинхрон???

Итого: Правильно ли я понимаю ситуацию:
Есть карта. Её можно открыть в jngp 1.26 и в какой-то новой версии редактора для рефа.
Если запускать карту, собранную в jngp, что в рефорже что в 1.26 десинк не происходит.
Если запускать карту, собранную в рефовом редакторе, то в рефе десинкает?
1
8
1 год назад
1

» WarCraft 3 / Скилл "сундук золота" отсутствует у юнита

Эта способность - работает только на рунах, вроде как. Можете настроить например способность "передача ресурсов"
0
8
1 год назад
0

» WarCraft 3 / Помогите с настройкой юнита

Вероятно, тут идеально подойдет способность обсидиановой статуи по превращению в сфинкса. Она позволяет платить за превращение.
0
8
1 год назад
Отредактирован goodlyhero
0

» WarCraft 3 / Как вернуть окраску юнита

Вот готовая карта, в которой показано как можно сбросить цвет юнита на дефолтный, ну или на другой заданный.
Вероятно, большего вам и не требуется.
Совместимо с +- всеми патчами, возможно несколько не оптимизировано, но под пиво покатит.
Где-то я это все использовал, в общем-то вот.
Там всего 4 триггера на все скопируйте, настройте цвета, сбрасывайте цвет когда нужно на здоровье.
Тем не менее, редактор с встроенным цинков вам понадобится, чтобы карту таки скомпилировать.
Загруженные файлы
0
8
1 год назад
Отредактирован goodlyhero
0

» WarCraft 3 / Как подкинуть противника скиллом?

Волна шипов - это жи способность крипт лорда.
0
8
1 год назад
0

» WarCraft 3 / Заклинание которым можно снять метаморфоз демонхантера?

Насколько я помню, можно удалить, а потом вернуть обратно абилку.
0
8
1 год назад
0

» WarCraft 3 / Много триггерных абилок

Я в свое время делал системку с похожим смыслом.
Загруженные файлы