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

Project1

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

[已经过期] 敌人能力值设置

[复制链接]

Lv3.寻梦者

梦石
0
星屑
3591
在线时间
1890 小时
注册时间
2010-6-19
帖子
1211
跳转到指定楼层
1
发表于 2014-8-24 19:17:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x

这个是VX的敌人能力值设置,来个高手帮改成支持XP的
  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.     7. 掉落物品
  81.       除了在备注中设置了 [不掉落物品] 的敌人, 其他敌人会根据其等级自动计算
  82.       
  83.       不会掉落的物品:
  84.         1. 在脚本中设置为不掉落物品的物品(参看「物品自动计算设置」脚本)
  85.         2. 价格为0的物品
  86.         3. 非消耗品不会掉落
  87.         三者只要满足一项就不会掉落
  88.       
  89.       敌人会掉落的物品为:敌人等级与物品等级差在2以下
  90.       物品设置请看「物品自动计算设置」脚本内容
  91.      
  92.     配合使用方法:
  93.      
  94.     一般敌人建议用第一种方法,设立(伪)绝对等级,主角成长後依然为弱怪的敌人。
  95.     头目敌人可以直接指定其类型为 BOSS,但是其能力值增值方面就比较死板,
  96.       若是想做成巫师型的血低魔高的BOSS,可以用下面的方法
  97.       
  98.       用第二、三种方法,设立相对等级,主角成长也会跟着成长的敌人。
  99.           设立为「弱」时,虽然对主角来说依然是弱怪,
  100.           但是会随着主角成长,HP、MP、经验值会随着增加,
  101.           可以用来做练级用的怪。
  102.          
  103.          
  104.     调用敌人图鉴方式:
  105.     在调用前先执行脚本 make_enemy_database
  106.     只要 WRITE_2_DATABASE 设为 false
  107.     就不会覆写数据库的资料,而是在游戏中调用而已。
  108.     不过说明方面就会有点问题了
  109.      
  110.     覆写数据库方法:
  111.     将WRITE_2_DATABASE 设为 true
  112.     随意在地图上用一个事件执行 make_enemy_database
  113.     再回到脚本将WRITE_2_DATABASE 设为 false(以免在运行中误操作)
  114.      
  115. =end
  116. # 设置部分:
  117. module Auto_Enemy
  118.    
  119.   # 是否写入数据库
  120.   WRITE_2_DATABASE = false
  121.    
  122.   # 是否自動設置屬性有效度
  123.   AUTO_SET_ELEMENT = true
  124.    
  125.   # 是否自動設定狀態抵禦度
  126.   AUTO_SET_STATES  = true
  127.    
  128.   # 经验值计算系数
  129.   EXPERIENCE = 0.1
  130.   BOSS_EXP   = 3
  131.    
  132.   STRENGTH = {
  133.       "很弱" =>  -3,
  134.       "弱"   =>  -2,
  135.       "同"   =>   1,
  136.       "强"   =>   2,
  137.       "很强" =>   3,
  138.       "default" => 0  # 这行不要修改,除错用的
  139.   }
  140.    
  141.   # 敌人类型设定
  142.   ENEMY_TYPE = {
  143.    
  144.       "普通"   => 0,  # 普通敌人,能力值依队伍平均计算
  145.       "武士"   => 1,  # 武士型敌人,物理攻击等偏高
  146.       "法师"   => 2,  # 法师型敌人,魔法攻击偏高
  147.       "牧师"   => 3,  # 牧师型敌人,魔力值偏高
  148.       "巫师"   => 4,  # 巫师型敌人,命中率偏高
  149.       "挡箭牌" => 5,  # 挡箭牌型敌人,血高肉厚
  150.       "BOSS"   => 6,  # BOSS型敌人,各项能力值都增强
  151.       # 以上的数值可以在下面的数组变更
  152.       
  153.       "随机"   => -1, # 随机,看看它的运气,加值在 1~1.99
  154.       "default"=> 0   # 这行不要修改,除错用,默认为普通
  155.   }
  156.    
  157.   # 敌人能力值加值参数,对应上放哈希表的敌人类型。不会改的话就别改了。
  158.   #                 普通 武士  法师  牧师  巫师  档箭  BOSS
  159.   ENEMY_TYPE_HP  = [1,   1.5,  0.75, 0.6,  0.8,  2,    4]  # 体力最大值
  160.   ENEMY_TYPE_MP  = [1,   0.75, 1.5,  3,    1.4,  1.1,  4]  # 魔力最大值
  161.   ENEMY_TYPE_ATK = [1,   2,    0.75, 0.5,  0.6,  1.1,  4]  # 攻击力
  162.   ENEMY_TYPE_DEF = [1,   1.25, 0.5,  0.75, 0.7,  3,    4]  # 防御力
  163.   ENEMY_TYPE_SPI = [1,   0.1,  2,    1.75, 1.5,  0,    2]  # 精神力
  164.   ENEMY_TYPE_AGI = [1,   1.2,  2,    0.8,  1.1,  0.2,  2]  # 敏捷
  165.   ENEMY_TYPE_HIT = [1,   1.3,  1.1,  1.5,  1.8,  1 ]       # 命中率
  166.   ENEMY_TYPE_EVA = [1,   1,    1,    0.9,  1.1,  0 ]       # 闪躲率
  167.                                # BOSS的命中率和闪躲率为默认最高的95%
  168. end
  169. class Game_Party
  170.   def avg_number(number, level=nil)
  171.     average = 0
  172.     for i in @actors
  173.       actor = level ? $data_actors[i] : $game_actors[i]
  174.       case number
  175.       when "level"
  176.         average += $game_actors[i].level
  177.       when "exp"
  178.         average += $game_actors[i].next_exp_s
  179.       when "hp"
  180.         if level
  181.           average += actor.parameters[0, level]
  182.         else
  183.           average += actor.maxhp
  184.         end
  185.       when "mp"
  186.         if level
  187.           average += actor.parameters[1, level]
  188.         else
  189.           average += actor.maxmp
  190.         end
  191.       when "atk"
  192.         if level
  193.           average += actor.parameters[2, level]
  194.         else
  195.           average += actor.atk
  196.         end
  197.       when "def"
  198.         if level
  199.           average += actor.parameters[3, level]
  200.         else
  201.           average += actor.def
  202.         end
  203.       when "spi"
  204.         if level
  205.           average += actor.parameters[4, level]
  206.         else
  207.           average += actor.spi
  208.         end
  209.       when "agi"
  210.         if level
  211.           average += actor.parameters[5, level]
  212.         else
  213.           average += actor.agi
  214.         end
  215.       when "hit"
  216.         average += $game_actors[i].hit
  217.       when "eva"
  218.         average += $game_actors[i].eva
  219.       end
  220.     end
  221.     average /= members.size
  222.     return average
  223.   end
  224.    
  225.   # 獲取平均等級
  226.   def avg_level
  227.     return avg_number("level")
  228.   end
  229.    
  230.   # 獲取平均升級經驗
  231.   def avg_exp_needed
  232.     return avg_number("exp")
  233.   end
  234.    
  235.   def avg_hp_max(level=nil)
  236.     return avg_number("hp", level)
  237.   end
  238.   def avg_mp_max(level=nil)
  239.     return avg_number("mp", level)
  240.   end
  241.   def avg_atk(level=nil)
  242.     return avg_number("atk", level)
  243.   end
  244.   def avg_def(level=nil)
  245.     return avg_number("def", level)
  246.   end
  247.    
  248.   def avg_spi(level=nil)
  249.     return avg_number("spi", level)
  250.   end
  251.    
  252.   def avg_agi(level=nil)
  253.     return avg_number("agi", level)
  254.   end
  255.    
  256.   def avg_hit
  257.     return avg_number("hit")
  258.   end
  259.    
  260.   def avg_eva
  261.     return avg_number("eva")
  262.   end
  263. end
  264. class RPG::Enemy
  265.   # 获取等级
  266.   def get_level
  267.     elevel = 0
  268.     self.note.split(/[\r\n]+/).each { |line|
  269.       if line =~ /\[(level|等級|等级) {1,2}\]/
  270.         a = line.split(/ /)[1]
  271.         elevel += a.to_i
  272.       elsif line =~ /\[player_level|主角等級|主角等级\]/
  273.         elevel += $game_party.avg_level
  274.       end
  275.     }
  276.     return elevel==0 ? nil : elevel
  277.   end
  278.    
  279.   # 获取强度
  280.   def get_str
  281.     self.note.split(/[\r\n]+/).each { |line|
  282.       if line =~ /\[(strength|強度|强度) \w+\]/  
  283.         a = line.split(/ /)[1]
  284.         d = ""
  285.         while ((c = a.slice!(/./m)) != nil)
  286.           d += c if c != "]"
  287.         end
  288.         return d
  289.       end
  290.     }
  291.     return "default"
  292.   end
  293.    
  294.   def get_enemy_type
  295.     self.note.split(/[\r\n]+/).each { |line|
  296.       if line =~ /\[(type|類型|类型) \w+\]/
  297.         a = line.split(/ /)[1]
  298.         d = ""
  299.         while ((c = a.slice!(/./m)) != nil)
  300.           d += c if c != "]"
  301.         end
  302.         return d
  303.       end
  304.     }
  305.     return "default"
  306.   end
  307.    
  308.   def drop_item?
  309.     self.note.split(/[\r\n]+/).each { |line|
  310.       return if !(line =~ /\[(no_drop|不掉落物品|不掉落物品)\]/)
  311.     }
  312.   end
  313.    
  314.   # 计算等级
  315.   def level
  316.     if auto_level?
  317.       if auto_str?
  318.         return [get_level + str, 1].max
  319.       else
  320.         return get_level
  321.       end
  322.     elsif auto_str?
  323.       elevel = $game_party.avg_level + str
  324.       return [elevel, 1].max
  325.     end
  326.   end
  327.    
  328.   def str
  329.     estr = Auto_Enemy::STRENGTH[get_str]
  330.     if estr != nil
  331.       return estr
  332.     else
  333.       return Auto_Enemy::STRENGTH["default"]
  334.     end
  335.   end
  336.    
  337.   def type
  338.     if $enemies_class != nil  
  339.       return $enemies_class[@enemy_id] if $enemies_class[@enemy_id]!=nil
  340.     end
  341.     return Auto_Enemy::ENEMY_TYPE[get_enemy_type]
  342.   end
  343.    
  344.   def auto_level?
  345.     return get_level
  346.   end
  347.   def auto_str?
  348.     return get_str
  349.   end
  350.   def auto_setup?
  351.     return (auto_level? or auto_str?)
  352.   end
  353. end
  354. #==============================================================================
  355. # ■ Game_Enemy
  356. #------------------------------------------------------------------------------
  357. #  处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的 内部使用。
  358. #==============================================================================
  359. class Game_Enemy < Game_Battler
  360.   #--------------------------------------------------------------------------
  361.   # ● 获取基本体力最大值
  362.   #--------------------------------------------------------------------------
  363.   def base_maxhp
  364.     if enemy.auto_setup?
  365.       enemy_maxhp = $game_party.avg_hp_max(enemy.level)
  366.       if enemy.type == -1
  367.         enemy_maxhp *= (1 + rand(0))
  368.       else
  369.         enemy_maxhp *= Auto_Enemy::ENEMY_TYPE_HP[enemy.type]
  370.       end
  371.       enemy_maxhp = enemy_maxhp.to_i
  372.       enemy_maxhp += rand(10)
  373.       return enemy_maxhp
  374.     else
  375.       return enemy.maxhp
  376.     end
  377.   end
  378.   #--------------------------------------------------------------------------
  379.   # ● 获取基本魔力最大值
  380.   #--------------------------------------------------------------------------
  381.   def base_maxmp
  382.     if enemy.auto_setup?
  383.       enemy_maxmp = $game_party.avg_mp_max(enemy.level)
  384.       if enemy.type == -1
  385.         enemy_maxmp *= (1 + rand(0))
  386.       else
  387.         enemy_maxmp *= Auto_Enemy::ENEMY_TYPE_MP[enemy.type]
  388.       end
  389.       enemy_maxmp = enemy_maxmp.to_i
  390.       enemy_maxmp += rand(5)
  391.       return enemy_maxmp
  392.     else
  393.       return enemy.maxmp
  394.     end
  395.   end
  396.   #--------------------------------------------------------------------------
  397.   # ● 获取基本攻击力
  398.   #--------------------------------------------------------------------------
  399.   def base_atk
  400.     if enemy.auto_setup?
  401.       enemy_atk = $game_party.avg_atk(enemy.level)
  402.       if enemy.type == -1
  403.         enemy_atk *= (1 + rand(0))
  404.       else
  405.         enemy_atk *= Auto_Enemy::ENEMY_TYPE_ATK[enemy.type]
  406.       end
  407.       enemy_atk = enemy_atk.to_i
  408.       enemy_atk += rand(5)
  409.       return enemy_atk
  410.     else
  411.       return enemy.atk
  412.     end
  413.   end
  414.   #--------------------------------------------------------------------------
  415.   # ● 获取基本防御力
  416.   #--------------------------------------------------------------------------
  417.   def base_def
  418.     if enemy.auto_setup?
  419.       enemy_def = $game_party.avg_def(enemy.level)
  420.       if enemy.type == -1
  421.         enemy_def *= (1 + rand(0))
  422.       else
  423.         enemy_def *= Auto_Enemy::ENEMY_TYPE_DEF[enemy.type]
  424.       end
  425.       enemy_def = enemy_def.to_i
  426.       enemy_def += rand(5)
  427.       return enemy_def
  428.     else
  429.       return enemy.def
  430.     end
  431.   end
  432.   #--------------------------------------------------------------------------
  433.   # ● 获取基本精神力
  434.   #--------------------------------------------------------------------------
  435.   def base_spi
  436.     if enemy.auto_setup?
  437.       enemy_spi = $game_party.avg_spi(enemy.level)
  438.       if enemy.type == -1
  439.         enemy_spi *= (1 + rand(0))
  440.       else
  441.         enemy_spi *= Auto_Enemy::ENEMY_TYPE_SPI[enemy.type]
  442.       end
  443.       enemy_spi = enemy_spi.to_i
  444.       enemy_spi += rand(5)
  445.       return enemy_spi
  446.     else
  447.       return enemy.spi
  448.     end
  449.   end
  450.   #--------------------------------------------------------------------------
  451.   # ● 获取基本敏捷
  452.   #--------------------------------------------------------------------------
  453.   def base_agi
  454.     if enemy.auto_setup?
  455.       enemy_agi = $game_party.avg_agi(enemy.level)
  456.       if enemy.type == -1
  457.         enemy_agi *= (1 + rand(0))
  458.       else
  459.         enemy_agi *= Auto_Enemy::ENEMY_TYPE_AGI[enemy.type]
  460.       end
  461.       enemy_agi = enemy_agi.to_i
  462.       enemy_agi += rand(5)
  463.       return enemy_agi
  464.     else
  465.       return enemy.agi
  466.     end
  467.   end
  468.   #--------------------------------------------------------------------------
  469.   # ● 获取命中率
  470.   #--------------------------------------------------------------------------
  471.   def hit
  472.     if enemy.auto_setup?
  473.       enemy_hit = $game_party.avg_hit
  474.       if enemy.type == -1
  475.         enemy_hit *= (1 + rand(0))
  476.       elsif enemy.type == 6
  477.         enemy_hit = 95
  478.       else
  479.         enemy_hit *= Auto_Enemy::ENEMY_TYPE_HIT[enemy.type]
  480.       end
  481.       return [[enemy_hit.to_i, 95].min, 50].max
  482.     else
  483.       return enemy.hit
  484.     end
  485.   end
  486.   #--------------------------------------------------------------------------
  487.   # ● 获取闪躲率
  488.   #--------------------------------------------------------------------------
  489.   def eva
  490.     if enemy.auto_setup?
  491.       enemy_eva = $game_party.avg_eva
  492.       if enemy.type == -1
  493.         enemy_eva *= (1 + rand(0))
  494.       elsif enemy.type == 6
  495.         enemy_eva = 95
  496.       else
  497.         enemy_eva *= Auto_Enemy::ENEMY_TYPE_EVA[enemy.type]
  498.       end
  499.       return [[enemy_eva.to_i, 95].min, 0].max
  500.     else
  501.       return enemy.eva
  502.     end
  503.   end
  504.   #--------------------------------------------------------------------------
  505.   # ● 获取经验值
  506.   #--------------------------------------------------------------------------
  507.   def exp
  508.     if enemy.auto_setup?
  509.       exp = ($game_party.avg_exp_needed * Auto_Enemy::EXPERIENCE).to_i
  510.       exp =* enemy.type == 6 ? Auto_Enemy::BOSS_EXP : 1
  511.       exp += rand(10)
  512.       return exp
  513.     else
  514.       return enemy.exp
  515.     end
  516.   end
  517.    
  518.   def drop_item1
  519.     if enemy.auto_setup? or drop_item?
  520.       get_drop_item  
  521.     else
  522.       return @drop_item1
  523.     end
  524.   end
  525.    
  526.   def drop_item2
  527.     if (enemy.auto_setup? or drop_item?) and drop_item1.kind != 0
  528.       get_drop_item  
  529.     else
  530.       return RPG::Enemy::DropItem.new
  531.     end
  532.   end
  533.    
  534.   def get_drop_item
  535.     possible_drop_item = []
  536.     drop = RPG::Enemy::DropItem.new
  537.     drop.kind = rand(4)
  538.     case drop.kind
  539.     when 1
  540.       for i in 1...$data_items.size
  541.         item = $data_items[i]
  542.         if (item.level - enemy.level).abs <= 2 and item.level == 0
  543.           possible_drop_item.push(item.id) unless item.cannot_drop
  544.         end
  545.       end
  546.       drop.item_id = possible_drop_item[rand(possible_drop_item.size)]
  547.     when 2
  548.       for i in 1...$data_weapons.size
  549.         weapon  = $data_weapons[i]
  550.         if (weapon.level - enemy.level).abs <= 2 and weapon.level == 0
  551.           possible_drop_item.push(weapon.id) unless weapon.cannot_drop
  552.         end
  553.       end
  554.       drop.weapon_id = possible_drop_item[rand(possible_drop_item.size)]
  555.     when 3
  556.       for i in 1...$data_armors.size
  557.         armor  = $data_armors[i]
  558.         if (armor.level - enemy.level).abs <= 2 and armor.level == 0
  559.           possible_drop_item.push(armor.id) unless armor.cannot_drop
  560.         end
  561.       end
  562.       drop.armor_id = possible_drop_item[rand(possible_drop_item.size)]
  563.     end
  564.      
  565.     drop.kind = 0 if possible_drop_item == []
  566.      
  567.     ratio = enemy.level * rand(5) / Item_Setup::DROP_COEF
  568.     drop.denominator = [ratio, 1].max
  569.     return drop
  570.   end
  571.    
  572. end
  573. class Game_Interpreter
  574.   def make_enemy_database
  575.     for i in 1...$data_enemies.size
  576.       game_enemy = Game_Enemy.new(1, i)
  577.       if $data_enemies[i].auto_setup?
  578.         $data_enemies[i].maxhp      = game_enemy.base_maxhp
  579.         $data_enemies[i].maxmp      = game_enemy.base_maxmp
  580.         $data_enemies[i].atk        = game_enemy.base_atk
  581.         $data_enemies[i].def        = game_enemy.base_def
  582.         $data_enemies[i].spi        = game_enemy.base_spi
  583.         $data_enemies[i].agi        = game_enemy.base_agi
  584.         $data_enemies[i].hit        = game_enemy.hit
  585.         $data_enemies[i].eva        = game_enemy.eva
  586.         $data_enemies[i].exp        = game_enemy.exp
  587.         if $lazy_item_setup
  588.           $data_enemies[i].drop_item1 = game_enemy.drop_item1
  589.           $data_enemies[i].drop_item2 = game_enemy.drop_item2
  590.         end
  591.       end
  592.     end
  593.     save_data($data_enemies,"Data/Enemies.rvdata") if Auto_Enemy::WRITE_2_DATABASE
  594.   end
  595. end

