查看: 2215|回复: 1

[已经解决] 希望可以帮我把这个VX脚本改为VA的

[复制链接]
梦石
0
星屑
86
在线时间
99 小时
注册时间
2011-3-13
回帖
23
发表于 2016-2-11 16:02:33 | 显示全部楼层 |阅读模式

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

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

×
因为想做个游戏,这个脚本可以实现自己想要的一个功能,不知道哪位大神能帮忙修改一下这个脚本 么么哒
[pre lang="ruby"]
=begin
================================================================================
使用方法:
    1. 敌人等级直接设定
   
    在敌人的备注栏里打上
   
    [等级 n]
   
    例如:[等级 25]
    n 为该敌人等级。(「等级」二字简繁体皆可,也可以打成英文的 level)
   
    2. 敌人等级与角色队伍平均等级相同
   
    在敌人的备注栏里打上

    [主角等级]
   
    则自动依队伍平均等级计算该敌人等级
    (「主角等级」四字可以为简繁体,或是英文的 player_level)

    3. 敌人等级为角色队伍平均等级的差距
   
    在敌人的备注栏里打上

    [强度 X]
   
    例如:[强度 很弱]
    X 为下面的哈希表所设置的强度,可以自己修改,
    (「强度」二字可以为简繁体,或是英文的 strength)
   
    强度标签单独使用时,是使用主角队伍平均等级计算
    若是与等级标签同用,则是以该等级计算
    详细看下面的范例设定。
   
    4. 敌人类型
      (其实是参考了小幽的战斗AI脚本,可以配合该脚本使用
        在战斗AI里设定好的类型,这里就不用再设定一次了
        如果读取到了战斗AI脚本的敌人类型,就会忽略数据库里的设定。)
      
    在敌人的备注栏里打上

    [类型 X]
   
    例如:[类型 巫师]
    X 为下面的哈希表所设置的强度,可以自己修改,
    (「类型」二字可以为简繁体,或是英文的 type)
   
    5. 经验值系数设定
      EXPERIENCE 是设定一般敌人经验值
        0.1 表示所得经验值为角色队伍在该等级所需升级的经验值数的十分之一
      BOSS_EXP   是设定BOSS敌人经验值
        3 表示计算经验值後再加值计算的经验值
   
    6. 哈希表设置部分说明
      ENEMY_TYPE 哈希表
        字符部分为类型,可以修改,数字部分为类型代号,不要修改
  
      STRENGTH 哈希表
        字符部分为强度,数字部分为与主角平均等级差
        
      例如:"很弱" =>  -3
   
      表示当敌人强度设为「很弱」时,该敌人等级为队伍等级-3
   
      例如:
        1 角色  等级:3
        2 角色  等级:4
        3 角色  等级:8
        4 角色  等级:6
         怪物1设为 [强度 弱]
         怪物2设为 [很强 很强] [等级 1]
   
        那麽怪物1等级就是:
          (3+4+8+6)/4 = 5.25 <= 取整为5
          5 - 2 = 3          <= 怪物等级为3
         
        那麽怪物2等级就是:
          1 + 3 = 4          <= 怪物等级为4
        
      要注意的是,当等级为0或以下时则自动修正为1
      若无法在哈希表中找到相对应的key,就会将该敌人设置为与主角队伍平均等级相同
   
    配合使用方法:
   
    一般敌人建议用第一种方法,设立(伪)绝对等级,主角成长後依然为弱怪的敌人。
    头目敌人可以直接指定其类型为 BOSS,但是其能力值增值方面就比较死板,
      若是想做成巫师型的血低魔高的BOSS,可以用下面的方法
      
      用第二、三种方法,设立相对等级,主角成长也会跟着成长的敌人。
          设立为「弱」时,虽然对主角来说依然是弱怪,
          但是会随着主角成长,HP、MP、经验值会随着增加,
          可以用来做练级用的怪。
        
        
    调用敌人图鉴方式:
    在调用前先执行脚本 make_enemy_database
    只要 WRITE_2_DATABASE 设为 false
    就不会覆写数据库的资料,而是在游戏中调用而已。
    不过说明方面就会有点问题了
   
    覆写数据库方法:
    将WRITE_2_DATABASE 设为 true
    随意在地图上用一个事件执行 make_enemy_database
    再回到脚本将WRITE_2_DATABASE 设为 false(以免在运行中误操作)
   
