XP 스크립트


#실패시의 요리 지정.
#set_fail_food_id(을)를 설정합니다.
#기본적으로
#@fail_food_id[0] = 50   # 디폴트치
#의 우측의 숫자 부분에 조금 전 만들어 둔 실패 요리의 아이템ID을 넣어 준다면 좋습니다.
#
#@fail_food_id[1] = 49
#(이)라든지 하면 , 요리마다 실패 요리의 설정이 가능합니다.
#
#
#
#최후입니다.
#역시 , 조금 전의 바로 아래의 것set_visible_Switche을 설정입니다.
#이것은 , 요리를 표시하는지 어떤지의 판정용의 게임 스윗치 넘버의 설정입니다.
#
#@visible_Switche[3] = 20
#
#이 우측의 숫자가 게임 스윗치 넘버입니다.
#위의 예에서는 ,3번째에 표시하는 요리는 게임 스윗치20차례가ON의 때
#표시되게 되어 있습니다.
#
#
#기본적인 설정은 이상입니다.
#
#
#
#○엑터 개별의 요리 난도 보정
#이것은 , 무리에 하지 않아도 좋습니다만 ,
#엑터마다 요리할 수 있도록(듯이) 설정해 있다면 , 설정해 두는 것이 좋다고 생각합니다.
#그렇다고 하는 것보다도 , 모처럼 엑터마다 요리할 수 있는데
#전원 같은 성능이라면 , 완전한 무의미하네요(땀)
#파티 전원이 요리하는 설정의 경우는 , 무시해 좋습니다.
#설정해도 , 의미 없습니다.
#
#·설정의 방법
##--------------------------------------------------------------------------
## ● 엑터별의 숙련 난도 보정의 설정
##--------------------------------------------------------------------------
# def set_actor_cook_difficulty
#↑여기입니다. 조금 전의 바로 아래.
#
#설정한 값이 , 요리 난도(몇회 요리하면(자) 숙련도가 오를까의 기본치)에 가산됩니다.
#마이너스 지정도 가능합니다.
#
#when 1 # 주먹밥
# @actor_cook_difficulty[1] = 0   #아르시스
# @actor_cook_difficulty[2] = 1   #바질
# @actor_cook_difficulty[7] = 0   #그로리아
# @actor_cook_difficulty[8] = 2   #히르다
#
#보일 수 있으면 안다고 생각합니다만 ,[]안의 숫자가 엑터ID로
#오른쪽의 숫자가 , 요리 난도에 가산되는 값입니다.
#
#
#○추가 식품 재료에 대해
#추가 식품 재료란 , 이른바 토핑같은 물건입니다.
#알고 있는 사람은 , 모 「군과 서로 영향을 주는 RPG  」의 아레를 상상해 주세요.
#이라고 할까 , 이 요리 시스템 자체 아레를 참고로 하기도 하는(땀)
#추가 식품 재료를 가지고 있지 않아도 요리는 할 수 있습니다.
#사용하면 , 요리의 효과에 추가 식품 재료의 효과가 추가됩니다.
#설정은 set_add_mate 으로 가고 있습니다.
#최대로 최대 숙련도 + 1 개까지 추가 식품 재료를 설정할 수 있습니다만 ,
#문답 무용으로 식품 재료를 소비해 버리므로 , 너무 많이 설정하면(자)
#반대로 사용하기 어려운 요리가 되어 버릴지도 모릅니다.

class Cook_Data
  #--------------------------------------------------------------------------
  # ● 참조 아이템ID의 설정
  #--------------------------------------------------------------------------
  def set_cookid
    # ↓이하 , 설정용
   
    @cookidset[1] = 51
    @cookidset[2] = 52
    @cookidset[3] = 53
    @cookidset[4] = 54
   
    # ↑여기까지
  end
  #--------------------------------------------------------------------------
  # ● 요리 레시피의 설정
  #--------------------------------------------------------------------------
  def set_cook_recipe
    @recipe[0] = {}   # デフォルト値(디폴트치(만지지 않게))
   
    # ↓이하 , 설정용
   
    @recipe[1] = {41=>1, 43=>1}
    @recipe[2] = {"밥계"=>1, "김계"=>2}
    @recipe[3] = {"야채계"=>2, 41=>1}
    @recipe[4] = {46=>3}
   
    # ↑여기까지
  end
  #--------------------------------------------------------------------------
  # ● 실패시의 요리의 설정
  #--------------------------------------------------------------------------
  def set_fail_food_id
    # ↓이하, 설정용
   
    @fail_food_id[0] = 50   # 디폴트치
   
    # ↑여기까지
  end
  #--------------------------------------------------------------------------
  # ● 요리 가부 판저용ㅇ 스윗치 넘버의 설정
  #--------------------------------------------------------------------------
  def set_visible_Switche
    @visible_Switche[0] = 0 # 디폴트치(만지지 않게)
   
    # ↓이하 , 설정용
   
    @visible_Switche[3] = 20
   
    # ↑여기까지
  end
