Доброго времени суток. Ситуация: Создал лавку, триггерно добавил в лавку 4 предмета, хочу реализовать взрыв лавки после продажи всех предметов.
Если в условии (Тип предмета (проданный предмет) равно (1 из предметов), то совершается действие Боевая единица - Взорвать (Продающий юнит) и ЭТО Работает, но если добавляю в условие оставшиеся 3 предмета, то действие Взорвать (Продающий юнит) - НЕ работает

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

По поводу реализации, если не шаришь, как это сделать, вот покажу пример с использованием массива. Создаем переменную массив:
Далее при продаже предмета проверяем тип предмета, и устанавливаем соответствующую переменную значение ДА
Потом проверяем все 4 предмета на то, что они проданы, и если все 4 будут ДА, то делай ВЗРЫВ :D
Так-же прикрепил карту с примером.
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
1 месяц назад
0
Похожие вопросы:

ответ
ххххххх
Ну дык.
Ты пикаешь всех юнитов вокруг позиции кастера.
В т.ч. кастера.
Он же не враг сам себе)
так что выполнится оба действия могут)
и если там дамми есть - в ту же пачку, могут вызвать срабатывание.
Я фильтрую дамми по левелу, лвл дамми ставлю 0.
ответ
Союзник купил что-то в лавке (не в первый раз) и триггер сработал. Состояние переменной "MirKluchZ" было - нет предмета. Может это баг.

Проблема решена установкой переменной в начале игры на нужный предмет.
ответ
~8gabriel8:
PT153:
Потому что число 0.01, сложенное 10 раз, меньше 0.1.
Выводи число следующим кодом, где r - твоё real число.
call DisplayTimedTextToPlayer(GetLocalPlayer(), 0., 0., 5., R2SW(r, 0, -1))
PT153:
у парня проблемы с алгоритмом, в какой вселенной 0.01 * 10 не 0.1?
В компьютерной. И да, 0.01 * 10 тоже может быть не равно 0.01 + ... + 0.01. Потому что складываются и умножаются real по-разному.
Hate, надо просто использовать целочисленные, или пользоваться ==, в JASS == округляет числа для сравнения (!= не округляет).

Пороверил разные варианты, сразу упомяну, что с целочисленными всё огонь, просто какие-то другие воспоминания с ними всплывали.
PT153, сначала не понял, зачем мне твоя строчка, она всего лишь выдавала 0.1 вместо 0.100, но тестировал разные варианты и всё прояснилось. Если задавать шаг 1.0, то всё исправно считается до 10.0, если задавать шаг 0.2, то всё считается до 2.2 и отображается ровно, но если сделать шаг 1.01, то вот тут и появляется то, ради чего ты эту строчку дал.
Именно с дробной частью косяк, и теперь не знаю как выбрать лучший ответ, по идее у тебя в каждом комментарии полезная информация. Просто объединил их в итоге.

Hate:
сначала прибавляет, а затем проверяет, потом удивляется почему 0.11
Обычно просто отшучиваюсь на подобные комментарии, но сейчас так всё грустно в нём, что не смогу.

0
29
1 месяц назад
Отредактирован nazarpunk
0
В твоём условии получается, что одновременно должны быть проданы все четыре предмета, что невозможно.
Нужно хранить проданные предметы в переменных и взрывать только тогда, когда продано все четыре.
Ответы (5)
0
1
1 месяц назад
0
nazarpunk, прости, но я новичок и не понимаю, как это реализовать:)
0
24
1 месяц назад
0
bj1k1, у тебя же в лавке 4 вида предмета а не 1 вид с 4 штуками?
0
24
1 месяц назад
0
bj1k1, я так понял 4 вида, предметы разные. Тогда другой вопрос, если купить предмет, он должен исчезнуть из лавки? То есть его больше нельзя будет купить
0
24
1 месяц назад
0
bj1k1, а теперь по поводу сохранения предметов, как вариант создать 4 логические переменные со значением false, и когда продаешь предмет - ставишь значение true у переменной. И когда все 4 значение будут true - взрывай.
0
1
1 месяц назад
0
konvan5, Да именно так, предметы разные , после покупки они сами пропадают
0
24
1 месяц назад
0
По поводу реализации, если не шаришь, как это сделать, вот покажу пример с использованием массива. Создаем переменную массив:
Далее при продаже предмета проверяем тип предмета, и устанавливаем соответствующую переменную значение ДА
Потом проверяем все 4 предмета на то, что они проданы, и если все 4 будут ДА, то делай ВЗРЫВ :D
Так-же прикрепил карту с примером.
Загруженные файлы
Принятый ответ
Ответы (14)
0
24
1 месяц назад
Отредактирован konvan5
0
Это как один из примеров, как можно реализовать систему. Все можно создать и по другому, в зависимости от твоих потребностей. Можно не использовать массив (переменная с индексом) а 4 отдельные логические переменные.
0
1
1 месяц назад
0
konvan5, Хм, вроде сделал как у Вас, но для теста с 2 предметами, но действие текст - взрыв и взрыв лавки не происходит. Такое впечатление, что массив не знает о существовании предметов.
Загруженные файлы
1
1
1 месяц назад
1
konvan5, Спасибо огромное, заработало!!!) ошибка была во вложении функции)
0
19
1 месяц назад
0
konvan5, предлагаю оптимизировать триггер, при покупке любого из 4 предметов проверить user data лавки, затем увеличить user data лавки на 1, а если при проверке будет user data > 4 взорвать лавку )
0
24
1 месяц назад
0
EugeAl, ну это если одноразово все предметы покупаются, а если один предмет можно купить 100 раз, а взрыв должен произойти только если все 4 вида были куплены хотя бы 1 раз?
0
19
4 недели назад
Отредактирован EugeAl
0
konvan5, У него одноразовые, исчезают после покупки)
Насчёт твоего предложения... хм, наверно, я бы сделал 4 абилки пустышки по 2 левела каждая, на каждый вид предмета прописал бы что:
Если предмет продан, и левел пустышки равно 1, то увеличить левел пустышки на 1
И если все 4 пустышки имеют 2 левел, то взорвать лавку.
Ну чтоб получилось MUI, или как оно там правильно называется, когда триггер работает на нескольких юнитах одновременно)
А ещё для оптимизации можно равкоды абилок и предметов согласовать, чтобы равкод абилки был равен равкод предмета + 1, тогда можно обойтись без elseifа при определения типа предмета )
Как то так)
0
24
4 недели назад
0
EugeAl, тогда да, все верно, хватит и одного счетчика целочисленного. Изначально он равен 0, при каждой покупке делаем +1, если счетчик = 4, то БУМ :)
0
24
4 недели назад
0
EugeAl, вот муи вариант неплохой, если цель сделать несколько таких лавок на карту)
0
24
4 недели назад
0
Как говорится, реализации зависит от четко поставленной цели с ограничениями :D
0
19
4 недели назад
0
konvan5, Ну да, а в данном случае вообще от запроса автора)) не добавил пояснения - ну извините, что просил, то получил)
0
37
4 недели назад
0
konvan5, тебе не обязательно засовывать проверки в elseif - в гуи они усложняют читаемость, а по логике всё будет работать и в линейных ветвлениях
0
24
4 недели назад
0
ScorpioT1000, так и есть, просто мелкая оптимизация производительности
1
29
4 недели назад
1
konvan5, ну так можно всё сохранять в хэштаблицу по id лавки и не городить костыли с абилками.
0
24
4 недели назад
0
nazarpunk, Больше костылей богу костылей! :D
Чтобы оставить комментарий, пожалуйста, войдите на сайт.