Project1

标题: 懒人必用!敌人能力值自动设定(4/1 更新 V 2.5) [打印本页]

作者: 雪流星    时间: 2008-3-26 13:02
标题: 懒人必用!敌人能力值自动设定(4/1 更新 V 2.5)
本帖最后由 雪流星 于 2009-7-15 00:12 编辑

使用方法:写在脚本注释里了
使用之後,在敌人数据库里只要设置掉落物、掉落金钱、属性、抵抗状态、和行动而已
其他的如HP、MP等,全部帮你搞定,从此再也不用烦恼敌人的设置了{/cy}{/wx}

冲突可能:修改了Game_Enemy的脚本
大概也只有日站上的战斗难度脚本吧?

与小幽的敌人战斗AI无冲突,除了某种原因会54强度标签以外
正在修改中

3/26 V 2.05
与小幽的战斗AI整合,完全可以与其配合使用
参考了该脚本内敌人种类设定,增加了种类标签
设定种类後会变更各项能力值

3/27 V 2.1
- 更新修改强度标签的问题

4/1 V2.5
- 更新强度标签判断问题
- 更新等级累加计算
- 更新标签叠加效果
- 更新类型能力判断,可以直接在设定部分修改
- 更新掉落物品计算,不过还要配合物品设定脚本,因此尚未能使用


  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 = [1,   2,    0.75, 0.5,  0.6,  1.1,  4]  # 攻击力
  150.   ENEMY_TYPE_DEF = [1,   1.25, 0.5,  0.75, 0.7,  3,    4]  # 防御力
  151.   ENEMY_TYPE_SPI = [1,   0.1,  2,    1.75, 1.5,  0,    2]  # 精神力
  152.   ENEMY_TYPE_AGI = [1,   1.2,  2,    0.8,  1.1,  0.2,  2]  # 敏捷
  153.   ENEMY_TYPE_HIT = [1,   1.3,  1.1,  1.5,  1.8,  1 ]       # 命中率
  154.   ENEMY_TYPE_EVA = [1,   1,    1,    0.9,  1.1,  0 ]       # 闪躲率
  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 *= (1 + 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 *= (1 + 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 *= (1 + 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 *= (1 + 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 *= (1 + rand(0))
  458.       elsif enemy.type == 6
  459.         enemy_hit = 95
  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 *= (1 + rand(0))
  476.       elsif enemy.type == 6
  477.         enemy_eva = 95
  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
复制代码

作者: 水之证    时间: 2008-3-26 18:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: 預感の邪惡    时间: 2008-3-26 19:18
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪流星    时间: 2008-3-26 19:21
LZ的,虽然感谢你支持,但是请注意站规喔
作者: 一塌糊涂    时间: 2008-3-26 21:20
提示: 作者被禁止或删除 内容自动屏蔽
作者: Jousun    时间: 2008-3-27 00:18
我用了!!!!解决了好多好多烦恼!!LZ我爱你!!
作者: 火鸡的马甲鸡    时间: 2008-3-27 03:31
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪流星    时间: 2008-3-27 03:42
以下引用一塌糊涂于2008-3-26 13:20:35的发言:

有了这个就可以做开放式地图的游戏了呢,最近正好在为这个苦恼,谢谢流星

有个问题:

是不是3种方法各自独立使用的,第三种 强度 为 同 的情况下,是不是就和第二种的主角等级一样了?还是有区别的?


的确是一样的,只不过使用强度时,你可以自己定而已。
作者: 火鸡的马甲鸡    时间: 2008-3-27 04:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: 小幽的马甲    时间: 2008-3-27 04:53
跟我的某个脚本配合起来就可以完美设置敌人了……
不过没有测试过冲突性……毕竟都改过Game_Enemy……
作者: 火鸡的马甲鸡    时间: 2008-3-27 04:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: 小幽的马甲    时间: 2008-3-27 05:00
以下引用火鸡的马甲鸡于2008-3-26 20:54:59的发言:


以下引用小幽的马甲于2008-3-26 20:53:12的发言:

跟我的某个脚本配合起来就可以完美设置敌人了……
不过没有测试过冲突性……毕竟都改过Game_Enemy……


是啥脚本啊?    ...想知道

就是目前主体列表中这帖的下面一贴= =
果然被无视了……
作者: 风雪优游    时间: 2008-3-27 05:50
敌人的属性根据主角的属性判断?

那是根据那一个主角?难道是所有的主角?
作者: 一塌糊涂    时间: 2008-3-27 06:07
提示: 作者被禁止或删除 内容自动屏蔽
作者: 风雪优游    时间: 2008-3-27 06:24
以下引用一塌糊涂于2008-3-26 22:07:34的发言:

队伍平均等级 - -

ls的大大不仔细看,哇咔咔


我问的不是等级是数据拉= =

另外,流星,使用[强度 X]来设置敌人似乎是无效的
作者: 雪流星    时间: 2008-3-27 08:48
小U你说的是你的战斗AI脚本吧?
我可没54喔!
果然是完美的敌人设计搭当脚本{/dy}

计算方式是用所有角色的平均值
计算攻击时就用所有角色的攻击来计算

用等级设定时,是佣所有角色的各项能力值平均来形成曲线计算。

以下引用风雪优游于2008-3-26 22:24:21的发言:
另外,流星,使用[强度 X]来设置敌人似乎是无效的


X是设定为  很弱、弱 这些字喔,
我测试时能力值有改变啊,我是用enghao_lim的怪物图鉴察看的
不过发脚本时把相关部分删去了,

  1. class Game_Interpreter
  2.   def make_enemy_database
  3.     for i in 1...$data_enemies.size
  4.       game_enemy = Game_Enemy.new(1, i)
  5.       $data_enemies[i].maxhp = $game_party.avg_hp_max($data_enemies[i].level)
  6.       $data_enemies[i].maxmp = game_enemy.base_maxmp
  7.       $data_enemies[i].atk   = game_enemy.base_atk
  8.       $data_enemies[i].def   = game_enemy.base_def
  9.       $data_enemies[i].spi   = game_enemy.base_spi
  10.       $data_enemies[i].agi   = game_enemy.base_agi
  11.       $data_enemies[i].hit   = game_enemy.hit
  12.       $data_enemies[i].eva   = game_enemy.eva
  13.       $data_enemies[i].exp   = game_enemy.exp
  14.     end
  15.   end
  16. end
复制代码


把上面那段加入,执行脚本命令
make_enemy_database
再找个想测试的敌人打,结束後马上调用enghao_lim的图鉴就能察看到数值变化

本来想直接修改数据库的,不过还有一点问题,所以先将相关部分删了


作者: 一塌糊涂    时间: 2008-3-27 18:31
提示: 作者被禁止或删除 内容自动屏蔽
作者: 火鸡三毛老大    时间: 2008-3-27 21:31
更新之后比较详细.....多谢了...小U那个也不错
作者: 火鸡三毛老大    时间: 2008-3-27 21:39
以下引用小幽的马甲于2008-3-26 21:00:03的发言:


以下引用火鸡的马甲鸡于2008-3-26 20:54:59的发言:


以下引用小幽的马甲于2008-3-26 20:53:12的发言:

跟我的某个脚本配合起来就可以完美设置敌人了……
不过没有测试过冲突性……毕竟都改过Game_Enemy……


是啥脚本啊?    ...想知道


就是目前主体列表中这帖的下面一贴= =
果然被无视了……


昨天晚上在这贴下面不是你那个敌人AI  {/kuk}  没有54你的脚本

作者: 小幽的马甲    时间: 2008-3-28 02:27
既然这里的同步了……我也要抓紧改那个了……
不过这里的设定是能力设定吧,不包括行动设定吧= =
作者: 雪流星    时间: 2008-3-28 02:44
以下引用小幽的马甲于2008-3-27 18:27:57的发言:

既然这里的同步了……我也要抓紧改那个了……
不过这里的设定是能力设定吧,不包括行动设定吧= =


是能力值设定
不包括行动设定
作者: 雪流星    时间: 2008-3-28 03:51
更新了修改强度标签的问题

大家还有什麽功能要补充的?{/cy}
作者: 小幽的马甲    时间: 2008-3-28 04:35
以下引用snstar2006于2008-3-27 19:51:20的发言:

更新了修改强度标签的问题

大家还有什麽功能要补充的?

你那个随机型返回的是-1。
我这里的是nil。
所以我也把我的脚本中随机型改为-1了……
不过我的新版本出来后又不能保证兼容了……
作者: 风雪优游    时间: 2008-3-28 04:57
能否加入HPMP10~50点的随机差别,属性1~5点的随机差别,另外,经验值是如何换算的?
作者: 风吹过的晴天    时间: 2008-3-28 04:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: 风雪优游    时间: 2008-3-28 04:59
以下引用snstar2006于2008-3-27 0:48:31的发言:

X是设定为  很弱、弱 这些字喔,
我测试时能力值有改变啊,我是用enghao_lim的怪物图鉴察看的
不过发脚本时把相关部分删去了,

class Game_Interpreter
  def make_enemy_database
    for i in 1...$data_enemies.size
      game_enemy = Game_Enemy.new(1, i)
      $data_enemies.maxhp = $game_party.avg_hp_max($data_enemies.level)
      $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
    end
  end
end



把上面那段加入,执行脚本命令
make_enemy_database
再找个想测试的敌人打,结束後马上调用enghao_lim的图鉴就能察看到数值变化

本来想直接修改数据库的,不过还有一点问题,所以先将相关部分删了


[本贴由作者于 2008-3-27 1:29:49 最后编辑]


那些脚本加入到什么地方?

作者: 小幽的马甲    时间: 2008-3-28 05:02
那些脚本加入到什么地方?

直接插入main前就可以了,会自动把原来的覆盖掉。
作者: 风雪优游    时间: 2008-3-28 05:21
有些话总是被无视了- -~谢谢LS了....另外想问问,敌人图鉴中备注会显示成敌人的介绍,所以[]内的文字也会显示出来,有没办法屏蔽?

作者: enghao_lim    时间: 2008-3-28 05:50
以下引用风雪优游于2008-3-27 21:21:17的发言:
有些话总是被无视了- -~谢谢LS了....另外想问问,敌人图鉴中备注会显示成敌人的介绍,所以[]内的文字也会显示出来,有没办法屏蔽?

使用.split将备注与原功能分开,或从新新建一个变量。
作者: 风雪优游    时间: 2008-3-28 05:54
以下引用enghao_lim于2008-3-27 21:50:18的发言:

使用.split将备注与原功能分开,或从新新建一个变量。


谢谢,但是不清楚怎么用- -
作者: 雪流星    时间: 2008-3-28 08:31
风版,之前小段脚本可以54了
因为我更新的版本里面已经有了

经验值换算方式是:
一般敌人:队伍平均等级升级经验 * 经验值系数(默认0.1)
BOSS:一般敌人经验值*BOSS经验系数(默认 3)

至於能力随机数,我会加进去的

以下引用enghao_lim于2008-3-27 21:50:18的发言:
使用.split将备注与原功能分开,或从新新建一个变量。

建议enghao_lim在用备注的时候使用[]来分隔开来,毕竟备注太好用了,大家都拿来用
到时又会像XP时一样一堆冲突{/hx}
作者: 一塌糊涂    时间: 2008-3-28 09:42
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪流星    时间: 2008-3-28 09:54
这是与战斗AI的冲突吧?

试试看单独使用我的脚本是否也会报错
作者: 一塌糊涂    时间: 2008-3-28 18:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪流星    时间: 2008-3-28 20:53
大概知道问题所在了
请耐心一点
下次更新会有更多功能

PS:有股冲动想做一整套懒人脚本
从此数据库成为历史
大家意下如何?
作者: 一塌糊涂    时间: 2008-3-28 20:59
提示: 作者被禁止或删除 内容自动屏蔽
作者: 小幽的马甲    时间: 2008-3-29 00:05
以下引用一塌糊涂于2008-3-28 10:33:32的发言:

就是用你顶楼贴的那个脚本。。。

我用的名字是 战斗ai 而已   囧

真是张冠李戴地说- -
作者: 一塌糊涂    时间: 2008-3-29 01:07
提示: 作者被禁止或删除 内容自动屏蔽
作者: 火鸡三毛老大    时间: 2008-3-29 02:41
以下引用snstar2006于2008-3-28 12:53:51的发言:

大概知道问题所在了
请耐心一点
下次更新会有更多功能

PS:有股冲动想做一整套懒人脚本
从此数据库成为历史
大家意下如何?


疯狂的支持......{/qiang}希望早日弄好
作者: enghao_lim    时间: 2008-3-29 02:50
以下引用snstar2006于2008-3-28 0:31:44的发言:
建议enghao_lim在用备注的时候使用[]来分隔开来,毕竟备注太好用了,大家都拿来用
到时又会像XP时一样一堆冲突

虽然我会自己修改rvdata的文件,所以基本上连备注都用不到。= =
不过这样一看,看到有关敌人的脚本是有购多的了,我配合一下,改了。
作者: 风雪优游    时间: 2008-3-30 02:03
555555555~~大家都是好人,我一直期待着啊啊啊啊!!!

话说敌人的数值是如何确认的呢?比如说10级的敌人?

如果我把主角属性全部扣掉一个位数....会如何?
作者: 小幽的马甲    时间: 2008-3-30 03:17
我也要考虑学着这个把战斗AI的分类放到说明里去了……
作者: 小幽的马甲    时间: 2008-3-30 03:19
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
这样就能得到[类型 X]中的X了么……
第一次想到说明的这个使用方法……
作者: 一塌糊涂    时间: 2008-3-31 01:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪流星    时间: 2008-3-31 06:41
以下引用一塌糊涂于2008-3-30 17:56:02的发言:

最近用了外国人的技能条件脚本。。。
果然是注释版 = =
难道以后就是注释的无限冲突?


不用担心,只要作者在使用注释时有用特殊符号框住内容,就不會發生衝突
例如我是用 [ ] 有些脚本是用 < >

国外还出了一个专门用来分隔注释的脚本
作者: 雪流星    时间: 2008-4-1 20:11
脚本更新
4/1 V2.5
- 更新强度标签判断问题
- 更新等级累加计算
- 更新标签叠加效果
- 更新类型能力判断,可以直接在设定部分修改
- 更新掉落物品计算,不过还要配合物品设定脚本,因此尚未能使用

作者: 一塌糊涂    时间: 2008-4-2 07:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪流星    时间: 2008-4-2 08:40
呵呵,大家都被雷子吓怕了
作者: 风雪优游    时间: 2008-4-3 05:05
以下引用snstar2006于2008-4-1 12:11:59的发言:

脚本更新
4/1 V2.5
- 更新强度标签判断问题
- 更新等级累加计算
- 更新标签叠加效果
- 更新类型能力判断,可以直接在设定部分修改
- 更新掉落物品计算,不过还要配合物品设定脚本,因此尚未能使用


太棒了,还会更新吗?
作者: 风雪优游    时间: 2008-4-3 06:26
发现个很严重的问题....

森林的妖精经验随着角色级别大幅度增长,初期大概一战1~3级,到后期几乎8~10级以上,约20分钟我将3级的角色升至99LV封顶— —


经验值恐怕不能按照角色的升级经验来设定,恐怕必须按照怪所设定的等级所对应的主角等级的经验来设定.....

比如设定是[等级 10]的怪,他的经验就相当与[主角等级 10]的1号主角升级所需要的经验的10%....

这个只是建议.....


另外:
7. 掉落物品
   除了在备注中设置了 [不掉落物品] 的敌人, 其他敌人会根据其等级自动计算

是否掉落 不会掉落的物品:
        1. 在脚本中设置为不掉落物品的物品(参看「物品自动计算设置」脚本)
        2. 价格为0的物品
        3. 非消耗品不会掉落

物品也成为随机的?建议加个开关,因为在特定掉物品的游戏中这个功能....
不会掉落的....是指随机还是设定的?
作者: 一塌糊涂    时间: 2008-4-3 08:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪流星    时间: 2008-4-3 19:39
那是物品自动设置的部分出错
等我把那部分处理掉{/tp}

把这段脚本加入看看
是关於物品等级设定的
物品等级设置方式与敌人相同
自动掉落物为与敌人等级差在正负2之内的物品
没有设置等级的物品视为1等

列入「无法掉落」物品ID数组的物品无法掉落
价钱为0的物品不能掉落
非消耗品的不能掉落

  1. module Item_Setup
  2.   
  3.   # 回复系数, 同时也是物品允许最大等级
  4.   RESTORE_COEF = 10
  5.   # 掉落機率係數
  6.   DROP_COEF = 3
  7.   # 無法掉落
  8.   CANNOT_DROP_ITEMS = []
  9. end

  10. class RPG::BaseItem
  11.   # 获取等级
  12.   def get_level
  13.     d = 0
  14.     self.note.split(/[\r\n]+/).each { |line|
  15.       if line =~ /\[(level|等級|等级) \d\]/
  16.         a = line.split(/ /)[1]
  17.         d += a.to_i
  18.       elsif line =~ /\[player_level|主角等級|主角等级\]/
  19.         d += $game_party.avg_level
  20.       end
  21.     }
  22.     return d
  23.   end

  24.   # 获取类型
  25.   def get_category
  26.     self.note.split(/[\r\n]+/).each { |line|
  27.       if line =~ /\[(type|類型|类型) \w+\]/ #
  28.         a = line.split(/ /)[1]
  29.         d = ""
  30.         while ((c = a.slice!(/./m)) != nil)
  31.           d += c if c != "]"
  32.         end
  33.         return d
  34.       end
  35.     }
  36.     return "default"
  37.   end
  38.   
  39.   def cannot_drop
  40.     # 指定為無法掉落的物品不掉落
  41.     return true if Item_Setup::CANNOT_DROP_ITEMS.include?(id)
  42.    
  43.     # 价钱为0的物品不掉落
  44.     if !(get_type == "skill")
  45.       return true if price == 0
  46.     end
  47.    
  48.     # 非消耗品不掉落
  49.     if get_type == "item"
  50.       return true unless consumable
  51.     end
  52.   end
  53.   
  54.   def get_type
  55.     case self
  56.     when RPG::Skill
  57.       return "skill"
  58.     when RPG::Item
  59.       return "item"
  60.     when RPG::Weapon
  61.       return "weapon"
  62.     when RPG::Armor
  63.       case self.kind
  64.       when 0
  65.         return "shield"
  66.       when 1
  67.         return "helmet"
  68.       when 2
  69.         return "armor"
  70.       when 3
  71.         return "accessory"
  72.       end
  73.     else
  74.       return "random"
  75.     end
  76.   end
  77.   
  78.   def category
  79.     cat = Item_Setup::CATEGORY[get_category]
  80.     return cat ? cat : Item_Setup::CATEGORY["default"]
  81.   end
  82.   
  83.   def level
  84.     level = get_level
  85.     level = [[level, 0].max, Item_Setup::RESTORE_COEF].min
  86.     return level
  87.   end
  88.   
  89.   def auto_setup? # 需要类型和等级才能自动设定
  90.     return (category and level)
  91.   end
  92.   
  93. end
复制代码

作者: 风雪优游    时间: 2008-4-4 06:41
以下引用风雪优游于2008-4-2 22:26:08的发言:

发现个很严重的问题....


森林的妖精经验随着角色级别大幅度增长,初期大概一战1~3级,到后期几乎8~10级以上,约20分钟我将3级的角色升至99LV封顶— —


经验值恐怕不能按照角色的升级经验来设定,恐怕必须按照怪所设定的等级所对应的主角等级的经验来设定.....

比如设定是[等级 10]的怪,他的经验就相当与[主角等级 10]的1号主角升级所需要的经验的10%....

这个只是建议.....


另外:

7. 掉落物品
  除了在备注中设置了 [不掉落物品] 的敌人, 其他敌人会根据其等级自动计算

是否掉落 不会掉落的物品:
       1. 在脚本中设置为不掉落物品的物品(参看「物品自动计算设置」脚本)
       2. 价格为0的物品
       3. 非消耗品不会掉落

物品也成为随机的?建议加个开关,因为在特定掉物品的游戏中这个功能....
不会掉落的....是指随机还是设定的?


等待....期待.....中.....

作者: ONEWateR    时间: 2008-4-4 07:35
我想这个我是少不了的!>_<
作者: 雪流星    时间: 2008-4-4 15:23
to: 风版

之前没看到你的回覆{/pz}

怪物经验值是依照 角色的平均升级所需经验值*经验值系数 计算
经验值系数在前方的设定部分理可以找得到

至於掉落物品方面:
等我写完物品设置脚本会在接着推出完整版敌人掉落物射定

不会掉落的物品是在我52楼的回复那段代码里面设定的:
# 無法掉落
CANNOT_DROP_ITEMS = [1, 2, 3]
代表1、2、3号物品无法随机掉落


作者: Jousun    时间: 2008-4-4 21:00
战斗结束后出现问题,请看看是什么问题

作者: 风雪优游    时间: 2008-4-6 06:00
以下引用snstar2006于2008-4-4 7:23:44的发言:

to: 风版

之前没看到你的回覆

怪物经验值是依照 角色的平均升级所需经验值*经验值系数 计算
经验值系数在前方的设定部分理可以找得到

至於掉落物品方面:
等我写完物品设置脚本会在接着推出完整版敌人掉落物射定

不会掉落的物品是在我52楼的回复那段代码里面设定的:
# 無法掉落
CANNOT_DROP_ITEMS = [1, 2, 3]
代表1、2、3号物品无法随机掉落


这样啊....

那经验的计算方式....会不会发生打同一种怪物可以从1级练到99级的情况呢....(实际上是发生了的)

那啥...默认价值为0的或者不能使用的不会掉落的话...那么打怪获得原材料该怎么做?能否加一个开关控制这个功能呢?
作者: 雪流星    时间: 2008-4-6 06:30
并非不能使用的不会掉落,而是非「消耗」品不会掉落

如果非消耗品或价格为0的物品要掉落的话,就直接使用数据库的设定(虽然还没做出来)
作者: 风雪优游    时间: 2008-4-6 06:33

这样啊......这个可以发布了吗?还是等段时间再发布?


话说,我还是希望能加个开关控制下这个功能.....
恩.....别把制作者宠坏了哦.....道具.....
作者: yuyi301    时间: 2008-5-4 03:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: 御灵    时间: 2008-5-25 09:07
发布页面:http://rpg.blue/web/htm/news1085.htm
vip+3
作者: 雪流星    时间: 2008-5-25 09:17
{/fd}御靈你發布啦?

我想說還有問題的
所以一直遲遲未發布
作者: 御灵    时间: 2008-5-25 09:41
那就麻烦你在改好后更新到主站上啦~
把VX技术区扫了一遍~收工~
^_^流星晚安~
作者: 火鸡三毛老大    时间: 2008-5-31 15:43
571行错误        if (armor.level - enemy.level).abs <= 2 and armor.level == 0

还有...经验到底怎样计算...我PM你 你没看到?

作者: 雪流星    时间: 2008-6-1 04:05
以下引用火鸡三毛老大于2008-5-31 7:43:16的发言:
571行错误 &nbsp; &nbsp; &nbsp; &nbsp;<font color="#000099">if</font> (armor.level - enemy.level).abs &lt;= 2 and armor.level == 0
<br>
还有...经验到底怎样计算...我PM你 你没看到?

錯誤信息是什麼?
作者: 火鸡三毛老大    时间: 2008-6-1 04:38
以下引用snstar2006于2008-5-31 20:05:35的发言:


以下引用火鸡三毛老大于2008-5-31 7:43:16的发言:
571行错误 &nbsp; &nbsp; &nbsp; &nbsp;<font color="#000099">if</font> (armor.level - enemy.level).abs &lt;= 2 and armor.level == 0
<br>
还有...经验到底怎样计算...我PM你 你没看到?


錯誤信息是什麼?


这个:


还有..我设置 [等级 1] [强度 很弱]  可是...血也太多了....
能把自动设定各个能力..计算方法...写在注释里吗?
这样就很明了了....
一个怪打了老半天就10经验....{/kuk}
作者: cloverhope    时间: 2008-8-24 03:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: zh99998    时间: 2008-8-25 04:41
LS挖坟
作者: 支持66    时间: 2008-10-1 02:34
提示: 作者被禁止或删除 内容自动屏蔽
作者: 支持66    时间: 2008-10-1 03:55
提示: 作者被禁止或删除 内容自动屏蔽
作者: exile88    时间: 2008-10-4 08:49
太好了,那我就不用老是要自己试玩来调整敌人属性了!{/cy}
作者: 游梦    时间: 2008-11-15 22:25
感觉非常不错,我是个新人,先拿去用用
{/qiang}支持
作者: zh99998    时间: 2008-11-15 23:52
能不能直接写入数据库,方便进行修整
作者: 雪流星    时间: 2008-11-17 20:31
以下引用zh99998于2008-11-15 15:52:25的发言:
能不能直接写入数据库,方便进行修整

= ="
注意看說明
作者: 风雪优游    时间: 2008-11-18 00:07
很喜欢这个脚本,不过经验值的设定有些麻烦吧.

用了这个脚本,可以打一种怪一直打到99级= =
作者: 2288809    时间: 2008-11-27 05:48
呵呵,打到99级……
    感觉很好玩
   问问楼主能进行限制吗?
   比如某种怪物的经验最多只能是1000.再升级不进行增加经验。

作者: yirumodao    时间: 2008-12-6 01:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: badutib    时间: 2008-12-27 22:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: 永恒之冥神    时间: 2008-12-28 11:51
有利有弊,虽然说简单化了设定,但是太过单调了
作者: 断罪之花    时间: 2009-1-10 17:43
不错的东西,我试试看。 [LINE]1,#dddddd[/LINE]版主对此帖的评论:『不要挖坟~~~』,积分『-15』。这些被扣积分的一半会用于对本帖正确答案的悬赏。
作者: 黑闇的弥撒    时间: 2009-1-13 05:09
这个脚本和日站上的破限有点冲突,只要超过99级时就出错。
作者: OCTSJimmy    时间: 2009-1-13 20:01
这个好……我还正在想这玩意儿呢……就是根据角色的等级决定怪物的属性……

而且有了这个游戏可以做上难度选择了,嘿嘿……
作者: 巴哈姆特    时间: 2009-3-5 21:09
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雪流星    时间: 2009-3-6 05:48
以下引用巴哈姆特于2009-3-5 13:09:26的发言:
另外请问,这个脚本是否也把装备的加值也算在内了呢?(如果是那装备就废物了。。。)
还有,是否是计算了整个队伍的平均值呢?
单人打感觉比较吃亏。。。

1. 装备的加值没有算进去
2. 的确是使用了队伍的平均值
作者: 巴哈姆特    时间: 2009-3-6 06:45
提示: 作者被禁止或删除 内容自动屏蔽
作者: reweik    时间: 2009-4-5 20:18
谢谢楼主~新手上路正好为敌人而烦恼着,……
作者: njustlifeng    时间: 2009-4-9 19:03
全自动脚本啊,厉害
作者: 慕雪丶子轩    时间: 2009-4-14 20:59
提示: 作者被禁止或删除 内容自动屏蔽
作者: 孤叶留风    时间: 2009-4-15 00:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: hitomisky    时间: 2009-4-16 09:38
强烈支持啊
作者: guosibo137    时间: 2009-10-17 07:44
好东西哦
作者: Benimaru    时间: 2009-10-30 13:54
为什么我用了这个以后,打同级的怪所得经验只 2-9点呢? 我的角色等级31啊......想请教一下
作者: Benimaru    时间: 2009-10-30 13:58
怪物为 [主角等级]
           [强度 弱]
           [类型 武士]

这是我写在备注里的 我人物等级31 杀完只有2-9点经验....是正常的么? 我现在生一级要4W多经验啊 这杀哪辈子去啊??
作者: 依莫樱    时间: 2009-11-1 14:21
我脚本盲...........
作者: aingao    时间: 2009-11-12 09:26
提示: 作者被禁止或删除 内容自动屏蔽
作者: Tokgoshao    时间: 2009-12-26 08:34
提示: 作者被禁止或删除 内容自动屏蔽
作者: death_loong    时间: 2010-4-20 10:54
拿来试试
作者: Near_DM    时间: 2010-7-21 11:20
楼主,为什么用了这脚本后,胜利获得的经验值太少了吧?从来没超过11的。
作者: 楚欢    时间: 2010-7-24 16:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: a123669520    时间: 2010-7-27 22:22
707行脚本出错




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