end

class FoodData
  #--------------------------------------------------------------------------
  # ● 엑터별의 숙련 난도 보정의 설정
  #--------------------------------------------------------------------------
  def set_actor_cook_difficulty
    @actor_cook_difficulty = []
    @actor_cook_difficulty[0] = 0 # 데포치(만지지 않게)
   
    # ↓이하 , 설정용
   
    case @id # 요리ID
    when 1 # 주먹밥
      @actor_cook_difficulty[1] = 0   #아르시스
      @actor_cook_difficulty[2] = 1   #바질
      @actor_cook_difficulty[7] = 0   #그로리아
      @actor_cook_difficulty[8] = 2   #히르다
    when 2 # 초결말
      @actor_cook_difficulty[1] = 0   #아르시스
      @actor_cook_difficulty[2] = 1   #바질
      @actor_cook_difficulty[7] = -1  #그로리아
      @actor_cook_difficulty[8] = 2   #히르다
    when 3 # 야채볶음
      @actor_cook_difficulty[1] = -1  #아르시스
      @actor_cook_difficulty[2] = 1   #바질
      @actor_cook_difficulty[7] = 0   #그로리아
      @actor_cook_difficulty[8] = 2   #히르다
    when 4 # 프루츠 펀치
      @actor_cook_difficulty[1] = -1  #아르시스
      @actor_cook_difficulty[2] = 1   #바질
      @actor_cook_difficulty[7] = 3   #그로리아
      @actor_cook_difficulty[8] = -3  #히르다
    end
   
    # ↑여기까지
   
  end
  #--------------------------------------------------------------------------
  # ● 추가 식품 재료의 설정
  #--------------------------------------------------------------------------
  def set_add_mate
    @add_mate = []
    @add_mate[0] = [nil, nil, nil, nil, nil, nil] #デフォ値(こっちはいじらない)
    #데포치는 , 엑터별로 추가 식품 재료를 설정하지 않는 경우에 사용됩니다.
    #따라서 , 그 경우는 @add_mate[0] 만 설정하면 좋습니다.
    #[nil, nil, nil, 45, nil, nil]의 부분에는 식품 재료의 아이템ID을 넣습니다.
    #왼쪽으로부터 숙련도가0,1,2,3,4,5의 때에 추가되는 아이템ID을 넣어 주세요.
    #굳이 추가하고 싶지 않을 때는 nil 을 넣어 주세요.
    #숙련도 기능을 사용하고 있지 않을 때는 숙련도0로서 판정되므로 ,
    #숙련도 기능은 사용하지 않지만 , 엑터별로 추가 식품 재료를 사용하고 싶은
    #이라고 하는 경우는 , 숙련도0의 장소(제일 좌측)으로 추가 식품 재료의 아이템ID을 넣어 주세요.
    #
    #추가 식품 재료가 사용되었을 경우는 ,
    #식품 재료의HPSP회복율 ,HPSP회복치 , 플러스 스테이트 , 마이너스 스테이트
    #가 그대로 요리의 효과에 추가됩니다.
    case @id # 요리ID
    when 1 # 주먹밥
      @add_mate[0] = [44, nil, nil, nil, nil, nil] #데포치
      @add_mate[1] = [45, nil, nil, nil, nil, 46] #아르시스
      @add_mate[2] = [43, nil, nil, nil, nil, nil] #바질
      @add_mate[7] = [nil, nil, nil, nil, nil, nil] #그로리아
      @add_mate[8] = [46, nil, nil, nil, nil, nil] #히다
    when 2 # 초결말
      @add_mate[0] = [41, 42, 43, 44, 45, 46] #데포치
      @add_mate[1] = [41, 42, 43, 44, 45, 46] #아르시스
      @add_mate[2] = [nil, nil, nil, nil, nil, 42] #바질
      @add_mate[7] = [nil, nil, nil, nil, nil, nil] #그로리아
      @add_mate[8] = [46, 46, nil, nil, nil, 46] #히르다
    when 3 # 야채 아픈
      @add_mate[0] = [41, 42, 43, 44, 45, 46] #데포치
      @add_mate[1] = [41, 42, 43, 44, 45, 46] #아르시스
      @add_mate[2] = [nil, nil, nil, nil, nil, 42] #바질
      @add_mate[7] = [nil, nil, nil, nil, nil, nil] #그로리아
      @add_mate[8] = [46, nil, nil, nil, 46, 46] #히르다
    when 4 # 거절하는
      @add_mate[0] = [nil, nil, 43, 44, 45, 46] #데포치
      @add_mate[1] = [nil, nil, 46, nil, nil, nil] #아르시스
      @add_mate[2] = [nil, nil, nil, nil, nil, 42] #바질
      @add_mate[7] = [nil, nil, nil, nil, nil, nil] #그로리아
      @add_mate[8] = [nil, 46, 46, 46, 46, 46] #히르다
    end
  end
