设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1965|回复: 25
打印 上一主题 下一主题

[已经解决] 用脚本在战斗中显示特写技能后卡住

[复制链接]

Lv2.观梦者

梦石
0
星屑
602
在线时间
269 小时
注册时间
2014-7-5
帖子
157
跳转到指定楼层
1
发表于 2017-6-16 15:18:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
不知为啥,在战斗中使用显示特写的技能后,人物特写闪过,偶尔会出现卡住的现象,卡住后等了很久人物都不行动,而且是偶然现象,有时候会卡住有时候不会卡住,有没有办法解决?
脚本如下
  1. #==============================================================================
  2. # ■ Scene_Battle
  3. #------------------------------------------------------------------------------
  4. #  バトル画面の処理を行うクラスです。
  5. #==============================================================================
  6. class Scene_Battle < Scene_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● フレーム更新(基本)
  9.   #--------------------------------------------------------------------------
  10.   alias update_basic_scene_battle_n03 update_basic
  11.   def update_basic
  12.     update_basic_scene_battle_n03
  13.     $sv_camera.update
  14.     $sv_camera.wait = N03::TURN_END_WAIT + 1 if $sv_camera.win_wait
  15.     camera_wait
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● カメラウェイト
  19.   #--------------------------------------------------------------------------
  20.   def camera_wait
  21.     process_event if $sv_camera.event
  22.     $sv_camera.event = false if $sv_camera.event
  23.     while $sv_camera.wait != 0
  24.       Graphics.update
  25.       Input.update
  26.       update_all_windows
  27.       $game_timer.update
  28.       $game_troop.update
  29.       $sv_camera.update
  30.       @spriteset.update
  31.       #update_info_viewport  ###SR
  32.       update_message_open
  33.       $sv_camera.wait -= 1 if $sv_camera.wait > 0
  34.       $sv_camera.wait = 1 if $sv_camera.wait == 0 && @spriteset.effect?
  35.       BattleManager.victory if $sv_camera.win_wait && $sv_camera.wait == 0
  36.     end
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● カメラウェイトのセット
  40.   #--------------------------------------------------------------------------
  41.   def set_camera_wait(time)
  42.     $sv_camera.wait = time
  43.     camera_wait
  44.   end  
  45.   #--------------------------------------------------------------------------
  46.   # ● エフェクト実行が終わるまでウェイト ★再定義
  47.   #--------------------------------------------------------------------------
  48.   def wait_for_effect
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   # ● ターン開始
  52.   #--------------------------------------------------------------------------
  53.   alias turn_start_scene_battle_n03 turn_start
  54.   def turn_start
  55.     turn_start_scene_battle_n03
  56.     N03.camera(nil, N03::BATTLE_CAMERA["ターン開始後"].dup)
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● ターン終了
  60.   #--------------------------------------------------------------------------
  61.   alias turn_end_scene_battle_n03 turn_end
  62.   def turn_end
  63.     turn_end_scene_battle_n03
  64.     for member in $game_troop.members + $game_party.members
  65.       N03.set_damage(member, member.sv.result_damage[0],member.sv.result_damage[1])
  66.       member.sv.result_damage = [0,0]
  67.       @spriteset.set_damage_pop(member) if member.result.hp_damage != 0 or member.result.mp_damage != 0
  68.     end
  69.     set_camera_wait(N03::TURN_END_WAIT)
  70.     N03.camera(nil, N03::BATTLE_CAMERA["ターン開始前"].dup) if $game_party.inputable?
  71.     @log_window.clear
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● スキル/アイテムの使用 ★再定義
  75.   #--------------------------------------------------------------------------
  76.   def use_item
  77.     item = @subject.current_action.item
  78.     display_item(item)
  79.     @subject.use_item(item)
  80.     # 技能特写
  81.     if item.is_a?(RPG::Skill)
  82.       case item.id
  83.       when 37
  84.         show_animation([@subject], 142)
  85.       when 38
  86.         show_animation([@subject], 142)
  87.       when 67
  88.         show_animation([@subject], 162)
  89.       when 68
  90.         show_animation([@subject], 162)
  91.       when 92
  92.         show_animation([@subject], 194)
  93.       when 93
  94.         show_animation([@subject], 194)
  95.       when 129
  96.         show_animation([@subject], 195)
  97.       when 130
  98.         show_animation([@subject], 195)
  99.       when 100
  100.         show_animation([@subject], 196)
  101.       when 169
  102.         show_animation([@subject], 206)
  103.       when 195
  104.         show_animation([@subject], 224)
  105.         end
  106.     end
  107.     ###
  108.     refresh_status
  109.     @targets = @subject.current_action.make_targets.compact
  110.     @targets = [@subject] if @targets.size == 0
  111.     set_substitute(item)
  112.     for time in item.repeats.times do play_sideview(@targets, item) end
  113.     ### SR ###
  114.     if item.is_a?(RPG::Skill)
  115.       case item.id
  116.       when 47 #热血
  117.         if @subject.dead?
  118.          @subject.tp = 0
  119.         end
  120.       end
  121.     end
  122.     end_reaction(item)
  123.     display_end_item
  124.   end
  125.   #--------------------------------------------------------------------------
  126.   # ● スキル/アイテム名の表示
  127.   #--------------------------------------------------------------------------
  128.   def display_item(item)
  129.     return @log_window.display_use_item(@subject, item) if N03::BATTLE_LOG
  130.     @log_window.off
  131.     @skill_name_window = Window_Skill_name.new(item.name) unless N03::NO_DISPLAY_SKILL_ID.include?(item.id) && item.is_a?(RPG::Skill)
  132.   end  
  133.   #--------------------------------------------------------------------------
  134.   # ● スキル/アイテム名の表示終了
  135.   #--------------------------------------------------------------------------
  136.   def display_end_item
  137.     @skill_name_window.dispose if @skill_name_window != nil
  138.     @skill_name_window = nil
  139.     set_camera_wait(N03::ACTION_END_WAIT) if @subject.sv.derivation_skill_id == 0
  140.     @log_window.clear if N03::BATTLE_LOG
  141.   end  
  142.   #--------------------------------------------------------------------------
  143.   # ● 反撃/魔法反射/身代わり処理
  144.   #--------------------------------------------------------------------------
  145.   def end_reaction(item)
  146.     end_substitute if @substitute != nil
  147.     set_reflection(item) if @reflection_data != nil
  148.     set_counter_attack if @counter_attacker != nil
  149.   end  
  150.   #--------------------------------------------------------------------------
  151.   # ● 反撃の発動 ★再定義
  152.   #--------------------------------------------------------------------------
  153.   def invoke_counter_attack(target, item)
  154.     return if @subject.sv.counter_id != 0
  155.     @counter_attacker = [] if @counter_attacker == nil
  156.     return apply_item_effects(apply_substitute(target, item), item) if !target.movable?
  157.     @log_window.add_text(sprintf(Vocab::CounterAttack, target.name)) if N03::BATTLE_LOG
  158.     target.sv.counter_id = target.sv.counter_skill_id
  159.     @counter_attacker.push(target)
  160.   end
  161.   #--------------------------------------------------------------------------
  162.   # ● 魔法反射の発動 ★再定義
  163.   #--------------------------------------------------------------------------
  164.   def invoke_magic_reflection(target, item)
  165.     return if @subject.sv.reflection_id != 0
  166.     @log_window.add_text(sprintf(Vocab::MagicReflection, target.name)) if N03::BATTLE_LOG
  167.     target.sv.reflection_id = target.sv.reflection_anime_id
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ● 身代わりの適用 ★再定義
  171.   #--------------------------------------------------------------------------
  172.   def apply_substitute(target, item)
  173.     return target if @substitute == nil
  174.     return target if !check_substitute(target, item)
  175.     return @substitute
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 身代わりセット
  179.   #--------------------------------------------------------------------------
  180.   def set_substitute(item)
  181.     @substitute = N03.get_enemy_unit(@subject).substitute_battler
  182.     return if @substitute == nil
  183.     s_targets = []
  184.     for i in [email protected]
  185.       next if @targets[i] == @substitute
  186.       next if !check_substitute(@targets[i], item)
  187.       @log_window.add_text(sprintf(Vocab::Substitute, @substitute.name, @targets[i].name))
  188.       @targets[i].sv.start_action(@targets[i].sv.substitute_receiver_start_action)
  189.       s_targets.push(@targets[i])
  190.       @targets[i] = @substitute
  191.     end
  192.     return @substitute = nil if s_targets == []
  193.     @substitute.sv.set_target(s_targets)
  194.     @substitute.sv.start_action(@substitute.sv.substitute_start_action)
  195.   end  
  196.   #--------------------------------------------------------------------------
  197.   # ● 身代わり終了
  198.   #--------------------------------------------------------------------------
  199.   def end_substitute
  200.     for member in @substitute.sv.target_battler
  201.       member.sv.start_action(member.sv.substitute_receiver_end_action)
  202.     end  
  203.     @substitute.sv.start_action(@substitute.sv.substitute_end_action)
  204.     @substitute = nil
  205.   end
  206.   #--------------------------------------------------------------------------
  207.   # ● 反撃
  208.   #--------------------------------------------------------------------------
  209.   def set_counter_attack
  210.     pre_subject = @subject
  211.     for attacker in @counter_attacker
  212.       @subject = attacker
  213.       item = $data_skills[attacker.sv.counter_skill_id]
  214.       play_sideview([pre_subject], item)
  215.     end
  216.     # 同一カウンター者を考慮してカウンターIDの初期化はアクション後に実行
  217.     for attacker in @counter_attacker do attacker.sv.counter_id = 0 end
  218.     @subject = pre_subject
  219.     @counter_attacker = nil
  220.   end
  221.   #--------------------------------------------------------------------------
  222.   # ● 魔法反射
  223.   #--------------------------------------------------------------------------
  224.   def set_reflection(item)
  225.     @log_window.back_to(1)
  226.     for data in @reflection_data
  227.       @subject.sv.damage_action(@subject, item)
  228.       N03.set_damage_anime_data([@subject], @subject, data)
  229.       apply_item_effects(@subject, item)
  230.       @spriteset.set_damage_pop(@subject)
  231.     end
  232.     set_camera_wait(N03.get_anime_time(@reflection_data[0][0]))
  233.     @reflection_data = nil
  234.   end
  235.   #--------------------------------------------------------------------------
  236.   # ● サイドビューアクション実行
  237.   #--------------------------------------------------------------------------
  238.   def play_sideview(targets, item)
  239.     @subject.sv.set_target(targets)
  240.     return if @subject.sv.attack_action(item) == nil
  241.     return if [email protected]?
  242.     return if item.scope != 9 && item.scope != 10 && !N03.targets_alive?(targets)
  243.     @subject.sv.start_action(@subject.sv.attack_action(item))
  244.     @subject.sv.unshift_action(@subject.sv.flash_action) if @subject.flash_flg
  245.     @subject.sv.active = true
  246.     @subject.sv.command_action = false
  247.     loop do
  248.       update_basic
  249.       data = @subject.sv.play_data
  250.       @targets = N03.s_targets(@subject) if data[0] == "second_targets_set"
  251.       N03.targets_set(@subject)          if data[0] == "targets_set"
  252.       @immortal = N03.immortaling        if data[0] == "no_collapse" && !N03.dead_attack?(@subject, item)
  253.       @immortal = N03.unimmortaling      if data[0] == "collapse"
  254.       next set_move_anime(item)          if @subject.sv.m_a_data != []
  255.       set_damage(item)                   if @subject.sv.set_damage
  256.       break N03.derived_skill(@subject)  if @subject.sv.derivation_skill_id != 0
  257.       break                              if @subject.sv.action_end or @subject.hidden?
  258.     end
  259.     @immortal = N03.unimmortaling        if @immortal
  260.   end
  261.   #--------------------------------------------------------------------------
  262.   # ● ダメージの実行
  263.   #--------------------------------------------------------------------------
  264.   def set_damage(item)
  265.     targets = @targets
  266.     targets = [@subject.sv.individual_targets[0]] if @subject.sv.individual_targets.size != 0
  267.     for target in targets do damage_anime(targets.dup, target, item) end
  268.     @subject.sv.set_damage = false
  269.     @subject.sv.damage_anime_data = []
  270.   end
  271.   #--------------------------------------------------------------------------
  272.   # ● ダメージ戦闘アニメ処理
  273.   #--------------------------------------------------------------------------
  274.   def damage_anime(targets, target, item)
  275.     @log_window.back_to(1) if @log_window.line_number == 5
  276.     return if item.scope != 9 && item.scope != 10 && target.dead?
  277.     [url=home.php?mod=space&uid=25848]@miSs[/url] = false
  278.     invoke_item(target,item)
  279.     if target.result.missed
  280.       target.sv.miss_action(@subject, item)
  281.       return @miss = true
  282.     elsif target.result.evaded or target.sv.counter_id != 0
  283.       target.sv.evasion_action(@subject, item)
  284.       return @miss = true
  285.     elsif target.sv.reflection_id != 0
  286.       N03.set_damage_anime_data(targets, target, [target.sv.reflection_id, false, false, true])
  287.       target.sv.reflection_id = 0
  288.       @reflection_data = [] if @reflection_data == nil
  289.       return @reflection_data.push([N03.get_attack_anime_id(-3, @subject), false, false, true])
  290.     end
  291.     target.sv.damage_action(@subject, item)
  292.     N03.set_damage(@subject, -target.result.hp_drain, -target.result.mp_drain) if target != @subject
  293.     @spriteset.set_damage_pop(target)
  294.     @spriteset.set_damage_pop(@subject) if target != @subject && @subject.result.hp_damage != 0 or @subject.result.mp_damage != 0
  295.     N03.set_damage_anime_data(targets, target, @subject.sv.damage_anime_data) if @subject.sv.damage_anime_data != []
  296.   end
  297.   #--------------------------------------------------------------------------
  298.   # ● 飛ばしアニメ処理
  299.   #--------------------------------------------------------------------------
  300.   def set_move_anime(item)
  301.     for data in @subject.sv.m_a_data
  302.       @subject.sv.damage_anime_data = data[4]
  303.       hit_targets = []
  304.       for target in data[1]
  305.         damage_anime(data[1], target, item) if data[0]
  306.         hit_targets.push(target) if !@miss
  307.       end
  308.       @miss = false if !data[3]
  309.       @spriteset.set_hit_animation(@subject, data[2], hit_targets, @miss)
  310.     end
  311.     @subject.sv.set_damage = false
  312.     @subject.sv.m_a_data = []
  313.   end
  314. end

  315. #==============================================================================
  316. # ■ DataManager
  317. #------------------------------------------------------------------------------
  318. #  データベースとゲームオブジェクトを管理するモジュールです。
  319. #==============================================================================
  320. module DataManager
  321.   #--------------------------------------------------------------------------
  322.   # ● 各種ゲームオブジェクトの作成 ★再定義
  323.   #--------------------------------------------------------------------------
  324.   def self.create_game_objects
  325.     $game_temp          = Game_Temp.new
  326.     $game_system        = Game_System.new
  327.     $game_timer         = Game_Timer.new
  328.     $game_message       = Game_Message.new
  329.     $game_switches      = Game_Switches.new
  330.     $game_variables     = Game_Variables.new
  331.     $game_self_switches = Game_SelfSwitches.new
  332.     $game_actors        = Game_Actors.new
  333.     $game_party         = Game_Party.new
  334.     $game_troop         = Game_Troop.new
  335.     $game_map           = Game_Map.new
  336.     $game_player        = Game_Player.new
  337.     $sv_camera          = Battle_Camera.new
  338.   end
  339. end

  340. #==============================================================================
  341. # ■ BattleManager
  342. #------------------------------------------------------------------------------
  343. #  戦闘の進行を管理するモジュールです。
  344. #==============================================================================
  345. module BattleManager
  346.   #--------------------------------------------------------------------------
  347.   # ● エンカウント時の処理 ★再定義
  348.   #--------------------------------------------------------------------------
  349.   def self.on_encounter
  350.     @preemptive = (rand < rate_preemptive)
  351.     @surprise = (rand < rate_surprise && !@preemptive)
  352.     $sv_camera.mirror = @surprise if N03::BACK_ATTACK
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● 勝利の処理 ★再定義
  356.   #--------------------------------------------------------------------------
  357.   def self.process_victory
  358.     $sv_camera.win_wait = true
  359.   end  
  360.   #--------------------------------------------------------------------------
  361.   # ● 勝利
  362.   #--------------------------------------------------------------------------
  363.   def self.victory
  364.     $sv_camera.win_wait = false
  365.     N03.camera(nil, N03::BATTLE_CAMERA["戦闘終了時"].dup)
  366.     for member in $game_party.members do member.sv.start_action(member.sv.win) if member.movable? end
  367.     #SR 不播放胜利音效
  368.     if $game_switches[21] != true
  369.       play_battle_end_me
  370.     end
  371.     #
  372.     replay_bgm_and_bgs
  373.     $game_message.add(sprintf(Vocab::Victory, $game_party.name))
  374.     display_exp
  375.     gain_gold
  376.     gain_drop_items
  377.     gain_exp
  378.     SceneManager.return
  379.     battle_end(0)
  380.     return true
  381.   end
  382.   #--------------------------------------------------------------------------
  383.   # ● 逃走の処理 ★再定義
  384.   #--------------------------------------------------------------------------
  385.   def self.process_escape
  386.     $game_message.add(sprintf(Vocab::EscapeStart, $game_party.name))
  387.     success = @preemptive ? true : (rand < @escape_ratio)
  388.     Sound.play_escape
  389.     if success
  390.       process_abort
  391.       for member in $game_party.members do member.sv.start_action(member.sv.escape) if member.movable? end
  392.     else
  393.       @escape_ratio += 0.1
  394.       $game_message.add('\.' + Vocab::EscapeFailure)
  395.       $game_party.clear_actions
  396.       for member in $game_party.members do member.sv.start_action(member.sv.escape_ng) if member.movable? end
  397.     end
  398.     wait_for_message
  399.     return success
  400.   end
  401.   #--------------------------------------------------------------------------
  402.   # ● 次のコマンド入力へ ★再定義
  403.   #--------------------------------------------------------------------------
  404.   def self.next_command
  405.     begin
  406.       if !actor || !actor.next_command
  407.         $game_party.battle_members[@actor_index].sv.command_action = true
  408.         @actor_index += 1
  409.         if @actor_index >= $game_party.members.size
  410.           for member in $game_party.battle_members.reverse
  411.             break member.sv.start_action(member.sv.command_a) if member.inputable?
  412.           end
  413.           return false
  414.         end
  415.       end
  416.     end until actor.inputable?
  417.     actor.sv.start_action(actor.sv.command_b) if actor != nil && actor.inputable?
  418.     if pre_actor
  419.       pre_actor.sv.start_action(pre_actor.sv.command_a) if pre_actor != nil && pre_actor.inputable?
  420.     end
  421.     return true
  422.   end
  423.   #--------------------------------------------------------------------------
  424.   # ● 前のコマンド入力へ ★再定義
  425.   #--------------------------------------------------------------------------
  426.   def self.prior_command
  427.     begin
  428.       if !actor || !actor.prior_command
  429.         $game_party.battle_members[@actor_index].sv.command_action = false
  430.         @actor_index -= 1
  431.         if @actor_index < 0
  432.           for member in $game_party.battle_members
  433.             break member.sv.start_action(member.sv.command_a) if member.inputable?
  434.           end
  435.           return false
  436.         end
  437.       end
  438.     end until actor.inputable?
  439.     actor.make_actions if actor.inputable?
  440.     actor.sv.start_action(actor.sv.command_b) if actor.inputable?
  441.     after_actor.sv.start_action(after_actor.sv.command_a) if after_actor != nil && after_actor.inputable?
  442.     return true
  443.   end
  444.   #--------------------------------------------------------------------------
  445.   # ● コマンド入力前のアクターを取得
  446.   #--------------------------------------------------------------------------
  447.   def self.pre_actor
  448.     return if @actor_index == 0
  449.     $game_party.members[@actor_index - 1]
  450.   end
  451.   #--------------------------------------------------------------------------
  452.   # ● コマンド入力後のアクターを取得
  453.   #--------------------------------------------------------------------------
  454.   def self.after_actor
  455.     $game_party.members[@actor_index + 1]
  456.   end
  457.   #--------------------------------------------------------------------------
  458.   # ● 戦闘行動者を前に追加
  459.   #--------------------------------------------------------------------------
  460.   def self.unshift_action_battlers(battler)
  461.     @action_battlers.unshift(battler)
  462.   end
  463. end  

  464. #==============================================================================
  465. # ■ Game_Battler
  466. #------------------------------------------------------------------------------
  467. #  スプライトや行動に関するメソッドを追加したバトラーのクラスです。
  468. #==============================================================================
  469. class Game_Battler < Game_BattlerBase
  470.   #--------------------------------------------------------------------------
  471.   # ● 公開インスタンス変数
  472.   #--------------------------------------------------------------------------
  473.   attr_reader   :sv                     # サイドビューデータ
  474.   attr_accessor :flash_flg              # 閃きフラグ
  475.   #--------------------------------------------------------------------------
  476.   # ● オブジェクト初期化
  477.   #--------------------------------------------------------------------------
  478.   alias initialize_game_battler_n03 initialize
  479.   def initialize
  480.     initialize_game_battler_n03
  481.     @sv = SideView.new(self)
  482.   end
  483.   #--------------------------------------------------------------------------
  484.   # ● 現在の戦闘行動を除去
  485.   #--------------------------------------------------------------------------
  486.   alias remove_current_action_game_battler_n03 remove_current_action
  487.   def remove_current_action
  488.     return @sv.derivation_skill_id = 0 if @sv.derivation_skill_id != 0
  489.     remove_current_action_game_battler_n03
  490.   end
  491.   #--------------------------------------------------------------------------
  492.   # ● ターン終了処理
  493.   #--------------------------------------------------------------------------
  494.   alias on_turn_end_game_battler_n03 on_turn_end
  495.   def on_turn_end
  496.     on_turn_end_game_battler_n03
  497.     @sv.add_state = []
  498.     @sv.result_damage = [@result.hp_damage, @result.mp_damage]
  499.   end
  500.   #--------------------------------------------------------------------------
  501.   # ● パラメータ条件比較 data = [種別, 数値, 判別]
  502.   #--------------------------------------------------------------------------
  503.   def comparison_parameter(data)
  504.     return true if data[0][0] == 0
  505.     kind = data[0]
  506.     num = data[1]
  507.     select = data[2]
  508.     case kind
  509.     when  1 ; par = level
  510.     when  2 ; par = mhp
  511.     when  3 ; par = mmp
  512.     when  4 ; par = hp
  513.     when  5 ; par = mp
  514.     when  6 ; par = tp
  515.     when  7 ; par = atk
  516.     when  8 ; par = self.def
  517.     when  9 ; par = mat
  518.     when 10 ; par = mdf
  519.     when 11 ; par = agi
  520.     when 12 ; par = luk
  521.     end
  522.     if num < 0
  523.       case kind
  524.       when  4 ; num = mhp * num / 100
  525.       when  5 ; num = mmp * num / 100
  526.       when  6 ; num = max_tp * num / 100
  527.       end
  528.       num = num.abs
  529.     end  
  530.     case select
  531.     when  0 ; return par == num
  532.     when  1 ; return par < num
  533.     when  2 ; return par > num
  534.     end
  535.   end
  536.   #--------------------------------------------------------------------------
  537.   # ● 装備条件比較 data = [装備種別, タイプID]
  538.   #--------------------------------------------------------------------------
  539.   def comparison_equip(data)
  540.     kind = data[0]
  541.     items = weapons if kind == 0
  542.     items = armors  if kind == 1
  543.     for item in items
  544.       for id in data[1]
  545.         return true if id > 0 && item.is_a?(RPG::Weapon) && item == $data_weapons[id.abs]
  546.         return true if id > 0 && item.is_a?(RPG::Armor) && item == $data_armors[id.abs]
  547.         return true if id < 0 && item.is_a?(RPG::Weapon) && item.wtype_id == id.abs
  548.         return true if id < 0 && item.is_a?(RPG::Armor) && item.stype_id == id.abs
  549.       end
  550.     end
  551.     return false
  552.   end
  553.   
  554. end  
  555. #==============================================================================
  556. # ■ Game_Actor
  557. #------------------------------------------------------------------------------
  558. #  アクターを扱うクラスです。
  559. #==============================================================================
  560. class Game_Actor < Game_Battler
  561.   #--------------------------------------------------------------------------
  562.   # ● 公開インスタンス変数
  563.   #--------------------------------------------------------------------------
  564.   attr_reader :actor_id                    # ID
  565.   #--------------------------------------------------------------------------
  566.   # ● ID
  567.   #--------------------------------------------------------------------------
  568.   def id
  569.     return @actor_id
  570.   end
  571.   #--------------------------------------------------------------------------
  572.   # ● スプライトを使うか? ★再定義
  573.   #--------------------------------------------------------------------------
  574.   def use_sprite?
  575.     return true
  576.   end
  577.   #--------------------------------------------------------------------------
  578.   # ● ダメージ効果の実行 ★再定義
  579.   #--------------------------------------------------------------------------
  580.   def perform_damage_effect
  581.     return if !N03::ACTOR_DAMAGE
  582.     $game_troop.screen.start_shake(5, 5, 10)
  583.     @sprite_effect_type = :blink
  584.     Sound.play_actor_damage
  585.   end
  586.   
  587. end

  588. #==============================================================================
  589. # ■ Game_Enemy
  590. #------------------------------------------------------------------------------
  591. #  敵キャラを扱うクラスです。
  592. #==============================================================================
  593. class Game_Enemy < Game_Battler
  594.   #--------------------------------------------------------------------------
  595.   # ● 公開インスタンス変数
  596.   #--------------------------------------------------------------------------
  597.   attr_reader :enemy_id                    # ID
  598.   #--------------------------------------------------------------------------
  599.   # ● ID
  600.   #--------------------------------------------------------------------------
  601.   def id
  602.     return @enemy_id
  603.   end
  604.   #--------------------------------------------------------------------------
  605.   # ● レベル
  606.   #--------------------------------------------------------------------------
  607.   def level
  608.     return @sv.level
  609.   end
  610.   #--------------------------------------------------------------------------
  611.   # ● ダメージ効果の実行 ★再定義
  612.   #--------------------------------------------------------------------------
  613.   def perform_damage_effect
  614.     return if !N03::ENEMY_DAMAGE
  615.     @sprite_effect_type = :blink
  616.     Sound.play_enemy_damage
  617.   end
  618.   #--------------------------------------------------------------------------
  619.   # ● 武器
  620.   #--------------------------------------------------------------------------
  621.   def weapons
  622.     weapon1 = $data_weapons[@sv.enemy_weapon1_id]
  623.     weapon2 = $data_weapons[@sv.enemy_weapon2_id]
  624.     return [weapon1, weapon2]
  625.   end
  626.   #--------------------------------------------------------------------------
  627.   # ● 防具
  628.   #--------------------------------------------------------------------------
  629.   def armors
  630.     return [$data_armors[@sv.enemy_shield_id]]
  631.   end
  632.   #--------------------------------------------------------------------------
  633.   # ● 二刀流の判定
  634.   #--------------------------------------------------------------------------
  635.   def dual_wield?
  636.     return $data_weapons[@sv.enemy_weapon2_id] != nil
  637.   end
  638.   #--------------------------------------------------------------------------
  639.   # ● バトラー画像変更
  640.   #--------------------------------------------------------------------------
  641.   def graphics_change(battler_name)
  642.     @battler_name = battler_name
  643.   end
  644.   #--------------------------------------------------------------------------
  645.   # ● 通常攻撃 アニメーション ID の取得
  646.   #--------------------------------------------------------------------------
  647.   def atk_animation_id1
  648.     return weapons[0].animation_id if weapons[0]
  649.     return weapons[1] ? 0 : 1
  650.   end
  651.   #--------------------------------------------------------------------------
  652.   # ● 通常攻撃 アニメーション ID の取得(二刀流:武器2)
  653.   #--------------------------------------------------------------------------
  654.   def atk_animation_id2
  655.     return weapons[1] ? weapons[1].animation_id : 0
  656.   end
  657. end

  658. #==============================================================================
  659. # ■ Sprite_Base
  660. #------------------------------------------------------------------------------
  661. #  アニメーションの表示処理を追加したスプライトのクラスです。
  662. #==============================================================================
  663. class Sprite_Base < Sprite
  664.   #--------------------------------------------------------------------------
  665.   # ● アニメーションの座標更新 (ホーミングあり)
  666.   #--------------------------------------------------------------------------
  667.   def update_animation_position_horming
  668.     return if @action_end_cancel
  669.     ani_ox_set if @horming
  670.     camera_zoom = $sv_camera.zoom
  671.     camera_zoom = 1 if @move_anime
  672.     kind = 1
  673.     kind = -1 if @ani_mirror && !@anime_no_mirror
  674.     cell_data = @animation.frames[@animation.frame_max - (@ani_duration + @ani_rate - 1) / @ani_rate].cell_data
  675.     for i in 0..15
  676.       @ani_sprites[i].x = (@ani_ox + cell_data[i, 1] * kind - $sv_camera.x) * camera_zoom if @ani_sprites[i] != nil && cell_data[i, 1] != nil
  677.       @ani_sprites[i].y = (@ani_oy + cell_data[i, 2] - $sv_camera.y) * camera_zoom if @ani_sprites[i] != nil && cell_data[i, 2] != nil
  678.     end
  679.   end
  680.   #--------------------------------------------------------------------------
  681.   # ● アニメーション元の座標をセット
  682.   #--------------------------------------------------------------------------
  683.   def ani_ox_set
  684.     if !SceneManager.scene_is?(Scene_Battle)
  685.       @real_x = x
  686.       @real_y = y
  687.     end
  688.     @ani_ox = @real_x - ox + width / 2
  689.     @ani_oy = @real_y - oy + height / 2
  690.     @ani_oy -= height / 2 if @animation.position == 0
  691.     @ani_oy += height / 2 if @animation.position == 2
  692.   end
  693.   #--------------------------------------------------------------------------
  694.   # ● アニメーションの更新
  695.   #--------------------------------------------------------------------------
  696.   alias update_animation_sprite_base_n03 update_animation
  697.   def update_animation
  698.     update_animation_position_horming if animation? && SceneManager.scene_is?(Scene_Battle) && @animation.position != 3
  699.     update_animation_sprite_base_n03
  700.   end
  701.   #--------------------------------------------------------------------------
  702.   # ● アニメーションの原点設定 ★再定義
  703.   #--------------------------------------------------------------------------
  704.   def set_animation_origin
  705.     return ani_ox_set if @animation.position != 3
  706.     if viewport == nil
  707.       @ani_ox = Graphics.width / 2
  708.       @ani_oy = Graphics.height / 2
  709.     else
  710.       @ani_ox = viewport.rect.width / 2
  711.       @ani_oy = viewport.rect.height / 2
  712.     end
  713.   end
  714.   #--------------------------------------------------------------------------
  715.   # ● アニメーションスプライトの設定 ★再定義
  716.   #--------------------------------------------------------------------------
  717.   def animation_set_sprites(frame)
  718.     camera_zoom = 1
  719.     camera_zoom = $sv_camera.zoom if @anime_camera_zoom && @animation.position != 3 && SceneManager.scene_is?(Scene_Battle)
  720.     camera_x = $sv_camera.x
  721.     camera_y = $sv_camera.y
  722.     camera_x = camera_y = 0 if @animation.position == 3 or !SceneManager.scene_is?(Scene_Battle)
  723.     plus_z = 5
  724.     plus_z = 1000 if @animation.position == 3
  725.     plus_z = -17 if @plus_z != nil && @plus_z == false
  726.     plus_z = -self.z + 10 if @plus_z != nil && @plus_z == false && @animation.position == 3
  727.     cell_data = frame.cell_data
  728.     @ani_sprites.each_with_index do |sprite, i|
  729.       next unless sprite
  730.       pattern = cell_data[i, 0]
  731.       if !pattern || pattern < 0
  732.         sprite.visible = false
  733.         next
  734.       end
  735.       sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
  736.       sprite.visible = true
  737.       sprite.src_rect.set(pattern % 5 * 192,
  738.         pattern % 100 / 5 * 192, 192, 192)
  739.       if @ani_mirror && !@anime_no_mirror
  740.         sprite.x = (@ani_ox - cell_data[i, 1] - camera_x) * camera_zoom
  741.         sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
  742.         sprite.angle = (360 - cell_data[i, 4])
  743.         sprite.mirror = (cell_data[i, 5] == 0)
  744.       else
  745.         sprite.x = (@ani_ox + cell_data[i, 1] - camera_x) * camera_zoom
  746.         sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
  747.         sprite.angle = cell_data[i, 4]
  748.         sprite.mirror = (cell_data[i, 5] == 1)
  749.       end
  750.       sprite.z = self.z + plus_z + i
  751.       sprite.ox = 96
  752.       sprite.oy = 96
  753.       sprite.zoom_x = cell_data[i, 3] * camera_zoom / 100.0
  754.       sprite.zoom_y = cell_data[i, 3] * camera_zoom/ 100.0
  755.       sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  756.       sprite.blend_type = cell_data[i, 7]
  757.     end
  758.   end
  759.   #--------------------------------------------------------------------------
  760.   # ● 子スプライトフラグ
  761.   #--------------------------------------------------------------------------
  762.   def set(battler, horming, camera_zoom, no_mirror)
  763.     @battler = battler
  764.     @next = true
  765.     self.bitmap = Bitmap.new(@battler.sv.cw, @battler.sv.ch)
  766.     self.ox = bitmap.width / 2
  767.     self.oy = bitmap.height
  768.     @horming = horming
  769.     @anime_camera_zoom = camera_zoom
  770.     @anime_no_mirror = no_mirror
  771.     @battler.sv.reset_anime_data
  772.   end  
  773.   #--------------------------------------------------------------------------
  774.   # ● 子スプライト座標セット
  775.   #--------------------------------------------------------------------------
  776.   def set_position(z, zoom_x, zoom_y, real_x, real_y)
  777.     self.z = z
  778.     self.zoom_x = zoom_x
  779.     self.zoom_y = zoom_y
  780.     @real_x = real_x
  781.     @real_y = real_y
  782.   end
  783.   #--------------------------------------------------------------------------
  784.   # ● 他スプライトへのタイミング処理
  785.   #--------------------------------------------------------------------------
  786.   def other_process_timing(timing)
  787.     se_flag = true
  788.     se_flag = @se_flag if @se_flag != nil
  789.     @battler.sv.timing.push([se_flag, timing.dup])
  790.   end
  791.   #--------------------------------------------------------------------------
  792.   # ● 他バトラーへのタイミング処理
  793.   #--------------------------------------------------------------------------
  794.   def target_battler_process_timing(timing)
  795.     for target in @timing_targets
  796.       target.sv.timing.push([false, timing.dup])
  797.     end  
  798.   end
  799.   #--------------------------------------------------------------------------
  800.   # ● SE とフラッシュのタイミング処理
  801.   #--------------------------------------------------------------------------
  802.   alias animation_process_timing_sprite_base_n03 animation_process_timing
  803.   def animation_process_timing(timing)
  804.     target_battler_process_timing(timing) if @timing_targets && @timing_targets != []
  805.     return other_process_timing(timing) if @next != nil
  806.     animation_process_timing_sprite_base_n03(timing)
  807.   end
  808.   #--------------------------------------------------------------------------
  809.   # ● アニメーションの解放
  810.   #--------------------------------------------------------------------------
  811.   alias dispose_animation_sprite_base_n03 dispose_animation
  812.   def dispose_animation
  813.     dispose_animation_sprite_base_n03
  814.   end
  815. end


  816. #==============================================================================
  817. # ■ Sprite_Battler
  818. #------------------------------------------------------------------------------
  819. #  バトラー表示用のスプライトです。
  820. #==============================================================================
  821. class Sprite_Battler < Sprite_Base
  822.   #--------------------------------------------------------------------------
  823.   # ● 公開インスタンス変数 
  824.   #--------------------------------------------------------------------------
  825.   attr_accessor   :removing             # パーティ離脱中
  826.   #--------------------------------------------------------------------------
  827.   # ● オブジェクト初期化
  828.   #--------------------------------------------------------------------------
  829.   alias initialize_sprite_battler_n03 initialize
  830.   def initialize(viewport, battler = nil)
  831.     initialize_sprite_battler_n03(viewport, battler)
  832.     @real_x = @real_y = 0
  833.     update_bitmap if @battler != nil
  834.   end
  835.   #--------------------------------------------------------------------------
  836.   # ● アニメーションの開始 ★再定義
  837.   #--------------------------------------------------------------------------
  838.   def start_animation(animation, mirror = false)
  839.     return next_animation(animation, mirror) if animation?
  840.     @animation = animation
  841.     if @animation
  842.       @horming = @battler.sv.anime_horming
  843.       @anime_camera_zoom = @battler.sv.anime_camera_zoom
  844.       @anime_no_mirror = @battler.sv.anime_no_mirror
  845.       @timing_targets = @battler.sv.timing_targets
  846.       @plus_z = @battler.sv.anime_plus_z
  847.       @battler.sv.reset_anime_data
  848.       @ani_mirror = mirror
  849.       set_animation_rate
  850.       @ani_duration = @animation.frame_max * @ani_rate + 1
  851.       load_animation_bitmap
  852.       make_animation_sprites
  853.       set_animation_origin
  854.     end
  855.   end
  856.   #--------------------------------------------------------------------------
  857.   # ● 次のアニメを開始
  858.   #--------------------------------------------------------------------------
  859.   def next_animation(animation, mirror)
  860.     @next_anime = [] if @next_anime == nil
  861.     @next_anime.push(Sprite_Base.new(viewport))
  862.     @next_anime[@next_anime.size - 1].set(battler, @battler.sv.anime_horming, @battler.sv.anime_camera_zoom, @battler.sv.anime_no_mirror)
  863.     @next_anime[@next_anime.size - 1].set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y)
  864.     @next_anime[@next_anime.size - 1].start_animation(animation, mirror)
  865.   end
  866.   #--------------------------------------------------------------------------
  867.   # ● 影グラフィック作成
  868.   #--------------------------------------------------------------------------
  869.   def create_shadow
  870.     reset_shadow
  871.     return if @battler.sv.shadow == false
  872.     @shadow = Sprite.new(viewport) if @shadow == nil
  873.     @shadow.bitmap = Cache.character(@battler.sv.shadow)
  874.     @shadow.ox = @shadow.bitmap.width / 2
  875.     @shadow.oy = @shadow.bitmap.height / 2
  876.   end
  877.   #--------------------------------------------------------------------------
  878.   # ● 影グラフィック初期化
  879.   #--------------------------------------------------------------------------
  880.   def reset_shadow
  881.     return if @shadow == nil
  882.     @shadow.dispose
  883.     @shadow = nil
  884.   end  
  885.   #--------------------------------------------------------------------------
  886.   # ● 転送元ビットマップの更新 ★再定義
  887.   #--------------------------------------------------------------------------
  888.   def update_bitmap
  889.     update_bitmap_enemy if [email protected]?
  890.     update_bitmap_actor if @battler.actor?
  891.     update_src_rect if @battler != nil
  892.     update_color if @battler != nil
  893.   end
  894.   #--------------------------------------------------------------------------
  895.   # ● 転送元ビットマップ:エネミー
  896.   #--------------------------------------------------------------------------
  897.   def update_bitmap_enemy
  898.     if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue
  899.       @battler_name = @battler.battler_name
  900.       @battler_hue = @battler.battler_hue
  901.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  902.       @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
  903.       self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue)
  904.       @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)
  905.       create_shadow
  906.       init_visibility
  907.       @battler_id = @battler.id
  908.     end
  909.   end  
  910.   #--------------------------------------------------------------------------
  911.   # ● 転送元ビットマップ:アクター
  912.   #--------------------------------------------------------------------------
  913.   def update_bitmap_actor
  914.     if @battler.character_name != @battler_name or @battler.character_index != @battler_index
  915.       @battler_name = @battler.character_name
  916.       @battler_index = @battler.character_index
  917.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  918.       @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
  919.       self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index)
  920.       @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)
  921.       create_shadow
  922.       init_visibility
  923.       @battler_id = @battler.id
  924.     end
  925.   end
  926.   #--------------------------------------------------------------------------
  927.   # ● 可視状態の初期化 ★再定義
  928.   #--------------------------------------------------------------------------
  929.   def init_visibility
  930.     @battler_visible = @battler.alive?
  931.     @battler_visible = true if @battler.sv.state(1) != "敵コラプス"
  932.     @battler_visible = false if @battler.hidden?
  933.     @battler.sv.opacity = 0 unless @battler_visible
  934.     self.opacity = 0 unless @battler_visible
  935.     self.opacity = 255 if @battler_visible
  936.     @battler.sv.weapon_visible = @battler_visible
  937.   end
  938.   #--------------------------------------------------------------------------
  939.   # ● 転送元矩形の更新
  940.   #--------------------------------------------------------------------------
  941.   def update_src_rect
  942.     return if @battler.sv.collapse
  943.     if @battler_graphic_file_index != @battler.sv.graphic_file_index
  944.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  945.       self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index) if @battler.actor?
  946.       self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue) if [email protected]?
  947.       @battler.sv.set_graphics(self.bitmap.width, self.bitmap.height)
  948.     end
  949.     anime_off if @battler.sv.anime_off
  950.     self.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
  951.     self.opacity = @battler.sv.opacity if @battler_visible
  952.     set_process_timing(@battler.sv.timing) if @battler && @battler.sv.timing != []
  953.   end
  954.   #--------------------------------------------------------------------------
  955.   # ● 位置の更新 ★再定義
  956.   #--------------------------------------------------------------------------
  957.   def update_position
  958.     @real_x = @battler.sv.x / 100
  959.     @real_y = (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust)/ 100
  960.     self.x = @real_x - $sv_camera.x
  961.     self.y = @real_y - $sv_camera.y
  962.     self.z = @battler.sv.z - @battler.sv.c / 100
  963.     if @battler.sv.h <= 0
  964.       self.x += $sv_camera.sx / 100
  965.       self.y += $sv_camera.sy / 100
  966.     end  
  967.     self.x *= $sv_camera.zoom
  968.     self.y *= $sv_camera.zoom
  969.   end
  970.   #--------------------------------------------------------------------------
  971.   # ● 原点の更新 ★再定義
  972.   #--------------------------------------------------------------------------
  973.   def update_origin
  974.     return if !bitmap or @battler.sv.collapse
  975.     self.ox = @battler.sv.ox
  976.     self.oy = @battler.sv.oy
  977.     self.angle = @battler.sv.angle
  978.     self.zoom_x = @battler.sv.zoom_x * $sv_camera.zoom
  979.     self.zoom_y = @battler.sv.zoom_y * $sv_camera.zoom
  980.     self.mirror = @battler.sv.mirror if !@graphic_mirror_flag
  981.     self.mirror = [email protected] if @graphic_mirror_flag
  982.   end
  983.   #--------------------------------------------------------------------------
  984.   # ● 影グラフィックの更新
  985.   #--------------------------------------------------------------------------
  986.   def update_shadow
  987.     @shadow.visible = @battler.sv.shadow_visible
  988.     @shadow.opacity = @battler.sv.opacity if @battler.sv.opacity_data[3]
  989.     @shadow.opacity = self.opacity if [email protected]_data[3]
  990.     @shadow.x = @real_x - $sv_camera.x
  991.     @shadow.y = (@battler.sv.y - @battler.sv.c)/ 100 - $sv_camera.y
  992.     @shadow.z = @battler.sv.z - 10
  993.     @shadow.zoom_x = $sv_camera.zoom
  994.     @shadow.zoom_y = $sv_camera.zoom
  995.     @shadow.x += $sv_camera.sx / 100
  996.     @shadow.y += $sv_camera.sy / 100
  997.     @shadow.x *= $sv_camera.zoom
  998.     @shadow.y *= $sv_camera.zoom
  999.     @shadow.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  1000.   end
  1001.   #--------------------------------------------------------------------------
  1002.   # ● ふきだしの更新
  1003.   #--------------------------------------------------------------------------
  1004.   def update_balloon
  1005.     if @battler.sv.balloon_data == [] && @balloon
  1006.       @balloon_data = []
  1007.       @balloon.dispose
  1008.       return @balloon = nil
  1009.     elsif @battler.sv.balloon_data != [] && @battler.sv.balloon_data != @balloon_data
  1010.       @balloon_data = @battler.sv.balloon_data
  1011.       @balloon = Sprite.new(self.viewport)
  1012.       @balloon.bitmap = Cache.system("Balloon")
  1013.       @balloon.zoom_x = @balloon_data[3]
  1014.       @balloon.zoom_y = @balloon_data[3]
  1015.       @balloon.ox = 32 if @battler.sv.mirror
  1016.       @balloon.oy = 16
  1017.       @balloon_count = 0
  1018.     end
  1019.     return if !@balloon
  1020.     @balloon.opacity = self.opacity
  1021.     @balloon.x = self.x
  1022.     @balloon.y = self.y - @battler.sv.ch * $sv_camera.zoom
  1023.     @balloon.z = self.z + 20
  1024.     @balloon.src_rect.set(32 + @balloon_count / @balloon_data[2] * 32, @balloon_data[1] * 32, 32, 32) if @balloon_count % @balloon_data[2] == 0
  1025.     @balloon.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  1026.     @balloon_count += 1
  1027.     @balloon_count = 0 if @balloon_count == @balloon_data[2] * 7
  1028.   end
  1029.   #--------------------------------------------------------------------------
  1030.   # ● 色調変更の更新
  1031.   #--------------------------------------------------------------------------
  1032.   def update_color
  1033.     color_set if @battler.sv.color_set != []
  1034.     return if @color_data == nil
  1035.     @color_data[4] -= 1
  1036.     if @color_data[4] == 0 && @color_data[5] != 0
  1037.       @color_data[4] = @color_data[5]
  1038.       @color_data[5] = 0
  1039.       @color_data[6] = [0,0,0,0]
  1040.     elsif @color_data[4] == 0
  1041.       @remain_color_data = @color_data
  1042.       @battler.sv.color = @color_data.dup
  1043.       return @color_data = nil
  1044.     end  
  1045.     for i in 0..3
  1046.       @color_data[i] = (@color_data[i] * (@color_data[4] - 1) + @color_data[6][i]) / @color_data[4]
  1047.     end  
  1048.     @battler.sv.color = @color_data.dup
  1049.     self.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3])
  1050.   end
  1051.   #--------------------------------------------------------------------------
  1052.   # ● 残像の更新
  1053.   #--------------------------------------------------------------------------
  1054.   def update_mirage
  1055.     if @battler.sv.mirage == [] && @mirages
  1056.       @mirage_data = []
  1057.       for mirage in @mirages do mirage.dispose end
  1058.       return @mirages = nil
  1059.     elsif @battler.sv.mirage != [] && @battler.sv.mirage != @mirage_data
  1060.       @mirage_data = @battler.sv.mirage
  1061.       @mirages = []
  1062.       for i in 0...@mirage_data[1] do @mirages[i] = Sprite.new(self.viewport) end
  1063.       @mirage_count = 0
  1064.     end
  1065.     return if !@mirages
  1066.     @mirage_count += 1
  1067.     @mirage_count = 0 if @mirage_count == @mirage_data[2] * @mirages.size
  1068.     for i in [email protected]
  1069.       mirage_body(@mirages[i], @mirage_data[4]) if @mirage_count == 1 + i * @mirage_data[2]
  1070.     end
  1071.   end
  1072.   #--------------------------------------------------------------------------
  1073.   # ● 残像本体
  1074.   #--------------------------------------------------------------------------
  1075.   def mirage_body(body, opacity)
  1076.     body.bitmap = self.bitmap.dup
  1077.     body.x = self.x
  1078.     body.y = self.y
  1079.     body.ox = self.ox
  1080.     body.oy = self.oy
  1081.     body.z = self.z - 20
  1082.     body.mirror = self.mirror
  1083.     body.angle = self.angle
  1084.     body.opacity = opacity * self.opacity / 255
  1085.     body.zoom_x = self.zoom_x
  1086.     body.zoom_y = self.zoom_y   
  1087.     body.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
  1088.     body.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  1089.   end   
  1090.   #--------------------------------------------------------------------------
  1091.   # ● 次のアニメを更新
  1092.   #--------------------------------------------------------------------------
  1093.   def update_next_anime
  1094.     return if !@next_anime
  1095.     for anime in @next_anime
  1096.       anime.update
  1097.       anime.set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y) if @horming
  1098.       anime.dispose if !anime.animation?
  1099.       @next_anime.delete(anime) if !anime.animation?
  1100.     end  
  1101.   end
  1102.   #--------------------------------------------------------------------------
  1103.   # ● フレーム更新
  1104.   #--------------------------------------------------------------------------
  1105.   alias update_sprite_battler_n03 update
  1106.   def update
  1107.     @battler.sv.update if @battler
  1108.     update_sprite_battler_n03
  1109.     update_next_anime
  1110.     update_shadow  if @battler && @shadow
  1111.     update_mirage  if @battler
  1112.     update_balloon if @battler
  1113.     update_remove if @battler && @removing && @battler.sv.change_up
  1114.   end
  1115.   #--------------------------------------------------------------------------
  1116.   # ● 戦闘アニメ消去
  1117.   #--------------------------------------------------------------------------
  1118.   def anime_off
  1119.     @battler.sv.anime_off = false
  1120.     dispose_animation
  1121.     for anime in @next_anime do anime.dispose_animation end if @next_anime
  1122.   end
  1123.   #--------------------------------------------------------------------------
  1124.   # ● バトラー入れ替え
  1125.   #--------------------------------------------------------------------------
  1126.   def remove
  1127.     @battler.sv.start_action(@battler.sv.remove_action)
  1128.     $sv_camera.wait = 40
  1129.     @battler.sv.add_action("eval('set_change')")
  1130.     @removing = true
  1131.   end
  1132.   #--------------------------------------------------------------------------
  1133.   # ● バトラー入れ替えの更新
  1134.   #--------------------------------------------------------------------------
  1135.   def update_remove
  1136.     @battler.sv.change_up = false
  1137.     @removing = false
  1138.     @battler = nil
  1139.   end  
  1140.   #--------------------------------------------------------------------------
  1141.   # ● バトラー加入
  1142.   #--------------------------------------------------------------------------
  1143.   def join(join_battler)
  1144.     $sv_camera.wait = 30
  1145.     @battler = join_battler
  1146.     @battler_name = @battler.character_name
  1147.     @battler_index = @battler.character_index
  1148.     @battler_graphic_file_index = @battler.sv.graphic_file_index
  1149.     self.bitmap = Cache.character(@battler_name)
  1150.     @battler.sv.setup(self.bitmap.width, self.bitmap.height, true)
  1151.     create_shadow
  1152.     init_visibility
  1153.   end
  1154.   #--------------------------------------------------------------------------
  1155.   # ● 通常の設定に戻す ★再定義
  1156.   #--------------------------------------------------------------------------
  1157.   def revert_to_normal
  1158.     self.blend_type = 0
  1159.     self.opacity = 255
  1160.   end
  1161.   #--------------------------------------------------------------------------
  1162.   # ● 崩壊エフェクトの更新
  1163.   #--------------------------------------------------------------------------
  1164.   alias update_collapse_sprite_battler_n03 update_collapse
  1165.   def update_collapse
  1166.     return if @battler.sv.state(1) != "敵コラプス"
  1167.     update_collapse_sprite_battler_n03
  1168.     @battler.sv.weapon_visible = false
  1169.   end
  1170.   #--------------------------------------------------------------------------
  1171.   # ● ボス崩壊エフェクトの更新 ★再定義
  1172.   #--------------------------------------------------------------------------
  1173.   def update_boss_collapse
  1174.     @effect_duration = @battler.sv.ch if @effect_duration >= @battler.sv.ch
  1175.     alpha = @effect_duration * 120 / @battler.sv.ch
  1176.     self.ox = @battler.sv.cw / 2 + @effect_duration % 2 * 4 - 2
  1177.     self.blend_type = 1
  1178.     self.color.set(255, 255, 255, 255 - alpha)
  1179.     self.opacity = alpha
  1180.     self.src_rect.y -= 1
  1181.     Sound.play_boss_collapse2 if @effect_duration % 20 == 19
  1182.   end
  1183.   #--------------------------------------------------------------------------
  1184.   # ● 別スプライトからのタイミング処理
  1185.   #--------------------------------------------------------------------------
  1186.   def set_process_timing(timing_data)
  1187.     for data in timing_data
  1188.       set_timing(data[0],data[1])
  1189.     end
  1190.     @battler.sv.timing = []
  1191.   end
  1192.   #--------------------------------------------------------------------------
  1193.   # ● タイミング処理
  1194.   #--------------------------------------------------------------------------
  1195.   def set_timing(se_flag, data)
  1196.     @ani_rate = 4
  1197.     data.se.play if se_flag
  1198.     case data.flash_scope
  1199.     when 1 ;self.flash(data.flash_color, data.flash_duration * @ani_rate)
  1200.     when 2 ;viewport.flash(data.flash_color, data.flash_duration * @ani_rate) if viewport
  1201.     when 3 ;self.flash(nil, data.flash_duration * @ani_rate)
  1202.     end
  1203.   end
  1204.   #--------------------------------------------------------------------------
  1205.   # ● 色調変更
  1206.   #--------------------------------------------------------------------------
  1207.   def color_set
  1208.     set = @battler.sv.color_set
  1209.     @battler.sv.color_set= []
  1210.     set[4] = 1 if set[4] == 0
  1211.     @remain_color_data = [0,0,0,0] if @remain_color_data == nil
  1212.     @color_data = @remain_color_data
  1213.     @color_data[4] = set[4]
  1214.     @color_data[5] = set[5]
  1215.     @color_data[6] = set
  1216.   end
  1217.   #--------------------------------------------------------------------------
  1218.   # ● 解放
  1219.   #--------------------------------------------------------------------------
  1220.   alias dispose_sprite_battler_n03 dispose
  1221.   def dispose
  1222.     dispose_sprite_battler_n03
  1223.     @shadow.dispose if @shadow != nil
  1224.     @balloon.dispose if @balloon != nil
  1225.     for mirage in @mirages do mirage.dispose end if @mirages != nil
  1226.     for anime in @next_anime do anime.dispose end if @next_anime
  1227.   end
  1228. end


  1229. #==============================================================================
  1230. # ■ Spriteset_Battle
  1231. #------------------------------------------------------------------------------
  1232. #  バトル画面のスプライトをまとめたクラスです。
  1233. #==============================================================================
  1234. class Spriteset_Battle
  1235.   #--------------------------------------------------------------------------
  1236.   # ● 戦闘背景(床)スプライトの作成 ★再定義
  1237.   #--------------------------------------------------------------------------
  1238.   def create_battleback1
  1239.     @back1_sprite = Sprite_Battle_Back.new(@viewport1, 1, battleback1_name)
  1240.     @back1_sprite.set_graphics(battleback1_bitmap) if battleback1_name != nil
  1241.     @back1_sprite.z = 0
  1242.   end
  1243.   #--------------------------------------------------------------------------
  1244.   # ● 戦闘背景(壁)スプライトの作成 ★再定義
  1245.   #--------------------------------------------------------------------------
  1246.   def create_battleback2
  1247.     @back2_sprite = Sprite_Battle_Back.new(@viewport1, 2, battleback2_name)
  1248.     @back2_sprite.set_graphics(battleback2_bitmap) if battleback2_name != nil
  1249.     @back2_sprite.z = 1
  1250.   end
  1251.   #--------------------------------------------------------------------------
  1252.   # ● アクタースプライトの作成 ★再定義
  1253.   #--------------------------------------------------------------------------
  1254.   def create_actors
  1255.     @actor_sprites = []
  1256.     for i in 0...$game_party.max_battle_members
  1257.       @actor_sprites[i] = Sprite_Battler.new(@viewport1, $game_party.members[i])
  1258.     end
  1259.     @effect_sprites = Spriteset_Sideview.new(@viewport1)
  1260.   end
  1261.   #--------------------------------------------------------------------------
  1262.   # ● アクタースプライトの更新 ★再定義
  1263.   #--------------------------------------------------------------------------
  1264.   def update_actors
  1265.     @actor_sprites.each_with_index do |sprite, i|
  1266.       sprite_join($game_party.members[i], sprite) if sprite.battler == nil && sprite.battler != $game_party.members[i]
  1267.       sprite.remove if sprite.battler != nil && !sprite.removing && sprite.battler != $game_party.members[i]
  1268.       sprite.update
  1269.     end
  1270.     @effect_sprites.update
  1271.     update_program
  1272.   end
  1273.   #--------------------------------------------------------------------------
  1274.   # ● メンバーを加える
  1275.   #--------------------------------------------------------------------------
  1276.   def sprite_join(member, sprite)
  1277.     for sp in @actor_sprites
  1278.       sp.update_remove if member == sp.battler && !sp.battler.sv.change_up
  1279.     end
  1280.     sprite.join(member)
  1281.   end
  1282.   #--------------------------------------------------------------------------
  1283.   # ● バトルプログラムの更新
  1284.   #--------------------------------------------------------------------------
  1285.   def update_program
  1286.     return if $sv_camera.program_scroll == []
  1287.     for data in  $sv_camera.program_scroll
  1288.       @back1_sprite.start_back_data(data) if data[2] == 1
  1289.       @back2_sprite.start_back_data(data) if data[2] == 2
  1290.     end
  1291.     $sv_camera.program_scroll = []
  1292.   end
  1293.   #--------------------------------------------------------------------------
  1294.   # ● ヒット時の戦闘アニメ実行
  1295.   #--------------------------------------------------------------------------
  1296.   def set_hit_animation(battler, weapon_index, hit_targets, miss)
  1297.     @effect_sprites.set_hit_animation(battler, weapon_index, hit_targets, miss)
  1298.   end
  1299.   #--------------------------------------------------------------------------
  1300.   # ● ダメージPOP
  1301.   #--------------------------------------------------------------------------
  1302.   def set_damage_pop(target)
  1303.     @effect_sprites.set_damage_pop(target)
  1304.   end
  1305.   #--------------------------------------------------------------------------
  1306.   # ● 解放
  1307.   #--------------------------------------------------------------------------
  1308.   alias dispose_spriteset_battle_n03 dispose
  1309.   def dispose
  1310.     dispose_spriteset_battle_n03
  1311.     @effect_sprites.dispose
  1312.   end
  1313.   
  1314.   
  1315.   
  1316. end


  1317. #==============================================================================
  1318. # ■ Window_BattleLog
  1319. #------------------------------------------------------------------------------
  1320. #  戦闘の進行を実況表示するウィンドウです。
  1321. #==============================================================================
  1322. class Window_BattleLog < Window_Selectable
  1323.   #--------------------------------------------------------------------------
  1324.   # ● ウェイト ★再定義
  1325.   #--------------------------------------------------------------------------
  1326.   def wait
  1327.   end
  1328.   #--------------------------------------------------------------------------
  1329.   # ● ウェイトとクリア ★再定義
  1330.   #--------------------------------------------------------------------------
  1331.   def wait_and_clear
  1332.     $sv_camera.wait = 10
  1333.   end
  1334.   #--------------------------------------------------------------------------
  1335.   # ● 行動結果の表示 ★再定義
  1336.   #--------------------------------------------------------------------------
  1337.   def display_action_results(target, item)
  1338.     if target.result.used
  1339.       last_line_number = line_number
  1340.       display_critical(target, item)
  1341.       display_damage(target, item)
  1342.       display_affected_status(target, item)
  1343.       display_failure(target, item)
  1344.     end
  1345.     off if !N03::BATTLE_LOG
  1346.   end
  1347.   #--------------------------------------------------------------------------
  1348.   # ● ウインドウ非表示
  1349.   #--------------------------------------------------------------------------
  1350.   def off
  1351.     @back_sprite.visible = self.visible = false
  1352.   end
  1353. end
  1354. #==============================================================================
  1355. # ■ Game_Interpreter
  1356. #------------------------------------------------------------------------------
  1357. #  イベントコマンドを実行するインタプリタです。
  1358. #==============================================================================
  1359. class Game_Interpreter
  1360.   #--------------------------------------------------------------------------
  1361.   # ● スイッチの操作
  1362.   #--------------------------------------------------------------------------
  1363.   alias command_121_game_interpreter_n03 command_121
  1364.   def command_121
  1365.     command_121_game_interpreter_n03
  1366.     $sv_camera.program_check
  1367.   end
  1368. end
