Ломаю голову: хочу сделать так, чтоб в зону входил юнит, и выводился на экран в типе string, к примеру, ID этого юнита(не ID типа юнита, а ID юнита!). Не знаю, как к нему обратиться. И я не понял, в каком типе данных оно хранится. Как я понял - integer. На скринах просто показано, как по дефолту работает отображение уровня юнита при входе в зону. Думаю, должно быть похоже чем-то. Если тема заезженная, подскажите, где искать плз.
screen0 - на триггерах(с конвертированием to string).
screen1 - просто конвертировал в текст на jass. Утечки не устранял.
screen0 - на триггерах(с конвертированием to string).
screen1 - просто конвертировал в текст на jass. Утечки не устранял.
Принятый ответ
Мне в итоге неоткуда брать этот h - ключ, по которому я всё записал...
Это будет юнит, которого атаковали т.е. GetTriggerUnit(). Вся задача шаринга между несколькими триггерами в том, чтобы определить какие данные между этими триггерами у нас уже есть общие и отталкиваясь от них записать другие данные в хеш. В данном случае мы вешаем данные на GetSpellAbilityUnit() и загружаем по GetTriggerUnit(). Самого кастера, как я понимаю, здесь записывать никуда не нужно.
А некоторым комментаторам советую постыдиться, редкий случай, когда человек сам что-то пытается понять и пробует что-то делать, а вам лишь бы эго потешить.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Отредактирован Doc
Соответственно твой второй триггер на событие атаки должен быть всегда включен и должен проверять, что хештаблица что-либо содержит (вместо условия что есть сейчас). + нужно делать RemoveSavedHandle для очистки в самом конце.
Отредактирован PT153
Конфликтовать не будут, так как мы сохраняем пары id конкретного кастера + значение - 0. И когда мы достаём кастера из значения 0, как таблица понимает, какои id у этого кастера? Если все кастеры будут со значением 0...
Clamp: Я немного представляю. Поэтому и понимаю логику локальных переменных, и понимаю, почему у меня не работает для нескольких кастеров. Но с хэш-таблицами пока не понял, как это: значение кастера всегда 0, но когда мы загружаем кастера по значению 0, таблица понимает, какого кастера я загружаю. Как это? Ключ одинаков для всех кастеров, получается. Я прав?
DopaMine: А, мы загружаем тоже по паре ключиков, ясно. СПАСИБО ВСЕМ!
Отредактирован Doc
function ProverkaHesha takes nothing returns boolean
return GetВТаблицеСодержитсяЧто-то() == "mytable, GetHandleId(caster), 0, target"
endfinction
Так по логике? И что тогда за Get должен быть? Или я вообще не понял:DDD
проверка хэндла
обычно изначально в ячейках если ничего не записано, то вернет 0 или null
написать? И что такое число A?
Отредактирован MpW
childKey - младший ключ
ты похоже не понимаешь как работает. хэндл у объектов разный, это просто счетчик объектов. например, создается первый футман ему перечисляют номер 1000 (1000-это условно, просто handle берет большие значения), спавнится второй футман он имеет номер 1001, создается третий футман 1002, создается стрелок 1003, декор 1004 итд. короче у разных кастеров не мб конфликта тк хэндлы разные
конфликты могут быть в коде, если старший и младший ключи совпадают. например 2 разных триггера, короче 2 абилки. Но имеют одинаковые ключи (первый: handle,0 второй: handle,0. Может произойти так что в одном триггере сохранишь, а в каком-нибудь втором из них перезапишешь данные. надо во втором триггере изменить младший ключ. изменить во втором во так: handle,1 - будет совсем другая ячейка) На гуи есть готовое решение. В разделе Boolean => HaveSavedHandle Ну можно числа загружать из хэша
Steal nerves:
» функция
Я так понял, она проверяет, есть ли хоть какое-то значение в таблице? И если его нет, то дальше не будет работать
Doc: Первыи триггер готов. Теперь поподробнее: откуда второи триггер знает, что такое "caster", когда я пишу к примеру во втором триггере:
local unit newcaster = LoadUnitHandle(mytable,GetHandleId(caster),0)
??? Как это работает? caster - это же локальная переменная...