end


class Cook_Data
  attr_reader :cookidset
  attr_reader :recipe
  attr_reader :cookmastery_revise
  attr_reader :cook_difficulty
  attr_reader :fail_food_id
  attr_reader :visible_Switche
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    @cookidset = [0]
    @recipe = []
    @fail_food_id = []
    @visible_Switche = []
    set_cookid
    set_cook_recipe
    set_fail_food_id
    set_visible_Switche
  end
end

class FoodData
  include Cooking_System_Config
  attr_reader :id
  attr_reader :item_id
  attr_reader :name
  attr_reader :icon_name
  attr_reader :description
  attr_reader :recover_hp
  attr_reader :recover_hp_rate
  attr_reader :recover_sp
  attr_reader :recover_sp_rate
  attr_reader :plus_state_set
  attr_reader :minus_state_set
  attr_reader :base_success
  attr_reader :cook_se
  attr_reader :common_event
  attr_reader :recipe
  attr_reader :cookmastery_revise
  attr_reader :cook_difficulty
  attr_reader :fail_food_id
  attr_reader :visible_Switche
  attr_reader :actor_cook_difficulty
  attr_reader :add_mate
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(item_id)
    @item_id = item_id               #참조 아이템ID
    @id = set_id                     #요리ID
    @name = ""                       #요리명
    @icon_name = ""                  #요리 아이콘 네임
    @description = ""                #요리 설명
    @recover_hp = 0                  #HP회복치
    @recover_hp_rate = 0             #HP회복%
    @recover_sp = 0                  #SP회복치
    @recover_sp_rate = 0             #SP회복%
    @plus_state_set = []             #추가 스테이트
    @minus_state_set = []            #제거 스테이트
    @base_success = 100              #기본 성공율
    @cook_se = nil                   #요리시SE
    @common_event = 0                #요리시 기동 코먼 이벤트ID
    @cookmastery_revise = []         #회복치 숙련도 보정
    @cook_difficulty = []            #요리 난도
   
    @recipe = {}                     #요리 레시피
    @fail_food_id = []               #실패시의 아이템ID
    @visible_Switche = []            #표시 스윗치 넘버
    @actor_cook_difficulty = []
    @add_mate = []
    #@need_item = {}                 #
    set_up
  end
  #--------------------------------------------------------------------------
  # ● ID를 세트
  #--------------------------------------------------------------------------
  def set_id
    id = $game_temp.cook_system_data.cookidset.index(@item_id)
    return @id = 0 if id == nil
    return id
  end
  #--------------------------------------------------------------------------
  # ● 각 정보의 셋업
  #--------------------------------------------------------------------------
  def set_up
    item = $data_items[@item_id]
    @name = item.name
    @icon_name = item.icon_name
    @description = item.description
    @recover_hp = item.recover_hp
    @recover_hp_rate = item.recover_hp_rate
    @recover_sp = item.recover_sp
    @recover_sp_rate = item.recover_sp_rate
    @plus_state_set = item.plus_state_set
    @minus_state_set = item.minus_state_set
    @base_success = item.hit
    @cook_se = item.menu_se
    @common_event = item.common_event_id
    @cook_difficulty = item.pdef_f
    @cookmastery_revise = item.mdef_f
    @recipe = $game_temp.cook_system_data.recipe[@id]
    if @recipe == nil
      @recipe = {}
    end
    @fail_food_id = $game_temp.cook_system_data.fail_food_id[@id]
    if @fail_food_id == nil
      @fail_food_id = $game_temp.cook_system_data.fail_food_id[0]
    end
    @visible_Switche = $game_temp.cook_system_data.visible_Switche[@id]
    if @visible_Switche == nil
      @visible_Switche = $game_temp.cook_system_data.visible_Switche[0]
    end
    set_actor_cook_difficulty
    set_add_mate
  end
  #--------------------------------------------------------------------------
  # ● 料理の表示可否判定
  #--------------------------------------------------------------------------
  def show?
    return true if @visible_Switche == 0
    return $game_switches[@visible_Switche]
  end
  #--------------------------------------------------------------------------
  # ● 料理?行可否判定
  #--------------------------------------------------------------------------
  def cook_ok?
    need_item = @recipe.keys
    for id in need_item
      if id.is_a?(Numeric)
        return false if $game_party.item_number(id) < @recipe[id]
      elsif id.is_a?(String)
        item_set = food_category(id)
        return false if cook_need_item_number(item_set) < @recipe[id]
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 料理のカテゴリ名から必要食材を判定し食材IDの配列を返す
  #--------------------------------------------------------------------------
  def food_category(str)
    haveitem = $game_party.items.keys
    #haveitem.sort!
    need_item = []
    for id in haveitem
      next if $game_party.item_number(id) <= 0
      item = $data_items[id]
      for i in 0...item.element_set.size
        if $data_system.elements[item.element_set[i]] == str
          need_item.push(id)
          break
        end
      end
    end
    return need_item
  end
  #--------------------------------------------------------------------------
  # ● 必要食材?を返す
  #--------------------------------------------------------------------------
  def cook_need_item_number(item_set)
    if item_set.is_a?(Numeric)
      return $game_party.item_number(item_set)
    end
    number = 0
    for id in item_set
      number += $game_party.item_number(id)
    end
    return number
  end
  #--------------------------------------------------------------------------
  # ● 食材消費?理
  #--------------------------------------------------------------------------
  def lose_item
    used_item = []
    need_item = @recipe.keys
    for id in need_item
      if id.is_a?(Numeric)
        $game_party.lose_item(id, @recipe[id])
        count = @recipe[id]
        for i in 0...count
          used_item.push(id)
        end
      elsif id.is_a?(String)
        item_set = []
        count = @recipe[id]
        for i in 0...count
          item_set = food_category(id)
          ran = rand(item_set.size)
          $game_party.lose_item(item_set[ran], 1)
          used_item.push(item_set[ran])
        end
      end
    end
    return used_item
  end
  #--------------------------------------------------------------------------
  # ● 料理?果
  #--------------------------------------------------------------------------
  def cook_effect(cook_actor, fail=false, add_food=[])
    cm = cook_actor.cookmastery[@id]
    if cm == nil
      cook_actor.cookmastery[@id] = 0
      cm = 0
    end
    cm_r = cm * @cookmastery_revise
    success = @base_success + cm * COOK_SUCCESS_REVISE
    if fail == false
      return false if rand(100) > success
    end
   
    for actor in $game_party.actors
      actor.states_plus(@plus_state_set)
      actor.states_minus(@minus_state_set)
      recover_hp = actor.maxhp * (@recover_hp_rate + cm_r) / 100 + @recover_hp
      recover_sp = actor.maxsp * (@recover_sp_rate + cm_r) / 100 + @recover_sp
      for id in add_food
        item = $data_items[id]
        actor.states_plus(item.plus_state_set)
        actor.states_minus(item.minus_state_set)
        recover_hp += actor.maxhp * item.recover_hp_rate / 100 + item.recover_hp
        recover_sp += actor.maxsp * item.recover_sp_rate / 100 + item.recover_sp
      end
      actor.hp += recover_hp
      actor.sp += recover_sp
    end
    add_recover_hp_rate = 0
    add_recover_sp_rate = 0
    add_recover_hp = 0
    add_recover_sp = 0
    for id in add_food
      item = $data_items[id]
      add_recover_hp_rate += item.recover_hp_rate
      add_recover_sp_rate += item.recover_sp_rate
      add_recover_hp += item.recover_hp
      add_recover_sp += item.recover_sp
    end
    $game_temp.temp_recover_hp_rate = @recover_hp_rate + cm_r + add_recover_hp_rate
    $game_temp.temp_recover_sp_rate = @recover_sp_rate + cm_r + add_recover_sp_rate
    $game_temp.temp_recover_hp = @recover_hp + add_recover_hp
    $game_temp.temp_recover_sp = @recover_sp + add_recover_sp
   
    # 以下熟練度上昇?理
    if USE_COOK_MASTERY and fail == false
      if cook_actor.cookmastery[@id] < MAX_COOK_MASTERY
        if cook_actor.cookmastery_exp[@id] == nil
          cook_actor.cookmastery_exp[@id] = 1
        else
          cook_actor.cookmastery_exp[@id] += 1
        end
        if COOK_TYPE_SELECT == 1
          actor_difficulty = @actor_cook_difficulty[cook_actor.id]
        else
          actor_difficulty = 0
        end
        if actor_difficulty == nil
          actor_difficulty = @actor_cook_difficulty[0]
        end
        if cook_actor.cookmastery_exp[@id] >= @cook_difficulty + actor_difficulty
          cook_actor.cookmastery[@id] += 1
          cook_actor.cookmastery_exp[@id] = 0
        end
      end
    end
   
    # コモンイベント ID が有?の場合
    if @common_event > 0
      # コモンイベント呼び出し予約
      $game_temp.common_event_id = @common_event
    end
    return true
  end
