查看: 2283|回复: 10

[已经解决] 【已经解决】怎么设置指定敌群为精英怪

[复制链接]
梦石
0
星屑
7650
在线时间
1162 小时
注册时间
2016-9-10
回帖
145

开拓者

发表于 2017-1-1 12:43:24 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 devil033 于 2017-1-1 14:31 编辑

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

[pre lang="ruby"]#==============================================================================
=begin
# 精英敌人,作者:66RPG的tan12345
# 功能:遇敌时,敌人有一定几率(可设定)变成精英,精英怪比普通怪属性有加成(可修改),
#       当然了,精英怪的经验、金钱、掉落率也同样有加成。
#       也可以设定指定的敌人不会变成精英(比如BOSS)
#
# 使用方法:将脚本插入到main上
#
=end

module Tan_by_enemy_set
  #精英怪出现几率,30代表30%
  Tan_enemy_by = 45
  #精英怪属性加成比例(同时也是经验、金钱、掉落率加成比例),1.3代表属性是普通怪的1.3倍
  Tan_enemy_by_num = 1.8
  #不会成为精英的敌人
  NO_BY_ENEMY = [474,475]#表示2号和3号敌人不会变成精英,适合设定BOSS
end
class Game_Enemy < Game_Battler
  
  attr_reader   :is_by  # 是否精英
  
  #--------------------------------------------------------------------------
  # ● 精英初始化
  #--------------------------------------------------------------------------
  def init_by_enemy
    @is_by = false
    @is_by = true if rand(100) <= Tan_by_enemy_set::Tan_enemy_by && !Tan_by_enemy_set::NO_BY_ENEMY.include?(enemy_id)
    @original_name = @original_name + "(猛)" if @is_by == true
    @hp = mhp
    @mp = mmp
  end
  #--------------------------------------------------------------------------
  # ● 是否精英
  #--------------------------------------------------------------------------
  def is_by?
    return true if @is_by
    return false
  end
  
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  alias tan_by_enemy_initialize initialize
  def initialize(index, enemy_id)
    tan_by_enemy_initialize(index, enemy_id)
    init_by_enemy
  end
  #--------------------------------------------------------------------------
  # ● 获取普通能力的基础值
  #--------------------------------------------------------------------------
  alias tan_by_enemy_param_base param_base
  def param_base(param_id)
    v = tan_by_enemy_param_base(param_id)
    v *= Tan_by_enemy_set::Tan_enemy_by_num if is_by?
    return v.to_i
  end
  #--------------------------------------------------------------------------
  # ● 获取经验值
  #--------------------------------------------------------------------------
  alias tan_by_enemy_exp exp
  def exp
    v = tan_by_enemy_exp
    v *= Tan_by_enemy_set::Tan_enemy_by_num if is_by?
    return v.to_i
  end
  #--------------------------------------------------------------------------
  # ● 获取金钱
  #--------------------------------------------------------------------------
  alias tan_by_enemy_gold gold
  def gold
    v = tan_by_enemy_gold
    v *= Tan_by_enemy_set::Tan_enemy_by_num if is_by?
    return v.to_i
  end
  #--------------------------------------------------------------------------
  # ● 获取物品掉率的倍率
  #--------------------------------------------------------------------------
  alias tan_by_enemy_drop_item_rate drop_item_rate
  def drop_item_rate
    v = tan_by_enemy_drop_item_rate
    v *= Tan_by_enemy_set::Tan_enemy_by_num if is_by?
    return v
  end
end [/pre]

评分

参与人数 1星屑 +50 收起 理由
VIPArcher + 50 结帖

查看全部评分

梦石
0
星屑
6891
在线时间
7027 小时
注册时间
2013-11-2
回帖
1263

开拓者剧作品鉴家

发表于 2017-1-1 13:19:28 | 显示全部楼层
本帖最后由 RaidenInfinity 于 2017-1-1 14:39 编辑

