【解決済】レーネ様の零の軌跡風料理システム RGSS3で製作者に経験値を加算するようにしたい

名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

Re: レーネ様の零の軌跡風料理システム RGSS3で製作者に経験値を加算するようにしたい

投稿記事by 名無し蛙 » 2022年3月02日(水) 07:24

こんな感じですかね
1.「結果」見出しの中央寄せから左寄せへの変更
2.総経験値の描画
3.結果別経験値の描画
4.levelup表記の削除
1.の影響でaliasが使えなくなりましたけど流石にスペース上仕方がないかな
違和感がある気がしますけど慣れですかね

コード: 全て選択

#==============================================================================
# ■ 零の軌跡風料理システム拡張
#------------------------------------------------------------------------------
# 「零の軌跡風料理システム」よりも下のセクションに追加してください
#==============================================================================
module RENNE::COOKING 
  #--------------------------------------------------------------------------
  # ◆ 設定項目
  #--------------------------------------------------------------------------
  # ITEMS[レシピID][:exp] = [大成功経験値, 成功経験値, 予想外経験値]
  ITEMS[2][:exp]   = [99999, 500, 200]
  ITEMS[7][:exp]   = [128, 64, 8]
 
  STR_22 = "#{STR_14}【経験値】"
  STR_23 = "経験値+%dexp"
  STR_24 = "%dexp×%d"
   
  module_function
  #--------------------------------------------------------------------------
  # ● レシピに対応した獲得経験値の取得
  #--------------------------------------------------------------------------
  def exp(recepe_id, idx)
    ITEMS[recepe_id][:exp] ? (ITEMS[recepe_id][:exp][idx] || 0) : 0
  end
end

class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # ○ 料理開始
  #--------------------------------------------------------------------------
  alias :_old_go_cooking :go_cooking
  def go_cooking(actor, item, number)
    _old_go_cooking(actor, item, number)
    gain_cooking_exp #
  end
  #--------------------------------------------------------------------------
  # ● 料理による経験値獲得
  #--------------------------------------------------------------------------
  def gain_cooking_exp
    actor = @cooking[:a]
    exp_total = 0
    @cooking[:oc].each_with_index do |item, i|
      exp_total += RENNE::COOKING::exp(@cooking[:i].id, i) * item.size
    end
    actor.change_exp(actor.exp + exp_total, false)
  end
end

class Window_Cooking_Member_Info < Window_Base
  #--------------------------------------------------------------------------
  # ○ オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(mw_w)
    super(mw_w + 32, 48, 200 + 80, 144)
    hide
    draw_title
  end
  #--------------------------------------------------------------------------
  # ○ タイトルの描画
  #--------------------------------------------------------------------------
  def draw_title
    draw_text(0, 0, contents.width, 24, STR_22, 2)   
    draw_horz_line(24)
  end
  #--------------------------------------------------------------------------
  # ○ リフレッシュ
  #--------------------------------------------------------------------------
  alias :_old_refresh :refresh
  def refresh(actor)
    _old_refresh(actor)
    draw_gain_exp
  end
  #--------------------------------------------------------------------------
  # ○ 成功率の描画
  #--------------------------------------------------------------------------
  def draw_suc_rate
    [STR_8, STR_9, STR_10].each_with_index do |str, idx|
      draw_text(0, (idx+2)*24, 104, 24, str)
      draw_text(100, (idx+2)*24, 56, 24, suc_rate(idx).to_s + "%",2)
    end
  end
  #--------------------------------------------------------------------------
  # ● 取得経験値の描画
  #--------------------------------------------------------------------------
  def draw_gain_exp
    3.times do |idx|
      draw_text(160, (idx+2)*24, 88, 24, "#{exp(c_item.id, idx)}exp", 2)     
    end
  end
end 
 
class Window_Cooking_Result < Window_Base
  #--------------------------------------------------------------------------
  # ○ リザルトの描画
  #--------------------------------------------------------------------------
  def draw_result
    # 左寄せに変更(この仕様変更のせいでaliasが使えない)
    draw_text(0, 0, contents.width, 24, STR_15)
    draw_horz_line(24)
    a1 = [4,9,14,19]
    a2 = [STR_8, STR_9, STR_10, STR_17]
    3.times do |i|
      draw_text(0, a1[i] * 12, contents.width, 24, STR_18 + a2[i])
      if @result[i][0]
        draw_item_name(@result[i][0], 0, (a1[i]+2)*12)
        draw_text(196, (a1[i]+2)*12, 56, 24, "#{STR_16} #{@result[i][1]}")
      end
    end
    # 失敗アイテムは複数の種類があるので別に描画する
    draw_text(0, a1[3] * 12, contents.width, 24, STR_18 + a2[3])
    draw_fail_item(a1[3] * 12 + 24) if !@fail.empty?
   
    # 取得経験値の描画
    exps = []
    $game_party.cooking[:oc].each_with_index{ |item, i|
      exps[i] = {:exp => exp($game_party.cooking[:i].id, i), :num => item.size}
    }
    exp_sum = exps.inject(0){|r, exp| r + exp[:exp] * exp[:num]}
   
    contents.font.size = 18
    draw_text(0, 0, contents.width, 24, sprintf(STR_23, exp_sum), 2)   
    3.times do |i|
      draw_text(0, a1[i] * 12, contents.width, 24,
        sprintf(STR_24, exps[i][:exp], exps[i][:num]), 2)
    end
    reset_font_settings
  end 
