赞 0
VIP 0
好人卡 0
积分 1
经验 6679
最后登录 2017-4-11
在线时间 116 小时
Lv1.梦旅人
梦石 0
星屑 50
在线时间 116 小时
注册时间 2012-10-4
帖子 193
3 楼
楼主
|
发表于 2012-11-11 17:43:58
|
只看该作者
技能升級的腳本:
# -----------------------------------------------------------------------------
# ◆技能升级(SKILL_UP) By.Clov
# -----------------------------------------------------------------------------
# Ver:1.0.0 Date:2012.06.11
# -1.0.0:完整版
# 界面:SceneManager.call(Scene_SUP)
# 角色切换:技能分类栏 L / R
# -----------------------------------------------------------------------------
module SUP
#—————————————————————————————————————————
#·升级技能关联
# 技能ID => 升级后技能ID
UP = {
26 =>27 , # 治愈 → 治愈Ⅱ
27 =>28 , # 治愈Ⅱ → 治愈Ⅲ
28 =>29 , # 治愈Ⅲ → 回复
29 =>30 , # 回复 → 回复Ⅱ
30 =>116 , # 回复Ⅱ → 精灵的叹息
80 =>81 , # 强击 → 横扫
81 =>82 , # 横扫 → 狂战士咆哮
82 =>83 , # 狂战士咆哮 → 狂战士之舞
83 =>84 , # 狂战士之舞 → 巨人的痛击
84 =>127 , # 巨人的痛击 → 守护神兽:草泥马降临
}
#—————————————————————————————————————————
#·各条件“符号”说明
# 【物品篇】
# 条件数组头部 :items :weapons :armors 符号分别为判断 道具、武器、防具
# 再在尾部输入物品ID即可
# 【变量、开关、对比篇】
# 条件数组尾部 :bit 符号为要显示图片的名字(尺寸24*24)
# 若省略的话,将不显示图片
#———————————————————————————————————————
#·默认条件
# 技能ID 0 的条件即为默认升级条件
# 以下4种条件类型都可以设置默认条件
#———————————————————————————————————————
#·升级条件-物品【变量消耗( a -= b)】
# 技能ID => [[:类别符号, 物品ID(a), 消耗数值(b)],[],[]…更多条件…]
# 例:1 => [[:items, 10,5], [……]]
IF_ITE = {
0 => [ [ :items , 19 , 5 ] ] , #使用19号道具作为默认升级条件
30 => [ [ :items , 18 , 1 ] ] , #升级 回复Ⅱ 需要18号道具1个
84 => [ [ :items , 17 , 1 ] ,[ :weapons , 62 , 1 ] ,[ :armors , 61 , 1 ] ] #升级 巨人的痛击
#需要17号道具1个、62号武器1个、61号防具1个
}
#———————————————————————————————————————
#·升级条件-变量【变量消耗( a -= b)】
# 技能ID => [["显示文字", "变量连接(a)", 消耗数值(b)],[],[]…更多条件…]
# 例:1 => [["脚本变量测试","$变量",10], [……]]
IF_VAR = {
0 => [ [ "蓝宝石碎片" ,"$game_variables[100]" ,5 ] ] , #使用游戏1号变量作为默认升级条件
# 恢复技能条件
28 => [ [ "生命之光" ,"$game_variables[1]" ,10 ] ] , #升级 治愈Ⅲ 需要消耗变量1 10数值
29 => [ [ "生命之光" ,"$game_variables[1]" ,20 ] ] , #升级 回复 需要消耗变量1 20数值
30 => [ [ "生命之光" ,"$game_variables[1]" ,50 ] ] , #升级 回复Ⅱ 需要消耗变量1 50数值
# 伤害技能条件
82 => [ [ "力量之光" ,"$game_variables[2]" ,10 ] ] , #升级 狂战士咆哮 需要消耗变量2 50数值
83 => [ [ "力量之光" ,"$game_variables[2]" ,20 ] ] , #升级 狂战士之舞 需要消耗变量2 50数值
84 => [ [ "力量之光" ,"$game_variables[2]" ,50 ] , #升级 巨人的痛击 需要消耗变量2 50数值
[ "巨大的蓝宝石" ,"$game_variables[3]" ,10 ] ] #升级 巨人的痛击 需要消耗变量3 10数值
}
#———————————————————————————————————————
#·升级条件-开关【开关判断( a == true )】
# 技能ID => [["显示文字", "开关连接(a)"],[],[]…更多条件…]
# 例:1 => [["脚本开关测试","$开关"], [……]]
IF_SWI = {
0 => [ ] , #默认升级开关条件
30 => [ [ "获得好人卡" ,"$好人卡" ,:好人卡] ] , #升级 回复Ⅱ 需要 $好人卡 为true
84 => [ [ "作者允许草泥马降临" ,"$草泥马降临" ,:草泥马] ] #升级 巨人的痛击 需要 $草泥马降临 为true
}
#———————————————————————————————————————
#·升级条件-比较【比较相等( a == b )】
# 技能ID => [["显示文字", "比较连接1(a)", "比较连接2(b)"],[],[]…更多条件…]
# 例:1 => [["脚本比较测试","$比较1","$比较2"], [……]]
IF_COM = {
0 => [ ] , #默认升级对比条件
}
#—————————————————————————————————————————
#·积极、消极值槽颜色
POS_COLOR1 = Color.new ( 214 ,233 ,83 ,255 )
POS_COLOR2 = Color.new ( 255 ,255 ,255 ,255 )
NEG_COLOR1 = Color.new ( 253 ,80 ,128 ,255 )
NEG_COLOR2 = Color.new ( 255 ,255 ,255 ,255 )
#—————————————————————————————————————————
#·输出评分最大值
PFX = 9999
#—————————————————————————————————————————
#·图标存放文件夹
FILE = "Graphics/Icon/"
#—————————————————————————————————————————
#·效果范围显示文字
SCOPE = [ "无" ,
"单个敌人" ,"全体敌人" ,
"一个随机敌人" ,"二个随机敌人" ,"三个随机敌人" ,"四个随机敌人" ,
"单个队友" ,"全体队友" ,
"单个队友(无法战斗)" ,"全体队友(无法战斗)" ,
"使用者" ]
#·使用场合显示文字
OCCASION = [ "随时可用" ,"战斗可用" ,"菜单可用" ,"不可用" ]
#·命中类型显示文字
HIT_TYPE = [ "必定命中" ,"物理攻击" ,"魔法攻击" ]
#·输出类型显示文字
DAMAGE_TYPE = [ "无输出" ,"HP伤害" ,"MP伤害" ,"HP恢复" ,"MP恢复" ,"HP吸收" ,"MP吸收" ]
#—————————————————————————————————————————
end
#==============================================================================
# ■ SUP_Window_Command
#------------------------------------------------------------------------------
# 技能分类窗口
#==============================================================================
class SUP_Window_Command < Window_Command
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_reader :skill_window
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize( x, y)
super ( x, y)
@actor = nil
end
#--------------------------------------------------------------------------
# ● 获取窗口的宽度
#--------------------------------------------------------------------------
def window_width
return 200
end
#--------------------------------------------------------------------------
# ● 设置角色
#--------------------------------------------------------------------------
def actor=( actor)
return if @actor == actor
@actor = actor
refresh
select_last
end
#--------------------------------------------------------------------------
# ● 获取显示行数
#--------------------------------------------------------------------------
def visible_line_number
return 4
end
#--------------------------------------------------------------------------
# ● 生成指令列表
#--------------------------------------------------------------------------
def make_command_list
return unless @actor
@actor .added_skill_types .sort .each do |stype_id|
name = $data_system .skill_types [ stype_id]
add_command( name, :skill , true , stype_id)
end
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
super
@skill_window .stype_id = current_ext if @skill_window
end
#--------------------------------------------------------------------------
# ● 设置技能窗口
#--------------------------------------------------------------------------
def skill_window=( skill_window)
@skill_window = skill_window
update
end
#--------------------------------------------------------------------------
# ● 返回上一个选择的位置
#--------------------------------------------------------------------------
def select_last
skill = @actor .last_skill .object
if skill
select_ext( skill.stype_id )
else
select ( 0 )
end
end
end
#==============================================================================
# ■ SUP_Window_Index
#------------------------------------------------------------------------------
# 技能列表窗口。
#==============================================================================
class SUP_Window_Index < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize( x, y, width, height)
super
@actor = nil
@stype_id = 0
@data = [ ]
end
#--------------------------------------------------------------------------
# ● 设置角色
#--------------------------------------------------------------------------
def actor=( actor)
return if @actor == actor
@actor = actor
refresh
self .oy = 0
end
#--------------------------------------------------------------------------
# ● 设置技能类型 ID
#--------------------------------------------------------------------------
def stype_id=( stype_id)
return if @stype_id == stype_id
@stype_id = stype_id
refresh
self .oy = 0
end
#--------------------------------------------------------------------------
# ● 获取列数
#--------------------------------------------------------------------------
def col_max
return 1
end
#--------------------------------------------------------------------------
# ● 获取项目数
#--------------------------------------------------------------------------
def item_max
@data ? @data .size : 1
end
#--------------------------------------------------------------------------
# ● 获取技能
#--------------------------------------------------------------------------
def item
@data && index >= 0 ? @data [ index] : nil
end
#--------------------------------------------------------------------------
# ● 获取选择项目的有效状态
#--------------------------------------------------------------------------
def current_item_enabled?
enable?( @data[ index] )
end
#--------------------------------------------------------------------------
# ● 查询列表中是否含有此技能
#--------------------------------------------------------------------------
def include ?( item)
item && item.stype_id == @stype_id
end
#--------------------------------------------------------------------------
# ● 查询此技能是否可用
#--------------------------------------------------------------------------
def enable?( item)
item && SUP::UP .has_key ?( item.id )
end
#--------------------------------------------------------------------------
# ● 生成技能列表
#--------------------------------------------------------------------------
def make_item_list
@data = @actor ? @actor .skills .select { |skill| include ?( skill) } : [ ]
end
#--------------------------------------------------------------------------
# ● 返回上一个选择的位置
#--------------------------------------------------------------------------
def select_last
select ( @data.index ( @actor.last_skill .object ) || 0 )
end
#--------------------------------------------------------------------------
# ● 绘制项目
#--------------------------------------------------------------------------
def draw_item( index)
skill = @data [ index]
if skill
rect = item_rect( index)
rect.width -= 4
draw_item_name( skill, rect.x , rect.y , enable?( skill) )
end
end
#--------------------------------------------------------------------------
# ● 更新帮助内容
#--------------------------------------------------------------------------
def update_help
@help_window .set_item ( item)
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
make_item_list
create_contents
draw_all_items
end
end
#==============================================================================
# ■ SUP_Window_Info
#------------------------------------------------------------------------------
# 技能信息窗口
#==============================================================================
class SUP_Window_Info < Window_Base
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize( x, y,w,h)
super ( x, y, w, h)
@w = w ; @h = h
@yema = 1
@actor = nil
@skill = nil
@font_size = 20
@help_fill_color1 = Color.new ( 255 ,255 ,255 ,255 )
@help_fill_color2 = Color.new ( 255 ,255 ,255 ,0 )
end
#--------------------------------------------------------------------------
# ● 设置角色
#--------------------------------------------------------------------------
def actor=( val)
@actor = val
end
#--------------------------------------------------------------------------
# ● 取得技能
#--------------------------------------------------------------------------
def skill
@skill
end
#--------------------------------------------------------------------------
# ● 设置技能
#--------------------------------------------------------------------------
def skill=( val)
@skill = val
huanye( @yema)
end
#--------------------------------------------------------------------------
# ● 技能是否可升级
#--------------------------------------------------------------------------
def skill_up?
SUP::UP .has_key ?( @skill.id )
end
#--------------------------------------------------------------------------
# ● 获得行高
#--------------------------------------------------------------------------
def line_height
@font_size
end
#--------------------------------------------------------------------------
# ● 获得页码
#--------------------------------------------------------------------------
def yema
@yema
end
#--------------------------------------------------------------------------
# ● 换页
#--------------------------------------------------------------------------
def huanye( y)
@yema = y
case @yema
when 1
@draw = method( :draw1 )
@help_txt = [ "技能状态信息" , "升级技能状态信息" , "A键换页(1/2)" ]
when 2
@draw = method( :draw2 )
@help_txt = [ "技能数值信息" , "升级技能数值信息" , "A键换页(2/2)" ]
end
refresh
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
contents.clear
return if !@skill
#描绘帮助信息
contents.font .size = 16
help
#描绘技能信息
contents.font .size = line_height
#描绘选中的技能
@draw .call ( @skill, 0 , line_height)
#描绘升级后的技能
if skill_up?
@draw .call ( $data_skills[ SUP::UP [ @skill.id ] ] , 0 , line_height * 9 )
else
draw_text( 70 , line_height * 9 + 65 , 280 , line_height,
"技能已经无法升级。" )
end
end
#--------------------------------------------------------------------------
# ● 描绘帮助条
#--------------------------------------------------------------------------
def help
#第一条
contents.gradient_fill_rect ( 0 , 0 , @w , line_height,
@help_fill_color1 , @help_fill_color2 )
draw_text( 2 , 0 , 280 , line_height, @help_txt [ 0 ] )
#第二条
contents.gradient_fill_rect ( 0 , line_height * 8 , @w , line_height,
@help_fill_color1 , @help_fill_color2 )
draw_text( 2 , line_height * 8 , 280 , line_height, @help_txt [ 1 ] )
#换页
draw_text( 225 , 0 , 280 , line_height, @help_txt [ 2 ] )
end
#--------------------------------------------------------------------------
# ● 描绘页1
#--------------------------------------------------------------------------
def draw1( skill,x,y)
#名称---------------------------------------------
draw_item_name( skill, x, y)
#属性---------------------------------------------
sx = $data_system .elements [ skill.damage .element_id ]
sx = sx=="" ? "无" : sx
draw_text( x, y + line_height, 280 , line_height,
"属性:" +sx)
#使用场合-----------------------------------------
draw_text( x, y + line_height * 2 , 280 , line_height,
"使用场合:" +SUP::OCCASION [ skill.occasion ] )
#使用范围-----------------------------------------
draw_text( x, y + line_height * 3 , 280 , line_height,
"使用范围:" +SUP::SCOPE [ skill.scope ] )
#命中类型-----------------------------------------
draw_text( x, y + line_height * 4 , 280 , line_height,
"命中类型:" +SUP::HIT_TYPE [ skill.hit_type ] )
#输出类型-----------------------------------------
draw_text( x, y + line_height * 5 , 280 , line_height,
"输出类型:" +SUP::DAMAGE_TYPE [ skill.damage .type ] )
#武器限制-----------------------------------------
w1 = $data_system .weapon_types [ skill.required_wtype_id1 ]
w2 = $data_system .weapon_types [ skill.required_wtype_id2 ]
w = "无武器限制" ; if w1 !="" ;w=w1;end ; if w2 != "" ;w+="与" +w2;end
draw_text( x, y + line_height * 6 , 280 , line_height,
"武器限制:" +w)
end
#--------------------------------------------------------------------------
# ● 描绘页2
#--------------------------------------------------------------------------
def draw2( skill,x,y)
#名称---------------------------------------------
draw_item_name( skill, x, y)
#魔力值消耗---------------------------------------
draw_text( x, y + line_height, 280 , line_height,
"魔力值消耗:" )
w = 200 ; h = 15
b = skill.mp_cost .to_f / 9999
c1 = Color.new ( 128 ,155 ,122 ,255 )
c2 = Color.new ( 25 ,55 ,155 ,255 )
flii( x+120 , y + line_height + 3 , w, h, b, SUP::NEG_COLOR1 , SUP::NEG_COLOR2 )
draw_current_and_max_values( x+40 , y + line_height, 280 , skill.mp_cost , 9999 ,
text_color( 0 ) , text_color( 0 ) )
#特技值消耗---------------------------------------
draw_text( x, y + line_height * 2 , 280 , line_height,
"特技值消耗:" )
w = 200 ; h = 15
b = skill.tp_cost .to_f / 100
flii( x+120 , y + line_height * 2 + 3 , w, h, b, SUP::NEG_COLOR1 , SUP::NEG_COLOR2 )
draw_current_and_max_values( x+40 , y + line_height * 2 , 280 , skill.tp_cost , 100 ,
text_color( 0 ) , text_color( 0 ) )
#特技值获得---------------------------------------
draw_text( x, y + line_height * 3 , 280 , line_height,
"特技值获得:" )
w = 200 ; h = 15
b = skill.tp_gain .to_f / 100
flii( x+120 , y + line_height * 3 + 3 , w, h, b, SUP::POS_COLOR1 , SUP::POS_COLOR2 )
draw_current_and_max_values( x+40 , y + line_height * 3 , 280 , skill.tp_gain , 100 ,
text_color( 0 ) , text_color( 0 ) )
#攻击次数-----------------------------------------
draw_text( x, y + line_height * 4 , 280 , line_height,
"攻击次数:" )
w = 200 ; h = 15
b = skill.repeats .to_f / 9
flii( x+120 , y + line_height * 4 + 3 , w, h, b, SUP::POS_COLOR1 , SUP::POS_COLOR2 )
draw_current_and_max_values( x+40 , y + line_height * 4 , 280 , skill.repeats , 9 ,
text_color( 0 ) , text_color( 0 ) )
#成功几率-----------------------------------------
draw_text( x, y + line_height * 5 , 280 , line_height,
"成功几率:" )
w = 200 ; h = 15
b = skill.success_rate .to_f / 100
flii( x+120 , y + line_height * 5 + 3 , w, h, b, SUP::POS_COLOR1 , SUP::POS_COLOR2 )
draw_current_and_max_values( x+40 , y + line_height * 5 , 280 , skill.success_rate , 100 ,
text_color( 0 ) , text_color( 0 ) )
#输出评分-----------------------------------------
draw_text( x, y + line_height * 6 , 280 , line_height,
"输出评分:" )
pf = scpf( skill)
w = 200 ; h = 15
b = [ pf.to_f / SUP::PFX , 1.0 ] .min
type = skill.damage .type
case type
when 0
draw_text( x+150 , y + line_height * 6 , 280 , line_height,
"此技能没有输出。" )
when 1 , 2 , 5 , 6
flii( x+120 , y + line_height * 6 + 3 , w, h, b, SUP::NEG_COLOR1 , SUP::NEG_COLOR2 )
draw_current_and_max_values( x+40 , y + line_height * 6 , 280 , pf, SUP::PFX ,
text_color( 0 ) , text_color( 0 ) )
when 3 , 4
flii( x+120 , y + line_height * 6 + 3 , w, h, b, SUP::POS_COLOR1 , SUP::POS_COLOR2 )
draw_current_and_max_values( x+40 , y + line_height * 6 , 280 , pf, SUP::PFX ,
text_color( 0 ) , text_color( 0 ) )
end
end
#--------------------------------------------------------------------------
# ● 描绘值槽
#--------------------------------------------------------------------------
def flii( x, y, w, h, b, color1, color2)
contents.fill_rect ( x, y, w, h, Color.new ( 0 ,0 ,0 ,64 ) )
contents.gradient_fill_rect ( x, y, w*b, h, color1, color2)
end
#--------------------------------------------------------------------------
# ● 获得评分
#--------------------------------------------------------------------------
def scpf( skill)
g = skill.damage .formula .to_s
a = @actor
v = $game_variables
g.gsub !( /b/,"a" )
return eval ( g)
end
end
#==============================================================================
# ■ SUP_Window_Choice
#------------------------------------------------------------------------------
# 技能升级条件及确认窗口
#==============================================================================
class SUP_Window_Choice < Window_Command
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize( x, y)
@hx = -1
super ( x, y)
@skill = nil
@actor = nil
@enabled = [ ]
@txt = [ ]
@ite = [ ]
@pic = [ ]
@xh = [ ]
end
#--------------------------------------------------------------------------
# ● 设置角色
#--------------------------------------------------------------------------
def actor=( val)
@actor = val
end
#--------------------------------------------------------------------------
# ● 取得技能
#--------------------------------------------------------------------------
def skill
@skill
end
#--------------------------------------------------------------------------
# ● 设置技能
#--------------------------------------------------------------------------
def skill=( val)
@skill = val
refresh_draw
end
#--------------------------------------------------------------------------
# ● 取得全部指定条件
#--------------------------------------------------------------------------
def all_if( skill_id)
arr = Array .new
arr << SUP::IF_ITE [ skill_id]
arr << SUP::IF_VAR [ skill_id]
arr << SUP::IF_SWI [ skill_id]
arr << SUP::IF_COM [ skill_id]
end
#--------------------------------------------------------------------------
# ● 获取全部条件有效状态
#--------------------------------------------------------------------------
def all_enabled?
!@enabled.include ?( false )
end
#--------------------------------------------------------------------------
# ● 获取物品、变量条件有效状态
#--------------------------------------------------------------------------
def ite_var_enabled?( y, s)
return false if not y
y >= s
end
#--------------------------------------------------------------------------
# ● 获取开关条件有效状态
#--------------------------------------------------------------------------
def swi_enabled?( y)
y
end
#--------------------------------------------------------------------------
# ● 获取对比条件有效状态
#--------------------------------------------------------------------------
def com_enabled?( y1, y2)
y1 == y2
end
#--------------------------------------------------------------------------
# ● 技能升级条件数据
#--------------------------------------------------------------------------
def skill_data
return if !@skill
@hx = -1 ; @enabled = [ ] ; @txt = [ ] ; @pic = [ ] ; @pid = [ ] ; @xh = [ ]
l = all_if( @skill.id ) ; n = l.compact
t = n == [ ] ? all_if( 0 ) : l
t1 = t[ 0 ] ; t2 = t[ 1 ] ; t3 = t[ 2 ] ; t4 = t[ 3 ]
if t1
ite_data( t1)
end
if t2
var_data( t2)
end
if t3
swi_data( t3)
end
if t4
com_data( t4)
end
end
#--------------------------------------------------------------------------
# ● 技能条件进行描绘
#--------------------------------------------------------------------------
def skill_draw
@txt .each_with_index { |txt,i|
change_color( normal_color, @enabled [ i] )
pic = @pic [ i]
if pic.is_a ?( Symbol )
wx = window_width / 2 - text_size( txt) .width / 2 - 24
if pic == :ite
draw_item_icon( @ite[ i] , wx, item_height * i)
else
draw_bit( pic.to_s , wx, item_height * i)
end
end
draw_text( 0 , item_height * i, window_width, item_height, txt, 1 )
}
end
#--------------------------------------------------------------------------
# ● 绘制物品图标
#--------------------------------------------------------------------------
def draw_item_icon( item, x, y)
draw_icon( item.icon_index , x, y)
end
#--------------------------------------------------------------------------
# ● 绘制图片
#--------------------------------------------------------------------------
def draw_bit( name, x, y)
bitmap = Bitmap.new ( SUP::FILE + name)
rect = Rect.new ( 0 , 0 , 24 , 24 )
contents.blt ( x, y, bitmap, rect)
end
#--------------------------------------------------------------------------
# ● 对技能进行升级(变量、物品消耗)
#--------------------------------------------------------------------------
def skill_up
@actor .forget_skill ( @skill.id )
@actor .learn_skill ( SUP::UP [ @skill.id ] )
@xh .each_with_index { |x, i|
if x.is_a ?( String )
eval ( x)
else
$game_party .gain_item ( @ite[ i] , -x)
end }
end
#--------------------------------------------------------------------------
# ● 物品条件 数据
#--------------------------------------------------------------------------
def ite_data( si)
si.each { |i|
@hx += 1 ; t = i[ 0 ] ; b = i[ 1 ] ; s = i[ 2 ]
case t
when :items
item = $data_items [ b]
when :weapons
item = $data_weapons [ b]
when :armors
item = $data_armors [ b]
end
y = $game_party .item_number ( item)
enabled = ite_var_enabled?( y, s)
@enabled [ @hx] = enabled
@txt [ @hx] = item.name +"*" + s.to_s
@ite [ @hx] = item
@pic [ @hx] = :ite
@xh [ @hx] = s
}
end
#--------------------------------------------------------------------------
# ● 变量条件 数据
#--------------------------------------------------------------------------
def var_data( si)
si.each { |i|
@hx += 1 ; n = i[ 0 ] ; y = eval ( i[ 1 ] ) ; s = i[ 2 ]
enabled = ite_var_enabled?( y, s)
@enabled [ @hx] = enabled
@txt [ @hx] = n+"*" + s.to_s
@pic [ @hx] = i[ -1 ]
@xh [ @hx] = "#{i[1]} -= #{s.to_s}"
}
end
#--------------------------------------------------------------------------
# ● 开关条件 数据
#--------------------------------------------------------------------------
def swi_data( si)
si.each { |i|
@hx += 1 ; n = i[ 0 ] ; y = eval ( i[ 1 ] )
enabled = swi_enabled?( y)
@enabled [ @hx] = enabled
@txt [ @hx] = n
@pic [ @hx] = i[ -1 ]
}
end
#--------------------------------------------------------------------------
# ● 对比条件 数据
#--------------------------------------------------------------------------
def com_data( si)
si.each { |i|
@hx += 1 ; n = i[ 0 ] ; y1 = eval ( i[ 1 ] ) ; y2 = eval ( i[ 2 ] )
enabled = com_enabled?( y1,y2)
@enabled [ @hx] = enabled
@txt [ @hx] = n
@pic [ @hx] = i[ -1 ]
}
end
#--------------------------------------------------------------------------
# ● 获取窗口的宽度
#--------------------------------------------------------------------------
def window_width
return 300
end
#--------------------------------------------------------------------------
# ● 获取项目的高度
#--------------------------------------------------------------------------
def item_height
return 28
end
#--------------------------------------------------------------------------
# ● 获取对齐方向
#--------------------------------------------------------------------------
def alignment
return 1
end
#--------------------------------------------------------------------------
# ● 获取项目的绘制矩形
#--------------------------------------------------------------------------
alias x_item_rect item_rect
def item_rect( index)
rect = x_item_rect( index)
rect.y = rect.y + item_height * ( @hx+1 )
rect
end
#--------------------------------------------------------------------------
# ● 刷新(清除内容)
#--------------------------------------------------------------------------
def refresh
contents.clear
end
#--------------------------------------------------------------------------
# ● 刷新(取得数据、刷新窗口)
#--------------------------------------------------------------------------
def refresh2
skill_data
self .height = item_height * ( @hx+3 )
self .x = Graphics.width / 2 - window_width / 2
self .y = Graphics.height / 2 - self .height / 2
create_contents
end
#--------------------------------------------------------------------------
# ● 刷新(要描绘的内容)
#--------------------------------------------------------------------------
def refresh_draw
refresh
refresh2
skill_draw
clear_command_list
add_command( "确认" , :ok , all_enabled?)
draw_all_items
end
end
#==============================================================================
# ■ Scene_SUP
#------------------------------------------------------------------------------
# 技能升级画面
#==============================================================================
class Scene_SUP < Scene_MenuBase
#--------------------------------------------------------------------------
# ● 开始处理
#--------------------------------------------------------------------------
def start
super
create_help_window
suv_window_command
suv_window_info
suv_window_index
suv_window_choice
end
#--------------------------------------------------------------------------
# ● 帧更新
#--------------------------------------------------------------------------
def update
super
if Input.trigger ?( :X )
case @suv_window_info .yema
when 1
@suv_window_info .huanye ( 2 )
when 2
@suv_window_info .huanye ( 1 )
end
end
if @suv_window_info .skill != @suv_window_index .item
@suv_window_info .skill = @suv_window_index .item
end
end
#--------------------------------------------------------------------------
# ● 生成确认窗口
#--------------------------------------------------------------------------
def suv_window_choice
@suv_window_choice = SUP_Window_Choice.new ( 0 , 0 )
@suv_window_choice .viewport = @viewport
@suv_window_choice .set_handler ( :ok , method( :confirm_ok ) )
@suv_window_choice .set_handler ( :cancel , method( :confirm_cancel ) )
@suv_window_choice .hide .deactivate
@suv_window_choice .actor = @actor
end
#--------------------------------------------------------------------------
# ● 生成分类窗口
#--------------------------------------------------------------------------
def suv_window_command
wy = @help_window .height
@suv_window_command = SUP_Window_Command.new ( 0 , wy)
@suv_window_command .viewport = @viewport
@suv_window_command .help_window = @help_window
@suv_window_command .actor = @actor
@suv_window_command .set_handler ( :skill , method( :command_skill ) )
@suv_window_command .set_handler ( :cancel , method( :return_scene ) )
@suv_window_command .set_handler ( :pagedown , method( :next_actor ) )
@suv_window_command .set_handler ( :pageup , method( :prev_actor ) )
end
#--------------------------------------------------------------------------
# ● 生成状态窗口
#--------------------------------------------------------------------------
def suv_window_info
y = @help_window .height
w = Graphics.width - @suv_window_command .width
h = Graphics.height - @help_window .height
@suv_window_info = SUP_Window_Info.new ( @suv_window_command.width , y, w, h)
@suv_window_info .viewport = @viewport
@suv_window_info .actor = @actor
end
#--------------------------------------------------------------------------
# ● 生成列表窗口
#--------------------------------------------------------------------------
def suv_window_index
wx = 0
wy = @suv_window_command .y + @suv_window_command .height
ww = Graphics.width - @suv_window_info .width
wh = Graphics.height - wy
@suv_window_index = SUP_Window_Index.new ( wx, wy, ww, wh)
@suv_window_index .actor = @actor
@suv_window_index .viewport = @viewport
@suv_window_index .help_window = @help_window
@suv_window_index .set_handler ( :ok , method( :on_item_ok ) )
@suv_window_index .set_handler ( :cancel , method( :on_item_cancel ) )
@suv_window_command .skill_window = @suv_window_index
end
#--------------------------------------------------------------------------
# ● 技能分类里“确定”
#--------------------------------------------------------------------------
def command_skill
@suv_window_index .activate
@suv_window_index .select_last
end
#--------------------------------------------------------------------------
# ● 技能列表里“确定”
#--------------------------------------------------------------------------
def on_item_ok
skill = @suv_window_index .item
@suv_window_choice .skill = skill
@suv_window_choice .show .activate
end
#--------------------------------------------------------------------------
# ● 技能列表里“返回”
#--------------------------------------------------------------------------
def on_item_cancel
@suv_window_index .unselect
@suv_window_command .activate
end
#--------------------------------------------------------------------------
# ● 确认列表里“确认”
#--------------------------------------------------------------------------
def confirm_ok
@suv_window_choice .skill_up
@suv_window_index .refresh
@suv_window_choice .hide .deactivate
@suv_window_index .activate
end
#--------------------------------------------------------------------------
# ● 确认列表里“返回”
#--------------------------------------------------------------------------
def confirm_cancel
@suv_window_choice .hide .deactivate
@suv_window_index .activate
end
#--------------------------------------------------------------------------
# ● 切换角色
#--------------------------------------------------------------------------
def on_actor_change
@suv_window_command .actor = @actor
@suv_window_info .actor = @actor
@suv_window_index .actor = @actor
@suv_window_choice .actor = @actor
@suv_window_command .activate
end
end
# -----------------------------------------------------------------------------
# ◆技能升级(SKILL_UP) By.Clov
# -----------------------------------------------------------------------------
# Ver:1.0.0 Date:2012.06.11
# -1.0.0:完整版
# 界面:SceneManager.call(Scene_SUP)
# 角色切换:技能分类栏 L / R
# -----------------------------------------------------------------------------
module SUP
#—————————————————————————————————————————
#·升级技能关联
# 技能ID => 升级后技能ID
UP = {
26 =>27 , # 治愈 → 治愈Ⅱ
27 =>28 , # 治愈Ⅱ → 治愈Ⅲ
28 =>29 , # 治愈Ⅲ → 回复
29 =>30 , # 回复 → 回复Ⅱ
30 =>116 , # 回复Ⅱ → 精灵的叹息
80 =>81 , # 强击 → 横扫
81 =>82 , # 横扫 → 狂战士咆哮
82 =>83 , # 狂战士咆哮 → 狂战士之舞
83 =>84 , # 狂战士之舞 → 巨人的痛击
84 =>127 , # 巨人的痛击 → 守护神兽:草泥马降临
}
#—————————————————————————————————————————
#·各条件“符号”说明
# 【物品篇】
# 条件数组头部 :items :weapons :armors 符号分别为判断 道具、武器、防具
# 再在尾部输入物品ID即可
# 【变量、开关、对比篇】
# 条件数组尾部 :bit 符号为要显示图片的名字(尺寸24*24)
# 若省略的话,将不显示图片
#———————————————————————————————————————
#·默认条件
# 技能ID 0 的条件即为默认升级条件
# 以下4种条件类型都可以设置默认条件
#———————————————————————————————————————
#·升级条件-物品【变量消耗( a -= b)】
# 技能ID => [[:类别符号, 物品ID(a), 消耗数值(b)],[],[]…更多条件…]
# 例:1 => [[:items, 10,5], [……]]
IF_ITE = {
0 => [ [ :items , 19 , 5 ] ] , #使用19号道具作为默认升级条件
30 => [ [ :items , 18 , 1 ] ] , #升级 回复Ⅱ 需要18号道具1个
84 => [ [ :items , 17 , 1 ] ,[ :weapons , 62 , 1 ] ,[ :armors , 61 , 1 ] ] #升级 巨人的痛击
#需要17号道具1个、62号武器1个、61号防具1个
}
#———————————————————————————————————————
#·升级条件-变量【变量消耗( a -= b)】
# 技能ID => [["显示文字", "变量连接(a)", 消耗数值(b)],[],[]…更多条件…]
# 例:1 => [["脚本变量测试","$变量",10], [……]]
IF_VAR = {
0 => [ [ "蓝宝石碎片" ,"$game_variables[100]" ,5 ] ] , #使用游戏1号变量作为默认升级条件
# 恢复技能条件
28 => [ [ "生命之光" ,"$game_variables[1]" ,10 ] ] , #升级 治愈Ⅲ 需要消耗变量1 10数值
29 => [ [ "生命之光" ,"$game_variables[1]" ,20 ] ] , #升级 回复 需要消耗变量1 20数值
30 => [ [ "生命之光" ,"$game_variables[1]" ,50 ] ] , #升级 回复Ⅱ 需要消耗变量1 50数值
# 伤害技能条件
82 => [ [ "力量之光" ,"$game_variables[2]" ,10 ] ] , #升级 狂战士咆哮 需要消耗变量2 50数值
83 => [ [ "力量之光" ,"$game_variables[2]" ,20 ] ] , #升级 狂战士之舞 需要消耗变量2 50数值
84 => [ [ "力量之光" ,"$game_variables[2]" ,50 ] , #升级 巨人的痛击 需要消耗变量2 50数值
[ "巨大的蓝宝石" ,"$game_variables[3]" ,10 ] ] #升级 巨人的痛击 需要消耗变量3 10数值
}
#———————————————————————————————————————
#·升级条件-开关【开关判断( a == true )】
# 技能ID => [["显示文字", "开关连接(a)"],[],[]…更多条件…]
# 例:1 => [["脚本开关测试","$开关"], [……]]
IF_SWI = {
0 => [ ] , #默认升级开关条件
30 => [ [ "获得好人卡" ,"$好人卡" ,:好人卡] ] , #升级 回复Ⅱ 需要 $好人卡 为true
84 => [ [ "作者允许草泥马降临" ,"$草泥马降临" ,:草泥马] ] #升级 巨人的痛击 需要 $草泥马降临 为true
}
#———————————————————————————————————————
#·升级条件-比较【比较相等( a == b )】
# 技能ID => [["显示文字", "比较连接1(a)", "比较连接2(b)"],[],[]…更多条件…]
# 例:1 => [["脚本比较测试","$比较1","$比较2"], [……]]
IF_COM = {
0 => [ ] , #默认升级对比条件
}
#—————————————————————————————————————————
#·积极、消极值槽颜色
POS_COLOR1 = Color.new ( 214 ,233 ,83 ,255 )
POS_COLOR2 = Color.new ( 255 ,255 ,255 ,255 )
NEG_COLOR1 = Color.new ( 253 ,80 ,128 ,255 )
NEG_COLOR2 = Color.new ( 255 ,255 ,255 ,255 )
#—————————————————————————————————————————
#·输出评分最大值
PFX = 9999
#—————————————————————————————————————————
#·图标存放文件夹
FILE = "Graphics/Icon/"
#—————————————————————————————————————————
#·效果范围显示文字
SCOPE = [ "无" ,
"单个敌人" ,"全体敌人" ,
"一个随机敌人" ,"二个随机敌人" ,"三个随机敌人" ,"四个随机敌人" ,
"单个队友" ,"全体队友" ,
"单个队友(无法战斗)" ,"全体队友(无法战斗)" ,
"使用者" ]
#·使用场合显示文字
OCCASION = [ "随时可用" ,"战斗可用" ,"菜单可用" ,"不可用" ]
#·命中类型显示文字
HIT_TYPE = [ "必定命中" ,"物理攻击" ,"魔法攻击" ]
#·输出类型显示文字
DAMAGE_TYPE = [ "无输出" ,"HP伤害" ,"MP伤害" ,"HP恢复" ,"MP恢复" ,"HP吸收" ,"MP吸收" ]
#—————————————————————————————————————————
end
#==============================================================================
# ■ SUP_Window_Command
#------------------------------------------------------------------------------
# 技能分类窗口
#==============================================================================
class SUP_Window_Command < Window_Command
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_reader :skill_window
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize( x, y)
super ( x, y)
@actor = nil
end
#--------------------------------------------------------------------------
# ● 获取窗口的宽度
#--------------------------------------------------------------------------
def window_width
return 200
end
#--------------------------------------------------------------------------
# ● 设置角色
#--------------------------------------------------------------------------
def actor=( actor)
return if @actor == actor
@actor = actor
refresh
select_last
end
#--------------------------------------------------------------------------
# ● 获取显示行数
#--------------------------------------------------------------------------
def visible_line_number
return 4
end
#--------------------------------------------------------------------------
# ● 生成指令列表
#--------------------------------------------------------------------------
def make_command_list
return unless @actor
@actor .added_skill_types .sort .each do |stype_id|
name = $data_system .skill_types [ stype_id]
add_command( name, :skill , true , stype_id)
end
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
super
@skill_window .stype_id = current_ext if @skill_window
end
#--------------------------------------------------------------------------
# ● 设置技能窗口
#--------------------------------------------------------------------------
def skill_window=( skill_window)
@skill_window = skill_window
update
end
#--------------------------------------------------------------------------
# ● 返回上一个选择的位置
#--------------------------------------------------------------------------
def select_last
skill = @actor .last_skill .object
if skill
select_ext( skill.stype_id )
else
select ( 0 )
end
end
end
#==============================================================================
# ■ SUP_Window_Index
#------------------------------------------------------------------------------
# 技能列表窗口。
#==============================================================================
class SUP_Window_Index < Window_Selectable
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize( x, y, width, height)
super
@actor = nil
@stype_id = 0
@data = [ ]
end
#--------------------------------------------------------------------------
# ● 设置角色
#--------------------------------------------------------------------------
def actor=( actor)
return if @actor == actor
@actor = actor
refresh
self .oy = 0
end
#--------------------------------------------------------------------------
# ● 设置技能类型 ID
#--------------------------------------------------------------------------
def stype_id=( stype_id)
return if @stype_id == stype_id
@stype_id = stype_id
refresh
self .oy = 0
end
#--------------------------------------------------------------------------
# ● 获取列数
#--------------------------------------------------------------------------
def col_max
return 1
end
#--------------------------------------------------------------------------
# ● 获取项目数
#--------------------------------------------------------------------------
def item_max
@data ? @data .size : 1
end
#--------------------------------------------------------------------------
# ● 获取技能
#--------------------------------------------------------------------------
def item
@data && index >= 0 ? @data [ index] : nil
end
#--------------------------------------------------------------------------
# ● 获取选择项目的有效状态
#--------------------------------------------------------------------------
def current_item_enabled?
enable?( @data[ index] )
end
#--------------------------------------------------------------------------
# ● 查询列表中是否含有此技能
#--------------------------------------------------------------------------
def include ?( item)
item && item.stype_id == @stype_id
end
#--------------------------------------------------------------------------
# ● 查询此技能是否可用
#--------------------------------------------------------------------------
def enable?( item)
item && SUP::UP .has_key ?( item.id )
end
#--------------------------------------------------------------------------
# ● 生成技能列表
#--------------------------------------------------------------------------
def make_item_list
@data = @actor ? @actor .skills .select { |skill| include ?( skill) } : [ ]
end
#--------------------------------------------------------------------------
# ● 返回上一个选择的位置
#--------------------------------------------------------------------------
def select_last
select ( @data.index ( @actor.last_skill .object ) || 0 )
end
#--------------------------------------------------------------------------
# ● 绘制项目
#--------------------------------------------------------------------------
def draw_item( index)
skill = @data [ index]
if skill
rect = item_rect( index)
rect.width -= 4
draw_item_name( skill, rect.x , rect.y , enable?( skill) )
end
end
#--------------------------------------------------------------------------
# ● 更新帮助内容
#--------------------------------------------------------------------------
def update_help
@help_window .set_item ( item)
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
make_item_list
create_contents
draw_all_items
end
end
#==============================================================================
# ■ SUP_Window_Info
#------------------------------------------------------------------------------
# 技能信息窗口
#==============================================================================
class SUP_Window_Info < Window_Base
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize( x, y,w,h)
super ( x, y, w, h)
@w = w ; @h = h
@yema = 1
@actor = nil
@skill = nil
@font_size = 20
@help_fill_color1 = Color.new ( 255 ,255 ,255 ,255 )
@help_fill_color2 = Color.new ( 255 ,255 ,255 ,0 )
end
#--------------------------------------------------------------------------
# ● 设置角色
#--------------------------------------------------------------------------
def actor=( val)
@actor = val
end
#--------------------------------------------------------------------------
# ● 取得技能
#--------------------------------------------------------------------------
def skill
@skill
end
#--------------------------------------------------------------------------
# ● 设置技能
#--------------------------------------------------------------------------
def skill=( val)
@skill = val
huanye( @yema)
end
#--------------------------------------------------------------------------
# ● 技能是否可升级
#--------------------------------------------------------------------------
def skill_up?
SUP::UP .has_key ?( @skill.id )
end
#--------------------------------------------------------------------------
# ● 获得行高
#--------------------------------------------------------------------------
def line_height
@font_size
end
#--------------------------------------------------------------------------
# ● 获得页码
#--------------------------------------------------------------------------
def yema
@yema
end
#--------------------------------------------------------------------------
# ● 换页
#--------------------------------------------------------------------------
def huanye( y)
@yema = y
case @yema
when 1
@draw = method( :draw1 )
@help_txt = [ "技能状态信息" , "升级技能状态信息" , "A键换页(1/2)" ]
when 2
@draw = method( :draw2 )
@help_txt = [ "技能数值信息" , "升级技能数值信息" , "A键换页(2/2)" ]
end
refresh
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
contents.clear
return if !@skill
#描绘帮助信息
contents.font .size = 16
help
#描绘技能信息
contents.font .size = line_height
#描绘选中的技能
@draw .call ( @skill, 0 , line_height)
#描绘升级后的技能
if skill_up?
@draw .call ( $data_skills[ SUP::UP [ @skill.id ] ] , 0 , line_height * 9 )
else
draw_text( 70 , line_height * 9 + 65 , 280 , line_height,
"技能已经无法升级。" )
end
end
#--------------------------------------------------------------------------
# ● 描绘帮助条
#--------------------------------------------------------------------------
def help
#第一条
contents.gradient_fill_rect ( 0 , 0 , @w , line_height,
@help_fill_color1 , @help_fill_color2 )
draw_text( 2 , 0 , 280 , line_height, @help_txt [ 0 ] )
#第二条
contents.gradient_fill_rect ( 0 , line_height * 8 , @w , line_height,
@help_fill_color1 , @help_fill_color2 )
draw_text( 2 , line_height * 8 , 280 , line_height, @help_txt [ 1 ] )
#换页
draw_text( 225 , 0 , 280 , line_height, @help_txt [ 2 ] )
end
#--------------------------------------------------------------------------
# ● 描绘页1
#--------------------------------------------------------------------------
def draw1( skill,x,y)
#名称---------------------------------------------
draw_item_name( skill, x, y)
#属性---------------------------------------------
sx = $data_system .elements [ skill.damage .element_id ]
sx = sx=="" ? "无" : sx
draw_text( x, y + line_height, 280 , line_height,
"属性:" +sx)
#使用场合-----------------------------------------
draw_text( x, y + line_height * 2 , 280 , line_height,
"使用场合:" +SUP::OCCASION [ skill.occasion ] )
#使用范围-----------------------------------------
draw_text( x, y + line_height * 3 , 280 , line_height,
"使用范围:" +SUP::SCOPE [ skill.scope ] )
#命中类型-----------------------------------------
draw_text( x, y + line_height * 4 , 280 , line_height,
"命中类型:" +SUP::HIT_TYPE [ skill.hit_type ] )
#输出类型-----------------------------------------
draw_text( x, y + line_height * 5 , 280 , line_height,
"输出类型:" +SUP::DAMAGE_TYPE [ skill.damage .type ] )
#武器限制-----------------------------------------
w1 = $data_system .weapon_types [ skill.required_wtype_id1 ]
w2 = $data_system .weapon_types [ skill.required_wtype_id2 ]
w = "无武器限制" ; if w1 !="" ;w=w1;end ; if w2 != "" ;w+="与" +w2;end
draw_text( x, y + line_height * 6 , 280 , line_height,
"武器限制:" +w)
end
#--------------------------------------------------------------------------
# ● 描绘页2
#--------------------------------------------------------------------------
def draw2( skill,x,y)
#名称---------------------------------------------
draw_item_name( skill, x, y)
#魔力值消耗---------------------------------------
draw_text( x, y + line_height, 280 , line_height,
"魔力值消耗:" )
w = 200 ; h = 15
b = skill.mp_cost .to_f / 9999
c1 = Color.new ( 128 ,155 ,122 ,255 )
c2 = Color.new ( 25 ,55 ,155 ,255 )
flii( x+120 , y + line_height + 3 , w, h, b, SUP::NEG_COLOR1 , SUP::NEG_COLOR2 )
draw_current_and_max_values( x+40 , y + line_height, 280 , skill.mp_cost , 9999 ,
text_color( 0 ) , text_color( 0 ) )
#特技值消耗---------------------------------------
draw_text( x, y + line_height * 2 , 280 , line_height,
"特技值消耗:" )
w = 200 ; h = 15
b = skill.tp_cost .to_f / 100
flii( x+120 , y + line_height * 2 + 3 , w, h, b, SUP::NEG_COLOR1 , SUP::NEG_COLOR2 )
draw_current_and_max_values( x+40 , y + line_height * 2 , 280 , skill.tp_cost , 100 ,
text_color( 0 ) , text_color( 0 ) )
#特技值获得---------------------------------------
draw_text( x, y + line_height * 3 , 280 , line_height,
"特技值获得:" )
w = 200 ; h = 15
b = skill.tp_gain .to_f / 100
flii( x+120 , y + line_height * 3 + 3 , w, h, b, SUP::POS_COLOR1 , SUP::POS_COLOR2 )
draw_current_and_max_values( x+40 , y + line_height * 3 , 280 , skill.tp_gain , 100 ,
text_color( 0 ) , text_color( 0 ) )
#攻击次数-----------------------------------------
draw_text( x, y + line_height * 4 , 280 , line_height,
"攻击次数:" )
w = 200 ; h = 15
b = skill.repeats .to_f / 9
flii( x+120 , y + line_height * 4 + 3 , w, h, b, SUP::POS_COLOR1 , SUP::POS_COLOR2 )
draw_current_and_max_values( x+40 , y + line_height * 4 , 280 , skill.repeats , 9 ,
text_color( 0 ) , text_color( 0 ) )
#成功几率-----------------------------------------
draw_text( x, y + line_height * 5 , 280 , line_height,
"成功几率:" )
w = 200 ; h = 15
b = skill.success_rate .to_f / 100
flii( x+120 , y + line_height * 5 + 3 , w, h, b, SUP::POS_COLOR1 , SUP::POS_COLOR2 )
draw_current_and_max_values( x+40 , y + line_height * 5 , 280 , skill.success_rate , 100 ,
text_color( 0 ) , text_color( 0 ) )
#输出评分-----------------------------------------
draw_text( x, y + line_height * 6 , 280 , line_height,
"输出评分:" )
pf = scpf( skill)
w = 200 ; h = 15
b = [ pf.to_f / SUP::PFX , 1.0 ] .min
type = skill.damage .type
case type
when 0
draw_text( x+150 , y + line_height * 6 , 280 , line_height,
"此技能没有输出。" )
when 1 , 2 , 5 , 6
flii( x+120 , y + line_height * 6 + 3 , w, h, b, SUP::NEG_COLOR1 , SUP::NEG_COLOR2 )
draw_current_and_max_values( x+40 , y + line_height * 6 , 280 , pf, SUP::PFX ,
text_color( 0 ) , text_color( 0 ) )
when 3 , 4
flii( x+120 , y + line_height * 6 + 3 , w, h, b, SUP::POS_COLOR1 , SUP::POS_COLOR2 )
draw_current_and_max_values( x+40 , y + line_height * 6 , 280 , pf, SUP::PFX ,
text_color( 0 ) , text_color( 0 ) )
end
end
#--------------------------------------------------------------------------
# ● 描绘值槽
#--------------------------------------------------------------------------
def flii( x, y, w, h, b, color1, color2)
contents.fill_rect ( x, y, w, h, Color.new ( 0 ,0 ,0 ,64 ) )
contents.gradient_fill_rect ( x, y, w*b, h, color1, color2)
end
#--------------------------------------------------------------------------
# ● 获得评分
#--------------------------------------------------------------------------
def scpf( skill)
g = skill.damage .formula .to_s
a = @actor
v = $game_variables
g.gsub !( /b/,"a" )
return eval ( g)
end
end
#==============================================================================
# ■ SUP_Window_Choice
#------------------------------------------------------------------------------
# 技能升级条件及确认窗口
#==============================================================================
class SUP_Window_Choice < Window_Command
#--------------------------------------------------------------------------
# ● 初始化对象
#--------------------------------------------------------------------------
def initialize( x, y)
@hx = -1
super ( x, y)
@skill = nil
@actor = nil
@enabled = [ ]
@txt = [ ]
@ite = [ ]
@pic = [ ]
@xh = [ ]
end
#--------------------------------------------------------------------------
# ● 设置角色
#--------------------------------------------------------------------------
def actor=( val)
@actor = val
end
#--------------------------------------------------------------------------
# ● 取得技能
#--------------------------------------------------------------------------
def skill
@skill
end
#--------------------------------------------------------------------------
# ● 设置技能
#--------------------------------------------------------------------------
def skill=( val)
@skill = val
refresh_draw
end
#--------------------------------------------------------------------------
# ● 取得全部指定条件
#--------------------------------------------------------------------------
def all_if( skill_id)
arr = Array .new
arr << SUP::IF_ITE [ skill_id]
arr << SUP::IF_VAR [ skill_id]
arr << SUP::IF_SWI [ skill_id]
arr << SUP::IF_COM [ skill_id]
end
#--------------------------------------------------------------------------
# ● 获取全部条件有效状态
#--------------------------------------------------------------------------
def all_enabled?
!@enabled.include ?( false )
end
#--------------------------------------------------------------------------
# ● 获取物品、变量条件有效状态
#--------------------------------------------------------------------------
def ite_var_enabled?( y, s)
return false if not y
y >= s
end
#--------------------------------------------------------------------------
# ● 获取开关条件有效状态
#--------------------------------------------------------------------------
def swi_enabled?( y)
y
end
#--------------------------------------------------------------------------
# ● 获取对比条件有效状态
#--------------------------------------------------------------------------
def com_enabled?( y1, y2)
y1 == y2
end
#--------------------------------------------------------------------------
# ● 技能升级条件数据
#--------------------------------------------------------------------------
def skill_data
return if !@skill
@hx = -1 ; @enabled = [ ] ; @txt = [ ] ; @pic = [ ] ; @pid = [ ] ; @xh = [ ]
l = all_if( @skill.id ) ; n = l.compact
t = n == [ ] ? all_if( 0 ) : l
t1 = t[ 0 ] ; t2 = t[ 1 ] ; t3 = t[ 2 ] ; t4 = t[ 3 ]
if t1
ite_data( t1)
end
if t2
var_data( t2)
end
if t3
swi_data( t3)
end
if t4
com_data( t4)
end
end
#--------------------------------------------------------------------------
# ● 技能条件进行描绘
#--------------------------------------------------------------------------
def skill_draw
@txt .each_with_index { |txt,i|
change_color( normal_color, @enabled [ i] )
pic = @pic [ i]
if pic.is_a ?( Symbol )
wx = window_width / 2 - text_size( txt) .width / 2 - 24
if pic == :ite
draw_item_icon( @ite[ i] , wx, item_height * i)
else
draw_bit( pic.to_s , wx, item_height * i)
end
end
draw_text( 0 , item_height * i, window_width, item_height, txt, 1 )
}
end
#--------------------------------------------------------------------------
# ● 绘制物品图标
#--------------------------------------------------------------------------
def draw_item_icon( item, x, y)
draw_icon( item.icon_index , x, y)
end
#--------------------------------------------------------------------------
# ● 绘制图片
#--------------------------------------------------------------------------
def draw_bit( name, x, y)
bitmap = Bitmap.new ( SUP::FILE + name)
rect = Rect.new ( 0 , 0 , 24 , 24 )
contents.blt ( x, y, bitmap, rect)
end
#--------------------------------------------------------------------------
# ● 对技能进行升级(变量、物品消耗)
#--------------------------------------------------------------------------
def skill_up
@actor .forget_skill ( @skill.id )
@actor .learn_skill ( SUP::UP [ @skill.id ] )
@xh .each_with_index { |x, i|
if x.is_a ?( String )
eval ( x)
else
$game_party .gain_item ( @ite[ i] , -x)
end }
end
#--------------------------------------------------------------------------
# ● 物品条件 数据
#--------------------------------------------------------------------------
def ite_data( si)
si.each { |i|
@hx += 1 ; t = i[ 0 ] ; b = i[ 1 ] ; s = i[ 2 ]
case t
when :items
item = $data_items [ b]
when :weapons
item = $data_weapons [ b]
when :armors
item = $data_armors [ b]
end
y = $game_party .item_number ( item)
enabled = ite_var_enabled?( y, s)
@enabled [ @hx] = enabled
@txt [ @hx] = item.name +"*" + s.to_s
@ite [ @hx] = item
@pic [ @hx] = :ite
@xh [ @hx] = s
}
end
#--------------------------------------------------------------------------
# ● 变量条件 数据
#--------------------------------------------------------------------------
def var_data( si)
si.each { |i|
@hx += 1 ; n = i[ 0 ] ; y = eval ( i[ 1 ] ) ; s = i[ 2 ]
enabled = ite_var_enabled?( y, s)
@enabled [ @hx] = enabled
@txt [ @hx] = n+"*" + s.to_s
@pic [ @hx] = i[ -1 ]
@xh [ @hx] = "#{i[1]} -= #{s.to_s}"
}
end
#--------------------------------------------------------------------------
# ● 开关条件 数据
#--------------------------------------------------------------------------
def swi_data( si)
si.each { |i|
@hx += 1 ; n = i[ 0 ] ; y = eval ( i[ 1 ] )
enabled = swi_enabled?( y)
@enabled [ @hx] = enabled
@txt [ @hx] = n
@pic [ @hx] = i[ -1 ]
}
end
#--------------------------------------------------------------------------
# ● 对比条件 数据
#--------------------------------------------------------------------------
def com_data( si)
si.each { |i|
@hx += 1 ; n = i[ 0 ] ; y1 = eval ( i[ 1 ] ) ; y2 = eval ( i[ 2 ] )
enabled = com_enabled?( y1,y2)
@enabled [ @hx] = enabled
@txt [ @hx] = n
@pic [ @hx] = i[ -1 ]
}
end
#--------------------------------------------------------------------------
# ● 获取窗口的宽度
#--------------------------------------------------------------------------
def window_width
return 300
end
#--------------------------------------------------------------------------
# ● 获取项目的高度
#--------------------------------------------------------------------------
def item_height
return 28
end
#--------------------------------------------------------------------------
# ● 获取对齐方向
#--------------------------------------------------------------------------
def alignment
return 1
end
#--------------------------------------------------------------------------
# ● 获取项目的绘制矩形
#--------------------------------------------------------------------------
alias x_item_rect item_rect
def item_rect( index)
rect = x_item_rect( index)
rect.y = rect.y + item_height * ( @hx+1 )
rect
end
#--------------------------------------------------------------------------
# ● 刷新(清除内容)
#--------------------------------------------------------------------------
def refresh
contents.clear
end
#--------------------------------------------------------------------------
# ● 刷新(取得数据、刷新窗口)
#--------------------------------------------------------------------------
def refresh2
skill_data
self .height = item_height * ( @hx+3 )
self .x = Graphics.width / 2 - window_width / 2
self .y = Graphics.height / 2 - self .height / 2
create_contents
end
#--------------------------------------------------------------------------
# ● 刷新(要描绘的内容)
#--------------------------------------------------------------------------
def refresh_draw
refresh
refresh2
skill_draw
clear_command_list
add_command( "确认" , :ok , all_enabled?)
draw_all_items
end
end
#==============================================================================
# ■ Scene_SUP
#------------------------------------------------------------------------------
# 技能升级画面
#==============================================================================
class Scene_SUP < Scene_MenuBase
#--------------------------------------------------------------------------
# ● 开始处理
#--------------------------------------------------------------------------
def start
super
create_help_window
suv_window_command
suv_window_info
suv_window_index
suv_window_choice
end
#--------------------------------------------------------------------------
# ● 帧更新
#--------------------------------------------------------------------------
def update
super
if Input.trigger ?( :X )
case @suv_window_info .yema
when 1
@suv_window_info .huanye ( 2 )
when 2
@suv_window_info .huanye ( 1 )
end
end
if @suv_window_info .skill != @suv_window_index .item
@suv_window_info .skill = @suv_window_index .item
end
end
#--------------------------------------------------------------------------
# ● 生成确认窗口
#--------------------------------------------------------------------------
def suv_window_choice
@suv_window_choice = SUP_Window_Choice.new ( 0 , 0 )
@suv_window_choice .viewport = @viewport
@suv_window_choice .set_handler ( :ok , method( :confirm_ok ) )
@suv_window_choice .set_handler ( :cancel , method( :confirm_cancel ) )
@suv_window_choice .hide .deactivate
@suv_window_choice .actor = @actor
end
#--------------------------------------------------------------------------
# ● 生成分类窗口
#--------------------------------------------------------------------------
def suv_window_command
wy = @help_window .height
@suv_window_command = SUP_Window_Command.new ( 0 , wy)
@suv_window_command .viewport = @viewport
@suv_window_command .help_window = @help_window
@suv_window_command .actor = @actor
@suv_window_command .set_handler ( :skill , method( :command_skill ) )
@suv_window_command .set_handler ( :cancel , method( :return_scene ) )
@suv_window_command .set_handler ( :pagedown , method( :next_actor ) )
@suv_window_command .set_handler ( :pageup , method( :prev_actor ) )
end
#--------------------------------------------------------------------------
# ● 生成状态窗口
#--------------------------------------------------------------------------
def suv_window_info
y = @help_window .height
w = Graphics.width - @suv_window_command .width
h = Graphics.height - @help_window .height
@suv_window_info = SUP_Window_Info.new ( @suv_window_command.width , y, w, h)
@suv_window_info .viewport = @viewport
@suv_window_info .actor = @actor
end
#--------------------------------------------------------------------------
# ● 生成列表窗口
#--------------------------------------------------------------------------
def suv_window_index
wx = 0
wy = @suv_window_command .y + @suv_window_command .height
ww = Graphics.width - @suv_window_info .width
wh = Graphics.height - wy
@suv_window_index = SUP_Window_Index.new ( wx, wy, ww, wh)
@suv_window_index .actor = @actor
@suv_window_index .viewport = @viewport
@suv_window_index .help_window = @help_window
@suv_window_index .set_handler ( :ok , method( :on_item_ok ) )
@suv_window_index .set_handler ( :cancel , method( :on_item_cancel ) )
@suv_window_command .skill_window = @suv_window_index
end
#--------------------------------------------------------------------------
# ● 技能分类里“确定”
#--------------------------------------------------------------------------
def command_skill
@suv_window_index .activate
@suv_window_index .select_last
end
#--------------------------------------------------------------------------
# ● 技能列表里“确定”
#--------------------------------------------------------------------------
def on_item_ok
skill = @suv_window_index .item
@suv_window_choice .skill = skill
@suv_window_choice .show .activate
end
#--------------------------------------------------------------------------
# ● 技能列表里“返回”
#--------------------------------------------------------------------------
def on_item_cancel
@suv_window_index .unselect
@suv_window_command .activate
end
#--------------------------------------------------------------------------
# ● 确认列表里“确认”
#--------------------------------------------------------------------------
def confirm_ok
@suv_window_choice .skill_up
@suv_window_index .refresh
@suv_window_choice .hide .deactivate
@suv_window_index .activate
end
#--------------------------------------------------------------------------
# ● 确认列表里“返回”
#--------------------------------------------------------------------------
def confirm_cancel
@suv_window_choice .hide .deactivate
@suv_window_index .activate
end
#--------------------------------------------------------------------------
# ● 切换角色
#--------------------------------------------------------------------------
def on_actor_change
@suv_window_command .actor = @actor
@suv_window_info .actor = @actor
@suv_window_index .actor = @actor
@suv_window_choice .actor = @actor
@suv_window_command .activate
end
end
話說回來,請問後三個問題要怎麼解決?謝謝