end

class Game_Temp
  attr_reader :food_data
  attr_reader :cook_system_data
  attr_accessor :temp_recover_hp
  attr_accessor :temp_recover_hp_rate
  attr_accessor :temp_recover_sp
  attr_accessor :temp_recover_sp_rate
  attr_accessor :cookmastery
  alias temp_cook_system_data_initialize initialize
  def initialize
    temp_cook_system_data_initialize
    @cook_system_data = Cook_Data.new
    @food_data = nil
    @temp_recover_hp = 0
    @temp_recover_hp_rate = 0
    @temp_recover_sp = 0
    @temp_recover_sp_rate = 0
    #set_food_data
  end
  def set_food_data
    @food_data = []
    for i in 1...@cook_system_data.cookidset.size
      @food_data[i] = FoodData.new(@cook_system_data.cookidset[i])
    end
  end
end

class Game_Party
  attr_accessor :cookmastery
  attr_accessor :cookmastery_exp
  attr_accessor :cook_battle_count
  attr_reader :items
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias cook_system_game_party_initialize initialize
  def initialize
    cook_system_game_party_initialize
    @cookmastery = {}
    @cookmastery_exp = {}
    @cook_battle_count = 0
  end
end

class Game_Actor < Game_Battler
  attr_accessor :cookmastery
  attr_accessor :cookmastery_exp
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #     actor_id : アクタ? ID
  #--------------------------------------------------------------------------
  alias cook_system_game_actor_initialize initialize
  def initialize(actor_id)
    cook_system_game_actor_initialize(actor_id)
    @cookmastery = {}
    @cookmastery_exp = {}
  end