=end

# 设置部分:
module Auto_Enemy
  
  # 是否写入数据库
  WRITE_2_DATABASE = false
  
  # 是否自動設置屬性有效度
  AUTO_SET_ELEMENT = true
  
  # 是否自動設定狀態抵禦度
  AUTO_SET_STATES  = true
  
  # 经验值计算系数
  EXPERIENCE = 0.1
  BOSS_EXP   = 3
  
  STRENGTH = {
      "很弱" =>  -3,
      "弱"   =>  -2,
      "同"   =>   1,
      "强"   =>   2,
      "很强" =>   3,
      "default" => 0  # 这行不要修改,除错用的
  }
  
  # 敌人类型设定
  ENEMY_TYPE = {
  
      "普通"   => 0,  # 普通敌人,能力值依队伍平均计算
      "武士"   => 1,  # 武士型敌人,物理攻击等偏高
      "法师"   => 2,  # 法师型敌人,魔法攻击偏高
      "牧师"   => 3,  # 牧师型敌人,魔力值偏高
      "巫师"   => 4,  # 巫师型敌人,命中率偏高
      "挡箭牌" => 5,  # 挡箭牌型敌人,血高肉厚
      "BOSS"   => 6,  # BOSS型敌人,各项能力值都增强
      # 以上的数值可以在下面的数组变更
      
      "随机"   => -1, # 随机,看看它的运气,加值在 1~1.99
      "default"=> 0   # 这行不要修改,除错用,默认为普通
  }
  
  # 敌人能力值加值参数,对应上放哈希表的敌人类型。不会改的话就别改了。
  #                 普通 武士  法师  牧师  巫师  档箭  BOSS
  ENEMY_TYPE_HP  = [1,   1.5,  0.75, 0.6,  0.8,  2,    4]  # 体力最大值
  ENEMY_TYPE_MP  = [1,   0.75, 1.5,  3,    1.4,  1.1,  4]  # 魔力最大值
  ENEMY_TYPE_ATK = [1,   2,    0.75, 0.5,  0.6,  1.1,  4]  # 攻击力
  ENEMY_TYPE_DEF = [1,   1.25, 0.5,  0.75, 0.7,  3,    4]  # 防御力
  ENEMY_TYPE_SPI = [1,   0.1,  2,    1.75, 1.5,  0,    2]  # 精神力
  ENEMY_TYPE_AGI = [1,   1.2,  2,    0.8,  1.1,  0.2,  2]  # 敏捷
  ENEMY_TYPE_HIT = [1,   1.3,  1.1,  1.5,  1.8,  1 ]       # 命中率
  ENEMY_TYPE_EVA = [1,   1,    1,    0.9,  1.1,  0 ]       # 闪躲率
                               # BOSS的命中率和闪躲率为默认最高的95%

end

class Game_Party
  def avg_number(number, level=nil)
    average = 0
    for i in @actors
      actor = level ? $data_actors : $game_actors
      case number
      when "level"
        average += $game_actors.level
      when "exp"
        average += $game_actors.next_exp_s
      when "hp"
        if level
          average += actor.parameters[0, level]
        else
          average += actor.maxhp
        end
      when "mp"
        if level
          average += actor.parameters[1, level]
        else
          average += actor.maxmp
        end
      when "atk"
        if level
          average += actor.parameters[2, level]
        else
          average += actor.atk
        end
      when "def"
        if level
          average += actor.parameters[3, level]
        else
          average += actor.def
        end
      when "spi"
        if level
          average += actor.parameters[4, level]
        else
          average += actor.spi
        end
      when "agi"
        if level
          average += actor.parameters[5, level]
        else
          average += actor.agi
        end
      when "hit"
        average += $game_actors.hit
      when "eva"
        average += $game_actors.eva
      end
    end
    average /= members.size
    return average
  end
  
  # 獲取平均等級
  def avg_level
    return avg_number("level")
  end
  
  # 獲取平均升級經驗
  def avg_exp_needed
    return avg_number("exp")
  end
  
  def avg_hp_max(level=nil)
    return avg_number("hp", level)
  end

  def avg_mp_max(level=nil)
    return avg_number("mp", level)
  end

  def avg_atk(level=nil)
    return avg_number("atk", level)
  end

  def avg_def(level=nil)
    return avg_number("def", level)
  end
  
  def avg_spi(level=nil)
    return avg_number("spi", level)
  end
  
  def avg_agi(level=nil)
    return avg_number("agi", level)
  end
  
  def avg_hit
    return avg_number("hit")
  end
  
  def avg_eva
    return avg_number("eva")
  end
