질문과 답변

Extra Form
종류 스크립트 사용

S.PNG


위와 같이 몬스터도감에서 몬스터의 능력치나 정보 부분란을 제거하고 사진첩 기능으로 사용하려고 하는데요.
도감을 수집하려면 몬스터를 직접 만나 물리쳐야지만 도감에 수집이 되더라구요.
하지만 제작 중인 게임이 생활형 게임이라 전투 없이 도감에 특정 몬스터를 수집하고 싶은데 방법이 없을까요?
아래는 사용중인 스크립트입니다.



$game_special_elements = {}
$imported = {}
$data_states = load_data("Data/States.rxdata")
$data_system = load_data("Data/System.rxdata")



#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/  ◆モンスター図鑑 - KGC_MonsterGuide◆
#_/----------------------------------------------------------------------------
#_/ モンスター図鑑を作成します。
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

# 導入済みフラグをオン
$imported["MonsterGuide"] = true
#==============================================================================
# ★ カスタマイズ項目 ★
#==============================================================================


# ◆図鑑から隠すモンスター
#  非表示にしたい敵のIDを配列に格納
$hide_enemies = [16]

class Window_MonsterGuideRight < Window_Base
  # ◆属性耐性を調べる範囲(属性ID)
  ELEMENT_RANGE = 1..8

  # ◆弱点属性文字色
  WEEK_COLOR = Color.new(255, 128, 128)
  # ◆耐性属性文字色
  RESIST_COLOR = Color.new(128, 128, 255)
end

class Scene_MonsterGuide
  # ◆カーソル移動で表示内容更新
  #  false にすると、C ボタンを押すまで再描画しない
  #  (重く感じない場合は true のままでOK)
  MOVE_REFRESH = true
end

class Scene_Battle
  # ◆変身前の敵も撃破
  #  false にすると、変身前の敵は撃破したと見なされない
  MG_ORIGINAL_DEFEAT = true
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#--------------------------------------------------------------------------
# ● モンスター図鑑呼び出し
#--------------------------------------------------------------------------
def call_monster_guide
  # プレイヤーの姿勢を矯正
  $game_player.straighten
  # モンスター図鑑画面に切り替え
  $scene = Scene_MonsterGuide.new
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_System
#------------------------------------------------------------------------------
#  システム周りのデータを扱うクラスです。BGM などの管理も行います。このクラス
# のインスタンスは $game_system で参照されます。
#==============================================================================

class Game_System
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor :enemy_encountered        # 遭遇済みフラグ
  attr_accessor :enemy_defeated           # 撃破済みフラグ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_KGC_MonsterGuide initialize
  def initialize
    # 元の処理を実行
    initialize_KGC_MonsterGuide

    @enemy_encountered = []
    @enemy_defeated = []
  end
  #--------------------------------------------------------------------------
  # ● エネミー存在チェック
  #--------------------------------------------------------------------------
  def enemy_exist?(enemy_id)
    return $data_enemies[enemy_id] != nil && $data_enemies[enemy_id].name != ""
  end
  #--------------------------------------------------------------------------
  # ● 存在する敵の種類数取得
  #--------------------------------------------------------------------------
  def all_enemies_count
    n = 0
    # 存在する敵の種類数を取得
    for i in 1...$data_enemies.size
      next if !enemy_exist?(i) || $hide_enemies.include?(i)
      n += 1
    end
    return n
  end
  #--------------------------------------------------------------------------
  # ● 撃破した敵の種類数取得
  #--------------------------------------------------------------------------
  def defeated_enemies_count
    n = 0
    # 撃破した敵の種類数を取得
    for i in 1...$data_enemies.size
      next if !enemy_exist?(i) || !@enemy_encountered[i] ||
        !@enemy_defeated[i] || $hide_enemies.include?(i)
      n += 1
    end
    return n
  end
  #--------------------------------------------------------------------------
  # ● モンスター図鑑完成度の取得
  #--------------------------------------------------------------------------
  def monster_guide_completion
    return defeated_enemies_count * 100 / all_enemies_count
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
#  エネミーを扱うクラスです。このクラスは Game_Troop クラス ($game_troop) の
# 内部で使用されます。
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :original_id              # 変身前のID
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     troop_id     : トループ ID
  #     member_index : トループメンバーのインデックス
  #--------------------------------------------------------------------------
  alias initialize_KGC_MonsterGuide initialize
  def initialize(troop_id, member_index)
    # 元の処理を実行
    initialize_KGC_MonsterGuide(troop_id, member_index)

    @original_id = []
    # 遭遇済みフラグをオン
    unless @hidden
      $game_system.enemy_encountered[@enemy_id] = true
    end
  end
  #--------------------------------------------------------------------------
  # ● 変身
  #     enemy_id : 変身先のエネミー ID
  #--------------------------------------------------------------------------
  alias transform_KGC_MonsterGuide transform
  def transform(enemy_id)
    # 変身前のIDを保存
    @original_id.push(@enemy_id)

    # 元の処理を実行
    transform_KGC_MonsterGuide(enemy_id)

    # 変身後の敵も遭遇済みにする
    $game_system.enemy_encountered[@enemy_id] = true
  end
  #--------------------------------------------------------------------------
  # ● 隠れ状態設定
  #--------------------------------------------------------------------------
  def hidden=(value)
    @hidden = value
    # 出現した場合は遭遇済みフラグをオン
    unless @hidden
      $game_system.enemy_encountered[@enemy_id] = true
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_MonsterGuideTop
#------------------------------------------------------------------------------
#  モンスター図鑑画面で、完成度を表示するウィンドウです。
#==============================================================================