end

イシモチ
記事: 12
登録日時: 2022年1月17日(月) 05:28

Re: レーネ様の零の軌跡風料理システム RGSS3で製作者に経験値を加算するようにしたい

投稿記事by イシモチ » 2022年3月02日(水) 16:12

迅速な対応ありがとうございます(´ . .̫ . `)
無事希望通りできました、本当に助かりました
aliasが使えなくなると競合しやすくなる感じでしょうか?
名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

Re: レーネ様の零の軌跡風料理システム RGSS3で製作者に経験値を加算するようにしたい

投稿記事by 名無し蛙 » 2022年3月02日(水) 23:46

イシモチ さんが書きました:aliasが使えなくなると競合しやすくなる感じでしょうか?

いえ、全く問題無いでしょう
Window_Cooking_Result#draw_resultにaliasが使えないという話なので
他に零の軌跡風料理システムの改造を試みる人が現れない限り影響無い話だと思いますよ
今はこう書いてるのが

コード: 全て選択

  #--------------------------------------------------------------------------
  # ○ リザルトの描画
  #--------------------------------------------------------------------------
  def draw_result
    # 左寄せに変更(この仕様変更のせいでaliasが使えない)
    draw_text(0, 0, contents.width, 24, STR_15)
    draw_horz_line(24)
    a1 = [4,9,14,19]
    a2 = [STR_8, STR_9, STR_10, STR_17]
    3.times do |i|
      draw_text(0, a1[i] * 12, contents.width, 24, STR_18 + a2[i])
      if @result[i][0]
        draw_item_name(@result[i][0], 0, (a1[i]+2)*12)
        draw_text(196, (a1[i]+2)*12, 56, 24, "#{STR_16} #{@result[i][1]}")
      end
    end
    # 失敗アイテムは複数の種類があるので別に描画する
    draw_text(0, a1[3] * 12, contents.width, 24, STR_18 + a2[3])
    draw_fail_item(a1[3] * 12 + 24) if !@fail.empty?
   
    # 取得経験値の描画
    exps = []
    $game_party.cooking[:oc].each_with_index{ |item, i|
      exps[i] = {:exp => exp($game_party.cooking[:i].id, i), :num => item.size}
    }
    exp_sum = exps.inject(0){|r, exp| r + exp[:exp] * exp[:num]}
   
    contents.font.size = 18
    draw_text(0, 0, contents.width, 24, sprintf(STR_23, exp_sum), 2)   
    3.times do |i|
      draw_text(0, a1[i] * 12, contents.width, 24,
        sprintf(STR_24, exps[i][:exp], exps[i][:num]), 2)
    end
    reset_font_settings
  end 

こうなるだけなので

コード: 全て選択

  #--------------------------------------------------------------------------
  # ○ リザルトの描画
  #--------------------------------------------------------------------------
  alias :_old_draw_result :draw_result
  def draw_result
    _old_draw_result
    # 取得経験値の描画
    a1 = [4,9,14,19]
    exps = []
    $game_party.cooking[:oc].each_with_index{ |item, i|
      exps[i] = {:exp => exp($game_party.cooking[:i].id, i), :num => item.size}
    }
    exp_sum = exps.inject(0){|r, exp| r + exp[:exp] * exp[:num]}
   
    contents.font.size = 18
    draw_text(0, 0, contents.width, 24, sprintf(STR_23, exp_sum), 2)   
    3.times do |i|
      draw_text(0, a1[i] * 12, contents.width, 24,
        sprintf(STR_24, exps[i][:exp], exps[i][:num]), 2)
    end
    reset_font_settings
  end   

約13行の短縮になります
改変は必要最小限、特に見映えが悪いコーディングを忌避するというスクリプター特有のエゴですよ
イシモチ
記事: 12
登録日時: 2022年1月17日(月) 05:28

Re: レーネ様の零の軌跡風料理システム RGSS3で製作者に経験値を加算するようにしたい

投稿記事by イシモチ » 2022年3月03日(木) 03:56

なるほど、ありがとうございます!
本当に助かりました。
スペースがあまったので最初のと見比べて
レベルアップも表示させるようにしたところなんとか表示できました
完璧超人に進化しました、ありがとうございます

“VX / Ace:質問” へ戻る