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

Project1

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

[已经过期] 横战脚本一战斗就出错战斗测试也不行

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
38 小时
注册时间
2013-3-3
帖子
36
跳转到指定楼层
1
发表于 2013-3-19 01:36:51 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 qc641487196 于 2013-3-19 01:38 编辑


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

战斗出错这一段脚本的内容是
[pre lang="" line="1"]
module RPG
  class Skill < UsableItem
    def description
      nnn = @description.split(/,/)[0].to_s
      return nnn == nil ? '' : nnn
    end
    def skill_waiting
      nnn = @description.split(/,/)[1].to_i
      return nnn == nil ? 0 : nnn
    end
  end
end

#==============================================================================
# ■ Game_Battler (分割定义 1)
#------------------------------------------------------------------------------
#  处理角色的类。
#==============================================================================
class Game_Battler
  #--------------------------------------------------------------------------
  # ● 公开变数
  #--------------------------------------------------------------------------
  attr_accessor :hp_damage        # 行动結果: HP 伤害
  attr_accessor :mp_damage        # 行动結果: MP 伤害
  attr_accessor :move_x           # X方向的移动修正
  attr_accessor :move_y           # Y方向的移动修正
  attr_accessor :move_z           # Z方向的移动修正
  attr_accessor :jump             # 修正跳跃
  attr_accessor :active           # 是否主动
  attr_accessor :non_dead         # 不死身标志
  attr_accessor :dying            # 即死标志
  attr_accessor :slip_damage      # 连续伤害标志
  attr_accessor :derivation       # 技能连发ID
  attr_accessor :individual       # 技能连发ID
  attr_accessor :play             # 动作情报
  attr_accessor :force_action     # 强制动作情报
  attr_accessor :force_target     # 目标变更情报
  attr_accessor :revival          # 复活
  attr_accessor :double_damage    # HPMP两方同时伤害
  attr_accessor :reflex           # 技能反射情报
  attr_accessor :absorb           # 技能成本吸收
  attr_reader   :base_position_x  # 初期配置X坐标
  attr_reader   :base_position_y  # 初期配置Y坐标   
  attr_accessor :force_damage     # 事件的伤害
  attr_accessor :cp
  attr_accessor :turn_count
  attr_accessor :my_turn    #轮到这个家伙行动了吗?
  attr_accessor :waiting_time
  attr_accessor :max_waiting_time
  #--------------------------------------------------------------------------
  # ● 客观初期化
  #--------------------------------------------------------------------------
  alias initialize_n01 initialize
  def initialize
    @cp = 0
    @turn_count = 0
    @waiting_time = 0
    @max_waiting_time = 1
    @my_turn = false
    initialize_n01
    @move_x = @move_y = @move_z = @plus_y = @jump = @derivation = @play = 0
    @force_action = @force_target = @base_position_x = @base_position_y = 0
    @absorb = @act_time = @force_damage = 0
    @active = @non_dead = @individual = @slip_damage = @revival = false
    @double_damage = @dying = false
    # 整合入:特殊脚本
    @rx_magic_use = true  # ★ 魔法使用的标志
    # 整合入:不能回复状态
    @rx_hp_cannot_heal = false     # ★ HP不能回复标志
    @rx_mp_cannot_heal = false     # ★ MP不能回复标志
    # 整合入:特殊混乱状态
    @rx_s_confusion = false  # ★ 特殊混乱标志
    # 整合入:全员中状态时战败
    @rx_st_lose = false  # ★ 战败标志
    # 整合入:无敌状态
    @rx_invincible = false  # ★ 无敌标志
    # 整合入:暂时改变参数的技能
    @rx_chg_atk = 0
    @rx_chg_def = 0
    @rx_chg_spi = 0
    @rx_chg_agi = 0
    @rx_chg_params = [0, 0, 0, 0]
    # 整合入:自动复活一次状态
    @rx_revival_a = false     # ★ 防止死亡标志A
    @rx_revival_b = false     # ★ 防止死亡标志B(完全复活)
    @rx_revival_effect_id = 0 # ★ 效果 ID
  end
  #--------------------------------------------------------------------------
  # ● 可以输入命令判定
  #--------------------------------------------------------------------------
  def inputable?
    if @my_turn
      return (not @hidden and restriction <= 1)
    else
      return false
    end
  end
  #--------------------------------------------------------------------------
  # ● 返还最新的状态ID
  #--------------------------------------------------------------------------
  def state_id
    return @states[@states.size - 1]
  end
  #--------------------------------------------------------------------------
  # ● 判定技能的使用可能  ※再定义
  #--------------------------------------------------------------------------
  def skill_can_use?(skill)
    return false unless skill.is_a?(RPG::Skill)
    return false unless movable?
    return false if silent? and skill.spi_f > 0
    if skill.extension.include?("HP消耗")
      return false if calc_mp_cost(skill) > hp
    else
      return false if calc_mp_cost(skill) > mp
    end
    if $game_temp.in_battle
      return skill.battle_ok?
    else
      return skill.menu_ok?
    end
  end
  #--------------------------------------------------------------------------
  # ● 伤害效果  ※再定义
  #     user : 技能或物品使用者
  #    @hp_damage、@mp_damage、或@absorbed需要在此之前计算完毕。
  #--------------------------------------------------------------------------
  def execute_damage(user)
    if @hp_damage > 0           # 若伤害为正数
      remove_states_shock       # 攻击移除状态
    end
    # 特技吟唱期间受到惊扰,本轮行动作废
    self.waiting_time = 0
    self.hp -= @hp_damage
    self.mp -= @mp_damage
    if @absorbed                # 若吸收
      user.hp += @hp_damage
      user.mp += @mp_damage
    end
  end
  #--------------------------------------------------------------------------
  # ● 技能的消费 MP 计算  ※再定义
  #--------------------------------------------------------------------------
  def calc_mp_cost(skill)
    if half_mp_cost && !skill.extension.include?("MP消耗减半无效")
      cost = skill.mp_cost / 2
    else
      cost = skill.mp_cost
    end
    if skill.extension.include?("%成本MAX")
      return self.maxhp * cost / 100 if skill.extension.include?("HP消耗")
      return self.maxmp * cost / 100
    elsif skill.extension.include?("%成本NOW")
      return self.hp * cost / 100 if skill.extension.include?("HP消耗")
      return self.mp * cost / 100
    end
    return cost
  end
  #--------------------------------------------------------------------------
  # ● 技能成本消费
  #--------------------------------------------------------------------------
  def consum_skill_cost(skill)
    return false unless skill_can_use?(skill)
    cost = calc_mp_cost(skill)
    return self.hp -= cost if skill.extension.include?("HP消耗")
    return self.mp -= cost
  end
  #--------------------------------------------------------------------------
  # ● 根据通常攻击计算伤害  修正二刀流
  #--------------------------------------------------------------------------
  
  def make_attack_damage_value(attacker)
    damage = attacker.atk * 4 - self.def * 2        # 基础计算
    damage = 0 if damage < 0                        # 设负数伤害为 0
    damage *= elements_max_rate(attacker.element_set)   # 属性校正
    damage /= 100
    if damage == 0                                  # 若伤害为 0
      damage = rand(2)                              # 一半机率伤害为1
    elsif damage > 0                                # 若伤害为正数
