Хорошо! Хорошо!:  0
Плохо! Плохо!:  0
Показано с 1 по 2 из 2

Тема: Состояния с таймером вызова состояний и/или общих событий (VX ACE)

  1. #1

    По умолчанию Состояния с таймером вызова состояний и/или общих событий (VX ACE)

    Подскажите, как исправить этот скрипт? Он попросту не работает и вызывает ошибку при запуске.
    По идее он должен выполнять такие задачи:

    1) проверять "примечания" в состоянии на наличие вот такого текста:
    <IR Buffs timer> 5, 47, 12 #все цифры тут для примера.
    5 - это время в секундах, 47 это накладываемое новое состояние, 12 это вызываемое общее событие (если наложение состояния или вызов общего события не нужны, вместо них пишется "ntg".

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

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

    Спойлер скрипт:
    Код:
    # Iron Raven's Buffs Timer Module
    module IR_BUFFS_TIMER
      def self.check_notes(note)
        # Читаем примечание
        if note =~ /<\s*IR\s+Buffs\s+timer\s*>(\s*\d+\s*,\s*(ntg|\d+)\s*,\s*(ntg|\d+)\s*)/
          values = $1.strip.split(",").map(&:strip)
          timer_value = values[0].to_i
          new_buff_id = values[1] == "ntg" ? nil : values[1].to_i
          common_event_id = values[2] == "ntg" ? nil : values[2].to_i
          return [timer_value, new_buff_id, common_event_id]
        end
        return nil
      end
    
      def self.check_statuses
        members = $game_party.members
        members.each do |actor|
          actor.states.each do |state|
            note_data = check_notes(state.note)
            next if note_data.nil?
            timer_value, new_buff_id, common_event_id = note_data
            duration = actor.state_duration(state.id)
            next unless duration > timer_value
            handle_buff_timer(actor, state.id, new_buff_id, common_event_id)
          end
        end
      end
    
      def self.handle_buff_timer(actor, buff_id, new_buff_id, common_event_id)
        if common_event_id
          $game_temp.reserve_common_event(common_event_id)
        end
        if new_buff_id && !actor.states.include?(new_buff_id)
          actor.add_state(new_buff_id)
        end
        actor.set_state_timer(buff_id, 0)
      end
    end
    
    # Параллельный процесс для проверки статусов
    class Scene_Map
      alias ir_map_update update
      def update
        ir_map_update
        IR_BUFFS_TIMER.check_statuses
      end
    end

  2. #2
    Новичок Аватар для FromVillage
    Информация о пользователе
    Регистрация
    14.08.2020
    Адрес
    Дальний восток. Амурка.
    Сообщений
    29
    Репутация: 2 Добавить или отнять репутацию

    По умолчанию

    Проще триггер в общих событиях сделать который каждые 5-10 кадров проверяет есть ли состояние на игроке:

    (Ждать 5-10 кадров)*
    Если игрок под состоянием Х:
    ---Включить переключатель 1.
    Если переключатель 1 включён
    ---Если игрок под состоянием Х:
    ------Ничего не делать
    ---Иначе
    ------выключить переключатель 1.
    ------(Если нужна задержка по времени: Ждать ? кадров)
    ------наложить состояние У. (и\или вызвать общее событие ЙЙЙ)


    Вот со снятием уже траблы, Как я помню ты тоже фалькао юзаешь, там чутка хитро. В обычном режиме jrpg не знаю как.

    При атаке врага наложить состояние которое тригерит общее событие типа:

    (Ждать 5-10 кадров)*
    Если наложено состояние З:
    ---Снять состояние Х,
    ---Выключить переключатель 1.


    Так же и таймеры прикрутить можно, вариантов много. Скрипт необязателен.
    *Кстати эти тригеры для оптимизации лучше сделать с ожиданием 5-10 кадров, не меньше.
    Если нужен какой то таймер, отдельное общее событие сделай:

    Ждать 60 кадров (1 секунда)
    Добавить к переменной +1
    Последний раз редактировалось FromVillage; Вчера в 12:55. Причина: Визуализировал для понимания
    Кодовое название моего проекта: "LCS". (RPGM VX Ace)
    Жанр: H+18, Hack'n'Slash, Элементы Action-RPG и RogueLike.
    Стадия: Разработка концепта почти окончена.

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

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

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

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

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

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

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
Состояния с таймером вызова состояний и/или общих событий (VX ACE)