XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
adic3x

offline
Опыт: 108,439
Активность:
Про логическую переменную, я более-менее понимаю, но просто не знаю как реализовать флаг. То есть в каком триггере его вписать, и что будет проверять boolean compasition.
Устанавливайте ее значение, это и значит "поднять или опустить флаг".
Кстати, я проверил - это правда:
при нанесение урона триггерно данный поток ставиться на паузу, и запускаются все сотальные, которые реагируют на нанесение урона
#include "cj_types.j"

unit a, b;
bool x = true;

callback onInit () {
    a = CreateUnit (Player(0), 'Hpal', 0., 0., 0.);
    b = CreateUnit (Player(0), 'hfoo', 0., 0., 0.);
    trigger t = CreateTrigger ();
    TriggerRegisterUnitEvent (t, b, EVENT_UNIT_DAMAGED);
    TriggerAddAction (t, lambda nothing () {
        if (x) {
            x = false;
            BJDebugMsg ("1");
            UnitDamageTarget (a, b, 100., false, false, null, null, null);
            BJDebugMsg ("3");
        } else {
            x = true;
            BJDebugMsg ("2");
        };
    });
};
Старый 26.03.2015, 11:49
DarkRaven Best

offline
Опыт: 8,116
Активность:
Melissa:
DarkRaven_Best:
в твоей карте отхил стоит перед уроном,
Хочешь - передвинь действие вниз, ничего не изменится)
DarkRaven_Best:
то атакующий юнит не хилился вообще
Атакующий? Мб атакованный? хилится, хилит урона нанесенный с руки, не хилит дополнитльные 111 урона, нанесенные с выключением триггера.
Melissa добавил:
А ну да, атаковать надо гороного короля, мне лень было добавлять событие в триггер.
А в общем ладно, я вынес хил в отдельный триггер и всё теперь действительно работает.
DarkRaven Best добавил:
ADOLF:
Про логическую переменную, я более-менее понимаю, но просто не знаю как реализовать флаг. То есть в каком триггере его вписать, и что будет проверять boolean compasition.
Устанавливайте ее значение, это и значит "поднять или опустить флаг".
Кстати, я проверил - это правда:
при нанесение урона триггерно данный поток ставиться на паузу, и запускаются все сотальные, которые реагируют на нанесение урона
#include "cj_types.j"

unit a, b;
bool x = true;

callback onInit () {
    a = CreateUnit (Player(0), 'Hpal', 0., 0., 0.);
    b = CreateUnit (Player(0), 'hfoo', 0., 0., 0.);
    trigger t = CreateTrigger ();
    TriggerRegisterUnitEvent (t, b, EVENT_UNIT_DAMAGED);
    TriggerAddAction (t, lambda nothing () {
        if (x) {
            x = false;
            BJDebugMsg ("1");
            UnitDamageTarget (a, b, 100., false, false, null, null, null);
            BJDebugMsg ("3");
        } else {
            x = true;
            BJDebugMsg ("2");
        };
    });
};
Увы, моя проблема в том, что я пока не понимаю синтаксиса Jass, и только примерно понимаю за что каждая строчка отвечает.
Старый 26.03.2015, 12:57
Doc

offline
Опыт: 63,163
Активность:
при нанесение урона триггерно данный поток ставиться на паузу, и запускаются все сотальные, которые реагируют на нанесение урона
Какая же правда если потоков никаких нет... Напротив все прямолинейно, наносим урон, из этого же "потока" дергаются все ивент лисенеры на получение урона, дальше возвращаемся в первоначальную функцию и продолжаем выполнение.
Старый 26.03.2015, 13:28
DioD

