Ломаю голову: хочу сделать так, чтоб в зону входил юнит, и выводился на экран в типе string, к примеру, ID этого юнита(не ID типа юнита, а ID юнита!). Не знаю, как к нему обратиться. И я не понял, в каком типе данных оно хранится. Как я понял - integer. На скринах просто показано, как по дефолту работает отображение уровня юнита при входе в зону. Думаю, должно быть похоже чем-то. Если тема заезженная, подскажите, где искать плз.
screen0 - на триггерах(с конвертированием to string).
screen1 - просто конвертировал в текст на jass. Утечки не устранял.

Мне в итоге неоткуда брать этот h - ключ, по которому я всё записал...
Это будет юнит, которого атаковали т.е. GetTriggerUnit(). Вся задача шаринга между несколькими триггерами в том, чтобы определить какие данные между этими триггерами у нас уже есть общие и отталкиваясь от них записать другие данные в хеш. В данном случае мы вешаем данные на GetSpellAbilityUnit() и загружаем по GetTriggerUnit(). Самого кастера, как я понимаю, здесь записывать никуда не нужно.
А некоторым комментаторам советую постыдиться, редкий случай, когда человек сам что-то пытается понять и пробует что-то делать, а вам лишь бы эго потешить.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
27
еще один чувак, который не умеет выражать свои мысли и что ему надо. Не совсем понятно, что вам нужно.

Если вы хотите знать кто зашел, то можно строкой выводить на экран. Выводите имя юнита. GetUnitName(<unit>) точнее вам будет название типа юнита, как в редакторе назвали юнита так и будет. Например, пехотинец, лучник итд
ID этого юнита(не ID типа юнита, а ID юнита!)
Если вам нужен не ID типа юнит, то что это за ID юнит? мб handle юнита? handle - номер объекта, у разных объектов разные номера. Но счетчики там большие. Есть нативка определения хэндла
GetHandleId(<unit>), которое возвращает целое число integer. короче номер объекта. не только юнита, можно любой наследник-объект хэндла (итем, декор, юниты, группа, олния и пр)
чтобы вывести строку на экран, нужно конвентировать число в строку I2S(<integer>)
на jass функция GetUnitTypeId(<unit>) возвращает id-тип, короче число. К примеру 'hfoo' - равкод футмана. мне лень просто объяснять вот
еще одна функция
GetObjectName(<id-object>) - в эту функцию вписываешь номер, целочисленное число. Короче тип объекта id-object. Это мб ид-юнит, ид-предмет, ид-декор, ид-абилы и др
11
Steal nerves:
еще один чувак, который не умеет выражать свои мысли и что ему надо. Не совсем понятно, что вам нужно.

