Project1

标题: 【已经解决】怎么设置指定敌群为精英怪 [打印本页]

作者: devil033    时间: 2017-1-1 12:43
标题: 【已经解决】怎么设置指定敌群为精英怪
本帖最后由 devil033 于 2017-1-1 14:31 编辑

以下脚本是精英怪脚本,也就是随机把野怪或BOSS生成精英怪(提升属性)
但我想指定只有BOSS是精英怪(BOSS是指定的敌群)
野怪和BOSS是同一种怪,只是BOSS是指定的敌群,这要怎么改?谢谢

RUBY 代码复制
  1. #==============================================================================
  2. =begin
  3. # 精英敌人,作者:66RPG的tan12345
  4. # 功能:遇敌时,敌人有一定几率(可设定)变成精英,精英怪比普通怪属性有加成(可修改),
  5. #       当然了,精英怪的经验、金钱、掉落率也同样有加成。
  6. #       也可以设定指定的敌人不会变成精英(比如BOSS)
  7. #
  8. # 使用方法:将脚本插入到main上
  9. #
  10. =end
  11.  
  12. module Tan_by_enemy_set
  13.   #精英怪出现几率,30代表30%
  14.   Tan_enemy_by = 45
  15.   #精英怪属性加成比例(同时也是经验、金钱、掉落率加成比例),1.3代表属性是普通怪的1.3倍
  16.   Tan_enemy_by_num = 1.8
  17.   #不会成为精英的敌人
  18.   NO_BY_ENEMY = [474,475]#表示2号和3号敌人不会变成精英,适合设定BOSS
  19. end
  20. class Game_Enemy < Game_Battler
  21.  
  22.   attr_reader   :is_by  # 是否精英
  23.  
  24.   #--------------------------------------------------------------------------
  25.   # ● 精英初始化
  26.   #--------------------------------------------------------------------------
  27.   def init_by_enemy
  28.     @is_by = false
  29.     @is_by = true if rand(100) <= Tan_by_enemy_set::Tan_enemy_by && !Tan_by_enemy_set::NO_BY_ENEMY.include?(enemy_id)
  30.     @original_name = @original_name + "(猛)" if @is_by == true
  31.     @hp = mhp
  32.     @mp = mmp
  33.   end
  34.   #--------------------------------------------------------------------------
  35.   # ● 是否精英
  36.   #--------------------------------------------------------------------------
  37.   def is_by?
  38.     return true if @is_by
  39.     return false
  40.   end
  41.  
  42.   #--------------------------------------------------------------------------
  43.   # ● 初始化对象
  44.   #--------------------------------------------------------------------------
  45.   alias tan_by_enemy_initialize initialize
  46.   def initialize(index, enemy_id)
  47.     tan_by_enemy_initialize(index, enemy_id)
  48.     init_by_enemy
  49.   end
  50.   #--------------------------------------------------------------------------
  51.   # ● 获取普通能力的基础值
  52.   #--------------------------------------------------------------------------
  53.   alias tan_by_enemy_param_base param_base
  54.   def param_base(param_id)
  55.     v = tan_by_enemy_param_base(param_id)
  56.     v *= Tan_by_enemy_set::Tan_enemy_by_num if is_by?
  57.     return v.to_i
  58.   end
  59.   #--------------------------------------------------------------------------
  60.   # ● 获取经验值
  61.   #--------------------------------------------------------------------------
  62.   alias tan_by_enemy_exp exp
  63.   def exp
  64.     v = tan_by_enemy_exp
  65.     v *= Tan_by_enemy_set::Tan_enemy_by_num if is_by?
  66.     return v.to_i
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # ● 获取金钱
  70.   #--------------------------------------------------------------------------
  71.   alias tan_by_enemy_gold gold
  72.   def gold
  73.     v = tan_by_enemy_gold
  74.     v *= Tan_by_enemy_set::Tan_enemy_by_num if is_by?
  75.     return v.to_i
  76.   end
  77.   #--------------------------------------------------------------------------
  78.   # ● 获取物品掉率的倍率
  79.   #--------------------------------------------------------------------------
  80.   alias tan_by_enemy_drop_item_rate drop_item_rate
  81.   def drop_item_rate
  82.     v = tan_by_enemy_drop_item_rate
  83.     v *= Tan_by_enemy_set::Tan_enemy_by_num if is_by?
  84.     return v
  85.   end
  86. end

作者: RaidenInfinity    时间: 2017-1-1 13:19
本帖最后由 RaidenInfinity 于 2017-1-1 14:39 编辑

首先把
RUBY 代码复制
  1. #--------------------------------------------------------------------------
  2.   # ● 初始化对象
  3.   #--------------------------------------------------------------------------
  4.   alias tan_by_enemy_initialize initialize
  5.   def initialize(index, enemy_id)
  6.     tan_by_enemy_initialize(index, enemy_id)
  7.     init_by_enemy
  8.   end

删掉
这是因为要把精英怪生成的判定从敌人的初始化转移到由敌群生成机制控制

然后贴上这个插件脚本:
RUBY 代码复制
  1. #常量定义
  2. module Tan_by_enemy_set
  3.         ELITE_TROOPS = [1,2,3,4,5] #设置生成精英怪的敌群ID
  4. end
  5.  
  6. class Game_Troop < Game_Unit
  7.  
  8. #敌群生成机制
  9.   def setup(troop_id)
  10.     clear
  11.     @troop_id = troop_id
  12.     @enemies = []
  13.     troop.members.each do |member|
  14.       next unless $data_enemies[member.enemy_id]
  15.       enemy = Game_Enemy.new(@enemies.size, member.enemy_id)
  16.       enemy.init_by_enemy if Tan_by_enemy_set::ELITE_TROOPS.include?(troop_id) #判定是否BOSS敌群,然后尝试生成精英怪
  17.       enemy.hide if member.hidden
  18.       enemy.screen_x = member.x
  19.       enemy.screen_y = member.y
  20.       @enemies.push(enemy)
  21.     end
  22.     init_screen_tone
  23.     make_unique_names
  24.   end
  25.  
  26. end

基本上绿字注释已经说明了一切。
作者: devil033    时间: 2017-1-1 13:50
@RaidenInfinity
好像并没有用,设置精英怪机率为100,仍然出的是普通的怪
作者: devil033    时间: 2017-1-1 14:08
本帖最后由 devil033 于 2017-1-1 14:10 编辑

@RaidenInfinity

第一次没注意看要以插件方式插入,能正常游戏,但怪还是普通怪
第二次以插件插入

会报错

QQ图片20170101140944.png (8.94 KB, 下载次数: 24)

QQ图片20170101140944.png

作者: RaidenInfinity    时间: 2017-1-1 14:17
enemy.init_by_enemy if Tan_by_enemy_set::ELITE_TROOPS.include?(troop_id)

一时忘了常量要用冒号来解析orz
作者: devil033    时间: 2017-1-1 14:30
@RaidenInfinity
好了,完美解决,谢谢版主




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