复制代码

Lv3.寻梦者

梦石
0
星屑
1150
在线时间
245 小时
注册时间
2016-2-3
帖子
178

开拓者

2
发表于 2017-6-20 17:57:53 | 只看该作者
不知你的战斗是要单独用一幅画面显示施法和效果动画,还是就只是在整个战斗画面上显示
如果是后者,我倒是有个土办法,就是你干脆把特写p到动画里面,连脚本都省了{:2_248:}
究极半吊子
《重生学校》同人作:https://rpg.blue/thread-493882-1-1.html
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
602
在线时间
269 小时
注册时间
2014-7-5
帖子
157
3
 楼主| 发表于 2017-6-25 20:34:38 | 只看该作者
饿啊 发表于 2017-6-20 17:57
不知你的战斗是要单独用一幅画面显示施法和效果动画,还是就只是在整个战斗画面上显示
如果是后者,我倒是 ...

这个办法会影响横版战斗的人物动作,变得很违和的

点评

好吧我没空用脚本测试,还请见谅  发表于 2017-6-25 23:53
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
602
在线时间
269 小时
注册时间
2014-7-5
帖子
157
4
 楼主| 发表于 2017-7-17 13:11:51 | 只看该作者
把提问顶上去
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
878
在线时间
576 小时
注册时间
2010-6-26
帖子
793
5
发表于 2017-7-17 18:35:36 | 只看该作者
是不是跟人物要做的行动冲突
比如如果放某技能就会卡住
还是不管什么行动都是有时会卡住有时不卡。你多试试看。