# 改变人物的重击率 =============================================================
      jjj = []
      for iii in attacker.states
        jjj.push(iii.id)
      end
      kkk = attacker.cri
      if jjj.include?(27)
        kkk *= 50
      end
      if jjj.include?(28)
        kkk /= 2
      end
      # 角色如果装备着特殊装备,则改变重击率
      if attacker.is_a?(Game_Actor)
        kkk += attacker.critical_up
      end
      @critical = (rand(100) < kkk)        # 会心一击判断      
# ==============================================================================
      @critical = false if prevent_critical         # 防止会心一击判断
      
      # 强硬!必有会心一击!========================
      if jjj.include?(46)
        @critical = true
      end
      # ============================================
      
      damage *= 3 if @critical                      # 会心一击校正
    end
    damage = apply_variance(damage, 20)             # 分散度
    damage = apply_guard(damage)                    # 防御校正
   
# 攻击特定属性的怪要出问题 =====================================================
    if self.is_a?(Game_Enemy)
      if $data_enemies[self.enemy_id].note.split(/,/)[0] == "特种敌人"
        neodamage = rand(3) + 1
        neodamage = 3 if @critical
        damage = [damage, neodamage].min
      end
    end
# ==============================================================================

# 如果攻击者有特定状态,那么攻击也要出问题 =====================================
    #if attacker.is_a?(Game_Actor)
      jjj = []
      for iii in attacker.states
        jjj.push(iii.id)
      end
      if jjj.include?(25)
        neodamage = rand(3) + 1
        neodamage = 3 if @critical
        damage = [damage, neodamage].min
      end
    #end
