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

Project1

 找回密码
 注册会员
搜索

关于雪流星大大的敌人能力值脚本的小问题

查看数: 2674 | 评论数: 6 | 收藏 1
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2011-2-10 18:44

正文摘要:

本帖最后由 l65591397 于 2011-2-10 21:33 编辑 先发连接 懒人必用!敌人能力值自动设定(4/1 更新 V 2.5) http://rpg.blue/forum.php?mod=vi ... &fromuid=123016 boss的默认闪避率是95%。。。。额,有点太高了, ...

回复

伢疼 发表于 2011-2-13 14:51:27
提示: 作者被禁止或删除 内容自动屏蔽
巧克力猫咪 发表于 2011-2-13 11:35:26
回复 l65591397 的帖子

#--------------------------------------------------------------------------



  # ● 获取命中率



  #--------------------------------------------------------------------------



  def hit



    if enemy.auto_setup?



      enemy_hit = $game_party.avg_hit



      if enemy.type == -1



        enemy_hit *= (【0.8 】在这+ rand(0))



      elsif enemy.type == 6



        enemy_hit = 40



      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

和数据库没关系,攻击防御这类属性是按你角色的高低进行设定的,数据库不设也没关系,那儿的数值可以改变怪物与角色的攻击比率,可以自己设定到适合自己的程度,那 个我是设过了,你还可以利用属性的耐性对敌人进行加强啊,比如强力的怪那把它的属性耐性提高就OK了,BOSS设定类型BOSS,个人感觉魔法加大点,要不用几次老BOSS就没魔了,除非它用的是无耗魔法技能
l65591397 发表于 2011-2-12 20:12:15
提示: 作者被禁止或删除 内容自动屏蔽
巧克力猫咪 发表于 2011-2-12 19:53:27
回复 l65591397 的帖子

