Плохо! Плохо!:  0
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

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

  1. #1
    Хранитель Аватар для Paranoid
    Информация о пользователе
    Регистрация
    22.12.2014
    Сообщений
    2,776
    Записей в дневнике
    34
    Репутация: 28 Добавить или отнять репутацию

    Сообщение Зрение ивента по прямой

    Зрение ивента по прямой
    Автор: Я, то бишь Paranoid
    Версия: 1.0




    Описание:
    Этот скрипт позволяет ивентам видеть игрока по прямой.

    Особенности:
    • Работает даже если вы используете пиксельное движение.
    • Ивент так же не может видеть игрока, если он за непроходимыми тайлами.
    • Игрок может "прятаться в коробку" аля Солид Снейк.



    Использование:
    Засовываете в проект как обычно.
    Выставляете ивенту имя see
    ???
    Он вас видит

    Демо-версия:

    Не знаю нужна ли демка, но сейчас ее нет.

    Скрипт:

    Спойлер Код:
    Код:
    =begin
    -- Зрение противника
    -- Автор: ну наверное Paranoid. Хотя по сути это просто куча копипаста
    -- Версия: 1.0
    -- Лицензия: Свободная для коммерческих и некоммерческих проектов. Только в титрах укажите ник.
     
    Этот скрипт позволяет ивентам видеть игрока по прямой. Даже если вы используете
    пиксельное движение. Его можно настроить в блоке "Смотрит" заменив число 0.75
    на нужное вам или вообще убрав его. Числа 12 и 16 позволяют ивенту смотреть
    на расстояние всего экрана 12 клеток по Y и 16 по X. Если хотите уменьшить поле
    зрения до определеной длинны, то просто измените эти числа.
     
    Ивент так же не может видеть игрока, если он за непроходимыми тайлами.
     
    Так же игрок может прятаться в коробку аля Солид Снейк. За это отвечает свитч
    SW_IN_BOX, у меня он 3, можете поменять. Как работает: если вы в коробке (свитч)
    включен, то ивент не будет обращать на вас внимание, пока вы не двигаетесь.
     
    Чтобы просто проверить видимость используйте event_see?(event_id), дает true
    если игрока видно.
     
    P.S.: скрипт полукопипаста зрения от DeadElf79 с изменением принципа зрения
    =end
    ###########################################################################
    ################################# Настройки ###############################
    ###########################################################################
    module EnemyEvent
      EVENT_NAME = /see/i # Здесь "see" это имя зрячего ивента
      SSW_IF_SEE  = 'A'   # Свитч, который сработает в случае если героя увидят
      SW_IN_BOX = 3       # Свитч, который позволяет вам быть невидимым,
                          # если вы не двигаетесь
    end
    ###########################################################################
    ############################# Конец настроек ##############################
    ###########################################################################
     
    def event_see?(event_id)
    $game_map.events[event_id].can_see?($game_player.x,$game_player.y)
    end
     
    class Game_Event
    	def enemy?
    		self.name =~ EnemyEvent::EVENT_NAME
    	end
      def can_see?(px,py)
       # Смотрит
       case @direction
        when 8
         return true if py.between?(self.y-12, self.y) && px.between?(self.x-0.75, self.x+0.75) and for fy in (py.to_i..self.y) 
         return false if $game_map.passable?(self.x, fy, 8)!=true or $game_map.passable?(self.x, fy, 2)!=true
         end
        when 4
          return true if px.between?(self.x-16, self.x) && py.between?(self.y-0.75, self.y+0.75) and for fx in px.to_i..self.x 
          return false if $game_map.passable?(fx, self.y, 4)!=true or $game_map.passable?(fx, self.y, 6)!=true
          end
        when 6
          return true if px.between?(self.x, self.x+16) && py.between?(self.y-0.75, self.y+0.75) and for fx in self.x.to_i..px
          return false if $game_map.passable?(fx, self.y, 4)!=true or $game_map.passable?(fx, self.y, 6)!=true
          end
        when 2
          return true if py.between?(self.y, self.y+12) && px.between?(self.x-0.75, self.x+0.75) and for fy in self.y.to_i..py
          return false if $game_map.passable?(self.x, fy, 8)!=true or $game_map.passable?(self.x, fy, 2)!=true
          end
        end
        false
       end
    end
      class Game_Map
      attr_accessor :enemies
     
      alias enemy_event_setup setup
      def setup(map_id)
        enemy_event_setup(map_id)
        setup_enemies
      end
     
      def setup_enemies
        @enemies = []
        @events.each_value do |event|
          @enemies.push event if event.enemy?
        end
      end
    end
     
    class Scene_Map < Scene_Base
      alias enemy_event_update update
      def update
        enemy_event_update
        update_enemies
      end
     
      def update_enemies
        $game_map.enemies.each do |enemy|
    		next unless enemy_on_screen?(enemy)
    		x, y = $game_player.x, $game_player.y
    		see_now = false
    		if enemy.can_see?(x,y)
    			if $game_switches[ EnemyEvent::SW_IN_BOX ]
    				# player is in box
    				if $game_player.moving?
    					see_now = true
    				end
    			else
    				# player is not in box
    				see_now = true
    			end
    		end
    		if see_now
    			$game_map.events[enemy.id].balloon_id = 1
    		end
    		# Реакция на игрока
    		key = [$game_map.map_id, enemy.id, EnemyEvent::SSW_IF_SEE]
    		$game_self_switches[key] = see_now
    		enemy.refresh
    	end
      end
     
      def enemy_on_screen?(event)
        stx = $game_map.screen_tile_x
        sty = $game_map.screen_tile_y
        sx = $game_map.modw($game_player.x)*stx
        sy = $game_map.modh($game_player.y)*sty
        if (sx..sx+stx).include? event.x
          if (sy..sy+sty).include? event.y
            return true
          end
        end
        false
      end
    end


    P.S.: Спасибо Эльфу за помощь с переделке скрипта.
    Последний раз редактировалось Paranoid; 13.03.2017 в 19:19.
    Лицензионный VX Ace. Спасибо Петр.
    2 года мукеризма в пустую.

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

    По умолчанию

    Не работает, выдаёт ошибку

  3. #3

    По умолчанию

    Цитата Сообщение от Lower Посмотреть сообщение
    Не работает, выдаёт ошибку
    Скрина ошибки конечно же нету. Запомните, ошибки вы можете решить сами, хотя бы прочитав что там написано.

  4. #4
    Хранитель Аватар для Paranoid
    Информация о пользователе
    Регистрация
    22.12.2014
    Сообщений
    2,776
    Записей в дневнике
    34
    Репутация: 28 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Lower Посмотреть сообщение
    Не работает, выдаёт ошибку
    К сожалению, я не экстрасенс. Поэтому мне бы текст ошибки и описание того что ты делал со скриптом.
    Лицензионный VX Ace. Спасибо Петр.
    2 года мукеризма в пустую.

  5. #5
    Хранитель Аватар для Paranoid
    Информация о пользователе
    Регистрация
    22.12.2014
    Сообщений
    2,776
    Записей в дневнике
    34
    Репутация: 28 Добавить или отнять репутацию

    По умолчанию

    Поправил серьезный косяк, из-за которого при движении ивента вниз и вправо вылетала ошибка.
    Лицензионный VX Ace. Спасибо Петр.
    2 года мукеризма в пустую.

  6. #6
    Маститый Аватар для Seibur
    Информация о пользователе
    Регистрация
    07.01.2012
    Адрес
    Изумрудный город
    Сообщений
    1,206
    Записей в дневнике
    3
    Репутация: 58 Добавить или отнять репутацию

    По умолчанию

    Мое имхо - Параноид молодец, хороший скрипт
    Прохлада и спокойствие мне вполне по душе

    Спойлер :

    き っ と 、 女 の 子 は お 砂 糖 と ス パ イ ス と 素 敵 な 何 か で で き て い る。

  7. #7
    Авторитет Аватар для Bloody
    Информация о пользователе
    Регистрация
    22.04.2008
    Сообщений
    1,752
    Записей в дневнике
    94
    Репутация: 36 Добавить или отнять репутацию

    По умолчанию

    Я бы еще в скрипт добавил возможность приседать/пригинаться, чтобы проползать за столами и прятаться за низкими укрытиями типа бочек. У меня в проекте такое есть, но работает не без косяков.
    Проекты:
    Мини-игры: El Presidente -- Red & Blue -- Roll Me Away -- Wizard's Revenge
    На перерыве: Mémoire
    Кажется, заброшены: Street Magic -- Hack in the Dark

  8. #8
    Хранитель Аватар для Paranoid
    Информация о пользователе
    Регистрация
    22.12.2014
    Сообщений
    2,776
    Записей в дневнике
    34
    Репутация: 28 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Bloody Посмотреть сообщение
    Я бы еще в скрипт добавил возможность приседать/пригинаться, чтобы проползать за столами и прятаться за низкими укрытиями типа бочек. У меня в проекте такое есть, но работает не без косяков.
    Это для мейкера не нужные фичи да и не реализуемые (для меня по крайней мере). Хотя бы потому что нельзя определить за каким именно препятствием ты прячешься.
    А так у меня уже есть фича для пряток в коробке, можно ее перепрофилировать.
    Лицензионный VX Ace. Спасибо Петр.
    2 года мукеризма в пустую.

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

    По умолчанию

    Цитата Сообщение от Paranoid Посмотреть сообщение
    Это для мейкера не нужные фичи да и не реализуемые (для меня по крайней мере). Хотя бы потому что нельзя определить за каким именно препятствием ты прячешься.
    А так у меня уже есть фича для пряток в коробке, можно ее перепрофилировать.
    есть же теги у тайлов. Поставить тайлам бочки нужный тег, добавить проверку по ним и всё

  10. #10
    Хранитель Аватар для Paranoid
    Информация о пользователе
    Регистрация
    22.12.2014
    Сообщений
    2,776
    Записей в дневнике
    34
    Репутация: 28 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Yuryol Посмотреть сообщение
    есть же теги у тайлов. Поставить тайлам бочки нужный тег, добавить проверку по ним и всё
    Поставьте. Я не запрещаю редактировать скрипт. У меня и так там были проблемы с настройкой видимости сквозь проходимые тайлы, а тут еще и новые условия для видимости-невидимости ставить. Я сам только проверку видимости сделал, остальное у Эльфа скопировано, плюс он мне помогал с "коробкой". Так что я не потяну такое.
    Лицензионный VX Ace. Спасибо Петр.
    2 года мукеризма в пустую.

Страница 1 из 2 12 ПоследняяПоследняя

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

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

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

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

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

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

Ваши права

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