------------下载范例---------------------------------------------------------------------------------------------------
http://bbs.66rpg.com/upload_program/files/自制敌人数据库 + 敌人等级随我方变化_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[i] = (Pm_Enemy.new)
for j in 1..(MAX_LEVEL)
datas[i].hp_list[j] = (
$data_enemies[i].maxhp * (HP_RATE) ** j).to_i
end
for j in 1..(MAX_LEVEL)
datas[i].sp_list[j] = (
$data_enemies[i].maxsp * (SP_RATE) ** j).to_i
end
for j in 1..(MAX_LEVEL)
datas[i].str_list[j] = (
$data_enemies[i].str * (STR_RATE) ** j).to_i
end
for j in 1..(MAX_LEVEL)
datas[i].dex_list[j] = (
$data_enemies[i].dex * (DEX_RATE) ** j).to_i
end
for j in 1..(MAX_LEVEL)
datas[i].agi_list[j] = (
$data_enemies[i].agi * (AGI_RATE) ** j).to_i
end
for j in 1..(MAX_LEVEL)
datas[i].int_list[j] = (
$data_enemies[i].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[i] = 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")