=begin #============================================================================== [名前] YakiNoriBaseScripts [作者] 焼きノリ [配布元] まったりツクール雑貨 http://mata-tuku.ldblog.jp/ #------------------------------------------------------------------------------ [更新履歴] ・2012/08/26 公開 ・2012/09/09 Window_Selectableにメソッド追加 ・2014/04/20 利用者にとってあまり意味のないメソッドの削除 ・2015/03/25 method_defined?をエイリアスして機能の拡張 ・2015/04/01 RGSS3用にメソッドをいくつか追加 #============================================================================== #------------------------------------------------------------------------------ [対応] ・RGSS2、RGSS3両方可能 #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ [機能] ・焼きノリが制作したスクリプトを使う際に必要になります。 ・RGSS3のみ、TPの割合を取得するメソッドを正しい処理に再定義しています。 #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ [使用方法] ・必ず、拙作の他のスクリプトの一番上に配置してください。 #------------------------------------------------------------------------------ [再定義箇所] ・RGSS3のみ Game_BattlerBase の tp_rate #------------------------------------------------------------------------------ [○ : 新規定義, ◎ : エイリアス定義, ● : 再定義] #------------------------------------------------------------------------------ =end $YkNr_Scripts ||= {} $YkNr_Scripts[:YakiNoriBaseScripts] = true #※このスクリプトを使用しない場合は、↑を false にすること if $YkNr_Scripts[:YakiNoriBaseScripts] #============================================================================== # ■ YakiNori #------------------------------------------------------------------------------ # 拙作の各自作スクリプトで使用するメソッドの集まりです。 #============================================================================== module YakiNori #-------------------------------------------------------------------------- # ○ 定数用モジュールに定義されている定数をフリーズ # このメソッドのみ、定数モジュールより先に定義する #-------------------------------------------------------------------------- def self.freeze_all_constants(mod) _const_modules = "#{mod.name}::Const" eval("#{_const_modules}.constants").each do |const| _constant = "#{_const_modules}::#{const}" eval("#{_constant}.freeze") if !eval("#{_constant}.frozen?") end end #============================================================================== # ■ 定数用モジュール #============================================================================== module Const end freeze_all_constants(self) # 定数をフリーズ #============================================================================== # ■ インスタンスメソッド用モジュール #------------------------------------------------------------------------------ # このモジュールをインクルードすることで、ここで定義したメソッドが使用可能。 #============================================================================== module Instance end #============================================================================== # ■ 拡張モジュール用モジュール #------------------------------------------------------------------------------ # このモジュールに自作スクリプトで使用するモジュールを集結させます #============================================================================== module BaseExModules # オブジェクトクラスにインクルード Object.__send__ :include, self end #============================================================================== # ■ 特異メソッド #============================================================================== #-------------------------------------------------------------------------- # ○ 拡張モジュール用モジュールに定義されているか取得 # 引数は、RGSS,RGSS2では文字列に、RGSS3はシンボル値を渡してください #-------------------------------------------------------------------------- def self.include_module?(module_name_sym) BaseExModules.constants.include?(module_name_sym) end end #============================================================================== # ■ Kernel #============================================================================== module Kernel #-------------------------------------------------------------------------- # ○ RPGVXAce かどうか #-------------------------------------------------------------------------- def vxace? # Ruby 1.9 以降とそれ以前では、実行結果が違う return false if public_methods.all? {|item| item.is_a?(String)} return false if !defined?(Graphics.play_movie) return defined?(BasicObject) end #-------------------------------------------------------------------------- # ○ RGSSのバージョンを取得 #-------------------------------------------------------------------------- def rgss_version _version = {2 => false, 3 => false} _version[vxace? ? 3 : 2] = true return _version end #-------------------------------------------------------------------------- # ○ 定数 #-------------------------------------------------------------------------- RGSS = rgss_version; RGSS.freeze end #============================================================================== # ■ Module #============================================================================== class Module < Object #-------------------------------------------------------------------------- # ◎ インスタンスメソッドが定義されているか判定 #-------------------------------------------------------------------------- alias method_defined_from_all? :method_defined? def method_defined?(method_name, all = true) if all method_defined_from_all?(method_name) else method_name = RGSS[3] ? method_name.to_sym : method_name.to_s instance_methods(false).include?(method_name) end end end #============================================================================== # ■ Game_CharacterBase #============================================================================== class Game_CharacterBase #-------------------------------------------------------------------------- # ○ 正面にイベントが存在するか取得 #-------------------------------------------------------------------------- def exist_event_front? x2 = $game_map.round_x_with_direction(@x, @direction) y2 = $game_map.round_y_with_direction(@y, @direction) return !$game_map.events_xy(x2, y2).empty? end end #============================================================================== # ■ Game_Map #============================================================================== class Game_Map #-------------------------------------------------------------------------- # ○ エディター上のマップ名を取得 #-------------------------------------------------------------------------- def editor_name $data_mapinfos[map_id].name end end #============================================================================== # ■ Game_Event #============================================================================== class Game_Event < Game_Character #-------------------------------------------------------------------------- # ○ イベント名の取得 #-------------------------------------------------------------------------- def name @event.name end end #============================================================================== # ■ Window_Base #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ○ ゲージの描画 (外枠付) # rate : 割合(1.0 で満タン) # color1 : グラデーション 左端 # color2 : グラデーション 右端 #-------------------------------------------------------------------------- def draw_gauge_ex(x, y, width, rate, color1, color2) fill_w = ((width-2) * rate).to_i gauge_y = y + line_height - 8 contents.fill_rect(x, gauge_y, width, 8, gauge_back_color) contents.gradient_fill_rect(x+1, gauge_y+1, fill_w, 6, color1, color2) end end #============================================================================== # ■ Window_Selectable #============================================================================== class Window_Selectable < Window_Base #-------------------------------------------------------------------------- # ○ 現在の列の取得 #-------------------------------------------------------------------------- def column index % col_max end #-------------------------------------------------------------------------- # ○ 行と列から項目の位置を取得 #-------------------------------------------------------------------------- def index_pos(row, column) row * col_max + (column - 1) end end #============================================================================== # □ ここから VX Ace のみ #============================================================================== if RGSS[3] #============================================================================== # ■ Game_BattlerBase #============================================================================== class Game_BattlerBase #-------------------------------------------------------------------------- # ● TP の割合を取得 #-------------------------------------------------------------------------- def tp_rate @tp.to_f / max_tp end end #============================================================================== # ■ Game_Unit #============================================================================== class Game_Unit #-------------------------------------------------------------------------- # ○ 合計値を計算 #-------------------------------------------------------------------------- def hp_sum; members.inject(0) {|r, m| r += m.hp }; end # HP def mp_sum; members.inject(0) {|r, m| r += m.mp }; end # MP def tp_sum; members.inject(0) {|r, m| r += m.tp }; end # TP def mhp_sum; members.inject(0) {|r, m| r += m.mhp }; end # 最大HP def mmp_sum; members.inject(0) {|r, m| r += m.mmp }; end # 最大MP def mtp_sum; members.inject(0) {|r, m| r += m.max_tp }; end # 最大TP #-------------------------------------------------------------------------- # ○ 割合を計算 #-------------------------------------------------------------------------- def hp_rate; members.size == 0 ? 1 : hp_sum.to_f / mhp_sum; end # HP def mp_rate; members.size == 0 ? 1 : mp_sum.to_f / mmp_sum; end # MP def tp_rate; members.size == 0 ? 1 : tp_sum.to_f / mtp_sum; end # TP #-------------------------------------------------------------------------- # ○ 攻撃力の平均値を計算 #-------------------------------------------------------------------------- def atk return 1 if members.size == 0 members.inject(0) {|r, member| r += member.atk } / members.size end #-------------------------------------------------------------------------- # ○ 防御力の平均値を計算 #-------------------------------------------------------------------------- def def return 1 if members.size == 0 members.inject(0) {|r, member| r += member.def } / members.size end #-------------------------------------------------------------------------- # ○ 魔法力の平均値を計算 #-------------------------------------------------------------------------- def mat return 1 if members.size == 0 members.inject(0) {|r, member| r += member.mat } / members.size end #-------------------------------------------------------------------------- # ○ 魔法防御の平均値を計算 #-------------------------------------------------------------------------- def mdf return 1 if members.size == 0 members.inject(0) {|r, member| r += member.mdf } / members.size end #-------------------------------------------------------------------------- # ○ 運の平均値を計算 #-------------------------------------------------------------------------- def luk return 1 if members.size == 0 members.inject(0) {|r, member| r += member.luk } / members.size end end #============================================================================== # □ ここまで VX Ace のみ / ここから VX のみ #============================================================================== elsif !RGSS[3] #-------------------------------------------------------------------------- # ○ $data_mapinfos のロード #-------------------------------------------------------------------------- $data_mapinfos ||= load_data("Data/MapInfos.rvdata") #============================================================================== # ■ Game_Map #============================================================================== class Game_Map #-------------------------------------------------------------------------- # ◎ マップ名を取得 #-------------------------------------------------------------------------- alias name editor_name end #============================================================================== # ■ Window_Base #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ○ テキスト描画色の変更 # enabled : 有効フラグ。false のとき半透明で描画 #-------------------------------------------------------------------------- def change_color(color, enabled = true) contents.font.color.set(color) contents.font.color.alpha = translucent_alpha unless enabled end #-------------------------------------------------------------------------- # ○ テキストの描画 # args : Bitmap#draw_text と同じ #-------------------------------------------------------------------------- def draw_text(*args) contents.draw_text(*args) end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ○ 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :previous_scene # 現在のひとつ前の画面(文字列) #-------------------------------------------------------------------------- # ◎ オブジェクト初期化 #-------------------------------------------------------------------------- alias yknr_LogDisable_initialize initialize def initialize yknr_LogDisable_initialize @previous_scene = "" end end #============================================================================== # ■ Scene_Base #============================================================================== class Scene_Base #-------------------------------------------------------------------------- # ○ 終了処理 #-------------------------------------------------------------------------- def terminate # 現在の画面を保存 $game_temp.previous_scene = self.class.name end end end # !RGSS[3] end # $YkNr_Scripts