Прости что не отвечаю на вопрос а просто задаю встречный, а зачем тебе счетчик хэндлов на Wurst?. Счетчик хэндлов быть может полезен для проверки если ты где-то забыл обнулить локальную переменную или используешь утечные BJ-функции, которые втихую плодят объекты. Но Wurst обнуляет локальные переменные автоматически, а со стандартной библиотекой BJ-функции едва ли нужны. В счетчике хэндлов на Wurst едва ли есть смысл.
Пока писал на vJass использовал несколько. Как минимум нужна была одна таблица для структуры HashMap и одна для приведения типов (хэндлы в целое и обратно). Все библиотеки, использовавшие хэндл ид как родительский ключ, обращались к одной общей хэш-таблице. Была еще пара случаев где дополнительная таблица сокращала количество писанины, но это частности.
А из чего это, собсно, складывается, уровень вхождения в редактор карт очень низок, но уровень, необходимый для того чтобы сделать что-то вменяемое и поддерживаемое соответствует уровню, необходимому для труда в геймдеве (да и любой другой IT-сфере), в том числе, за зарплату. Так и получается, что среди модеров вара, с достаточным уровнем навыка, остаются только самые отбитые. Нормальные люди уходят заниматься чем-то интересным.
Работай оно так просто, WC3 сплагиатили бы еще пятнадцать лет назад. В WC3, по современным меркам, нет ничего сложного. Пример - Diablo 2. Бесчисленное множество клонов к которым юридически не подкопаешься. Ну или просто напиши срипт импорта файлов WC3 в Юнити или Годот, а народ уже сам подтянется.
Но оно видимо так не работает.
zogorlol, 3 пункт можно пересоздать триггер и снова перерегистрировать юнитов
Где-то, еще на форуме, велось обсуждение о том что события не удаляются и остаются висеть в памяти мертвым грузом. Но это настолько незначительно что можно забыть об их существовании.
Независимо от того, что ты сохраняешь, trigger, group, timer, что-то еще, ты сохраняешь в таблицу просто handle. Поэтому существует функция HaveSavedHandle, но нет функции HaveSavedPlayer или HaveSavedUnit. По той же причине код
Jass
function MyFunc takes nothing returns nothing
local unit u = CreateUnit(GetLocalPlayer(), 'hfoo', 0, 0, 0)
local hashtable hash = InitHashtable()
call SaveUnitHandle(hash, 0, 0, u)
call SavePlayerHandle(hash, 0, 0, GetLocalPlayer())
if LoadUnitHandle(hash, 0, 0) == null then
call BJDebugMsg("No unit.")
else
call BJDebugMsg("There's a unit in the hashtable.")
endif
if LoadPlayerHandle(hash, 0, 0) == null then
call BJDebugMsg("No palyer.")
else
call BJDebugMsg("There's a player in the hashtable.")
endif
endfunction
Выдаст сообщение "No unit", потому что мы замещаем в таблице сохраненный handle юнита на handle игрока. Едва ли оно затрагивает скорость работы, но как оно там с приведением типов следует спрашивть Дралича. Что-то там должно быть раз внутренний баг хэш-таблицы позволяет преобразовать почти любой handle в integer и наоборот.
Осторожнее с этим. Так легко скатиться в кододрочерство, где программирование перерождается из инструмента творчества в решении реальных задач в пустое программирование ради программирования. Сегодня ты сравниваешь таймеры с триггерами, а завтра с пеной у рта доказываешь, что только последнее нубло использует хэш-таблцы, а если у тебя в карте их больше одной, то ты и вовсе унтерменш.
В описанной тобой способности данные просто сохраняются на хэндл таймера, все работает индивидуально и не перебивает друг друга.
Хорошо, мы сохраняем данные по хэндлу таймера. Затем я применил яд повторно, до того как он закончил свое действие. То есть, обновил оставшееся время действия. Как я найду таймер, чтобы обновить данные?
Просто описать? Тогда яд.
Травит цель, нанося 100 ед. урона каждую секунду в течении 15 секунд. Перезарядка 1 секунда. Эффекты от разных кастеров на одну цель друг друга не перебивают, каждый работает индивидуально.
Отредактирован GetLocalPlayer
» WarCraft 3 / PETRI BALANS 8.1
Но факт остается фактом, в нее играют, в 1.8 нет.
» WarCraft 3 / Счётчик Хендлов на WURST
» WarCraft 3 / Идеи для карты
» WarCraft 3 / Как отследить выключение перевоплощения?
» WarCraft 3 / Как отследить выключение перевоплощения?
» WarCraft 3 / Хэш-таблицы в vJass
» WarCraft 3 / Работа с массивами в cJass
Для твоей задачи нужен либо vJass массив как объект, либо реализация списка.
Отредактирован GetLocalPlayer
» Мир безумного / Warcraft 3 Reforged на Unreal Engine 5
» Мир безумного / Warcraft 3 Reforged на Unreal Engine 5
Но оно видимо так не работает.
Отредактирован GetLocalPlayer
» WarCraft 3 / Минусы отлова урон через орб эффект
» WarCraft 3 / LoadAgentHandle или LoadUnitHandle?
» WarCraft 3 / Китайский сервер
Отредактирован GetLocalPlayer
» WarCraft 3 / Хеш-таблица на ГУИ.
» WarCraft 3 / Объясните код
» WarCraft 3 / Как защитить свою карту на Warcraft III Reforged?
» WarCraft 3 / Как защитить свою карту на Warcraft III Reforged?
» WarCraft 3 / Что лучше таймер или триггер?
Отредактирован GetLocalPlayer
» WarCraft 3 / Безопасное выделение hashtable
» WarCraft 3 / Безопасное выделение hashtable
Отредактирован GetLocalPlayer
» WarCraft 3 / Безопасное выделение hashtable
Травит цель, нанося 100 ед. урона каждую секунду в течении 15 секунд. Перезарядка 1 секунда. Эффекты от разных кастеров на одну цель друг друга не перебивают, каждый работает индивидуально.
Отредактирован GetLocalPlayer
» WarCraft 3 / Безопасное выделение hashtable