点评

我试了好久了……感觉是随机的。有时候一直用有特写的技能都不会卡住,有时候用一次就卡住了,就是特写闪过,但是攻击半天都不打不出去  发表于 2017-7-18 08:50
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
602
在线时间
269 小时
注册时间
2014-7-5
帖子
157
6
 楼主| 发表于 2017-7-22 11:04:09 | 只看该作者
大BUG不解决不行额

点评

其实我完全不知道是哪出了问题  发表于 2017-7-22 12:58
复制了你的脚本测试特写动画100次没出现卡机现象- -你确定是这个脚本出了问题?  发表于 2017-7-22 12:22
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
602
在线时间
269 小时
注册时间
2014-7-5
帖子
157
7
 楼主| 发表于 2017-7-22 12:48:16 | 只看该作者
本帖最后由 普通的呆毛狼 于 2017-7-22 13:10 编辑

用的脚本是这些,基本都是66RPG找的脚本,也不清楚是不是和某些脚本有冲突

截图00.png (10.7 KB, 下载次数: 28)

添加的脚本

添加的脚本

点评

好的,知道问题所在了,开始排查ing...  发表于 2017-7-22 14:05
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
253
在线时间
574 小时
注册时间
2006-8-25
帖子
969
8
发表于 2017-7-22 14:15:27 | 只看该作者
本帖最后由 jhhuang 于 2017-7-22 15:38 编辑
普通的呆毛狼 发表于 2017-7-22 12:48
用的脚本是这些,基本都是66RPG找的脚本,也不清楚是不是和某些脚本有冲突 ...


