Project1
标题:
关于技能消耗改造的
[打印本页]
作者:
shinliwei
时间:
2008-8-24 07:07
标题:
关于技能消耗改造的
有个技能消费改造的脚本,使用技能时默认都是消耗MP,用了该脚本就可以设置消耗HP.
但是在游戏里 查看技能时 技能后面 只能显示消耗的MP数值,就是好多技能后面都显示是0
这个怎么可以改下,把 消耗 HP MP 和 无消耗的都能分出来呢? [LINE]1,#dddddd[/LINE]
版务信息:本贴由楼主自主结贴~
作者:
shinliwei
时间:
2008-8-24 07:13
比如 1号技能要消耗10HP,就把后面改成-10HP, 2号技能消耗10MP 就改个-10MP
3号技能无消耗 就 显示-- 4号技能是个被动技能 就什么也不显示了
作者:
雪流星
时间:
2008-8-24 07:28
补充问题的时候请直接编辑帖子,不要连帖...
作者:
drgdrg
时间:
2008-8-24 19:16
请给出你说的那个脚本。。。 [LINE]1,#dddddd[/LINE]
系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者:
shinliwei
时间:
2008-8-25 02:00
#==============================================================================
# 本汉化脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/
#
# ◆ MP 消費改造 - KGC_MPCostAlter ◆ VX ◆
#
#
#_/ ◇ Last update : 2008/02/06 ◇
#
#原脚本来源:http://f44.aaa.livedoor.jp/~ytomy/tkool/rpgtech/techlist_vx.html
#
#
# 汉化:CHAR工作室
#_/----------------------------------------------------------------------------
#_/
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#
#功能介绍:
#
#HP消费:使用特定的技能时消耗HP
#
#MP比例消费:让特定按照一定比例来消耗MP,而非消耗固定值
#
#消费MP比例伤害:让特定技能的伤害数值变成跟该技能的MP消耗量相关联
#
#
#-----------------------------------------------------------------------------
#
#—————————————————使用方法——————————————————
#
#一、HP消费:
#
# 在特定技能的备注中加入括弧和文字:<HP消费>
#
# 效果:使用该技能时将消费HP,而且会在技能消耗值前面表示出来
#
#
#
#
#二、MP比例消费:
#
# 01、残存MP比例消费
#
# 在特定技能的备注中加入括弧和文字:<MP比例消费>
#
# 效果:如果该技能在数据库中的消费量是10,那么在使用该技能时
# 将消耗当前残存的MP的10%。
#
# 02、最大MP比例消费
#
# 在特定技能的备注中加入括弧和文字:<MAXMP比例消费>
#
# 效果:如果该技能在数据库中的消费量是10,那么在使用该技能时
# 将消费该角色最大MP的10%。
#
#
#
#三、消费MP比例伤害
#
# 在特定技能的备注中加入括弧和文字:<消费MP比例伤害>
#
# 效果:很囧的效果,技能的基本伤害值变为该技能所消耗MP数值的一定比例。
#
# 比如,该技能在数据库中的MP消费量是40,基本伤害是500
# 那么该技能的实际基本伤害将是所消费MP的500% = 200
#
#
#==============================================================================
# ★ 脚本设定项目 ★
#==============================================================================
module KGC
module MPCostAlter
# ◆ HP 为0场合下的设定
# true : HP 消费到0的时候,仍然能够继续使用相应技能
# false : HP 消费到0的时候,无法继续使用相应技能
PERMIT_ZERO_HP = false
# ◆ HP 消費制限解除
# true : HP 不足的时候仍然能够使用HP消耗的技能,但是使用后角色死亡
# false : HP 不足的时候无法使用HP消耗的技能。(通常)
RELEASE_HP_LIMIT = false
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
$imported = {} if $imported == nil
$imported["MPCostAlter"] = true
module KGC::MPCostAlter
# 正規表現
module Regexp
# スキル
module Skill
# HP 消費
CONSUME_HP = /<(?:CONSUME_HP|HP消费)>/i
# MP 割合消費
MP_COST_RATE = /<(MAX)?(?:MP_COST_RATE|MP比例消费)>/i
# 消費 MP 比例伤害
MP_PROPORTIONAL_DAMAGE =
/<(?:MP_PROPORTIONAL_DAMAGE|消费MP比例伤害)>/i
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::Skill
#==============================================================================
class RPG::Skill < RPG::UsableItem
#--------------------------------------------------------------------------
# ○ MP 消費改造のキャッシュを生成
#--------------------------------------------------------------------------
def create_mp_cost_alter_cache
@__consume_hp = false
@__mp_cost_rate = false
@__max_mp_cost_rate = false
@__mp_proportional_damage = false
self.note.split(/[\r\n]+/).each { |prop|
case prop
when KGC::MPCostAlter::Regexp::Skill::CONSUME_HP
# HP 消費
@__consume_hp = true
when KGC::MPCostAlter::Regexp::Skill::MP_COST_RATE
# MP 割合消費
@__mp_cost_rate = true
@__max_mp_cost_rate = ($1 != nil)
when KGC::MPCostAlter::Regexp::Skill::MP_PROPORTIONAL_DAMAGE
# 消費 MP 比例ダメージ
@__mp_proportional_damage = true
end
}
end
#--------------------------------------------------------------------------
# ○ HP 消費
#--------------------------------------------------------------------------
def consume_hp
create_mp_cost_alter_cache if @__consume_hp == nil
return @__consume_hp
end
#--------------------------------------------------------------------------
# ○ 消費 MP 割合
#--------------------------------------------------------------------------
def mp_cost_rate
create_mp_cost_alter_cache if @__mp_cost_rate == nil
return (@__mp_cost_rate ? self.mp_cost : -1)
end
#--------------------------------------------------------------------------
# ○ MaxMP 割合消費
#--------------------------------------------------------------------------
def max_mp_cost_rate
create_mp_cost_alter_cache if @__max_mp_cost_rate == nil
return @__max_mp_cost_rate
end
#--------------------------------------------------------------------------
# ○ 消費 MP 比例ダメージ
#--------------------------------------------------------------------------
def mp_proportional_damage
create_mp_cost_alter_cache if @__mp_proportional_damage == nil
return @__mp_proportional_damage
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :spend_cost # 消費した HP/MP
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_MPCostAlter initialize
def initialize
initialize_KGC_MPCostAlter
@spend_cost = 0
end
#--------------------------------------------------------------------------
# ● スキルの消費 MP 計算
# skill : スキル
#--------------------------------------------------------------------------
alias calc_mp_cost_KGC_MPCostAlter calc_mp_cost
def calc_mp_cost(skill)
return 0 if skill.consume_hp # HP 消費
if skill.mp_cost_rate < 0 # 割合消費でない
return calc_mp_cost_KGC_MPCostAlter(skill)
end
if skill.max_mp_cost_rate # MaxMP 割合消費
return calc_skill_cost_rate(skill, maxmp)
else # MP 割合消費
return calc_skill_cost_rate(skill, mp)
end
end
#--------------------------------------------------------------------------
# ○ スキルの割合消費量計算
# skill : スキル
# base : 基準値
#--------------------------------------------------------------------------
def calc_skill_cost_rate(skill, base)
return base * skill.mp_cost_rate / 100
end
#--------------------------------------------------------------------------
# ○ スキルの消費 HP 計算
# skill : スキル
#--------------------------------------------------------------------------
def calc_hp_cost(skill)
return 0 unless skill.consume_hp # HP 消費でない
if skill.mp_cost_rate < 0 # 割合消費でない
return skill.mp_cost
end
if skill.max_mp_cost_rate # MaxHP 割合消費
return calc_skill_cost_rate(skill, maxhp)
else # HP 割合消費
return calc_skill_cost_rate(skill, hp)
end
end
#--------------------------------------------------------------------------
# ○ 消費すべき HP/MP 量を保持
# skill : スキル
#--------------------------------------------------------------------------
def set_spend_cost(skill)
@spend_cost = [calc_hp_cost(skill), calc_mp_cost(skill)].max
end
#--------------------------------------------------------------------------
# ● スキルの使用可能判定
# skill : スキル
#--------------------------------------------------------------------------
alias skill_can_use_KGC_MPCostAlter? skill_can_use?
def skill_can_use?(skill)
return false unless skill.is_a?(RPG::Skill) # スキルでない
return false unless mp_cost_restrict_clear?(skill) # MP 制限抵触
return false unless hp_cost_restrict_clear?(skill) # HP 制限抵触
return skill_can_use_KGC_MPCostAlter?(skill)
end
#--------------------------------------------------------------------------
# ○ MP 制限クリア判定
# skill : スキル
#--------------------------------------------------------------------------
def mp_cost_restrict_clear?(skill)
return true if skill.consume_hp # HP 消費
# 割合消費の場合は、消費量が 1 以上でないと使用不可
if skill.mp_cost_rate >= 0
return false if calc_mp_cost(skill) == 0
end
return calc_mp_cost(skill) <= mp
end
#--------------------------------------------------------------------------
# ○ HP 制限クリア判定
# skill : スキル
#--------------------------------------------------------------------------
def hp_cost_restrict_clear?(skill)
return true unless skill.consume_hp # MP 消費
# 割合消費の場合は、消費量が 1 以上でないと使用不可
if skill.mp_cost_rate >= 0
return false if calc_hp_cost(skill) == 0
end
if KGC::MPCostAlter::RELEASE_HP_LIMIT
# 制限解除の場合は使用可能
return true
elsif KGC::MPCostAlter::PERMIT_ZERO_HP
# HP と同量まで消費可能
return calc_hp_cost(skill) <= hp
else
# 1 以上残る必要あり
return calc_hp_cost(skill) < hp
end
end
#--------------------------------------------------------------------------
# ● スキルまたはアイテムによるダメージ計算
# user : スキルまたはアイテムの使用者
# obj : スキルまたはアイテム
# 結果は @hp_damage または @mp_damage に代入する。
#--------------------------------------------------------------------------
alias make_obj_damage_value_KGC_MPCostAlter make_obj_damage_value
def make_obj_damage_value(user, obj)
# 消費 MP 比例ダメージでない場合
unless obj.is_a?(RPG::Skill) && obj.mp_proportional_damage
# 元の計算式を使用
make_obj_damage_value_KGC_MPCostAlter(user, obj)
return
end
damage = user.spend_cost * obj.base_damage / 100 # 基本ダメージ算出
damage *= elements_max_rate(obj.element_set) # 属性修正
damage /= 100
damage = apply_variance(damage, obj.variance) # 分散
damage = apply_guard(damage) # 防御修正
if obj.damage_to_mp
@mp_damage = damage # MP にダメージ
else
@hp_damage = damage # HP にダメージ
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Window_Skill
#==============================================================================
class Window_Skill < Window_Selectable
#--------------------------------------------------------------------------
# ● 項目の描画
# index : 項目番号
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
skill = @data[index]
if skill != nil
rect.width -= 4
enabled = @actor.skill_can_use?(skill)
draw_item_name(skill, rect.x, rect.y, enabled)
if skill.consume_hp
# HP 消費
text = sprintf("%s %d", Vocab.hp_a, @actor.calc_hp_cost(skill))
else
# MP 消費
text = @actor.calc_mp_cost(skill).to_s
end
self.contents.draw_text(rect, text, 2)
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill < Scene_Base
#--------------------------------------------------------------------------
# ● ターゲットの決定
# 効果なしの場合 (戦闘不能にポーションなど) ブザー SE を演奏。
#--------------------------------------------------------------------------
alias determine_target_KGC_MPCostAlter determine_target
def determine_target
@actor.set_spend_cost(@skill) # 消費する HP/MP をセット
determine_target_KGC_MPCostAlter
end
#--------------------------------------------------------------------------
# ● スキルの使用 (味方対象以外の使用効果を適用)
#--------------------------------------------------------------------------
alias use_skill_nontarget_KGC_MPCostAlter use_skill_nontarget
def use_skill_nontarget
@actor.hp -= @actor.calc_hp_cost(@skill)
use_skill_nontarget_KGC_MPCostAlter
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● 戦闘行動の実行 : スキル
#--------------------------------------------------------------------------
alias execute_action_skill_KGC_MPCostAlter execute_action_skill
def execute_action_skill
skill = @active_battler.action.skill
@active_battler.set_spend_cost(skill) # 消費する HP/MP をセット
if skill.consume_hp
hp_cost = [@active_battler.hp - 1,
@active_battler.spend_cost].min # HP を 1 だけ残す
@active_battler.hp -= hp_cost
end
execute_action_skill_KGC_MPCostAlter
# 死亡するはずだった場合
if skill.consume_hp && hp_cost < @active_battler.spend_cost
@active_battler.hp = 0 # HP を 0 にする
display_added_states(@active_battler) # 死亡メッセージの表示
end
end
end
复制代码
就是这个脚本
作者:
shinliwei
时间:
2008-8-26 04:40
谁会改下?
作者:
drgdrg
时间:
2008-8-26 04:44
#==============================================================================
# 本汉化脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/
#
# ◆ MP 消費改造 - KGC_MPCostAlter ◆ VX ◆
#
#
#_/ ◇ Last update : 2008/02/06 ◇
#
#原脚本来源:http://f44.aaa.livedoor.jp/~ytomy/tkool/rpgtech/techlist_vx.html
#
#
# 汉化:CHAR工作室
#_/----------------------------------------------------------------------------
#_/
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#
#功能介绍:
#
#HP消费:使用特定的技能时消耗HP
#
#MP比例消费:让特定按照一定比例来消耗MP,而非消耗固定值
#
#消费MP比例伤害:让特定技能的伤害数值变成跟该技能的MP消耗量相关联
#
#
#-----------------------------------------------------------------------------
#
#—————————————————使用方法——————————————————
#
#一、HP消费:
#
# 在特定技能的备注中加入括弧和文字:<HP消费>
#
# 效果:使用该技能时将消费HP,而且会在技能消耗值前面表示出来
#
#
#
#
#二、MP比例消费:
#
# 01、残存MP比例消费
#
# 在特定技能的备注中加入括弧和文字:<MP比例消费>
#
# 效果:如果该技能在数据库中的消费量是10,那么在使用该技能时
# 将消耗当前残存的MP的10%。
#
# 02、最大MP比例消费
#
# 在特定技能的备注中加入括弧和文字:<MAXMP比例消费>
#
# 效果:如果该技能在数据库中的消费量是10,那么在使用该技能时
# 将消费该角色最大MP的10%。
#
#
#
#三、消费MP比例伤害
#
# 在特定技能的备注中加入括弧和文字:<消费MP比例伤害>
#
# 效果:很囧的效果,技能的基本伤害值变为该技能所消耗MP数值的一定比例。
#
# 比如,该技能在数据库中的MP消费量是40,基本伤害是500
# 那么该技能的实际基本伤害将是所消费MP的500% = 200
#
#
#==============================================================================
# ★ 脚本设定项目 ★
#==============================================================================
module KGC
module MPCostAlter
# ◆ HP 为0场合下的设定
# true : HP 消费到0的时候,仍然能够继续使用相应技能
# false : HP 消费到0的时候,无法继续使用相应技能
PERMIT_ZERO_HP = false
# ◆ HP 消費制限解除
# true : HP 不足的时候仍然能够使用HP消耗的技能,但是使用后角色死亡
# false : HP 不足的时候无法使用HP消耗的技能。(通常)
RELEASE_HP_LIMIT = false
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
$imported = {} if $imported == nil
$imported["MPCostAlter"] = true
module KGC::MPCostAlter
# 正規表現
module Regexp
# スキル
module Skill
# HP 消費
CONSUME_HP = /<(?:CONSUME_HP|HP消费)>/i
# MP 割合消費
MP_COST_RATE = /<(MAX)?(?:MP_COST_RATE|MP比例消费)>/i
# 消費 MP 比例伤害
MP_PROPORTIONAL_DAMAGE =
/<(?:MP_PROPORTIONAL_DAMAGE|消费MP比例伤害)>/i
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::Skill
#==============================================================================
class RPG::Skill < RPG::UsableItem
#--------------------------------------------------------------------------
# ○ MP 消費改造のキャッシュを生成
#--------------------------------------------------------------------------
def create_mp_cost_alter_cache
@__consume_hp = false
@__mp_cost_rate = false
@__max_mp_cost_rate = false
@__mp_proportional_damage = false
self.note.split(/[\r\n]+/).each { |prop|
case prop
when KGC::MPCostAlter::Regexp::Skill::CONSUME_HP
# HP 消費
@__consume_hp = true
when KGC::MPCostAlter::Regexp::Skill::MP_COST_RATE
# MP 割合消費
@__mp_cost_rate = true
@__max_mp_cost_rate = ($1 != nil)
when KGC::MPCostAlter::Regexp::Skill::MP_PROPORTIONAL_DAMAGE
# 消費 MP 比例ダメージ
@__mp_proportional_damage = true
end
}
end
#--------------------------------------------------------------------------
# ○ HP 消費
#--------------------------------------------------------------------------
def consume_hp
create_mp_cost_alter_cache if @__consume_hp == nil
return @__consume_hp
end
#--------------------------------------------------------------------------
# ○ 消費 MP 割合
#--------------------------------------------------------------------------
def mp_cost_rate
create_mp_cost_alter_cache if @__mp_cost_rate == nil
return (@__mp_cost_rate ? self.mp_cost : -1)
end
#--------------------------------------------------------------------------
# ○ MaxMP 割合消費
#--------------------------------------------------------------------------
def max_mp_cost_rate
create_mp_cost_alter_cache if @__max_mp_cost_rate == nil
return @__max_mp_cost_rate
end
#--------------------------------------------------------------------------
# ○ 消費 MP 比例ダメージ
#--------------------------------------------------------------------------
def mp_proportional_damage
create_mp_cost_alter_cache if @__mp_proportional_damage == nil
return @__mp_proportional_damage
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :spend_cost # 消費した HP/MP
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_MPCostAlter initialize
def initialize
initialize_KGC_MPCostAlter
@spend_cost = 0
end
#--------------------------------------------------------------------------
# ● スキルの消費 MP 計算
# skill : スキル
#--------------------------------------------------------------------------
alias calc_mp_cost_KGC_MPCostAlter calc_mp_cost
def calc_mp_cost(skill)
return 0 if skill.consume_hp # HP 消費
if skill.mp_cost_rate < 0 # 割合消費でない
return calc_mp_cost_KGC_MPCostAlter(skill)
end
if skill.max_mp_cost_rate # MaxMP 割合消費
return calc_skill_cost_rate(skill, maxmp)
else # MP 割合消費
return calc_skill_cost_rate(skill, mp)
end
end
#--------------------------------------------------------------------------
# ○ スキルの割合消費量計算
# skill : スキル
# base : 基準値
#--------------------------------------------------------------------------
def calc_skill_cost_rate(skill, base)
return base * skill.mp_cost_rate / 100
end
#--------------------------------------------------------------------------
# ○ スキルの消費 HP 計算
# skill : スキル
#--------------------------------------------------------------------------
def calc_hp_cost(skill)
return 0 unless skill.consume_hp # HP 消費でない
if skill.mp_cost_rate < 0 # 割合消費でない
return skill.mp_cost
end
if skill.max_mp_cost_rate # MaxHP 割合消費
return calc_skill_cost_rate(skill, maxhp)
else # HP 割合消費
return calc_skill_cost_rate(skill, hp)
end
end
#--------------------------------------------------------------------------
# ○ 消費すべき HP/MP 量を保持
# skill : スキル
#--------------------------------------------------------------------------
def set_spend_cost(skill)
@spend_cost = [calc_hp_cost(skill), calc_mp_cost(skill)].max
end
#--------------------------------------------------------------------------
# ● スキルの使用可能判定
# skill : スキル
#--------------------------------------------------------------------------
alias skill_can_use_KGC_MPCostAlter? skill_can_use?
def skill_can_use?(skill)
return false unless skill.is_a?(RPG::Skill) # スキルでない
return false unless mp_cost_restrict_clear?(skill) # MP 制限抵触
return false unless hp_cost_restrict_clear?(skill) # HP 制限抵触
return skill_can_use_KGC_MPCostAlter?(skill)
end
#--------------------------------------------------------------------------
# ○ MP 制限クリア判定
# skill : スキル
#--------------------------------------------------------------------------
def mp_cost_restrict_clear?(skill)
return true if skill.consume_hp # HP 消費
# 割合消費の場合は、消費量が 1 以上でないと使用不可
if skill.mp_cost_rate >= 0
return false if calc_mp_cost(skill) == 0
end
return calc_mp_cost(skill) <= mp
end
#--------------------------------------------------------------------------
# ○ HP 制限クリア判定
# skill : スキル
#--------------------------------------------------------------------------
def hp_cost_restrict_clear?(skill)
return true unless skill.consume_hp # MP 消費
# 割合消費の場合は、消費量が 1 以上でないと使用不可
if skill.mp_cost_rate >= 0
return false if calc_hp_cost(skill) == 0
end
if KGC::MPCostAlter::RELEASE_HP_LIMIT
# 制限解除の場合は使用可能
return true
elsif KGC::MPCostAlter::PERMIT_ZERO_HP
# HP と同量まで消費可能
return calc_hp_cost(skill) <= hp
else
# 1 以上残る必要あり
return calc_hp_cost(skill) < hp
end
end
#--------------------------------------------------------------------------
# ● スキルまたはアイテムによるダメージ計算
# user : スキルまたはアイテムの使用者
# obj : スキルまたはアイテム
# 結果は @hp_damage または @mp_damage に代入する。
#--------------------------------------------------------------------------
alias make_obj_damage_value_KGC_MPCostAlter make_obj_damage_value
def make_obj_damage_value(user, obj)
# 消費 MP 比例ダメージでない場合
unless obj.is_a?(RPG::Skill) && obj.mp_proportional_damage
# 元の計算式を使用
make_obj_damage_value_KGC_MPCostAlter(user, obj)
return
end
damage = user.spend_cost * obj.base_damage / 100 # 基本ダメージ算出
damage *= elements_max_rate(obj.element_set) # 属性修正
damage /= 100
damage = apply_variance(damage, obj.variance) # 分散
damage = apply_guard(damage) # 防御修正
if obj.damage_to_mp
@mp_damage = damage # MP にダメージ
else
@hp_damage = damage # HP にダメージ
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Window_Skill
#==============================================================================
class Window_Skill < Window_Selectable
#--------------------------------------------------------------------------
# ● 項目の描画
# index : 項目番号
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
skill = @data[index]
if skill != nil
rect.width -= 4
enabled = @actor.skill_can_use?(skill)
draw_item_name(skill, rect.x, rect.y, enabled)
if skill.consume_hp
# HP 消費
text = "- " + @actor.calc_hp_cost(skill).to_s + " HP"
else
# MP 消費
if @actor.calc_mp_cost(skill) != 0
text = "- " + @actor.calc_mp_cost(skill).to_s + " MP"
else
text = "--"
end
end
self.contents.draw_text(rect, text, 2)
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Skill
#==============================================================================
class Scene_Skill < Scene_Base
#--------------------------------------------------------------------------
# ● ターゲットの決定
# 効果なしの場合 (戦闘不能にポーションなど) ブザー SE を演奏。
#--------------------------------------------------------------------------
alias determine_target_KGC_MPCostAlter determine_target
def determine_target
@actor.set_spend_cost(@skill) # 消費する HP/MP をセット
determine_target_KGC_MPCostAlter
end
#--------------------------------------------------------------------------
# ● スキルの使用 (味方対象以外の使用効果を適用)
#--------------------------------------------------------------------------
alias use_skill_nontarget_KGC_MPCostAlter use_skill_nontarget
def use_skill_nontarget
@actor.hp -= @actor.calc_hp_cost(@skill)
use_skill_nontarget_KGC_MPCostAlter
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● 戦闘行動の実行 : スキル
#--------------------------------------------------------------------------
alias execute_action_skill_KGC_MPCostAlter execute_action_skill
def execute_action_skill
skill = @active_battler.action.skill
@active_battler.set_spend_cost(skill) # 消費する HP/MP をセット
if skill.consume_hp
hp_cost = [@active_battler.hp - 1,
@active_battler.spend_cost].min # HP を 1 だけ残す
@active_battler.hp -= hp_cost
end
execute_action_skill_KGC_MPCostAlter
# 死亡するはずだった場合
if skill.consume_hp && hp_cost < @active_battler.spend_cost
@active_battler.hp = 0 # HP を 0 にする
display_added_states(@active_battler) # 死亡メッセージの表示
end
end
end
复制代码
这样
- XX HP 、- XX MP 、-- 都可以显示了应该,
被动技能本身一定是灰色的就不用特别标识了吧。。。
作者:
shinliwei
时间:
2008-8-27 03:26
被动技能也要把 0 给去掉
作者:
shinliwei
时间:
2008-8-27 03:29
没有效果... 你测试了没?
作者:
drgdrg
时间:
2008-8-27 04:41
没有效果是因为你还用了 《复杂技能分类脚本》,与之冲突了
好吧。。。。连技能分类脚本都给你改兼容下。。。。。
module RPG
class Skill
def description
description = @description.split(/@/)[0]
return description != nil ? description : ''
end
def desc
desc = @description.split(/@/)[1]
return desc != nil ? desc : "普通技能"
end
end
end
class Liuliu_Window_SkillCommand < Window_Selectable
attr_accessor :commands
def initialize(actor)
super(0, 0, 160, 216)
@commands = []
if $game_temp.in_battle
@actor = actor
else
@actor = $game_party.members[actor]
end
for skill in @actor.skills
push = true
for com in @commands
if com == skill.desc
push = false
end
end
if push == true
@commands.push(skill.desc)
end
end
if @commands == []
@commands.push("普通技能")
end
@item_max = @commands.size
self.contents = Bitmap.new(width - 32, @item_max*32)
refresh
self.index = 0
end
def refresh
self.contents.clear
for i in 0...@item_max
draw_item(i, normal_color)
end
end
def draw_item(index, color)
self.contents.font.color = color
y = index * WLH
self.contents.draw_text(4, y, 128, WLH, @commands[index])
end
def update_help
@help_window.set_text(@commands[self.index])
end
end
class Liuliu_Window_SkillList < Window_Selectable
def initialize(actor)
super(160, 0, 384, 360)
@actor = actor
refresh
self.index = 0
if $game_temp.in_battle
self.y = 56
self.height = 232
self.back_opacity = 200
end
end
def skill
return @data[self.index]
end
def refresh
@data = []
end
def set_item(command)
refresh
for skill in @actor.skills
if skill != nil and skill.desc == command
@data.push(skill)
end
end
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
self.contents.clear
for i in 0...@item_max
draw_item(i)
end
end
end
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
skill = @data[index]
if skill != nil and skill.occasion == 3 #被动技能
rect.width -= 4
enabled = @actor.skill_can_use?(skill)
draw_item_name(skill, rect.x, rect.y, enabled)
end
if skill != nil and skill.occasion != 3 #非被动技能
rect.width -= 4
enabled = @actor.skill_can_use?(skill)
draw_item_name(skill, rect.x, rect.y, enabled)
if skill.consume_hp
# HP 消費
text = "- " + @actor.calc_hp_cost(skill).to_s + " HP"
else
# MP 消費
if @actor.calc_mp_cost(skill) != 0
text = "- " + @actor.calc_mp_cost(skill).to_s + " MP"
else
text = "--"
end
end
self.contents.draw_text(rect, text, 2)
end
end
def update_help
@help_window.set_text(self.skill == nil ? "" : self.skill.description)
end
end
class Temp_Window_SkillStatus < Window_Base
def initialize(actor)
super(0, 216, 160, 144)
self.contents = Bitmap.new(width - 32, height - 32)
@actor = actor
refresh
end
def refresh
self.contents.clear
draw_actor_name(@actor, 4, 0)
draw_actor_hp(@actor, 4, 32, 120)
draw_actor_mp(@actor, 4, 64, 120)
end
end
class Temp_Window_Help < Window_Base
def initialize
super(0, 360, 544, WLH + 32)
end
def set_text(text, align = 0)
if text != @text or align != @align
self.contents.clear
self.contents.font.color = normal_color
self.contents.draw_text(4, 0, self.width - 40, WLH , text, align)
@text = text
@align = align
end
end
end
class Temp_Window_MenuStatus < Window_Selectable
def initialize(x, y)
super(x, y, 288, 416)
refresh
self.active = false
self.index = -1
end
def refresh
self.contents.clear
@item_max = $game_party.members.size
for actor in $game_party.members
x = 8
y = actor.index * 96 + WLH / 2
draw_actor_name(actor, x, y)
draw_actor_class(actor, x + 120, y)
draw_actor_level(actor, x, y + WLH * 1)
draw_actor_state(actor, x, y + WLH * 2)
draw_actor_hp(actor, x + 120, y + WLH * 1)
draw_actor_mp(actor, x + 120, y + WLH * 2)
end
end
def update_cursor
if @index < 0
self.cursor_rect.empty
elsif @index < @item_max
self.cursor_rect.set(0, @index * 96, contents.width, 96)
elsif @index >= 100
self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
else
self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
end
end
end
class Scene_Skill < Scene_Base
def initialize(actor_index = 0, equip_index = 0)
@actor_index = actor_index
end
def start
super
create_menu_background
@actor = $game_party.members[@actor_index]
@viewport = Viewport.new(0, 0, 544, 416)
@help_window = Temp_Window_Help.new
@status_window = Temp_Window_SkillStatus.new(@actor)
@itemcommand_window = Liuliu_Window_SkillCommand.new(@actor_index)
@command_index = @itemcommand_window.index
@skill_window = Liuliu_Window_SkillList.new($game_party.members[@actor_index])
@skill_window.help_window = @help_window
@skill_window.set_item(@itemcommand_window.commands[@command_index])
@target_window = Temp_Window_MenuStatus.new(96, 0)
@skill_window.active = false
hide_target_window
end
def terminate
super
dispose_menu_background
@help_window.dispose
@itemcommand_window.dispose
@status_window.dispose
@skill_window.dispose
@target_window.dispose
end
def return_scene
$scene = Scene_Menu.new(1)
end
def next_actor
@actor_index += 1
@actor_index %= $game_party.members.size
$scene = Scene_Skill.new(@actor_index)
@skill_window.active = false
end
def prev_actor
@actor_index += $game_party.members.size - 1
@actor_index %= $game_party.members.size
$scene = Scene_Skill.new(@actor_index)
@skill_window.active = false
end
def update
super
update_menu_background
@itemcommand_window.update
@help_window.update
@status_window.update
@skill_window.update
@target_window.update
if @command_index != @itemcommand_window.index
@command_index = @itemcommand_window.index
@skill_window.index = 0
@skill_window.set_item(@itemcommand_window.commands[@command_index])
end
if @itemcommand_window.active
update_itemcommand
elsif @skill_window.active
update_itemlist
elsif @target_window.active
update_target
end
end
def update_itemcommand
if Input.trigger?(Input::B)
Sound.play_cancel
return_scene
elsif Input.trigger?(Input::C)
Sound.play_decision
@itemcommand_window.active = false
@skill_window.active = true
@skill_window.index = 0
elsif Input.trigger?(Input::R)
Sound.play_cursor
next_actor
elsif Input.trigger?(Input::L)
Sound.play_cursor
prev_actor
end
end
def update_itemlist
if Input.trigger?(Input::B)
Sound.play_cancel
@itemcommand_window.active = true
@skill_window.active = false
@skill_window.index = 0
elsif Input.trigger?(Input::C)
@skill = @skill_window.skill
if @skill != nil
@actor.last_skill_id = @skill.id
end
if @actor.skill_can_use?(@skill)
Sound.play_decision
determine_skill
else
Sound.play_buzzer
end
end
end
def determine_skill
if @skill.for_friend?
show_target_window(@skill_window.index % 2 == 0)
if @skill.for_all?
@target_window.index = 99
elsif @skill.for_user?
@target_window.index = @actor_index + 100
else
if $game_party.last_target_index < @target_window.item_max
@target_window.index = $game_party.last_target_index
else
@target_window.index = 0
end
end
else
use_skill_nontarget
end
end
def update_target
if Input.trigger?(Input::B)
Sound.play_cancel
hide_target_window
@skill_window.active = true
elsif Input.trigger?(Input::C)
if not @actor.skill_can_use?(@skill)
Sound.play_buzzer
else
determine_target
end
end
end
def determine_target
used = false
if @skill.for_all?
for target in $game_party.members
target.skill_effect(@actor, @skill)
used = true unless target.skipped
end
elsif @skill.for_user?
target = $game_party.members[@target_window.index - 100]
target.skill_effect(@actor, @skill)
used = true unless target.skipped
else
$game_party.last_target_index = @target_window.index
target = $game_party.members[@target_window.index]
target.skill_effect(@actor, @skill)
used = true unless target.skipped
end
if used
use_skill_nontarget
else
Sound.play_buzzer
end
end
def show_target_window(right)
@skill_window.active = false
width_remain = 544 - @target_window.width
@target_window.x = right ? width_remain : 0
@target_window.visible = true
@target_window.active = true
if right
@viewport.rect.set(0, 0, width_remain, 416)
@viewport.ox = 0
else
@viewport.rect.set(@target_window.width, 0, width_remain, 416)
@viewport.ox = @target_window.width
end
end
def hide_target_window
@skill_window.refresh
@target_window.visible = false
@target_window.active = false
@skill_window.set_item(@itemcommand_window.commands[@command_index])
@viewport.rect.set(0, 0, 544, 416)
@viewport.ox = 0
end
def use_skill_nontarget
Sound.play_use_skill
@actor.mp -= @actor.calc_mp_cost(@skill)
@status_window.refresh
@skill_window.refresh
@target_window.refresh
if $game_party.all_dead?
$scene = Scene_Gameover.new
elsif @skill.common_event_id > 0
$game_temp.common_event_id = @skill.common_event_id
$scene = Scene_Map.new
end
end
end
class Scene_Battle < Scene_Base
def start_skill_selection
@help_window = Window_Help.new
@skill_window = Liuliu_Window_SkillList.new(@active_battler)
@skill_window.help_window = @help_window
@itemcommand_window = Liuliu_Window_SkillCommand.new(@active_battler)
@itemcommand_window.y = 56
@itemcommand_window.height = 232
@itemcommand_window.active = true
@itemcommand_window.back_opacity = 200
@itemcommand_window.help_window = @help_window
@command_index = @itemcommand_window.index
@skill_window.set_item(@itemcommand_window.commands[@command_index])
@actor_command_window.active = false
@skill_window.active = false
end
def end_skill_selection
if @skill_window != nil
@skill_window.dispose
@skill_window = nil
@help_window.dispose
@help_window = nil
@itemcommand_window.dispose
@itemcommand_window = nil
end
@actor_command_window.active = true
end
def update_skill_selection
@skill_window.visible = true
@itemcommand_window.visible = true
@itemcommand_window.update
if @command_index != @itemcommand_window.index
@command_index = @itemcommand_window.index
@skill_window.set_item(@itemcommand_window.commands[@command_index])
@skill_window.index = 0
end
@skill_window.update
@help_window.update
if Input.trigger?(Input::B)
Sound.play_cancel
if @skill_window.active == true then
@itemcommand_window.active = true
@skill_window.active = false
else
end_skill_selection
end
elsif Input.trigger?(Input::C)
if @skill_window.active == false
@skill_window.active = true
@itemcommand_window.active = false
Sound.play_decision
return
end
@skill = @skill_window.skill
if @skill != nil
@active_battler.last_skill_id = @skill.id
end
if @active_battler.skill_can_use?(@skill)
Sound.play_decision
determine_skill
else
Sound.play_buzzer
end
end
end
def determine_skill
@active_battler.action.set_skill(@skill.id)
@skill_window.active = false
if @skill.need_selection?
if @skill.for_opponent?
start_target_enemy_selection
else
start_target_actor_selection
end
else
end_skill_selection
next_actor
end
end
end
复制代码
作者:
shinliwei
时间:
2008-8-28 05:05
完妥了!
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1