RPGXP 스크립트
2008.07.24 00:36

기차 파티 스크립트

조회 수 1879 추천 수 2 댓글 2
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
섹션 : Main 위에 Member_Train 이라고 새로 작성 해주세요

그리고 아래 스크립트를 넣어줍시다



#==============================================================================
# ■ Member_Train
#------------------------------------------------------------------------------
#  동료를 기차처럼 나란히 따라오게 만드는 클레스입니다.
#==============================================================================

module Train_Actor

# ●투명상태용 스윗치 설정
# true 라면 스윗치 제어를 실시한다
# TRANSPARENT_SWITCH = true
TRANSPARENT_SWITCH = false

# ●투명상태용 스윗치 번호
# TRANSPARENT_SWITCH 가 true 로 , 이 번호의 스윗치가 ON라면 투명하게 된다
TRANSPARENT_SWITCHES_INDEX = 20

# ●엑터의 최대수
# 장래적으로 많은 사람 파티를 생기게 되면…
TRAIN_ACTOR_SIZE_MAX = 4 #여기에 쓰인 숫자만큼까지의 동료가 따라다닐 수 있습니다.

# 정수
#Input::DOWN  = 2
#Input::LEFT  = 4
#Input::RIGHT = 6
#Input::UP    = 8
DOWN_LEFT  = 1
DOWN_RIGHT = 3
UP_LEFT    = 7
UP_RIGHT   = 9
JUMP       = 5