offline
Опыт: 45,134
Активность:
в варе поток всего один, вызов метода "нанести урон" включает в себя вызов всех листенеров и по результату нанесение урона, если бы можно было вызвать (на самом деле кастом нативки в помощь) стек трейс, вы бы это прекраснейшим образом увидели.
альтернативная реализация этого механизма - всё работает в кучу потоков, которые собирают данные и потом когда наступает следующий тик нулевого потока, изменения применяются к игровым объектам из нулевого потока обработчиками нулевого потока.
наносится урон, выполняются приказы и прочее.
при такой реализации, правила были бы совершенно другие, так как нанося урон в некотором методе, вы не только после этой строки не увидите, сколько хп забрало, сколько хп теперь, так и события будут вызваны совсем с другого места и несколько позже.
DioD добавил:
а что касается тех умных людей, которые считают что паузить триггер это норма.
вы когда за рулём едите, на светофорах и вообще когда надо остановится, глушите машину на ходу или всё таки нажимаете педаль тормоза?
Старый 26.03.2015, 17:40
adic3x

offline
Опыт: 108,439
Активность:
Какая же правда если потоков никаких нет... Напротив все прямолинейно, наносим урон, из этого же "потока" дергаются все ивент лисенеры на получение урона, дальше возвращаемся в первоначальную функцию и продолжаем выполнение.
Суть-то примерна такая-же. Хотя интереса ради можно написать тест с использованием лимита операций: если лимит операций у потока, который стартует от триггера на получение вреда свой, то скорее всего таки там стартует новый поток, если общий - значит все исполняется в одном. Я говорю про условные такие потоки, вы меня поняли. Никакой параллельности конечно нет.
вы когда за рулём едите, на светофорах и вообще когда надо остановится, глушите машину на ходу или всё таки нажимаете педаль тормоза?
А что, есть какие-либо проблемы с отключение триггера из его-же потока?
Старый 26.03.2015, 20:28
DioD

offline
Опыт: 45,134
Активность:
тем что другой точно такой же триггер который сделает точно так же вызовет неопределённое состояние.
и вместо игнора одного события на урон, вы можете прощелкать все полимеры на свете, если поток оборвётся то триггер никогда не будет включен.
Старый 27.03.2015, 07:26
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,024
Активность:
Таймеры в помощь или городим сложные условия, не позволяющие триггеру сработать многократно...
Старый 27.03.2015, 08:23
Doc

offline
Опыт: 63,163
Активность:
quq_CCCP, сложные условия:
if (flag)
Старый 27.03.2015, 13:03
DarkRaven Best

offline
Опыт: 8,116
Активность:
DioD:
тем что другой точно такой же триггер который сделает точно так же вызовет неопределённое состояние.
и вместо игнора одного события на урон, вы можете прощелкать все полимеры на свете, если поток оборвётся то триггер никогда не будет включен.
Да, возможно ты прав, что такое может случится. Так как это скилл массового юнита. Но как делать флаги для триггров, вы можете объяснить? Или есть какая-нибудь статься, в которой ИМЕННО ЭТО подробно расписано?
DarkRaven Best добавил:
Да и обидно, что с данной системой урона нельзя сделать клейв. Ну или я не знаю как его реализовать. Скорее всего придётся найти системы, которые позволяют устанавливать урон юнита в игре на желаемое значение, а таких, я увы, нигде не нашёл.
Старый 27.03.2015, 20:55
Borodach

offline
Опыт: 5,767
Активность:
DarkRaven_Best, Вариант 1) Логическая. В условии добавляешь проверку, если ЛОГИЧЕСКАЯ = да. В триггере перед уроном установить ЛОГИЧЕСКОЙ = нет, а после установить ЛОГИЧЕСКОЙ = да.
Вариант 2) Числовой,более функционален. В условии добавляешь проверку, если ЦЕЛОЧИСЛЕННАЯ (или РЕАЛЬНАЯ) равна нужному значению. И когда нужно приостановить установить нужное значение
Старый 27.03.2015, 21:00
DarkRaven Best