# ==============================================================================

    @hp_damage = damage                             # 体力伤害
    # 只有在装备了两把武器时修正有效
    return unless attacker.actor?
    return if attacker.weapons[0] == nil
    return if attacker.weapons[1] == nil
    @hp_damage = @hp_damage * N01::TWO_SWORDS_STYLE[0] / 100
  end
  #--------------------------------------------------------------------------
  # ● 根据技能或者物品来计算伤害 修正二刀流
  #--------------------------------------------------------------------------
  def make_obj_damage_value(user, obj)
    damage = obj.base_damage                        # 基础计算
    if damage > 0                                   # 若伤害为正
      damage += user.atk * 4 * obj.atk_f / 100      # 使用者攻击力关系度
      damage += user.spi * 2 * obj.spi_f / 100      # 使用者精神力关系度
      unless obj.ignore_defense                     # 除非无视防御力
        damage -= self.def * 2 * obj.atk_f / 100    # 目标攻击力关系度
        # 改了!改成“魔法防”
        damage -= self.mdef * 1 * obj.spi_f / 100    # 目标精神力关系度
      end
      damage = 0 if damage < 0                      # 设负数伤害为0
    elsif damage < 0                                # 若伤害为负
      damage -= user.atk * 4 * obj.atk_f / 100      # 使用者攻击力关系度
      damage -= user.spi * 2 * obj.spi_f / 100      # 使用者精神力关系度
    end
    damage *= elements_max_rate(obj.element_set)    # 属性校正
    damage /= 100
    damage = apply_variance(damage, obj.variance)   # 分散度
    damage = apply_guard(damage)                    # 防御校正
   
   
# 用法术攻击特定属性的怪要出问题 ===============================================
    if self.is_a?(Game_Enemy)
      if $data_enemies[self.enemy_id].note.split(/,/)[0] == "特种敌人"
        if obj.is_a?(RPG::Skill)
          damage = [damage, 1].min
        end
      end
    end
# ==============================================================================

# 如果攻击者有特定状态,那么攻击也要出问题 =====================================
    #if user.is_a?(Game_Actor)
      jjj = []
      for iii in user.states
        jjj.push(iii.id)
      end
      if jjj.include?(25)
        if obj.is_a?(RPG::Skill)
          damage = [damage, 1].min
        end
      end
    #end
