Project1

标题: 横战脚本一战斗就出错战斗测试也不行 [打印本页]

作者: qc641487196    时间: 2013-3-19 01:36
标题: 横战脚本一战斗就出错战斗测试也不行
本帖最后由 qc641487196 于 2013-3-19 01:38 编辑


开始还好好的,后来加了几个脚本就出现了个这个问题了,后来我以为是脚本冲突,把改动的地方全部改回去了,还是这样。
战斗测试的时候也会出现这样的错误,我这个好像是约束横版

战斗出错这一段脚本的内容是
代码复制
  1. module RPG
  2.   class Skill < UsableItem
  3.     def description
  4.       nnn = @description.split(/,/)[0].to_s
  5.       return nnn == nil ? '' : nnn
  6.     end
  7.     def skill_waiting
  8.       nnn = @description.split(/,/)[1].to_i
  9.       return nnn == nil ? 0 : nnn
  10.     end
  11.   end
  12. end
  13.  
  14. #==============================================================================
  15. # ■ Game_Battler (分割定义 1)
  16. #------------------------------------------------------------------------------
  17. #  处理角色的类。
  18. #==============================================================================
  19. class Game_Battler
  20.   #--------------------------------------------------------------------------
  21.   # ● 公开变数
  22.   #--------------------------------------------------------------------------
  23.   attr_accessor :hp_damage        # 行动結果: HP 伤害
  24.   attr_accessor :mp_damage        # 行动結果: MP 伤害
  25.   attr_accessor :move_x           # X方向的移动修正
  26.   attr_accessor :move_y           # Y方向的移动修正
  27.   attr_accessor :move_z           # Z方向的移动修正
  28.   attr_accessor :jump             # 修正跳跃
  29.   attr_accessor :active           # 是否主动
  30.   attr_accessor :non_dead         # 不死身标志
  31.   attr_accessor :dying            # 即死标志
  32.   attr_accessor :slip_damage      # 连续伤害标志
  33.   attr_accessor :derivation       # 技能连发ID
  34.   attr_accessor :individual       # 技能连发ID
  35.   attr_accessor :play             # 动作情报
  36.   attr_accessor :force_action     # 强制动作情报
  37.   attr_accessor :force_target     # 目标变更情报
  38.   attr_accessor :revival          # 复活
  39.   attr_accessor :double_damage    # HPMP两方同时伤害
  40.   attr_accessor :reflex           # 技能反射情报
  41.   attr_accessor :absorb           # 技能成本吸收
  42.   attr_reader   :base_position_x  # 初期配置X坐标
  43.   attr_reader   :base_position_y  # 初期配置Y坐标   
  44.   attr_accessor :force_damage     # 事件的伤害
  45.   attr_accessor :cp
  46.   attr_accessor :turn_count
  47.   attr_accessor :my_turn    #轮到这个家伙行动了吗?
  48.   attr_accessor :waiting_time
  49.   attr_accessor :max_waiting_time
  50.   #--------------------------------------------------------------------------
  51.   # ● 客观初期化
  52.   #--------------------------------------------------------------------------
  53.   alias initialize_n01 initialize
  54.   def initialize
  55.     @cp = 0
  56.     @turn_count = 0
  57.     @waiting_time = 0
  58.     @max_waiting_time = 1
  59.     @my_turn = false
  60.     initialize_n01
  61.     @move_x = @move_y = @move_z = @plus_y = @jump = @derivation = @play = 0
  62.     @force_action = @force_target = @base_position_x = @base_position_y = 0
  63.     @absorb = @act_time = @force_damage = 0
  64.     @active = @non_dead = @individual = @slip_damage = @revival = false
  65.     @double_damage = @dying = false
  66.     # 整合入:特殊脚本
  67.     @rx_magic_use = true  # ★ 魔法使用的标志
  68.     # 整合入:不能回复状态
  69.     @rx_hp_cannot_heal = false     # ★ HP不能回复标志
  70.     @rx_mp_cannot_heal = false     # ★ MP不能回复标志
  71.     # 整合入:特殊混乱状态
  72.     @rx_s_confusion = false  # ★ 特殊混乱标志
  73.     # 整合入:全员中状态时战败
  74.     @rx_st_lose = false  # ★ 战败标志
  75.     # 整合入:无敌状态
  76.     @rx_invincible = false  # ★ 无敌标志
  77.     # 整合入:暂时改变参数的技能
  78.     @rx_chg_atk = 0
  79.     @rx_chg_def = 0
  80.     @rx_chg_spi = 0
  81.     @rx_chg_agi = 0
  82.     @rx_chg_params = [0, 0, 0, 0]
  83.     # 整合入:自动复活一次状态
  84.     @rx_revival_a = false     # ★ 防止死亡标志A
  85.     @rx_revival_b = false     # ★ 防止死亡标志B(完全复活)
  86.     @rx_revival_effect_id = 0 # ★ 效果 ID
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ● 可以输入命令判定
  90.   #--------------------------------------------------------------------------
  91.   def inputable?
  92.     if @my_turn
  93.       return (not @hidden and restriction <= 1)
  94.     else
  95.       return false
  96.     end
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 返还最新的状态ID
  100.   #--------------------------------------------------------------------------
  101.   def state_id
  102.     return @states[@states.size - 1]
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● 判定技能的使用可能  ※再定义
  106.   #--------------------------------------------------------------------------
  107.   def skill_can_use?(skill)
  108.     return false unless skill.is_a?(RPG::Skill)
  109.     return false unless movable?
  110.     return false if silent? and skill.spi_f > 0
  111.     if skill.extension.include?("HP消耗")
  112.       return false if calc_mp_cost(skill) > hp
  113.     else
  114.       return false if calc_mp_cost(skill) > mp
  115.     end
  116.     if $game_temp.in_battle
  117.       return skill.battle_ok?
  118.     else
  119.       return skill.menu_ok?
  120.     end
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● 伤害效果  ※再定义
  124.   #     user : 技能或物品使用者
  125.   #    @hp_damage、@mp_damage、或@absorbed需要在此之前计算完毕。
  126.   #--------------------------------------------------------------------------
  127.   def execute_damage(user)
  128.     if @hp_damage > 0           # 若伤害为正数
  129.       remove_states_shock       # 攻击移除状态
  130.     end
  131.     # 特技吟唱期间受到惊扰,本轮行动作废
  132.     self.waiting_time = 0
  133.     self.hp -= @hp_damage
  134.     self.mp -= @mp_damage
  135.     if @absorbed                # 若吸收
  136.       user.hp += @hp_damage
  137.       user.mp += @mp_damage
  138.     end
  139.   end
  140.   #--------------------------------------------------------------------------
  141.   # ● 技能的消费 MP 计算  ※再定义
  142.   #--------------------------------------------------------------------------
  143.   def calc_mp_cost(skill)
  144.     if half_mp_cost && !skill.extension.include?("MP消耗减半无效")
  145.       cost = skill.mp_cost / 2
  146.     else
  147.       cost = skill.mp_cost
  148.     end
  149.     if skill.extension.include?("%成本MAX")
  150.       return self.maxhp * cost / 100 if skill.extension.include?("HP消耗")
  151.       return self.maxmp * cost / 100
  152.     elsif skill.extension.include?("%成本NOW")
  153.       return self.hp * cost / 100 if skill.extension.include?("HP消耗")
  154.       return self.mp * cost / 100
  155.     end
  156.     return cost
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 技能成本消费
  160.   #--------------------------------------------------------------------------
  161.   def consum_skill_cost(skill)
  162.     return false unless skill_can_use?(skill)
  163.     cost = calc_mp_cost(skill)
  164.     return self.hp -= cost if skill.extension.include?("HP消耗")
  165.     return self.mp -= cost
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● 根据通常攻击计算伤害  修正二刀流
  169.   #--------------------------------------------------------------------------
  170.  
  171.   def make_attack_damage_value(attacker)
  172.     damage = attacker.atk * 4 - self.def * 2        # 基础计算
  173.     damage = 0 if damage < 0                        # 设负数伤害为 0
  174.     damage *= elements_max_rate(attacker.element_set)   # 属性校正
  175.     damage /= 100
  176.     if damage == 0                                  # 若伤害为 0
  177.       damage = rand(2)                              # 一半机率伤害为1
  178.     elsif damage > 0                                # 若伤害为正数
  179. # 改变人物的重击率 =============================================================
  180.       jjj = []
  181.       for iii in attacker.states
  182.         jjj.push(iii.id)
  183.       end
  184.       kkk = attacker.cri
  185.       if jjj.include?(27)
  186.         kkk *= 50
  187.       end
  188.       if jjj.include?(28)
  189.         kkk /= 2
  190.       end
  191.       # 角色如果装备着特殊装备,则改变重击率
  192.       if attacker.is_a?(Game_Actor)
  193.         kkk += attacker.critical_up
  194.       end
  195.       @critical = (rand(100) < kkk)        # 会心一击判断      
  196. # ==============================================================================
  197.       @critical = false if prevent_critical         # 防止会心一击判断
  198.  
  199.       # 强硬!必有会心一击!========================
  200.       if jjj.include?(46)
  201.         @critical = true
  202.       end
  203.       # ============================================
  204.  
  205.       damage *= 3 if @critical                      # 会心一击校正
  206.     end
  207.     damage = apply_variance(damage, 20)             # 分散度
  208.     damage = apply_guard(damage)                    # 防御校正
  209.  
  210. # 攻击特定属性的怪要出问题 =====================================================
  211.     if self.is_a?(Game_Enemy)
  212.       if $data_enemies[self.enemy_id].note.split(/,/)[0] == "特种敌人"
  213.         neodamage = rand(3) + 1
  214.         neodamage = 3 if @critical
  215.         damage = [damage, neodamage].min
  216.       end
  217.     end
  218. # ==============================================================================
  219.  
  220. # 如果攻击者有特定状态,那么攻击也要出问题 =====================================
  221.     #if attacker.is_a?(Game_Actor)
  222.       jjj = []
  223.       for iii in attacker.states
  224.         jjj.push(iii.id)
  225.       end
  226.       if jjj.include?(25)
  227.         neodamage = rand(3) + 1
  228.         neodamage = 3 if @critical
  229.         damage = [damage, neodamage].min
  230.       end
  231.     #end
  232. # ==============================================================================
  233.  
  234.     @hp_damage = damage                             # 体力伤害
  235.     # 只有在装备了两把武器时修正有效
  236.     return unless attacker.actor?
  237.     return if attacker.weapons[0] == nil
  238.     return if attacker.weapons[1] == nil
  239.     @hp_damage = @hp_damage * N01::TWO_SWORDS_STYLE[0] / 100
  240.   end
  241.   #--------------------------------------------------------------------------
  242.   # ● 根据技能或者物品来计算伤害 修正二刀流
  243.   #--------------------------------------------------------------------------
  244.   def make_obj_damage_value(user, obj)
  245.     damage = obj.base_damage                        # 基础计算
  246.     if damage > 0                                   # 若伤害为正
  247.       damage += user.atk * 4 * obj.atk_f / 100      # 使用者攻击力关系度
  248.       damage += user.spi * 2 * obj.spi_f / 100      # 使用者精神力关系度
  249.       unless obj.ignore_defense                     # 除非无视防御力
  250.         damage -= self.def * 2 * obj.atk_f / 100    # 目标攻击力关系度
  251.         # 改了!改成“魔法防”
  252.         damage -= self.mdef * 1 * obj.spi_f / 100    # 目标精神力关系度
  253.       end
  254.       damage = 0 if damage < 0                      # 设负数伤害为0
  255.     elsif damage < 0                                # 若伤害为负
  256.       damage -= user.atk * 4 * obj.atk_f / 100      # 使用者攻击力关系度
  257.       damage -= user.spi * 2 * obj.spi_f / 100      # 使用者精神力关系度
  258.     end
  259.     damage *= elements_max_rate(obj.element_set)    # 属性校正
  260.     damage /= 100
  261.     damage = apply_variance(damage, obj.variance)   # 分散度
  262.     damage = apply_guard(damage)                    # 防御校正
  263.  
  264.  
  265. # 用法术攻击特定属性的怪要出问题 ===============================================
  266.     if self.is_a?(Game_Enemy)
  267.       if $data_enemies[self.enemy_id].note.split(/,/)[0] == "特种敌人"
  268.         if obj.is_a?(RPG::Skill)
  269.           damage = [damage, 1].min
  270.         end
  271.       end
  272.     end
  273. # ==============================================================================
  274.  
  275. # 如果攻击者有特定状态,那么攻击也要出问题 =====================================
  276.     #if user.is_a?(Game_Actor)
  277.       jjj = []
  278.       for iii in user.states
  279.         jjj.push(iii.id)
  280.       end
  281.       if jjj.include?(25)
  282.         if obj.is_a?(RPG::Skill)
  283.           damage = [damage, 1].min
  284.         end
  285.       end
  286.     #end
  287. # ==============================================================================
  288.  
  289.     if obj.damage_to_mp  
  290.       @mp_damage = damage                           # 伤害魔力
  291.     else
  292.       @hp_damage = damage                           # 伤害体力
  293.     end
  294.     # 只有在装备了两把武器时修正有效
  295.     return unless user.actor?
  296.     return if user.weapons[0] == nil
  297.     return if user.weapons[1] == nil
  298.     if obj.damage_to_mp  
  299.       @mp_damage = @mp_damage * N01::TWO_SWORDS_STYLE[1] / 100 # 伤害MP
  300.     else
  301.       @hp_damage = @hp_damage * N01::TWO_SWORDS_STYLE[1] / 100 # 伤害HP
  302.     end
  303.   end
  304.   #--------------------------------------------------------------------------
  305.   # ● 使用通常攻击的効果  全部战斗不能,不能绝对回避的处理
  306.   #--------------------------------------------------------------------------
  307.   def perfect_attack_effect(attacker)
  308.     clear_action_results
  309.     make_attack_damage_value(attacker)            # 计算伤害
  310.     execute_damage(attacker)                      # 反映伤害
  311.     apply_state_changes(attacker)                 # 状态变化
  312.   end
  313.   #--------------------------------------------------------------------------
  314.   # ● 使用技能的效果  全部战斗不能,不能绝对回避的处理
  315.   #--------------------------------------------------------------------------
  316.   def perfect_skill_effect(user, skill)
  317.     clear_action_results
  318.     make_obj_damage_value(user, skill)            # 伤害計算
  319.     make_obj_absorb_effect(user, skill)           # 吸収効果計算
  320.     execute_damage(user)                          # 伤害反映
  321.     apply_state_changes(skill)                    # ステート変化
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ● 使用物品的効果  全部战斗不能,不能绝对回避的处理
  325.   #--------------------------------------------------------------------------
  326.   def perfect_item_effect(user, item)
  327.     clear_action_results
  328.     hp_recovery = calc_hp_recovery(user, item)    # 计算HP的回复量
  329.     mp_recovery = calc_mp_recovery(user, item)    # 计算MP的回复量
  330.     make_obj_damage_value(user, item)             # 计算伤害
  331.     @hp_damage -= hp_recovery                     # 扣除HP的回复量
  332.     @mp_damage -= mp_recovery                     # 扣除MP的回复量
  333.     make_obj_absorb_effect(user, item)            # 计算吸收效果
  334.     execute_damage(user)                          # 反映伤害
  335.     item_growth_effect(user, item)                # 使用成长效果
  336.     if item.physical_attack and @hp_damage == 0   # 物理ノー伤害判定
  337.       return                                    
  338.     end
  339.     apply_state_changes(item)                     # 状态变化
  340.   end
  341.   #--------------------------------------------------------------------------
  342.   # ● 伤害的反映
  343.   #--------------------------------------------------------------------------
  344.   alias execute_damage_n01 execute_damage
  345.   def execute_damage(user)
  346.     execute_damage_n01(user)
  347.     # 吸収时这里的处理相冲
  348.     if @absorbed               
  349.       user.hp_damage = -@hp_damage
  350.       user.mp_damage = -@mp_damage
  351.     end
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # ● 使用技能的効果
  355.   #--------------------------------------------------------------------------
  356.   alias skill_effect_n01 skill_effect
  357.   def skill_effect(user, obj)
  358.     # 保持变化前的HPMP
  359.     nowhp = self.hp
  360.     nowmp = self.mp
  361.     # 为了计算现在HPMP的威力获取变化前的使用者的HPMP
  362.     if obj.extension.include?("HP消耗")
  363.       user_hp = user.hp + user.calc_mp_cost(obj)
  364.       user_mp = user.mp
  365.     else  
  366.       user_hp = user.hp
  367.       user_mp = user.mp + user.calc_mp_cost(obj)
  368.     end  
  369.     # 确认扩张设定
  370.     check_extension(obj)
  371.     # 计算伤害
  372.     skill_effect_n01(user, obj)
  373.     # 有伤害系的扩张时这里的处理会相冲
  374.     if @extension
  375.       self.hp = nowhp
  376.       self.mp = nowmp
  377.     end
  378.     # 攻击未名中时中断处理
  379.     return if self.evaded or self.missed
  380.     # 变换伤害属性
  381.     damage = @hp_damage unless obj.damage_to_mp
  382.     damage = @mp_damage if obj.damage_to_mp
  383.     # 比例伤害
  384.     if @ratio_maxdamage != nil
  385.       damage = self.maxhp * @ratio_maxdamage / 100 unless obj.damage_to_mp
  386.       damage = self.maxmp * @ratio_maxdamage / 100 if obj.damage_to_mp
  387.     end
  388.     if @ratio_nowdamage != nil
  389.       damage = self.hp * @ratio_nowdamage / 100 unless obj.damage_to_mp
  390.       damage = self.mp * @ratio_nowdamage / 100 if obj.damage_to_mp
  391.     end
  392.     # 成本威力
  393.     if @cost_damage
  394.       cost = user.calc_mp_cost(obj)
  395.       if obj.extension.include?("HP消耗")
  396.         damage = damage * cost / user.maxhp
  397.       else
  398.         damage = damage * cost / user.maxmp
  399.       end
  400.     end
  401.     # 现在HP威力
  402.     damage = damage * user_hp / user.maxhp if @nowhp_damage
  403.     # 现在MP威力
  404.     damage = damage * user_mp / user.maxmp if @nowmp_damage
  405.     # 放弃伤害属性的变换
  406.     @hp_damage = damage unless obj.damage_to_mp
  407.     @mp_damage = damage if obj.damage_to_mp
  408.     # 反应扩张
  409.     if @extension
  410.       self.hp -= @hp_damage
  411.       self.mp -= @mp_damage
  412.     end
  413.     # 初期化
  414.     @extension = false
  415.     @cost_damage = false
  416.     @nowhp_damage = false
  417.     @nowmp_damage = false
  418.     @ratio_maxdamage = nil
  419.     @ratio_nowdamage = nil
  420.   end
  421.   #--------------------------------------------------------------------------
  422.   # ● 确认扩张设定
  423.   #--------------------------------------------------------------------------
  424.   def check_extension(skill)
  425.     for ext in skill.extension
  426.       # 成本威力
  427.       if ext == "成本威力"  
  428.         @extension = true
  429.         next @cost_damage = true
  430.       # 现在HP威力
  431.       elsif ext == "现HP威力"
  432.         @extension = true
  433.         next @nowhp_damage = true
  434.       # 现在MP威力
  435.       elsif ext == "现MP威力"
  436.         @extension = true
  437.         next @nowmp_damage = true
  438.       else
  439.         # 比例伤害
  440.         name = ext.split('')
  441.         if name[5] == "M"
  442.           name = name.join
  443.           name.slice!("%伤害MAX/")
  444.           @extension = true
  445.           next @ratio_maxdamage = name.to_i
  446.         elsif name[5] == "N"
  447.           name = name.join
  448.           name.slice!("%伤害NOW/")
  449.           @extension = true
  450.           next @ratio_nowdamage = name.to_i
  451.         end  
  452.       end
  453.     end  
  454.   end
  455.   #--------------------------------------------------------------------------
  456.   # ● 初期配置的変更
  457.   #--------------------------------------------------------------------------
  458.   def change_base_position(x, y)
  459.     @base_position_x = x
  460.     @base_position_y = y
  461.   end
  462.   #--------------------------------------------------------------------------
  463.   # ● 初期化
  464.   #--------------------------------------------------------------------------
  465.   def reset_coordinate
  466.     @move_x = @move_y = @move_z = @jump = @derivation = 0
  467.     @active = @non_dead = @individual = false   
  468.   end
  469.   #--------------------------------------------------------------------------
  470.   # ● 使用连续伤害的効果
  471.   #--------------------------------------------------------------------------
  472.   def slip_damage_effect
  473.     if slip_damage? and @hp > 0
  474.       @hp_damage = apply_variance(maxhp / 20, 10)
  475.       @hp_damage = @hp - 1 if @hp_damage >= @hp
  476.       self.hp -= @hp_damage
  477.       if self.hp <= 0
  478.         self.hp = 1
  479.       end
  480.     end
  481.   end
  482.   #--------------------------------------------------------------------------
  483.   # ● 事件的伤害POP
  484.   #--------------------------------------------------------------------------
  485.   def damage_num(num = nil)
  486.     return if dead? or !$game_temp.in_battle or num == 0
  487.     @force_damage = num
  488.   end
  489. end  
  490.  
  491. #==============================================================================
  492. # ■ Game_Troop
  493. #------------------------------------------------------------------------------
  494. #  处理敌人队伍和战斗相关资料的类,也可执行如战斗事件管理之类的功能。
  495. # 本类的实例请参考 $game_troop。
  496. #==============================================================================
  497.  
  498. class Game_Troop < Game_Unit
  499.   #--------------------------------------------------------------------------
  500.   # ● 增加回合数
  501.   #--------------------------------------------------------------------------
  502.   def increase_turn(enemy)
  503.     for page in troop.pages
  504.       if page.span == 1
  505.         @event_flags= false
  506.       end
  507.     end
  508.     #enemy.turn_count += 1
  509.     aaa = []
  510.     for iii in $game_troop.members
  511.       aaa.push(iii.turn_count)
  512.     end
  513.     @turn_count = aaa.min
  514.   end
  515.   #--------------------------------------------------------------------------
  516.   # ● 生成战斗行动
  517.   #--------------------------------------------------------------------------
  518.   def make_actions(enemy)
  519.     enemy.make_action
  520.   end
  521. end
  522.  
  523. #==============================================================================
  524. # ■ Game_Actor
  525. #------------------------------------------------------------------------------
  526. #  处理主人公的类。
  527. #==============================================================================
  528. class Game_Actor < Game_Battler
  529.   #--------------------------------------------------------------------------
  530.   # ● 公开变数
  531.   #--------------------------------------------------------------------------
  532.   attr_accessor :two_swords_change          # 强制替换二刀流的标志
  533.   #--------------------------------------------------------------------------
  534.   # ● 根据ID判定技能是否习得
  535.   #--------------------------------------------------------------------------
  536.   def skill_id_learn?(skill_id)
  537.     return @skills.include?(skill_id)
  538.   end
  539.   #--------------------------------------------------------------------------
  540.   # ● 判定技能的使用可能  ※再定义
  541.   #--------------------------------------------------------------------------
  542.   def skill_can_use?(skill)
  543.     return super
  544.   end
  545.   #--------------------------------------------------------------------------
  546.   # ● 图片的变更
  547.   #--------------------------------------------------------------------------
  548.   def graphic_change(character_name)
  549.     @character_name = character_name
  550.   end
  551.   #--------------------------------------------------------------------------
  552.   # ● 击倒的实行 ※再定义
  553.   #--------------------------------------------------------------------------
  554.   def perform_collapse
  555.     Sound.play_actor_collapse if $game_temp.in_battle and dead?
  556.   end
  557.   #--------------------------------------------------------------------------
  558.   # ● 初期配置的取得
  559.   #--------------------------------------------------------------------------
  560.   def base_position
  561.     base = N01::ACTOR_POSITION[self.index]
  562.     @base_position_x = base[0]
  563.     @base_position_y = base[1]
  564.     # バックアタック時はX軸を逆に
  565.     @base_position_x = Graphics.width - base[0] if $back_attack && N01::BACK_ATTACK
  566.   end
  567.   #--------------------------------------------------------------------------
  568.   # ● 战斗画面 X 坐标的取得
  569.   #--------------------------------------------------------------------------
  570.   def position_x
  571.     return 0 if self.index == nil
  572.     return @base_position_x + @move_x
  573.   end
  574.   #--------------------------------------------------------------------------
  575.   # ● 战斗画面 Y 坐标的取得
  576.   #--------------------------------------------------------------------------
  577.   def position_y
  578.     return 0 if self.index == nil
  579.     return @base_position_y + @move_y + @jump
  580.   end
  581.   #--------------------------------------------------------------------------
  582.   # ● 战斗画面 Z 坐标的取得
  583.   #--------------------------------------------------------------------------
  584.   def position_z
  585.     return 0 if self.index == nil
  586.     return self.index + @base_position_y + @move_y + @move_z - @jump + 200
  587.   end  
  588. end
  589. #==============================================================================
  590. # ■ Game_Enemy
  591. #------------------------------------------------------------------------------
  592. #  处理敌方的类。
  593. #==============================================================================
  594. class Game_Enemy < Game_Battler
  595.   #--------------------------------------------------------------------------
  596.   # ● 公开变数
  597.   #--------------------------------------------------------------------------
  598.   attr_accessor :adj_speed        # 复数会合行动的速度修正
  599.   attr_accessor :act_time         # 行动数回
  600.   #--------------------------------------------------------------------------
  601.   # ● 动作速度的決定 复数回合行动用
  602.   #--------------------------------------------------------------------------
  603.   def make_action_speed2(adj)
  604.     @adj_speed = self.action.speed if @adj_speed == nil
  605.     @adj_speed = @adj_speed * adj / 100
  606.   end
  607.   #--------------------------------------------------------------------------
  608.   # ● 击倒的实行 ※再定义
  609.   #--------------------------------------------------------------------------
  610.   def perform_collapse
  611.     @force_action = ["N01collapse"] if $game_temp.in_battle and dead?
  612.   end
  613.   #--------------------------------------------------------------------------
  614.   # ● 获取初期配置
  615.   #--------------------------------------------------------------------------
  616.   def base_position
  617.     return if self.index == nil
  618.     # 确认角色画像的大小修正Y坐标
  619.     bitmap = Bitmap.new("Graphics/Battlers/" + @battler_name) if !self.anime_on
  620.     bitmap = Bitmap.new("Graphics/Characters/" + @battler_name) if self.anime_on && N01::WALK_ANIME
  621.     bitmap = Bitmap.new("Graphics/Characters/" + @battler_name + "_1") if self.anime_on && !N01::WALK_ANIME
  622.     height = bitmap.height
  623.     @base_position_x = self.screen_x + self.position_plus[0]
  624.     @base_position_y = self.screen_y + self.position_plus[1] - height / 3
  625.     bitmap.dispose
  626.     # 背后攻击时X轴逆转
  627.     if $back_attack && N01::BACK_ATTACK
  628.       @base_position_x = Graphics.width - self.screen_x - self.position_plus[0]
  629.     end
  630.   end
  631.   #--------------------------------------------------------------------------
  632.   # ● 战斗画面 X 坐标的取得
  633.   #--------------------------------------------------------------------------
  634.   def position_x
  635.     return @base_position_x - @move_x
  636.   end
  637.   #--------------------------------------------------------------------------
  638.   # ● 战斗画面 Y 坐标的取得
  639.   #--------------------------------------------------------------------------
  640.   def position_y
  641.     return @base_position_y + @move_y + @jump
  642.   end
  643.   #--------------------------------------------------------------------------
  644.   # ● 战斗画面 Z 坐标的取得
  645.   #--------------------------------------------------------------------------
  646.   def position_z
  647.     return position_y + @move_z - @jump + 200
  648.   end
  649. end
  650. #==============================================================================
  651. # ■ Sprite_Damage
  652. #------------------------------------------------------------------------------
  653. #  伤害表示的精灵。
  654. #==============================================================================
  655. class Sprite_Damage < Sprite_Base
  656.   #--------------------------------------------------------------------------
  657.   # ● 公开变数
  658.   #--------------------------------------------------------------------------
  659.   attr_accessor :battler
  660.   #--------------------------------------------------------------------------
  661.   # ● 客观初期化
  662.   #--------------------------------------------------------------------------
  663.   def initialize(viewport,battler = nil)
  664.     super(viewport)
  665.     @battler = battler
  666.     @damage = 0
  667.     @duration = 0
  668.     @x = 0
  669.     @y = 0
  670.     @z_plus = 0
  671.     @minus = false
  672.     @num1 = Sprite.new(viewport)
  673.     @num2 = Sprite.new(viewport)
  674.     @num3 = Sprite.new(viewport)
  675.     @num4 = Sprite.new(viewport)
  676.     @num5 = Sprite.new(viewport)
  677.     @num1.visible = false
  678.     @num2.visible = false
  679.     @num3.visible = false
  680.     @num4.visible = false
  681.     @num5.visible = false
  682.   end
  683.   #--------------------------------------------------------------------------
  684.   # ● 更新
  685.   #--------------------------------------------------------------------------
  686.   def update
  687.     force_damage
  688.     move_damage(@num5, @pop_time) if @num5.visible
  689.     move_damage(@num4, @pop_time - 2) if @num4.visible
  690.     move_damage(@num3, @pop_time - 4) if @num3.visible
  691.     move_damage(@num2, @pop_time - 6) if @num2.visible
  692.     move_damage(@num1, @pop_time - 8) if @num1.visible
  693.     move_window if @window != nil
  694.     @duration -= 1 if @duration > 0
  695.   end
  696.   #--------------------------------------------------------------------------
  697.   # ● 事件的伤害POP
  698.   #--------------------------------------------------------------------------
  699.   def force_damage
  700.     if @battler.force_damage != 0
  701.       damage_pop(@battler.force_damage)
  702.       @battler.hp -= @battler.force_damage
  703.       @force_damage = true
  704.       @battler.force_damage = 0
  705.       $game_temp.status_window_refresh = true
  706.     end
  707.   end
  708.   #--------------------------------------------------------------------------
  709.   # ● 数値的移动
  710.   #--------------------------------------------------------------------------
  711.   def move_damage(num, min)
  712.     case @duration
  713.     when min-1..min
  714.       num.y -= 4
  715.     when min-3..min-2
  716.       num.y -= 3
  717.     when min-6..min-4
  718.       num.y -= 2
  719.     when min-14..min-7
  720.       num.y += 2
  721.     when min-17..min-15
  722.       num.y -= 2
  723.     when min-23..min-18
  724.       num.y += 1
  725.     when min-27..min-24
  726.       num.y -= 1
  727.     when min-30..min-28
  728.       num.y += 1
  729.     when min-33..min-31
  730.       num.y -= 1
  731.     when min-36..min-34
  732.       num.y += 1
  733.     end
  734.     next_damage if @battler.double_damage && @duration == min-34
  735.     num.opacity = 256 - (12 - @duration) * 32
  736.     num.visible = false if @duration == 0
  737.     if @force_damage && @duration == 0
  738.       @force_damage = false
  739.       @battler.perform_collapse
  740.     end
  741.   end
  742.   #--------------------------------------------------------------------------
  743.   # ● 文字窗口的移动
  744.   #--------------------------------------------------------------------------
  745.   def move_window
  746.     @window.x -= 6 if @window_time > 0 && @window.x > 0
  747.     @window_time -= 1
  748.     if @duration == 0
  749.       @window.dispose
  750.       @window = nil
  751.     end
  752.   end  
  753.   #--------------------------------------------------------------------------
  754.   # ● HPMP两方同时伤害
  755.   #--------------------------------------------------------------------------
  756.   def next_damage
  757.     @battler.hp_damage = 0
  758.     @battler.double_damage = false
  759.     damage_pop
  760.   end
  761.   #--------------------------------------------------------------------------
  762.   # ● 准备伤害POP
  763.   #--------------------------------------------------------------------------
  764.   def damage_pop(num = nil)
  765.     reset
  766.     damage = battler.hp_damage
  767.     # 抽出状态的变化
  768.     states = battler.added_states
  769.     text = ""
  770.     # MP伤害用文本(HPMP两方同时伤害除外)
  771.     if [email protected]_damage && @battler.mp_damage != 0
  772.       text = N01::POP_MP_DAM if battler.mp_damage > 0
  773.       text = N01::POP_MP_REC if battler.mp_damage < 0
  774.       damage = battler.mp_damage
  775.     end
  776.     # 连续伤害不显示MP伤害以外的文字
  777.     if num == nil
  778.       text = N01::POP_MISS if battler.missed && states == []
  779.       text = N01::POP_DAMAGE0 if damage == 0 && states == [] && !battler.revival
  780.       text = N01::POP_EVA if battler.evaded
  781.       text = N01::POP_CRI if battler.critical
  782.       for state in states
  783.         # 无POP设定的状态不显示
  784.         unless state.extension.include?("无POP")
  785.           text += " " if text != ""
  786.           text += state.name
  787.         end
  788.       end
  789.     else
  790.       damage = num
  791.     end
  792.     # 区分伤害和回复
  793.     @minus = false
  794.     @minus = true if damage < 0
  795.     damage = damage.abs
  796.     # 略微调整POP位置
  797.     adjust = -16
  798.     adjust = 16 if $back_attack
  799.     adjust = 32 if battler.critical
  800.     adjust = 0 if damage == 0
  801.     @x = battler.position_x + adjust
  802.     @y = battler.position_y
  803.     window(text) if text != ""
  804.     @pop_time = N01::NUM_DURATION
  805.     # 没有伤害时没有数字的POP
  806.     return @duration = @pop_time if damage == 0
  807.     @num_time = -1
  808.     damage_file(@num1, damage % 10, @pop_time - 7) if damage >= 0
  809.     damage_file(@num2, (damage % 100)/10, @pop_time - 5) if damage >= 10
  810.     damage_file(@num3, (damage % 1000)/100, @pop_time - 3) if damage >= 100
  811.     damage_file(@num4, (damage % 10000)/1000, @pop_time - 1) if damage >= 1000
  812.     damage_file(@num5, (damage % 100000)/10000, @pop_time + 1) if damage >= 10000
  813.   end  
  814.   #--------------------------------------------------------------------------
  815.   # ● 准备情报窗口
  816.   #--------------------------------------------------------------------------
  817.   def window(text)
  818.     @window = Window_Damage.new(@x - 64, @y - 22)
  819.     @window.pop_text(text)
  820.     @window_time = 5
  821.   end  
  822.   #--------------------------------------------------------------------------
  823.   # ● 准备数字画像
  824.   #--------------------------------------------------------------------------
  825.   def damage_file(num, cw, dur)
  826.     num.visible = true
  827.     # 判別文件
  828.     file = N01::DAMAGE_GRAPHICS
  829.     file = N01::RECOVER_GRAPHICS if @minus
  830.     # 数字
  831.     num.bitmap = Cache.system(file)
  832.     @num_time += 1
  833.     sx = num.bitmap.width / 10
  834.     num.src_rect.set(cw * sx, 0, sx, num.height)
  835.     num.x = @x - (num.width + N01::NUM_INTERBAL) * @num_time
  836.     num.y = @y
  837.     num.z = 2000 - @num_time
  838.     @duration = dur
  839.     @window.x = num.x - @window.width + 64 if @window != nil && N01::NON_DAMAGE_WINDOW
  840.     @window.x = num.x - @window.width + 26 if @window != nil && !N01::NON_DAMAGE_WINDOW
  841.     @window.x = 0 if @window != nil && @window.x < 0
  842.   end
  843.   #--------------------------------------------------------------------------
  844.   # ● 伤害组合
  845.   #--------------------------------------------------------------------------
  846.   def reset
  847.     @num5.visible = @num4.visible = @num3.visible = @num2.visible = @num1.visible = false
  848.     @window.dispose if @window != nil
  849.     @window = nil
  850.   end  
  851.   #--------------------------------------------------------------------------
  852.   # ● 开放
  853.   #--------------------------------------------------------------------------
  854.   def dispose
  855.     super
  856.     @num1.dispose
  857.     @num2.dispose
  858.     @num3.dispose
  859.     @num4.dispose
  860.     @num5.dispose
  861.     @window.dispose if @window != nil
  862.   end  
  863. end
  864. #==============================================================================
  865. # ■ Window_Damage
  866. #------------------------------------------------------------------------------
  867. #  危机等表示的窗口。
  868. #==============================================================================
  869. class Window_Damage < Window_Base
  870.   #--------------------------------------------------------------------------
  871.   # ● 客观初期化
  872.   #--------------------------------------------------------------------------
  873.   def initialize(x, y)
  874.     super(x, y, 160, 46)
  875.     self.opacity = 0 if N01::NON_DAMAGE_WINDOW
  876.   end
  877.   #--------------------------------------------------------------------------
  878.   # ● 窗口内容的作成
  879.   #--------------------------------------------------------------------------
  880.   def create_contents
  881.     self.contents.dispose
  882.     self.contents = Bitmap.new(width - 32, height - 32)
  883.   end
  884.   #--------------------------------------------------------------------------
  885.   # ● 状态设定
  886.   #--------------------------------------------------------------------------
  887.   def pop_text(text, align = 1)
  888.     self.contents.clear
  889.     self.width = self.contents.text_size(text).width + 36
  890.     self.contents = Bitmap.new(width - 32, height - 32)
  891.     self.contents.font.color = normal_color
  892.     self.contents.font.size = 16
  893.     self.contents.draw_text(0,-8, width - 32, 32, text, align)
  894.   end  
  895. end  
  896. #==============================================================================
  897. # ■ Window_Base
  898. #------------------------------------------------------------------------------
  899. #  游戏中处理所有窗口的超级类。
  900. #==============================================================================
  901. class Window_Base < Window  
  902.   #--------------------------------------------------------------------------
  903.   # ● 状态的描画  ※再定义(反映设定不显示状态ICON)
  904.   #--------------------------------------------------------------------------
  905.   def draw_actor_state(actor, x, y, width = 96)
  906.     count = 0
  907.     for state in actor.states
  908.       break if state.extension.include?("不显示ICON")
  909.       draw_icon(state.icon_index, x + 24 * count, y)
  910.       count += 1
  911.       break if (24 * count > width - 24)
  912.     end
  913.   end
  914. end
  915. #==============================================================================
  916. # ■ Game_Temp
  917. #------------------------------------------------------------------------------
  918. #  不包含存储数据、处理一时数据的类。
  919. #==============================================================================
  920. class Game_Temp
  921.   #--------------------------------------------------------------------------
  922.   # ● 公开变数
  923.   #--------------------------------------------------------------------------
  924.   attr_accessor :status_window_refresh    # 状态窗口的还原标志
  925.   #--------------------------------------------------------------------------
  926.   # ● 客观初期化
  927.   #--------------------------------------------------------------------------
  928.   alias initialize_n01 initialize
  929.   def initialize
  930.     initialize_n01
  931.     @status_window_refresh = false
  932.   end
  933. end  
  934. #==============================================================================
  935. # ■ Game_Interpreter
  936. #------------------------------------------------------------------------------
  937. #  实行时间指令的解释。
  938. #==============================================================================
  939. class Game_Interpreter
  940.   #--------------------------------------------------------------------------
  941.   # ● HP 的增减
  942.   #--------------------------------------------------------------------------
  943.   def command_311
  944.     if $game_temp.in_battle
  945.       value = operate_value(@params[1], @params[2], @params[3])
  946.       iterate_actor_id(@params[0]) do |actor|
  947.         next if actor.dead?
  948.         if @params[4] == false and actor.hp + value <= 0
  949.           actor.damage_num(actor.hp - 1) # 如果不允许战斗不能时变为1
  950.         else
  951.           actor.damage_num(-value)
  952.         end
  953.       end
  954.       return true
  955.     else
  956.       value = operate_value(@params[1], @params[2], @params[3])
  957.       iterate_actor_id(@params[0]) do |actor|
  958.         next if actor.dead?
  959.         if @params[4] == false and actor.hp + value <= 0
  960.           actor.hp = 1    # 如果不允许战斗不能时变为1
  961.         else
  962.           actor.hp += value
  963.         end
  964.         actor.perform_collapse
  965.       end
  966.       if $game_party.all_dead?
  967.         $game_temp.next_scene = "gameover"
  968.       end
  969.       return true
  970.     end  
  971.   end
  972.   #--------------------------------------------------------------------------
  973.   # ● 敌角色的 HP 增减
  974.   #--------------------------------------------------------------------------
  975.   def command_331
  976.     value = operate_value(@params[1], @params[2], @params[3])
  977.     iterate_enemy_index(@params[0]) do |enemy|
  978.       if enemy.hp > 0
  979.         if @params[4] == false and enemy.hp + value <= 0
  980.           enemy.damage_num(enemy.hp - 1) # 如果不允许战斗不能时变为1
  981.         else
  982.           enemy.damage_num(-value)
  983.         end
  984.       end
  985.     end
  986.     return true
  987.   end
  988. end