Если вы хотите знать кто зашел, то можно строкой выводить на экран. Выводите имя юнита. GetUnitName(<unit>)
ID этого юнита(не ID типа юнита, а ID юнита!)
Если вам нужен не ID типа юнит, то что это за ID юнит? мб handle юнита? handle - номер объекта, у разных объектов разные номера. Есть нативка определения хэндла
GetHandleId(<unit>), которое возвращает целое число integer. короче номер объекта
чтобы вывести строку на экран, нужно конвентировать число в строку I2S(<integer>)
Да, это то, что мне нужно. Я хз, как это правильно назвать:D спасибо. А как сохранить этот ID объекта в хэш и из другого триггера обратиться к нему?
Я просто сделал сложную способность на обычных командах(в редакторе триггеров, а не на jasse). Она работает для одного юнита. Но для нескольких юнитов, которые юзают одновременно, не работает, так как в способности участвуют два триггера и для обращения к значению из первого триггера я использовал глобальную переменную и обратился к неи во втором триггере. Как я понял, мне нужно в первом триггере сохранить юзающего юнита в хэш-таблицу и во втором триггере обратиться к этому значению. Так можно сделать? Я пока не понимаю, как без глобальных переменных обращаться к другому триггеру.
А триггера два, так как когда юнит жмёт способность, она сработает только если этот юнит атакован, в противном случае - просто идёт кулдаун. Как это сделать в одном триггере - хз.
Как это всё гуглить - не понял( Помогите, чем можете плз)
29
Собственно GetHandleId возвращает integer, по нему и сохраняй то, что нужно в хеш-таблицу, а затем доставай.
11
Doc:
Собственно GetHandleId возвращает integer, по нему и сохраняй то, что нужно в хеш-таблицу, а затем доставай.
Поясните команды: 1)с помощью которых я глобально занесу в хэш id объекта
2)Которая во втором триггере обратится к хэшу и вернёт id объекта из предыдущего триггера. Как таблице понять, ID какого именно объекта я хочу достать?
На скрине реализован вызов ID и вывод на экран.
Вот скрин
Загруженные файлы
26
Нет скринов, указывай ссылки на них, когда загрузишь.
11
8gabriel8:
Нет скринов, указывай ссылки на них, когда загрузишь.
Загруженные файлы
27
DopaMine, что вы хотите сделать? просто зачем вам хэш?
есть статья
просто для начала нужна ссылка на объект хэндл, чтобы получить GetHandleId(<object>). Или как-то записать или как-то по логике вызывается. Я просто напишу примеры для понимания как это работает. Хэндл этот просто помогает хранить/доставать данные, короче работать с ячейками
пример магазина, также можно сделать склад
как пример на jass
триггер 1 - продаем в магазин
событие - юнит закладывает в лавку (у нас 3 вар переменные: продавец и покупатель, предмет item, который продают в магазин. Эти 3 переменные-константы вызываемые при событии)
допустим мы можем сохранить item в хэш-таблицу по ключам. Это нужно для того, чтобы знать что есть в магазине. Какие предметы хранятся в магазине, в каком слоте, сколько зарядов. Просто нет никаких доп нативок для узнавания, поэтому мы импровизируем, создаем свою базу данных. Этот хэндл сыграл существенную роль
GetHandleId(<покупатель>)
также в хэш можно записать разные данные вроде тип, заряды, номер слота и пр
триггер 2 - выкупаем из магазина (аналогично 3 вар переменные, только роли продавца и покупателя меняются местами)
событие - юнит закладывает из лавки
допустим предмет удаляется из магазина, нам нужно из таблицы в данных магазина удалить этот предмет. с помощью хэндла магазина GetHandleId(продавец). С помощью вар переменной item можно достать тип и др данные хранящие в хэндле GetHandleId(продавец)
ваш случай
А триггера два, так как когда юнит жмёт способность, она сработает только если этот юнит атакован, в противном случае - просто идёт кулдаун. Как это сделать в одном триггере - хз.
Не знаю что хотите сделать. Но примерно догадываюсь, но это можно подкорректировать. Можно в атакующем юните хранить boolean b (да/нет), по хэндлу атакующего сохранять. Этот флаг будет говорить находится ли в кулдауне или нет.
Триггер 1 - при атаке загружаем boolean b по хэндлу атакующего и проверяем. Если boolean b вернет истину, то ваши действия.
Триггер 2 - при активации абилки запускаем таймер. Сохраняем в хэше boolean b = true (истина). Таймер длится столько сколько в кулдауне указано. По истечению таймера boolean b = false (ложь). Можно просто очистить хэш.
11
Steal nerves:
DopaMine, что вы хотите сделать? просто зачем вам хэш?
есть статья
просто для начала нужна ссылка на объект хэндл, чтобы получить GetHandleId(<object>). Или как-то записать или как-то по логике вызывается. Я просто напишу примеры для понимания как это работает. Хэндл этот просто помогает хранить/доставать данные, короче работать с ячейками
пример магазина, также можно сделать склад
как пример на jass
триггер 1 - продаем в магазин
событие - юнит закладывает в лавку (у нас 3 вар переменные: продавец и покупатель, предмет item, который продают в магазин)
допустим мы можем сохранить item в хэш-таблицу по ключам GetHandleId(<покупатель>)
также в хэш можно записать разные данные вроде тип, заряды, номер слота и пр
триггер 2 - выкупаем из магазина (аналогично 3 вар переменные, только роли продавца и покупателя меняются местами)
событие - юнит закладывает из лавки
допустим предмет удаляется из магазина, нам нужно из таблицы в данных магазина удалить этот предмет. с помощью хэндла магазина GetHandleId(продавец). С помощью вар переменной item можно достать тип и др данные хранящие в хэндле GetHandleId(продавец)
ваш случай
А триггера два, так как когда юнит жмёт способность, она сработает только если этот юнит атакован, в противном случае - просто идёт кулдаун. Как это сделать в одном триггере - хз.
Не знаю что хотите сделать. Но примерно догадываюсь, но это можно подкорректировать. Можно в атакующем юните хранить boolean b (да/нет), по хэндлу атакующего сохранять. Этот флаг будет говорить находится ли в кулдауне или нет.
Триггер 1 - при атаке загружаем boolean b по хэндлу атакующего и проверяем. Если boolean b вернет истину, то ваши действия.
Триггер 2 - при активации абилки запускаем таймер. Сохраняем в хэше boolean b = true (истина). Таймер длится столько сколько в кулдауне указано. По истечению таймера boolean b = false (ложь). Можно просто очистить хэш.
Не до конца понял, но тогда опишу и покажу триггеры, на которых это сделано.
Способность сделана по аниме Наруто(заезженная тема...)) и называется "Техника обмена". Если не знаете, что это такое, то вот логика: если юнита бьют, он может нажать кнопку и заменит себя на бревно, исчезнет(hide), появится бревно, эффекты и звук, и через 1.5 секунды появится(unhide) в точке, которая указана, как цель заклинания. А если не бьют, то ничего не произоидёт. Так же эффект работает всего 1 секунду(то есть применять типо надо прям перед ударом), а не весь кулдаун.
У способности "Техника обмена" кулдаун 5 секунд. Направленная на точку.
Есть два триггера, "CastOfObmen" включается и выключается в "Attacked".
Attacked:
Когда юнит юзает способность "Техника обмена", записываются в глобалы(а надо в хеш, видимо), а потом в локалки: кастер, точка-цель заклинания.
Включается "CastOfObmen", ждём секунду, выключается "CastOfObmen".
CastOfObmen:
Если кастер(из глобала, а надо из хеша, видимо) атакован, то:
записываются в переменные: атакованныи юнит, звук и эффекты, которые сработают, точка-позиция атакованного юнита, точка-цель заклинания из первого триггера.
Соответственно, дальше прячу юнита, создаю эффекты в его местоположении, жду 1.5 секунды(в целом, они разбиты на несколько отрезков для постепенного появления эффектов), перемещаю нашего шиноби в точку-цель заклинания и перестаю прятать его.
По логике я понимаю, что все эти данные, которые у меня в глобальных переменных - мне нужно в хеш сохранять. Хочу понять, как это сделать. И желательно переписать с триггеров на Jass, а я не особо шарю, позавчера начал делать.
На скрине1- Первыи триггер, на скринах2-3 - Второи триггер. На втором я выделил строку, чтоб было ясно, откуда читать 3 скрин.
29
Нет дефолтного "глобального" хеша, сначала создаем глобальную переменную типа hashtable (например назовем ее mytable), делаем InitHashtable, затем SaveUnitHandle(mytable, GetHandleId(caster), 0, target), затем, чтобы по caster достать target - LoadUnitHandle(mytable, GetHandleId(caster), 0)
Соответственно твой второй триггер на событие атаки должен быть всегда включен и должен проверять, что хештаблица что-либо содержит (вместо условия что есть сейчас). + нужно делать RemoveSavedHandle для очистки в самом конце.
11
Doc:
Нет дефолтного "глобального" хеша, сначала создаем глобальную переменную типа hashtable (например назовем ее mytable), делаем InitHashtable, затем SaveUnitHandle(mytable, GetHandleId(caster), 0, target), затем, чтобы по caster достать target - LoadUnitHandle(mytable, GetHandleId(caster), 0)
Спасибо, буду разбираться тогда. Сложновато чё-то.
30
И желательно переписать с триггеров на Jass, а я не особо шарю, позавчера начал делать.
Учитывая обилие custom script в триггерах, тебе будет проще работать с твоим кодом, если ты его конвертируешь в Jass напрямую.

Вообще пользоваться GUI и не переходить на нормальное представление кода есть смысл только если ты вообще не знаешь ничего о программировании и не планируешь узнавать, например, если ты чисто моделлер или ландшафтер.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.