Как быть, стоит рассчитывать что версия 1.26 канет в лету и все перейдут на более поздние версии в ближайшем времени?
Drulia_san, я вот что скажу. Делай пока на 1.26 без использования всяких багов и хаков, как это делаю я. Тогда карта будет совместима с последними версиями. По крайней мере менять придётся не много. 1.26 канет в лету с выходом ремастера, хотя бы из-за новых возможностей. Но выйдет ремастер ближе к концу 2019 года. То есть в ближайшее время никто не перейдёт. Потому рекомендую остаться на 1.26, но если позарез нужны новые функции, то тогда сиди на официальных патчах.
Я так понимаю, что ты улавливаешь улучшение по событию "Начинает улучшение"? Это событие срабатывает ДО начала улучшения, потому приказ "Отмена" ничего не отменяет. Есть два варианта. 1. В триггере с событием "Начинает улучшение" запустить таймер в 0.01 секунду в функцию, в которой будет приказываться "Отмена". Вместо таймера можно поставить паузу, но не рекомендую. 2. Или ловить улучшение по событию "Юнит получает приказ без цели".
function Trig_UpgradeStart_Actions takes nothing returns nothing
local Wall t = GetUnitUserData(GetTriggerUnit())
if not t.owner.spendGold(TowerData[t.uptype].goldcost) then // Если не хватает ли триггерного золота на улучшение.
call DisableTrigger(gg_trg_UpgradeCancel)
call IssueImmediateOrderById(t.tower, Order_cancel) // отдаём приказ "Отмена" башне. t.tower == GetTriggerUnit()
call EnableTrigger(gg_trg_UpgradeCancel)
endif
endfunction
function InitTrig_UpgradeStart takes nothing returns nothing
set gg_trg_UpgradeStart = CreateTrigger()
// Регистрация события происходит в другой функции.
// call TriggerRegisterPlayerUnitEvent(gg_trg_UpgradeStart, p, EVENT_PLAYER_UNIT_UPGRADE_START, null)
call TriggerAddAction(gg_trg_UpgradeStart, function Trig_UpgradeStart_Actions)
endfunction
Кстати появилась новость, что обычный варкрафт перестал быть доступен для покупки.
Это верное решение, а то те, кто в танке, накупят стандартного, а потом начнут ныть "УУУ, зачем я тогда покупал, если мог купить ремастер и получить стандартный".
Наверное из-за того что у меня лицензия там нету этого файла
Походу я реально чего-то не понимаю, где должен находится этот архив? (P.S. Скорее всего я реально туплю потому-что делаю это в первый раз)
У тебя последняя версия игры? В ней нет .mpq файлов. Потому попроси скинуть тебе нужную модель.
Той же версии смысла нет.
А если делать в JNPG с включённым UMSWE, на версиях выше 1.27, могут быть проблемы.
Дело в том, что событие "Юнит входит в регион" скрытно создает новый регион, в который включает указанную область, и получить доступ к этому региону из GUI мы никак не можем.
Я уже это объяснил выше и сказал, что ему нужно регистрировать свой регион, а не через область в ГУИ. pAxsIs:
Кстати вариант со сравнением юнита в регионе мне помог
Есть вариант сделать это без создания региона каждый раз при срабатывании триггера.
Если у тебя единый триггер для всех регионов, то зарегистрировать их можно также циклом, внутри триггера находить нужный сравнением с GetTriggeringRegion().
Я ректы в ландшафте не рисую, делаю их в коде. Так гораздо удобнее для кода.
Не хочу работать месяц над картой, а потом узнать, что навороченный редактор не дал мне запустить ее в варике. В общем такие опасения. Когда один раз врубал WE U, то мне сообщило, что карта типа устарела и предложил обновить ее для этого редактора, вот тогда я отказался и вернулся на стандартный редактор.
Редактор никак не влияет на совместимость, влияет только версия игры. Потому установи JNPG и аддон к нему FNWE, если нужна русификация.
А открывать сделанную в JNPG карту в стандартном редакторе нет смысла.
JNPG работает только в версиях до 1.27.
И да, если ты откроешь карту, сделанную в редакторе для предыдущей версии игры, в редакторе для новой версии, то сообщение о "старости" карты высветится в любом случае, а нажатие OK ничего не сломает. Главное не делать наоборот.
По идее, карта вообще не должна сохранятся. Потому что вы сравниваете rect ==region.
У него странный редактор, возможно, что у него либо нет JassHelper, либо он отключён. А при сравнении rect и region поток, скорее всего, обрубается. pAxsIs:
Подскажите что не так?
Потому что ты регистрируешь событие на вход в rect. А оно работает так: создаётся новый регион, в который добавляется указанный rect. Переменной, в которой хранится ссылка на этот регион, нет, но GetTriggeringRegion() возвращает именно этот регион. Не говоря уже о том, что ты сравниваешь разные типы. GetLocalPlayer:
Никак. Регионы и области не сравниваются параметрически
Ему нужно выяснить, какая ячейка массива содержит сработанный регион (если ему это действительно нужно). А это как раз и делается параметрически, ведь нужно сравнить ссылки.
Но можно узнать, находится ли точка в том или ином регионе.
native IsUnitInRegion takes region whichRegion, unit whichUnit returns boolean
native IsPointInRegion takes region whichRegion, real x, real y returns boolean
native IsLocationInRegion takes region whichRegion, location whichLocation returns boolean
pAxsIs, если тебе нужно событие на вход или выход из region, то тебе нужны следующие функции.
native CreateRegion takes nothing returns region
native RemoveRegion takes region whichRegion returns nothing
native RegionAddCell takes region whichRegion, real x, real y returns nothing
native RegionAddCellAtLoc takes region whichRegion, location whichLocation returns nothing
native RegionAddRect takes region whichRegion, rect r returns nothing
native RegionClearCell takes region whichRegion, real x, real y returns nothing
native RegionClearCellAtLoc takes region whichRegion, location whichLocation returns nothing
native RegionClearRect takes region whichRegion, rect r returns nothing
через шифт бежать в сторону, а кастующий юнит подбегает, ПРИОСТАНАВЛИВАЕТСЯ где то на пол секунды, кастует и только потом бежит дальше.
В таком случае, решением будет именно мой ответ, потому что в моей карте происходит следующее:
Юнит бежит -> отдаётся приказ кастовать -> он кастует -> по окончанию каста отдётся приказ бежать дальше.
Это происходит настолько быстро, что создаётся впечатление мгновенного каста.
есть брать концепцию возврата значения, то обнуление в данном случае невозможно.
Да, но это не отменяют того, что функция утечна. После удаления группы, локалка всё ещё будет ссылаться на удалённый объект, а из-за этого хендл не будет освобождён.
Решение этой проблемы очень простое.
function GetUnitsInRangeOfLocAll takes real radius, location whichLocation returns group
return GetUnitsInRangeOfLocMatching(radius, whichLocation, null)
endfunction
function GetUnitsInRangeOfLocMatching takes real radius, location whichLocation, boolexpr filter returns group
local bj_lastCreatedGroup = CreateGroup()
call GroupEnumUnitsInRangeOfLoc(bj_lastCreatedGroup, whichLocation, radius, filter)
// call DestroyBoolExpr(filter) // не нужна
return bj_lastCreatedGroup
endfunction
Комментарий, что подтверждает, что функция в вопросе утечна.
Ред. PT153
» WarCraft 3 / Насколько актуально делать упор на версию 1.29/1.30?
» WarCraft 3 / Насколько актуально делать упор на версию 1.29/1.30?
Ред. PT153
» WarCraft 3 / Приказ отмены улучшения здания
Я так понимаю, что ты улавливаешь улучшение по событию "Начинает улучшение"?Это событие срабатывает ДО начала улучшения, потому приказ "Отмена" ничего не отменяет.Есть два варианта.1. В триггере с событием "Начинает улучшение" запустить таймер в 0.01 секунду в функцию, в которой будет приказываться "Отмена". Вместо таймера можно поставить паузу, но не рекомендую.2. Или ловить улучшение по событию "Юнит получает приказ без цели".» WarCraft 3 / Приказ отмены улучшения здания
» WarCraft 3 / Отключить автосохранение
Ред. PT153
» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)
» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)
Ред. PT153
» WarCraft 3 / Где лежат стандартные модели Warcraft 3.
» WarCraft 3 / Где лежат стандартные модели Warcraft 3.
Ред. PT153
» WarCraft 3 / Blizzcon: Анонсирован WarCraft III Reforged (remaster)
Пожалуйста, дайте возможность менять оценку.
Ред. PT153
» WarCraft 3 / Region comparison?
А если делать в JNPG с включённым UMSWE, на версиях выше 1.27, могут быть проблемы.
pAxsIs: Есть вариант сделать это без создания региона каждый раз при срабатывании триггера.
Триггер инициализации.
CS: local integer a = 0
CS: loop
CS: exitwhen a == RegionAmount
CS: set Regions = CreateRegion()
CS: endloop
CS: call RegionAddRect(Regions[0], <нарисованный тобой rect>)
CS: ...
CS: call RegionAddRect(Regions[RegionAmount - 1], <нарисованный тобой rect>)
CS: call TriggerRegisterEnterRegion(<нужный триггер>, Regions[0], null)
CS: ...
CS: call TriggerRegisterEnterRegion(<нужный триггер>, Regions[RegionAmount - 1], null)
В JNPG + FNWE всё это можно сделать в GUI.
Если у тебя единый триггер для всех регионов, то зарегистрировать их можно также циклом, внутри триггера находить нужный сравнением с GetTriggeringRegion().
Ред. PT153
» WarCraft 3 / Region comparison?
А открывать сделанную в JNPG карту в стандартном редакторе нет смысла.
JNPG работает только в версиях до 1.27.
И да, если ты откроешь карту, сделанную в редакторе для предыдущей версии игры, в редакторе для новой версии, то сообщение о "старости" карты высветится в любом случае, а нажатие OK ничего не сломает. Главное не делать наоборот.
Ред. PT153
» WarCraft 3 / Region comparison?
pAxsIs: Потому что ты регистрируешь событие на вход в rect. А оно работает так: создаётся новый регион, в который добавляется указанный rect. Переменной, в которой хранится ссылка на этот регион, нет, но GetTriggeringRegion() возвращает именно этот регион. Не говоря уже о том, что ты сравниваешь разные типы.
GetLocalPlayer:
Ред. PT153
» WarCraft 3 / Возможно ли использовать переменные в событиях в JASS?
В стандартном region == rect, в JNPG это исправлено (вроде). Либо у тебя стандартный редактор, либо у тебя удалён TESH, либо отключён.
pAxsIs:
Ред. PT153
» WarCraft 3 / Возможно ли использовать переменные в событиях в JASS?
» WarCraft 3 / Как заменить данные в правом верхнем углу? (золото\дерево\пища)
» WarCraft 3 / Логистика и сохранение данных
Лично я ХТ использую только для связи инстанции структуры и таймера.
» WarCraft 3 / Способность "Взять дерево" у героя
» WarCraft 3 / Мгновенное применение заклинание Канал
Юнит бежит -> отдаётся приказ кастовать -> он кастует -> по окончанию каста отдётся приказ бежать дальше.
Это происходит настолько быстро, что создаётся впечатление мгновенного каста.
Ред. PT153
» WarCraft 3 / Проблемы с интерфейсом!(X2)
» WarCraft 3 / Мгновенное применение заклинание Канал
» WarCraft 3 / Триггерное количество еды
» WarCraft 3 / Дропнуть предметъ
Ред. PT153
» WarCraft 3 / WE WARCRAFT3
Решение этой проблемы очень простое.
И обновите ответ, дезинформируете людей.
» WarCraft 3 / Дропнуть предметъ