class Window_MonsterGuideTop < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 240, 96)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 160
    refresh
  end
#--------------------------------------------------------------------------
  # ● 회복(refresh)
   #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    text = "수집:#{$game_system.defeated_enemies_count}/#{$game_system.all_enemies_count}"
    self.contents.draw_shadow_text(0, 0, width - 32, 32, text)
    text = "완성도:#{$game_system.monster_guide_completion}%"
    self.contents.draw_shadow_text(0, 32, width - 32, 32, text)
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_MonsterGuideLeft
#------------------------------------------------------------------------------
#  モンスター図鑑画面で、モンスター一覧を表示するウィンドウです。
#==============================================================================

class Window_MonsterGuideLeft < Window_Selectable
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 96, 240, 384)
    self.index = 0
    self.back_opacity = 160
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 選択モンスターの取得
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = []
    # 存在するエネミーを取得
    for i in 1...$data_enemies.size
      next if !$game_system.enemy_exist?(i) || $hide_enemies.include?(i)
      @data.push($data_enemies[i])
    end
    # 項目数が 0 でなければビットマップを作成し、全項目を描画
    @item_max = @data.size
    if @item_max > 0
      self.contents = Bitmap.new(width - 32, row_max * 32)
      for i in 0...@item_max
        draw_item(i)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 項目の描画
  #     index : 項目番号
  #--------------------------------------------------------------------------
  def draw_item(index)
    enemy = @data[index]
    # 撃破していれば通常文字色に、そうでなければ無効文字色に設定
    if $game_system.enemy_defeated[enemy.id]
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4
    y = index * 32
    rect = Rect.new(x, y, self.width - 40, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    # 遭遇していれば名前、遭遇していなければ?を描画
    if $game_system.enemy_encountered[enemy.id]
      self.contents.draw_text(x, y, self.width - 40, 32, enemy.name)
    else
      self.contents.draw_text(x, y, self.width - 40, 32, "? ? ? ? ? ? ? ?", 1)
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Window_MonsterGuideRight
#------------------------------------------------------------------------------
#  モンスター図鑑画面で、ステータスを表示するウィンドウです。
#==============================================================================

class Window_MonsterGuideRight < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(240, 0, 400, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 160
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #     enemy       : エネミー
  #     show_status : ステータス表示
  #--------------------------------------------------------------------------
  def refresh(enemy, show_status = true)
    self.contents.clear
    # 遭遇していない場合はNo data
    unless $game_system.enemy_encountered[enemy.id]
      self.contents.font.color = disabled_color
      self.contents.draw_text(0, 208, 368, 32, "- No Data -", 1)
      return
    end
    # バトラー画像を描画
    bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue)
    cw = bitmap.width; ch = bitmap.height
    src_rect = Rect.new(0, 0, cw, ch)
    self.contents.blt(184 - cw / 2, 0, bitmap, src_rect)
    # ステータス非表示の場合は戻る
    return unless show_status
    # 撃破済みの場合、詳細情報も描画
    if $game_system.enemy_defeated[enemy.id]
      # ステータスを描画
      # 弱点属性描画
      text = ""
      for i in ELEMENT_RANGE
        # 有効度が3未満(A,B)ならば弱点
        if enemy.element_ranks[i] < 3
          # 属性名を追加
          text += "/" if text != ""
          text += $data_system.elements[i]
        end
      end
      self.contents.font.color = WEEK_COLOR.dup
      self.contents.draw_text(104, 320, 264, 32, text)
      # 耐性属性描画
      text = ""
      for i in ELEMENT_RANGE
        # 有効度が3より大きい(D,E,F)ならば耐性
        if enemy.element_ranks[i] > 3
          # 属性名を追加
          text += "/" if text != ""
          text += $data_system.elements[i]
        end
      end
     
      # アイテム描画
      
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_MonsterGuide
#------------------------------------------------------------------------------
#  モンスター図鑑画面の処理を行うクラスです。
#==============================================================================

class Scene_MonsterGuide
  #--------------------------------------------------------------------------
  # ● メイン処理
  #--------------------------------------------------------------------------
  def main
    # スプライトセット作成
    @spriteset = Spriteset_Map.new
    # 図鑑ウィンドウを作成
    @guide_top_window = Window_MonsterGuideTop.new
    @guide_left_window = Window_MonsterGuideLeft.new
    @guide_right_window = Window_MonsterGuideRight.new
    # ステータス表示
    @show_status = true
    # エネミーオブジェクトを指定
    enemy = @guide_left_window.item
    # 情報描画
    @guide_right_window.refresh(enemy, @show_status)
    # トランジション実行
    Graphics.transition
    # メインループ
    loop do
      # ゲーム画面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレーム更新
      update
      # 画面が切り替わったらループを中断
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @spriteset.dispose
    @guide_top_window.dispose
    @guide_left_window.dispose
    @guide_right_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    # ウィンドウを更新
    @guide_top_window.update
    @guide_left_window.update
    @guide_right_window.update
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      # マップ画面に切り替え
      $scene = Scene_Map.new
      return
    end
    # A ボタンが押された場合
    if Input.trigger?(Input::A)
      # 決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      # ステータス表示を切り替え
      @show_status = !@show_status
      # エネミーオブジェクトを指定
      enemy = @guide_left_window.item
      # 情報描画
      @guide_right_window.refresh(enemy, @show_status)
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      # 決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      # エネミーオブジェクトを指定
      enemy = @guide_left_window.item
      # 情報描画
      @guide_right_window.refresh(enemy, @show_status)
      return
    end
    if MOVE_REFRESH
      # カーソルが移動した場合
      if @last_index != @guide_left_window.index
        # インデックス保存
        @last_index = @guide_left_window.index
        # エネミーオブジェクトを指定
        enemy = @guide_left_window.item
        # 情報描画
        @guide_right_window.refresh(enemy, @show_status)
        return
      end
    end
  end
end

#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★

#==============================================================================
# ■ Scene_Battle (分割定義 2)
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # ● アフターバトルフェーズ開始
  #--------------------------------------------------------------------------
  alias start_phase5_KGC_MonsterGuide start_phase5
  def start_phase5
    # トループ全体をループ
    for enemy in $game_troop.enemies
      # エネミーが隠れ状態の場合は次へ
      next if enemy.hidden
      # 撃破済みフラグをオン
      $game_system.enemy_defeated[enemy.id] = true
      # 変身前の敵も撃破済みにする
      if MG_ORIGINAL_DEFEAT
        enemy.original_id.each do |id|
          next if id == nil
          $game_system.enemy_defeated[id] = true
        end
      end
    end

    # 元の処理を実行
    start_phase5_KGC_MonsterGuide
  end
end


#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/  ◆인연 잡음·그림자 문자 묘화 - KGC_FrameShadowText◆
#_/----------------------------------------------------------------------------
#_/ draw_text 를 강화해, 인연 잡음이나 그림자 문자의 묘화 기능을 추가합니다.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

# 도입 이 끝난 상태 플래그를 온
$imported["FrameShadowText"] = true


#==============================================================================
# ■ Bitmap
#-------------------------------------------------------------------- ----------
#  Bitmap 클래스 메소드 추가
#==============================================================================

class Bitmap
#--------------------------------------------------------------------------
# ● 테두리 문자 묘화
#------------------------------------------------------------------------- -
def draw_frame_text(x, y, width, height, string, align = 0,
frame_color = Color.new(0, 0, 0))
# 원래의 색을 보존해 둔다
origin_color = font.color.dup
# 인연 잡음
font.color = frame_color
draw_text(x - 1, y - 1, width, height, string, align)
draw_text(x - 1, y + 1, width, height, string, align)
draw_text(x + 1, y - 1, width, height, string, align)
draw_text(x + 1, y + 1, width, height, string, align)
# 원래의 색으로 돌려 묘화
font.color = origin_color
draw_text(x, y, width, height, string, align)
end
#------------------------------------------------------ --------------------
# ● 테두리 문자 묘화(Rect판)
#--------------------------------------------------------------------------
def draw_frame_text_r(rect, string, align = 0, frame_color = Color.new(0, 0, 0))
# draw_frame_text 를 호출한다
draw_frame_text(rect.x, rect.y, rect.width, rect.height, string, align, frame_color)
end
#--------------------------------------------------------------------------
# ● 그림자 문자 묘화
#--------------------------------------------------------------------------
def draw_shadow_text(x, y, width, height, string, align = 0,
shadow_color = Color.new(0 , 0, 0))
# 원래의 색을 보존해 둔다
origin_color = font.color.dup
# 그림자 묘화
font.color = shadow_color
draw_text(x + 2, y + 2, width, height, string, align)
# 원래의 색으로 돌려 묘화
font.color = origin_color
draw_text(x, y, width, height, string, align)
end
#--------------------------- -----------------------------------------------
# ● 그림자 문자 묘화(Rect판)
#--------------------------------------------------------------------------
def draw_shadow_text_r(rect, string, align = 0, frame_color = Color.new(0, 0, 0))
# draw_shadow_text 를 호출한다
draw_shadow_text(rect.x, rect.y, rect.width, rect.height, string, align, frame_color)
end
end


 

 

 

 

 

 

 

 

 

■ 질문전 필독!
  • 질문할 내용이 이 게시판이나 강좌에 이미 있는지 확인합니다.
  • 하나의 게시물에는 하나의 질문만 합니다.
  • 제목은 질문의 핵심 내용으로 작성합니다.
  • 질문 내용은 답변자가 쉽게 이해할 수 있도록 최대한 상세하게 작성합니다.
  • 스크립트의 전문이 필요할 경우 txt 파일 등으로 첨부해 주시기 바랍니다.
  • 답변받은 게시물은 삭제하지 않습니다.
  • 답변이 완료된 경우 해당 답변해주신 분들께 감사의 댓글을 달아줍니다.
    • 처음 오신 분들은 공지 게시물을 반드시 읽어주세요!

※ 미준수시 사전경고 없이 게시물을 삭제합니다.


List of Articles
종류 분류 제목 글쓴이 날짜 조회 수
공지 묻고 답하기 가이드 습작 2014.06.14 11232
게임 번역 기타 최근에 나오는 울프툴 게임은 한글화가 불가능한가요? newfile 아모건 2020.05.30 22
기본툴 사용법 RMMV 대사창이 떠있어도 메뉴를 열수있게 하는 방법이 없을까요? 2 츄웬 2020.05.27 39
플러그인 추천 RMMV 캐릭터 별로 능력치 성장을 다르게 할 수 있는 플러그인이 있나요? 1 PPPL 2020.05.27 27
에러 해결 RMVX 글자 크기 조절 어떻게하나요? 벚화령 2020.05.26 25
에러 해결 RMVX 글자 크기 조절 어떻게하나요? 1 벚화령 2020.05.26 36
이벤트 작성 RMVXA 이벤트만 대기시키는 법이 있나요 3 이경로 2020.05.24 48
스크립트 사용 RMXP KGC 몬스터도감 적과 전투 없이 도감을 수집할 수 없을까요? file 빈군 2020.05.23 43
스크립트 작성 RMVXA 커먼이벤트를 스크립트에서 실행하려면 어떻게 해야 하나요? 2 이경로 2020.05.23 48
기본툴 사용법 RMMV 폴더에 그림을 넣어도 인게임 목록에 뜨지 않는 이유가 무엇일까요? 3 file 핸들 2020.05.23 48
플러그인 추천 RMMV 캐릭터를 커지게 해주는 플러그인 없나요? 2 JDG소프트 2020.05.22 70
에러 해결 사이트 이용 (오류) 이런 경우는 어떻게 해야하나요? 도와주세여 keap1 2020.05.22 31
이벤트 작성 RMMV 텍스트 시작 위치를 바꾸고 싶습니다~ 2 츄웬 2020.05.22 53
스크립트 사용 RMVXA 움직이는 배경 1 Wolfclaw 2020.05.20 44
해당사항없음 RMVXA (오류) 이런 경우는 어떻게 해야하나요? 도와주세여 file keap1 2020.05.20 37
스크립트 사용 RMVXA vx ace QTE 1 mkccip 2020.05.19 48
플러그인 추천 RMMV Hp와 TP 바 등등 그래픽 수정하는 법/텍스트 효과음 BLT 2020.05.19 32
기타 기타 아방스 게시판 플래시 제외 예정이 있나요? DevSquare 2020.05.18 22
기본툴 사용법 RMVXA 페이스칩이 아닌 스탠딩을 넣고 싶어요 2 file 설님 2020.05.18 64
스크립트 추천 RMVXA 이런 스크립트 있을까요? 2 file 설님 2020.05.18 39
스크립트 사용 RMXP 메세지 스크립트 관련하여 질문 드립니다. 2 file 빈군 2020.05.18 40
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 475 Next
/ 475