Войти на сайт

Авторизация, ждите ...
×

ТЕМА: Автоматическая дверь

Автоматическая дверь 10 года 9 мес. назад #62936

  • Sypherot
  • Sypherot аватар
  • Вне сайта
  • Заблокирован
  • Сообщений: 1239
  • Спасибо получено: 1044
  • Проект месяца 2 место2 место Проект месяца 3 местоПаладинДаритель Стимкея2 место ГотвПроект месяца 1 местоЗа 3 место на конкурсе маппингаОратор
Скрипт от LiTTleDRAgo, запускающий анимацию открытия двери, когда игрок приближается к ней.
Для этого нужно обозвать событие с чарсетом двери (в названии чарсета, по-видимому, должно быть слово door, поскольку с теми же сундуками у меня этот скрипт не заработал, вызвав краш игры) "Door" и поставить галочку напротив опции "Through". Таким макаром получим отличную дверь для домов с привидениями, космических кораблей и т. д.
Собсно сам скрипт:
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
# [Xp/Vx-VxA] Automatic Door
# Version: 2.00
# Author : LiTTleDRAgo
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
#==============================================================================
# ■ Game_Event
#------------------------------------------------------------------------------
#  イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理
# イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。
#==============================================================================
class Game_Event < Game_Character
 
  VX = defined?(Window_ActorCommand)
  VXA = defined?(Window_BattleActor)
  DOOR_SOUND = ["Audio.se_play('Audio/SE/Open1', 90, 100)", # Opened Door
                "Audio.se_play('Audio/SE/Close1', 90, 100)"] # Closed Door
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias :drg145_upd :update unless method_defined?(:drg145_upd)
  def update
    drg145_upd
    update_autodoor
  end
  #--------------------------------------------------------------------------
  # ● ドアの全て
  #--------------------------------------------------------------------------  
  def update_autodoor
    interpreter = VX ? $game_map.interpreter.running? : 
                  $game_system.map_interpreter.running?
    if @event.name =~ /Door/i && @page.through && !interpreter
      distance,type = ($game_player.real_x-@real_x).abs+
                      ($game_player.real_y-@real_y).abs, 1
      number = VXA ? [0.5,1.0,1.5] : VX ? [216,232,248] : [128,132,148]
      distance = [distance-32,0].max if !VXA
      case distance
      when 0...number[0]
        return if @direction == 8
        door_se(type * 2) if @direction == 2
        turn_up
        @wait_count = 6
      when number[0]...number[1]
        return if @direction == 6
        if @direction > 6 && @wait_count > 0
          @wait_count -= 1
        elsif @direction == 8
          turn_right
          @wait_count = 6
        else
          door_se(type * 2) if @direction == 2
          turn_right
          @wait_count = 6
        end
      when number[1]...number[2] # 
        return if @direction == 4
        if @direction > 4 && @wait_count > 0
          @wait_count -= 1
        elsif @direction == 8
          turn_right
          @wait_count = 6
        elsif @direction == 6
          turn_left
          @wait_count = 6
        else
          door_se(type * 2) if @direction == 2
          turn_left
          @wait_count = 6
        end
      else 
        return if @direction == 2
        if @direction > 2 and @wait_count > 0
          @wait_count -= 1
        elsif @direction == 8
          turn_right
          @wait_count = 6
        elsif @direction == 6
          turn_left
          @wait_count = 6
        elsif @direction == 4
          door_se(type * 2 + 1)
          turn_down
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● セト ヂレクシオン
  #--------------------------------------------------------------------------
  if VXA
    def turn_up()   set_direction(8) end
    def turn_right()set_direction(6) end 
    def turn_left() set_direction(4) end
    def turn_down() set_direction(2) end
  end
  #--------------------------------------------------------------------------
  # ● ドアの SE 設定
  #--------------------------------------------------------------------------
  def door_se(type)
    case type
    when 2 then eval(DOOR_SOUND[0]) rescue nil
    when 3 then eval(DOOR_SOUND[1]) rescue nil
    end
  end
end
Всего хорошего, и спасибо за рыбу
Последнее редактирование: 9 года 2 мес. назад от DeadElf79.
Администратор запретил публиковать записи гостям.
За этот пост поблагодарили: DeadElf79

Автоматическая дверь 10 года 9 мес. назад #62943

  • sando
  • sando аватар
  • Вне сайта
  • Светлый дракон
  • Сообщений: 862
  • Спасибо получено: 925
  • УчительОраторПисатель 2 местоОрганизатор конкурсовПисательПаладин3 местоХудожникПобедитель конкурса2 место
Опробовала скрипт. Работает и с другими чарсетами, если в названии Door. Беда, что звук там уже задан. Еще недостаток: дверь открывается не до конца.
vk.com/sando_rpgmaker - пустая болтовня (приходите)
Администратор запретил публиковать записи гостям.
Модераторы: NeKotZima
Время создания страницы: 0.229 секунд