| 
 
| 赞 | 0 |  
| VIP | 25 |  
| 好人卡 | 0 |  
| 积分 | 1 |  
| 经验 | 126953 |  
| 最后登录 | 2020-5-5 |  
| 在线时间 | 39 小时 |  
 Lv1.梦旅人 粉蜘蛛秀秀 
	梦石0 星屑76 在线时间39 小时注册时间2007-6-4帖子384  
 | 
| 
自制敌人数据库文件 + 敌人等级随我方变化
x
加入我们,或者,欢迎回来。您需要 登录 才可以下载或查看,没有帐号?注册会员  
 作者:秀秀
 
 由于原敌人数据库没有等级和等级能力变化曲线
 所以自己制作了个敌人数据库
 里面只定义了等级和能力变化曲线
 如果不满足需求,比如还需要定义敌人经验啊 经验曲线 职业 等等
 自行添加即可
 
 由于公开了 数据库结构 制作 读取 全过程
 是需要比较坚实的基础才能理解
 所以小设了一点点vip{/wx}
 
 也希望留给大家研究
 
 最后说下。。。此脚本还赠送了 敌人等级随我方变化
 
 ms 这个系统比较针对某口袋妖怪。。{/cy}
 
 请别见怪...其实自己闲的无聊 才想写{/cy}
 
 有bug请留言~
 
 具体用法见脚本开始的说明
 
 ------------下载范例--------------------------------------------------------
 http://rpg.blue/upload_program/f ... 变化_95652411.rar
 ----------------------------------------------------------------------------
 
 脚本部分
 
 
 =begin
 
 自制敌人数据库 + 敌人等级随我方变化
 
 作者:秀秀
 
 用法:1.数据库设置
 见开始的几个常量
 HP_RATE    表示敌人随等级HP(以下类推)增长倍率
 SP_RATE    公式 maxhp * (HP_RATE) ** level
 STR_RATE   可以自行找到脚本的地方修改公式
 DEX_RATE
 AGI_RATE
 INT_RATE
 
 2.数据库制作:
 (默认已经做好了,要自己做只需要在第一步设置好,
 再制作一遍会覆盖掉,或者删除掉已经做好的文件)
 使用函数 Enemy_data.create_data 来制作
 会产生一个目录SELF_DATA
 里面有个Enemy_data.rxdata文件
 运行时候检测到这个文件会自动读取到
 全局变量$enemy_data
 
 3.数据库使用
 比如要设置1号敌人的等级为30
 $game_system.enemies_level.levels[1] = 30
 要获取10号敌人35级时候的str
 $enemy_data[10].str_list[35]
 以下数据使用方法相同 不说了
 hp_list
 sp_list
 dex_list
 agi_list
 int_list
 4.赠送敌人随我方平均等级变化(默认为true)
 等级浮动范围见脚本开始的常量 LEVEL_RANGE
 开始的常量  Enemy_data.with_player_level(true) 则为变化
 Enemy_data.with_player_level(false) 则不变化
 不随玩家等级变化的话 游戏中需完家自己改变敌人等级 来变化
 改变方法见上 = =
 =end
 
 
 
 module Enemy_data
 
 # 等级变化范围 (-4..4)
 LEVEL_RANGE = rand(5) - rand(5)
 
 # 敌人随等级能力增长倍率
 HP_RATE = 1.1
 SP_RATE = 1.1
 STR_RATE = 1.1
 DEX_RATE = 1.1
 AGI_RATE = 1.1
 INT_RATE = 1.1
 
 #最大等级
 MAX_LEVEL = 99
 
 @@with_player_level = true
 
 def self.with_player_level(tf)
 @@with_player_level = tf
 return
 end
 
 def self.return_wpl
 return @@with_player_level
 end
 
 def self.create_data
 Dir.mkdir("SELF_DATA") unless File.exists?("SELF_DATA")
 File.open("SELF_DATA/Enemy_data.rxdata","wb")
 datas = {}
 for i in 1...$data_enemies.size
 datas = (Pm_Enemy.new)
 for j in 1..(MAX_LEVEL)
 datas.hp_list[j] = (
 $data_enemies.maxhp * (HP_RATE) ** j).to_i
 end
 for j in 1..(MAX_LEVEL)
 datas.sp_list[j] = (
 $data_enemies.maxsp * (SP_RATE) ** j).to_i
 end
 for j in 1..(MAX_LEVEL)
 datas.str_list[j] = (
 $data_enemies.str * (STR_RATE) ** j).to_i
 end
 for j in 1..(MAX_LEVEL)
 datas.dex_list[j] = (
 $data_enemies.dex * (DEX_RATE) ** j).to_i
 end
 for j in 1..(MAX_LEVEL)
 datas.agi_list[j] = (
 $data_enemies.agi * (AGI_RATE) ** j).to_i
 end
 for j in 1..(MAX_LEVEL)
 datas.int_list[j] = (
 $data_enemies.int * (INT_RATE) ** j).to_i
 end
 end
 save_data(datas,"SELF_DATA/Enemy_data.rxdata")
 p "数据库制作成功"
 exit
 end
 
 
 class Pm_Enemy
 attr_accessor     :hp_list
 attr_accessor     :sp_list
 attr_accessor     :str_list
 attr_accessor     :dex_list
 attr_accessor     :agi_list
 attr_accessor     :int_list
 attr_accessor     :level
 def initialize
 @hp_list = {}
 @sp_list = {}
 @str_list = {}
 @dex_list = {}
 @agi_list = {}
 @int_list = {}
 @level = 1
 end
 end
 end
 
 class Game_Party
 #--------------------------------------------------------------------------
 # ● 获取平均等级
 #--------------------------------------------------------------------------
 def avg_level
 # 同伴人数为 0 的情况下
 if @actors.size == 0
 return 0
 end
 # 初始化本地变量 level
 level = 0
 # 求得同伴的最大等级
 for actor in @actors
 level += actor.level
 end
 return Integer(level/@actors.size)
 end
 end
 
 
 class Enemies_Level
 attr_accessor   :levels
 def initialize
 @levels = {}
 create_enemy_level
 end
 def create_enemy_level
 for i in 1...$data_enemies.size
 @levels = 1
 end
 end
 end
 
 
 class Game_System
 attr_accessor     :enemies_level
 alias oir_initialize initialize
 def initialize
 oir_initialize
 @enemies_level = Enemies_Level.new
 end
 end
 
 class Game_Enemy < Game_Battler
 
 def level=(level)
 @level = [[level, Enemy_data::MAX_LEVEL].min, 1].max
 end
 
 def base_maxhp
 return $enemy_data[@enemy_id].hp_list[
 Enemy_data.return_wpl ? (Enemy_data::LEVEL_RANGE +
 $game_party.avg_level) : (
 $game_system.enemies_level.levels[@enemy_id])]
 end
 
 def base_maxsp
 return $enemy_data[id].sp_list[
 Enemy_data.return_wpl ? (Enemy_data::LEVEL_RANGE +
 $game_party.avg_level) : (
 $game_system.enemies_level.levels[@enemy_id])]
 end
 
 def base_str
 return $enemy_data[id].str_list[
 Enemy_data.return_wpl ? (Enemy_data::LEVEL_RANGE +
 $game_party.avg_level) : (
 $game_system.enemies_level.levels[@enemy_id])]
 end
 
 def base_dex
 return $enemy_data[id].dex_list[
 Enemy_data.return_wpl ? (Enemy_data::LEVEL_RANGE +
 $game_party.avg_level) : (
 $game_system.enemies_level.levels[@enemy_id])]
 end
 
 def base_agi
 return $enemy_data[id].agi_list[
 Enemy_data.return_wpl ? (Enemy_data::LEVEL_RANGE +
 $game_party.avg_level) : (
 $game_system.enemies_level.levels[@enemy_id])]
 end
 
 def base_int
 return $enemy_data[id].int_list[
 Enemy_data.return_wpl ? (Enemy_data::LEVEL_RANGE +
 $game_party.avg_level) : (
 $game_system.enemies_level.levels[@enemy_id])]
 end
 end
 
 $enemy_data = load_data("SELF_DATA/Enemy_data.rxdata") if File.exists?(
 "SELF_DATA/Enemy_data.rxdata")
 
 | 
 |