复制代码

Lv2.观梦者

故九江太守

梦石
0
星屑
613
在线时间
2165 小时
注册时间
2012-12-5
帖子
4464
2
发表于 2014-8-25 09:05:23 | 只看该作者
本帖最后由 你最珍贵 于 2014-8-25 10:23 编辑

(`・ω・)看上去很简单嘛,我先占位

低估了~(害羞)  因为XP没备注栏嘛,制作有点难度
敌人能力值.rar (193.66 KB, 下载次数: 44) 只弄了等级
回复 支持 反对

使用道具 举报

Lv1.梦旅人

薄凉看客

梦石
0
星屑
50
在线时间
1269 小时
注册时间
2010-6-20
帖子
1316
3
发表于 2014-8-27 13:11:02 | 只看该作者
本帖最后由 恐惧剑刃 于 2014-8-27 15:33 编辑

大概如此
  1. =begin

  2. ========================================================================
  3. 关于敌人类型:

  4. 如果只是类型不同能力就有较大差异(偏血,偏攻,偏法 等),
  5. 完全可以在数据库中调整。

  6. 个人感觉“敌人类型”很是鸡肋。
  7. 添加了成长比例,自由定义各种能力的成长,有些HP成长高,有些攻击成长高
  8. 什么的,个人感觉还是可以替代“敌人类型”的。
  9. ========================================================================

  10. =end

  11. module Enemy
  12.   Level = []
  13.   Exp = []
  14.   Item = []

  15.   #========================================================================
  16.   #  ● 等级设定
  17.   #========================================================================
  18.   #  ○直接指定○:
  19.   #   n  : (直接指定)
  20.   #
  21.   #  ○数组指定○( [参考等级, 相对等级, 成长比例的数组] ):
  22.   #  参考等级 : (标准等级)
  23.   #  相对等级 : (该敌人的等级随同伴等级的变化而变化)
  24.   #  成长比例的数组 : 随敌人实际等级的变化,能力增加或减少的比例 的数组
  25.   #========================================================================
  26.   #  实际等级算法:
  27.   #  同伴等级的均值 + 相对等级
  28.   #  实际能力算法:
  29.   #  某能力标准值 + (实际等级 - 参考等级) * (某能力标准值 * 成长比例)
  30.   #  ※ 标准能力值 : 就是数据库中设置的敌人能力。
  31.   #========================================================================
  32.   #  ※ 假定参考等级为20,相对等级为5,hp的成长比例为0.1,其标准MAXHP为500,
  33.   #     同伴等级的均值为30
  34.   #  那么这个敌人的实际等级为:30 + 5 = 35 级
  35.   #  那么这个敌人的实际MAXHP为:
  36.   #  500 + (35 - 20) * (500 * 0.1) = 1250 点
  37.   #========================================================================
  38.   
  39.   # ○○○○○○○○○○○○○○○○○○○○○○○○○
  40.   # 比例最好小一些,不然敌人可能会异常强悍
  41.   # ○○○○○○○○○○○○○○○○○○○○○○○○○
  42.   
  43.   
  44.   # 比例的数组
  45.   # [最大hp, 最大mp, 力量, 灵巧, 速度, 魔力, 攻击力, 物理防御, 魔法防御, 回避]
  46.   Level[1] = [1, 5, [0.03, 0.02, 0.04, 0.01, 0.01, 0.03, 0.02, 0.001, 0.002, 0]]

  47.   
  48.   
  49.   
  50.   #========================================================================
  51.   #  ● 经验比例设定
  52.   #========================================================================
  53.   #  基础经验 , 数据库中设置的敌人经验
  54.   #  敌人等级 , (这里设置的敌人等级)
  55.   #  经验比例 , (这里设置的经验比例)
  56.   #========================================================================
  57.   #  经验计算公式 :
  58.   #  基础经验 + (敌人等级 - 角色等级) * (基础经验 * 经验比例)
  59.   #========================================================================
  60.   #  ※ 假定基础经验为100,经验比例为0.1,敌人等级为10
  61.   #  如果同伴中有一个20级的角色,那么这个角色会获得:
  62.   #  100 + (10 - 20) * (100 * 0.1) = 0 小于等于0,也就是没有经验奖励,
  63.   #  而如果同伴中有一个5级的角色,那么这个角色会获得:
  64.   #  100 + (10 - 5) * (100 * 0.1) = 150 点经验
  65.   #========================================================================
  66.   Exp[1] = 0.1
  67.   
  68.   #========================================================================
  69.   #  ●(掉落)宝物设定
  70.   #========================================================================
  71.   #  宝物种类 0 => 物品  1 => 武器  2 => 防具
  72.   #========================================================================
  73.   #  数组内容 :
  74.   #  [宝物种类, 宝物id, 获得概率[, 获得数量]] // 获得数量默认为1
  75.   #========================================================================
  76.   #  ※ 数组第一项为宝物的种类数,即最多可以同时获得多少种不同的宝物。
  77.   #     另外不同的宝物概率独立,不需要设置加起来是100什么的。
  78.   #========================================================================
  79.   Item[1] = [1]
  80.   Item[1] << [0, 1, 20, 1]
  81.   
  82.   
  83.   
  84. end

  85. class Game_Enemy < Game_Battler
  86.   attr_reader   :level
  87.   #--------------------------------------------------------------------------
  88.   # ● 初始化对像
  89.   #     troop_id     : 循环 ID
  90.   #     member_index : 循环成员的索引
  91.   #--------------------------------------------------------------------------
  92.   def initialize(troop_id, member_index)
  93.     super()
  94.     @troop_id = troop_id
  95.     @member_index = member_index
  96.     troop = $data_troops[@troop_id]
  97.     @enemy_id = troop.members[@member_index].enemy_id
  98.     # ================================
  99.     @plus_eva =
  100.     @plus_hp =
  101.     @plus_sp =
  102.     @plus_atk =
  103.     @plus_str =
  104.     @plus_dex =
  105.     @plus_agi =
  106.     @plus_int =
  107.     @plus_pdef =
  108.     @plus_mdef = 0
  109.     setlv
  110.     # ================================
  111.     enemy = $data_enemies[@enemy_id]
  112.     @battler_name = enemy.battler_name
  113.     @battler_hue = enemy.battler_hue
  114.     @hp = maxhp
  115.     @sp = maxsp
  116.     [url=home.php?mod=space&uid=292300]@Hidden[/url] = troop.members[@member_index].hidden
  117.     @immortal = troop.members[@member_index].immortal
  118.   end
  119.   def setlv
  120.     if Enemy::Level[@enemy_id] != nil and Enemy::Level[@enemy_id].is_a?(Array)
  121.       # 同伴等级的均值
  122.       actor_lv = 0
  123.       for l in $game_party.actors
  124.         actor_lv += l.level
  125.       end
  126.       actor_lv /= $game_party.actors.size
  127.       lv = actor_lv + Enemy::Level[@enemy_id][1]
  128.       sv = lv - Enemy::Level[@enemy_id][0]
  129.       if sv != 0
  130.         @plus_hp = sv * (maxhp * Enemy::Level[@enemy_id][2][0])
  131.         @plus_sp = sv * (maxsp * Enemy::Level[@enemy_id][2][1])
  132.         @plus_str = sv * (str * Enemy::Level[@enemy_id][2][2])
  133.         @plus_dex = sv * (dex * Enemy::Level[@enemy_id][2][3])
  134.         @plus_agi = sv * (agi * Enemy::Level[@enemy_id][2][4])
  135.         @plus_int = sv * (int * Enemy::Level[@enemy_id][2][5])
  136.         @plus_atk = sv * (atk * Enemy::Level[@enemy_id][2][6])
  137.         @plus_pdef = sv * (pdef * Enemy::Level[@enemy_id][2][7])
  138.         @plus_mdef = sv * (mdef * Enemy::Level[@enemy_id][2][8])
  139.         @plus_eva = sv * (eva * Enemy::Level[@enemy_id][2][9])
  140.       end
  141.       @level = lv
  142.     elsif Enemy::Level[@enemy_id] != nil and !Enemy::Level[@enemy_id].is_a?(Array)
  143.       @level = Enemy::Level[@enemy_id][1]
  144.     else
  145.       @level = 1
  146.     end
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 获取 MaxHP
  150.   #--------------------------------------------------------------------------
  151.   def maxhp
  152.     n = [[base_maxhp + @maxhp_plus, 1].max, 999999].min
  153.     n += @plus_hp
  154.     for i in @states
  155.       n *= $data_states[i].maxhp_rate / 100.0
  156.     end
  157.     n = [[Integer(n), 1].max, 999999].min
  158.     return n
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● 获取 MaxSP
  162.   #--------------------------------------------------------------------------
  163.   def maxsp
  164.     n = [[base_maxsp + @maxsp_plus, 0].max, 9999].min
  165.     n += @plus_sp
  166.     for i in @states
  167.       n *= $data_states[i].maxsp_rate / 100.0
  168.     end
  169.     n = [[Integer(n), 0].max, 9999].min
  170.     return n
  171.   end
  172.   #--------------------------------------------------------------------------
  173.   # ● 获取力量
  174.   #--------------------------------------------------------------------------
  175.   def str
  176.     n = [[base_str + @str_plus, 1].max, 999].min
  177.     n += @plus_str
  178.     for i in @states
  179.       n *= $data_states[i].str_rate / 100.0
  180.     end
  181.     n = [[Integer(n), 1].max, 999].min
  182.     return n
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # ● 获取灵巧
  186.   #--------------------------------------------------------------------------
  187.   def dex
  188.     n = [[base_dex + @dex_plus, 1].max, 999].min
  189.     n += @plus_dex
  190.     for i in @states
  191.       n *= $data_states[i].dex_rate / 100.0
  192.     end
  193.     n = [[Integer(n), 1].max, 999].min
  194.     return n
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● 获取速度
  198.   #--------------------------------------------------------------------------
  199.   def agi
  200.     n = [[base_agi + @agi_plus, 1].max, 999].min
  201.     n += @plus_agi
  202.     for i in @states
  203.       n *= $data_states[i].agi_rate / 100.0
  204.     end
  205.     n = [[Integer(n), 1].max, 999].min
  206.     return n
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ● 获取魔力
  210.   #--------------------------------------------------------------------------
  211.   def int
  212.     n = [[base_int + @int_plus, 1].max, 999].min
  213.     n += @plus_int
  214.     for i in @states
  215.       n *= $data_states[i].int_rate / 100.0
  216.     end
  217.     n = [[Integer(n), 1].max, 999].min
  218.     return n
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ● 获取攻击力
  222.   #--------------------------------------------------------------------------
  223.   def atk
  224.     n = base_atk
  225.     n += @plus_atk
  226.     for i in @states
  227.       n *= $data_states[i].atk_rate / 100.0
  228.     end
  229.     return Integer(n)
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # ● 获取物理防御
  233.   #--------------------------------------------------------------------------
  234.   def pdef
  235.     n = base_pdef
  236.     n += @plus_pdef
  237.     for i in @states
  238.       n *= $data_states[i].pdef_rate / 100.0
  239.     end
  240.     return Integer(n)
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● 获取魔法防御
  244.   #--------------------------------------------------------------------------
  245.   def mdef
  246.     n = base_mdef
  247.     n += @plus_mdef
  248.     for i in @states
  249.       n *= $data_states[i].mdef_rate / 100.0
  250.     end
  251.     return Integer(n)
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   # ● 获取回避修正
  255.   #--------------------------------------------------------------------------
  256.   def eva
  257.     n = base_eva
  258.     n += @plus_eva
  259.     for i in @states
  260.       n += $data_states[i].eva
  261.     end
  262.     return n
  263.   end
  264. end


  265. #==============================================================================
  266. # ■ Window_BattleResult
  267. #------------------------------------------------------------------------------
  268. #  战斗结束时、显示获得的 EXP 及金钱的窗口。
  269. #==============================================================================

  270. class Window_BattleResult < Window_Base
  271.   #--------------------------------------------------------------------------
  272.   # ● 初始化对像
  273.   #     exp       : EXP
  274.   #     gold      : 金钱
  275.   #     treasures : 宝物
  276.   #--------------------------------------------------------------------------
  277.   def initialize(exp, gold, treasures)
  278.     @exp = exp
  279.     @gold = gold
  280.     @treasures = treasures
  281.     super(0, 0, 640, 320)
  282.     self.contents = Bitmap.new(width - 32, height - 32)
  283.     self.contents.font.size = 15
  284.     self.back_opacity = 160
  285.     self.visible = false
  286.     refresh
  287.   end
  288.   #--------------------------------------------------------------------------
  289.   # ● 刷新
  290.   #--------------------------------------------------------------------------
  291.   def refresh
  292.     self.contents.clear
  293.     #★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  294.    
  295.     #==========================================
  296.     # 简单的示例  此处需要自定义
  297.     #==========================================
  298.     sy = 0
  299.     self.contents.draw_text(0, sy*32, self.width-40, 15, "获得了#{@gold}金币")
  300.     sy += 1
  301.     for id in @exp.keys
  302.       self.contents.draw_text(0, sy*32, self.width-40, 15, $game_actors[id].name+"获得了#{@exp[id]}点经验")
  303.       sy += 1
  304.     end
  305.     for i in @treasures
  306.       self.contents.draw_text(0, sy*32, self.width-40, 15, "获得了#{i[1]}个"+i[0].name)
  307.       sy += 1
  308.     end
  309.    
  310.     #★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
  311.   end
  312. end


  313. #==============================================================================
  314. # ■ Scene_Battle
  315. #------------------------------------------------------------------------------
  316. #  处理战斗画面的类。
  317. #==============================================================================

  318. class Scene_Battle
  319.   def battleresult
  320.     # 初始化
  321.     exp = {}
  322.     gold = 0
  323.     treasures = []
  324.     for enemy in $game_troop.enemies
  325.       unless enemy.hidden
  326.         # 获得经验
  327.         for actor in $game_party.actors
  328.           gain_exp = Integer(enemy.exp + (enemy.level - actor.level) * (enemy.exp * Enemy::Exp[enemy.id]))
  329.           if gain_exp > 0
  330.             actor.exp += gain_exp
  331.             exp[actor.id] = gain_exp
  332.           end
  333.         end
  334.         # 获得金币
  335.         gold += enemy.gold
  336.         $game_party.gain_gold(enemy.gold)
  337.         # 随机宝物
  338.         if Enemy::Item[enemy.id] != nil
  339.           for item in Enemy::Item[enemy.id]
  340.             next unless item.is_a?(Array)
  341.             if rand(100) < item[2]
  342.               case item[0]
  343.               when 0
  344.                 treasures << [$data_items[item[1]], item[3] == nil ? 1 : item[3]]
  345.               when 1
  346.                 treasures << [$data_weapons[item[1]], item[3] == nil ? 1 : item[3]]
  347.               when 2
  348.                 treasures << [$data_armors[item[1]], item[3] == nil ? 1 : item[3]]
  349.               end
  350.             end
  351.           end
  352.           #抽出
  353.           while treasures.size > Enemy::Item[enemy.id][0]
  354.             treasures.delete_at(rand(treasures.size))
  355.           end
  356.         end
  357.       end
  358.     end
  359.     # 获得物品
  360.     for item in treasures
  361.       case item[0]
  362.       when RPG::Item
  363.         $game_party.gain_item(item[0].id, item[1])
  364.       when RPG::Weapon
  365.         $game_party.gain_weapon(item[0].id, item[1])
  366.       when RPG::Armor
  367.         $game_party.gain_armor(item[0].id, item[1])
  368.       end
  369.     end
  370.     return [exp, gold, treasures]
  371.   end
  372.   #--------------------------------------------------------------------------
  373.   # ● 开始结束战斗回合
  374.   #--------------------------------------------------------------------------
  375.   def start_phase5
  376.     # 转移到回合 5
  377.     @phase = 5
  378.     # 演奏战斗结束 ME
  379.     $game_system.me_play($game_system.battle_end_me)
  380.     # 还原为战斗开始前的 BGM
  381.     $game_system.bgm_play($game_temp.map_bgm)
  382.     # 生成战斗结果窗口
  383.     @result_window = Window_BattleResult.new(*battleresult)
  384.     # 设置等待计数
  385.     @phase5_wait_count = 100
  386.   end
  387. end
复制代码

敌人能力设置.rar

230.21 KB, 下载次数: 38

评分

参与人数 1梦石 +1 收起 理由
RyanBern + 1 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3591
在线时间
1890 小时
注册时间
2010-6-19
帖子
1211
4
 楼主| 发表于 2014-8-27 14:04:53 | 只看该作者
恐惧剑刃 发表于 2014-8-27 13:11
大概如此

貌似脚本怎么用,怎么设置敌人。能不能在弄个像下面这样的敌人类型设置
  1.   # 敌人类型设定

  2.   ENEMY_TYPE = {

  3.    

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

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

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

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

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

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

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

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

  12.       

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

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

  15.   }

  16.    

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

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

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

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

  21.   ENEMY_TYPE_ATK = [1,   2,    0.75, 0.5,  0.6,  1.1,  4]  # 攻击力

  22.   ENEMY_TYPE_DEF = [1,   1.25, 0.5,  0.75, 0.7,  3,    4]  # 防御力

  23.   ENEMY_TYPE_SPI = [1,   0.1,  2,    1.75, 1.5,  0,    2]  # 精神力

  24.   ENEMY_TYPE_AGI = [1,   1.2,  2,    0.8,  1.1,  0.2,  2]  # 敏捷

  25.   ENEMY_TYPE_HIT = [1,   1.3,  1.1,  1.5,  1.8,  1 ]       # 命中率

  26.   ENEMY_TYPE_EVA = [1,   1,    1,    0.9,  1.1,  0 ]       # 闪躲率

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

复制代码

点评

为了防错,抱证设置了内容才会执行(不设置同默认)。一般情况下的确不需要设置。。但是如果需要制作一个“木桩”的练习敌人,就要设置  发表于 2014-8-28 06:58
删除在场景中定义的全部内容,再随便找个多掉宝脚本(删除可以删除的设置部分经验、掉宝)就可以了  发表于 2014-8-28 06:54
结束的时候,经验值能不能弄成默认那样显示,队员获得的经验值相同好了。还有这脚本是不是什么都不用设置,直接敌人数据库调属性就行了?  发表于 2014-8-27 16:27
已经编辑了楼上  发表于 2014-8-27 15:35
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-6 02:57

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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