class Game_Party_Actor < Game_Character
  def initialize
    super()
    @through = true
  end
  def setup(actor)
    # 캐릭터의 파일명과 색상을 설정
    if actor != nil
      @character_name = actor.character_name
      @character_hue = actor.character_hue
    else
      @character_name = ""
      @character_hue = 0
    end
    # 불투명도와 합성 방법을 초기화
    @opacity = 255
    @blend_type = 0
  end
  def screen_z(height = 0)
    if $game_player.x == @x and $game_player.y == @y
      return $game_player.screen_z(height) - 1
    end
    super(height)
  end
  #--------------------------------------------------------------------------
  # ● 아래에 이동
  #     turn_enabled : 그 자리에서의 향해 변경을 허가하는 플래그
  #--------------------------------------------------------------------------
  def move_down(turn_enabled = true)
    # 아래를 향한다
    if turn_enabled
      turn_down
    end
    # 통행 가능한 경우
    if passable?(@x, @y, Input::DOWN)
      # 아래를 향한다
      turn_down
      # 좌표를 갱신
      @y += 1
    end
  end
  #--------------------------------------------------------------------------
  # ● 왼쪽으로 이동
  #     turn_enabled : 그 자리에서의 향해 변경을 허가하는 플래그
  #--------------------------------------------------------------------------
  def move_left(turn_enabled = true)
    # 왼쪽을 향한다
    if turn_enabled
      turn_left
    end
    # 통행 가능한 경우
    if passable?(@x, @y, Input::LEFT)
      # 왼쪽을 향한다
      turn_left
      # 좌표를 갱신
      @x -= 1
    end
  end
  #--------------------------------------------------------------------------
  # ● 오른쪽으로 이동
  #     turn_enabled : 그 자리에서의 향해 변경을 허가하는 플래그
  #--------------------------------------------------------------------------
  def move_right(turn_enabled = true)
    # 오른쪽을 향한다
    if turn_enabled
      turn_right
    end
    # 통행 가능한 경우
    if passable?(@x, @y, Input::RIGHT)
      # 오른쪽을 향한다
      turn_right
      # 좌표를 갱신
      @x += 1
    end
  end
  #--------------------------------------------------------------------------
  # ● 위에 이동
  #     turn_enabled : 그 자리에서의 향해 변경을 허가하는 플래그
  #--------------------------------------------------------------------------
  def move_up(turn_enabled = true)
    # 위를 향한다
    if turn_enabled
      turn_up
    end
    # 통행 가능한 경우
    if passable?(@x, @y, Input::UP)
      # 위를 향한다
      turn_up
      # 좌표를 갱신
      @y -= 1
    end
  end
  #--------------------------------------------------------------------------
  # ● 좌하에 이동
  #--------------------------------------------------------------------------
  def move_lower_left
    # 방향 고정이 아닌 경우
    unless @direction_fix
      # 오른쪽 방향이었던 경우는 왼쪽을 , 오름새였던 경우는 아래를 향한다
      @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::UP ? Input::DOWN : @direction)
    end
    # 하→왼쪽 , 좌→하의 어느 쪽인가의 코스가 통행 가능한 경우
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
       (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
      # 좌표를 갱신
      @x -= 1
      @y += 1
    end
  end
  #--------------------------------------------------------------------------
  # ● 우하에 이동
  #--------------------------------------------------------------------------
  def move_lower_right
    # 방향 고정이 아닌 경우
    unless @direction_fix
      # 좌향이었던 경우는 오른쪽을 , 오름새였던 경우는 아래를 향한다
      @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::UP ? Input::DOWN : @direction)
    end
    # 하→오른쪽 , 우→하의 어느 쪽인가의 코스가 통행 가능한 경우
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
       (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
      # 좌표를 갱신
      @x += 1
      @y += 1
    end
  end
  #--------------------------------------------------------------------------
  # ● 좌상에 이동
  #--------------------------------------------------------------------------
  def move_upper_left
    # 방향 고정이 아닌 경우
    unless @direction_fix
      # 오른쪽 방향이었던 경우는 왼쪽을 , 하향이었던 경우는 위를 향한다
      @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::DOWN ? Input::UP : @direction)
    end
    # 상→왼쪽 , 좌→상의 어느 쪽인가의 코스가 통행 가능한 경우
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
       (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
      # 좌표를 갱신
      @x -= 1
      @y -= 1
    end
  end
  #--------------------------------------------------------------------------
  # ● 우상에 이동
  #--------------------------------------------------------------------------
  def move_upper_right
    # 방향 고정이 아닌 경우
    unless @direction_fix
      # 좌향이었던 경우는 오른쪽을 , 하향이었던 경우는 위를 향한다
      @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::DOWN ? Input::UP : @direction)
    end
    # 상→오른쪽 , 우→상의 어느 쪽인가의 코스가 통행 가능한 경우
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
       (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
      # 좌표를 갱신
      @x += 1
      @y -= 1
    end
  end

  attr_writer :move_speed
  attr_writer :step_anime
end

module Spriteset_Map_Module
  def setup_actor_character_sprites?
    return @setup_actor_character_sprites_flag != nil
  end
  def setup_actor_character_sprites(characters)
    if !setup_actor_character_sprites?
      index_game_player = 0
      @character_sprites.each_index do |i|
        if @character_sprites[i].character.instance_of?(Game_Player)
          index_game_player = i
          break
        end
      end
      for character in characters.reverse
        @character_sprites.unshift(
          Sprite_Character.new(@viewport1, character)
        )
      end
      @setup_actor_character_sprites_flag = true
    end
  end
end

module Scene_Map_Module
  def setup_actor_character_sprites(characters)
    @spriteset.setup_actor_character_sprites(characters)
  end
end

module Game_Party_Module
  def set_transparent_actors(transparent)
    @transparent = transparent
  end
  def setup_actor_character_sprites
    if @characters == nil
      @characters = []
      for i in 1 ... TRAIN_ACTOR_SIZE_MAX
        @characters.push(Game_Party_Actor.new)
      end
    end
    for i in 1 ... TRAIN_ACTOR_SIZE_MAX
      @characters[i - 1].setup(actors[i])
    end
    if $scene.class.method_defined?('setup_actor_character_sprites')
      $scene.setup_actor_character_sprites(@characters)
    end
  end
  def update_party_actors
    setup_actor_character_sprites
    transparent = $game_player.transparent
    if transparent == false
      if TRANSPARENT_SWITCH
        transparent = $game_switches[TRANSPARENT_SWITCHES_INDEX]
      end
    end
    for character in @characters
      character.transparent = transparent
      character.move_speed = $game_player.move_speed
      character.step_anime = $game_player.step_anime
      character.update
    end
  end
  def moveto_party_actors( x, y )
    setup_actor_character_sprites
    for character in @characters
      character.moveto( x, y )
    end
    if @move_list == nil
      @move_list = []
    end
    move_list_setup
  end
  def move_party_actors
    if @move_list == nil
      @move_list = []
      move_list_setup
    end
    @move_list.each_index do |i|
      if @characters[i] != nil
        case @move_list[i].type
          when Input::DOWN
            @characters[i].move_down(@move_list[i].args[0])
          when Input::LEFT
            @characters[i].move_left(@move_list[i].args[0])
          when Input::RIGHT
            @characters[i].move_right(@move_list[i].args[0])
          when Input::UP
            @characters[i].move_up(@move_list[i].args[0])
          when DOWN_LEFT
            @characters[i].move_lower_left
          when DOWN_RIGHT
            @characters[i].move_lower_right
          when UP_LEFT
            @characters[i].move_upper_left
          when UP_RIGHT
            @characters[i].move_upper_right
          when JUMP
            @characters[i].jump(@move_list[i].args[0],@move_list[i].args[1])
        end
      end
    end
  end
  class Move_List_Element
    def initialize(type,args)
      @type = type
      @args = args
    end
    def type() return @type end
    def args() return @args end
  end
  def move_list_setup
    for i in 0 .. TRAIN_ACTOR_SIZE_MAX
      @move_list[i] = nil
    end
  end
  def add_move_list(type,*args)
    @move_list.unshift(Move_List_Element.new(type,args)).pop
  end
  def move_down_party_actors(turn_enabled = true)
    move_party_actors
    add_move_list(Input::DOWN,turn_enabled)
  end
  def move_left_party_actors(turn_enabled = true)
    move_party_actors
    add_move_list(Input::LEFT,turn_enabled)
  end
  def move_right_party_actors(turn_enabled = true)
    move_party_actors
    add_move_list(Input::RIGHT,turn_enabled)
  end
  def move_up_party_actors(turn_enabled = true)
    move_party_actors
    add_move_list(Input::UP,turn_enabled)
  end
  def move_lower_left_party_actors
    move_party_actors
    add_move_list(DOWN_LEFT)
  end
  def move_lower_right_party_actors
    move_party_actors
    add_move_list(DOWN_RIGHT)
  end
  def move_upper_left_party_actors
    move_party_actors
    add_move_list(UP_LEFT)
  end
  def move_upper_right_party_actors
    move_party_actors
    add_move_list(UP_RIGHT)
  end
  def jump_party_actors(x_plus, y_plus)
    move_party_actors
    add_move_list(JUMP,x_plus, y_plus)
  end
end

module Game_Player_Module
  def update
    $game_party.update_party_actors
    super
  end
  def moveto( x, y )
    $game_party.moveto_party_actors( x, y )
    super( x, y )
  end
  def move_down(turn_enabled = true)
    if passable?(@x, @y, Input::DOWN)
      $game_party.move_down_party_actors(turn_enabled)
    end
    super(turn_enabled)
  end
  def move_left(turn_enabled = true)
    if passable?(@x, @y, Input::LEFT)
      $game_party.move_left_party_actors(turn_enabled)
    end
    super(turn_enabled)
  end
  def move_right(turn_enabled = true)
    if passable?(@x, @y, Input::RIGHT)
      $game_party.move_right_party_actors(turn_enabled)
    end
    super(turn_enabled)
  end
  def move_up(turn_enabled = true)
    if passable?(@x, @y, Input::UP)
      $game_party.move_up_party_actors(turn_enabled)
    end
    super(turn_enabled)
  end
  def move_lower_left
    # 하→왼쪽 , 좌→하의 어느 쪽인가의 코스가 통행 가능한 경우
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::LEFT)) or
       (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::DOWN))
      $game_party.move_lower_left_party_actors
    end
    super
  end
  def move_lower_right
    # 하→오른쪽 , 우→하의 어느 쪽인가의 코스가 통행 가능한 경우
    if (passable?(@x, @y, Input::DOWN) and passable?(@x, @y + 1, Input::RIGHT)) or
       (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::DOWN))
      $game_party.move_lower_right_party_actors
    end
    super
  end
  def move_upper_left
    # 상→왼쪽 , 좌→상의 어느 쪽인가의 코스가 통행 가능한 경우
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::LEFT)) or
       (passable?(@x, @y, Input::LEFT) and passable?(@x - 1, @y, Input::UP))
      $game_party.move_upper_left_party_actors
    end
    super
  end
  def move_upper_right
    # 상→오른쪽 , 우→상의 어느 쪽인가의 코스가 통행 가능한 경우
    if (passable?(@x, @y, Input::UP) and passable?(@x, @y - 1, Input::RIGHT)) or
       (passable?(@x, @y, Input::RIGHT) and passable?(@x + 1, @y, Input::UP))
      $game_party.move_upper_right_party_actors
    end
    super
  end
  def jump(x_plus, y_plus)
    # 새로운 좌표를 계산
    new_x = @x + x_plus
    new_y = @y + y_plus
    # 가산치가 (0,0) 의 경우인가 , 점프처가 통행 가능한 경우
    if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y, 0)
      $game_party.jump_party_actors(x_plus, y_plus)
    end
    super(x_plus, y_plus)
  end
  
  attr_reader :move_speed
  attr_reader :step_anime