# ==============================================================================

    if obj.damage_to_mp  
      @mp_damage = damage                           # 伤害魔力
    else
      @hp_damage = damage                           # 伤害体力
    end
    # 只有在装备了两把武器时修正有效
    return unless user.actor?
    return if user.weapons[0] == nil
    return if user.weapons[1] == nil
    if obj.damage_to_mp  
      @mp_damage = @mp_damage * N01::TWO_SWORDS_STYLE[1] / 100 # 伤害MP
    else
      @hp_damage = @hp_damage * N01::TWO_SWORDS_STYLE[1] / 100 # 伤害HP
    end
  end
  #--------------------------------------------------------------------------
  # ● 使用通常攻击的効果  全部战斗不能,不能绝对回避的处理
  #--------------------------------------------------------------------------
  def perfect_attack_effect(attacker)
    clear_action_results
    make_attack_damage_value(attacker)            # 计算伤害
    execute_damage(attacker)                      # 反映伤害
    apply_state_changes(attacker)                 # 状态变化
  end
  #--------------------------------------------------------------------------
  # ● 使用技能的效果  全部战斗不能,不能绝对回避的处理
  #--------------------------------------------------------------------------
  def perfect_skill_effect(user, skill)
    clear_action_results
    make_obj_damage_value(user, skill)            # 伤害計算
    make_obj_absorb_effect(user, skill)           # 吸収効果計算
    execute_damage(user)                          # 伤害反映
    apply_state_changes(skill)                    # ステート変化
  end
  #--------------------------------------------------------------------------
  # ● 使用物品的効果  全部战斗不能,不能绝对回避的处理
  #--------------------------------------------------------------------------
  def perfect_item_effect(user, item)
    clear_action_results
    hp_recovery = calc_hp_recovery(user, item)    # 计算HP的回复量
    mp_recovery = calc_mp_recovery(user, item)    # 计算MP的回复量
    make_obj_damage_value(user, item)             # 计算伤害
    @hp_damage -= hp_recovery                     # 扣除HP的回复量
    @mp_damage -= mp_recovery                     # 扣除MP的回复量
    make_obj_absorb_effect(user, item)            # 计算吸收效果
    execute_damage(user)                          # 反映伤害
    item_growth_effect(user, item)                # 使用成长效果
    if item.physical_attack and @hp_damage == 0   # 物理ノー伤害判定
      return                                    
    end
    apply_state_changes(item)                     # 状态变化
  end
  #--------------------------------------------------------------------------
  # ● 伤害的反映
  #--------------------------------------------------------------------------
  alias execute_damage_n01 execute_damage
  def execute_damage(user)
    execute_damage_n01(user)
    # 吸収时这里的处理相冲
    if @absorbed               
      user.hp_damage = -@hp_damage
      user.mp_damage = -@mp_damage
    end
  end
  #--------------------------------------------------------------------------
  # ● 使用技能的効果
  #--------------------------------------------------------------------------
  alias skill_effect_n01 skill_effect
  def skill_effect(user, obj)
    # 保持变化前的HPMP
    nowhp = self.hp
    nowmp = self.mp
    # 为了计算现在HPMP的威力获取变化前的使用者的HPMP
    if obj.extension.include?("HP消耗")
      user_hp = user.hp + user.calc_mp_cost(obj)
      user_mp = user.mp
    else  
      user_hp = user.hp
      user_mp = user.mp + user.calc_mp_cost(obj)
    end  
    # 确认扩张设定
    check_extension(obj)
    # 计算伤害
    skill_effect_n01(user, obj)
    # 有伤害系的扩张时这里的处理会相冲
    if @extension
      self.hp = nowhp
      self.mp = nowmp
    end
    # 攻击未名中时中断处理
    return if self.evaded or self.missed
    # 变换伤害属性
    damage = @hp_damage unless obj.damage_to_mp
    damage = @mp_damage if obj.damage_to_mp
    # 比例伤害
    if @ratio_maxdamage != nil
      damage = self.maxhp * @ratio_maxdamage / 100 unless obj.damage_to_mp
      damage = self.maxmp * @ratio_maxdamage / 100 if obj.damage_to_mp
    end
    if @ratio_nowdamage != nil
      damage = self.hp * @ratio_nowdamage / 100 unless obj.damage_to_mp
      damage = self.mp * @ratio_nowdamage / 100 if obj.damage_to_mp
    end
    # 成本威力
    if @cost_damage
      cost = user.calc_mp_cost(obj)
      if obj.extension.include?("HP消耗")
        damage = damage * cost / user.maxhp
      else
        damage = damage * cost / user.maxmp
      end
    end
    # 现在HP威力
    damage = damage * user_hp / user.maxhp if @nowhp_damage
    # 现在MP威力
    damage = damage * user_mp / user.maxmp if @nowmp_damage
    # 放弃伤害属性的变换
    @hp_damage = damage unless obj.damage_to_mp
    @mp_damage = damage if obj.damage_to_mp
    # 反应扩张
    if @extension
      self.hp -= @hp_damage
      self.mp -= @mp_damage
    end
    # 初期化
    @extension = false
    @cost_damage = false
    @nowhp_damage = false
    @nowmp_damage = false
    @ratio_maxdamage = nil
    @ratio_nowdamage = nil
  end
  #--------------------------------------------------------------------------
  # ● 确认扩张设定
  #--------------------------------------------------------------------------
  def check_extension(skill)
    for ext in skill.extension
      # 成本威力
      if ext == "成本威力"  
        @extension = true
        next @cost_damage = true
      # 现在HP威力
      elsif ext == "现HP威力"
        @extension = true
        next @nowhp_damage = true
      # 现在MP威力
      elsif ext == "现MP威力"
        @extension = true
        next @nowmp_damage = true
      else
        # 比例伤害
        name = ext.split('')
        if name[5] == "M"
          name = name.join
          name.slice!("%伤害MAX/")
          @extension = true
          next @ratio_maxdamage = name.to_i
        elsif name[5] == "N"
          name = name.join
          name.slice!("%伤害NOW/")
          @extension = true
          next @ratio_nowdamage = name.to_i
        end  
      end
    end  
  end
  #--------------------------------------------------------------------------
  # ● 初期配置的変更
  #--------------------------------------------------------------------------
  def change_base_position(x, y)
    @base_position_x = x
    @base_position_y = y
  end
  #--------------------------------------------------------------------------
  # ● 初期化
  #--------------------------------------------------------------------------
  def reset_coordinate
    @move_x = @move_y = @move_z = @jump = @derivation = 0
    @active = @non_dead = @individual = false   
  end
  #--------------------------------------------------------------------------
  # ● 使用连续伤害的効果
  #--------------------------------------------------------------------------
  def slip_damage_effect
    if slip_damage? and @hp > 0
      @hp_damage = apply_variance(maxhp / 20, 10)
      @hp_damage = @hp - 1 if @hp_damage >= @hp
      self.hp -= @hp_damage
      if self.hp <= 0
        self.hp = 1
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 事件的伤害POP
  #--------------------------------------------------------------------------
  def damage_num(num = nil)
    return if dead? or !$game_temp.in_battle or num == 0
    @force_damage = num
  end
