赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 4 |
经验 | 1565 |
最后登录 | 2022-10-20 |
在线时间 | 61 小时 |
Lv2.观梦者
- 梦石
- 0
- 星屑
- 374
- 在线时间
- 61 小时
- 注册时间
- 2009-9-4
- 帖子
- 32
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
我在游戏中使用了某前辈发的七属性变身公共事件,
然后又使用了另一位前辈发的新战斗界面与菜单界面后出现的问题。。。
原本在战斗结束后应该会调用公共事件以达到修改战斗图与装备技能还原的效果,
使用了新战斗界面脚本后,我照着说明在脚本里插进了调用公共事件的指令后并没有效果,请大家看看是怎么回事。
超完美七属性(龙战士)变身系统--事件版教学
原帖地址:http://www.66rpg.com/articles/4731
RMXP 游戏界面以及战斗界面系统
原帖地址:http://www.66rpg.com/articles/4954
原帖里是这样说的:
现在把脚本(Scene_Battle 2里)动一点点的手脚。
(1)在$game_system.se_play($data_system.escape_se)前 (逃跑時的播放SE前)
(2)在@status_window.refresh后 (结束战斗回合)
添加以下命令句:
$game_temp.common_event_id = 32 #调用刚刚设置初始化设置所属的公共事件ID(這里是32)
@wait_count = 1
(若是采用RTAB系统的人只要找到相对位置即可)
我的修改是这样的:- #==============================================================================
- # ■ Game_Actor
- #------------------------------------------------------------------------------
- # 处理角色的类。本类在 Game_Actors 类 ($game_actors)
- # 的内部使用、Game_Party 类请参考 ($game_party) 。
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ● 取得战斗画面的 X 坐标
- #--------------------------------------------------------------------------
- def screen_x
- case self.index
- when 0
- return 500
- when 1
- return 450
- when 2
- return 500
- when 3
- return 450
- else
- return 600
- end
- end
- #--------------------------------------------------------------------------
- # ● 取得战斗画面的 Y 坐标
- #--------------------------------------------------------------------------
- def screen_y
- case self.index
- when 0
- return 360
- when 1
- return 300
- when 2
- return 240
- when 3
- return 180
- else
- return 1000
- end
- end
- #--------------------------------------------------------------------------
- # ● 取得战斗画面的 Z 坐标
- #--------------------------------------------------------------------------
- def screen_z
- case self.index
- when 0
- return 10
- when 1
- return 9
- when 2
- return 8
- when 3
- return 7
- else
- return 0
- end
- end
- end
- #==============================================================================
- # ■ Window_BattleStatus
- #------------------------------------------------------------------------------
- # 显示战斗画面同伴状态的窗口。
- #==============================================================================
- class Window_BattleStatus < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(0, 320, 640, 160)
- self.opacity = 0
- self.contents = Bitmap.new(width - 32, height - 32)
- @level_up_flags = [false, false, false, false]
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 释放
- #--------------------------------------------------------------------------
- def dispose
- super
- end
- #--------------------------------------------------------------------------
- # ● 设置升级标志
- # actor_index : 角色索引
- #--------------------------------------------------------------------------
- def level_up(actor_index)
- @level_up_flags[actor_index] = true
- end
-
- def draw_actor_face(actor,x,y)
- bitmap = RPG::Cache.battler(actor.name + "_C" , actor.battler_hue)
- self.contents.blt(x,y,bitmap,Rect.new(0,0,bitmap.width,bitmap.height ))
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- @item_max = $game_party.actors.size
- for i in 0...$game_party.actors.size
- actor = $game_party.actors[i]
- actor_x = i * 160 + 4
- self.contents.font.size = 20
- draw_actor_face(actor,actor_x,0)
- draw_actor_name(actor, actor_x, 0)
- draw_actor_hp(actor, actor_x, 64, 120)
- draw_actor_sp(actor, actor_x, 80, 120)
- if @level_up_flags[i]
- self.contents.font.color = normal_color
- self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
- else
- self.contents.font.size = 16
- draw_actor_state(actor, actor_x, 96)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- super
- # 主界面的不透明度下降
- if $game_temp.battle_main_phase
- self.contents_opacity -= 4 if self.contents_opacity > 191
- else
- self.contents_opacity += 4 if self.contents_opacity < 255
- end
- end
- end
- #==============================================================================
- # ■ Window_BattleResult
- #------------------------------------------------------------------------------
- # 战斗结束时、显示获得的 EXP 及金钱的窗口。
- #==============================================================================
- class Window_BattleResult < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # exp : EXP
- # gold : 金钱
- # treasures : 宝物
- #--------------------------------------------------------------------------
- def initialize(exp, gold, treasures)
- [url=home.php?mod=space&uid=13302]@exp[/url] = exp
- [url=home.php?mod=space&uid=236945]@gold[/url] = gold
- @treasures = treasures
- super(160, 0, 320, @treasures.size * 32 + 64)
- self.z = 999
- self.contents = Bitmap.new(width - 32, height - 32)
- self.y = 160 - height / 2
- self.back_opacity = 160
- self.visible = false
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- x = 4
- self.contents.font.color = normal_color
- cx = contents.text_size(@exp.to_s).width
- self.contents.draw_text(x, 0, cx, 32, @exp.to_s)
- x += cx + 4
- self.contents.font.color = system_color
- cx = contents.text_size("EXP").width
- self.contents.draw_text(x, 0, 64, 32, "EXP")
- x += cx + 16
- self.contents.font.color = normal_color
- cx = contents.text_size(@gold.to_s).width
- self.contents.draw_text(x, 0, cx, 32, @gold.to_s)
- x += cx + 4
- self.contents.font.color = system_color
- self.contents.draw_text(x, 0, 128, 32, $data_system.words.gold)
- y = 32
- for item in @treasures
- draw_item_name(item, 4, y)
- y += 32
- end
- end
- end
- #==============================================================================
- # ■ Spriteset_Battle
- #------------------------------------------------------------------------------
- # 处理战斗画面的活动块的类。本类在 Scene_Battle 类
- # 的内部使用。
- #==============================================================================
- class Spriteset_Battle
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_reader :viewport1 # 敌人方的显示端口
- attr_reader :viewport2 # 角色方的显示端口
- #--------------------------------------------------------------------------
- # ● 初始化变量
- #--------------------------------------------------------------------------
- def initialize
- # 生成显示端口
- @viewport1 = Viewport.new(0, 0, 640, 480)
- @viewport2 = Viewport.new(0, 0, 640, 480)
- @viewport3 = Viewport.new(0, 0, 640, 480)
- @viewport4 = Viewport.new(0, 0, 640, 480)
- @viewport2.z = 101
- @viewport3.z = 200
- @viewport4.z = 5000
- # 生成战斗背景活动块
- @battleback_sprite = Sprite.new(@viewport1)
- # 生成敌人活动块
- @enemy_sprites = []
- for enemy in $game_troop.enemies.reverse
- @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
- end
- # 生成敌人活动块
- @actor_sprites = []
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- # 生成天候
- @weather = RPG::Weather.new(@viewport1)
- # 生成图片活动块
- @picture_sprites = []
- for i in 51..100
- @picture_sprites.push(Sprite_Picture.new(@viewport3,
- $game_screen.pictures[i]))
- end
- # 生成计时器块
- @timer_sprite = Sprite_Timer.new
- # 刷新画面
- update
- end
- #--------------------------------------------------------------------------
- # ● 释放
- #--------------------------------------------------------------------------
- def dispose
- # 如果战斗背景位图存在的情况下就释放
- if @battleback_sprite.bitmap != nil
- @battleback_sprite.bitmap.dispose
- end
- # 释放战斗背景活动块
- @battleback_sprite.dispose
- # 释放敌人活动块、角色活动块
- for sprite in @enemy_sprites + @actor_sprites
- sprite.dispose
- end
- # 释放天候
- @weather.dispose
- # 释放图片活动块
- for sprite in @picture_sprites
- sprite.dispose
- end
- # 释放计时器活动块
- @timer_sprite.dispose
- # 释放显示端口
- @viewport1.dispose
- @viewport2.dispose
- @viewport3.dispose
- @viewport4.dispose
- end
- #--------------------------------------------------------------------------
- # ● 显示效果中判定
- #--------------------------------------------------------------------------
- def effect?
- # 如果是在显示效果中的话就返回 true
- for sprite in @enemy_sprites + @actor_sprites
- return true if sprite.effect?
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- # 刷新角色的活动块 (对应角色的替换)
- @actor_sprites[0].battler = $game_party.actors[0]
- @actor_sprites[1].battler = $game_party.actors[1]
- @actor_sprites[2].battler = $game_party.actors[2]
- @actor_sprites[3].battler = $game_party.actors[3]
- # 战斗背景的文件名与现在情况有差异的情况下
- if @battleback_name != $game_temp.battleback_name
- @battleback_name = $game_temp.battleback_name
- if @battleback_sprite.bitmap != nil
- @battleback_sprite.bitmap.dispose
- end
- @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
- @battleback_sprite.src_rect.set(0, 0, 640, 480)
- end
- # 刷新战斗者的活动块
- for sprite in @enemy_sprites + @actor_sprites
- sprite.update
- end
- # 刷新天气图形
- @weather.type = $game_screen.weather_type
- @weather.max = $game_screen.weather_max
- @weather.update
- # 刷新图片活动块
- for sprite in @picture_sprites
- sprite.update
- end
- # 刷新计时器活动块
- @timer_sprite.update
- # 设置画面的色调与震动位置
- @viewport1.tone = $game_screen.tone
- @viewport1.ox = $game_screen.shake
- # 设置画面的闪烁色
- @viewport4.color = $game_screen.flash_color
- # 刷新显示端口
- @viewport1.update
- @viewport2.update
- @viewport4.update
- end
- end
- #==============================================================================
- # ■ Scene_Battle (分割定义 1)
- #------------------------------------------------------------------------------
- # 处理战斗画面的类。
- #==============================================================================
- class Scene_Battle
- #--------------------------------------------------------------------------
- # ● 主处理
- #--------------------------------------------------------------------------
- def main
- # 初始化战斗用的各种暂时数据
- $game_temp.in_battle = true
- $game_temp.battle_turn = 0
- $game_temp.battle_event_flags.clear
- $game_temp.battle_abort = false
- $game_temp.battle_main_phase = false
- $game_temp.battleback_name = $game_map.battleback_name
- $game_temp.forcing_battler = nil
- # 初始化战斗用事件解释器
- $game_system.battle_interpreter.setup(nil, 0)
- # 准备队伍
- @troop_id = $game_temp.battle_troop_id
- $game_troop.setup(@troop_id)
- # 生成角色命令窗口
- s1 = $data_system.words.attack
- s2 = $data_system.words.skill
- s3 = $data_system.words.guard
- s4 = $data_system.words.item
- s5 = "逃跑"
- @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4, s5])
- # 不能逃跑的情况下
- if $game_temp.battle_can_escape == false
- @actor_command_window.disable_item(4)
- end
- @actor_command_window.y = 160
- @actor_command_window.back_opacity = 160
- @actor_command_window.active = false
- @actor_command_window.visible = false
- # 生成其它窗口
- @party_command_window = Window_PartyCommand.new
- @help_window = Window_Help.new
- @help_window.back_opacity = 160
- @help_window.visible = false
- @status_window = Window_BattleStatus.new
- @message_window = Window_Message.new
- # 生成活动块
- @spriteset = Spriteset_Battle.new
- # 初始化等待计数
- @wait_count = 0
- # 执行过渡
- if $data_system.battle_transition == ""
- Graphics.transition(20)
- else
- Graphics.transition(40, "Graphics/Transitions/" +
- $data_system.battle_transition)
- end
- # 开始自由战斗回合
- start_phase1
- # 主循环
- loop do
- # 刷新游戏画面
- Graphics.update
- # 刷新输入信息
- Input.update
- # 刷新画面
- update
- # 如果画面切换的话就中断循环
- if $scene != self
- break
- end
- end
- # 刷新地图
- $game_map.refresh
- # 准备过渡
- Graphics.freeze
- # 释放窗口
- @actor_command_window.dispose
- @party_command_window.dispose
- @help_window.dispose
- @status_window.dispose
- @message_window.dispose
- if @skill_window != nil
- @skill_window.dispose
- end
- if @item_window != nil
- @item_window.dispose
- end
- if @result_window != nil
- @result_window.dispose
- end
- # 释放活动块
- @spriteset.dispose
- # 标题画面切换中的情况
- if $scene.is_a?(Scene_Title)
- # 淡入淡出画面
- Graphics.transition
- Graphics.freeze
- end
- # 战斗测试或者游戏结束以外的画面切换中的情况
- if $BTEST and not $scene.is_a?(Scene_Gameover)
- $scene = nil
- end
- end
- #--------------------------------------------------------------------------
- # ● 胜负判定
- #--------------------------------------------------------------------------
- def judge
- # 全灭判定是真、并且同伴人数为 0 的情况下
- if $game_party.all_dead? or $game_party.actors.size == 0
- # 允许失败的情况下
- if $game_temp.battle_can_lose
- # 还原为战斗开始前的 BGM
- $game_system.bgm_play($game_temp.map_bgm)
- # 战斗结束
- battle_end(2)
- # 返回 true
- return true
- end
- # 设置游戏结束标志
- $game_temp.gameover = true
- # 返回 true
- return true
- end
- # 如果存在任意 1 个敌人就返回 false
- for enemy in $game_troop.enemies
- if enemy.exist?
- return false
- end
- end
- # 开始结束战斗回合 (胜利)
- start_phase5
- # 返回 true
- return true
- end
- #--------------------------------------------------------------------------
- # ● 战斗结束
- # result : 結果 (0:胜利 1:失败 2:逃跑)
- #--------------------------------------------------------------------------
- def battle_end(result)
- # 清除战斗中标志
- $game_temp.in_battle = false
- # 清除全体同伴的行动
- $game_party.clear_actions
- # 解除战斗用状态
- for actor in $game_party.actors
- actor.remove_states_battle
- end
- # 清除敌人
- $game_troop.enemies.clear
- # 调用战斗返回调用
- if $game_temp.battle_proc != nil
- $game_temp.battle_proc.call(result)
- $game_temp.battle_proc = nil
- end
- # 切换到地图画面
- $scene = Scene_Map.new
- end
- #--------------------------------------------------------------------------
- # ● 设置战斗事件
- #--------------------------------------------------------------------------
- def setup_battle_event
- # 正在执行战斗事件的情况下
- if $game_system.battle_interpreter.running?
- return
- end
- # 搜索全部页的战斗事件
- for index in 0...$data_troops[@troop_id].pages.size
- # 获取事件页
- page = $data_troops[@troop_id].pages[index]
- # 事件条件可以参考 c
- c = page.condition
- # 没有指定任何条件的情况下转到下一页
- unless c.turn_valid or c.enemy_valid or
- c.actor_valid or c.switch_valid
- next
- end
- # 执行完毕的情况下转到下一页
- if $game_temp.battle_event_flags[index]
- next
- end
- # 确认回合条件
- if c.turn_valid
- n = $game_temp.battle_turn
- a = c.turn_a
- b = c.turn_b
- if (b == 0 and n != a) or
- (b > 0 and (n < 1 or n < a or n % b != a % b))
- next
- end
- end
- # 确认敌人条件
- if c.enemy_valid
- enemy = $game_troop.enemies[c.enemy_index]
- if enemy == nil or enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
- next
- end
- end
- # 确认角色条件
- if c.actor_valid
- actor = $game_actors[c.actor_id]
- if actor == nil or actor.hp * 100.0 / actor.maxhp > c.actor_hp
- next
- end
- end
- # 确认开关条件
- if c.switch_valid
- if $game_switches[c.switch_id] == false
- next
- end
- end
- # 设置事件
- $game_system.battle_interpreter.setup(page.list, 0)
- # 本页的范围是 [战斗] 或 [回合] 的情况下
- if page.span <= 1
- # 设置执行结束标志
- $game_temp.battle_event_flags[index] = true
- end
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- # 执行战斗事件中的情况下
- if $game_system.battle_interpreter.running?
- # 刷新解释器
- $game_system.battle_interpreter.update
- # 强制行动的战斗者不存在的情况下
- if $game_temp.forcing_battler == nil
- # 执行战斗事件结束的情况下
- unless $game_system.battle_interpreter.running?
- # 继续战斗的情况下、再执行战斗事件的设置
- unless judge
- setup_battle_event
- end
- end
- # 如果不是结束战斗回合的情况下
- if @phase != 5
- # 刷新状态窗口
- @status_window.refresh
- end
- end
- end
- # 系统 (计时器)、刷新画面
- $game_system.update
- $game_screen.update
- # 计时器为 0 的情况下
- if $game_system.timer_working and $game_system.timer == 0
- # 中断战斗
- $game_temp.battle_abort = true
- end
- # 刷新窗口
- @help_window.update
- @party_command_window.update
- @actor_command_window.update
- @status_window.update
- @message_window.update
- # 刷新活动块
- @spriteset.update
- # 处理过渡中的情况下
- if $game_temp.transition_processing
- # 清除处理过渡中标志
- $game_temp.transition_processing = false
- # 执行过渡
- if $game_temp.transition_name == ""
- Graphics.transition(20)
- else
- Graphics.transition(40, "Graphics/Transitions/" +
- $game_temp.transition_name)
- end
- end
- # 显示信息窗口中的情况下
- if $game_temp.message_window_showing
- return
- end
- # 显示效果中的情况下
- if @spriteset.effect?
- return
- end
- # 游戏结束的情况下
- if $game_temp.gameover
- # 切换到游戏结束画面
- $scene = Scene_Gameover.new
- return
- end
- # 返回标题画面的情况下
- if $game_temp.to_title
- # 切换到标题画面
- $scene = Scene_Title.new
- return
- end
- # 中断战斗的情况下
- if $game_temp.battle_abort
- # 还原为战斗前的 BGM
- $game_system.bgm_play($game_temp.map_bgm)
- # 战斗结束
- battle_end(1)
- return
- end
- # 等待中的情况下
- if @wait_count > 0
- # 减少等待计数
- @wait_count -= 1
- return
- end
- # 强制行动的角色存在、
- # 并且战斗事件正在执行的情况下
- if $game_temp.forcing_battler == nil and
- $game_system.battle_interpreter.running?
- return
- end
- # 回合分支
- case @phase
- when 1 # 自由战斗回合
- update_phase1
- when 2 # 同伴命令回合
- update_phase2
- when 3 # 角色命令回合
- update_phase3
- when 4 # 主回合
- update_phase4
- when 5 # 战斗结束回合
- update_phase5
- end
- end
- end
- #==============================================================================
- # ■ Scene_Battle (分割定义 2)
- #------------------------------------------------------------------------------
- # 处理战斗画面的类。
- #==============================================================================
- class Scene_Battle
- #--------------------------------------------------------------------------
- # ● 开始自由战斗回合
- #--------------------------------------------------------------------------
- def start_phase1
- # 转移到回合 1
- @phase = 1
- # 清除全体同伴的行动
- $game_party.clear_actions
- # 设置战斗事件
- setup_battle_event
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面 (自由战斗回合)
- #--------------------------------------------------------------------------
- def update_phase1
- # 胜败判定
- if judge
- # 胜利或者失败的情况下 : 过程结束
- return
- end
- # 开始同伴命令回合
- start_phase2
- end
- #--------------------------------------------------------------------------
- # ● 开始同伴命令回合
- #--------------------------------------------------------------------------
- def start_phase2
- # 转移到回合 2
- @phase = 2
- # 设置角色为非选择状态
- @actor_index = -1
- @active_battler = nil
- # 有效化同伴指令窗口
- #@party_command_window.active = true
- #@party_command_window.visible = true
- # 无效化角色指令窗口
- @actor_command_window.active = false
- @actor_command_window.visible = false
- # 清除主回合标志
- $game_temp.battle_main_phase = false
- # 清除全体同伴的行动
- $game_party.clear_actions
- # 不能输入命令的情况下
- unless $game_party.inputable?
- # 开始主回合
- start_phase4
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面 (同伴命令回合)
- #--------------------------------------------------------------------------
- def update_phase2
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 开始角色的命令回合
- start_phase3
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 同伴指令窗口光标位置分支
- case @party_command_window.index
- when 0 # 战斗
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 开始角色的命令回合
- start_phase3
- when 1 # 逃跑
- # 不能逃跑的情况下
- if $game_temp.battle_can_escape == false
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 逃走处理
- update_phase2_escape
- end
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● 画面更新 (同伴指令回合 : 逃跑)
- #--------------------------------------------------------------------------
- def update_phase2_escape
- # 计算敌人速度的平均值
- enemies_agi = 0
- enemies_number = 0
- for enemy in $game_troop.enemies
- if enemy.exist?
- enemies_agi += enemy.agi
- enemies_number += 1
- end
- end
- if enemies_number > 0
- enemies_agi /= enemies_number
- end
- # 计算角色速度的平均值
- actors_agi = 0
- actors_number = 0
- for actor in $game_party.actors
- if actor.exist?
- actors_agi += actor.agi
- actors_number += 1
- end
- end
- if actors_number > 0
- actors_agi /= actors_number
- end
- # 逃跑成功判定
- success = rand(100) < 50 * actors_agi / enemies_agi
- # 成功逃跑的情况下
- if success
- #######################################################★
- $game_temp.common_event_id = 32
- @wait_count = 1
- #######################################################★
- # 演奏逃跑 SE
- $game_system.se_play($data_system.escape_se)
- # 还原为战斗开始前的 BGM
- $game_system.bgm_play($game_temp.map_bgm)
- # 战斗结束
- battle_end(1)
- # 逃跑失败的情况下
- else
- # 清除全体同伴的行动
- $game_party.clear_actions
- # 开始主回合
- start_phase4
- end
- end
- #--------------------------------------------------------------------------
- # ● 开始结束战斗回合
- #--------------------------------------------------------------------------
- def start_phase5
- # 转移到回合 5
- @phase = 5
- # 演奏战斗结束 ME
- $game_system.me_play($game_system.battle_end_me)
- # 还原为战斗开始前的 BGM
- $game_system.bgm_play($game_temp.map_bgm)
- # 初始化 EXP、金钱、宝物
- exp = 0
- gold = 0
- treasures = []
- # 循环
- for enemy in $game_troop.enemies
- # 敌人不是隐藏状态的情况下
- unless enemy.hidden
- # 获得 EXP、增加金钱
- exp += enemy.exp
- gold += enemy.gold
- # 出现宝物判定
- if rand(100) < enemy.treasure_prob
- if enemy.item_id > 0
- treasures.push($data_items[enemy.item_id])
- end
- if enemy.weapon_id > 0
- treasures.push($data_weapons[enemy.weapon_id])
- end
- if enemy.armor_id > 0
- treasures.push($data_armors[enemy.armor_id])
- end
- end
- end
- end
- # 限制宝物数为 6 个
- treasures = treasures[0..5]
- # 获得 EXP
- for i in 0...$game_party.actors.size
- actor = $game_party.actors[i]
- if actor.cant_get_exp? == false
- last_level = actor.level
- actor.exp += exp
- if actor.level > last_level
- @status_window.level_up(i)
- end
- end
- end
- # 获得金钱
- $game_party.gain_gold(gold)
- # 获得宝物
- for item in treasures
- case item
- when RPG::Item
- $game_party.gain_item(item.id, 1)
- when RPG::Weapon
- $game_party.gain_weapon(item.id, 1)
- when RPG::Armor
- $game_party.gain_armor(item.id, 1)
- end
- end
- # 生成战斗结果窗口
- @result_window = Window_BattleResult.new(exp, gold, treasures)
- # 设置等待计数
- @phase5_wait_count = 100
- end
- #--------------------------------------------------------------------------
- # ● 画面更新 (结束战斗回合)
- #--------------------------------------------------------------------------
- def update_phase5
- # 等待计数大于 0 的情况下
- if @phase5_wait_count > 0
- # 减少等待计数
- @phase5_wait_count -= 1
- # 等待计数为 0 的情况下
- if @phase5_wait_count == 0
- # 显示结果窗口
- @result_window.visible = true
- # 清除主回合标志
- $game_temp.battle_main_phase = false
- # 刷新状态窗口
- @status_window.refresh
- #######################################################★
- $game_temp.common_event_id = 32
- @wait_count = 1
- #######################################################★
- end
- return
- end
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 战斗结束
- battle_end(0)
- end
- end
- end
- #==============================================================================
- # ■ 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
- # 设置角色指令窗口的位置
- @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
- # 按下 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
- when 4
- escaping
- 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
- # 生成敌人箭头
- @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
- # 释放敌人箭头
- @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
- # 生成角色箭头
- @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
- # 释放角色箭头
- @actor_arrow.dispose
- @actor_arrow = nil
- end
- #--------------------------------------------------------------------------
- # ● 开始选择特技
- #--------------------------------------------------------------------------
- def start_skill_select
- # 生成特技窗口
- @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
- # 释放特技窗口
- @skill_window.dispose
- @skill_window = nil
- # 隐藏帮助窗口
- @help_window.visible = false
- # 有效化角色指令窗口
- @actor_command_window.active = true
- @actor_command_window.visible = true
- end
- #--------------------------------------------------------------------------
- # ● 开始选择物品
- #--------------------------------------------------------------------------
- def start_item_select
- # 生成物品窗口
- @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
- # 释放物品窗口
- @item_window.dispose
- @item_window = nil
- # 隐藏帮助窗口
- @help_window.visible = false
- # 有效化角色指令窗口
- @actor_command_window.active = true
- @actor_command_window.visible = true
- end
- def escaping
- # 不能逃跑的情况下
- if $game_temp.battle_can_escape == false
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 逃走处理
- @actor_command_window.active = false
- @actor_command_window.visible = false
- update_phase2_escape
- end
- end
- module Momo_IconCommand
- # 图标名称设定
- ATTACK_ICON_NAME = "攻击" # 攻撃
- SKILL_ICON_NAME = "技能" # 特技
- GUARD_ICON_NAME = "防御" # 防御
- ITEM_ICON_NAME = "物品" # 物品
- ESCAPE_ICON_NAME = "逃跑" # 逃跑
- # X坐标修正
- X_PLUS = 30#-120
- # Y坐标修正
- Y_PLUS = -60#10
- # 选择时图标的动作
- # 0:静止 1:放大
- SELECT_TYPE = 0
- # 闪烁时光芒的颜色
- FLASH_COLOR = Color.new(255, 255, 255, 128)
- # 闪烁时间
- FLASH_DURATION = 10
- # 闪烁间隔
- FLASH_INTERVAL = 20
- # 是否写出文字的名称
- COM_NAME_DROW = true
- # 文字名称是否移动
- COM_NAME_MOVE = true
- # 文字内容
- ATTACK_NAME = "攻击" # 攻击
- SKILL_NAME = "特技" # 特技
- GUARD_NAME = "防御" # 防御
- ITEM_NAME = "物品" # 物品
- ESCAPE_NAME = "逃跑" # 逃跑
- # 文字颜色
- COM_NAME_COLOR = Color.new(255, 255, 255, 255)
- # 文字坐标修正
- COM_NAME_X_PLUS = 0
- COM_NAME_Y_PLUS = 0
- end
- class Window_CommandIcon < Window_Selectable
- attr_accessor :last_index
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(x, y, commands)
- super(x, y, 32, 32)
- # ウィンドウスキンに空文字列を指定してウィンドウを描画しないようにする
- self.windowskin = RPG::Cache.windowskin("")
- @item_max = commands.size
- @commands = commands
- @column_max = commands.size
- @index = 0
- @last_index = nil
- @name_sprite = nil
- @sprite = []
- refresh
- end
- def dispose
- super
- for sprite in @sprite
- sprite.dispose unless sprite.nil?
- end
- @name_sprite.dispose unless @name_sprite.nil?
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- @name_sprite.dispose unless @name_sprite.nil?
- for sprite in @sprite
- sprite.dispose unless sprite.nil?
- end
- @name_sprite = nil
- draw_com_name if Momo_IconCommand::COM_NAME_DROW
- @sprite = []
- for i in 0...@item_max
- draw_item(i)
- end
- end
- #--------------------------------------------------------------------------
- # ● 項目の描画
- #--------------------------------------------------------------------------
- def draw_item(index)
- @sprite[index] = Sprite_Icon.new(nil, @commands[index])
- @sprite[index].z = self.z + 100##########################
- end
- def draw_com_name
- @name_sprite = Sprite_Comm_Name.new(nil, get_com_name)
-
- end
-
- # 更新
- def update
- super
- icon_update
- com_name_update if Momo_IconCommand::COM_NAME_DROW
- if move_index?
- @last_index = self.index
- end
- end
- # アイコンの更新
- def icon_update
- for i in [email protected]
- @sprite[i].active = (self.index == i)
- @sprite[i].x = self.x + i * 24
- @sprite[i].y = self.y + 0
- @sprite[i].z = (self.index == i) ? self.z + 2 : self.z + 1
- @sprite[i].visible = self.visible
- @sprite[i].update
- end
- end
- # コマンドネームの更新
- def com_name_update
- if move_index?
- @name_sprite.name = get_com_name
- end
- @name_sprite.x = self.x - 12 + Momo_IconCommand::COM_NAME_X_PLUS
- @name_sprite.y = self.y - 40 + Momo_IconCommand::COM_NAME_Y_PLUS
- @name_sprite.z = self.z + 1
- @name_sprite.active = self.active
- @name_sprite.visible = self.visible
- @name_sprite.update
- end
- def get_com_name
- make_name_set if @name_set.nil?
- name = @name_set[self.index]
- name = "" if name.nil?
- return name
- end
- def make_name_set
- @name_set = []
- @name_set[0] = Momo_IconCommand::ATTACK_NAME
- @name_set[1] = Momo_IconCommand::SKILL_NAME
- @name_set[2] = Momo_IconCommand::GUARD_NAME
- @name_set[3] = Momo_IconCommand::ITEM_NAME
- @name_set[4] = Momo_IconCommand::ESCAPE_NAME
- end
- def move_index?
- return self.index != @last_index
- end
- def need_reset
- @name_sprite.need_reset = true if Momo_IconCommand::COM_NAME_DROW
- end
- end
- # アイコン用スプライト
- class Sprite_Icon < Sprite
- attr_accessor :active
- attr_accessor :icon_name
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(viewport, icon_name)
- super(viewport)
- @icon_name = icon_name
- @last_icon = @icon_name
- @count = 0
- self.bitmap = RPG::Cache.icon(@icon_name)
- self.ox = self.bitmap.width / 2
- self.oy = self.bitmap.height / 2
- @active = false
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- def dispose
- if self.bitmap != nil
- self.bitmap.dispose
- end
- super
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- super
- if @icon_name != @last_icon
- @last_icon = @icon_name
- self.bitmap = RPG::Cache.icon(@icon_name)
- end
- if @active
- @count += 1
- case Momo_IconCommand::SELECT_TYPE
- when 0
- icon_flash
- when 1
- icon_zoom
- end
- @count = 0 if @count == 20
- else
- icon_reset
- end
- end
- def icon_flash
- if @count % Momo_IconCommand::FLASH_INTERVAL == 0 or @count == 1
- self.flash(Momo_IconCommand::FLASH_COLOR, Momo_IconCommand::FLASH_DURATION)
- end
- end
- def icon_zoom
- case @count
- when 1..10
- zoom = 1.0 + @count / 10.0
- when 11..20
- zoom = 2.0 - (@count - 10) / 10.0
- end
- self.zoom_x = zoom
- self.zoom_y = zoom
- end
- def icon_reset
- @count = 0
- self.zoom_x = 1.0
- self.zoom_y = 1.0
- end
- end
- # コマンドネーム用スプライト
- class Sprite_Comm_Name < Sprite
- attr_accessor :active
- attr_accessor :name
- attr_accessor :need_reset
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(viewport, name)
- super(viewport)
- @name = name
- @last_name = nil
- @count = 0
- @x_plus = 0
- @opa_plus = 0
- @need_reset = false
- @active = false
- self.bitmap = Bitmap.new(160, 32)
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- def dispose
- if self.bitmap != nil
- self.bitmap.dispose
- end
- super
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- super
- if @active
- if need_reset?
- @need_reset = false
- @last_name = @name
- text_reset
- end
- move_text if Momo_IconCommand::COM_NAME_MOVE
- end
- end
- def move_text
- @count += 1
- @x_plus = [@count * 8, 80].min
- self.x = self.x - 80 + @x_plus
- self.opacity = @count * 25
- end
- def text_reset
- @count = 0
- @x_plus = 0
- self.bitmap.clear
- self.bitmap.font.color = Momo_IconCommand::COM_NAME_COLOR
- if @name == Momo_IconCommand::ESCAPE_NAME and $game_temp.battle_can_escape == false
- self.bitmap.font.color = Color.new(192, 192, 192, 255)
- else
- self.bitmap.font.color = Momo_IconCommand::COM_NAME_COLOR
- end
- self.bitmap.draw_text(0, 0, 160, 32, @name)
- end
- def need_reset?
- return (@name != @last_name or @need_reset)
- end
- end
- class Scene_Battle
- #--------------------------------------------------------------------------
- # ● プレバトルフェーズ開始
- #--------------------------------------------------------------------------
- alias scene_battle_icon_command_start_phase1 start_phase1
- def start_phase1
- com1 = Momo_IconCommand::ATTACK_ICON_NAME
- com2 = Momo_IconCommand::SKILL_ICON_NAME
- com3 = Momo_IconCommand::GUARD_ICON_NAME
- com4 = Momo_IconCommand::ITEM_ICON_NAME
- com5 = Momo_IconCommand::ESCAPE_ICON_NAME
- @actor_command_window = Window_CommandIcon.new(0, 0, [com1, com2, com3, com4, com5])
- @actor_command_window.y = 160
- @actor_command_window.back_opacity = 160
- @actor_command_window.active = false
- @actor_command_window.visible = false
- @actor_command_window.update
- scene_battle_icon_command_start_phase1
- end
- #--------------------------------------------------------------------------
- # ● アクターコマンドウィンドウのセットアップ
- #--------------------------------------------------------------------------
- alias scene_battle_icon_command_phase3_setup_command_window phase3_setup_command_window
- def phase3_setup_command_window
- scene_battle_icon_command_phase3_setup_command_window
- # アクターコマンドウィンドウの位置を設定
- @actor_command_window.x = command_window_actor_x(@actor_index)
- @actor_command_window.y = command_window_actor_y(@actor_index)
- @actor_command_window.need_reset
- end
- def command_window_actor_x(index)
- #$game_party.actors[index].screen_x + Momo_IconCommand::X_PLUS
- index * 160 + Momo_IconCommand::X_PLUS
- end
- def command_window_actor_y(index)
- #$game_party.actors[index].screen_y + Momo_IconCommand::Y_PLUS
- 390 + Momo_IconCommand::Y_PLUS
- end
- end
- #==============================================================================
- # 本脚本来自www.66RPG.com,使用和转载请保留此信息
- #==============================================================================
- $data_system_level_up_se = "" #升级时的音效设置
- $data_system_level_up_me = "Audio/ME/007-Fanfare01" # 升级时播放的ME
- $data_system_skilllearn_se = "Audio/SE/106-Heal02" # 学会特技时播放的声效。
- #=============================================================
- # ■ Window_LevelUpWindow
- #-------------------------------------------------------------------
- # バトル終了時、レベルアップした場合にステータスを表示するウィンドウです。
- #=============================================================
- class Window_LevelUpWindow < Window_Base
- #---------------------------------------------------------
- # ● オブジェクト初期化
- #------------------------------------------------------
- def initialize(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
- super(0, 128, 160, 192)
- self.z = 999
- self.contents = Bitmap.new(width - 32, height - 32)
- self.visible = false
- self.back_opacity = 160
- refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
- end
- #-----------------------------------------------------------
- # ● リフレッシュ
- #---------------------------------------------------------
- def refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
- self.contents.clear
- self.contents.font.color = system_color
- self.contents.font.size = 14
- self.contents.draw_text( 0, 0, 160, 24, "等级上升")
- self.contents.font.size = 18
- self.contents.draw_text( 0, 28, 160, 24, $data_system.words.hp)
- self.contents.draw_text( 0, 50, 160, 24, $data_system.words.sp)
- self.contents.font.size = 14
- self.contents.draw_text( 0, 72, 80, 24, $data_system.words.str)
- self.contents.draw_text( 0, 94, 80, 24, $data_system.words.dex)
- self.contents.draw_text( 0, 116, 80, 24, $data_system.words.agi)
- self.contents.draw_text( 0, 138, 80, 24, $data_system.words.int)
- self.contents.draw_text(92, 0, 128, 24, "→")
- self.contents.draw_text(76, 28, 128, 24, "=")
- self.contents.draw_text(76, 50, 128, 24, "=")
- self.contents.draw_text(76, 72, 128, 24, "=")
- self.contents.draw_text(76, 94, 128, 24, "=")
- self.contents.draw_text(76, 116, 128, 24, "=")
- self.contents.draw_text(76, 138, 128, 24, "=")
- self.contents.font.color = normal_color
- self.contents.draw_text( 0, 0, 88, 24, last_lv.to_s, 2)
- self.contents.draw_text( 0, 28, 72, 24, "+" + up_hp.to_s, 2)
- self.contents.draw_text( 0, 50, 72, 24, "+" + up_sp.to_s, 2)
- self.contents.draw_text( 0, 72, 72, 24, "+" + up_str.to_s, 2)
- self.contents.draw_text( 0, 94, 72, 24, "+" + up_dex.to_s, 2)
- self.contents.draw_text( 0, 116, 72, 24, "+" + up_agi.to_s, 2)
- self.contents.draw_text( 0, 138, 72, 24, "+" + up_int.to_s, 2)
- self.contents.font.size = 20
- self.contents.draw_text( 0, 0, 128, 24, actor.level.to_s, 2)
- self.contents.draw_text( 0, 26, 128, 24, actor.maxhp.to_s, 2)
- self.contents.draw_text( 0, 48, 128, 24, actor.maxsp.to_s, 2)
- self.contents.draw_text( 0, 70, 128, 24, actor.str.to_s, 2)
- self.contents.draw_text( 0, 92, 128, 24, actor.dex.to_s, 2)
- self.contents.draw_text( 0, 114, 128, 24, actor.agi.to_s, 2)
- self.contents.draw_text( 0, 136, 128, 24, actor.int.to_s, 2)
- end
- end
- #===========================================================
- # ■ Window_SkillLearning
- #------------------------------------------------------------------------------
- # レベルアップ時などにスキルを習得した場合にそれを表示するウィンドウです。
- #=============================================================
- class Window_SkillLearning < Window_Base
- #-------------------------------------------------------------
- # ● 公開インスタンス変数
- #-----------------------------------------------------------
- attr_reader :learned # スキルを習得したかどうか
- #----------------------------------------------------------
- # ● オブジェクト初期化
- #----------------------------------------------------------
- def initialize(class_id, last_lv, now_lv)
- super(160, 64, 320, 64)
- self.z = 999
- self.contents = Bitmap.new(width - 32, height - 28) # わざと▽を表示
- self.visible = false
- self.back_opacity = 160
- @learned = false
- refresh(class_id, last_lv, now_lv)
- end
- #------------------------------------------------------------
- # ● リフレッシュ
- #-------------------------------------------------------
- def refresh(class_id, last_lv, now_lv)
- for i in 0...$data_classes[class_id].learnings.size
- learn_lv = $data_classes[class_id].learnings[i].level
- # 今回のレベルアップ範囲で習得するスキルの場合
- if learn_lv > last_lv and learn_lv <= now_lv
- @learned = true
- # SEの再生
- if $data_system_skilllearn_se != ""
- Audio.se_play($data_system_skilllearn_se)
- end
- # 各描写
- skill_name = $data_skills[$data_classes[class_id].learnings[i].skill_id].name
- self.contents.clear
- self.contents.font.color = text_color(0)
- self.contents.draw_text(0,0,448,32, "学会特技:"+skill_name)
- self.contents.font.color = text_color(6)
- self.contents.draw_text(0,0,448,32, " "+skill_name)
- self.contents.font.color = text_color(0)
- self.visible = true
- # メインループ
- loop do
- # ゲーム画面を更新
- Graphics.update
- # 入力情報を更新
- Input.update
- # フレーム更新
- update
- # 画面が切り替わったらループを中断
- if @learned == false
- break
- end
- end
- # メインループここまで
- end
- end
- end
- #-----------------------------------------------------------
- # ● フレーム更新
- #------------------------------------------------------------
- def update
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- @learned = false
- self.visible = false
- end
- end
- end
- #==================================================================
- # ■ Window_BattleStatus
- #==================================================================
- class Window_BattleStatus < Window_Base
- #---------------------------------------------------------
- # ● 追加?公開インスタンス変数
- #-------------------------------------------------------
- attr_accessor :level_up_flags # LEVEL UP!表示
- end
- #===============================================================
- # ■ Game_Battler
- #===============================================================
- class Game_Battler
- #--------------------------------------------------------------
- # ● 追加?公開インスタンス変数
- #----------------------------------------------------------
- attr_accessor :exp_gain_ban # EXP取得一時禁止
- #------------------------------------------------------
- # ● オブジェクト初期化
- #-----------------------------------------------------
- alias xrxs_bp10_initialize initialize
- def initialize
- @exp_gain_ban = false
- xrxs_bp10_initialize
- end
- #-------------------------------------------------------
- # ● ステート [EXP を獲得できない] 判定
- #-----------------------------------------------------
- alias xrxs_bp10_cant_get_exp? cant_get_exp?
- def cant_get_exp?
- if @exp_gain_ban == true
- return true
- else
- return xrxs_bp10_cant_get_exp?
- end
- end
- end
- #==============================================================
- # ■ Scene_Battle
- #==============================================================
- class Scene_Battle
- #--------------------------------------------------
- # ● アフターバトルフェーズ開始
- #--------------------------------------------------
- alias xrxs_bp10_start_phase5 start_phase5
- def start_phase5
- # EXP 獲得禁止
- for i in 0...$game_party.actors.size
- $game_party.actors[i].exp_gain_ban = true
- end
- xrxs_bp10_start_phase5
- # EXP 獲得禁止の解除
- for i in 0...$game_party.actors.size
- $game_party.actors[i].exp_gain_ban = false
- end
- # EXPを初期化
- @exp_gained = 0
- for enemy in $game_troop.enemies
- # 獲得 EXPを追加 # エネミーが隠れ状態でない場合
- @exp_gained += enemy.exp if not enemy.hidden
- end
- # 設定
- @phase5_step = 1
- @exp_gain_actor = -1
- # リザルトウィンドウを表示
- @result_window.visible = true
- end
- #----------------------------------------------------------
- # ● フレーム更新 (アフターバトルフェーズ)
- #--------------------------------------------------------
- #alias xrxs_bp10_update_phase5 update_phase5
- def update_phase5
- case @phase5_step
- when 1
- update_phase5_step1
- else
- # ウェイトカウントが 0 より大きい場合
- if @phase5_wait_count > 0
- # ウェイトカウントを減らす
- @phase5_wait_count -= 1
- # ウェイトカウントが 0 になった場合
- if @phase5_wait_count == 0
- # リザルトウィンドウを表示
- #@result_window.visible = true
- # メインフェーズフラグをクリア
- $game_temp.battle_main_phase = false
- # ステータスウィンドウをリフレッシュ
- @status_window.refresh
- end
- return
- end
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # バトル終了
- battle_end(0)
- end
- # レベルアップしている場合は強制バトル終了
- battle_end(0) if @levelup_window != nil and @phase5_wait_count <= 0
- end
- end
- #-----------------------------------------------------------
- # ● フレーム更新 (アフターバトルフェーズ 1 : レベルアップ)
- #-----------------------------------------------------------
- def update_phase5_step1
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # ウィンドウを閉じて次のアクターへ
- @levelup_window.visible = false if @levelup_window != nil
- @status_window.level_up_flags[@exp_gain_actor] = false
- phase5_next_levelup
- end
- end
- #---------------------------------------------------------
- # ● 次のアクターのレベルアップ表示へ
- #---------------------------------------------------------
- def phase5_next_levelup
- begin
- # 次のアクターへ
- @exp_gain_actor += 1
- # 最後のアクターの場合
- if @exp_gain_actor >= $game_party.actors.size
- # アフターバトルフェーズ開始
- @phase5_step = 0
- return
- end
- actor = $game_party.actors[@exp_gain_actor]
- if actor.cant_get_exp? == false
- # 現在の能力値を保持
- last_level = actor.level
- last_maxhp = actor.maxhp
- last_maxsp = actor.maxsp
- last_str = actor.str
- last_dex = actor.dex
- last_agi = actor.agi
- last_int = actor.int
- # 経験値取得の決定的瞬間(謎
- actor.exp += @exp_gained
- # 判定
- if actor.level > last_level
- # レベルアップした場合
- @status_window.level_up(@exp_gain_actor)
- # リザルトウィンドウを消す
- @result_window.visible = false
- # SEの再生
- if $data_system_level_up_se != ""
- Audio.se_play($data_system_level_up_se)
- end
- # MEの再生
- if $data_system_level_up_me != ""
- Audio.me_stop
- Audio.me_play($data_system_level_up_me)
- end
- # LEVEL-UPウィンドウの設定
- @levelup_window = Window_LevelUpWindow.new(actor, last_level,
- actor.maxhp - last_maxhp, actor.maxsp - last_maxsp, actor.str - last_str,
- actor.dex - last_dex, actor.agi - last_agi, actor.int - last_int)
- @levelup_window.x = 160 * @exp_gain_actor
- @levelup_window.visible = true
- # ステータスウィンドウをリフレッシュ
- @status_window.refresh
- # スキル習得ウィンドウの設定
- @skilllearning_window = Window_SkillLearning.new(actor.class_id, last_level, actor.level)
- # ウェイトカウントを設定
- @phase5_wait_count = 40
- @phase5_step = 1
- return
- end
- end
- end until false
- end
- end
- #=============================================================
- # 本脚本来自www.66RPG.com,使用和转载请保留此信息
- #============================================================= #==============================================================================
- # ■ Game_Actor
- #------------------------------------------------------------------------------
- # 处理角色的类。本类在 Game_Actors 类 ($game_actors)
- # 的内部使用、Game_Party 类请参考 ($game_party) 。
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ● 取得战斗画面的 X 坐标
- #--------------------------------------------------------------------------
- def screen_x
- case self.index
- when 0
- return 500
- when 1
- return 450
- when 2
- return 500
- when 3
- return 450
- else
- return 600
- end
- end
- #--------------------------------------------------------------------------
- # ● 取得战斗画面的 Y 坐标
- #--------------------------------------------------------------------------
- def screen_y
- case self.index
- when 0
- return 360
- when 1
- return 300
- when 2
- return 240
- when 3
- return 180
- else
- return 1000
- end
- end
- #--------------------------------------------------------------------------
- # ● 取得战斗画面的 Z 坐标
- #--------------------------------------------------------------------------
- def screen_z
- case self.index
- when 0
- return 10
- when 1
- return 9
- when 2
- return 8
- when 3
- return 7
- else
- return 0
- end
- end
- end
- #==============================================================================
- # ■ Window_BattleStatus
- #------------------------------------------------------------------------------
- # 显示战斗画面同伴状态的窗口。
- #==============================================================================
- class Window_BattleStatus < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- #--------------------------------------------------------------------------
- def initialize
- super(0, 320, 640, 160)
- self.opacity = 0
- self.contents = Bitmap.new(width - 32, height - 32)
- @level_up_flags = [false, false, false, false]
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 释放
- #--------------------------------------------------------------------------
- def dispose
- super
- end
- #--------------------------------------------------------------------------
- # ● 设置升级标志
- # actor_index : 角色索引
- #--------------------------------------------------------------------------
- def level_up(actor_index)
- @level_up_flags[actor_index] = true
- end
-
- def draw_actor_face(actor,x,y)
- bitmap = RPG::Cache.battler(actor.name + "_C" , actor.battler_hue)
- self.contents.blt(x,y,bitmap,Rect.new(0,0,bitmap.width,bitmap.height ))
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- @item_max = $game_party.actors.size
- for i in 0...$game_party.actors.size
- actor = $game_party.actors[i]
- actor_x = i * 160 + 4
- self.contents.font.size = 20
- draw_actor_face(actor,actor_x,0)
- draw_actor_name(actor, actor_x, 0)
- draw_actor_hp(actor, actor_x, 64, 120)
- draw_actor_sp(actor, actor_x, 80, 120)
- if @level_up_flags[i]
- self.contents.font.color = normal_color
- self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
- else
- self.contents.font.size = 16
- draw_actor_state(actor, actor_x, 96)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- super
- # 主界面的不透明度下降
- if $game_temp.battle_main_phase
- self.contents_opacity -= 4 if self.contents_opacity > 191
- else
- self.contents_opacity += 4 if self.contents_opacity < 255
- end
- end
- end
- #==============================================================================
- # ■ Window_BattleResult
- #------------------------------------------------------------------------------
- # 战斗结束时、显示获得的 EXP 及金钱的窗口。
- #==============================================================================
- class Window_BattleResult < Window_Base
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # exp : EXP
- # gold : 金钱
- # treasures : 宝物
- #--------------------------------------------------------------------------
- def initialize(exp, gold, treasures)
- @exp = exp
- @gold = gold
- @treasures = treasures
- super(160, 0, 320, @treasures.size * 32 + 64)
- self.z = 999
- self.contents = Bitmap.new(width - 32, height - 32)
- self.y = 160 - height / 2
- self.back_opacity = 160
- self.visible = false
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 刷新
- #--------------------------------------------------------------------------
- def refresh
- self.contents.clear
- x = 4
- self.contents.font.color = normal_color
- cx = contents.text_size(@exp.to_s).width
- self.contents.draw_text(x, 0, cx, 32, @exp.to_s)
- x += cx + 4
- self.contents.font.color = system_color
- cx = contents.text_size("EXP").width
- self.contents.draw_text(x, 0, 64, 32, "EXP")
- x += cx + 16
- self.contents.font.color = normal_color
- cx = contents.text_size(@gold.to_s).width
- self.contents.draw_text(x, 0, cx, 32, @gold.to_s)
- x += cx + 4
- self.contents.font.color = system_color
- self.contents.draw_text(x, 0, 128, 32, $data_system.words.gold)
- y = 32
- for item in @treasures
- draw_item_name(item, 4, y)
- y += 32
- end
- end
- end
- #==============================================================================
- # ■ Spriteset_Battle
- #------------------------------------------------------------------------------
- # 处理战斗画面的活动块的类。本类在 Scene_Battle 类
- # 的内部使用。
- #==============================================================================
- class Spriteset_Battle
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_reader :viewport1 # 敌人方的显示端口
- attr_reader :viewport2 # 角色方的显示端口
- #--------------------------------------------------------------------------
- # ● 初始化变量
- #--------------------------------------------------------------------------
- def initialize
- # 生成显示端口
- @viewport1 = Viewport.new(0, 0, 640, 480)
- @viewport2 = Viewport.new(0, 0, 640, 480)
- @viewport3 = Viewport.new(0, 0, 640, 480)
- @viewport4 = Viewport.new(0, 0, 640, 480)
- @viewport2.z = 101
- @viewport3.z = 200
- @viewport4.z = 5000
- # 生成战斗背景活动块
- @battleback_sprite = Sprite.new(@viewport1)
- # 生成敌人活动块
- @enemy_sprites = []
- for enemy in $game_troop.enemies.reverse
- @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
- end
- # 生成敌人活动块
- @actor_sprites = []
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- @actor_sprites.push(Sprite_Battler.new(@viewport2))
- # 生成天候
- @weather = RPG::Weather.new(@viewport1)
- # 生成图片活动块
- @picture_sprites = []
- for i in 51..100
- @picture_sprites.push(Sprite_Picture.new(@viewport3,
- $game_screen.pictures[i]))
- end
- # 生成计时器块
- @timer_sprite = Sprite_Timer.new
- # 刷新画面
- update
- end
- #--------------------------------------------------------------------------
- # ● 释放
- #--------------------------------------------------------------------------
- def dispose
- # 如果战斗背景位图存在的情况下就释放
- if @battleback_sprite.bitmap != nil
- @battleback_sprite.bitmap.dispose
- end
- # 释放战斗背景活动块
- @battleback_sprite.dispose
- # 释放敌人活动块、角色活动块
- for sprite in @enemy_sprites + @actor_sprites
- sprite.dispose
- end
- # 释放天候
- @weather.dispose
- # 释放图片活动块
- for sprite in @picture_sprites
- sprite.dispose
- end
- # 释放计时器活动块
- @timer_sprite.dispose
- # 释放显示端口
- @viewport1.dispose
- @viewport2.dispose
- @viewport3.dispose
- @viewport4.dispose
- end
- #--------------------------------------------------------------------------
- # ● 显示效果中判定
- #--------------------------------------------------------------------------
- def effect?
- # 如果是在显示效果中的话就返回 true
- for sprite in @enemy_sprites + @actor_sprites
- return true if sprite.effect?
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- # 刷新角色的活动块 (对应角色的替换)
- @actor_sprites[0].battler = $game_party.actors[0]
- @actor_sprites[1].battler = $game_party.actors[1]
- @actor_sprites[2].battler = $game_party.actors[2]
- @actor_sprites[3].battler = $game_party.actors[3]
- # 战斗背景的文件名与现在情况有差异的情况下
- if @battleback_name != $game_temp.battleback_name
- @battleback_name = $game_temp.battleback_name
- if @battleback_sprite.bitmap != nil
- @battleback_sprite.bitmap.dispose
- end
- @battleback_sprite.bitmap = RPG::Cache.battleback(@battleback_name)
- @battleback_sprite.src_rect.set(0, 0, 640, 480)
- end
- # 刷新战斗者的活动块
- for sprite in @enemy_sprites + @actor_sprites
- sprite.update
- end
- # 刷新天气图形
- @weather.type = $game_screen.weather_type
- @weather.max = $game_screen.weather_max
- @weather.update
- # 刷新图片活动块
- for sprite in @picture_sprites
- sprite.update
- end
- # 刷新计时器活动块
- @timer_sprite.update
- # 设置画面的色调与震动位置
- @viewport1.tone = $game_screen.tone
- @viewport1.ox = $game_screen.shake
- # 设置画面的闪烁色
- @viewport4.color = $game_screen.flash_color
- # 刷新显示端口
- @viewport1.update
- @viewport2.update
- @viewport4.update
- end
- end
- #==============================================================================
- # ■ Scene_Battle (分割定义 1)
- #------------------------------------------------------------------------------
- # 处理战斗画面的类。
- #==============================================================================
- class Scene_Battle
- #--------------------------------------------------------------------------
- # ● 主处理
- #--------------------------------------------------------------------------
- def main
- # 初始化战斗用的各种暂时数据
- $game_temp.in_battle = true
- $game_temp.battle_turn = 0
- $game_temp.battle_event_flags.clear
- $game_temp.battle_abort = false
- $game_temp.battle_main_phase = false
- $game_temp.battleback_name = $game_map.battleback_name
- $game_temp.forcing_battler = nil
- # 初始化战斗用事件解释器
- $game_system.battle_interpreter.setup(nil, 0)
- # 准备队伍
- @troop_id = $game_temp.battle_troop_id
- $game_troop.setup(@troop_id)
- # 生成角色命令窗口
- s1 = $data_system.words.attack
- s2 = $data_system.words.skill
- s3 = $data_system.words.guard
- s4 = $data_system.words.item
- s5 = "逃跑"
- @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4, s5])
- # 不能逃跑的情况下
- if $game_temp.battle_can_escape == false
- @actor_command_window.disable_item(4)
- end
- @actor_command_window.y = 160
- @actor_command_window.back_opacity = 160
- @actor_command_window.active = false
- @actor_command_window.visible = false
- # 生成其它窗口
- @party_command_window = Window_PartyCommand.new
- @help_window = Window_Help.new
- @help_window.back_opacity = 160
- @help_window.visible = false
- @status_window = Window_BattleStatus.new
- @message_window = Window_Message.new
- # 生成活动块
- @spriteset = Spriteset_Battle.new
- # 初始化等待计数
- @wait_count = 0
- # 执行过渡
- if $data_system.battle_transition == ""
- Graphics.transition(20)
- else
- Graphics.transition(40, "Graphics/Transitions/" +
- $data_system.battle_transition)
- end
- # 开始自由战斗回合
- start_phase1
- # 主循环
- loop do
- # 刷新游戏画面
- Graphics.update
- # 刷新输入信息
- Input.update
- # 刷新画面
- update
- # 如果画面切换的话就中断循环
- if $scene != self
- break
- end
- end
- # 刷新地图
- $game_map.refresh
- # 准备过渡
- Graphics.freeze
- # 释放窗口
- @actor_command_window.dispose
- @party_command_window.dispose
- @help_window.dispose
- @status_window.dispose
- @message_window.dispose
- if @skill_window != nil
- @skill_window.dispose
- end
- if @item_window != nil
- @item_window.dispose
- end
- if @result_window != nil
- @result_window.dispose
- end
- # 释放活动块
- @spriteset.dispose
- # 标题画面切换中的情况
- if $scene.is_a?(Scene_Title)
- # 淡入淡出画面
- Graphics.transition
- Graphics.freeze
- end
- # 战斗测试或者游戏结束以外的画面切换中的情况
- if $BTEST and not $scene.is_a?(Scene_Gameover)
- $scene = nil
- end
- end
- #--------------------------------------------------------------------------
- # ● 胜负判定
- #--------------------------------------------------------------------------
- def judge
- # 全灭判定是真、并且同伴人数为 0 的情况下
- if $game_party.all_dead? or $game_party.actors.size == 0
- # 允许失败的情况下
- if $game_temp.battle_can_lose
- # 还原为战斗开始前的 BGM
- $game_system.bgm_play($game_temp.map_bgm)
- # 战斗结束
- battle_end(2)
- # 返回 true
- return true
- end
- # 设置游戏结束标志
- $game_temp.gameover = true
- # 返回 true
- return true
- end
- # 如果存在任意 1 个敌人就返回 false
- for enemy in $game_troop.enemies
- if enemy.exist?
- return false
- end
- end
- # 开始结束战斗回合 (胜利)
- start_phase5
- # 返回 true
- return true
- end
- #--------------------------------------------------------------------------
- # ● 战斗结束
- # result : 結果 (0:胜利 1:失败 2:逃跑)
- #--------------------------------------------------------------------------
- def battle_end(result)
- # 清除战斗中标志
- $game_temp.in_battle = false
- # 清除全体同伴的行动
- $game_party.clear_actions
- # 解除战斗用状态
- for actor in $game_party.actors
- actor.remove_states_battle
- end
- # 清除敌人
- $game_troop.enemies.clear
- # 调用战斗返回调用
- if $game_temp.battle_proc != nil
- $game_temp.battle_proc.call(result)
- $game_temp.battle_proc = nil
- end
- # 切换到地图画面
- $scene = Scene_Map.new
- end
- #--------------------------------------------------------------------------
- # ● 设置战斗事件
- #--------------------------------------------------------------------------
- def setup_battle_event
- # 正在执行战斗事件的情况下
- if $game_system.battle_interpreter.running?
- return
- end
- # 搜索全部页的战斗事件
- for index in 0...$data_troops[@troop_id].pages.size
- # 获取事件页
- page = $data_troops[@troop_id].pages[index]
- # 事件条件可以参考 c
- c = page.condition
- # 没有指定任何条件的情况下转到下一页
- unless c.turn_valid or c.enemy_valid or
- c.actor_valid or c.switch_valid
- next
- end
- # 执行完毕的情况下转到下一页
- if $game_temp.battle_event_flags[index]
- next
- end
- # 确认回合条件
- if c.turn_valid
- n = $game_temp.battle_turn
- a = c.turn_a
- b = c.turn_b
- if (b == 0 and n != a) or
- (b > 0 and (n < 1 or n < a or n % b != a % b))
- next
- end
- end
- # 确认敌人条件
- if c.enemy_valid
- enemy = $game_troop.enemies[c.enemy_index]
- if enemy == nil or enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
- next
- end
- end
- # 确认角色条件
- if c.actor_valid
- actor = $game_actors[c.actor_id]
- if actor == nil or actor.hp * 100.0 / actor.maxhp > c.actor_hp
- next
- end
- end
- # 确认开关条件
- if c.switch_valid
- if $game_switches[c.switch_id] == false
- next
- end
- end
- # 设置事件
- $game_system.battle_interpreter.setup(page.list, 0)
- # 本页的范围是 [战斗] 或 [回合] 的情况下
- if page.span <= 1
- # 设置执行结束标志
- $game_temp.battle_event_flags[index] = true
- end
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面
- #--------------------------------------------------------------------------
- def update
- # 执行战斗事件中的情况下
- if $game_system.battle_interpreter.running?
- # 刷新解释器
- $game_system.battle_interpreter.update
- # 强制行动的战斗者不存在的情况下
- if $game_temp.forcing_battler == nil
- # 执行战斗事件结束的情况下
- unless $game_system.battle_interpreter.running?
- # 继续战斗的情况下、再执行战斗事件的设置
- unless judge
- setup_battle_event
- end
- end
- # 如果不是结束战斗回合的情况下
- if @phase != 5
- # 刷新状态窗口
- @status_window.refresh
- end
- end
- end
- # 系统 (计时器)、刷新画面
- $game_system.update
- $game_screen.update
- # 计时器为 0 的情况下
- if $game_system.timer_working and $game_system.timer == 0
- # 中断战斗
- $game_temp.battle_abort = true
- end
- # 刷新窗口
- @help_window.update
- @party_command_window.update
- @actor_command_window.update
- @status_window.update
- @message_window.update
- # 刷新活动块
- @spriteset.update
- # 处理过渡中的情况下
- if $game_temp.transition_processing
- # 清除处理过渡中标志
- $game_temp.transition_processing = false
- # 执行过渡
- if $game_temp.transition_name == ""
- Graphics.transition(20)
- else
- Graphics.transition(40, "Graphics/Transitions/" +
- $game_temp.transition_name)
- end
- end
- # 显示信息窗口中的情况下
- if $game_temp.message_window_showing
- return
- end
- # 显示效果中的情况下
- if @spriteset.effect?
- return
- end
- # 游戏结束的情况下
- if $game_temp.gameover
- # 切换到游戏结束画面
- $scene = Scene_Gameover.new
- return
- end
- # 返回标题画面的情况下
- if $game_temp.to_title
- # 切换到标题画面
- $scene = Scene_Title.new
- return
- end
- # 中断战斗的情况下
- if $game_temp.battle_abort
- # 还原为战斗前的 BGM
- $game_system.bgm_play($game_temp.map_bgm)
- # 战斗结束
- battle_end(1)
- return
- end
- # 等待中的情况下
- if @wait_count > 0
- # 减少等待计数
- @wait_count -= 1
- return
- end
- # 强制行动的角色存在、
- # 并且战斗事件正在执行的情况下
- if $game_temp.forcing_battler == nil and
- $game_system.battle_interpreter.running?
- return
- end
- # 回合分支
- case @phase
- when 1 # 自由战斗回合
- update_phase1
- when 2 # 同伴命令回合
- update_phase2
- when 3 # 角色命令回合
- update_phase3
- when 4 # 主回合
- update_phase4
- when 5 # 战斗结束回合
- update_phase5
- end
- end
- end
- #==============================================================================
- # ■ Scene_Battle (分割定义 2)
- #------------------------------------------------------------------------------
- # 处理战斗画面的类。
- #==============================================================================
- class Scene_Battle
- #--------------------------------------------------------------------------
- # ● 开始自由战斗回合
- #--------------------------------------------------------------------------
- def start_phase1
- # 转移到回合 1
- @phase = 1
- # 清除全体同伴的行动
- $game_party.clear_actions
- # 设置战斗事件
- setup_battle_event
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面 (自由战斗回合)
- #--------------------------------------------------------------------------
- def update_phase1
- # 胜败判定
- if judge
- # 胜利或者失败的情况下 : 过程结束
- return
- end
- # 开始同伴命令回合
- start_phase2
- end
- #--------------------------------------------------------------------------
- # ● 开始同伴命令回合
- #--------------------------------------------------------------------------
- def start_phase2
- # 转移到回合 2
- @phase = 2
- # 设置角色为非选择状态
- @actor_index = -1
- @active_battler = nil
- # 有效化同伴指令窗口
- #@party_command_window.active = true
- #@party_command_window.visible = true
- # 无效化角色指令窗口
- @actor_command_window.active = false
- @actor_command_window.visible = false
- # 清除主回合标志
- $game_temp.battle_main_phase = false
- # 清除全体同伴的行动
- $game_party.clear_actions
- # 不能输入命令的情况下
- unless $game_party.inputable?
- # 开始主回合
- start_phase4
- end
- end
- #--------------------------------------------------------------------------
- # ● 刷新画面 (同伴命令回合)
- #--------------------------------------------------------------------------
- def update_phase2
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 开始角色的命令回合
- start_phase3
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 同伴指令窗口光标位置分支
- case @party_command_window.index
- when 0 # 战斗
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 开始角色的命令回合
- start_phase3
- when 1 # 逃跑
- # 不能逃跑的情况下
- if $game_temp.battle_can_escape == false
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 逃走处理
- update_phase2_escape
- end
- return
- end
- end
- #--------------------------------------------------------------------------
- # ● 画面更新 (同伴指令回合 : 逃跑)
- #--------------------------------------------------------------------------
- def update_phase2_escape
- # 计算敌人速度的平均值
- enemies_agi = 0
- enemies_number = 0
- for enemy in $game_troop.enemies
- if enemy.exist?
- enemies_agi += enemy.agi
- enemies_number += 1
- end
- end
- if enemies_number > 0
- enemies_agi /= enemies_number
- end
- # 计算角色速度的平均值
- actors_agi = 0
- actors_number = 0
- for actor in $game_party.actors
- if actor.exist?
- actors_agi += actor.agi
- actors_number += 1
- end
- end
- if actors_number > 0
- actors_agi /= actors_number
- end
- # 逃跑成功判定
- success = rand(100) < 50 * actors_agi / enemies_agi
- # 成功逃跑的情况下
- if success
- #######################################################★
- $game_temp.common_event_id = 32
- @wait_count = 1
- #######################################################★
- # 演奏逃跑 SE
- $game_system.se_play($data_system.escape_se)
- # 还原为战斗开始前的 BGM
- $game_system.bgm_play($game_temp.map_bgm)
- # 战斗结束
- battle_end(1)
- # 逃跑失败的情况下
- else
- # 清除全体同伴的行动
- $game_party.clear_actions
- # 开始主回合
- start_phase4
- end
- end
- #--------------------------------------------------------------------------
- # ● 开始结束战斗回合
- #--------------------------------------------------------------------------
- def start_phase5
- # 转移到回合 5
- @phase = 5
- # 演奏战斗结束 ME
- $game_system.me_play($game_system.battle_end_me)
- # 还原为战斗开始前的 BGM
- $game_system.bgm_play($game_temp.map_bgm)
- # 初始化 EXP、金钱、宝物
- exp = 0
- gold = 0
- treasures = []
- # 循环
- for enemy in $game_troop.enemies
- # 敌人不是隐藏状态的情况下
- unless enemy.hidden
- # 获得 EXP、增加金钱
- exp += enemy.exp
- gold += enemy.gold
- # 出现宝物判定
- if rand(100) < enemy.treasure_prob
- if enemy.item_id > 0
- treasures.push($data_items[enemy.item_id])
- end
- if enemy.weapon_id > 0
- treasures.push($data_weapons[enemy.weapon_id])
- end
- if enemy.armor_id > 0
- treasures.push($data_armors[enemy.armor_id])
- end
- end
- end
- end
- # 限制宝物数为 6 个
- treasures = treasures[0..5]
- # 获得 EXP
- for i in 0...$game_party.actors.size
- actor = $game_party.actors[i]
- if actor.cant_get_exp? == false
- last_level = actor.level
- actor.exp += exp
- if actor.level > last_level
- @status_window.level_up(i)
- end
- end
- end
- # 获得金钱
- $game_party.gain_gold(gold)
- # 获得宝物
- for item in treasures
- case item
- when RPG::Item
- $game_party.gain_item(item.id, 1)
- when RPG::Weapon
- $game_party.gain_weapon(item.id, 1)
- when RPG::Armor
- $game_party.gain_armor(item.id, 1)
- end
- end
- # 生成战斗结果窗口
- @result_window = Window_BattleResult.new(exp, gold, treasures)
- # 设置等待计数
- @phase5_wait_count = 100
- end
- #--------------------------------------------------------------------------
- # ● 画面更新 (结束战斗回合)
- #--------------------------------------------------------------------------
- def update_phase5
- # 等待计数大于 0 的情况下
- if @phase5_wait_count > 0
- # 减少等待计数
- @phase5_wait_count -= 1
- # 等待计数为 0 的情况下
- if @phase5_wait_count == 0
- # 显示结果窗口
- @result_window.visible = true
- # 清除主回合标志
- $game_temp.battle_main_phase = false
- # 刷新状态窗口
- @status_window.refresh
- #######################################################★
- $game_temp.common_event_id = 32
- @wait_count = 1
- #######################################################★
- end
- return
- end
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 战斗结束
- battle_end(0)
- end
- end
- end
- #==============================================================================
- # ■ 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
- # 设置角色指令窗口的位置
- @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
- # 按下 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
- when 4
- escaping
- 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
- # 生成敌人箭头
- @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
- # 释放敌人箭头
- @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
- # 生成角色箭头
- @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
- # 释放角色箭头
- @actor_arrow.dispose
- @actor_arrow = nil
- end
- #--------------------------------------------------------------------------
- # ● 开始选择特技
- #--------------------------------------------------------------------------
- def start_skill_select
- # 生成特技窗口
- @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
- # 释放特技窗口
- @skill_window.dispose
- @skill_window = nil
- # 隐藏帮助窗口
- @help_window.visible = false
- # 有效化角色指令窗口
- @actor_command_window.active = true
- @actor_command_window.visible = true
- end
- #--------------------------------------------------------------------------
- # ● 开始选择物品
- #--------------------------------------------------------------------------
- def start_item_select
- # 生成物品窗口
- @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
- # 释放物品窗口
- @item_window.dispose
- @item_window = nil
- # 隐藏帮助窗口
- @help_window.visible = false
- # 有效化角色指令窗口
- @actor_command_window.active = true
- @actor_command_window.visible = true
- end
- def escaping
- # 不能逃跑的情况下
- if $game_temp.battle_can_escape == false
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 演奏确定 SE
- $game_system.se_play($data_system.decision_se)
- # 逃走处理
- @actor_command_window.active = false
- @actor_command_window.visible = false
- update_phase2_escape
- end
- end
- module Momo_IconCommand
- # 图标名称设定
- ATTACK_ICON_NAME = "攻击" # 攻撃
- SKILL_ICON_NAME = "技能" # 特技
- GUARD_ICON_NAME = "防御" # 防御
- ITEM_ICON_NAME = "物品" # 物品
- ESCAPE_ICON_NAME = "逃跑" # 逃跑
- # X坐标修正
- X_PLUS = 30#-120
- # Y坐标修正
- Y_PLUS = -60#10
- # 选择时图标的动作
- # 0:静止 1:放大
- SELECT_TYPE = 0
- # 闪烁时光芒的颜色
- FLASH_COLOR = Color.new(255, 255, 255, 128)
- # 闪烁时间
- FLASH_DURATION = 10
- # 闪烁间隔
- FLASH_INTERVAL = 20
- # 是否写出文字的名称
- COM_NAME_DROW = true
- # 文字名称是否移动
- COM_NAME_MOVE = true
- # 文字内容
- ATTACK_NAME = "攻击" # 攻击
- SKILL_NAME = "特技" # 特技
- GUARD_NAME = "防御" # 防御
- ITEM_NAME = "物品" # 物品
- ESCAPE_NAME = "逃跑" # 逃跑
- # 文字颜色
- COM_NAME_COLOR = Color.new(255, 255, 255, 255)
- # 文字坐标修正
- COM_NAME_X_PLUS = 0
- COM_NAME_Y_PLUS = 0
- end
- class Window_CommandIcon < Window_Selectable
- attr_accessor :last_index
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(x, y, commands)
- super(x, y, 32, 32)
- # ウィンドウスキンに空文字列を指定してウィンドウを描画しないようにする
- self.windowskin = RPG::Cache.windowskin("")
- @item_max = commands.size
- @commands = commands
- @column_max = commands.size
- @index = 0
- @last_index = nil
- @name_sprite = nil
- @sprite = []
- refresh
- end
- def dispose
- super
- for sprite in @sprite
- sprite.dispose unless sprite.nil?
- end
- @name_sprite.dispose unless @name_sprite.nil?
- end
- #--------------------------------------------------------------------------
- # ● リフレッシュ
- #--------------------------------------------------------------------------
- def refresh
- @name_sprite.dispose unless @name_sprite.nil?
- for sprite in @sprite
- sprite.dispose unless sprite.nil?
- end
- @name_sprite = nil
- draw_com_name if Momo_IconCommand::COM_NAME_DROW
- @sprite = []
- for i in 0...@item_max
- draw_item(i)
- end
- end
- #--------------------------------------------------------------------------
- # ● 項目の描画
- #--------------------------------------------------------------------------
- def draw_item(index)
- @sprite[index] = Sprite_Icon.new(nil, @commands[index])
- @sprite[index].z = self.z + 100##########################
- end
- def draw_com_name
- @name_sprite = Sprite_Comm_Name.new(nil, get_com_name)
-
- end
-
- # 更新
- def update
- super
- icon_update
- com_name_update if Momo_IconCommand::COM_NAME_DROW
- if move_index?
- @last_index = self.index
- end
- end
- # アイコンの更新
- def icon_update
- for i in [email protected]
- @sprite[i].active = (self.index == i)
- @sprite[i].x = self.x + i * 24
- @sprite[i].y = self.y + 0
- @sprite[i].z = (self.index == i) ? self.z + 2 : self.z + 1
- @sprite[i].visible = self.visible
- @sprite[i].update
- end
- end
- # コマンドネームの更新
- def com_name_update
- if move_index?
- @name_sprite.name = get_com_name
- end
- @name_sprite.x = self.x - 12 + Momo_IconCommand::COM_NAME_X_PLUS
- @name_sprite.y = self.y - 40 + Momo_IconCommand::COM_NAME_Y_PLUS
- @name_sprite.z = self.z + 1
- @name_sprite.active = self.active
- @name_sprite.visible = self.visible
- @name_sprite.update
- end
- def get_com_name
- make_name_set if @name_set.nil?
- name = @name_set[self.index]
- name = "" if name.nil?
- return name
- end
- def make_name_set
- @name_set = []
- @name_set[0] = Momo_IconCommand::ATTACK_NAME
- @name_set[1] = Momo_IconCommand::SKILL_NAME
- @name_set[2] = Momo_IconCommand::GUARD_NAME
- @name_set[3] = Momo_IconCommand::ITEM_NAME
- @name_set[4] = Momo_IconCommand::ESCAPE_NAME
- end
- def move_index?
- return self.index != @last_index
- end
- def need_reset
- @name_sprite.need_reset = true if Momo_IconCommand::COM_NAME_DROW
- end
- end
- # アイコン用スプライト
- class Sprite_Icon < Sprite
- attr_accessor :active
- attr_accessor :icon_name
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(viewport, icon_name)
- super(viewport)
- @icon_name = icon_name
- @last_icon = @icon_name
- @count = 0
- self.bitmap = RPG::Cache.icon(@icon_name)
- self.ox = self.bitmap.width / 2
- self.oy = self.bitmap.height / 2
- @active = false
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- def dispose
- if self.bitmap != nil
- self.bitmap.dispose
- end
- super
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- super
- if @icon_name != @last_icon
- @last_icon = @icon_name
- self.bitmap = RPG::Cache.icon(@icon_name)
- end
- if @active
- @count += 1
- case Momo_IconCommand::SELECT_TYPE
- when 0
- icon_flash
- when 1
- icon_zoom
- end
- @count = 0 if @count == 20
- else
- icon_reset
- end
- end
- def icon_flash
- if @count % Momo_IconCommand::FLASH_INTERVAL == 0 or @count == 1
- self.flash(Momo_IconCommand::FLASH_COLOR, Momo_IconCommand::FLASH_DURATION)
- end
- end
- def icon_zoom
- case @count
- when 1..10
- zoom = 1.0 + @count / 10.0
- when 11..20
- zoom = 2.0 - (@count - 10) / 10.0
- end
- self.zoom_x = zoom
- self.zoom_y = zoom
- end
- def icon_reset
- @count = 0
- self.zoom_x = 1.0
- self.zoom_y = 1.0
- end
- end
- # コマンドネーム用スプライト
- class Sprite_Comm_Name < Sprite
- attr_accessor :active
- attr_accessor :name
- attr_accessor :need_reset
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(viewport, name)
- super(viewport)
- @name = name
- @last_name = nil
- @count = 0
- @x_plus = 0
- @opa_plus = 0
- @need_reset = false
- @active = false
- self.bitmap = Bitmap.new(160, 32)
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- def dispose
- if self.bitmap != nil
- self.bitmap.dispose
- end
- super
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- super
- if @active
- if need_reset?
- @need_reset = false
- @last_name = @name
- text_reset
- end
- move_text if Momo_IconCommand::COM_NAME_MOVE
- end
- end
- def move_text
- @count += 1
- @x_plus = [@count * 8, 80].min
- self.x = self.x - 80 + @x_plus
- self.opacity = @count * 25
- end
- def text_reset
- @count = 0
- @x_plus = 0
- self.bitmap.clear
- self.bitmap.font.color = Momo_IconCommand::COM_NAME_COLOR
- if @name == Momo_IconCommand::ESCAPE_NAME and $game_temp.battle_can_escape == false
- self.bitmap.font.color = Color.new(192, 192, 192, 255)
- else
- self.bitmap.font.color = Momo_IconCommand::COM_NAME_COLOR
- end
- self.bitmap.draw_text(0, 0, 160, 32, @name)
- end
- def need_reset?
- return (@name != @last_name or @need_reset)
- end
- end
- class Scene_Battle
- #--------------------------------------------------------------------------
- # ● プレバトルフェーズ開始
- #--------------------------------------------------------------------------
- alias scene_battle_icon_command_start_phase1 start_phase1
- def start_phase1
- com1 = Momo_IconCommand::ATTACK_ICON_NAME
- com2 = Momo_IconCommand::SKILL_ICON_NAME
- com3 = Momo_IconCommand::GUARD_ICON_NAME
- com4 = Momo_IconCommand::ITEM_ICON_NAME
- com5 = Momo_IconCommand::ESCAPE_ICON_NAME
- @actor_command_window = Window_CommandIcon.new(0, 0, [com1, com2, com3, com4, com5])
- @actor_command_window.y = 160
- @actor_command_window.back_opacity = 160
- @actor_command_window.active = false
- @actor_command_window.visible = false
- @actor_command_window.update
- scene_battle_icon_command_start_phase1
- end
- #--------------------------------------------------------------------------
- # ● アクターコマンドウィンドウのセットアップ
- #--------------------------------------------------------------------------
- alias scene_battle_icon_command_phase3_setup_command_window phase3_setup_command_window
- def phase3_setup_command_window
- scene_battle_icon_command_phase3_setup_command_window
- # アクターコマンドウィンドウの位置を設定
- @actor_command_window.x = command_window_actor_x(@actor_index)
- @actor_command_window.y = command_window_actor_y(@actor_index)
- @actor_command_window.need_reset
- end
- def command_window_actor_x(index)
- #$game_party.actors[index].screen_x + Momo_IconCommand::X_PLUS
- index * 160 + Momo_IconCommand::X_PLUS
- end
- def command_window_actor_y(index)
- #$game_party.actors[index].screen_y + Momo_IconCommand::Y_PLUS
- 390 + Momo_IconCommand::Y_PLUS
- end
- end
- #==============================================================================
- # 本脚本来自www.66RPG.com,使用和转载请保留此信息
- #==============================================================================
- $data_system_level_up_se = "" #升级时的音效设置
- $data_system_level_up_me = "Audio/ME/007-Fanfare01" # 升级时播放的ME
- $data_system_skilllearn_se = "Audio/SE/106-Heal02" # 学会特技时播放的声效。
- #=============================================================
- # ■ Window_LevelUpWindow
- #-------------------------------------------------------------------
- # バトル終了時、レベルアップした場合にステータスを表示するウィンドウです。
- #=============================================================
- class Window_LevelUpWindow < Window_Base
- #---------------------------------------------------------
- # ● オブジェクト初期化
- #------------------------------------------------------
- def initialize(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
- super(0, 128, 160, 192)
- self.z = 999
- self.contents = Bitmap.new(width - 32, height - 32)
- self.visible = false
- self.back_opacity = 160
- refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
- end
- #-----------------------------------------------------------
- # ● リフレッシュ
- #---------------------------------------------------------
- def refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int)
- self.contents.clear
- self.contents.font.color = system_color
- self.contents.font.size = 14
- self.contents.draw_text( 0, 0, 160, 24, "等级上升")
- self.contents.font.size = 18
- self.contents.draw_text( 0, 28, 160, 24, $data_system.words.hp)
- self.contents.draw_text( 0, 50, 160, 24, $data_system.words.sp)
- self.contents.font.size = 14
- self.contents.draw_text( 0, 72, 80, 24, $data_system.words.str)
- self.contents.draw_text( 0, 94, 80, 24, $data_system.words.dex)
- self.contents.draw_text( 0, 116, 80, 24, $data_system.words.agi)
- self.contents.draw_text( 0, 138, 80, 24, $data_system.words.int)
- self.contents.draw_text(92, 0, 128, 24, "→")
- self.contents.draw_text(76, 28, 128, 24, "=")
- self.contents.draw_text(76, 50, 128, 24, "=")
- self.contents.draw_text(76, 72, 128, 24, "=")
- self.contents.draw_text(76, 94, 128, 24, "=")
- self.contents.draw_text(76, 116, 128, 24, "=")
- self.contents.draw_text(76, 138, 128, 24, "=")
- self.contents.font.color = normal_color
- self.contents.draw_text( 0, 0, 88, 24, last_lv.to_s, 2)
- self.contents.draw_text( 0, 28, 72, 24, "+" + up_hp.to_s, 2)
- self.contents.draw_text( 0, 50, 72, 24, "+" + up_sp.to_s, 2)
- self.contents.draw_text( 0, 72, 72, 24, "+" + up_str.to_s, 2)
- self.contents.draw_text( 0, 94, 72, 24, "+" + up_dex.to_s, 2)
- self.contents.draw_text( 0, 116, 72, 24, "+" + up_agi.to_s, 2)
- self.contents.draw_text( 0, 138, 72, 24, "+" + up_int.to_s, 2)
- self.contents.font.size = 20
- self.contents.draw_text( 0, 0, 128, 24, actor.level.to_s, 2)
- self.contents.draw_text( 0, 26, 128, 24, actor.maxhp.to_s, 2)
- self.contents.draw_text( 0, 48, 128, 24, actor.maxsp.to_s, 2)
- self.contents.draw_text( 0, 70, 128, 24, actor.str.to_s, 2)
- self.contents.draw_text( 0, 92, 128, 24, actor.dex.to_s, 2)
- self.contents.draw_text( 0, 114, 128, 24, actor.agi.to_s, 2)
- self.contents.draw_text( 0, 136, 128, 24, actor.int.to_s, 2)
- end
- end
- #===========================================================
- # ■ Window_SkillLearning
- #------------------------------------------------------------------------------
- # レベルアップ時などにスキルを習得した場合にそれを表示するウィンドウです。
- #=============================================================
- class Window_SkillLearning < Window_Base
- #-------------------------------------------------------------
- # ● 公開インスタンス変数
- #-----------------------------------------------------------
- attr_reader :learned # スキルを習得したかどうか
- #----------------------------------------------------------
- # ● オブジェクト初期化
- #----------------------------------------------------------
- def initialize(class_id, last_lv, now_lv)
- super(160, 64, 320, 64)
- self.z = 999
- self.contents = Bitmap.new(width - 32, height - 28) # わざと▽を表示
- self.visible = false
- self.back_opacity = 160
- @learned = false
- refresh(class_id, last_lv, now_lv)
- end
- #------------------------------------------------------------
- # ● リフレッシュ
- #-------------------------------------------------------
- def refresh(class_id, last_lv, now_lv)
- for i in 0...$data_classes[class_id].learnings.size
- learn_lv = $data_classes[class_id].learnings[i].level
- # 今回のレベルアップ範囲で習得するスキルの場合
- if learn_lv > last_lv and learn_lv <= now_lv
- @learned = true
- # SEの再生
- if $data_system_skilllearn_se != ""
- Audio.se_play($data_system_skilllearn_se)
- end
- # 各描写
- skill_name = $data_skills[$data_classes[class_id].learnings[i].skill_id].name
- self.contents.clear
- self.contents.font.color = text_color(0)
- self.contents.draw_text(0,0,448,32, "学会特技:"+skill_name)
- self.contents.font.color = text_color(6)
- self.contents.draw_text(0,0,448,32, " "+skill_name)
- self.contents.font.color = text_color(0)
- self.visible = true
- # メインループ
- loop do
- # ゲーム画面を更新
- Graphics.update
- # 入力情報を更新
- Input.update
- # フレーム更新
- update
- # 画面が切り替わったらループを中断
- if @learned == false
- break
- end
- end
- # メインループここまで
- end
- end
- end
- #-----------------------------------------------------------
- # ● フレーム更新
- #------------------------------------------------------------
- def update
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- @learned = false
- self.visible = false
- end
- end
- end
- #==================================================================
- # ■ Window_BattleStatus
- #==================================================================
- class Window_BattleStatus < Window_Base
- #---------------------------------------------------------
- # ● 追加?公開インスタンス変数
- #-------------------------------------------------------
- attr_accessor :level_up_flags # LEVEL UP!表示
- end
- #===============================================================
- # ■ Game_Battler
- #===============================================================
- class Game_Battler
- #--------------------------------------------------------------
- # ● 追加?公開インスタンス変数
- #----------------------------------------------------------
- attr_accessor :exp_gain_ban # EXP取得一時禁止
- #------------------------------------------------------
- # ● オブジェクト初期化
- #-----------------------------------------------------
- alias xrxs_bp10_initialize initialize
- def initialize
- @exp_gain_ban = false
- xrxs_bp10_initialize
- end
- #-------------------------------------------------------
- # ● ステート [EXP を獲得できない] 判定
- #-----------------------------------------------------
- alias xrxs_bp10_cant_get_exp? cant_get_exp?
- def cant_get_exp?
- if @exp_gain_ban == true
- return true
- else
- return xrxs_bp10_cant_get_exp?
- end
- end
- end
- #==============================================================
- # ■ Scene_Battle
- #==============================================================
- class Scene_Battle
- #--------------------------------------------------
- # ● アフターバトルフェーズ開始
- #--------------------------------------------------
- alias xrxs_bp10_start_phase5 start_phase5
- def start_phase5
- # EXP 獲得禁止
- for i in 0...$game_party.actors.size
- $game_party.actors[i].exp_gain_ban = true
- end
- xrxs_bp10_start_phase5
- # EXP 獲得禁止の解除
- for i in 0...$game_party.actors.size
- $game_party.actors[i].exp_gain_ban = false
- end
- # EXPを初期化
- @exp_gained = 0
- for enemy in $game_troop.enemies
- # 獲得 EXPを追加 # エネミーが隠れ状態でない場合
- @exp_gained += enemy.exp if not enemy.hidden
- end
- # 設定
- @phase5_step = 1
- @exp_gain_actor = -1
- # リザルトウィンドウを表示
- @result_window.visible = true
- end
- #----------------------------------------------------------
- # ● フレーム更新 (アフターバトルフェーズ)
- #--------------------------------------------------------
- #alias xrxs_bp10_update_phase5 update_phase5
- def update_phase5
- case @phase5_step
- when 1
- update_phase5_step1
- else
- # ウェイトカウントが 0 より大きい場合
- if @phase5_wait_count > 0
- # ウェイトカウントを減らす
- @phase5_wait_count -= 1
- # ウェイトカウントが 0 になった場合
- if @phase5_wait_count == 0
- # リザルトウィンドウを表示
- #@result_window.visible = true
- # メインフェーズフラグをクリア
- $game_temp.battle_main_phase = false
- # ステータスウィンドウをリフレッシュ
- @status_window.refresh
- end
- return
- end
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # バトル終了
- battle_end(0)
- end
- # レベルアップしている場合は強制バトル終了
- battle_end(0) if @levelup_window != nil and @phase5_wait_count <= 0
- end
- end
- #-----------------------------------------------------------
- # ● フレーム更新 (アフターバトルフェーズ 1 : レベルアップ)
- #-----------------------------------------------------------
- def update_phase5_step1
- # C ボタンが押された場合
- if Input.trigger?(Input::C)
- # ウィンドウを閉じて次のアクターへ
- @levelup_window.visible = false if @levelup_window != nil
- @status_window.level_up_flags[@exp_gain_actor] = false
- phase5_next_levelup
- end
- end
- #---------------------------------------------------------
- # ● 次のアクターのレベルアップ表示へ
- #---------------------------------------------------------
- def phase5_next_levelup
- begin
- # 次のアクターへ
- @exp_gain_actor += 1
- # 最後のアクターの場合
- if @exp_gain_actor >= $game_party.actors.size
- # アフターバトルフェーズ開始
- @phase5_step = 0
- return
- end
- actor = $game_party.actors[@exp_gain_actor]
- if actor.cant_get_exp? == false
- # 現在の能力値を保持
- last_level = actor.level
- last_maxhp = actor.maxhp
- last_maxsp = actor.maxsp
- last_str = actor.str
- last_dex = actor.dex
- last_agi = actor.agi
- last_int = actor.int
- # 経験値取得の決定的瞬間(謎
- actor.exp += @exp_gained
- # 判定
- if actor.level > last_level
- # レベルアップした場合
- @status_window.level_up(@exp_gain_actor)
- # リザルトウィンドウを消す
- @result_window.visible = false
- # SEの再生
- if $data_system_level_up_se != ""
- Audio.se_play($data_system_level_up_se)
- end
- # MEの再生
- if $data_system_level_up_me != ""
- Audio.me_stop
- Audio.me_play($data_system_level_up_me)
- end
- # LEVEL-UPウィンドウの設定
- @levelup_window = Window_LevelUpWindow.new(actor, last_level,
- actor.maxhp - last_maxhp, actor.maxsp - last_maxsp, actor.str - last_str,
- actor.dex - last_dex, actor.agi - last_agi, actor.int - last_int)
- @levelup_window.x = 160 * @exp_gain_actor
- @levelup_window.visible = true
- # ステータスウィンドウをリフレッシュ
- @status_window.refresh
- # スキル習得ウィンドウの設定
- @skilllearning_window = Window_SkillLearning.new(actor.class_id, last_level, actor.level)
- # ウェイトカウントを設定
- @phase5_wait_count = 40
- @phase5_step = 1
- return
- end
- end
- end until false
- end
- end
- #=============================================================
- # 本脚本来自www.66RPG.com,使用和转载请保留此信息
- #=============================================================
复制代码 谢谢大家了。。。 |
|