Плохо! Плохо!:  0
Показано с 1 по 6 из 6

Тема: Как проверить что игрок рядом с событием, через notetag события?

  1. #1
    Местный Аватар для Axel_Key
    Информация о пользователе
    Регистрация
    26.03.2017
    Адрес
    Горно-Алтайск
    Сообщений
    155
    Записей в дневнике
    3
    Репутация: 2 Добавить или отнять репутацию

    По умолчанию Как проверить что игрок рядом с событием, через notetag события?

    Делаю простую ABS для своей игры с закосом под 8 бит.

    ABS почти готова, основана на ивентах и плагинах сообщества.
    Сразу укажу плагины, которые использую для создания боевки:
    YEP.event_copier, YEP.event_spawner, YEP.eventProxActivate
    SuperOrangeMovementEX (4 direction, 2 tile sections).
    DK_full_input

    Благодаря этим плагинам удалось сделать неплохой ИИ врагам, отзывчивое перемещение и т.д.
    Event_spawner - позволил создать врагам стрельбу в игрока, снарядами.
    Event_prox - зону активации поведения врагов.
    SOMovementEX - отзывчивое управление.
    DK_full_input - назначение атаки на кнопку Z, в дальнейшем и другие штуки.

    Итак, казалось бы, все идеально. Поведение врага меня полностью устраивает. Он передвигается по карте логично, целится в игрока, стреляет в него и т.д. Его можно спокойно копировать, так как его поведение не привязано к ID. Но как раз таки по этой причине проблема и возникает! Чтобы поведение врага работало таким удобным образом, - враг должен быть параллельным событием. Чтобы подробнее описать проблему, покажу как устроен враг:
    Спойлер страницы врага:



    1) Параллельный триггер запускающий поведение игрока.
    2) Триггер кнопки действия, должен активироваться во время удара игрока по врагу.
    3) Смерть врага, + переключатель врага включен. (вообще смерть врага может быть сразу на второй странице, но я делал это чтобы сбрасывать переключатели врагов когда игрок далеко уходит, этакий ручной спавн)

    Итак, проблема в том, что я не могу реализовать атаку игрока по врагу! При нажатии на клавишу Z, которая по совместительству является 'ок'.
    Как это должно работать:
    "Когда игрок нажимает на Z, идет проверка того, рядом ли находится игрок с врагом. Если игрок находится рядом (на одну клетку), то включается триггер "коллизия". В этот момент игрок может ударить врага, так как теперь у него работает вторая страница с тригером на нажатие кнопки. (Правда враг ничего не сможет сделать, когда игрок рядом. Это небольшая проблема). Если же игрок не рядом с врагом, то коллизия отключена.

    Что пошло не так?

    1) Я знаю, что вроде как-то можно проверить рядом ли игрок с событием, но не помню.
    2) И более серьезная проблема, - при копировании каждый враг имеет свой уникальный ид. Проверка того рядом ли игрок с событием не должна включать в себя ид события. Нужно чтобы она проверяла ВСЕХ ВРАГОВ. Что можно сделать скорее всего скриптом, через event_note. Например, каждый враг будет иметь примечание 'enemy'. Если событие имеет это примечание, - проверяется рядом ли с ним игрок. И если игрок с ним рядом, - коллизия вкл. В теории, как-то так. Но как это сделать на практике, - не имею понятия. :<

    Неудачные попытки:

    Пробовал альтернативный путь. Создал на карте событие маску, которая появлялась перед игроком каждый раз, когда кнопка атаки нажата. И если враг касался события маска, - коллизия включалась. Но этот вариант работает некорректно, потому что я использую pixel movement, поделив каждый квадрат на 2. И без этого игра становится слишком топорной.
    Поэтому создание события маски - не вариант.
    Последний раз редактировалось Axel_Key; 19.04.2019 в 08:08.
    Древнее зло вновь пробудилось, чтобы оккупировать раздел помощи...

  2. #2
    Местный Аватар для Bibos
    Информация о пользователе
    Регистрация
    20.04.2017
    Сообщений
    127
    Записей в дневнике
    23
    Репутация: 9 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Axel_Key Посмотреть сообщение
    Что пошло не так?

    1) Я знаю, что вроде как-то можно проверить рядом ли игрок с событием, но не помню.
    2) И более серьезная проблема, - при копировании каждый враг имеет свой уникальный ид. Проверка того рядом ли игрок с событием не должна включать в себя ид события. Нужно чтобы она проверяла ВСЕХ ВРАГОВ. Что можно сделать скорее всего скриптом, через event_note. Например, каждый враг будет иметь примечание 'enemy'. Если событие имеет это примечание, - проверяется рядом ли с ним игрок. И если игрок с ним рядом, - коллизия вкл. В теории, как-то так. Но как это сделать на практике, - не имею понятия. :<
    .
    Я почти ничего не понял, но думаю проблема решится, если в страницу события врага засунуть общее событие проверки координат, которое будет выглядеть примерно так:
    Х игрока = игрок Х карты
    У игрока = игрок У карты
    Х врага = это событие Х карты
    У врага = это событие У карты
    УСЛОВИЕ Если Х игрока >= Х врага - 1
    _УСЛОВИЕ Если Х игрока =< Х врага + 1
    __УСЛОВИЕ Если У игрока >= Х врага - 1
    ___ УСЛОВИЕ Если У игрока =< У врага + 1
    _____________Коллизия = ВКЛ.

    Впрочем, в этом решении есть проблема в использовании переменных "Х и У врага" многими событиями и может возникнуть путаница, если событие будет запускаться одновременно у нескольких событий сразу(а оно будет).
    Хм. Можно сделать два события - мастер и раб. Мастер - это параллельное событие, которое делает все те крутые штуки со стрельбой и прочим. Раб - это событие, над которым событие-мастер делает штуки. Суть в том, что раб - это событие по столкновению или действию, в общем НЕ параллельное событие. А значит для такого события проверка не нужна - если игрок тыкнулся в него, то оно заработало.
    Последний раз редактировалось Bibos; 19.04.2019 в 23:24.
    Мои конкурсные проекты:
    Побег
    How many nights before
    Несчастная Изабелль
    Мои демо-версии:
    Mech city. Глава 1

  3. #3
    Маститый Аватар для Yuryol
    Информация о пользователе
    Регистрация
    06.03.2014
    Адрес
    Красноярск
    Сообщений
    1,420
    Записей в дневнике
    44
    Репутация: 60 Добавить или отнять репутацию

    По умолчанию

    тоже аксель кея не особо понял,если бы не та тема)

    бибос правильно все говорит,можешь только переменные не использовать,а сразу вместо Х игрока подставить скрипт и по остальным условиям также.

    про мастера и раба тоже верно говорит,правда немного путанно. в этой демке которую кинул в соседнюю тему (https://yadi.sk/d/b8O1pfdPN2c3jA) 3 событие - мастер, 1 и 2 событие - раб.

    в событиях рабов просто расставляешь переключатели,графику,марш рут движения.
    в событии мастера пишешь все столкновения,всю логику битв.

    во-первых,тогда у тебя будет всего одно параллельное событие.
    во-вторых, сразу вся логика будет перед глазами как только откроешь событие-мастер. не надо будет лазить в каждое событие и искать что на что влияет

  4. #4
    Местный Аватар для Axel_Key
    Информация о пользователе
    Регистрация
    26.03.2017
    Адрес
    Горно-Алтайск
    Сообщений
    155
    Записей в дневнике
    3
    Репутация: 2 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Yuryol Посмотреть сообщение
    тоже аксель кея не особо понял,если бы не та тема)

    про мастера и раба тоже верно говорит,правда немного путанно. в этой демке которую кинул в соседнюю тему (https://yadi.sk/d/b8O1pfdPN2c3jA)
    Можно тот же скрипт, но который проверяет столкновения игрока с событием по note? Появилась идея.

    Цитата Сообщение от Bibos Посмотреть сообщение
    может возникнуть путаница, если событие будет запускаться одновременно у нескольких событий сразу(а оно будет).
    Да, оно и случилось. В случае с обычными врагами, которые ходят и целятся в игрока, стреляя в него, - это не критично. Наоборот добавило врагам непредсказуемости. Но вот когда решил сделать врага чуть сложнее, - червя который ползет под землей, а потом выскакивает и стреляет в 4 стороны, - стало сложнее. Все черви одновременно прячутся под землю, когда я бью по одному из них. D:
    Сейчас думаю над решением этой проблемы...
    Последний раз редактировалось Axel_Key; 22.04.2019 в 13:43.
    Древнее зло вновь пробудилось, чтобы оккупировать раздел помощи...

  5. #5
    Местный Аватар для Axel_Key
    Информация о пользователе
    Регистрация
    26.03.2017
    Адрес
    Горно-Алтайск
    Сообщений
    155
    Записей в дневнике
    3
    Репутация: 2 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Bibos Посмотреть сообщение
    Хм. Можно сделать два события - мастер и раб. Мастер - это параллельное событие, которое делает все те крутые штуки со стрельбой и прочим. Раб - это событие, над которым событие-мастер делает штуки. Суть в том, что раб - это событие по столкновению или действию, в общем НЕ параллельное событие. А значит для такого события проверка не нужна - если игрок тыкнулся в него, то оно заработало.
    Я так уже делал, так то оно работает, но расставлять врагов, особенно когда их много, становится геморно. Конечно, на отдельный тип врагов, на тех же червей, попробовать можно. Есть еще вариант, но не знаю как его реализовать.. Yuryol посоветовал мне плагин, который проверяет столкновение с событием через переменную, работает это примерно так:

    Спойлер Скриншот:


    Общее событие Select event определяет, находится ли событие рядом с игроком, а потом включает переключатель "коллизия". В целом это работает, но коллизия влияет на всех врагов.
    Сам выбор события реализован через плагин и работает как-то так:
    Спойлер скриншот:


    Если понять, как сделать так, чтобы вместо переключателя "Коллизия" был "локальный переключатель А" в том событии, на которое ссылается "select event", то это должно сработать. Проблема лишь в том, что провернуть такое можно только скриптом, а как именно я не знаю.
    Древнее зло вновь пробудилось, чтобы оккупировать раздел помощи...

  6. #6
    Маститый Аватар для Yuryol
    Информация о пользователе
    Регистрация
    06.03.2014
    Адрес
    Красноярск
    Сообщений
    1,420
    Записей в дневнике
    44
    Репутация: 60 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Axel_Key Посмотреть сообщение
    Я так уже делал, так то оно работает, но расставлять врагов, особенно когда их много, становится геморно. Конечно, на отдельный тип врагов, на тех же червей, попробовать можно. Есть еще вариант, но не знаю как его реализовать.. Yuryol посоветовал мне плагин, который проверяет столкновение с событием через переменную, работает это примерно так:

    Спойлер Скриншот:


    Общее событие Select event определяет, находится ли событие рядом с игроком, а потом включает переключатель "коллизия". В целом это работает, но коллизия влияет на всех врагов.
    Сам выбор события реализован через плагин и работает как-то так:
    Спойлер скриншот:


    Если понять, как сделать так, чтобы вместо переключателя "Коллизия" был "локальный переключатель А" в том событии, на которое ссылается "select event", то это должно сработать. Проблема лишь в том, что провернуть такое можно только скриптом, а как именно я не знаю.
    ты про этот файл не знаешь? тут есть команда, которая перекючает локальный переключатель у определенного события https://docs.google.com/spreadsheets...OHs/edit#gid=0

    например пишешь
    $gameSelfSwitches.setValue([$gameMap.mapId(), 2, 'D'], true);
    и на текущей карте у события с id=2 включается локальный переключатель D

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Как проверить что игрок рядом с событием, через notetag события?