end  

#==============================================================================
# ■ Game_Troop
#------------------------------------------------------------------------------
#  处理敌人队伍和战斗相关资料的类,也可执行如战斗事件管理之类的功能。
# 本类的实例请参考 $game_troop。
#==============================================================================

class Game_Troop < Game_Unit
  #--------------------------------------------------------------------------
  # ● 增加回合数
  #--------------------------------------------------------------------------
  def increase_turn(enemy)
    for page in troop.pages
      if page.span == 1
        @event_flags

Lv1.梦旅人

梦石
0
星屑
50
在线时间
38 小时
注册时间
2013-3-3
帖子
36
4
 楼主| 发表于 2013-3-19 09:04:40 | 只看该作者
刷版姬 发表于 2013-3-19 07:41
= =。自己确认一遍顺序问题。最好上传工程。

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

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
38 小时
注册时间
2013-3-3
帖子
36
3
 楼主| 发表于 2013-3-19 08:56:59 | 只看该作者
刷版姬 发表于 2013-3-19 07:41
= =。自己确认一遍顺序问题。最好上传工程。

顺序是指什么?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
4 小时
注册时间
2013-3-19
帖子
80
2
发表于 2013-3-19 07:41:56 | 只看该作者
= =。自己确认一遍顺序问题。最好上传工程。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-23 11:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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