archdargon
Member
Honestly, I hate troubling you guys for my own inaptitude, but having little skill with RGSS (still learning, sort of), I feel that this particular problem is rather beyond my capabilities.
Basically, I'm trying to merge a short cut skill system with the RTAB, without much success, I'm afraid.
To clarify, the Shortcut skill script basically allow you to assign skill to short cut buttons, not unlike what you might find in a MMORPG game, actually. In battle, a stretched window is drawn at the top of the screen, where the icons of skills you have assigned sits, and can be activated via the pressing of the corresponding key. Unfortunately, it didn't seem to be compatible with RTAB.
Here is a picture of what it should look like.
Since the Shortcut script is divided into several smaller scripts, and since I haven't the faintest clue as to which part was causing the conflict, I've posted all of them.
Basically, I'm trying to merge a short cut skill system with the RTAB, without much success, I'm afraid.
To clarify, the Shortcut skill script basically allow you to assign skill to short cut buttons, not unlike what you might find in a MMORPG game, actually. In battle, a stretched window is drawn at the top of the screen, where the icons of skills you have assigned sits, and can be activated via the pressing of the corresponding key. Unfortunately, it didn't seem to be compatible with RTAB.
Here is a picture of what it should look like.
Code:
[spoiler][URL=http://img233.imageshack.us/my.php?image=errorsu2.png]http://img233.imageshack.us/img233/9895/errorsu2.th.png[/IMG][/URL][/spoiler]
Since the Shortcut script is divided into several smaller scripts, and since I haven't the faintest clue as to which part was causing the conflict, I've posted all of them.
Code:
[spoiler]#==============================================================================
# â– Game_Actor
#------------------------------------------------------------------------------
#  处ç†è§’色的类。本类在 Game_Actors ç±» ($game_actors)
# 的内部使用ã€Game_Party 类请å‚考 ($game_party) 。
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ◠定义实例å˜é‡
#--------------------------------------------------------------------------
attr_reader :name # å称
attr_reader :character_name # 角色 文件å
attr_reader :character_hue # 角色 色相
attr_reader :class_id # èŒä¸š ID
attr_reader :weapon_id # æ¦å™¨ ID
attr_reader :armor1_id # 盾 ID
attr_reader :armor2_id # 头防具 ID
attr_reader :armor3_id # 身体体防具 ID
attr_reader :armor4_id # è£…é¥°å“ ID
attr_reader :level # æ°´å¹³
attr_reader :exp # EXP
attr_reader :skills # 特技
attr_accessor :skill_s # å¿«æ·é”®
#--------------------------------------------------------------------------
# â— åˆå§‹åŒ–对åƒ
# actor_id : 角色 ID
#--------------------------------------------------------------------------
def initialize(actor_id)
super()
setup(actor_id)
end
#--------------------------------------------------------------------------
# ◠设置
# actor_id : 角色 ID
#--------------------------------------------------------------------------
def setup(actor_id)
actor = $data_actors[actor_id]
@actor_id = actor_id
@name = actor.name
@skill_s = []
for i in 0..9
@skill_s[i] = ""
end
@character_name = actor.character_name
@character_hue = actor.character_hue
@battler_name = actor.battler_name
@battler_hue = actor.battler_hue
@class_id = actor.class_id
@weapon_id = actor.weapon_id
@armor1_id = actor.armor1_id
@armor2_id = actor.armor2_id
@armor3_id = actor.armor3_id
@armor4_id = actor.armor4_id
@level = actor.initial_level
@exp_list = Array.new(101)
make_exp_list
@exp = @exp_list[@level]
@skills = []
@hp = maxhp
@sp = maxsp
@states = []
@states_turn = {}
@maxhp_plus = 0
@maxsp_plus = 0
@str_plus = 0
@dex_plus = 0
@agi_plus = 0
@int_plus = 0
# å¦ä¼šç‰¹æŠ€
for i in 1..@level
for j in $data_classes[@class_id].learnings
if j.level == i
learn_skill(j.skill_id)
end
end
end
# 刷新自动状æ€
update_auto_state(nil, $data_armors[@armor1_id])
update_auto_state(nil, $data_armors[@armor2_id])
update_auto_state(nil, $data_armors[@armor3_id])
update_auto_state(nil, $data_armors[@armor4_id])
end
#--------------------------------------------------------------------------
# ◠获å–角色 ID
#--------------------------------------------------------------------------
def id
return @actor_id
end
#--------------------------------------------------------------------------
# ◠获å–索引
#--------------------------------------------------------------------------
def index
return $game_party.actors.index(self)
end
#--------------------------------------------------------------------------
# ◠计算 EXP
#--------------------------------------------------------------------------
def make_exp_list
actor = $data_actors[@actor_id]
@exp_list[1] = 0
pow_i = 2.4 + actor.exp_inflation / 100.0
for i in 2..100
if i > actor.final_level
@exp_list[i] = 0
else
n = actor.exp_basis * ((i + 3) ** pow_i) / (5 ** pow_i)
@exp_list[i] = @exp_list[i-1] + Integer(n)
end
end
end
#--------------------------------------------------------------------------
# â— å–得属性修æ£å€¼
# element_id : 属性 ID
#--------------------------------------------------------------------------
def element_rate(element_id)
# 获å–对应属性有效度的数值
table = [0,200,150,100,50,0,-100]
result = table[$data_classes[@class_id].element_ranks[element_id]]
# 防具能防御本属性的情况下效果å‡åŠ
for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
armor = $data_armors[i]
if armor != nil and armor.guard_element_set.include?(element_id)
result /= 2
end
end
# 状æ€èƒ½é˜²å¾¡æœ¬å±žæ€§çš„情况下效果å‡åŠ
for i in @states
if $data_states[i].guard_element_set.include?(element_id)
result /= 2
end
end
# 过程结æŸ
return result
end
#--------------------------------------------------------------------------
# ◠获å–属性有效度
#--------------------------------------------------------------------------
def state_ranks
return $data_classes[@class_id].state_ranks
end
#--------------------------------------------------------------------------
# ◠判定防御属性
# state_id : 属性 ID
#--------------------------------------------------------------------------
def state_guard?(state_id)
for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id]
armor = $data_armors[i]
if armor != nil
if armor.guard_state_set.include?(state_id)
return true
end
end
end
return false
end
#--------------------------------------------------------------------------
# ◠获å–普通攻击属性
#--------------------------------------------------------------------------
def element_set
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.element_set : []
end
#--------------------------------------------------------------------------
# ◠获å–普通攻击状æ€å˜åŒ– (+)
#--------------------------------------------------------------------------
def plus_state_set
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.plus_state_set : []
end
#--------------------------------------------------------------------------
# ◠获å–普通攻击状æ€å˜åŒ– (-)
#--------------------------------------------------------------------------
def minus_state_set
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.minus_state_set : []
end
#--------------------------------------------------------------------------
# â— èŽ·å– MaxHP
#--------------------------------------------------------------------------
def maxhp
n = [[base_maxhp + @maxhp_plus, 1].max, 9999].min
for i in @states
n *= $data_states[i].maxhp_rate / 100.0
end
n = [[Integer(n), 1].max, 9999].min
return n
end
#--------------------------------------------------------------------------
# ◠获å–基本 MaxHP
#--------------------------------------------------------------------------
def base_maxhp
return $data_actors[@actor_id].parameters[0, @level]
end
#--------------------------------------------------------------------------
# ◠获å–基本 MaxSP
#--------------------------------------------------------------------------
def base_maxsp
return $data_actors[@actor_id].parameters[1, @level]
end
#--------------------------------------------------------------------------
# ◠获å–基本力é‡
#--------------------------------------------------------------------------
def base_str
n = $data_actors[@actor_id].parameters[2, @level]
weapon = $data_weapons[@weapon_id]
armor1 = $data_armors[@armor1_id]
armor2 = $data_armors[@armor2_id]
armor3 = $data_armors[@armor3_id]
armor4 = $data_armors[@armor4_id]
n += weapon != nil ? weapon.str_plus : 0
n += armor1 != nil ? armor1.str_plus : 0
n += armor2 != nil ? armor2.str_plus : 0
n += armor3 != nil ? armor3.str_plus : 0
n += armor4 != nil ? armor4.str_plus : 0
return [[n, 1].max, 999].min
end
#--------------------------------------------------------------------------
# ◠获å–基本çµå·§
#--------------------------------------------------------------------------
def base_dex
n = $data_actors[@actor_id].parameters[3, @level]
weapon = $data_weapons[@weapon_id]
armor1 = $data_armors[@armor1_id]
armor2 = $data_armors[@armor2_id]
armor3 = $data_armors[@armor3_id]
armor4 = $data_armors[@armor4_id]
n += weapon != nil ? weapon.dex_plus : 0
n += armor1 != nil ? armor1.dex_plus : 0
n += armor2 != nil ? armor2.dex_plus : 0
n += armor3 != nil ? armor3.dex_plus : 0
n += armor4 != nil ? armor4.dex_plus : 0
return [[n, 1].max, 999].min
end
#--------------------------------------------------------------------------
# ◠获å–基本速度
#--------------------------------------------------------------------------
def base_agi
n = $data_actors[@actor_id].parameters[4, @level]
weapon = $data_weapons[@weapon_id]
armor1 = $data_armors[@armor1_id]
armor2 = $data_armors[@armor2_id]
armor3 = $data_armors[@armor3_id]
armor4 = $data_armors[@armor4_id]
n += weapon != nil ? weapon.agi_plus : 0
n += armor1 != nil ? armor1.agi_plus : 0
n += armor2 != nil ? armor2.agi_plus : 0
n += armor3 != nil ? armor3.agi_plus : 0
n += armor4 != nil ? armor4.agi_plus : 0
return [[n, 1].max, 999].min
end
#--------------------------------------------------------------------------
# ◠获å–基本é”力
#--------------------------------------------------------------------------
def base_int
n = $data_actors[@actor_id].parameters[5, @level]
weapon = $data_weapons[@weapon_id]
armor1 = $data_armors[@armor1_id]
armor2 = $data_armors[@armor2_id]
armor3 = $data_armors[@armor3_id]
armor4 = $data_armors[@armor4_id]
n += weapon != nil ? weapon.int_plus : 0
n += armor1 != nil ? armor1.int_plus : 0
n += armor2 != nil ? armor2.int_plus : 0
n += armor3 != nil ? armor3.int_plus : 0
n += armor4 != nil ? armor4.int_plus : 0
return [[n, 1].max, 999].min
end
#--------------------------------------------------------------------------
# ◠获å–基本攻击力
#--------------------------------------------------------------------------
def base_atk
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.atk : 0
end
#--------------------------------------------------------------------------
# ◠获å–基本物ç†é˜²å¾¡
#--------------------------------------------------------------------------
def base_pdef
weapon = $data_weapons[@weapon_id]
armor1 = $data_armors[@armor1_id]
armor2 = $data_armors[@armor2_id]
armor3 = $data_armors[@armor3_id]
armor4 = $data_armors[@armor4_id]
pdef1 = weapon != nil ? weapon.pdef : 0
pdef2 = armor1 != nil ? armor1.pdef : 0
pdef3 = armor2 != nil ? armor2.pdef : 0
pdef4 = armor3 != nil ? armor3.pdef : 0
pdef5 = armor4 != nil ? armor4.pdef : 0
return pdef1 + pdef2 + pdef3 + pdef4 + pdef5
end
#--------------------------------------------------------------------------
# ◠获å–基本é”法防御
#--------------------------------------------------------------------------
def base_mdef
weapon = $data_weapons[@weapon_id]
armor1 = $data_armors[@armor1_id]
armor2 = $data_armors[@armor2_id]
armor3 = $data_armors[@armor3_id]
armor4 = $data_armors[@armor4_id]
mdef1 = weapon != nil ? weapon.mdef : 0
mdef2 = armor1 != nil ? armor1.mdef : 0
mdef3 = armor2 != nil ? armor2.mdef : 0
mdef4 = armor3 != nil ? armor3.mdef : 0
mdef5 = armor4 != nil ? armor4.mdef : 0
return mdef1 + mdef2 + mdef3 + mdef4 + mdef5
end
#--------------------------------------------------------------------------
# ◠获å–基本回é¿ä¿®æ£
#--------------------------------------------------------------------------
def base_eva
armor1 = $data_armors[@armor1_id]
armor2 = $data_armors[@armor2_id]
armor3 = $data_armors[@armor3_id]
armor4 = $data_armors[@armor4_id]
eva1 = armor1 != nil ? armor1.eva : 0
eva2 = armor2 != nil ? armor2.eva : 0
eva3 = armor3 != nil ? armor3.eva : 0
eva4 = armor4 != nil ? armor4.eva : 0
return eva1 + eva2 + eva3 + eva4
end
#--------------------------------------------------------------------------
# ◠普通攻击 获å–攻击方动画 ID
#--------------------------------------------------------------------------
def animation1_id
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.animation1_id : 0
end
#--------------------------------------------------------------------------
# ◠普通攻击 获å–对åƒæ–¹åŠ¨ç”» ID
#--------------------------------------------------------------------------
def animation2_id
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.animation2_id : 0
end
#--------------------------------------------------------------------------
# ◠获å–ç±»å
#--------------------------------------------------------------------------
def class_name
return $data_classes[@class_id].name
end
#--------------------------------------------------------------------------
# â— èŽ·å– EXP å—符串
#--------------------------------------------------------------------------
def exp_s
return @exp_list[@level+1] > 0 ? @exp.to_s : "-------"
end
#--------------------------------------------------------------------------
# ◠获å–下一ç‰çº§çš„ EXP å—符串
#--------------------------------------------------------------------------
def next_exp_s
return @exp_list[@level+1] > 0 ? @exp_list[@level+1].to_s : "-------"
end
#--------------------------------------------------------------------------
# ◠获å–离下一ç‰çº§è¿˜éœ€çš„ EXP å—符串
#--------------------------------------------------------------------------
def next_rest_exp_s
return @exp_list[@level+1] > 0 ?
(@exp_list[@level+1] - @exp).to_s : "-------"
end
#--------------------------------------------------------------------------
# ◠更新自动状æ€
# old_armor : å¸ä¸‹é˜²å…·
# new_armor : 装备防具
#--------------------------------------------------------------------------
def update_auto_state(old_armor, new_armor)
# 强制解除å¸ä¸‹é˜²å…·çš„自动状æ€
if old_armor != nil and old_armor.auto_state_id != 0
remove_state(old_armor.auto_state_id, true)
end
# å¼ºåˆ¶é™„åŠ è£…å¤‡é˜²å…·çš„è‡ªåŠ¨çŠ¶æ€
if new_armor != nil and new_armor.auto_state_id != 0
add_state(new_armor.auto_state_id, true)
end
end
#--------------------------------------------------------------------------
# ◠装备固定判定
# equip_type : 装备类型
#--------------------------------------------------------------------------
def equip_fix?(equip_type)
case equip_type
when 0 # æ¦å™¨
return $data_actors[@actor_id].weapon_fix
when 1 # 盾
return $data_actors[@actor_id].armor1_fix
when 2 # 头
return $data_actors[@actor_id].armor2_fix
when 3 # 身体
return $data_actors[@actor_id].armor3_fix
when 4 # 装饰å“
return $data_actors[@actor_id].armor4_fix
end
return false
end
#--------------------------------------------------------------------------
# â— å˜æ›´è£…备
# equip_type : 装备类型
# id : æ¦å™¨ or 防具 ID (0 为解除装备)
#--------------------------------------------------------------------------
def equip(equip_type, id)
case equip_type
when 0 # æ¦å™¨
if id == 0 or $game_party.weapon_number(id) > 0
$game_party.gain_weapon(@weapon_id, 1)
@weapon_id = id
$game_party.lose_weapon(id, 1)
end
when 1 # 盾
if id == 0 or $game_party.armor_number(id) > 0
update_auto_state($data_armors[@armor1_id], $data_armors[id])
$game_party.gain_armor(@armor1_id, 1)
@armor1_id = id
$game_party.lose_armor(id, 1)
end
when 2 # 头
if id == 0 or $game_party.armor_number(id) > 0
update_auto_state($data_armors[@armor2_id], $data_armors[id])
$game_party.gain_armor(@armor2_id, 1)
@armor2_id = id
$game_party.lose_armor(id, 1)
end
when 3 # 身体
if id == 0 or $game_party.armor_number(id) > 0
update_auto_state($data_armors[@armor3_id], $data_armors[id])
$game_party.gain_armor(@armor3_id, 1)
@armor3_id = id
$game_party.lose_armor(id, 1)
end
when 4 # 装饰å“
if id == 0 or $game_party.armor_number(id) > 0
update_auto_state($data_armors[@armor4_id], $data_armors[id])
$game_party.gain_armor(@armor4_id, 1)
@armor4_id = id
$game_party.lose_armor(id, 1)
end
end
end
#--------------------------------------------------------------------------
# â— å¯ä»¥è£…备判定
# item : 物å“
#--------------------------------------------------------------------------
def equippable?(item)
# æ¦å™¨çš„情况
if item.is_a?(RPG::Weapon)
# 包å«å½“å‰çš„èŒä¸šå¯ä»¥è£…备æ¦å™¨çš„场åˆ
if $data_classes[@class_id].weapon_set.include?(item.id)
return true
end
end
# 防具的情况
if item.is_a?(RPG::Armor)
# ä¸åŒ…å«å½“å‰çš„èŒä¸šå¯ä»¥è£…备æ¦å™¨çš„场åˆ
if $data_classes[@class_id].armor_set.include?(item.id)
return true
end
end
return false
end
#--------------------------------------------------------------------------
# ◠更改 EXP
# exp : æ–°çš„ EXP
#--------------------------------------------------------------------------
def exp=(exp)
@exp = [[exp, 9999999].min, 0].max
# å‡çº§
while @exp >= @exp_list[@level+1] and @exp_list[@level+1] > 0
@level += 1
# å¦ä¼šç‰¹æŠ€
for j in $data_classes[@class_id].learnings
if j.level == @level
learn_skill(j.skill_id)
end
end
end
# é™çº§
while @exp < @exp_list[@level]
@level -= 1
end
# ä¿®æ£å½“å‰çš„ HP 与 SP 超过最大值
@hp = [@hp, self.maxhp].min
@sp = [@sp, self.maxsp].min
end
#--------------------------------------------------------------------------
# ◠更改水å“
# level : æ–°çš„ç‰çº§
#--------------------------------------------------------------------------
def level=(level)
# 检查上下é™
level = [[level, $data_actors[@actor_id].final_level].min, 1].max
# 更改 EXP
self.exp = @exp_list[level]
end
#--------------------------------------------------------------------------
# ◠觉悟特技
# skill_id : 特技 ID
#--------------------------------------------------------------------------
def learn_skill(skill_id)
if skill_id > 0 and not skill_learn?(skill_id)
@skills.push(skill_id)
@skills.sort!
end
end
#--------------------------------------------------------------------------
# â— é—忘特技
# skill_id : 特技 ID
#--------------------------------------------------------------------------
def forget_skill(skill_id)
@skills.delete(skill_id)
end
#--------------------------------------------------------------------------
# â— å·²ç»å¦ä¼šçš„特技判定
# skill_id : 特技 ID
#--------------------------------------------------------------------------
def skill_learn?(skill_id)
return @skills.include?(skill_id)
end
#--------------------------------------------------------------------------
# â— å¯ä»¥ä½¿ç”¨ç‰¹æŠ€åˆ¤å®š
# skill_id : 特技 ID
#--------------------------------------------------------------------------
def skill_can_use?(skill_id)
if not skill_learn?(skill_id)
return false
end
return super
end
#--------------------------------------------------------------------------
# ◠更改å称
# name : æ–°çš„å称
#--------------------------------------------------------------------------
def name=(name)
@name = name
end
#--------------------------------------------------------------------------
# ◠更改èŒä¸š ID
# class_id : æ–°çš„èŒä¸š ID
#--------------------------------------------------------------------------
def class_id=(class_id)
if $data_classes[class_id] != nil
@class_id = class_id
# é¿å¼€æ— 法装备的物å“
unless equippable?($data_weapons[@weapon_id])
equip(0, 0)
end
unless equippable?($data_armors[@armor1_id])
equip(1, 0)
end
unless equippable?($data_armors[@armor2_id])
equip(2, 0)
end
unless equippable?($data_armors[@armor3_id])
equip(3, 0)
end
unless equippable?($data_armors[@armor4_id])
equip(4, 0)
end
end
end
#--------------------------------------------------------------------------
# ◠更改图形
# character_name : 新的角色 文件å
# character_hue : 新的角色 色相
# battler_name : 新的战斗者 文件å
# battler_hue : 新的战斗者 色相
#--------------------------------------------------------------------------
def set_graphic(character_name, character_hue, battler_name, battler_hue)
@character_name = character_name
@character_hue = character_hue
@battler_name = battler_name
@battler_hue = battler_hue
end
#--------------------------------------------------------------------------
# â— å–得战斗画é¢çš„ X åæ ‡
#--------------------------------------------------------------------------
def screen_x
# 返回计算åŽçš„é˜Ÿä¼ X åæ ‡çš„æŽ’åˆ—é¡ºåº
if self.index != nil
return self.index * 160 + 80
else
return 0
end
end
#--------------------------------------------------------------------------
# â— å–得战斗画é¢çš„ Y åæ ‡
#--------------------------------------------------------------------------
def screen_y
return 464
end
#--------------------------------------------------------------------------
# â— å–得战斗画é¢çš„ Z åæ ‡
#--------------------------------------------------------------------------
def screen_z
# 返回计算åŽçš„é˜Ÿä¼ Z åæ ‡çš„æŽ’åˆ—é¡ºåº
if self.index != nil
return 4 - self.index
else
return 0
end
end
end[/spoiler]
[spoiler]#==============================================================================
# ■Scene_Battle (分割定义 3)
#------------------------------------------------------------------------------
#  处ç†æˆ˜æ–—ç”»é¢çš„类。
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ◠开始角色命令回åˆ
#--------------------------------------------------------------------------
def start_phase3
# è½¬ç§»åˆ°å›žåˆ 3
@phase = 3
# 设置觉得为éžé€‰æ‹©çŠ¶æ€
@actor_index = -1
@active_battler = nil
# 输入下一个角色的命令
phase3_next_actor
end
#--------------------------------------------------------------------------
# ◠转到输入下一个角色的命令
#--------------------------------------------------------------------------
def phase3_next_actor
# 循环
begin
# 角色的明ç效果 OFF
if @active_battler != nil
@active_battler.blink = false
end
# 最åŽçš„角色的情况
if @actor_index == $game_party.actors.size-1
# 开始主回åˆ
start_phase4
return
end
# 推进角色索引
@actor_index += 1
@active_battler = $game_party.actors[@actor_index]
@active_battler.blink = true
# å¦‚æžœè§’è‰²æ˜¯åœ¨æ— æ³•æŽ¥å—指令的状æ€å°±å†è¯•
end until @active_battler.inputable?
# 设置角色的命令窗å£
phase3_setup_command_window
end
#--------------------------------------------------------------------------
# ◠转å‘å‰ä¸€ä¸ªè§’色的命令输入
#--------------------------------------------------------------------------
def phase3_prior_actor
# 循环
begin
# 角色的明ç效果 OFF
if @active_battler != nil
@active_battler.blink = false
end
# 最åˆçš„角色的情况下
if @actor_index == 0
# 开始åŒä¼´æŒ‡ä»¤å›žåˆ
start_phase2
return
end
# 返回角色索引
@actor_index -= 1
@active_battler = $game_party.actors[@actor_index]
@active_battler.blink = true
# å¦‚æžœè§’è‰²æ˜¯åœ¨æ— æ³•æŽ¥å—指令的状æ€å°±å†è¯•
end until @active_battler.inputable?
# 设置角色的命令窗å£
phase3_setup_command_window
end
#--------------------------------------------------------------------------
# ◠设置角色指令窗å£
#--------------------------------------------------------------------------
def phase3_setup_command_window
# åŒä¼´æŒ‡ä»¤çª—å£æ— 效化
@party_command_window.active = false
@party_command_window.visible = false
# 角色指令窗å£æ— 效化
@actor_command_window.active = true
@actor_command_window.visible = true
# 设置角色指令窗å£çš„ä½ç½®
@kjj.dispose if @kjj != nil
@kjj = Window_Skill_s.new(@active_battler)
@kjj.y = 0
@kjj.z += 5
@actor_command_window.x = @actor_index * 160
# 设置索引为 0
@actor_command_window.index = 0
end
#--------------------------------------------------------------------------
# â— åˆ·æ–°ç”»é¢ (角色命令回åˆ)
#--------------------------------------------------------------------------
def update_phase3
# æ•Œäººå…‰æ ‡æœ‰æ•ˆçš„æƒ…å†µä¸‹
if @enemy_arrow != nil
update_phase3_enemy_select
# è§’è‰²å…‰æ ‡æœ‰æ•ˆçš„æƒ…å†µä¸‹
elsif @actor_arrow != nil
update_phase3_actor_select
# 特技窗å£æœ‰æ•ˆçš„情况下
elsif @skill_window != nil
update_phase3_skill_select
# 物å“窗å£æœ‰æ•ˆçš„情况下
elsif @item_window != nil
update_phase3_item_select
# 角色指令窗å£æœ‰æ•ˆçš„情况下
elsif @actor_command_window.active
update_phase3_basic_command
end
end
#--------------------------------------------------------------------------
# â— åˆ·æ–°ç”»é¢ (è§’è‰²å‘½ä»¤å›žåˆ : 基本命令)
#--------------------------------------------------------------------------
def update_phase3_basic_command
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# æ¼”å¥å–消 SE
$game_system.se_play($data_system.cancel_se)
# 转å‘å‰ä¸€ä¸ªè§’色的指令输入
phase3_prior_actor
return
end
########################################################################
if @active_battler != nil and @active_battler.skill_s[0] != "" and Kboard.trigger?($R_Key_1) and @active_battler.sp >= $data_skills[@active_battler.skill_s[0]].sp_cost
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 1
@skill = $data_skills[@active_battler.skill_s[0]]
@active_battler.current_action.skill_id = @skill.id
if @skill.scope == 1
# 开始选择敌人
start_enemy_select
# 效果范围是我方å•ä½“的情况下
elsif @skill.scope == 3 or @skill.scope == 5
# 开始选择角色
start_actor_select
# 效果范围ä¸æ˜¯å•ä½“的情况下
else
# 选择特技结æŸ
end_skill_select
# 转到下一ä½è§’色的指令输入
phase3_next_actor
end
end
if @active_battler != nil and @active_battler.skill_s[1] != "" and Kboard.trigger?($R_Key_2) and @active_battler.sp >= $data_skills[@active_battler.skill_s[1]].sp_cost
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 1
@skill = $data_skills[@active_battler.skill_s[1]]
@active_battler.current_action.skill_id = @skill.id
if @skill.scope == 1
# 开始选择敌人
start_enemy_select
# 效果范围是我方å•ä½“的情况下
elsif @skill.scope == 3 or @skill.scope == 5
# 开始选择角色
start_actor_select
# 效果范围ä¸æ˜¯å•ä½“的情况下
else
# 选择特技结æŸ
end_skill_select
# 转到下一ä½è§’色的指令输入
phase3_next_actor
end
end
if @active_battler != nil and @active_battler.skill_s[2] != "" and Kboard.trigger?($R_Key_3) and @active_battler.sp >= $data_skills[@active_battler.skill_s[2]].sp_cost
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 1
@skill = $data_skills[@active_battler.skill_s[2]]
@active_battler.current_action.skill_id = @skill.id
if @skill.scope == 1
# 开始选择敌人
start_enemy_select
# 效果范围是我方å•ä½“的情况下
elsif @skill.scope == 3 or @skill.scope == 5
# 开始选择角色
start_actor_select
# 效果范围ä¸æ˜¯å•ä½“的情况下
else
# 选择特技结æŸ
end_skill_select
# 转到下一ä½è§’色的指令输入
phase3_next_actor
end
end
if @active_battler != nil and @active_battler.skill_s[3] != "" and Kboard.trigger?($R_Key_4) and @active_battler.sp >= $data_skills[@active_battler.skill_s[3]].sp_cost
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 1
@skill = $data_skills[@active_battler.skill_s[3]]
@active_battler.current_action.skill_id = @skill.id
if @skill.scope == 1
# 开始选择敌人
start_enemy_select
# 效果范围是我方å•ä½“的情况下
elsif @skill.scope == 3 or @skill.scope == 5
# 开始选择角色
start_actor_select
# 效果范围ä¸æ˜¯å•ä½“的情况下
else
# 选择特技结æŸ
end_skill_select
# 转到下一ä½è§’色的指令输入
phase3_next_actor
end
end
if @active_battler != nil and @active_battler.skill_s[4] != "" and Kboard.trigger?($R_Key_5) and @active_battler.sp >= $data_skills[@active_battler.skill_s[4]].sp_cost
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 1
@skill = $data_skills[@active_battler.skill_s[4]]
@active_battler.current_action.skill_id = @skill.id
if @skill.scope == 1
# 开始选择敌人
start_enemy_select
# 效果范围是我方å•ä½“的情况下
elsif @skill.scope == 3 or @skill.scope == 5
# 开始选择角色
start_actor_select
# 效果范围ä¸æ˜¯å•ä½“的情况下
else
# 选择特技结æŸ
end_skill_select
# 转到下一ä½è§’色的指令输入
phase3_next_actor
end
end
if @active_battler != nil and @active_battler.skill_s[5] != "" and Kboard.trigger?($R_Key_6) and @active_battler.sp >= $data_skills[@active_battler.skill_s[5]].sp_cost
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 1
@skill = $data_skills[@active_battler.skill_s[5]]
@active_battler.current_action.skill_id = @skill.id
if @skill.scope == 1
# 开始选择敌人
start_enemy_select
# 效果范围是我方å•ä½“的情况下
elsif @skill.scope == 3 or @skill.scope == 5
# 开始选择角色
start_actor_select
# 效果范围ä¸æ˜¯å•ä½“的情况下
else
# 选择特技结æŸ
end_skill_select
# 转到下一ä½è§’色的指令输入
phase3_next_actor
end
end
if @active_battler != nil and @active_battler.skill_s[6] != "" and Kboard.trigger?($R_Key_7) and @active_battler.sp >= $data_skills[@active_battler.skill_s[6]].sp_cost
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 1
@skill = $data_skills[@active_battler.skill_s[6]]
@active_battler.current_action.skill_id = @skill.id
if @skill.scope == 1
# 开始选择敌人
start_enemy_select
# 效果范围是我方å•ä½“的情况下
elsif @skill.scope == 3 or @skill.scope == 5
# 开始选择角色
start_actor_select
# 效果范围ä¸æ˜¯å•ä½“的情况下
else
# 选择特技结æŸ
end_skill_select
# 转到下一ä½è§’色的指令输入
phase3_next_actor
end
end
if @active_battler != nil and @active_battler.skill_s[7] != "" and Kboard.trigger?($R_Key_8) and @active_battler.sp >= $data_skills[@active_battler.skill_s[7]].sp_cost
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 1
@skill = $data_skills[@active_battler.skill_s[7]]
@active_battler.current_action.skill_id = @skill.id
if @skill.scope == 1
# 开始选择敌人
start_enemy_select
# 效果范围是我方å•ä½“的情况下
elsif @skill.scope == 3 or @skill.scope == 5
# 开始选择角色
start_actor_select
# 效果范围ä¸æ˜¯å•ä½“的情况下
else
# 选择特技结æŸ
end_skill_select
# 转到下一ä½è§’色的指令输入
phase3_next_actor
end
end
if @active_battler != nil and @active_battler.skill_s[8] != "" and Kboard.trigger?($R_Key_9) and @active_battler.sp >= $data_skills[@active_battler.skill_s[8]].sp_cost
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 1
@skill = $data_skills[@active_battler.skill_s[8]]
@active_battler.current_action.skill_id = @skill.id
if @skill.scope == 1
# 开始选择敌人
start_enemy_select
# 效果范围是我方å•ä½“的情况下
elsif @skill.scope == 3 or @skill.scope == 5
# 开始选择角色
start_actor_select
# 效果范围ä¸æ˜¯å•ä½“的情况下
else
# 选择特技结æŸ
end_skill_select
# 转到下一ä½è§’色的指令输入
phase3_next_actor
end
end
if @active_battler != nil and @active_battler.skill_s[9] != "" and Kboard.trigger?($R_Key_0) and @active_battler.sp >= $data_skills[@active_battler.skill_s[9]].sp_cost
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 1
@skill = $data_skills[@active_battler.skill_s[9]]
@active_battler.current_action.skill_id = @skill.id
if @skill.scope == 1
# 开始选择敌人
start_enemy_select
# 效果范围是我方å•ä½“的情况下
elsif @skill.scope == 3 or @skill.scope == 5
# 开始选择角色
start_actor_select
# 效果范围ä¸æ˜¯å•ä½“的情况下
else
# 选择特技结æŸ
end_skill_select
# 转到下一ä½è§’色的指令输入
phase3_next_actor
end
end
#####################################################################
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 角色指令窗å£å…‰æ ‡ä½ç½®åˆ†ä¹‹
case @actor_command_window.index
when 0 # 攻击
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 0
@active_battler.current_action.basic = 0
# 开始选择敌人
start_enemy_select
when 1 # 特技
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 1
# 开始选择特技
start_skill_select
when 2 # 防御
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 0
@active_battler.current_action.basic = 1
# 转å‘下一ä½è§’色的指令输入
phase3_next_actor
when 3 # 物å“
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.kind = 2
# 开始选择物å“
start_item_select
end
return
end
end
#--------------------------------------------------------------------------
# â— åˆ·æ–°ç”»é¢ (è§’è‰²å‘½ä»¤å›žåˆ : 选择特技)
#--------------------------------------------------------------------------
def update_phase3_skill_select
# 设置特技窗å£ä¸ºå¯è§†çŠ¶æ€
@skill_window.visible = true
# 刷新特技窗å£
@skill_window.update
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# æ¼”å¥å–消 SE
$game_system.se_play($data_system.cancel_se)
# 结æŸç‰¹æŠ€é€‰æ‹©
end_skill_select
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 获å–特技选择窗å£çŽ°åœ¨é€‰æ‹©çš„特技的数æ®
@skill = @skill_window.skill
# æ— æ³•ä½¿ç”¨çš„æƒ…å†µä¸‹
if @skill == nil or not @active_battler.skill_can_use?(@skill.id)
# æ¼”å¥å†»ç»“ SE
$game_system.se_play($data_system.buzzer_se)
return
end
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.skill_id = @skill.id
# 设置特技窗å£ä¸ºä¸å¯è§çŠ¶æ€
@skill_window.visible = false
# 效果范围是敌å•ä½“的情况下
if @skill.scope == 1
# 开始选择敌人
start_enemy_select
# 效果范围是我方å•ä½“的情况下
elsif @skill.scope == 3 or @skill.scope == 5
# 开始选择角色
start_actor_select
# 效果范围ä¸æ˜¯å•ä½“的情况下
else
# 选择特技结æŸ
end_skill_select
# 转到下一ä½è§’色的指令输入
phase3_next_actor
end
return
end
end
#--------------------------------------------------------------------------
# â— åˆ·æ–°ç”»é¢ (è§’è‰²å‘½ä»¤å›žåˆ : 选择物å“)
#--------------------------------------------------------------------------
def update_phase3_item_select
# 设置物å“窗å£ä¸ºå¯è§†çŠ¶æ€
@item_window.visible = true
# 刷新物å“窗å£
@item_window.update
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# æ¼”å¥å–消 SE
$game_system.se_play($data_system.cancel_se)
# 选择物å“结æŸ
end_item_select
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# 获å–物å“窗å£çŽ°åœ¨é€‰æ‹©çš„物å“资料
@item = @item_window.item
# æ— æ³•ä½¿ç”¨çš„æƒ…å†µä¸‹
unless $game_party.item_can_use?(@item.id)
# æ¼”å¥å†»ç»“ SE
$game_system.se_play($data_system.buzzer_se)
return
end
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.item_id = @item.id
# 设置物å“窗å£ä¸ºä¸å¯è§çŠ¶æ€
@item_window.visible = false
# 效果范围是敌å•ä½“的情况下
if @item.scope == 1
# 开始选择敌人
start_enemy_select
# 效果范围是我方å•ä½“的情况下
elsif @item.scope == 3 or @item.scope == 5
# 开始选择角色
start_actor_select
# 效果范围ä¸æ˜¯å•ä½“的情况下
else
# 物å“选择结æŸ
end_item_select
# 转到下一ä½è§’色的指令输入
phase3_next_actor
end
return
end
end
#--------------------------------------------------------------------------
# ◠刷新画é¢ç”»é¢ (è§’è‰²å‘½ä»¤å›žåˆ : 选择敌人)
#--------------------------------------------------------------------------
def update_phase3_enemy_select
# 刷新敌人ç®å¤´
@enemy_arrow.update
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# æ¼”å¥å–消 SE
$game_system.se_play($data_system.cancel_se)
# 选择敌人结æŸ
end_enemy_select
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.target_index = @enemy_arrow.index
# 选择敌人结æŸ
end_enemy_select
# 显示特技窗å£ä¸çš„情况下
if @skill_window != nil
# 结æŸç‰¹æŠ€é€‰æ‹©
end_skill_select
end
# 显示物å“窗å£çš„情况下
if @item_window != nil
# 结æŸç‰©å“选择
end_item_select
end
# 转到下一ä½è§’色的指令输入
phase3_next_actor
end
end
#--------------------------------------------------------------------------
# â— ç”»é¢æ›´æ–° (è§’è‰²æŒ‡ä»¤å›žåˆ : 选择角色)
#--------------------------------------------------------------------------
def update_phase3_actor_select
# 刷新角色ç®å¤´
@actor_arrow.update
# 按下 B 键的情况下
if Input.trigger?(Input::B)
# æ¼”å¥å–消 SE
$game_system.se_play($data_system.cancel_se)
# 选择角色结æŸ
end_actor_select
return
end
# 按下 C 键的情况下
if Input.trigger?(Input::C)
# æ¼”å¥ç¡®å®š SE
$game_system.se_play($data_system.decision_se)
# 设置行动
@active_battler.current_action.target_index = @actor_arrow.index
# 选择角色结æŸ
end_actor_select
# 显示特技窗å£ä¸çš„情况下
if @skill_window != nil
# 结æŸç‰¹æŠ€é€‰æ‹©
end_skill_select
end
# 显示物å“窗å£çš„情况下
if @item_window != nil
# 结æŸç‰©å“选择
end_item_select
end
# 转到下一ä½è§’色的指令输入
phase3_next_actor
end
end
#--------------------------------------------------------------------------
# ◠开始选择敌人
#--------------------------------------------------------------------------
def start_enemy_select
@kjj.visible=false
# 生æˆæ•Œäººç®å¤´
@enemy_arrow = Arrow_Enemy.new(@spriteset.viewport1)
# å…³è”帮助窗å£
@enemy_arrow.help_window = @help_window
# æ— æ•ˆåŒ–è§’è‰²æŒ‡ä»¤çª—å£
@actor_command_window.active = false
@actor_command_window.visible = false
end
#--------------------------------------------------------------------------
# ◠结æŸé€‰æ‹©æ•Œäºº
#--------------------------------------------------------------------------
def end_enemy_select
@kjj.visible=true
# 释放敌人ç®å¤´
@enemy_arrow.dispose
@enemy_arrow = nil
# 指令为 [战斗] 的情况下
if @actor_command_window.index == 0
# 有效化角色指令窗å£
@actor_command_window.active = true
@actor_command_window.visible = true
# éšè—帮助窗å£
@help_window.visible = false
end
end
#--------------------------------------------------------------------------
# ◠开始选择角色
#--------------------------------------------------------------------------
def start_actor_select
@kjj.visible=false
# 生æˆè§’色ç®å¤´
@actor_arrow = Arrow_Actor.new(@spriteset.viewport2)
@actor_arrow.index = @actor_index
# å…³è”帮助窗å£
@actor_arrow.help_window = @help_window
# æ— æ•ˆåŒ–è§’è‰²æŒ‡ä»¤çª—å£
@actor_command_window.active = false
@actor_command_window.visible = false
end
#--------------------------------------------------------------------------
# ◠结æŸé€‰æ‹©è§’色
#--------------------------------------------------------------------------
def end_actor_select
@kjj.visible=true
# 释放角色ç®å¤´
@actor_arrow.dispose
@actor_arrow = nil
end
#--------------------------------------------------------------------------
# ◠开始选择特技
#--------------------------------------------------------------------------
def start_skill_select
@kjj.visible=false
# 生æˆç‰¹æŠ€çª—å£
@skill_window = Window_Skill.new(@active_battler)
# å…³è”帮助窗å£
@skill_window.help_window = @help_window
# æ— æ•ˆåŒ–è§’è‰²æŒ‡ä»¤çª—å£
@actor_command_window.active = false
@actor_command_window.visible = false
end
#--------------------------------------------------------------------------
# ◠选择特技结æŸ
#--------------------------------------------------------------------------
def end_skill_select
@kjj.visible=true
# 释放特技窗å£
@skill_window.dispose if @skill_window != nil
@skill_window = nil
# éšè—帮助窗å£
@help_window.visible = false
# 有效化角色指令窗å£
@actor_command_window.active = true
@actor_command_window.visible = true
end
#--------------------------------------------------------------------------
# ◠开始选择物å“
#--------------------------------------------------------------------------
def start_item_select
@kjj.visible=false
# 生æˆç‰©å“窗å£
@item_window = Window_Item.new
# å…³è”帮助窗å£
@item_window.help_window = @help_window
# æ— æ•ˆåŒ–è§’è‰²æŒ‡ä»¤çª—å£
@actor_command_window.active = false
@actor_command_window.visible = false
end
#--------------------------------------------------------------------------
# ◠结æŸé€‰æ‹©ç‰©å“
#--------------------------------------------------------------------------
def end_item_select
@kjj.visible=true
# 释放物å“窗å£
@item_window.dispose if @item_window != nil
@item_window = nil
# éšè—帮助窗å£
@help_window.visible = false
# 有效化角色指令窗å£
@actor_command_window.active = true
@actor_command_window.visible = true
end
end[/spoiler]
[spoiler]class Window_Skill_s < Window_Selectable
#--------------------------------------------------------------------------
# â— åˆå§‹åŒ–对åƒ
#--------------------------------------------------------------------------
def initialize(actor)
@actor = actor
super(0, 480-96, 640, 96)
self.contents = Bitmap.new(width - 32, height - 32)
@item_max = 10
@column_max = 10
@commands = ["1","2","3","4","5","6","7","8","9","0"]
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# ◠刷新
#--------------------------------------------------------------------------
def refresh
self.contents.clear
for i in 0...@item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
# â— æ绘项目
# index : 项目编å·
#--------------------------------------------------------------------------
def draw_item(index)
x = index*60+30#4 + index * 160
self.contents.font.size = 18
self.contents.draw_text(x-25, 0, 32, 32, @commands[index])
if @actor.skill_s[index] != ""
bitmap = RPG::Cache.icon($data_skills[@actor.skill_s[index]].icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x-10, 8, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x-63, 32, 128, 32, $data_skills[@actor.skill_s[index]].name,1)
end
end
#--------------------------------------------------------------------------
# â— åˆ·æ–°å…‰æ ‡çŸ©å½¢
#--------------------------------------------------------------------------
def update_cursor_rect
if @index < 0
self.cursor_rect.empty
else
if $game_temp.in_battle
self.cursor_rect.empty
else
self.cursor_rect.set(@index*60, 0, 64, 64)
end
end
end
end[/spoiler]
[spoiler]class Skill_s
def initialize(n=0)
@actor = $game_party.actors[n]
end
def main
@help_window = Window_Help.new
@skill_window = Window_Skill.new(@actor)
@skill_window.help_window = @help_window
@skill_window.active=false
@skill_window.index=-1
@kjj = Window_Skill_s.new(@actor)
# 执行过渡
Graphics.transition
# 主循环
loop do
# 刷新游æˆç”»é¢
Graphics.update
# 刷新输入情报
Input.update
# 刷新画é¢
update
# 如果画é¢åˆ‡æ¢çš„è¯å°±ä¸æ–循环
if $scene != self
break
end
end
# 准备过渡
Graphics.freeze
# 释放窗å£
@kjj.dispose
@skill_window.dispose
@help_window.dispose
end
def update
@kjj.update
@skill_window.update
@help_window.update
# 按下 B 键的情况下
if @kjj.active and Input.trigger?(Input::B)
# æ¼”å¥å–消 SE
$game_system.se_play($data_system.cancel_se)
# 切æ¢çš„地图画é¢
$scene = Scene_Map.new
return
end
if @skill_window.active
skill_window_update
end
if @kjj.active
kjj_update
end
end
def kjj_update
# 按下 B 键的情况下
#if Input.tr