查看: 2185|回复: 1

[已经解决] 关于CP脚本的问题

[复制链接]
梦石
0
星屑
50
在线时间
157 小时
注册时间
2013-8-20
回帖
189
发表于 2014-7-24 14:47:26 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
为什么我每次用这个脚本的时候一打开游戏就出错?跪求解决方法。 360截图20140724134407812.jpg
[pre lang="ruby" line="1"]# ▼▲▼ 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
    @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[/pre]
梦石
0
星屑
170
在线时间
809 小时
注册时间
2013-8-23
回帖
773

开拓者

发表于 2014-7-24 15:02:15 | 显示全部楼层
多写了一个end吧

点评

看缩进似乎是少写了一个  发表于 2014-7-24 15:06

评分

参与人数 1星屑 +66 收起 理由
RyanBern + 66 塞糖

查看全部评分

遗失的签名。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部