366 lines
16 KiB
Ruby
366 lines
16 KiB
Ruby
|
||
|
||
=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
|
||
|