Показано с 1 по 10 из 17

Тема: Зрение ивента по прямой

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #16

    По умолчанию

    Есть мысль об улучшении скрипта, но к сожалению я не знаю как это сделать. Пробовал подружить этот скрипт и скрипт Moghunter - Event Sensor Range (v1.0).
    Спойлер MOG - Event Sensor Range (v1.0):
    Код:
    #==============================================================================
    # +++ MOG - Event Sensor Range (v1.0) +++
    #==============================================================================
    # By Moghunter
    # https://atelierrgss.wordpress.com/
    #==============================================================================
    # Permite que o evento tenha dois comportamentos, de curta distância e de 
    # longa distância.
    #===============================================================================
    # - Utilização
    # Crie uma página com a condição de ativação Self Switch D, está página será 
    # usada quando o player estiver perto do evento.
    # Defina a area do sensor do evento colocando este nome no evento.
    #
    # <SensorX>
    #
    # X = Area do Sensor
    #
    #===============================================================================
    module MOG_EVENT_SENSOR
      #Definição da letra da Self Switch que ativará a página de curta distância.
      SENSOR_SELF_SWITCH = "C"
    end
     
    #===============================================================================
    # ■ GAME EVENT
    #===============================================================================
    class Game_Event < Game_Character
      
      attr_reader   :sensor_range
      
      #--------------------------------------------------------------------------
      # ● Initialize
      #--------------------------------------------------------------------------            
      alias mog_event_sensor_initialize initialize
      def initialize(map_id, event)
          mog_event_sensor_initialize(map_id, event)
          setup_event_sensor
      end
      
      #--------------------------------------------------------------------------
      # ● Setup Event Sensor
      #--------------------------------------------------------------------------          
      def setup_event_sensor
          @sensor_range =  @event.name =~ /<Sensor(\d+)>/ ? $1.to_i : 0
      end  
      
      #--------------------------------------------------------------------------
      # ● Update
      #--------------------------------------------------------------------------            
      alias mog_event_sensor_update update 
      def update
          mog_event_sensor_update
          update_event_sensor 
      end  
      
      #--------------------------------------------------------------------------
      # ● Update Sensor
      #--------------------------------------------------------------------------        
      def update_event_sensor 
          return if @sensor_range == 0
          distance = ($game_player.x - self.x).abs + ($game_player.y - self.y).abs
          enable   = (distance <= @sensor_range)
          key = [$game_map.map_id, self.id, MOG_EVENT_SENSOR::SENSOR_SELF_SWITCH]
          last_enable = $game_self_switches[key]
          execute_sensor_effect(enable,key) if enable != last_enable
        end
     
      #--------------------------------------------------------------------------
      # ● Execute_Sensor Effect
      #--------------------------------------------------------------------------            
      def execute_sensor_effect(enable,key)
          @pattern = 0 ; @pattern_count = 0
          $game_self_switches[key] = enable ;  self.refresh
      end
        
    end
     
    $mog_rgss3_event_sensor = true


    Вроде как лицензия от MOG позволяет редактировать скрипт, только нужно указывать какие изменения внесли в подзаголовок, не удалять авторство MOG и не менять название скрипта. Лицензия позволяет использовать скрипт для коммерческих и бесплатных целей, только автора скрипта нужно указывать в игре (титры и т.п.).

    Я сперва хотел не редактировать его скрипт и использовать два скрипта сразу, потому что они не конфликтовали выдавая ошибки с вылетами.
    Однако оба скрипта, ссылаясь на один локальный переключатель, как и подозревал, стали "колбасить" ивент) он стал ходить диагоналями и постепенно пытаться сблизиться с игроком. Выглядит очень забавно и тупо) Мне пришлось поменять локальный переключатель скрипта MOG на "B", оставив "C" для Event See скрипта с этой темы, но я попробовал запускать локальный переключатель "C" через действия в переключателе "B", ради теста. Конечно это привело к тому что ивент снова "колбасило". Копировать функции с переключателя "C" (Event See) на переключатель "B" (MOG) это очень неразумно, поскольку при больших действиях придётся всё каждый раз копировать, да и вообще в целом ссылаться на другой переключатель неразумно, поскольку мы теряем нужный слот локального переключателя.

    Пробовал покопаться в обоих скриптах и ставить условия из игровых переключателей (не локальных), но увы, это ни к чему не привело, т.к. Event See постоянно выполняет update, из-за чего переключатель "дрыгается", не давая нормально заработать скрипту MOG, от чего ивент смешно поднимает ногу, в попытке заагриться на игрока, но не двигается в его сторону, потому что update из Event See постоянно его глушит, обновляя переключатель, не давая перейти к действиям))

    В процессе возни я пришёл к интересной задумке. Что, если объединить возможности Event See со скриптом от MOG? Вот как можно было бы реализовать функционал:
    Спойлер Идея:

    игрок зажимает клавишу "Q" или любую другую из доступных мейкерских (можно заменить на свои клавиши, например взяв клавиши из модуля скрипта на полную раскладку, и ссылаясь на кнопки из модуля - это не проблема, так что можно пользователю для примера просто оставить встроенную в мейкер клавишу Q, а дальше он поменяет на свою если что), от нажатия Q включается переключатель, который просто запускает общее событие, в котором настроена череда действий. Переключатель отвечает за включение режима "скрытность". В общем событии мы искусственно понижаем (или вообще не трогаем, как угодно) скорость перемещения игрока в действиях, запрещаем спринт (можем проводить всякие проверки на всё это, как душе угодно, если вдруг захочется больше рпгшности с добавлением перков и т.д.) - получается такая имитация подкрадывания. Цель не видя игрока своими глазами, проверяет радиус вокруг себя "на слух" (по мимо радиуса можно в скрипте попробовать указать и проверку уровня через число в имени ивента, чем выше число, тем лучше слышит), а игроку можно дать пассивные способности, обозначающие его умения скрытности. Создаём несколько таких способностей, каждая будет отвечать за уровень перка скрытности и на ивентах мы просто удаляем одну способность и заменяем на другую при повышении/понижении уровня умения.
    В скрипте указываем каким числам из переменной слуха удовлетворяют какие способности - пример:
    # x => [y]
    {
    1 => [1, 2, 3, 4, 5],
    2 => [2, 3, 4, 5],
    3 => [3, 4, 5],
    4 => [4, 5],
    5 => [5]
    }
    Где в "X" указываем уровень слуха в имени ивента, а где "Y" указываем id способностей, которые должны быть, чтобы слух ивента не сработал. Если у игрока нет такой способности то делаем ему шанс, что когда он подкрадывается, 30% шанс при каждом update, что игрок себя обнаружит, даже если стоит на месте (обновление же идёт покадрово, верно?) Так что игрок получается всякий раз будет рисковать, если уровень его умения красться не дотягивает до уровня слуха моба. Будет круто если проверка будет затрагивать всех членов партии, и если хоть один не соответствует умению красться - он подводит всю группу.
    Но всё это касается слуха по радиусу. А что же до зрения? Зрение мы можем оставить как есть, и оно срабатывает независимо от слуха и умения скрытности игрока, просто когда моб видит игрока, сразу же и идёт на него без всяких проверок, но при этом, чего скрипту зрения не хватает - чтобы моб, увидев игрока, бежал на него и не забывал о игроке, даже если игрок уже забежал за угол, так-как он уже был замечен мобом, и пока игрок не скроется от него в "ящик" (пока переключатель "ящика" не включен) - моб будет преследовать его.
    Просто по умолчанию, в скрипте Event See, ивент быстро забывает об увиденном игроке, стоит ему только уйти с поля зрения, что выглядит крайне нелогично, лично я не вижу смысла отключать поиск игрока, если игрок уже был замечен и не спрятался ни в какой ящик. Будет круто дополнить скрипт, если игрок замечен именно глазами, и пытается скрыться в ящик находясь в поле зрения, игра ему просто не даст это сделать. (включать переключатель, запрещающий прятаться в ящики, пока находишься в поле зрения)

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

    Как можно записать проверки в ивент: <Sensor5>4/see/Робот (<Sensor5> - проверка радиуса слуха, 4 - уровень слуха для проверок способностей, /see/ - может ли ивент заметить игрока глазами перед собой (кстати, можно оставить гибкую настройку этого зрения, потому что она позволяет улучшить зрение в ширь и длину - Paranoid предусмотрел), а Робот - это любое имя ивента, какое угодно, просто как пример)


    Знаю, что это можно было описать проще, но писал этот текст ночью) В общем мой уровень точно не позволит написать скрипт такого рода, но если кто шарит и есть желание так прокачать скрипт, возьмите пожалуйста скрипт MOG и обновлённый нейросетью и мной скрипт Event See от Paranoid'а, что я кидал в сообщении выше (версия 1.1), из них можно слепить действительно крутой скрипт, позволяющий наконец, нормально реализовать систему скрытности на RPG Maker VX Ace, которой уже давно не хватало для игр с элементами стелса.
    Последний раз редактировалось Sleeping Visitor; 26.08.2025 в 01:29.

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

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

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

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

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

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

Ваши права

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