赞 | 0 |
VIP | 3 |
好人卡 | 2 |
积分 | 1 |
经验 | 4298 |
最后登录 | 2015-3-11 |
在线时间 | 21 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 72
- 在线时间
- 21 小时
- 注册时间
- 2009-3-15
- 帖子
- 262
|
6楼
楼主 |
发表于 2009-5-28 07:38:42
|
只看该作者
- # ▼▲▼ XRXS65A. CP制御ターンシステム「シンセ・ゲージ」 ▼▲▼ built201202
- # by 桜雅 在土
- #==============================================================================
- # □ カスタマイズポイント
- #==============================================================================
- class XRXS65A
- #--------------------------------------------------------------------------
- # 「シンセ・ゲージ」
- #--------------------------------------------------------------------------
- SKIN = "123" # スキン
- X = 2 # X 座標
- Y = 0 # Y 座標
- CHA = true #是否使用行走图来代替战斗图,建议使用默认RTP的人使用,否则需要给每个怪物配套与战斗图同名的行走图,色调将根据战斗图色调自动变更
- N=1#隔几帧才刷新,这个数越大可以加快效率,但是图标的移动会看起来“一跳一跳”,不推荐大于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
- @height = @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
- end
复制代码
以上为脚本 |
|