end

class RPG::Enemy
  # 获取等级
  def get_level
    elevel = 0
    self.note.split(/[\r\n]+/).each { |line|
      if line =~ /\[(level|等級|等级) {1,2}\]/
        a = line.split(/ /)[1]
        elevel += a.to_i
      elsif line =~ /\[player_level|主角等級|主角等级\]/
        elevel += $game_party.avg_level
      end
    }
    return elevel==0 ? nil : elevel
  end
  
  # 获取强度
  def get_str
    self.note.split(/[\r\n]+/).each { |line|
      if line =~ /\[(strength|強度|强度) \w+\]/
        a = line.split(/ /)[1]
        d = ""
        while ((c = a.slice!(/./m)) != nil)
          d += c if c != "]"
        end
        return d
      end
    }
    return "default"
  end
  
  def get_enemy_type
    self.note.split(/[\r\n]+/).each { |line|
      if line =~ /\[(type|類型|类型) \w+\]/
        a = line.split(/ /)[1]
        d = ""
        while ((c = a.slice!(/./m)) != nil)
          d += c if c != "]"
        end
        return d
      end
    }
    return "default"
  end
  
  # 计算等级
  def level
    if auto_level?
      if auto_str?
        return [get_level + str, 1].max
      else
        return get_level
      end
    elsif auto_str?
      elevel = $game_party.avg_level + str
      return [elevel, 1].max
    end
  end
  
  def str
    estr = Auto_Enemy::STRENGTH[get_str]
    if estr != nil
      return estr
    else
      return Auto_Enemy::STRENGTH["default"]
    end
  end
  
  def type
    if $enemies_class != nil
      return $enemies_class[@enemy_id] if $enemies_class[@enemy_id]!=nil
    end
    return Auto_Enemy::ENEMY_TYPE[get_enemy_type]
  end
  
  def auto_level?
    return get_level
  end
  def auto_str?
    return get_str
  end
  def auto_setup?
    return (auto_level? or auto_str?)
  end
end

#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
#  处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的 内部使用。
#==============================================================================