如果不是你脚本错的话建议你设单类型,就一种吧,个人认为还是类型好点,比的感觉死板
  1. =begin

  2. ================================================================================

  3. 使用方法:

  4.     1. 敌人等级直接设定

  5.    

  6.     在敌人的备注栏里打上

  7.    

  8.     [等级 n]

  9.    

  10.     例如:[等级 25]

  11.     n 为该敌人等级。(「等级」二字简繁体皆可,也可以打成英文的 level)

  12.    

  13.     2. 敌人等级与角色队伍平均等级相同

  14.    

  15.     在敌人的备注栏里打上



  16.     [主角等级]

  17.    

  18.     则自动依队伍平均等级计算该敌人等级

  19.     (「主角等级」四字可以为简繁体,或是英文的 player_level)



  20.     3. 敌人等级为角色队伍平均等级的差距

  21.    

  22.     在敌人的备注栏里打上



  23.     [强度 X]

  24.    

  25.     例如:[强度 很弱]

  26.     X 为下面的哈希表所设置的强度,可以自己修改,

  27.     (「强度」二字可以为简繁体,或是英文的 strength)

  28.    

  29.     强度标签单独使用时,是使用主角队伍平均等级计算

  30.     若是与等级标签同用,则是以该等级计算

  31.     详细看下面的范例设定。

  32.    

  33.     4. 敌人类型

  34.       (其实是参考了小幽的战斗AI脚本,可以配合该脚本使用

  35.         在战斗AI里设定好的类型,这里就不用再设定一次了

  36.         如果读取到了战斗AI脚本的敌人类型,就会忽略数据库里的设定。)

  37.       

  38.     在敌人的备注栏里打上



  39.     [类型 X]

  40.    

  41.     例如:[类型 巫师]

  42.     X 为下面的哈希表所设置的强度,可以自己修改,

  43.     (「类型」二字可以为简繁体,或是英文的 type)

  44.    

  45.     5. 经验值系数设定

  46.       EXPERIENCE 是设定一般敌人经验值

  47.         0.1 表示所得经验值为角色队伍在该等级所需升级的经验值数的十分之一

  48.       BOSS_EXP   是设定BOSS敌人经验值

  49.         3 表示计算经验值後再加值计算的经验值

  50.    

  51.     6. 哈希表设置部分说明

  52.       ENEMY_TYPE 哈希表

  53.         字符部分为类型,可以修改,数字部分为类型代号,不要修改

  54.   

  55.       STRENGTH 哈希表

  56.         字符部分为强度,数字部分为与主角平均等级差

  57.         

  58.       例如:"很弱" =>  -3

  59.    

  60.       表示当敌人强度设为「很弱」时,该敌人等级为队伍等级-3

  61.    

  62.       例如:

  63.         1 角色  等级:3

  64.         2 角色  等级:4

  65.         3 角色  等级:8

  66.         4 角色  等级:6

  67.          怪物1设为 [强度 弱]

  68.          怪物2设为 [很强 很强] [等级 1]

  69.    

  70.         那麽怪物1等级就是:

  71.           (3+4+8+6)/4 = 5.25 <= 取整为5

  72.           5 - 2 = 3          <= 怪物等级为3

  73.          

  74.         那麽怪物2等级就是:

  75.           1 + 3 = 4          <= 怪物等级为4

  76.         

  77.       要注意的是,当等级为0或以下时则自动修正为1

  78.       若无法在哈希表中找到相对应的key,就会将该敌人设置为与主角队伍平均等级相同

  79.    

  80.     配合使用方法:

  81.    

  82.     一般敌人建议用第一种方法,设立(伪)绝对等级,主角成长後依然为弱怪的敌人。

  83.     头目敌人可以直接指定其类型为 BOSS,但是其能力值增值方面就比较死板,

  84.       若是想做成巫师型的血低魔高的BOSS,可以用下面的方法

  85.       

  86.       用第二、三种方法,设立相对等级,主角成长也会跟着成长的敌人。

  87.           设立为「弱」时,虽然对主角来说依然是弱怪,

  88.           但是会随着主角成长,HP、MP、经验值会随着增加,

  89.           可以用来做练级用的怪。

  90.         

  91.         

  92.     调用敌人图鉴方式:

  93.     在调用前先执行脚本 make_enemy_database

  94.     只要 WRITE_2_DATABASE 设为 false

  95.     就不会覆写数据库的资料,而是在游戏中调用而已。

  96.     不过说明方面就会有点问题了

  97.    

  98.     覆写数据库方法:

  99.     将WRITE_2_DATABASE 设为 true

  100.     随意在地图上用一个事件执行 make_enemy_database

  101.     再回到脚本将WRITE_2_DATABASE 设为 false(以免在运行中误操作)

  102.    

  103. =end



  104. # 设置部分:

  105. module Auto_Enemy

  106.   

  107.   # 是否写入数据库

  108.   WRITE_2_DATABASE = false

  109.   

  110.   # 是否自動設置屬性有效度

  111.   AUTO_SET_ELEMENT = true

  112.   

  113.   # 是否自動設定狀態抵禦度

  114.   AUTO_SET_STATES  = true

  115.   

  116.   # 经验值计算系数

  117.   EXPERIENCE = 0.1

  118.   BOSS_EXP   = 3

  119.   

  120.   STRENGTH = {

  121.       "很弱" =>  -3,

  122.       "弱"   =>  -2,

  123.       "同"   =>   1,

  124.       "强"   =>   2,

  125.       "很强" =>   3,

  126.       "default" => 0  # 这行不要修改,除错用的

  127.   }

  128.   

  129.   # 敌人类型设定

  130.   ENEMY_TYPE = {

  131.   

  132.       "普通"   => 0,  # 普通敌人,能力值依队伍平均计算

  133.       "武士"   => 1,  # 武士型敌人,物理攻击等偏高

  134.       "法师"   => 2,  # 法师型敌人,魔法攻击偏高

  135.       "牧师"   => 3,  # 牧师型敌人,魔力值偏高

  136.       "巫师"   => 4,  # 巫师型敌人,命中率偏高

  137.       "挡箭牌" => 5,  # 挡箭牌型敌人,血高肉厚

  138.       "BOSS"   => 6,  # BOSS型敌人,各项能力值都增强

  139.       # 以上的数值可以在下面的数组变更

  140.       

  141.       "随机"   => -1, # 随机,看看它的运气,加值在 1~1.99

  142.       "default"=> 0   # 这行不要修改,除错用,默认为普通

  143.   }

  144.   

  145.   # 敌人能力值加值参数,对应上放哈希表的敌人类型。不会改的话就别改了。

  146.   #                 普通 武士  法师  牧师  巫师  档箭  BOSS

  147.   ENEMY_TYPE_HP  = [1,   1.5,  0.75, 0.6,  0.8,  2,    4]  # 体力最大值

  148.   ENEMY_TYPE_MP  = [1,   0.75, 1.5,  3,    1.4,  1.1,  4]  # 魔力最大值

  149.   ENEMY_TYPE_ATK = [0.75,   1,    0.75, 0.5,  0.5,  0.7,  1]  # 攻击力

  150.   ENEMY_TYPE_DEF = [0.75,   0.5, 1,  0.7, 0.7,  1.2,    1.3]  # 防御力

  151.   ENEMY_TYPE_SPI = [0.75,   0.1,  1,    1, 1,  0.5,    1]  # 精神力

  152.   ENEMY_TYPE_AGI = [0.75,   1,  1,    1,  1,  1,  2]  # 敏捷

  153.   ENEMY_TYPE_HIT = [0.75,   0.75,  0.75,  0.75,  0.75,  0.75 ]       # 命中率

  154.   ENEMY_TYPE_EVA = [0.75,   0.75,    0.75,    0.75,  0.75,  0.75 ]       # 闪躲率

  155.                                # BOSS的命中率和闪躲率为默认最高的95%



  156. end



  157. class Game_Party

  158.   def avg_number(number, level=nil)

  159.     average = 0

  160.     for i in @actors

  161.       actor = level ? $data_actors[i] : $game_actors[i]

  162.       case number

  163.       when "level"

  164.         average += $game_actors[i].level

  165.       when "exp"

  166.         average += $game_actors[i].next_exp_s

  167.       when "hp"

  168.         if level

  169.           average += actor.parameters[0, level]

  170.         else

  171.           average += actor.maxhp

  172.         end

  173.       when "mp"

  174.         if level

  175.           average += actor.parameters[1, level]

  176.         else

  177.           average += actor.maxmp

  178.         end

  179.       when "atk"

  180.         if level

  181.           average += actor.parameters[2, level]

  182.         else

  183.           average += actor.atk

  184.         end

  185.       when "def"

  186.         if level

  187.           average += actor.parameters[3, level]

  188.         else

  189.           average += actor.def

  190.         end

  191.       when "spi"

  192.         if level

  193.           average += actor.parameters[4, level]

  194.         else

  195.           average += actor.spi

  196.         end

  197.       when "agi"

  198.         if level

  199.           average += actor.parameters[5, level]

  200.         else

  201.           average += actor.agi

  202.         end

  203.       when "hit"

  204.         average += $game_actors[i].hit

  205.       when "eva"

  206.         average += $game_actors[i].eva

  207.       end

  208.     end

  209.     average /= members.size

  210.     return average

  211.   end

  212.   

  213.   # 獲取平均等級

  214.   def avg_level

  215.     return avg_number("level")

  216.   end

  217.   

  218.   # 獲取平均升級經驗

  219.   def avg_exp_needed

  220.     return avg_number("exp")

  221.   end

  222.   

  223.   def avg_hp_max(level=nil)

  224.     return avg_number("hp", level)

  225.   end



  226.   def avg_mp_max(level=nil)

  227.     return avg_number("mp", level)

  228.   end



  229.   def avg_atk(level=nil)

  230.     return avg_number("atk", level)

  231.   end



  232.   def avg_def(level=nil)

  233.     return avg_number("def", level)

  234.   end

  235.   

  236.   def avg_spi(level=nil)

  237.     return avg_number("spi", level)

  238.   end

  239.   

  240.   def avg_agi(level=nil)

  241.     return avg_number("agi", level)

  242.   end

  243.   

  244.   def avg_hit

  245.     return avg_number("hit")

  246.   end

  247.   

  248.   def avg_eva

  249.     return avg_number("eva")

  250.   end

  251. end



  252. class RPG::Enemy

  253.   # 获取等级

  254.   def get_level

  255.     elevel = 0

  256.     self.note.split(/[\r\n]+/).each { |line|

  257.       if line =~ /\[(level|等級|等级) {1,2}\]/

  258.         a = line.split(/ /)[1]

  259.         elevel += a.to_i

  260.       elsif line =~ /\[player_level|主角等級|主角等级\]/

  261.         elevel += $game_party.avg_level

  262.       end

  263.     }

  264.     return elevel==0 ? nil : elevel

  265.   end

  266.   

  267.   # 获取强度

  268.   def get_str

  269.     self.note.split(/[\r\n]+/).each { |line|

  270.       if line =~ /\[(strength|強度|强度) \w+\]/

  271.         a = line.split(/ /)[1]

  272.         d = ""

  273.         while ((c = a.slice!(/./m)) != nil)

  274.           d += c if c != "]"

  275.         end

  276.         return d

  277.       end

  278.     }

  279.     return "default"

  280.   end

  281.   

  282.   def get_enemy_type

  283.     self.note.split(/[\r\n]+/).each { |line|

  284.       if line =~ /\[(type|類型|类型) \w+\]/

  285.         a = line.split(/ /)[1]

  286.         d = ""

  287.         while ((c = a.slice!(/./m)) != nil)

  288.           d += c if c != "]"

  289.         end

  290.         return d

  291.       end

  292.     }

  293.     return "default"

  294.   end

  295.   

  296.   # 计算等级

  297.   def level

  298.     if auto_level?

  299.       if auto_str?

  300.         return [get_level + str, 1].max

  301.       else

  302.         return get_level

  303.       end

  304.     elsif auto_str?

  305.       elevel = $game_party.avg_level + str

  306.       return [elevel, 1].max

  307.     end

  308.   end

  309.   

  310.   def str

  311.     estr = Auto_Enemy::STRENGTH[get_str]

  312.     if estr != nil

  313.       return estr

  314.     else

  315.       return Auto_Enemy::STRENGTH["default"]

  316.     end

  317.   end

  318.   

  319.   def type

  320.     if $enemies_class != nil

  321.       return $enemies_class[@enemy_id] if $enemies_class[@enemy_id]!=nil

  322.     end

  323.     return Auto_Enemy::ENEMY_TYPE[get_enemy_type]

  324.   end

  325.   

  326.   def auto_level?

  327.     return get_level

  328.   end

  329.   def auto_str?

  330.     return get_str

  331.   end

  332.   def auto_setup?

  333.     return (auto_level? or auto_str?)

  334.   end

  335. end



  336. #==============================================================================

  337. # ■ Game_Enemy

  338. #------------------------------------------------------------------------------

  339. #  处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的 内部使用。

  340. #==============================================================================



  341. class Game_Enemy < Game_Battler

  342.   #--------------------------------------------------------------------------

  343.   # ● 获取基本体力最大值

  344.   #--------------------------------------------------------------------------

  345.   def base_maxhp

  346.     if enemy.auto_setup?

  347.       enemy_maxhp = $game_party.avg_hp_max(enemy.level)

  348.       if enemy.type == -1

  349.         enemy_maxhp *= (1 + rand(0))

  350.       else

  351.         enemy_maxhp *= Auto_Enemy::ENEMY_TYPE_HP[enemy.type]

  352.       end

  353.       enemy_maxhp = enemy_maxhp.to_i

  354.       enemy_maxhp += rand(10)

  355.       return enemy_maxhp

  356.     else

  357.       return enemy.maxhp

  358.     end

  359.   end

  360.   #--------------------------------------------------------------------------

  361.   # ● 获取基本魔力最大值

  362.   #--------------------------------------------------------------------------

  363.   def base_maxmp

  364.     if enemy.auto_setup?

  365.       enemy_maxmp = $game_party.avg_mp_max(enemy.level)

  366.       if enemy.type == -1

  367.         enemy_maxmp *= (1 + rand(0))

  368.       else

  369.         enemy_maxmp *= Auto_Enemy::ENEMY_TYPE_MP[enemy.type]

  370.       end

  371.       enemy_maxmp = enemy_maxmp.to_i

  372.       enemy_maxmp += rand(5)

  373.       return enemy_maxmp

  374.     else

  375.       return enemy.maxmp

  376.     end

  377.   end

  378.   #--------------------------------------------------------------------------

  379.   # ● 获取基本攻击力

  380.   #--------------------------------------------------------------------------

  381.   def base_atk

  382.     if enemy.auto_setup?

  383.       enemy_atk = $game_party.avg_atk(enemy.level)

  384.       if enemy.type == -1

  385.         enemy_atk *= (0.7 + rand(0))

  386.       else

  387.         enemy_atk *= Auto_Enemy::ENEMY_TYPE_ATK[enemy.type]

  388.       end

  389.       enemy_atk = enemy_atk.to_i

  390.       enemy_atk += rand(5)

  391.       return enemy_atk

  392.     else

  393.       return enemy.atk

  394.     end

  395.   end

  396.   #--------------------------------------------------------------------------

  397.   # ● 获取基本防御力

  398.   #--------------------------------------------------------------------------

  399.   def base_def

  400.     if enemy.auto_setup?

  401.       enemy_def = $game_party.avg_def(enemy.level)

  402.       if enemy.type == -1

  403.         enemy_def *= (0.8 + rand(0))

  404.       else

  405.         enemy_def *= Auto_Enemy::ENEMY_TYPE_DEF[enemy.type]

  406.       end

  407.       enemy_def = enemy_def.to_i

  408.       enemy_def += rand(5)

  409.       return enemy_def

  410.     else

  411.       return enemy.def

  412.     end

  413.   end

  414.   #--------------------------------------------------------------------------

  415.   # ● 获取基本精神力

  416.   #--------------------------------------------------------------------------

  417.   def base_spi

  418.     if enemy.auto_setup?

  419.       enemy_spi = $game_party.avg_spi(enemy.level)

  420.       if enemy.type == -1

  421.         enemy_spi *= (0.7 + rand(0))

  422.       else

  423.         enemy_spi *= Auto_Enemy::ENEMY_TYPE_SPI[enemy.type]

  424.       end

  425.       enemy_spi = enemy_spi.to_i

  426.       enemy_spi += rand(5)

  427.       return enemy_spi

  428.     else

  429.       return enemy.spi

  430.     end

  431.   end

  432.   #--------------------------------------------------------------------------

  433.   # ● 获取基本敏捷

  434.   #--------------------------------------------------------------------------

  435.   def base_agi

  436.     if enemy.auto_setup?

  437.       enemy_agi = $game_party.avg_agi(enemy.level)

  438.       if enemy.type == -1

  439.         enemy_agi *= (0.7 + rand(0))

  440.       else

  441.         enemy_agi *= Auto_Enemy::ENEMY_TYPE_AGI[enemy.type]

  442.       end

  443.       enemy_agi = enemy_agi.to_i

  444.       enemy_agi += rand(5)

  445.       return enemy_agi

  446.     else

  447.       return enemy.agi

  448.     end

  449.   end

  450.   #--------------------------------------------------------------------------

  451.   # ● 获取命中率

  452.   #--------------------------------------------------------------------------

  453.   def hit

  454.     if enemy.auto_setup?

  455.       enemy_hit = $game_party.avg_hit

  456.       if enemy.type == -1

  457.         enemy_hit *= (0.8 + rand(0))

  458.       elsif enemy.type == 6

  459.         enemy_hit = 40

  460.       else

  461.         enemy_hit *= Auto_Enemy::ENEMY_TYPE_HIT[enemy.type]

  462.       end

  463.       return [[enemy_hit.to_i, 95].min, 50].max

  464.     else

  465.       return enemy.hit

  466.     end

  467.   end

  468.   #--------------------------------------------------------------------------

  469.   # ● 获取闪躲率

  470.   #--------------------------------------------------------------------------

  471.   def eva

  472.     if enemy.auto_setup?

  473.       enemy_eva = $game_party.avg_eva

  474.       if enemy.type == -1

  475.         enemy_eva *= (0.8 + rand(0))

  476.       elsif enemy.type == 6

  477.         enemy_eva = 40

  478.       else

  479.         enemy_eva *= Auto_Enemy::ENEMY_TYPE_EVA[enemy.type]

  480.       end

  481.       return [[enemy_eva.to_i, 95].min, 0].max

  482.     else

  483.       return enemy.eva

  484.     end

  485.   end

  486.   #--------------------------------------------------------------------------

  487.   # ● 获取经验值

  488.   #--------------------------------------------------------------------------

  489.   def exp

  490.     if enemy.auto_setup?

  491.       exp = ($game_party.avg_exp_needed * Auto_Enemy::EXPERIENCE).to_i

  492.       exp =* enemy.type == 6 ? Auto_Enemy::BOSS_EXP : 1

  493.       exp += rand(10)

  494.       return exp

  495.     else

  496.       return enemy.exp

  497.     end

  498.   end  

  499. end



  500. class Game_Interpreter

  501.   def make_enemy_database

  502.     for i in 1...$data_enemies.size

  503.       game_enemy = Game_Enemy.new(1, i)

  504.       if $data_enemies[i].auto_setup?

  505.         $data_enemies[i].maxhp      = game_enemy.base_maxhp

  506.         $data_enemies[i].maxmp      = game_enemy.base_maxmp

  507.         $data_enemies[i].atk        = game_enemy.base_atk

  508.         $data_enemies[i].def        = game_enemy.base_def

  509.         $data_enemies[i].spi        = game_enemy.base_spi

  510.         $data_enemies[i].agi        = game_enemy.base_agi

  511.         $data_enemies[i].hit        = game_enemy.hit

  512.         $data_enemies[i].eva        = game_enemy.eva

  513.         $data_enemies[i].exp        = game_enemy.exp

  514.         if $lazy_item_setup

  515.           $data_enemies[i].drop_item1 = game_enemy.drop_item1

  516.           $data_enemies[i].drop_item2 = game_enemy.drop_item2

  517.         end

  518.       end

  519.     end

  520.     save_data($data_enemies,"Data/Enemies.rvdata") if Auto_Enemy::WRITE_2_DATABASE

  521.   end

  522. end
复制代码
我数字改了点,不过我自己用的,没出现过错误,怪物还是类型随机啊,多变化
l65591397 发表于 2011-2-12 15:21:18
提示: 作者被禁止或删除 内容自动屏蔽
巧克力猫咪 发表于 2011-2-12 14:19:06
回复 l65591397 的帖子

  #--------------------------------------------------------------------------

  # ● 获取命中率

  #--------------------------------------------------------------------------

  def hit

    if enemy.auto_setup?

      enemy_hit = $game_party.avg_hit

      if enemy.type == -1

        enemy_hit *= (0.8 + rand(0))

      elsif enemy.type == 6

        enemy_hit = 95
type==6是指对应的BOSS类型
下面的95的命中率,回避什么的如下改

评分

参与人数 1星屑 +700 收起 理由
铃仙·优昙华院·因幡 + 700 认可答案

查看全部评分

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

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

GMT+8, 2024-11-7 01:36

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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