sacred-ritual-academy/Scripts/YakiNoriBaseScripts.rb
2025-03-18 19:45:34 -05:00

366 lines
16 KiB
Ruby
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

=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