首先把
[pre lang="ruby"]
  #--------------------------------------------------------------------------
  # ● 初始化对象
  #--------------------------------------------------------------------------
  alias tan_by_enemy_initialize initialize
  def initialize(index, enemy_id)
    tan_by_enemy_initialize(index, enemy_id)
    init_by_enemy
  end
[/pre]
删掉
这是因为要把精英怪生成的判定从敌人的初始化转移到由敌群生成机制控制

然后贴上这个插件脚本:
[pre lang="ruby"]
#常量定义
module Tan_by_enemy_set
        ELITE_TROOPS = [1,2,3,4,5] #设置生成精英怪的敌群ID
end

class Game_Troop < Game_Unit

#敌群生成机制
  def setup(troop_id)
    clear
    @troop_id = troop_id
    @enemies = []
    troop.members.each do |member|
      next unless $data_enemies[member.enemy_id]
      enemy = Game_Enemy.new(@enemies.size, member.enemy_id)
      enemy.init_by_enemy if Tan_by_enemy_set::ELITE_TROOPS.include?(troop_id) #判定是否BOSS敌群,然后尝试生成精英怪
      enemy.hide if member.hidden
      enemy.screen_x = member.x
      enemy.screen_y = member.y
      @enemies.push(enemy)
    end
    init_screen_tone
    make_unique_names
  end
  
end  
[/pre]
基本上绿字注释已经说明了一切。

点评

当然你需要判定的是:角色装备的武器ID (!user.weapons.select{|w| [装有武器ID的数组].include?(w.id)}.empty?) 还有 敌人是否精英 self.is_by?  发表于 2017-1-4 21:50
不过建议在Game_Enemy里面增加make_damage_value来覆盖父类Game_Battler的同名方法。这样可以省去攻击者是否玩家角色/被攻击者是否敌人的判定,少很多乱子。  发表于 2017-1-4 21:49
如果你用楼主的这个脚本的话,使用敌人的is_by属性来判定是否精英。至于额外伤害的方法,请在Game_Battler的make_damage_value里面作判定。  发表于 2017-1-4 21:44
是不是也可以加入对精英额外伤害的武器?  发表于 2017-1-4 19:02

评分

参与人数 1梦石 +1 收起 理由
VIPArcher + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
7650
在线时间
1162 小时
注册时间
2016-9-10
回帖
145

开拓者

 楼主| 发表于 2017-1-1 13:50:43 | 显示全部楼层
@RaidenInfinity
好像并没有用,设置精英怪机率为100,仍然出的是普通的怪

点评

请确保脚本安装正确(新插件必须装在下面),还有要改的数值都需要设置正确。  发表于 2017-1-1 13:56
回复

使用道具 举报

梦石
0
星屑
7650
在线时间
1162 小时
注册时间
2016-9-10
回帖
145

开拓者

 楼主| 发表于 2017-1-1 14:08:37 | 显示全部楼层
本帖最后由 devil033 于 2017-1-1 14:10 编辑

@RaidenInfinity
喔
第一次没注意看要以插件方式插入,能正常游戏,但怪还是普通怪
第二次以插件插入
QQ图片20170101140442.png
会报错
QQ图片20170101140944.png
回复

使用道具 举报

梦石
0
星屑
6891
在线时间
7027 小时
注册时间
2013-11-2
回帖
1263

开拓者剧作品鉴家

发表于 2017-1-1 14:17:03 | 显示全部楼层
enemy.init_by_enemy if Tan_by_enemy_set::ELITE_TROOPS.include?(troop_id)

一时忘了常量要用冒号来解析orz
回复

使用道具 举报

梦石
0
星屑
7650
在线时间
1162 小时
注册时间
2016-9-10
回帖
145

开拓者

 楼主| 发表于 2017-1-1 14:30:06 | 显示全部楼层
@RaidenInfinity
好了,完美解决,谢谢版主
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部