赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 815 |
最后登录 | 2023-11-11 |
在线时间 | 4 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 55
- 在线时间
- 4 小时
- 注册时间
- 2007-4-2
- 帖子
- 58
|
2楼
楼主 |
发表于 2008-12-27 18:19:14
|
只看该作者
#==============================================================================
# ■ RPG::Item
#==============================================================================
class RPG::Item < RPG::UsableItem
#--------------------------------------------------------------------------
# ○ 再現機能のキャッシュ生成
#--------------------------------------------------------------------------
def create_reproduce_functions_cache
super
@__usable_count = 1
@__skill_id = 0
self.note.split(/[\r\n]+/).each { |line|
case line
when KGC::ReproduceFunctions::Regexp::Item::MULTI_USABLE
# 使用可能回数
@__usable_count = $1.to_i
when KGC::ReproduceFunctions::Regexp::Item::EXEC_SKILL
# 発動スキル ID
@__skill_id = $1.to_i
end
}
end
#--------------------------------------------------------------------------
# ● アニメーション ID
#--------------------------------------------------------------------------
def animation_id
if exec_skill?
return $data_skills[skill_id].animation_id
else
return @animation_id
end
end
#--------------------------------------------------------------------------
# ○ 使用可能回数
#--------------------------------------------------------------------------
def usable_count
create_reproduce_functions_cache if @__usable_count == nil
return @__usable_count
end
#--------------------------------------------------------------------------
# ○ スキル発動判定
#--------------------------------------------------------------------------
def exec_skill?
return (skill_id > 0)
end
#--------------------------------------------------------------------------
# ○ 発動スキル ID
#--------------------------------------------------------------------------
def skill_id
create_reproduce_functions_cache if @__skill_id == nil
return @__skill_id
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::Skill
#==============================================================================
class RPG::Skill < RPG::UsableItem
#--------------------------------------------------------------------------
# ○ 再現機能のキャッシュ生成
#--------------------------------------------------------------------------
def create_reproduce_functions_cache
super
@__weapon_element_set =
self.element_set & KGC::ReproduceFunctions::WEAPON_ELEMENT_ID_LIST
end
#--------------------------------------------------------------------------
# ○ 使用時に必要な武器属性を取得
#--------------------------------------------------------------------------
def weapon_element_set
create_reproduce_functions_cache if @__weapon_element_set == nil
return @__weapon_element_set
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::Enemy
#==============================================================================
class RPG::Enemy
#--------------------------------------------------------------------------
# ○ 再現機能のキャッシュ生成
#--------------------------------------------------------------------------
def create_reproduce_functions_cache
@__translucent = false
@__cri = 0
self.note.split(/[\r\n]+/).each { |line|
case line
when KGC::ReproduceFunctions::Regexp::Enemy::TRANSLUCENT
# 半透明
@__translucent = true
when KGC::ReproduceFunctions::Regexp::Enemy::CRITICAL
# クリティカル修正
@__cri += $1.to_i
end
}
end
#--------------------------------------------------------------------------
# ○ 半透明
#--------------------------------------------------------------------------
def translucent?
create_reproduce_functions_cache if @__translucent == nil
return @__translucent
end
#--------------------------------------------------------------------------
# ○ クリティカル修正
#--------------------------------------------------------------------------
def cri
create_reproduce_functions_cache if @__cri == nil
return @__cri
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::State
#==============================================================================
class RPG::State
#--------------------------------------------------------------------------
# ○ 再現機能のキャッシュ生成
#--------------------------------------------------------------------------
def create_reproduce_functions_cache
@__seal_atk_f = 999
@__seal_spi_f = 999
@__plus_state_set = []
self.note.split(/[\r\n]+/).each { |line|
case line
when KGC::ReproduceFunctions::Regexp::State::SEAL_ATK_F_JP,
KGC::ReproduceFunctions::Regexp::State::SEAL_ATK_F_EN
# 封印するスキルの打撃関係度
@__seal_atk_f = $1.to_i
when KGC::ReproduceFunctions::Regexp::State::SEAL_SPI_F_JP,
KGC::ReproduceFunctions::Regexp::State::SEAL_SPI_F_EN
# 封印するスキルの精神関係度
@__seal_spi_f = $1.to_i
when KGC::ReproduceFunctions::Regexp::State::PLUS_STATE
# 付加ステート
$1.scan(/\d+/).each { |num|
if (state = $data_states[num.to_i]) != nil
@__plus_state_set << state.id
end
}
end
}
create_parameter_rate_cache
end
#--------------------------------------------------------------------------
# ○ パラメータ修正値のキャッシュ生成
#--------------------------------------------------------------------------
def create_parameter_rate_cache
@__parameter_rate = {}
# 初期化
KGC::ReproduceFunctions::Regexp::State::PARAMETER_NAME.each_key { |k|
@__parameter_rate[k] = 100
}
# メモ反映
self.note.split(/[\r\n]+/).each { |line|
KGC::ReproduceFunctions::Regexp::State::PARAMETER_NAME.each { |k, v|
if line =~ /<(?:#{v})[ ]*(\d+)[%%]>/i
@__parameter_rate[k] = @__parameter_rate[k] * $1.to_i / 100
break
end
}
}
end
#--------------------------------------------------------------------------
# ○ MaxHP 修正
#--------------------------------------------------------------------------
def maxhp_rate
create_reproduce_functions_cache if @__parameter_rate == nil
return @__parameter_rate["maxhp"]
end
#--------------------------------------------------------------------------
# ○ MaxMP 修正
#--------------------------------------------------------------------------
def maxmp_rate
create_reproduce_functions_cache if @__parameter_rate == nil
return @__parameter_rate["maxmp"]
end
#--------------------------------------------------------------------------
# ○ 封印するスキルの打撃関係度
#--------------------------------------------------------------------------
def seal_atk_f
create_reproduce_functions_cache if @__seal_atk_f == nil
return @__seal_atk_f
end
#--------------------------------------------------------------------------
# ○ 封印するスキルの精神関係度
#--------------------------------------------------------------------------
def seal_spi_f
create_reproduce_functions_cache if @__seal_spi_f == nil
return @__seal_spi_f
end
#--------------------------------------------------------------------------
# ○ 付加ステート
#--------------------------------------------------------------------------
def plus_state_set
create_reproduce_functions_cache if @__plus_state_set == nil
return @__plus_state_set
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :exec_skill_on_item # アイテムによるスキル発動フラグ
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_ReproduceFunctions initialize
def initialize
initialize_KGC_ReproduceFunctions
@exec_skill_on_item = false
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 現在のステートをオブジェクトの配列で取得
#--------------------------------------------------------------------------
alias states_KGC_ReproduceFunctions states
def states
result = states_KGC_ReproduceFunctions + auto_states
result.sort! { |a, b| b.priority <=> a.priority }
return result
end
#--------------------------------------------------------------------------
# ● MaxHP の取得
#--------------------------------------------------------------------------
alias maxhp_KGC_ReproduceFunctions maxhp
def maxhp
n = maxhp_KGC_ReproduceFunctions
states.each { |state| n *= state.maxhp_rate / 100.0 }
return [[Integer(n), 1].max, maxhp_limit].min
end
#--------------------------------------------------------------------------
# ● MaxMP の取得
#--------------------------------------------------------------------------
alias maxmp_KGC_ReproduceFunctions maxmp
def maxmp
n = maxmp_KGC_ReproduceFunctions
states.each { |state| n *= state.maxmp_rate / 100.0 }
limit = (defined?(maxmp_limit) ? maxmp_limit : 9999)
return [[Integer(n), 0].max, limit].min
end
#--------------------------------------------------------------------------
# ● HP の取得
#--------------------------------------------------------------------------
alias hp_KGC_ReproduceFunctions_Battler hp
def hp
@hp = maxhp if @hp > maxhp
return hp_KGC_ReproduceFunctions_Battler
end
#--------------------------------------------------------------------------
# ● MP の取得
#--------------------------------------------------------------------------
alias mp_KGC_ReproduceFunctions_Battler mp
def mp
@mp = maxmp if @mp > maxmp
return mp_KGC_ReproduceFunctions_Battler
end
#--------------------------------------------------------------------------
# ○ オートステートの ID を取得
#--------------------------------------------------------------------------
def auto_state_ids
return auto_states(true)
end
#--------------------------------------------------------------------------
# ○ オートステートの配列を取得
# id_only : ID のみを取得
#--------------------------------------------------------------------------
def auto_states(id_only = false)
return []
end
#--------------------------------------------------------------------------
# ● ステートの検査
# state_id : ステート ID
# 該当するステートが付加されていれば true を返す。
#--------------------------------------------------------------------------
alias state_KGC_ReproduceFunctions? state?
def state?(state_id)
return (state_KGC_ReproduceFunctions?(state_id) || auto_state?(state_id))
end
#--------------------------------------------------------------------------
# ● ステートの付加
# state_id : ステート ID
#--------------------------------------------------------------------------
alias add_state_KGC_ReproduceFunctions add_state
def add_state(state_id)
last_states = @states.dup
add_state_KGC_ReproduceFunctions(state_id)
if (@states - last_states).include?(state_id) # ステートが付加された場合
state = $data_states[state_id]
# [付加するステート] を適用
state.plus_state_set.each { |i|
add_state(i)
}
end
end
#--------------------------------------------------------------------------
# ○ オートステートの検査
# state_id : ステート ID
# 該当するステートが付加されていれば true を返す。
#--------------------------------------------------------------------------
def auto_state?(state_id)
return auto_state_ids.include?(state_id)
end
#--------------------------------------------------------------------------
# ● ステートの解除
# state_id : ステート ID
#--------------------------------------------------------------------------
alias remove_state_KGC_ReproduceFunctions remove_state
def remove_state(state_id)
if auto_state?(state_id) # オートステートは解除しない
return
end
remove_state_KGC_ReproduceFunctions(state_id)
end
#--------------------------------------------------------------------------
# ○ 半透明化判定
#--------------------------------------------------------------------------
def translucent?
# エネミーの場合は Game_Enemy で再定義
return false
end
#--------------------------------------------------------------------------
# ○ 装備オプション [全体攻撃] の取得
#--------------------------------------------------------------------------
def whole_attack
return false
end
#--------------------------------------------------------------------------
# ○ 装備オプション [回避無視] の取得
#--------------------------------------------------------------------------
def ignore_eva
return false
end
#--------------------------------------------------------------------------
# ○ MP ダメージ加算
# value : 加算する値
#--------------------------------------------------------------------------
def add_mp_damage(value)
@mp_damage += value
end
#--------------------------------------------------------------------------
# ○ 通常攻撃の消費 MP 計算
#--------------------------------------------------------------------------
def calc_attack_mp_cost
return 0
end
#--------------------------------------------------------------------------
# ● スキルの使用可能判定
# skill : スキル
#--------------------------------------------------------------------------
alias skill_can_use_KGC_ReproduceFunctions? skill_can_use?
def skill_can_use?(skill)
return false unless skill.is_a?(RPG::Skill)
return false if skill_seal?(skill)
return false unless skill_satisfied_weapon_element?(skill)
return skill_can_use_KGC_ReproduceFunctions?(skill)
end
#--------------------------------------------------------------------------
# ○ スキル封印判定
#--------------------------------------------------------------------------
def skill_seal?(skill)
return (seal_atk_f <= skill.atk_f || seal_spi_f <= skill.spi_f)
end
#--------------------------------------------------------------------------
# ○ 封印する打撃関係度を取得
#--------------------------------------------------------------------------
def seal_atk_f
n = 999
states.each { |state| n = [n, state.seal_atk_f].min }
return n
end
#--------------------------------------------------------------------------
# ○ 封印する精神関係度を取得
#--------------------------------------------------------------------------
def seal_spi_f
n = 999
states.each { |state| n = [n, state.seal_spi_f].min }
return n
end
#--------------------------------------------------------------------------
# ○ 必要な武器属性を満たしているか判定
#--------------------------------------------------------------------------
def skill_satisfied_weapon_element?(skill)
return true
end
#--------------------------------------------------------------------------
# ● 最終回避率の計算
# user : 攻撃者、スキルまたはアイテムの使用者
# obj : スキルまたはアイテム (通常攻撃の場合は nil)
#--------------------------------------------------------------------------
alias calc_eva_KGC_ReproduceFunctions calc_eva
def calc_eva(user, obj = nil)
eva = calc_eva_KGC_ReproduceFunctions(user, obj)
if obj == nil && user.ignore_eva # 通常攻撃かつ回避無視の場合
eva = 0
end
return eva
end
#--------------------------------------------------------------------------
# ● アイテムの効果適用
# user : アイテムの使用者
# item : アイテム
#--------------------------------------------------------------------------
alias item_effect_KGC_ReproduceFunctions item_effect
def item_effect(user, item)
# スキル発動判定
if item.exec_skill?
$game_temp.exec_skill_on_item = true
skill_effect(user, $data_skills[item.skill_id])
$game_temp.exec_skill_on_item = false
else
item_effect_KGC_ReproduceFunctions(user, item)
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_BattleAction
#==============================================================================
class Game_BattleAction
#--------------------------------------------------------------------------
# ● 通常攻撃のターゲット作成
#--------------------------------------------------------------------------
alias make_attack_targets_KGC_ReproduceFunctions make_attack_targets
def make_attack_targets
unless battler.whole_attack # 全体攻撃でない
return make_attack_targets_KGC_ReproduceFunctions
end
targets = []
if battler.confusion?
targets += friends_unit.existing_members
else
targets += opponents_unit.existing_members
end
if battler.dual_attack # 連続攻撃
targets += targets
end
return targets.compact
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● クリティカル率の取得
#--------------------------------------------------------------------------
alias cri_KGC_ReproduceFunctions cri
def cri
n = cri_KGC_ReproduceFunctions
equips.compact.each { |item| n += item.cri }
return n
end
#--------------------------------------------------------------------------
# ○ オートステートの配列を取得
# id_only : ID のみを取得
#--------------------------------------------------------------------------
def auto_states(id_only = false)
result = []
equips.compact.each { |item|
result |= (id_only ? item.auto_state_ids : item.auto_states)
}
return result
end
#--------------------------------------------------------------------------
# ○ 装備オプション [全体攻撃] の取得
#--------------------------------------------------------------------------
def whole_attack
equips.compact.each { |item|
return true if item.whole_attack
}
return false
end
#--------------------------------------------------------------------------
# ○ 装備オプション [回避無視] の取得
#--------------------------------------------------------------------------
def ignore_eva
equips.compact.each { |item|
return true if item.ignore_eva
}
return false
end
#--------------------------------------------------------------------------
# ○ 通常攻撃の消費 MP 計算
#--------------------------------------------------------------------------
def calc_attack_mp_cost
n = 0
equips.compact.each { |item|
n += item.mp_cost
}
return n
end
#--------------------------------------------------------------------------
# ○ 必要な武器属性を満たしているか判定
#--------------------------------------------------------------------------
def skill_satisfied_weapon_element?(skill)
elements = skill.weapon_element_set
return (self.element_set & elements) == elements
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ○ 半透明化判定
#--------------------------------------------------------------------------
def translucent?
return enemy.translucent?
end
#--------------------------------------------------------------------------
# ● クリティカル率の取得
#--------------------------------------------------------------------------
alias cri_KGC_ReproduceFunctions cri
def cri
n = cri_KGC_ReproduceFunctions
if enemy.has_critical && enemy.cri != 0
n += enemy.cri - 10
end
return n
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party < Game_Unit
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_ReproduceFunctions initialize
def initialize
initialize_KGC_ReproduceFunctions
@item_use_count = {} # 所持品使用回数ハッシュ (アイテム ID)
end
#--------------------------------------------------------------------------
# ● アイテムの減少
# item : アイテム
# n : 個数
# include_equip : 装備品も含める
#--------------------------------------------------------------------------
alias lose_item_KGC_ReproduceFunctions lose_item
def lose_item(item, n, include_equip = false)
lose_item_KGC_ReproduceFunctions(item, n, include_equip)
# アイテムが無くなったら使用回数をリセット
if item.is_a?(RPG::Item) && item.consumable && item_number(item) == 0
@item_use_count[item.id] = 0
end
end
#--------------------------------------------------------------------------
# ● アイテムの消耗
# item : アイテム
#--------------------------------------------------------------------------
alias consume_item_KGC_ReproduceFunctions consume_item
def consume_item(item)
if item.is_a?(RPG::Item) && item.consumable
update_use_count(item)
# 使用回数が 0 の場合のみ消耗
if @item_use_count[item.id] == 0
consume_item_KGC_ReproduceFunctions(item)
end
else
consume_item_KGC_ReproduceFunctions(item)
end
end
#--------------------------------------------------------------------------
# ○ 使用回数の更新
# item : アイテム
# 指定アイテムの使用回数を 1 増やす。
# 使用後に消耗する場合は、使用回数を 0 にする。
#--------------------------------------------------------------------------
def update_use_count(item)
if @item_use_count == nil
@item_use_count = {}
end
unless @item_use_count.has_key?(item.id)
@item_use_count[item.id] = 0
end
@item_use_count[item.id] += 1
# 使用可能回数に達したら、使用回数を 0 にする
if @item_use_count[item.id] >= item.usable_count
@item_use_count[item.id] = 0
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Sprite_Battler
#==============================================================================
class Sprite_Battler < Sprite_Base
#--------------------------------------------------------------------------
# ● エフェクトの更新
#--------------------------------------------------------------------------
alias update_effect_KGC_ReproduceFunctions update_effect
def update_effect
# エフェクト実行前に半透明化判定をしておく
trans_flag = (@effect_duration > 0 && @battler.translucent?)
update_effect_KGC_ReproduceFunctions
if trans_flag
self.opacity /= 2
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● 対象敵キャラ選択の開始
#--------------------------------------------------------------------------
alias start_target_enemy_selection_KGC_ReproduceFunctions start_target_enemy_selection
def start_target_enemy_selection
# 全体通常攻撃なら選択をスキップ
if @active_battler.action.kind == 0 &&
@active_battler.action.basic == 0 &&
@active_battler.whole_attack
next_actor
return
end
start_target_enemy_selection_KGC_ReproduceFunctions
end
#--------------------------------------------------------------------------
# ● 戦闘行動の実行 : 攻撃
#--------------------------------------------------------------------------
alias execute_action_attack_KGC_ReproduceFunctions execute_action_attack
def execute_action_attack
execute_action_attack_KGC_ReproduceFunctions
# 攻撃者の MP 消費
mp_cost = @active_battler.calc_attack_mp_cost
return if mp_cost == 0
@active_battler.mp -= mp_cost
if KGC::ReproduceFunctions::SHOW_WEAPON_MP_COST_ON_ATTACK
@active_battler.add_mp_damage(mp_cost)
display_mp_damage(@active_battler)
end
end
end
|
|