class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● 获取基本体力最大值
  #--------------------------------------------------------------------------
  def base_maxhp
    if enemy.auto_setup?
      enemy_maxhp = $game_party.avg_hp_max(enemy.level)
      if enemy.type == -1
        enemy_maxhp *= (1 + rand(0))
      else
        enemy_maxhp *= Auto_Enemy::ENEMY_TYPE_HP[enemy.type]
      end
      enemy_maxhp = enemy_maxhp.to_i
      enemy_maxhp += rand(10)
      return enemy_maxhp
    else
      return enemy.maxhp
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本魔力最大值
  #--------------------------------------------------------------------------
  def base_maxmp
    if enemy.auto_setup?
      enemy_maxmp = $game_party.avg_mp_max(enemy.level)
      if enemy.type == -1
        enemy_maxmp *= (1 + rand(0))
      else
        enemy_maxmp *= Auto_Enemy::ENEMY_TYPE_MP[enemy.type]
      end
      enemy_maxmp = enemy_maxmp.to_i
      enemy_maxmp += rand(5)
      return enemy_maxmp
    else
      return enemy.maxmp
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本攻击力
  #--------------------------------------------------------------------------
  def base_atk
    if enemy.auto_setup?
      enemy_atk = $game_party.avg_atk(enemy.level)
      if enemy.type == -1
        enemy_atk *= (1 + rand(0))
      else
        enemy_atk *= Auto_Enemy::ENEMY_TYPE_ATK[enemy.type]
      end
      enemy_atk = enemy_atk.to_i
      enemy_atk += rand(5)
      return enemy_atk
    else
      return enemy.atk
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本防御力
  #--------------------------------------------------------------------------
  def base_def
    if enemy.auto_setup?
      enemy_def = $game_party.avg_def(enemy.level)
      if enemy.type == -1
        enemy_def *= (1 + rand(0))
      else
        enemy_def *= Auto_Enemy::ENEMY_TYPE_DEF[enemy.type]
      end
      enemy_def = enemy_def.to_i
      enemy_def += rand(5)
      return enemy_def
    else
      return enemy.def
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本精神力
  #--------------------------------------------------------------------------
  def base_spi
    if enemy.auto_setup?
      enemy_spi = $game_party.avg_spi(enemy.level)
      if enemy.type == -1
        enemy_spi *= (1 + rand(0))
      else
        enemy_spi *= Auto_Enemy::ENEMY_TYPE_SPI[enemy.type]
      end
      enemy_spi = enemy_spi.to_i
      enemy_spi += rand(5)
      return enemy_spi
    else
      return enemy.spi
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取基本敏捷
  #--------------------------------------------------------------------------
  def base_agi
    if enemy.auto_setup?
      enemy_agi = $game_party.avg_agi(enemy.level)
      if enemy.type == -1
        enemy_agi *= (1 + rand(0))
      else
        enemy_agi *= Auto_Enemy::ENEMY_TYPE_AGI[enemy.type]
      end
      enemy_agi = enemy_agi.to_i
      enemy_agi += rand(5)
      return enemy_agi
    else
      return enemy.agi
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取命中率
  #--------------------------------------------------------------------------
  def hit
    if enemy.auto_setup?
      enemy_hit = $game_party.avg_hit
      if enemy.type == -1
        enemy_hit *= (1 + rand(0))
      elsif enemy.type == 6
        enemy_hit = 95
      else
        enemy_hit *= Auto_Enemy::ENEMY_TYPE_HIT[enemy.type]
      end
      return [[enemy_hit.to_i, 95].min, 50].max
    else
      return enemy.hit
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取闪躲率
  #--------------------------------------------------------------------------
  def eva
    if enemy.auto_setup?
      enemy_eva = $game_party.avg_eva
      if enemy.type == -1
        enemy_eva *= (1 + rand(0))
      elsif enemy.type == 6
        enemy_eva = 95
      else
        enemy_eva *= Auto_Enemy::ENEMY_TYPE_EVA[enemy.type]
      end
      return [[enemy_eva.to_i, 95].min, 0].max
    else
      return enemy.eva
    end
  end
  #--------------------------------------------------------------------------
  # ● 获取经验值
  #--------------------------------------------------------------------------
  def exp
    if enemy.auto_setup?
      exp = ($game_party.avg_exp_needed * Auto_Enemy::EXPERIENCE).to_i
      exp =* enemy.type == 6 ? Auto_Enemy::BOSS_EXP : 1
      exp += rand(10)
      return exp
    else
      return enemy.exp
    end
  end  
end

class Game_Interpreter
  def make_enemy_database
    for i in 1...$data_enemies.size
      game_enemy = Game_Enemy.new(1, i)
      if $data_enemies.auto_setup?
        $data_enemies.maxhp      = game_enemy.base_maxhp
        $data_enemies.maxmp      = game_enemy.base_maxmp
        $data_enemies.atk        = game_enemy.base_atk
        $data_enemies.def        = game_enemy.base_def
        $data_enemies.spi        = game_enemy.base_spi
        $data_enemies.agi        = game_enemy.base_agi
        $data_enemies.hit        = game_enemy.hit
        $data_enemies.eva        = game_enemy.eva
        $data_enemies.exp        = game_enemy.exp
        if $lazy_item_setup
          $data_enemies.drop_item1 = game_enemy.drop_item1
          $data_enemies.drop_item2 = game_enemy.drop_item2
        end
      end
    end
    save_data($data_enemies,"Data/Enemies.rvdata") if Auto_Enemy::WRITE_2_DATABASE
  end
end
[/pre]

源引用https://rpg.blue/forum.php?mod=viewthread&tid=81930
梦石
0
星屑
1297
在线时间
995 小时
注册时间
2014-12-14
回帖
2939

开拓者

发表于 2016-2-16 16:15:18 | 显示全部楼层
好像没人回答了。试试这样吧:
1.将该脚本复制于va工程内
2.运行测试,根据提示修改脚本
3.调用脚本内各种功能,测试有无其他bug

方法2:
高分悬赏或联系大触解决这个问题。

目测这是个非常耗时间的事情,因此很可能不会有人来回答了。快快选择在下的答案,结贴吧!


点评

thanks么么哒  发表于 2016-2-19 16:48
【RMVA教程】
---------------------
欲买桂花同载酒,终不似,少年游.
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部