end

end # module Train_Actor

class Game_Party
  include Train_Actor::Game_Party_Module
end

class Game_Player
  include Train_Actor::Game_Player_Module
end

class Spriteset_Map
  include Train_Actor::Spriteset_Map_Module
end

class Scene_Map
  include Train_Actor::Scene_Map_Module
end

# Train_Actor
?
  • ?
    류휀 2010.10.14 02:41
    유용하게 쓸게요~
  • ?
    Sacrifar 2011.05.17 06:34

    그냥 스크립트만 갓다붙이니까 오류나네요 여기서 뭘 더 건드려줘야하나요??


  1. AraLab_MultiStartingPoint (다중 출발점 스크립트, 캐릭터 선택 스크립트) ver.0.2beta

    Date2014.01.21 CategoryRPGXP 스크립트 By 운 Views1974 Votes1
    Read More
  2. 아이템소지 한계돌파

    Date2010.10.24 CategoryRPGXP 스크립트 ByA.M.S Views1964 Votes0
    Read More
  3. 최초 시작화면에 제작자 정보를 띄워보자.

    Date2008.04.04 CategoryRPGXP 스크립트 By창조도시 Views1961 Votes5
    Read More
  4. 메뉴에 퀘스트 있는거

    Date2013.10.12 CategoryRPGXP 스크립트 By 운 Views1959 Votes2
    Read More
  5. 선택 메뉴를 가운데 정렬 해보자.

    Date2007.12.02 CategoryRPGXP 스크립트 By창조도시 Views1955 Votes2
    Read More
  6. 컷신 플러그인

    Date2020.10.30 CategoryRPGMV 플러그인 By스트레이보우 Views1942 Votes0
    Read More
  7. 요청하신 게이지바 스크립트 입니다.

    Date2013.10.04 CategoryRPGXP 스크립트 By소년영남 Views1921 Votes1
    Read More
  8. RPG Maker MV 한글 데이타베이스 입니다.

    Date2015.10.25 CategoryRPGMV 플러그인 By천무 Views1905 Votes3
    Read More
  9. 대화에 얼굴이 나오는 스크립트 by: killarot(네이버 dust_mite)(수정버전)

    Date2016.02.22 CategoryRPGXP 스크립트 By부초 Views1898 Votes0
    Read More
  10. Rpg Vx Ace 에서 이벤트 이름 팝업

    Date2014.01.17 CategoryRPGVX Ace 스크립트 By빙냥이 Views1898 Votes0
    Read More
  11. 그림자문자 사용하기.. 바탕색이 무슨색이건 상관없이 글자가 잘보인다!!!

    Date2007.11.06 CategoryRPGXP 스크립트 By창조도시 Views1888 Votes1
    Read More
  12. 기차 파티 스크립트

    Date2008.07.24 CategoryRPGXP 스크립트 By창조도시 Views1879 Votes2
    Read More
  13. 미니맵 스크립트

    Date2013.09.20 CategoryRPGXP 스크립트 By청담 Views1875 Votes0
    Read More
  14. 말풍선 메세지 스크립트

    Date2014.02.24 CategoryRPGXP 스크립트 By천둥번들 Views1855 Votes0
    Read More
  15. Action Sequence Pack 2 (전투모드 액션 플러그인)

    Date2016.01.05 CategoryRPGMV 플러그인 Byplam Views1824 Votes0
    Read More
  16. 상점에서 상세정보보여주기

    Date2010.10.24 CategoryRPGXP 스크립트 ByA.M.S Views1818 Votes0
    Read More
  17. 게임프레임 조절

    Date2013.09.20 CategoryRPGXP 스크립트 By청담 Views1814 Votes0
    Read More
  18. 대화 글씨 폰트를 원하는 폰트로 바꾸기

    Date2007.12.01 CategoryRPGXP 스크립트 By창조도시 Views1812 Votes2
    Read More
  19. 직업명 표시

    Date2010.10.24 CategoryRPGXP 스크립트 ByA.M.S Views1787 Votes0
    Read More
  20. 파티 선두 캐릭터 id 변수에 넣기

    Date2008.01.08 CategoryRPGXP 스크립트 ByEvangelista Views1786 Votes1
    Read More
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 15 Next
/ 15


[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)