# ▼▲▼ XRXS65A. CP制御ターンシステム「シンセ・ゲージ」 ▼▲▼ built201202
# by 桜雅 在土
#==============================================================================
# □ カスタマイズポイント
#==============================================================================
class XRXS65A
#--------------------------------------------------------------------------
# 「シンセ・ゲージ」
#--------------------------------------------------------------------------
SKIN = "123" # スキン
X = 2 # X 座標
Y = 0 # Y 座標
CHA = true #是否使用行走图来代替战斗图,建议使用默认RTP的人使用,否则需要给每个怪物配套与战斗图同名的行走图,色调将根据战斗图色调自动变更
N=5#隔几帧才刷新,这个数越大可以加快效率,但是图标的移动会看起来“一跳一跳”,不推荐大于10。
end
#==============================================================================
# --- CP メーターをまとめて管理するクラス、表示関係はすべてココ --- [再定義]
#==============================================================================
class CP_Meters
#--------------------------------------------------------------------------
# ○ オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
# シンセゲージの生成
@kk = Sprite.new
@kk.bitmap = RPG::Cache.windowskin("456").dup
@kk.x = 596
@kk.y = 0
@kk.z = 17
@base = Sprite.new
@base.bitmap = RPG::Cache.windowskin(XRXS65A::SKIN).dup
@base.x = XRXS65A::X
@base.y = XRXS65A::Y+20
@base.z = 16
@width = @base.bitmap.width
[url=home.php?mod=space&uid=291977]@height[/url] = @base.bitmap.height
@icon_set = []
refresh
end
#--------------------------------------------------------------------------
# ○ リフレッシュ
#--------------------------------------------------------------------------
def refresh(enemy=nil,force=false)
if Graphics.frame_count % XRXS65A::N == 0 or force==true
# 生成すべきバトラーの取得
need_initializes = []
for battler in $game_party.actors + $game_troop.enemies
exist = false
for set in @icon_set
exist |= (set[1] == battler)
end
need_initializes.push(battler) unless exist
end
for battler in need_initializes
iconname = nil
if battler.is_a?(Game_Actor)
en = $data_actors[battler.id]
else
en = $data_enemies[battler.id]
end
sprite = Sprite.new
if XRXS65A::CHA==true
bitmap = RPG::Cache.character(en.battler_name, en.battler_hue).dup
cw=bitmap.width/4
ch=bitmap.height/4
src_rect = Rect.new(0, 0, cw, ch)
sprite.y = 32+XRXS65A::Y
sprite.z = 17
sprite.bitmap = Bitmap.new(cw, ch)
sprite.bitmap.blt(0, 0, bitmap, src_rect)
sprite.oy=ch/2
sprite.ox=cw/2-25
else
sprite.bitmap = RPG::Cache.battler(en.battler_name, en.battler_hue).dup
sprite.y = 0+XRXS65A::Y
sprite.z = 17
sprite.zoom_x = 64.0/sprite.bitmap.height
sprite.zoom_y = 64.0/sprite.bitmap.height
end
# item=[sprite,name]
@icon_set.push([sprite, battler])
end
# 更新
for set in @icon_set
set[0].color = Color.new(0,0,0,0)
set[0].visible = true if set[0].visible ==false
if set[1].rtp>0
set[0].color = Color.new(0,255,255,128)
set[0].x = XRXS65A::X + @width * [[set[1].rt,0].max,set[1].rtp].min / set[1].rtp - 12
set[0].visible = false if set[1].dead? or !set[1].exist?
elsif set[1].guarding?
set[0].color = Color.new(255,255,0,128)
set[0].x = XRXS65A::X + @width * [[set[1].atp,0].max,100].min / 100 - 12
set[0].visible = false if set[1].dead? or !set[1].exist?
else
set[0].x = XRXS65A::X + @width * [[set[1].atp,0].max,100].min / 100 - 12
set[0].visible = false if set[1].dead? or !set[1].exist?
end
if set[1].atp>=100 and set[1].rtp==0
set[0].color = Color.new(255,255,255,128)
elsif set[1]==enemy
set[0].color = Color.new(255,0,0,128)
end
end
end
end
#----------敌人变身时的处理
def change(enemy)
for set in @icon_set
if set[1] == enemy
if enemy.is_a?(Game_Actor)
en = $data_actors[enemy.id]
else
en = $data_enemies[enemy.id]
end
if XRXS65A::CHA==true
bitmap = RPG::Cache.character(en.battler_name, en.battler_hue).dup
cw=bitmap.width/4
ch=bitmap.height/4
src_rect = Rect.new(0, 0, cw, ch)
set[0].bitmap.dispose
set[0].bitmap = Bitmap.new(cw, ch)
set[0].bitmap.blt(0, 0, bitmap, src_rect)
set[0].oy=ch/2
set[0].ox=cw/2-25
set[0].y = 32+XRXS65A::Y
set[0].z = 17
else
set[0].bitmap = RPG::Cache.battler(en.battler_name, en.battler_hue).dup
set[0].y = 0+XRXS65A::Y
set[0].z = 17
set[0].zoom_x = 64.0/set[0].bitmap.height
set[0].zoom_y = 64.0/set[0].bitmap.height
end
end
end
end
#--------------------------------------------------------------------------
# ○ 可視状態
#--------------------------------------------------------------------------
def visible=(b)
@base.visible = b
@icon_set.each{|set| set[0].visible = b }
end
#--------------------------------------------------------------------------
# ○ 解放
#--------------------------------------------------------------------------
def dispose
@base.dispose
@kk.dispose
@icon_set.each{|set| set[0].dispose }
end
end
#==============================================================================
#其它的重定义部分
#==============================================================================
#战斗中敌人变身追加change过程
class Interpreter
def command_336
# 获取敌人
enemy = $game_troop.enemies[@parameters[0]]
# 变身处理
if enemy != nil
enemy.transform(@parameters[1])
end
$scene.cp_meters.change(enemy)#新增,调用change #zzzzzzzzzzzzzzzzzzzzzzzzzzzzz
# 继续
return true
end
end
#==============================================================================
#RTAB追加变数,重定义
#==============================================================================
class Scene_Battle
attr_accessor :cp_meters#zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
#--------------------------------------------------------------------------
# ○ 重新定义main过程,追加CP条的生成,包括“RTAB连击数-计算部分”里对此部分的追加定义,如果脱离“RTAB连击数-计算部分”,请删除标记了"#$$$$$"的三个语句
#--------------------------------------------------------------------------
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
# 戦闘用の各種一時データを初期化
Graphics.frame_rate = 60 #特别说明,这行就是RTAB战斗时加速的原因
$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)
atb_setup
# アクターコマンドウィンドウを作成
#==============================================================================
#RTAB观光游第三站,战斗菜单增加逃跑选项
#==============================================================================
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])
# @actor_command_window.y = 160
@actor_command_window.y = 128
@actor_command_window.back_opacity = 160
@actor_command_window.active = false
@actor_command_window.visible = false
#==============================================================================
# その他のウィンドウを作成
#------------------------------------------------------------------------------
#RTAB观光游第一站,去除“战斗/逃跑”选项部分
# @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
@cp_meters = CP_Meters.new#zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
@combohit_window = Window_ComboHit.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
@cp_meters.dispose#zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
# ウィンドウを解放
@combohit_window.dispose#$$$$$$$$$$$$$
# コンボクリア
$game_party.actors.each {|actor| actor.combohit_clear}#$$$$$$$$$$$$$
#------------------------------------------------------------------------------
#RTAB观光游第一站,去除“战斗/逃跑”选项部分
# @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
#
#==============================================================================
#选择敌人时的重定义,这是为了实现选择敌人时的变色效果,由于这是针对“RTAB战斗特效” 重定义,而请不要脱离“RTAB战斗特效”
#==============================================================================
#--------------------------------------------------------------------------
# ● 开始选择敌人#(武器范围定义必须)(1.03修正显示BUG)
#--------------------------------------------------------------------------
def start_enemy_select
for i in $game_troop.enemies
break if i.exist?
end#得到1位置的敌人
$scene.cp_meters.refresh(i,true) #zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
@active_actor.set_xrxs19_special_scope(@active_actor.equip_element_set) if @skill_window == nil
@active_actor.set_xrxs19_special_scope(@active_actor.skill_element_set(@skill)) if @skill_window != nil
if @active_actor.current_action.scope_force == 3
# 生成敌人箭头
@actor_arrow = Arrow_Actor.new(@spriteset.viewport2)
# 关联帮助窗口
@actor_arrow.help_window = @help_window
else
# 生成敌人箭头
@enemy_arrow = Arrow_Enemy.new(@spriteset.viewport1)
# 关联帮助窗口
@enemy_arrow.help_window = @help_window
end
# 无效化角色指令窗口
@actor_command_window.active = false
@actor_command_window.visible = false
end
#--------------------------------------------------------------------------
# ● 结束选择敌人#武器范围定义必须)
#--------------------------------------------------------------------------
def end_enemy_select
$scene.cp_meters.refresh(nil,true) #zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
# 释放敌人箭头
@enemy_arrow.dispose if @enemy_arrow != nil
@actor_arrow.dispose if @actor_arrow != nil
@enemy_arrow = nil
@actor_arrow = nil
# 指令为 [战斗] 的情况下
if @actor_command_window.index == 0
# 有效化角色指令窗口
@actor_command_window.active = true
@actor_command_window.visible = true
# 隐藏帮助窗口
@help_window.visible = false
end
end
end
#==============================================================================
#修改RTAB默认的刷新方法
#==============================================================================
class Window_BattleStatus < Window_Base
def at_refresh(number = 0)
$scene.cp_meters.refresh
end
end
#==============================================================================
#清除RTAB的描绘AT条过程
#==============================================================================
class Window_Base < Window
def draw_actor_atg(actor, x, y, width = 144)
end
end
#==============================================================================
# ■ Arrow_Enemy
#------------------------------------------------------------------------------
# 重新定义的选择敌人箭头,也是为了实现择敌人时的变色效果
#==============================================================================
class Arrow_Enemy < Arrow_Base
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# $scene.cp_meters.refresh(enemy)
super
# 存在しないエネミーを指していたら飛ばす
$game_troop.enemies.size.times do
break if self.enemy.exist?
@index += 1
@index %= $game_troop.enemies.size
end
# カーソル右
if Input.repeat?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
$game_troop.enemies.size.times do
@index += 1
@index %= $game_troop.enemies.size
break if self.enemy.exist?
end
$scene.camera = "select"
zoom = 1 / self.enemy.zoom
$scene.spriteset.screen_target(self.enemy.attack_x(zoom) * 0.75,
self.enemy.attack_y(zoom) * 0.75, zoom)
$scene.cp_meters.refresh(enemy,true) #zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
end
# カーソル左
if Input.repeat?(Input::LEFT)
$game_system.se_play($data_system.cursor_se)
$game_troop.enemies.size.times do
@index += $game_troop.enemies.size - 1
@index %= $game_troop.enemies.size
break if self.enemy.exist?
end
$scene.camera = "select"
zoom = 1 / self.enemy.zoom
$scene.spriteset.screen_target(self.enemy.attack_x(zoom) * 0.75,
self.enemy.attack_y(zoom) * 0.75, zoom)
$scene.cp_meters.refresh(enemy,true) #zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
end
# スプライトの座標を設定
if self.enemy != nil
self.x = self.enemy.screen_x
self.y = self.enemy.screen_y
end
end