end

class Scene_Map
  #--------------------------------------------------------------------------
  # ● バトルの呼び出し
  #--------------------------------------------------------------------------
  alias cook_system_call_battle call_battle
  def call_battle
    # 料理可能までのカウント減少
    if $game_party.cook_battle_count != 0
      $game_party.cook_battle_count -= 1
    end
    cook_system_call_battle
  end
end

class Window_CookMenu < Window_Selectable
  attr_reader :data
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 288, 640, 192)
    @column_max = 2
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● アイテムの取得
  #--------------------------------------------------------------------------
  def item
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    if self.contents != nil
      self.contents.dispose
      self.contents = nil
    end
    @data = $game_temp.food_data.dup
    @data.shift
    # 項目?が 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)
    item = @data[index]
    if item.cook_ok?
      self.contents.font.color = normal_color
    else
      self.contents.font.color = disabled_color
    end
    x = 4 + index % 2 * (288 + 32)
    y = index / 2 * 32
    if item.show?
      rect = Rect.new(x, y, self.width / @column_max - 32, 32)
      self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
      bitmap = RPG::Cache.icon(item.icon_name)
      opacity = self.contents.font.color == normal_color ? 255 : 128
      self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
      self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    else
      self.contents.draw_text(x + 28, y, 212, 32, "-----", 0)
    end
  end
  #--------------------------------------------------------------------------
  # ● ヘルプテキスト更新
  #--------------------------------------------------------------------------
  def update_help
    if self.item.show?
      @help_window.set_text(self.item == nil ? "" : self.item.description)
    else
      @help_window.set_text("")
    end
  end
end

class Window_FoodInfo < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 128, 640, 160)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item = nil
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    if @item == nil
      return
    end
    if @item.show? == false
      return
    end
    item_set = @item.recipe.keys
    need_number = []
    for i in item_set
      if i.is_a?(String)
        temp = @item.food_category(i)
        need_number.push(@item.cook_need_item_number(temp))
      else
        need_number.push(@item.cook_need_item_number(i))
      end
    end
    for i in 0...item_set.size
      x = 4 + i % 2 * (288 + 32)
      y = i / 2 * 32
      if item_set[i].is_a?(Numeric)
        now_num = $game_party.item_number(item_set[i])
        max_num = @item.recipe[item_set[i]]
        if now_num < max_num
          self.contents.font.color = disabled_color
          opacity = 128
        else
          self.contents.font.color = normal_color
          opacity = 255
        end
        item = $data_items[item_set[i]]
        name = item.name
        rect = Rect.new(x, y, self.width / 2 - 32, 32)
        self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
        bitmap = RPG::Cache.icon(item.icon_name)
        self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
        self.contents.draw_text(x + 28, y, 212, 32, name, 0)
      elsif item_set[i].is_a?(String)
        now_num = need_number[i]
        max_num = @item.recipe[item_set[i]]
        if now_num < max_num
          self.contents.font.color = disabled_color
        else
          self.contents.font.color = normal_color
        end
        name = item_set[i].to_s
        self.contents.draw_text(x + 28, y, 212, 32, name, 0)
      end
      self.contents.draw_text(x + 212, y, 24, 32, max_num.to_s, 2)
      self.contents.font.color = normal_color
      self.contents.draw_text(x + 240, y, 16, 32, "/", 1)
      self.contents.draw_text(x + 256, y, 24, 32, now_num.to_s, 2)
    end
  end
  #--------------------------------------------------------------------------
  # ● アイテムの設定
  #     item : 新しいアイテム
  #--------------------------------------------------------------------------
  def item=(item)
    if @item != item
      @item = item
      refresh
    end
  end
end