战斗测试出错的脚本是这段
代码复制
  1. #==============================================================================
  2. # 随机渐变,区域控制战斗背景图 by 沉影不器
  3. #------------------------------------------------------------------------------
  4. # 功能描述: ① 使用区域名称定义不同的战斗背景图
  5. #              如果没有找到背景图,则使用RMVX默认眩晕背景
  6. #           ② 进入战斗时,随机使用渐变效果
  7. # 使用方法: ① 复制脚本,插入到Main之前
  8. #           ② 在Graphics文件夹下新建Battlebacks文件夹用于存放战斗背景图
  9. #              您也可以在脚本第16行自行设定路径
  10. #           ③ 准备与区域名称相同的战斗背景图到您设定的战斗背景图文件夹内
  11. #           ④ 在Graphics文件夹下新建Transitions文件夹用于存放渐变图
  12. #              您也可以在脚本第17行自行设定路径
  13. #           ⑤ 在脚本第18行设定战斗背景图的后缀名
  14. #           ⑥ 在脚本第19行设定是否直接用地图做战斗图
  15. #------------------------------------------------------------------------------
  16.   B_PATH = "Graphics/Battlebacks/"      # 设定战斗背景图存储路径
  17.   T_PATH = "Graphics/Transitions/"      # 设定渐变图存储路径
  18.   EXTNAME = ".jpg"                      # 设定战斗背景图后缀名
  19.   DIRECT_MAP = true                    # 设定是否直接用地图做战斗图
  20. #==============================================================================
  21. module Cache
  22.   #--------------------------------------------------------------------------
  23.   # ● 获取战斗背景图
  24.   #     filename : 文件名
  25.   #     hue      : 色相变化值
  26.   #--------------------------------------------------------------------------
  27.   def self.battleback(filename, hue)
  28.     load_bitmap(B_PATH, filename, hue)
  29.   end
  30. end
  31.  
  32. #==============================================================================
  33. # ■ Spriteset_Battle
  34. #------------------------------------------------------------------------------
  35. #  处理战斗画面的活动块的类。本类在 Scene_Battle 类
  36. # 的内部使用。
  37. #==============================================================================
  38. class Spriteset_Battle
  39.   #--------------------------------------------------------------------------
  40.   # ● 生成战斗背景活动块
  41.   #--------------------------------------------------------------------------
  42. def create_battleback
  43.    for area in $data_areas.values
  44.      break if $game_player.in_area?(area)
  45.    end
  46.    @battleback_sprite = Sprite.new(@viewport1)
  47.    if area != nil and FileTest.exist?(B_PATH+area.name+EXTNAME) and !DIRECT_MAP
  48.      @battleback_sprite.bitmap = Cache.battleback(area.name, 0)
  49.    else
  50.      source = $game_temp.background_bitmap
  51.      bitmap = Bitmap.new(640, 480)
  52.      bitmap.stretch_blt(bitmap.rect, source, source.rect)
  53.      bitmap.radial_blur(90, 12) unless DIRECT_MAP
  54.      @battleback_sprite.bitmap = bitmap
  55.      @battleback_sprite.ox = 320
  56.      @battleback_sprite.oy = 240
  57.      @battleback_sprite.x = 272
  58.      @battleback_sprite.y = 176
  59.      @battleback_sprite.wave_amp = 8 unless DIRECT_MAP
  60.      @battleback_sprite.wave_length = 240 unless DIRECT_MAP
  61.      @battleback_sprite.wave_speed = 120 unless DIRECT_MAP
  62.    end
  63.   end
  64. end
  65.  
  66. #==============================================================================
  67. # ■ Scene_Title
  68. #------------------------------------------------------------------------------
  69. #  处理标题画面的类。
  70. #==============================================================================
  71. class Scene_Title < Scene_Base
  72.   #--------------------------------------------------------------------------
  73.   # ● 载入战斗测试用的数据库
  74.   #--------------------------------------------------------------------------
  75.   alias bg_load load_bt_database
  76.   def load_bt_database
  77.     bg_load
  78.     $data_areas = load_data("Data/Areas.rvdata")
  79.   end
  80. end
  81.  
  82. #==============================================================================
  83. # ■ Scene_Map
  84. #------------------------------------------------------------------------------
  85. #  处理地图画面的类。
  86. #==============================================================================
  87. class Scene_Map < Scene_Base
  88.   #--------------------------------------------------------------------------
  89.   # ● 执行战斗前变换
  90.   #--------------------------------------------------------------------------
  91.   def perform_battle_transition
  92.     file = Dir.entries(T_PATH)
  93.     file.delete(".");file.delete("..")
  94.     file_index = rand(file.size)
  95.     Graphics.transition(80, T_PATH + file[file_index], 80)
  96.     Graphics.freeze
  97.   end
  98. end

作者: 刷版姬    时间: 2013-3-19 07:41
= =。自己确认一遍顺序问题。最好上传工程。
作者: qc641487196    时间: 2013-3-19 08:56
刷版姬 发表于 2013-3-19 07:41
= =。自己确认一遍顺序问题。最好上传工程。

顺序是指什么?
作者: qc641487196    时间: 2013-3-19 09:04
刷版姬 发表于 2013-3-19 07:41
= =。自己确认一遍顺序问题。最好上传工程。

那先帮我看看这个吧,最新的工程在我自己电脑上,现在在公司,只有这个,这个脚本目前就是在数据库里战斗测试的时候出错
百度盘
pan.baidu.com/share/link?shareid=449401&uk=3726596985




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