show_animation([@subject], xxx)
改成用
show_normal_animation([@subject], xxx)

因为show_animation方法跟你脚本正在循环播放“魔法詠唱中”或“特技待機中”的动画有冲突。
导致
  #--------------------------------------------------------------------------
  # ● アニメーション表示中判定
  #--------------------------------------------------------------------------
  def animation?
    @animation != nil
  end
判断你想show_animation的动画变成了新脚本的循环动画,于是一直在判断动画结果是显示中,无法等待动画完结,就导致你说的卡在那里不动了。
情况可能比我说的复杂- -这里我只简单说下原理。
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36407
在线时间
10794 小时
注册时间
2009-3-15
帖子
4813
9
发表于 2017-7-22 14:57:15 | 只看该作者
LZ建议你发自己的工程或脚本文件给大家渣查下..
方法:新开工程把相关脚本逐个放进去调试找出冲突脚本

点评

我新开工程测试了一下,只复制了七楼前六个添加的脚本,就导致游戏卡住了额  发表于 2017-7-22 15:19
用压缩程序打包Scripts.rxdata发上66论坛就行..  发表于 2017-7-22 15:08
那个……脚本文件该怎么发?  发表于 2017-7-22 15:00
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
602
在线时间
269 小时
注册时间
2014-7-5
帖子
157
10
 楼主| 发表于 2017-7-22 15:18:07 | 只看该作者
按9楼说的,把脚本文件发上来

Scripts.rar

258.51 KB, 下载次数: 4

点评

请问这个在脚本的多少行……或者怎么搜索,我不是太懂额  发表于 2017-7-22 15:37
show_animation([@subject], xxx)改成用show_normal_animation([@subject], xxx),不过可能特写会和战斗几乎同时播放,你先用来看看,如果你想特写完全播放先,我再改  发表于 2017-7-22 15:30
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-18 10:38

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表