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

Принятый ответ

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

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

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

Если вы хотите знать кто зашел, то можно строкой выводить на экран. Выводите имя юнита. GetUnitName(<unit>)
ID этого юнита(не ID типа юнита, а ID юнита!)
Если вам нужен не ID типа юнит, то что это за ID юнит? мб handle юнита? handle - номер объекта, у разных объектов разные номера. Есть нативка определения хэндла
GetHandleId(<unit>), которое возвращает целое число integer. короче номер объекта
чтобы вывести строку на экран, нужно конвентировать число в строку I2S(<integer>)
Да, это то, что мне нужно. Я хз, как это правильно назвать:D спасибо. А как сохранить этот ID объекта в хэш и из другого триггера обратиться к нему?
Я просто сделал сложную способность на обычных командах(в редакторе триггеров, а не на jasse). Она работает для одного юнита. Но для нескольких юнитов, которые юзают одновременно, не работает, так как в способности участвуют два триггера и для обращения к значению из первого триггера я использовал глобальную переменную и обратился к неи во втором триггере. Как я понял, мне нужно в первом триггере сохранить юзающего юнита в хэш-таблицу и во втором триггере обратиться к этому значению. Так можно сделать? Я пока не понимаю, как без глобальных переменных обращаться к другому триггеру.
А триггера два, так как когда юнит жмёт способность, она сработает только если этот юнит атакован, в противном случае - просто идёт кулдаун. Как это сделать в одном триггере - хз.
Как это всё гуглить - не понял( Помогите, чем можете плз)
1
29
5 лет назад
1
Собственно GetHandleId возвращает integer, по нему и сохраняй то, что нужно в хеш-таблицу, а затем доставай.
0
11
5 лет назад
Отредактирован DopaMine
0
Doc:
Собственно GetHandleId возвращает integer, по нему и сохраняй то, что нужно в хеш-таблицу, а затем доставай.
Поясните команды: 1)с помощью которых я глобально занесу в хэш id объекта
2)Которая во втором триггере обратится к хэшу и вернёт id объекта из предыдущего триггера. Как таблице понять, ID какого именно объекта я хочу достать?
На скрине реализован вызов ID и вывод на экран.
Вот скрин
Загруженные файлы
1
26
5 лет назад
1
Нет скринов, указывай ссылки на них, когда загрузишь.
0
11
5 лет назад
0
8gabriel8:
Нет скринов, указывай ссылки на них, когда загрузишь.
Загруженные файлы
1
27
5 лет назад
Отредактирован MpW
1
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 (ложь). Можно просто очистить хэш.
0
11
5 лет назад
0
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 скрин.
1
29
5 лет назад
Отредактирован Doc
1
Нет дефолтного "глобального" хеша, сначала создаем глобальную переменную типа hashtable (например назовем ее mytable), делаем InitHashtable, затем SaveUnitHandle(mytable, GetHandleId(caster), 0, target), затем, чтобы по caster достать target - LoadUnitHandle(mytable, GetHandleId(caster), 0)
Соответственно твой второй триггер на событие атаки должен быть всегда включен и должен проверять, что хештаблица что-либо содержит (вместо условия что есть сейчас). + нужно делать RemoveSavedHandle для очистки в самом конце.
0
11
5 лет назад
0
Doc:
Нет дефолтного "глобального" хеша, сначала создаем глобальную переменную типа hashtable (например назовем ее mytable), делаем InitHashtable, затем SaveUnitHandle(mytable, GetHandleId(caster), 0, target), затем, чтобы по caster достать target - LoadUnitHandle(mytable, GetHandleId(caster), 0)
Спасибо, буду разбираться тогда. Сложновато чё-то.
1
30
5 лет назад
1
И желательно переписать с триггеров на Jass, а я не особо шарю, позавчера начал делать.
Учитывая обилие custom script в триггерах, тебе будет проще работать с твоим кодом, если ты его конвертируешь в Jass напрямую.

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