Здравствуйте старожилы))))
Недавно ради интереса начал изучать маппинг по Warcraft 3.
Хочу сделать так, чтобы:
Игрок владелец предмета "Боевые Когти" написал сообщение в чат "-Music" и тут начала играть музыка.
Но у меня нечего не получается((((
Поднимаю "Боевые Когти" затем пишу в чат сообщение "Music" а музыка не работает(((((
В чем дело?
И еще один дополнительный вопрос: Вызывает ли проигрывание музыки утечку в памяти?
Скриншот моего триггера внизу.

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

во первых, изучите форматирование
во вторых, вы прикрепили два одинаковых скриншота, пользуйтесь кнопкой редактирования
в третьих, кто такой игрок "владелец нет предмета" и почему на него должно что то срабатывать
в четвертых, в триггере срабатывающим на событие чата в условии фигурирует манипулирующий герой - откуда? кто он такой?
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
23
5 лет назад
0
все верно верху сказано создаем группу юнит который будет ловить события что данный герой или юнит получил предмет заносим в группу, а при потери удаляем юнита из группы. Если игрок написал в чат проходим цикл по группам сравниваем юнит являет ли свой игрок если да то играем музыку и дальнейшие цикл остановить.
0
26
5 лет назад
0
Bismarc_Dark:
8gabriel8:
Так удали русификатор
И поставь нормально русифицированный редактор FNWE
При всем уважении сударь, я не спрашивал вашего мнения.
Ну что за вредные люди пошли.
Просто времени не было, чтобы рассказать о вреде русификатора.
Некоторые неопытные пользователи редактора считают, что поставив русификатор, они смогут лучше понимать триггеры и быстрее разберуться в них, что логично в отношении большинства других программ. Но, к сожалению, именно для Warcraft 3 перевод в русификаторе отвратный. Какие-то важные слова пропущены, какие-то бессмысленны, а какие-то сбивают с толку. Имеет смысл пользоваться русификатором, если вообще не знаешь английский и смотришь на английские слова, словно на китайские иероглифы. Но если немножко изучал язык в школе, то гораздо лучше поймёшь триггеры без русификатора, их смысл будет ясным, а не извращённым.
А FNWE-это разработка одного из наших пользователей, которую можешь найти через поиск по сайту. Он смог нормально перевести английские слова, чтобы смысл не терялся, а ещё внёс дополнительные возможности, которые позволяют реализовать триггеры близкие к jass.

И по поводу "set bj_wantDestroyGroup = true", наверное, эта переменная готовилась разработчиками редактора триггеров для предотвращения утечек при использовании групп, но её не успели нормально реализовать. Суть в том, что при действиях с юнитами какого-то игрока, как в примере на скрине, группа, в которую выбраны юниты этого игрока, должна быть удалена, но код написан так, что при выборе, например, всех юнитов определённого типа на карте, то есть юнитов определённого типа у всех игроков, группа удаляется после выбора юнитов первого игрока, остальные юниты уже не могут попасть в удалённую группу. То есть, ИСПОЛЬЗУЙ ЭТОТ СКРИПТ ТОЛЬКО ДЛЯ РАБОТЫ С ЮНИТАМИ ОДНОГО ИГРОКА. Раз уже сталкивался с информацией об утечках, то и видел, наверное, запись скрипта, которая удаляет группу после действия с ней, а то что-то запамятовал? Вот это подходит для устранения утечки в любом случае.
0
2
5 лет назад
Отредактирован Bismarc_Dark
0
JMCode:
все верно верху сказано создаем группу юнит который будет ловить события что данный герой или юнит получил предмет заносим в группу, а при потери удаляем юнита из группы. Если игрок написал в чат проходим цикл по группам сравниваем юнит являет ли свой игрок если да то играем музыку и дальнейшие цикл остановить.
Это-то понятно.
Я пытался сделать так чтобы музыка играла 6 секунд после чего переставала играть.
Но у меня нечего не вышло.
Музыка играет бесконечно.
После долгих попыток я понял что функция "Ждать" в данном цикле не работает.
Или может я что-то упустил так как я новичек.
Если так то подскажите пожалуйста, что нужно исправить.
Загруженные файлы
0
20
5 лет назад
Отредактирован biridius
0
можно попробовать сделать проигрывание и остановку музыки отдельным триггером, который запускать из этого
триггер2 - только действия:
1, выключить триггер2
2, запустить музыку
3, ждать
4, выключить музыку
5, включить триггер2
да таймер лучше чем вейт
0
2
5 лет назад
0
триггер2 - только действия:
1, выключить триггер2
2, запустить музыку
3, ждать
4, выключить музыку
5, включить триггер2
Эти все функции прописать второму триггеру?
Без события и условий?
2
26
5 лет назад
Отредактирован Hate
2
Hate:
в том что, скорее всего вейт вешает поток при использовании в форгруп
5 часов назад
После долгих попыток я понял что функция "Ждать" в данном цикле не работает.
вы превосходны

сделайте таймер и отдельный триггер который выключает музыку по истечению таймера, запускаете музыку и запускаете таймер
0
2
5 лет назад
Отредактирован Bismarc_Dark
0
Hate:
Hate:
в том что, скорее всего вейт вешает поток при использовании в форгруп
5 часов назад
После долгих попыток я понял что функция "Ждать" в данном цикле не работает.
вы превосходны

сделайте таймер и отдельный триггер который выключает музыку по истечению таймера, запускаете музыку и запускаете таймер
Ваши комментарии никакой пользы не несут. Так зачем вы их пишите?
Как я понимаю в ваших словах есть, один скрытый смысл это продемонстрировать свое мнимое превосходство над новичками.
Предполагаю, что вы сами слабы в этом деле а хотите казаться настоящим профи как "biridius".
Обычно ламеры самоутверждаются на нубах.
0
20
5 лет назад
Отредактирован biridius
0
Hate правильно предложил юзать таймер
сделай переменную таймер
во втором триггере событие что таймер истекает и действие остановить музыку
в первом триггере вместо ожидания и остановки музыки, сделай запуск таймера на нужное время, например 6 сек.
0
24
5 лет назад
0
Bismarc_Dark, жаль я уже не модератор...
Тебе человек пытается объяснить что хватит ждать помощи,а взять в зубы пачку литературы и изучить все это.
Для начала перестань выбирать всех юнитов игрока в группу. Сделай простой триггер с добавлением юнита(или юнитов в случае если их много) владеющего когтями в переменную, не группу.
Потом сделай еще один триггер без цикла в котором проверяй написавший игрок владеет ли юнитом и в нем включай музыку,а потом отключай - тут цикл не понадобится
Можно сделать без групп и без таймеров
0
20
5 лет назад
Отредактирован biridius
0
можно сделать через целочисленный массив по одной ячейке на игрока, в который добавлять 1 при получении предмета и вычитать 1 при потере предмета
и при вводе команды если число в массиве больше 0 то включать музыку ждать и т.д.
но будет работать даже если юнит с когтями мертв, и все равно вейты зло, таймер лучше
0
2
5 лет назад
Отредактирован Bismarc_Dark
0
Никакой таймер и массив не нужен.
Я понял в чем была моя ошибка.
Достаточно было всего лишь добавить две нужные строчки в нужное место.
Вы все ламеры кроме "Biridius" я просто в шоке от вас.
Сидите тут годами.
Пишите ненужную тонну кода и пихаете людям много лишней информации))))
Удачи вам в жизни)))
0
24
5 лет назад
0
Bismarc_Dark, а массив то лучше сделай, бог варкрафта, а то память зря теряешь со своим выделением всех юнитов игрока
0
20
5 лет назад
Отредактирован biridius
0
function GetUnitsOfPlayerMatching takes player whichPlayer, boolexpr filter returns group
    local group g = CreateGroup()
    call GroupEnumUnitsOfPlayer(g, whichPlayer, filter)
    call DestroyBoolExpr(filter)
    return g
endfunction
да, эта бж-функция выбора всех юнитов игрока утекает из-за необнуленной переменной, даже если удаляется сама группа
говорил себе не юзать бж-функции не глянув что там внутри
0
23
5 лет назад
0
какой без группы если игрок могут иметь 3 героя и 3 предмета из них кто тогда если у карта 1 предмет когти строго то лишь 1 переменная кто его получил
0
24
5 лет назад
0
JMCode, а сделать переменную массивом что мешает? И записывать туда хоть сотню героев
1
26
5 лет назад
1
А ведь возможно, что не совсем правильный ответ мы ему дали, если игрок прописывает в чат сообщение, то и музыка должна играть лишь у него. Нужен localPlayer. Но, честно говоря, ему и так сойдёт)
Чтобы оставить комментарий, пожалуйста, войдите на сайт.