Varion Drakon, это те что любые "не текстовые" файлы, включая исполняемые типа exe и dll и любые бинарные файлы данных. Я не знаю где именно близы хранят свои ключи т.к. не задавался задачей их найти, но это точно не где-то на виду и с большой вероятностью где-то ближе к коду работающему с архивами.
Varion Drakon, либо подобрали ключи перебором либо нашли их в бинарниках игры либо вывели алгоритм генерации ключей. Как правило, каск вьювер обновляется с небольшой задержкой после обнов игр которые он умеет вскрывать и там вроде как появилась недавно возможность ввести ключи самостоятельно, для тех кто умеет их получать не дожидаясь пока автор каск вьювера выложит обнову.
Я не буду выкладывать переписку с ними. Но поих мнению, если я сделал карту,то я должен оббежать каждого автора и спросить у нео разрешение на каждую модельку
И они правы - если ты пользуешься чужими моделями - будь добр выяснить под какими условиями выложена модель и нужно ли спрашивать у автора разрешения на её использование, особенно если модель используется не как есть, а по кускам.
Насколько я знаю - никак, только приказы отслеживать. Но это не дает точно определить что работник действительно забился и вобще игрок зная алгоритм вполне может это абузить.
Если я правильно помню - один из способов это костыль через способность укрыться за щитом. Герою выдается скрытая способность щита с нулевыми статами, щит включается и потом ловится приказ отмены щита, который автоматически происходит при смерти героя.
Даже если принудительно вызвать сборку мусора после старта игры? Автоматическую сборку мусора можно долго ждать, особенно на стандартных настройках 1.31.
Имхо, здесь не обязательны хендлы. С головой хватит custom value для хранения номера локи к которой привязан гвард или, если custom value уже занято, то банально двух массивов. В одном массиве по порядку гварды, в другом локи. Умер гвард (проверка по типу, чтобы система не кидалась на других юнитов) - ищем его в массиве, чистим ячейку массива и запускаем процесс респавна в локе с соответствующим номером. Перебор массива менее эффективен, чем прямая привязка по номеру, но тут всего 20 юнитов и не такое уж частое событие смерти.
NazarPunk,
Луа это хорошо, сам на нем пишу, но гуишникам от него пользы мало. Особенно если они на 1.26 сидят. Ну и сколько можно показывать людям код, в котором триггеры создаются до инициализации, падать же будет при сборке мусора. Тем более, у тебя даже инжект в InitGlobals есть, но в нем почему-то только юниты создаются, хотя можно было бы и триггер там создавать...
В теории можно - кнопки абил это те же фреймы. Перезарядка, насколько я знаю - модель. Но есть небольшая проблема - инструментарий для работы с моделями в фреймах весьма скуден и не факт что на нем выйдет полностью воссоздать функционал перезарядки.
Это достаточно стандартное поведение у программ на ц-костылях, особенно у таких старых как вар. Когда-то этим даже сетевые протоколы болели, не то что десктопные приложения. И да, я знаю что сформулировал фразу крайне криво, можете кидаться тапками, а я пойду спать...
Я очень надеюсь на то, что можно будет кастомную триггер дату скармливать редактору в рефорже, без включения локальных файлов. Шансы на это не велики, но есть. Тогда можно будет достать актуальную триггер дату, пропатчить её вещами из JNGP и скормить редактору. Так, например, в 1.31 можно делать с данными о способностях - я редактировал эти данные чтобы в редакторе отображались все скрытые способности и потом просто импортировал файл в карту, в результате чего редактор подхватывал его и показывал скрытые способности (при сборке релизной версии карты этот файл просто удаляется, в игре он не нужен, только чтобы обманывать редактор). К сожалению, тот-же финт ушами с триггерами в 1.31 мне провернуть не удалось, но есть небольшой шанс что в рефорже можно будет.
ScopteRectuS, ну а пока этого нет - в Lua есть инжекты, вполне решающие эту задачу. Функцию конфиг трогать руками это скорее для продвинутых разработчиков - работающим в WE и только в WE и так сгенерится приемлимый config на основе настроек карты, а для тех кому нужно больше в любом случае есть смысл переходить на внешнюю сборку карты.
Кет, а для меня костыльно выглядит необходимость инициализацию каждого триггера в отдельную функцию заворачивать в жассе.
Возможно, когда допилят кнопку конвертации гуи триггера в луа триггер - будет и этот магический "синтаксис" с автоматической записью функции инициализации в InitTriggers.
PT153, еще вполне можно хукать SetMapName и перехватывать двухшаговым инжектом почти все что угодно, кроме config, но это сложнее. Тут бы вдолбить людям в голову хотябы почему нельзя обойтись без хука InitGlobals...
PT153, а разве InitTriggers выше пользовательского кода находится? Вроде из WE её только двухшаговым инжектом достать можно, если я правильно помню. А при внешнем сборщике лучше сразу main инжектить.
DopaMine, попробую пояснить более понятно:
В JASS функция InitTrig_PickHeroes это не какая-то магия или особый синтаксис, это просто функция. Чтобы функция работала нужно чтобы её кто-то вызвал. WE сам добавляет вызов функций инициализации каждого триггера внутрь скрытой от пользователя функции InitTriggers. Но в Lua этого не происходит т.к. мы не конвертировали гуи триггер, для которого автоматически добавится вызов функции инициализации, а создали блок кода. Поэтому надо самостоятельно вызывать InitTrig_PickHeroes.
И вот тут есть два способа
Первый - просто написать InitTrig_PickHeroes() после функции, не внутри, а после, там где в жассе ничего писать нельзя было - все что не обернуто в функции в Lua просто выполнится при старте карты. У этого способа есть большая проблема - он годится только для тестовых целей, а в реальной карте рано или поздно произойдет сбор мусора и созданные таким образом триггеры удалятся т.к. формально они созданы до инициализации и считаются мусором.
Второй - использовать хук, описаный в моей статье, которую я кидал выше ссылкой. С помощью хука мы добавляем код, который вызовется при выполнении другой функции, а именно - InitGlobals, которая является частью процесса инициализации и созданные там триггеры не считаются мусором и не исчезнут сами в случайный момент времени. Внутрь хука пишем либо сам код создания триггера либо вызов функции инициализации триггера, это уже дело вкуса.
Drulia_san, вот только экспериментально проверено и доказано - созданные до инициализации объекты умирают при сборке мусора. Это не теория, это практические результаты - в момент вызова сборщика у людей умирали триггеры, булэкспры, таймеры, если они были созданы до инициализации.
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
» WarCraft 3 / Вопрос касательно прав на карту и модели.
Ред. prog
» WarCraft 3 / Проверить загруженность древесиной
» WarCraft 3 / ДатаМайнинг Warcraft 3 Reforget.
» WarCraft 3 / ДатаМайнинг Warcraft 3 Reforget.
» WarCraft 3 / Как отловить смерть героев с крестом воскрешения?
» WarCraft 3 / Как отловить смерть героев с крестом воскрешения?
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
» WarCraft 3 / Как сделать респ мобов?
» WarCraft 3 / Вопрос физической сложности проверки карты
» WarCraft 3 / Как сделать респ мобов?
Луа это хорошо, сам на нем пишу, но гуишникам от него пользы мало. Особенно если они на 1.26 сидят. Ну и сколько можно показывать людям код, в котором триггеры создаются до инициализации, падать же будет при сборке мусора. Тем более, у тебя даже инжект в InitGlobals есть, но в нем почему-то только юниты создаются, хотя можно было бы и триггер там создавать...
» WarCraft 3 / Вопрос физической сложности проверки карты
» WarCraft 3 / Не вылезает
» WarCraft 3 / Не вылезает
» WarCraft 3 / Бета версия Warcraft III Reforged 1.32
» WarCraft 3 / Как сделать анимацию перезарядки для кастомных кнопок (фреймов)?
» WarCraft 3 / Формат карт Warcraft 3
И да, я знаю что сформулировал фразу крайне криво, можете кидаться тапками, а я пойду спать...
» WarCraft 3 / Формат карт Warcraft 3
» WarCraft 3 / Reforged на LUA
» WarCraft 3 / Reforged на LUA
Возможно, когда допилят кнопку конвертации гуи триггера в луа триггер - будет и этот магический "синтаксис" с автоматической записью функции инициализации в InitTriggers.
» WarCraft 3 / Reforged на LUA
» WarCraft 3 / Reforged на LUA
» WarCraft 3 / Reforged на LUA
В JASS функция InitTrig_PickHeroes это не какая-то магия или особый синтаксис, это просто функция. Чтобы функция работала нужно чтобы её кто-то вызвал. WE сам добавляет вызов функций инициализации каждого триггера внутрь скрытой от пользователя функции InitTriggers. Но в Lua этого не происходит т.к. мы не конвертировали гуи триггер, для которого автоматически добавится вызов функции инициализации, а создали блок кода. Поэтому надо самостоятельно вызывать InitTrig_PickHeroes.
И вот тут есть два способа
Первый - просто написать InitTrig_PickHeroes() после функции, не внутри, а после, там где в жассе ничего писать нельзя было - все что не обернуто в функции в Lua просто выполнится при старте карты. У этого способа есть большая проблема - он годится только для тестовых целей, а в реальной карте рано или поздно произойдет сбор мусора и созданные таким образом триггеры удалятся т.к. формально они созданы до инициализации и считаются мусором.
Второй - использовать хук, описаный в моей статье, которую я кидал выше ссылкой. С помощью хука мы добавляем код, который вызовется при выполнении другой функции, а именно - InitGlobals, которая является частью процесса инициализации и созданные там триггеры не считаются мусором и не исчезнут сами в случайный момент времени. Внутрь хука пишем либо сам код создания триггера либо вызов функции инициализации триггера, это уже дело вкуса.