Project1

标题: 关于CP脚本的问题 [打印本页]

作者: 艾孜哈尔    时间: 2014-7-24 14:47
标题: 关于CP脚本的问题
为什么我每次用这个脚本的时候一打开游戏就出错?跪求解决方法。
RUBY 代码复制
  1. # ▼▲▼ XRXS65A. CP制御ターンシステム「シンセ・ゲージ」 ▼▲▼ built201202
  2. # by 桜雅 在土
  3.  
  4. #==============================================================================
  5. # □ カスタマイズポイント
  6. #==============================================================================
  7. class XRXS65A
  8.   #--------------------------------------------------------------------------
  9.   # 「シンセ・ゲージ」
  10.   #--------------------------------------------------------------------------
  11.   SKIN = "123"  # スキン
  12.   X    =  2         # X 座標
  13.   Y    =  0         # Y 座標
  14.   CHA = true   #是否使用行走图来代替战斗图,建议使用默认RTP的人使用,否则需要给每个怪物配套与战斗图同名的行走图,色调将根据战斗图色调自动变更
  15.   N=5#隔几帧才刷新,这个数越大可以加快效率,但是图标的移动会看起来“一跳一跳”,不推荐大于10。
  16. end
  17. #==============================================================================
  18. # --- CP メーターをまとめて管理するクラス、表示関係はすべてココ --- [再定義]
  19. #==============================================================================
  20. class CP_Meters
  21.   #--------------------------------------------------------------------------
  22.   # ○ オブジェクト初期化
  23.   #--------------------------------------------------------------------------
  24.   def initialize
  25.     # シンセゲージの生成
  26.     @kk = Sprite.new
  27.     @kk.bitmap = RPG::Cache.windowskin("456").dup
  28.     @kk.x = 596
  29.     @kk.y = 0
  30.     @kk.z = 17
  31.  
  32.     @base = Sprite.new
  33.     @base.bitmap = RPG::Cache.windowskin(XRXS65A::SKIN).dup
  34.     @base.x = XRXS65A::X
  35.     @base.y = XRXS65A::Y+20
  36.     @base.z = 16
  37.     @width  = @base.bitmap.width
  38.     [url=home.php?mod=space&uid=291977]@height[/url] = @base.bitmap.height
  39.     @icon_set = []
  40.     refresh
  41.   end
  42.   #--------------------------------------------------------------------------
  43.   # ○ リフレッシュ
  44.   #--------------------------------------------------------------------------
  45.   def refresh(enemy=nil,force=false)
  46.     if Graphics.frame_count % XRXS65A::N  == 0 or force==true
  47.     # 生成すべきバトラーの取得
  48.     need_initializes = []
  49.     for battler in $game_party.actors + $game_troop.enemies
  50.       exist = false
  51.       for set in @icon_set
  52.         exist |= (set[1] == battler)
  53.       end
  54.       need_initializes.push(battler) unless exist
  55.     end
  56.     for battler in need_initializes
  57.       iconname = nil
  58.       if battler.is_a?(Game_Actor)
  59.         en = $data_actors[battler.id]
  60.       else
  61.         en = $data_enemies[battler.id]
  62.       end
  63.       sprite = Sprite.new
  64.  
  65.       if XRXS65A::CHA==true
  66.       bitmap = RPG::Cache.character(en.battler_name, en.battler_hue).dup
  67.       cw=bitmap.width/4
  68.       ch=bitmap.height/4
  69.       src_rect = Rect.new(0, 0, cw, ch)
  70.       sprite.y = 32+XRXS65A::Y
  71.       sprite.z = 17
  72.       sprite.bitmap = Bitmap.new(cw, ch)  
  73.       sprite.bitmap.blt(0, 0, bitmap, src_rect)
  74.       sprite.oy=ch/2
  75.       sprite.ox=cw/2-25
  76.       else   
  77.       sprite.bitmap = RPG::Cache.battler(en.battler_name, en.battler_hue).dup
  78.       sprite.y = 0+XRXS65A::Y  
  79.       sprite.z = 17
  80.       sprite.zoom_x = 64.0/sprite.bitmap.height
  81.       sprite.zoom_y = 64.0/sprite.bitmap.height  
  82.       end
  83.  
  84.  
  85.      # item=[sprite,name]
  86.  
  87.       @icon_set.push([sprite, battler])
  88.     end
  89.     # 更新
  90.     for set in @icon_set
  91.     set[0].color = Color.new(0,0,0,0)   
  92.     set[0].visible = true if set[0].visible ==false   
  93.     if set[1].rtp>0
  94.       set[0].color = Color.new(0,255,255,128)
  95.       set[0].x = XRXS65A::X + @width * [[set[1].rt,0].max,set[1].rtp].min / set[1].rtp - 12
  96.       set[0].visible = false if set[1].dead? or !set[1].exist?
  97.     elsif set[1].guarding?
  98.       set[0].color = Color.new(255,255,0,128)
  99.       set[0].x = XRXS65A::X + @width * [[set[1].atp,0].max,100].min / 100 - 12
  100.       set[0].visible = false if set[1].dead? or !set[1].exist?
  101.     else  
  102.       set[0].x = XRXS65A::X + @width * [[set[1].atp,0].max,100].min  / 100 - 12
  103.       set[0].visible = false if set[1].dead? or !set[1].exist?
  104.     end
  105.     if set[1].atp>=100 and set[1].rtp==0
  106.       set[0].color = Color.new(255,255,255,128)
  107.     elsif set[1]==enemy  
  108.       set[0].color = Color.new(255,0,0,128)
  109.     end
  110.     end
  111.     end
  112.  
  113.   end
  114.   #----------敌人变身时的处理
  115.   def change(enemy)
  116.   for set in @icon_set
  117.      if  set[1] == enemy
  118.        if enemy.is_a?(Game_Actor)
  119.        en = $data_actors[enemy.id]
  120.        else
  121.        en = $data_enemies[enemy.id]
  122.      end
  123.        if XRXS65A::CHA==true
  124.         bitmap = RPG::Cache.character(en.battler_name, en.battler_hue).dup
  125.         cw=bitmap.width/4
  126.         ch=bitmap.height/4
  127.         src_rect = Rect.new(0, 0, cw, ch)
  128.         set[0].bitmap.dispose
  129.         set[0].bitmap = Bitmap.new(cw, ch)  
  130.         set[0].bitmap.blt(0, 0, bitmap, src_rect)
  131.         set[0].oy=ch/2
  132.         set[0].ox=cw/2-25
  133.         set[0].y = 32+XRXS65A::Y
  134.         set[0].z = 17   
  135.        else   
  136.        set[0].bitmap = RPG::Cache.battler(en.battler_name, en.battler_hue).dup
  137.        set[0].y = 0+XRXS65A::Y
  138.        set[0].z = 17
  139.        set[0].zoom_x = 64.0/set[0].bitmap.height
  140.        set[0].zoom_y = 64.0/set[0].bitmap.height  
  141.        end
  142.      end   
  143.    end
  144. end
  145.   #--------------------------------------------------------------------------
  146.   # ○ 可視状態
  147.   #--------------------------------------------------------------------------
  148.   def visible=(b)
  149.     @base.visible = b
  150.     @icon_set.each{|set| set[0].visible = b }
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ○ 解放
  154.   #--------------------------------------------------------------------------
  155.   def dispose
  156.     @base.dispose
  157.     @kk.dispose
  158.     @icon_set.each{|set| set[0].dispose }
  159.   end
  160. end
  161.  
  162.  
  163. #==============================================================================
  164. #其它的重定义部分
  165. #==============================================================================
  166. #战斗中敌人变身追加change过程
  167. class Interpreter
  168. def command_336
  169.     # 获取敌人
  170.     enemy = $game_troop.enemies[@parameters[0]]
  171.     # 变身处理
  172.     if enemy != nil
  173.       enemy.transform(@parameters[1])
  174.     end
  175.     $scene.cp_meters.change(enemy)#新增,调用change #zzzzzzzzzzzzzzzzzzzzzzzzzzzzz
  176.     # 继续
  177.     return true
  178.   end
  179. end
  180. #==============================================================================
  181. #RTAB追加变数,重定义
  182. #==============================================================================
  183. class Scene_Battle
  184.     attr_accessor :cp_meters#zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
  185. #--------------------------------------------------------------------------
  186. # ○ 重新定义main过程,追加CP条的生成,包括“RTAB连击数-计算部分”里对此部分的追加定义,如果脱离“RTAB连击数-计算部分”,请删除标记了"#$$$$$"的三个语句
  187. #--------------------------------------------------------------------------
  188. #--------------------------------------------------------------------------
  189.   # ● メイン処理
  190.   #--------------------------------------------------------------------------
  191.   def main
  192.     # 戦闘用の各種一時データを初期化
  193.     Graphics.frame_rate = 60 #特别说明,这行就是RTAB战斗时加速的原因
  194.     $game_temp.in_battle = true
  195.     $game_temp.battle_turn = 0
  196.     $game_temp.battle_event_flags.clear
  197.     $game_temp.battle_abort = false
  198.     $game_temp.battle_main_phase = false
  199.     $game_temp.battleback_name = $game_map.battleback_name
  200.     $game_temp.forcing_battler = nil
  201.     # バトルイベント用インタプリタを初期化
  202.     $game_system.battle_interpreter.setup(nil, 0)
  203.     # トループを準備
  204.     @troop_id = $game_temp.battle_troop_id
  205.     $game_troop.setup(@troop_id)
  206.     atb_setup
  207.     # アクターコマンドウィンドウを作成
  208. #==============================================================================
  209. #RTAB观光游第三站,战斗菜单增加逃跑选项
  210. #==============================================================================     
  211.     s1 = $data_system.words.attack
  212.     s2 = $data_system.words.skill
  213.     s3 = $data_system.words.guard
  214.     s4 = $data_system.words.item
  215.     s5 = "逃跑"
  216.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4,s5])     
  217. #   @actor_command_window.y = 160
  218.     @actor_command_window.y = 128
  219.     @actor_command_window.back_opacity = 160
  220.     @actor_command_window.active = false
  221.     @actor_command_window.visible = false
  222. #==============================================================================     
  223.     # その他のウィンドウを作成
  224. #------------------------------------------------------------------------------
  225. #RTAB观光游第一站,去除“战斗/逃跑”选项部分     
  226. #    @party_command_window = Window_PartyCommand.new
  227. #------------------------------------------------------------------------------     
  228.     @help_window = Window_Help.new
  229.     @help_window.back_opacity = 160
  230.     @help_window.visible = false
  231.     @status_window = Window_BattleStatus.new
  232.     @message_window = Window_Message.new
  233.     @cp_meters = CP_Meters.new#zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
  234.     @combohit_window = Window_ComboHit.new#$$$$$$$$$$$$$
  235.     # スプライトセットを作成
  236.     @spriteset = Spriteset_Battle.new
  237.     # ウェイトカウントを初期化
  238.     @wait_count = 0
  239.     # トランジション実行
  240.     if $data_system.battle_transition == ""
  241.       Graphics.transition(20)
  242.     else
  243.       Graphics.transition(40, "Graphics/Transitions/" +
  244.         $data_system.battle_transition)
  245.     end
  246.     # プレバトルフェーズ開始
  247.     start_phase1
  248.     # メインループ
  249.     loop do
  250.       # ゲーム画面を更新
  251.       Graphics.update
  252.       # 入力情報を更新
  253.       Input.update
  254.       # フレーム更新
  255.       update
  256.       # 画面が切り替わったらループを中断
  257.       if $scene != self
  258.         break
  259.       end
  260.     end
  261.     # マップをリフレッシュ
  262.     $game_map.refresh
  263.     # トランジション準備
  264.     Graphics.freeze
  265.     # ウィンドウを解放
  266.     @actor_command_window.dispose
  267.     @cp_meters.dispose#zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
  268.     # ウィンドウを解放
  269.     @combohit_window.dispose#$$$$$$$$$$$$$
  270.     # コンボクリア
  271.     $game_party.actors.each {|actor| actor.combohit_clear}#$$$$$$$$$$$$$
  272. #------------------------------------------------------------------------------
  273. #RTAB观光游第一站,去除“战斗/逃跑”选项部分     
  274. #    @party_command_window.dispose
  275. #------------------------------------------------------------------------------     
  276.     @help_window.dispose
  277.     @status_window.dispose
  278.     @message_window.dispose
  279.     if @skill_window != nil
  280.       @skill_window.dispose
  281.     end
  282.     if @item_window != nil
  283.       @item_window.dispose
  284.     end
  285.     if @result_window != nil
  286.       @result_window.dispose
  287.     end
  288.     # スプライトセットを解放
  289.     @spriteset.dispose
  290.     # タイトル画面に切り替え中の場合
  291.     if $scene.is_a?(Scene_Title)
  292.       # 画面をフェードアウト
  293.       Graphics.transition
  294.       Graphics.freeze
  295.     end
  296.     # 戦闘テストからゲームオーバー画面以外に切り替え中の場合
  297.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  298.       $scene = nil
  299.     end
  300.   end
  301.   #  
  302.   #==============================================================================
  303.   #选择敌人时的重定义,这是为了实现选择敌人时的变色效果,由于这是针对“RTAB战斗特效” 重定义,而请不要脱离“RTAB战斗特效”  
  304.   #==============================================================================
  305. #--------------------------------------------------------------------------
  306. # ● 开始选择敌人#(武器范围定义必须)(1.03修正显示BUG)
  307. #--------------------------------------------------------------------------
  308.   def start_enemy_select   
  309.  
  310.     for i in $game_troop.enemies
  311.       break if i.exist?
  312.     end#得到1位置的敌人
  313.     $scene.cp_meters.refresh(i,true) #zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
  314.     @active_actor.set_xrxs19_special_scope(@active_actor.equip_element_set) if @skill_window == nil
  315.     @active_actor.set_xrxs19_special_scope(@active_actor.skill_element_set(@skill)) if @skill_window != nil
  316. if @active_actor.current_action.scope_force == 3
  317.    # 生成敌人箭头
  318.    @actor_arrow = Arrow_Actor.new(@spriteset.viewport2)
  319.    # 关联帮助窗口
  320.     @actor_arrow.help_window = @help_window
  321.   else
  322.     # 生成敌人箭头
  323.      @enemy_arrow = Arrow_Enemy.new(@spriteset.viewport1)
  324.      # 关联帮助窗口
  325.     @enemy_arrow.help_window = @help_window
  326.     end
  327.     # 无效化角色指令窗口
  328.     @actor_command_window.active = false
  329.     @actor_command_window.visible = false
  330.   end
  331. #--------------------------------------------------------------------------
  332. # ● 结束选择敌人#武器范围定义必须)
  333. #--------------------------------------------------------------------------
  334.   def end_enemy_select
  335.     $scene.cp_meters.refresh(nil,true) #zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
  336.     # 释放敌人箭头
  337.     @enemy_arrow.dispose if @enemy_arrow != nil
  338.     @actor_arrow.dispose if @actor_arrow != nil
  339.     @enemy_arrow = nil
  340.     @actor_arrow = nil
  341.     # 指令为 [战斗] 的情况下
  342.     if @actor_command_window.index == 0
  343.       # 有效化角色指令窗口
  344.       @actor_command_window.active = true
  345.       @actor_command_window.visible = true
  346.       # 隐藏帮助窗口
  347.       @help_window.visible = false
  348.     end
  349.   end
  350. end
  351. #==============================================================================
  352. #修改RTAB默认的刷新方法
  353. #==============================================================================
  354. class Window_BattleStatus < Window_Base
  355.   def at_refresh(number = 0)
  356.   $scene.cp_meters.refresh
  357. end
  358. end
  359. #==============================================================================
  360. #清除RTAB的描绘AT条过程
  361. #==============================================================================
  362. class Window_Base < Window
  363.   def draw_actor_atg(actor, x, y, width = 144)
  364.   end
  365. end
  366. #==============================================================================
  367. # ■ Arrow_Enemy
  368. #------------------------------------------------------------------------------
  369. # 重新定义的选择敌人箭头,也是为了实现择敌人时的变色效果
  370. #==============================================================================
  371.  
  372. class Arrow_Enemy < Arrow_Base
  373.   #--------------------------------------------------------------------------
  374.   # ● フレーム更新
  375.   #--------------------------------------------------------------------------
  376.   def update
  377.  
  378.    # $scene.cp_meters.refresh(enemy)
  379.  
  380.  
  381.     super
  382.     # 存在しないエネミーを指していたら飛ばす
  383.     $game_troop.enemies.size.times do
  384.       break if self.enemy.exist?
  385.       @index += 1
  386.       @index %= $game_troop.enemies.size
  387.     end
  388.     # カーソル右
  389.     if Input.repeat?(Input::RIGHT)
  390.       $game_system.se_play($data_system.cursor_se)
  391.       $game_troop.enemies.size.times do
  392.         @index += 1
  393.         @index %= $game_troop.enemies.size
  394.         break if self.enemy.exist?
  395.       end
  396.       $scene.camera = "select"
  397.       zoom = 1 / self.enemy.zoom
  398.       $scene.spriteset.screen_target(self.enemy.attack_x(zoom) * 0.75,
  399.                                       self.enemy.attack_y(zoom) * 0.75, zoom)
  400.       $scene.cp_meters.refresh(enemy,true)   #zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz                                
  401.     end
  402.     # カーソル左
  403.     if Input.repeat?(Input::LEFT)
  404.       $game_system.se_play($data_system.cursor_se)
  405.       $game_troop.enemies.size.times do
  406.         @index += $game_troop.enemies.size - 1
  407.         @index %= $game_troop.enemies.size
  408.         break if self.enemy.exist?
  409.       end
  410.       $scene.camera = "select"
  411.       zoom = 1 / self.enemy.zoom
  412.       $scene.spriteset.screen_target(self.enemy.attack_x(zoom) * 0.75,
  413.                                       self.enemy.attack_y(zoom) * 0.75, zoom)
  414.  
  415.  
  416.       $scene.cp_meters.refresh(enemy,true)   #zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
  417.     end
  418.     # スプライトの座標を設定
  419.     if self.enemy != nil
  420.       self.x = self.enemy.screen_x
  421.       self.y = self.enemy.screen_y
  422.     end
  423.   end

作者: 冰水金刚    时间: 2014-7-24 15:02
多写了一个end吧




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1