class Window_CookSelect < Window_Selectable
  include Cooking_System_Config
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 288, 640, 192)
    @column_max = 2
    self.contents = Bitmap.new(width - 32, height - 32)
    if COOK_TYPE_SELECT == 1
      @data = $game_party.actors
    else
      @data = [$game_party]
    end
    @item_max = @data.size
    @cookitem = nil
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● アクタ?取得
  #--------------------------------------------------------------------------
  def actor
    return @data[self.index]
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    if @cookitem == nil
      return
    end
    for i in 0...@data.size
      actor = @data[i]
      x = 4 + i % 2 * (288 + 32)
      y = i / 2 * 64
      self.contents.font.color = normal_color
      if COOK_TYPE_SELECT == 1
        self.contents.draw_text(x, y, 160, 32, actor.name, 0)
      else
        self.contents.draw_text(x, y, 160, 32, "料理?行", 0)
      end
      if USE_COOK_MASTERY
        cm = actor.cookmastery[@cookitem.id]
        cm = 0 if cm == nil
        hosi = "★" * cm
        hosi2= "☆" * (MAX_COOK_MASTERY - cm)
        self.contents.draw_text(x, y+32, 320, 32, hosi+hosi2, 0)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● アイテムの設定
  #     item : 新しいアイテム
  #--------------------------------------------------------------------------
  def item=(item)
    if @cookitem != item
      @cookitem = item
      refresh
    end
  end
  #--------------------------------------------------------------------------
  # ● カ?ソルの矩形更新
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @index < 0
      self.cursor_rect.empty
    else
      x = @index % @column_max * 320
      y = @index / @column_max * 64
      self.cursor_rect.set(x, y, 160, 32)
    end
  end
end