offline
Опыт: 8,116
Активность:
Borodach:
DarkRaven_Best, Вариант 1) Логическая. В условии добавляешь проверку, если ЛОГИЧЕСКАЯ = да. В триггере перед уроном установить ЛОГИЧЕСКОЙ = нет, а после установить ЛОГИЧЕСКОЙ = да.
Вариант 2) Числовой,более функционален. В условии добавляешь проверку, если ЦЕЛОЧИСЛЕННАЯ (или РЕАЛЬНАЯ) равна нужному значению. И когда нужно приостановить установить нужное значение
А можно по подробнее что и куда выставлять? Вернее где поставить проверку переменной и где приравнивание значения переменной.
DarkRaven Best добавил:
Вот так?
Миниатюры
Кликните на картинку для увеличения
Название:  Безымянный1488.png
Просмотров: 9
Размер:  7.1 Кбайт  
Старый 27.03.2015, 21:54
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,596
Активность:
не совсем. Условие частное а не общее.
Старый 27.03.2015, 21:56
DarkRaven Best

offline
Опыт: 8,116
Активность:
Нужно общее? Хм, тогда придётся делать отдельный триггер?
Старый 27.03.2015, 22:12
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,596
Активность:
да нет же, лол, нанести урон если чек=0, условие вместе с действием запихни в if then else
Старый 27.03.2015, 22:15
DarkRaven Best

offline
Опыт: 8,116
Активность:
Melissa:
да нет же, лол, нанести урон если чек=0, условие вместе с действием запихни в if then else
Сейчас попробую.
DarkRaven Best добавил:
Вот так?
Миниатюры
Кликните на картинку для увеличения
Название:  Безымянный228.png
Просмотров: 10
Размер:  10.2 Кбайт  
Старый 27.03.2015, 22:24
DioD

offline
Опыт: 45,134
Активность:
Да, возможно ты прав, что такое может случится. Так как это скилл массового юнита. Но как делать флаги для триггров, вы можете объяснить? Или есть какая-нибудь статься, в которой ИМЕННО ЭТО подробно расписано?
книжки почитай, в гугле вбей, на бумажке нарисуй, никто не будет учить лодырей.
Старый 28.03.2015, 05:38
DarkRaven Best

offline
Опыт: 8,116
Активность:
DioD:
Да, возможно ты прав, что такое может случится. Так как это скилл массового юнита. Но как делать флаги для триггров, вы можете объяснить? Или есть какая-нибудь статься, в которой ИМЕННО ЭТО подробно расписано?
книжки почитай, в гугле вбей, на бумажке нарисуй, никто не будет учить лодырей.
Раздел в котором создана эта тема называется АКАДЕМИЯ ФОРМУ ДЛЯ ВОПРОСОВ, разве нет? Разве здесь создают темы не для того, чтобы получить ответы от знающих людей на заданный вопрос, а не фразу иди поищи где-нибудь?
Старый 28.03.2015, 13:06
DioD

offline
Опыт: 45,134
Активность:
дальше названия раздела не читал?
мои соболезнования
2.1 Перед созданием новой темы не поленитесь открыть FAQ, базу статей и поискать ответ на свой вопрос. А также воспользоваться поиском по сообщениям, так как тогда Вам не придется ждать, пока на Ваш вопрос ответят - Вы сразу найдете готовое решение.
Старый 29.03.2015, 10:16
DarkRaven Best

offline
Опыт: 8,116
Активность:
DioD:
дальше названия раздела не читал?
мои соболезнования
2.1 Перед созданием новой темы не поленитесь открыть FAQ, базу статей и поискать ответ на свой вопрос. А также воспользоваться поиском по сообщениям, так как тогда Вам не придется ждать, пока на Ваш вопрос ответят - Вы сразу найдете готовое решение.
Друг мой, читал, и перед тем как создавать тему, я ищу похожие темы, которые кто-то создавал раньше и читаю, гайды и пособия. В данном случае я не могу найти то что ищу и мне нужна помощь знающих людей, чтобы узнать как правильно сделать.
Старый 29.03.2015, 13:32
Melissa
Я всегда хочу как лучше!
offline
Опыт: 31,596
Активность:
Скажу по секрету - тема исчерпана. Здесь нечего БОЛЬШЕ добавлять. Способы перед тобой, используй как религия больше одобрит.
Старый 29.03.2015, 14:53
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 19:00.