PT153, одно обращение к хт = 2 обращения к массиву.
Структуры помогают только когда ты записываешь в хт индекс структуры, по которому и ищеш данные в массивах.
Для переодик таймера я уже кинул пример как еще можно, там вовсе локалки.
widget можно дать кастомное число, и туда я записываю номер структуры. SetUserData быстрее доступа в хеш? Просто я хотел лишь иметь такую же функцию у таймеров.
спойлер - хештаблицы медленнее в сравнении с доступом по массиву. как только ты дописываешь еще пару строк к массиву (т.к. тебе надо вычислить ключ), внезапно хт становится быстрее. так что не мудри
нет ничего быстрее нативок. а каждая строка JASS-кода существенно замедляет работу. Экономия на спичках
Ага, то есть
integer array DATA
...
local integer a = DATA[GetHandleId(timer)]
медленнее чем
hashtable DATA
...
local integer a = LoadInteger(DATA, GetHandleId(timer), 0)
TriggerEvalute наследует поток из которого запущен
Я вот так тоже думал, хотел убедиться в этом. А зачем тогда добавлять действия, если они никогда не вызываются? И это нормально, что TriggerAddAction берёт функцию, которая что-то возвращает?
Ещё вот что интересно. В TriggerAddCondition() можно просто передавать функцию (то есть без Condition), причём даже функцию, которая возвращает что-то отличное от boolean (вроде). Но тут всё же используется функция Condition(). Зачем?
Покрутите графу "Тип". Если не поможет, то перезапустите редактор. Если и это не поможет, то уберите галку "Нестандартные технологии" и используйте триггеры.
Создай на основе предметной способности Аура Смерти или любой другой, у которой показывается иконка, поставь в неё все данные другого предмета, убрав лишнее, и войну дай ту и ту способность и будет тебе иконка.
Зачем юзать ауры, когда можно взять готовые болванки, типа Asth или Agyb.
Только ручное применение - неизвестно, я так и не нашел инфы по этому.
Тут как всегда локализаторы постарались. В оригинале это Unique Cast, что интуитивно понятно, что значит: если отдавать приказ группе, то заклинание будет использовано только одним юнитом, а не всеми.
адрес будет переиспользован, когда объект больше в игре не существует. хендл при этом может и не освободиться - т.е. прошлый останется навсегда "занятым". Реальный адрес никакой роли при этом не играет. RemoveUnit заставляет движок забыть о юните, что иногда чревато, лучше убивать, а потом таймером Remove, либо просто позволить ему разложиться (с тем же эффектом, но стандартная работа игры)
Хм, а если у юнита стоит Can't raise, does not decay, то он сразу разложится, как только пройдёт Death Time?
Действительно, выдаёт ошибку, но у меня виспы идут вовнутрь и добывают золото. А, это был обычный рудник.
А зачем создавать кастомный рудник?
С кастомным рудником тоже работает, но я ещё создал кастомный оплетённый рудник. Ошибка всё же выдаётся.
Я понял, о чём речь. Райтклик работает, а вот приказ через саму способность "Собирать" - нет.
Да, это очень странно. Попробуйте создать кастомную способность "Собирать".
Или, как предлагали выше сделать триггерно. Если отдаётся приказ "Собирать", то без всякой паузы отдавайте приказ "smart".
А последнее не работает. :c
Вызываем этот код пред созданием героя, чуствуем просадку фпс, побегали, покастовали спеллы (вейт нужно подольше). Идем смотреть что в текстовик сохранилось, там будет полный список того что загружал движок.
Затем Preloader("save//mydata.pld") - это вызов этого скрипта, который загрузит в память все что указанно в этом скрипте.
Это используется в кампаниях.
Можно сделать триггер на команду в чат. Побегал за всех героев, покастовал все спелы, написал команду, файл сохранился.
PlealoadGen() сохраняет абсолютно всё: модельки звуки, текстуры.
Модели всё же стоит ещё и создавать.
Я просто беру всё то, что записал прелоад в файле, копирую в триггер, и все Preload заменяю на PreloadFile.
function PreloadFile takes string s returns nothing
local integer l = StringLength(s)
local string sub = SubString(s, l - 3, l - 1)
call Preload(s)
if sub == "md" or sub == "MD" then
call DestroyEffect(AddSpecialEffect(s, 0, 0))
endif
endfunction
Теперь пролагов при касте спелов и прочего не будет.
PlealoadGen(), насколько я знаю, не подгружает САМИ способности, поэтому их нужно добавлять.
Кривоватая подгрузка, удалять не обязательно. Лучше юзать preload без этаких костылей, темболее в JASS есть механизмы автоматического создания pld скриптов.
У меня в карте 100500 способностей. Можно ли их всех тупо добавить одному юниту для подгрузки (без удаления)?
» WarCraft 3 / Покупка в спелбуках
» WarCraft 3 / Иниц. глоб. переменных
По-моему, когда я пытался так написать, меня крашился вар. Тоже самое с CreateRegion().
» WarCraft 3 / DestroyGroup()
» WarCraft 3 / GetTimerUserData
PT153: Хотелось бы это узнать.
» WarCraft 3 / GetTimerUserData
Отредактирован PT153
» WarCraft 3 / GetTimerUserData
Я думаю, что нет, но суть понял, спасибо.
Отредактирован PT153
» WarCraft 3 / как сделать из обычного юнита героя
Последствия мне неизвестны.
» WarCraft 3 / Строение структур
» WarCraft 3 / Строение структур
Отредактирован PT153
» WarCraft 3 / Строение структур
И это нормально, что TriggerAddAction берёт функцию, которая что-то возвращает?
Ещё вот что интересно. В TriggerAddCondition() можно просто передавать функцию (то есть без Condition), причём даже функцию, которая возвращает что-то отличное от boolean (вроде). Но тут всё же используется функция Condition(). Зачем?
Отредактирован PT153
» WarCraft 3 / Юниты пропали из меню "Технологии"
» WarCraft 3 / Иконки способностей для предметов
» WarCraft 3 / Как сделать свиток телепорта из доты?
Отредактирован PT153
» WarCraft 3 / Настройка Канала
Отредактирован PT153
» WarCraft 3 / Утечка или не утечка.
Отредактирован PT153
» WarCraft 3 / Утечка или не утечка.
» WarCraft 3 / Герою отнимается здоровье днем.
» WarCraft 3 / Десинк при работе триггера создать боевую единицу
Отредактирован PT153
» WarCraft 3 / Добыча ресурсов нестандартными юнитами
А, это был обычный рудник.
А зачем создавать кастомный рудник?
С кастомным рудником тоже работает, но я ещё создал кастомный оплетённый рудник. Ошибка всё же выдаётся.
Я понял, о чём речь.
Райтклик работает, а вот приказ через саму способность "Собирать" - нет.
Да, это очень странно. Попробуйте создать кастомную способность "Собирать".
Или, как предлагали выше сделать триггерно. Если отдаётся приказ "Собирать", то без всякой паузы отдавайте приказ "smart".
А последнее не работает. :c
» WarCraft 3 / Hide unit через GetLocalPlayer() вызовет десинк?
» WarCraft 3 / PreloadAbility( integer )
Отредактирован PT153
» WarCraft 3 / PreloadAbility( integer )
Отредактирован PT153
» WarCraft 3 / PreloadAbility( integer )
PlealoadGen() сохраняет абсолютно всё: модельки звуки, текстуры.
local integer l = StringLength(s)
local string sub = SubString(s, l - 3, l - 1)
call Preload(s)
if sub == "md" or sub == "MD" then
call DestroyEffect(AddSpecialEffect(s, 0, 0))
endif
endfunction
» WarCraft 3 / PreloadAbility( integer )
» WarCraft 3 / Как делать спеллы в предметах?