class Window_CookResult < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(80, 60, 480, 160)
    self.contents = Bitmap.new(width - 32, height - 32)
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh(item, success)
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 64, 32, "料理", 0)
    if success
      self.contents.font.color = system_color
      str = "成功!"
    else
      self.contents.font.color = text_color(2)
      str = "失敗…"
    end
    self.contents.draw_text(4+64, 0, 96, 32, str, 0)
    self.contents.font.color = normal_color
    rect = Rect.new(4, 32, self.width - 32, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = 255
    hprate = $game_temp.temp_recover_hp_rate
    sprate = $game_temp.temp_recover_sp_rate
    hp = $game_temp.temp_recover_hp
    sp = $game_temp.temp_recover_sp
    self.contents.blt(4, 32 + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
    self.contents.draw_text(4 + 28, 32, 212, 32, item.name, 0)
    self.contents.draw_text(4 + 240, 32, 96, 32, "が完成!", 0)
    self.contents.draw_text(4, 64, 64, 32, $data_system.words.hp, 0)
    self.contents.draw_text(4 + 96, 64, 64, 32, hprate.to_s+"%", 2)
    self.contents.draw_text(4 + 160, 64, 32, 32, "+", 1)
    self.contents.draw_text(4 + 224, 64, 64, 32, hp.to_s, 2)
    self.contents.draw_text(4, 96, 64, 32, $data_system.words.sp, 0)
    self.contents.draw_text(4 + 96, 96, 64, 32, sprate.to_s+"%", 2)
    self.contents.draw_text(4 + 160, 96, 32, 32, "+", 1)
    self.contents.draw_text(4 + 224, 96, 64, 32, sp.to_s, 2)
  end
end

class Window_Use_CookItem < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(80, 220, 480, 192)
    self.contents = Bitmap.new(width - 32, height - 32)
  end
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh(useitem, use_add_food)
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 160, 32, "使用した食材", 0)
    total_food = useitem + use_add_food
    for i in 0...total_food.size
      item = $data_items[total_food[i]]
      x = 4  + i % 2 * 240
      y = 32 + i / 2 * 32
      rect = Rect.new(x, y, self.width - 32, 32)
      self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
      bitmap = RPG::Cache.icon(item.icon_name)
      opacity = 255
      self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
      if i < useitem.size
        self.contents.font.color = normal_color
      else
        self.contents.font.color = text_color(3)
      end
      self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    end
  end
end

class Window_Add_Mate < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    super(0, 128, 640, 160)
    self.contents = Bitmap.new(width - 32, height - 32)
  end
 
  #--------------------------------------------------------------------------
  # ● リフレッシュ
  #--------------------------------------------------------------------------
  def refresh(useitem)
    self.contents.clear
    self.contents.font.color = normal_color
    self.contents.draw_text(4, 0, 160, 32, "追加食材", 0)
    for i in 0...useitem.size
      item = $data_items[useitem[i]]
      x = 4  + i % 2 * 240
      y = 32 + i / 2 * 32
      rect = Rect.new(x, y, self.width - 32, 32)
      self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
      bitmap = RPG::Cache.icon(item.icon_name)
      opacity = 255
      self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
      self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
    end
  end
end

class Scene_Cooking
  include Cooking_System_Config
  #--------------------------------------------------------------------------
  # ● メイン?理
  #--------------------------------------------------------------------------
  def main
    $game_temp.set_food_data if $game_temp.food_data == nil
    # ウィンドウを作成
    @title_window = Window_Base.new(0, 0, 640, 64)
    @title_window.contents = Bitmap.new(640 - 32, 64 - 32)
    @title_window.contents.draw_text(4, 0, 320, 32, "料理", 0)
    @main_window = Window_CookMenu.new
    @main_window.active = true
    @help_window = Window_Help.new
    @help_window.z = 110
    @help_window.y = 64
    @help_window.visible = true
    s1 = "料理?行"
    s2 = "やめる"
    command = [s1, s2]
    @select_window = Window_CookSelect.new #Window_Command.new(160, command)
    @select_window.z = 110
    @select_window.active = false
    @select_window.visible = false
    @add_mate_window = Window_Add_Mate.new
    @add_mate_window.z = 120
    @add_mate_window.visible = false
    # インフォウィンドウを作成
    @info_window = Window_FoodInfo.new
    # ヘルプウィンドウを?連付け
    @main_window.help_window = @help_window
    # トランジション?行
    Graphics.transition
    # メインル?プ
    loop do
      # ゲ?ム?面を更新
      Graphics.update
      # 入力情報を更新
      Input.update
      # フレ?ム更新
      update
      # ?面が切り替わったらル?プを中?
      if $scene != self
        break
      end
    end
    # トランジション準備
    Graphics.freeze
    # ウィンドウを解放
    @title_window.dispose
    @help_window.dispose
    @main_window.dispose
    @select_window.dispose
    @info_window.dispose
    @add_mate_window.dispose
  end
  #--------------------------------------------------------------------------
  # ● フレ?ム更新
  #--------------------------------------------------------------------------
  def update
    # ウィンドウを更新
    @help_window.update
    @main_window.update
    @select_window.update
    @info_window.update
    @add_mate_window.update
    if @result_window != nil
      update_result
      return
    end
    # メインウィンドウがアクティブの場合: update_target を呼ぶ
    if @main_window.active
      update_main
      return
    end
    # 種類ウィンドウがアクティブの場合: update_kind を呼ぶ
    if @select_window.active
      update_select
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● フレ?ム更新 (選?ウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_select
    if USE_COOK_MATE_ADD and ADD_MATE_SHOW
      #追加食材ウィンドウを表示
      if @select_window.index != @select_w_last_index
        @add_mate_window.visible = true
        @select_w_last_index = @select_window.index
        add_food = actor_add_mate(@main_window.item, @select_window.actor)
        @add_mate_window.refresh(add_food)
      end
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      if $game_party.cook_battle_count > 0
        # ブザ? SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      use_item = @main_window.item.lose_item
     
      if USE_COOK_MATE_ADD
        add_food = actor_add_mate(@main_window.item, @select_window.actor)
        have_add_food = []
        for food_id in add_food
          if $game_party.item_number(food_id) > 0
            have_add_food.push(food_id)
            $game_party.lose_item(food_id, 1)
          end
        end
        result = @main_window.item.cook_effect(@select_window.actor, false, have_add_food)
      else
        result = @main_window.item.cook_effect(@select_window.actor)
      end
      if result
        $game_system.se_play(@main_window.item.cook_se)
        @result_window = Window_CookResult.new
        @result_window.refresh(@main_window.item, result)
      else
        @fail_food = FoodData.new(@main_window.item.fail_food_id)
        @fail_food.cook_effect(@select_window.actor, true)
        $game_system.se_play(@fail_food.cook_se)
        @result_window = Window_CookResult.new
        @result_window.refresh(@fail_food, result)
      end
      use_add_food = []
      if USE_COOK_MATE_ADD
        use_add_food = have_add_food
      end
      if use_item.size != 0 or use_add_food.size != 0
        @useitem_window = Window_Use_CookItem.new
        @useitem_window.refresh(use_item, use_add_food)
        @useitem_window.z = 130
      end
      @info_window.refresh
      @result_window.z = 130
      return
    end
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      @main_window.active = true
      @select_window.active = false
      @select_window.visible = false
      @add_mate_window.visible = false
      @select_w_last_index = nil
      return
    end
    if USE_COOK_MATE_ADD and ADD_MATE_SHOW
      # A ボタンが押された場合
      if Input.trigger?(Input::A)
        # 決定 SE を演奏
        $game_system.se_play($data_system.decision_se)
        if @add_mate_window.visible
          @add_mate_window.visible = false
        else
          @add_mate_window.visible = true
        end
        return
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● フレ?ム更新 (メインウィンドウがアクティブの場合)
  #--------------------------------------------------------------------------
  def update_main
    @info_window.item = @main_window.data[@main_window.index]
    # B ボタンが押された場合
    if Input.trigger?(Input::B)
      # キャンセル SE を演奏
      $game_system.se_play($data_system.cancel_se)
      $scene = Scene_Map.new
      return
    end
    # C ボタンが押された場合
    if Input.trigger?(Input::C)
      if @main_window.item == nil or
         @main_window.item.show? == false or
         @main_window.item.cook_ok? == false
        # ブザ? SE を演奏
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # 決定 SE を演奏
      $game_system.se_play($data_system.decision_se)
      @main_window.active = false
      @select_window.active = true
      @select_window.visible = true
      @select_window.item = @main_window.data[@main_window.index]
      @select_window.refresh
      return
    end
  end
  #--------------------------------------------------------------------------
  # ● 프레임 갱신 (결과 윈도우가 액티브의 경우)
  #--------------------------------------------------------------------------
  def update_result
    # C버튼이 밀렸을 경우
    if Input.trigger?(Input::C)
      # 결정 SE 을 연주
      $game_system.se_play($data_system.decision_se)
      @result_window.dispose
      @result_window = nil
      if @useitem_window != nil
        @useitem_window.dispose
        @useitem_window = nil
      end
      @main_window.active = true
      @main_window.refresh
      @select_window.active = false
      @select_window.visible = false
      @add_mate_window.visible = false
      @select_w_last_index = nil
      $game_party.cook_battle_count = COOK_BATTLE_COUNT
      if $game_temp.common_event_id > 0
        # 맵 화면으로 전환하고
        $scene = Scene_Map.new
        return
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 추가 식품 재료를 돌려주는
  #--------------------------------------------------------------------------
  def actor_add_mate(food, actor=nil)
    #추가 소재를 취득
    if COOK_TYPE_SELECT == 1
      if USE_ACTOR_MATE_ADD
        useitem = food.add_mate[actor.id]
      else
        useitem = food.add_mate[0]
      end 
    else
      useitem = food.add_mate[0]
    end
    return [] if useitem == nil
    return [] if useitem.size == 0
    #숙련도 기능이 사용되고 있다면 숙련도를 취득
    if USE_COOK_MASTERY
      cm = actor.cookmastery[food.id]
      cm = 0 if cm == nil
    else
      cm = 0
    end
    temp_item = []
    for i in 0..cm
      next if useitem[i] == nil
      temp_item.push(useitem[i])
    end
    return temp_item
  end
end

 

Who's *ps인간

?

Top mia

Comment '6'
  • ?
    *ps인간 2009.01.26 13:55
    $scene = Scene_Cooking.new
    를사용해 호출합니다.
  • ?
    나뚜루 2009.01.26 14:25
    상당히 복잡함.. @_@
  • ?
    백년술사 2009.01.27 13:50
    흠...(구)는 구함인지 암..
  • ?
    공룡칸드 2009.01.27 23:04
    좀더자세한 설명은없나요?
    상당히 유용한데?
  • ?
    쀍뛝쒧 2009.01.28 13:06
    스크립트모르는사람은이벤트가더좋겠군요ㄷㄷㄷ
  • ?
    레핀 2009.01.29 03:56
    음 ... 좀 복잡하긴 하네요 ;

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 스크립트 자료 게시물 작성시 주의사항 습작 2012.12.24 6153
254 기타 횡스크롤 스크립트 한국말 번역. 15 file 백호 2009.02.21 3311
253 기타 회복으로 데미지를 받는 좀비 스크립트 7 백호 2009.02.22 2004
252 기타 홈페이지 띄우기 (VX 상관없음.) 6 KNAVE 2009.08.25 2137
251 기타 현재시간표시 33 file 코아 코스튬 2010.10.09 2528
250 기타 현재 맵BGM을 그대로 전투 BGM으로 연결 from phylomortis.com 백호 2009.02.22 1180
249 기타 한글 입력 스크립트 입니다. (vx -> xp) 23 file 헤르코스 2009.04.18 3397
248 기타 한계 돌파스크립트 8 G MAX 2009.09.03 2205
247 기타 하나더올립니다....하암........이건...렙제라네요 7 벨☆ 2010.01.23 1754
246 기타 필요 경험치 직접 정하기 9 백호 2009.02.21 1408
245 기타 필드에서 체력을 출력합니다. 4 백호 2009.02.22 1737
244 기타 필드에서 마력을 출력합니다. 백호 2009.02.22 983
243 기타 필드에서 경험치%를 표시합니다. 4 file 백호 2009.02.22 1448
242 기타 플레이어 발소리 스크립트 20 백호 2009.02.22 3107
241 기타 프리 윈도우 스크립트 (상입오두막 출처) 6 백호 2009.02.21 1449
240 기타 프레임 적용 스크립트 1 file 백호 2009.02.21 1007
239 기타 풀스크린 스크립트 2 백호 2009.02.22 1407
238 기타 폰트 자동 설치 스크립트 12 file 백호 2009.02.22 2865
237 기타 포커(Blackjack) 게임을 도입하는 스크립트 5 file 백호 2009.02.21 1674
236 기타 파노라마 스크롤 스크립트 개량판 by Guillaume777 1 백호 2009.02.22 896
235 기타 특수효과 ElseEX 스크립트 file 백호 2009.02.21 995
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 13 Next
/ 13