Project1
标题:
敌人能力值设置
[打印本页]
作者:
黑米馒头
时间:
2014-8-24 19:17
标题:
敌人能力值设置
这个是VX的敌人能力值设置,来个高手帮改成支持XP的
=begin
================================================================================
使用方法:
1. 敌人等级直接设定
在敌人的备注栏里打上
[等级 n]
例如:[等级 25]
n 为该敌人等级。(「等级」二字简繁体皆可,也可以打成英文的 level)
2. 敌人等级与角色队伍平均等级相同
在敌人的备注栏里打上
[主角等级]
则自动依队伍平均等级计算该敌人等级
(「主角等级」四字可以为简繁体,或是英文的 player_level)
3. 敌人等级为角色队伍平均等级的差距
在敌人的备注栏里打上
[强度 X]
例如:[强度 很弱]
X 为下面的哈希表所设置的强度,可以自己修改,
(「强度」二字可以为简繁体,或是英文的 strength)
强度标签单独使用时,是使用主角队伍平均等级计算
若是与等级标签同用,则是以该等级计算
详细看下面的范例设定。
4. 敌人类型
(其实是参考了小幽的战斗AI脚本,可以配合该脚本使用
在战斗AI里设定好的类型,这里就不用再设定一次了
如果读取到了战斗AI脚本的敌人类型,就会忽略数据库里的设定。)
在敌人的备注栏里打上
[类型 X]
例如:[类型 巫师]
X 为下面的哈希表所设置的强度,可以自己修改,
(「类型」二字可以为简繁体,或是英文的 type)
5. 经验值系数设定
EXPERIENCE 是设定一般敌人经验值
0.1 表示所得经验值为角色队伍在该等级所需升级的经验值数的十分之一
BOSS_EXP 是设定BOSS敌人经验值
3 表示计算经验值後再加值计算的经验值
6. 哈希表设置部分说明
ENEMY_TYPE 哈希表
字符部分为类型,可以修改,数字部分为类型代号,不要修改
STRENGTH 哈希表
字符部分为强度,数字部分为与主角平均等级差
例如:"很弱" => -3
表示当敌人强度设为「很弱」时,该敌人等级为队伍等级-3
例如:
1 角色 等级:3
2 角色 等级:4
3 角色 等级:8
4 角色 等级:6
怪物1设为 [强度 弱]
怪物2设为 [很强 很强] [等级 1]
那麽怪物1等级就是:
(3+4+8+6)/4 = 5.25 <= 取整为5
5 - 2 = 3 <= 怪物等级为3
那麽怪物2等级就是:
1 + 3 = 4 <= 怪物等级为4
要注意的是,当等级为0或以下时则自动修正为1
若无法在哈希表中找到相对应的key,就会将该敌人设置为与主角队伍平均等级相同
7. 掉落物品
除了在备注中设置了 [不掉落物品] 的敌人, 其他敌人会根据其等级自动计算
不会掉落的物品:
1. 在脚本中设置为不掉落物品的物品(参看「物品自动计算设置」脚本)
2. 价格为0的物品
3. 非消耗品不会掉落
三者只要满足一项就不会掉落
敌人会掉落的物品为:敌人等级与物品等级差在2以下
物品设置请看「物品自动计算设置」脚本内容
配合使用方法:
一般敌人建议用第一种方法,设立(伪)绝对等级,主角成长後依然为弱怪的敌人。
头目敌人可以直接指定其类型为 BOSS,但是其能力值增值方面就比较死板,
若是想做成巫师型的血低魔高的BOSS,可以用下面的方法
用第二、三种方法,设立相对等级,主角成长也会跟着成长的敌人。
设立为「弱」时,虽然对主角来说依然是弱怪,
但是会随着主角成长,HP、MP、经验值会随着增加,
可以用来做练级用的怪。
调用敌人图鉴方式:
在调用前先执行脚本 make_enemy_database
只要 WRITE_2_DATABASE 设为 false
就不会覆写数据库的资料,而是在游戏中调用而已。
不过说明方面就会有点问题了
覆写数据库方法:
将WRITE_2_DATABASE 设为 true
随意在地图上用一个事件执行 make_enemy_database
再回到脚本将WRITE_2_DATABASE 设为 false(以免在运行中误操作)
=end
# 设置部分:
module Auto_Enemy
# 是否写入数据库
WRITE_2_DATABASE = false
# 是否自動設置屬性有效度
AUTO_SET_ELEMENT = true
# 是否自動設定狀態抵禦度
AUTO_SET_STATES = true
# 经验值计算系数
EXPERIENCE = 0.1
BOSS_EXP = 3
STRENGTH = {
"很弱" => -3,
"弱" => -2,
"同" => 1,
"强" => 2,
"很强" => 3,
"default" => 0 # 这行不要修改,除错用的
}
# 敌人类型设定
ENEMY_TYPE = {
"普通" => 0, # 普通敌人,能力值依队伍平均计算
"武士" => 1, # 武士型敌人,物理攻击等偏高
"法师" => 2, # 法师型敌人,魔法攻击偏高
"牧师" => 3, # 牧师型敌人,魔力值偏高
"巫师" => 4, # 巫师型敌人,命中率偏高
"挡箭牌" => 5, # 挡箭牌型敌人,血高肉厚
"BOSS" => 6, # BOSS型敌人,各项能力值都增强
# 以上的数值可以在下面的数组变更
"随机" => -1, # 随机,看看它的运气,加值在 1~1.99
"default"=> 0 # 这行不要修改,除错用,默认为普通
}
# 敌人能力值加值参数,对应上放哈希表的敌人类型。不会改的话就别改了。
# 普通 武士 法师 牧师 巫师 档箭 BOSS
ENEMY_TYPE_HP = [1, 1.5, 0.75, 0.6, 0.8, 2, 4] # 体力最大值
ENEMY_TYPE_MP = [1, 0.75, 1.5, 3, 1.4, 1.1, 4] # 魔力最大值
ENEMY_TYPE_ATK = [1, 2, 0.75, 0.5, 0.6, 1.1, 4] # 攻击力
ENEMY_TYPE_DEF = [1, 1.25, 0.5, 0.75, 0.7, 3, 4] # 防御力
ENEMY_TYPE_SPI = [1, 0.1, 2, 1.75, 1.5, 0, 2] # 精神力
ENEMY_TYPE_AGI = [1, 1.2, 2, 0.8, 1.1, 0.2, 2] # 敏捷
ENEMY_TYPE_HIT = [1, 1.3, 1.1, 1.5, 1.8, 1 ] # 命中率
ENEMY_TYPE_EVA = [1, 1, 1, 0.9, 1.1, 0 ] # 闪躲率
# BOSS的命中率和闪躲率为默认最高的95%
end
class Game_Party
def avg_number(number, level=nil)
average = 0
for i in @actors
actor = level ? $data_actors[i] : $game_actors[i]
case number
when "level"
average += $game_actors[i].level
when "exp"
average += $game_actors[i].next_exp_s
when "hp"
if level
average += actor.parameters[0, level]
else
average += actor.maxhp
end
when "mp"
if level
average += actor.parameters[1, level]
else
average += actor.maxmp
end
when "atk"
if level
average += actor.parameters[2, level]
else
average += actor.atk
end
when "def"
if level
average += actor.parameters[3, level]
else
average += actor.def
end
when "spi"
if level
average += actor.parameters[4, level]
else
average += actor.spi
end
when "agi"
if level
average += actor.parameters[5, level]
else
average += actor.agi
end
when "hit"
average += $game_actors[i].hit
when "eva"
average += $game_actors[i].eva
end
end
average /= members.size
return average
end
# 獲取平均等級
def avg_level
return avg_number("level")
end
# 獲取平均升級經驗
def avg_exp_needed
return avg_number("exp")
end
def avg_hp_max(level=nil)
return avg_number("hp", level)
end
def avg_mp_max(level=nil)
return avg_number("mp", level)
end
def avg_atk(level=nil)
return avg_number("atk", level)
end
def avg_def(level=nil)
return avg_number("def", level)
end
def avg_spi(level=nil)
return avg_number("spi", level)
end
def avg_agi(level=nil)
return avg_number("agi", level)
end
def avg_hit
return avg_number("hit")
end
def avg_eva
return avg_number("eva")
end
end
class RPG::Enemy
# 获取等级
def get_level
elevel = 0
self.note.split(/[\r\n]+/).each { |line|
if line =~ /\[(level|等級|等级) {1,2}\]/
a = line.split(/ /)[1]
elevel += a.to_i
elsif line =~ /\[player_level|主角等級|主角等级\]/
elevel += $game_party.avg_level
end
}
return elevel==0 ? nil : elevel
end
# 获取强度
def get_str
self.note.split(/[\r\n]+/).each { |line|
if line =~ /\[(strength|強度|强度) \w+\]/
a = line.split(/ /)[1]
d = ""
while ((c = a.slice!(/./m)) != nil)
d += c if c != "]"
end
return d
end
}
return "default"
end
def get_enemy_type
self.note.split(/[\r\n]+/).each { |line|
if line =~ /\[(type|類型|类型) \w+\]/
a = line.split(/ /)[1]
d = ""
while ((c = a.slice!(/./m)) != nil)
d += c if c != "]"
end
return d
end
}
return "default"
end
def drop_item?
self.note.split(/[\r\n]+/).each { |line|
return if !(line =~ /\[(no_drop|不掉落物品|不掉落物品)\]/)
}
end
# 计算等级
def level
if auto_level?
if auto_str?
return [get_level + str, 1].max
else
return get_level
end
elsif auto_str?
elevel = $game_party.avg_level + str
return [elevel, 1].max
end
end
def str
estr = Auto_Enemy::STRENGTH[get_str]
if estr != nil
return estr
else
return Auto_Enemy::STRENGTH["default"]
end
end
def type
if $enemies_class != nil
return $enemies_class[@enemy_id] if $enemies_class[@enemy_id]!=nil
end
return Auto_Enemy::ENEMY_TYPE[get_enemy_type]
end
def auto_level?
return get_level
end
def auto_str?
return get_str
end
def auto_setup?
return (auto_level? or auto_str?)
end
end
#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
# 处理敌人的类。本类在 Game_Troop 类 ($game_troop) 的 内部使用。
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● 获取基本体力最大值
#--------------------------------------------------------------------------
def base_maxhp
if enemy.auto_setup?
enemy_maxhp = $game_party.avg_hp_max(enemy.level)
if enemy.type == -1
enemy_maxhp *= (1 + rand(0))
else
enemy_maxhp *= Auto_Enemy::ENEMY_TYPE_HP[enemy.type]
end
enemy_maxhp = enemy_maxhp.to_i
enemy_maxhp += rand(10)
return enemy_maxhp
else
return enemy.maxhp
end
end
#--------------------------------------------------------------------------
# ● 获取基本魔力最大值
#--------------------------------------------------------------------------
def base_maxmp
if enemy.auto_setup?
enemy_maxmp = $game_party.avg_mp_max(enemy.level)
if enemy.type == -1
enemy_maxmp *= (1 + rand(0))
else
enemy_maxmp *= Auto_Enemy::ENEMY_TYPE_MP[enemy.type]
end
enemy_maxmp = enemy_maxmp.to_i
enemy_maxmp += rand(5)
return enemy_maxmp
else
return enemy.maxmp
end
end
#--------------------------------------------------------------------------
# ● 获取基本攻击力
#--------------------------------------------------------------------------
def base_atk
if enemy.auto_setup?
enemy_atk = $game_party.avg_atk(enemy.level)
if enemy.type == -1
enemy_atk *= (1 + rand(0))
else
enemy_atk *= Auto_Enemy::ENEMY_TYPE_ATK[enemy.type]
end
enemy_atk = enemy_atk.to_i
enemy_atk += rand(5)
return enemy_atk
else
return enemy.atk
end
end
#--------------------------------------------------------------------------
# ● 获取基本防御力
#--------------------------------------------------------------------------
def base_def
if enemy.auto_setup?
enemy_def = $game_party.avg_def(enemy.level)
if enemy.type == -1
enemy_def *= (1 + rand(0))
else
enemy_def *= Auto_Enemy::ENEMY_TYPE_DEF[enemy.type]
end
enemy_def = enemy_def.to_i
enemy_def += rand(5)
return enemy_def
else
return enemy.def
end
end
#--------------------------------------------------------------------------
# ● 获取基本精神力
#--------------------------------------------------------------------------
def base_spi
if enemy.auto_setup?
enemy_spi = $game_party.avg_spi(enemy.level)
if enemy.type == -1
enemy_spi *= (1 + rand(0))
else
enemy_spi *= Auto_Enemy::ENEMY_TYPE_SPI[enemy.type]
end
enemy_spi = enemy_spi.to_i
enemy_spi += rand(5)
return enemy_spi
else
return enemy.spi
end
end
#--------------------------------------------------------------------------
# ● 获取基本敏捷
#--------------------------------------------------------------------------
def base_agi
if enemy.auto_setup?
enemy_agi = $game_party.avg_agi(enemy.level)
if enemy.type == -1
enemy_agi *= (1 + rand(0))
else
enemy_agi *= Auto_Enemy::ENEMY_TYPE_AGI[enemy.type]
end
enemy_agi = enemy_agi.to_i
enemy_agi += rand(5)
return enemy_agi
else
return enemy.agi
end
end
#--------------------------------------------------------------------------
# ● 获取命中率
#--------------------------------------------------------------------------
def hit
if enemy.auto_setup?
enemy_hit = $game_party.avg_hit
if enemy.type == -1
enemy_hit *= (1 + rand(0))
elsif enemy.type == 6
enemy_hit = 95
else
enemy_hit *= Auto_Enemy::ENEMY_TYPE_HIT[enemy.type]
end
return [[enemy_hit.to_i, 95].min, 50].max
else
return enemy.hit
end
end
#--------------------------------------------------------------------------
# ● 获取闪躲率
#--------------------------------------------------------------------------
def eva
if enemy.auto_setup?
enemy_eva = $game_party.avg_eva
if enemy.type == -1
enemy_eva *= (1 + rand(0))
elsif enemy.type == 6
enemy_eva = 95
else
enemy_eva *= Auto_Enemy::ENEMY_TYPE_EVA[enemy.type]
end
return [[enemy_eva.to_i, 95].min, 0].max
else
return enemy.eva
end
end
#--------------------------------------------------------------------------
# ● 获取经验值
#--------------------------------------------------------------------------
def exp
if enemy.auto_setup?
exp = ($game_party.avg_exp_needed * Auto_Enemy::EXPERIENCE).to_i
exp =* enemy.type == 6 ? Auto_Enemy::BOSS_EXP : 1
exp += rand(10)
return exp
else
return enemy.exp
end
end
def drop_item1
if enemy.auto_setup? or drop_item?
get_drop_item
else
return @drop_item1
end
end
def drop_item2
if (enemy.auto_setup? or drop_item?) and drop_item1.kind != 0
get_drop_item
else
return RPG::Enemy::DropItem.new
end
end
def get_drop_item
possible_drop_item = []
drop = RPG::Enemy::DropItem.new
drop.kind = rand(4)
case drop.kind
when 1
for i in 1...$data_items.size
item = $data_items[i]
if (item.level - enemy.level).abs <= 2 and item.level == 0
possible_drop_item.push(item.id) unless item.cannot_drop
end
end
drop.item_id = possible_drop_item[rand(possible_drop_item.size)]
when 2
for i in 1...$data_weapons.size
weapon = $data_weapons[i]
if (weapon.level - enemy.level).abs <= 2 and weapon.level == 0
possible_drop_item.push(weapon.id) unless weapon.cannot_drop
end
end
drop.weapon_id = possible_drop_item[rand(possible_drop_item.size)]
when 3
for i in 1...$data_armors.size
armor = $data_armors[i]
if (armor.level - enemy.level).abs <= 2 and armor.level == 0
possible_drop_item.push(armor.id) unless armor.cannot_drop
end
end
drop.armor_id = possible_drop_item[rand(possible_drop_item.size)]
end
drop.kind = 0 if possible_drop_item == []
ratio = enemy.level * rand(5) / Item_Setup::DROP_COEF
drop.denominator = [ratio, 1].max
return drop
end
end
class Game_Interpreter
def make_enemy_database
for i in 1...$data_enemies.size
game_enemy = Game_Enemy.new(1, i)
if $data_enemies[i].auto_setup?
$data_enemies[i].maxhp = game_enemy.base_maxhp
$data_enemies[i].maxmp = game_enemy.base_maxmp
$data_enemies[i].atk = game_enemy.base_atk
$data_enemies[i].def = game_enemy.base_def
$data_enemies[i].spi = game_enemy.base_spi
$data_enemies[i].agi = game_enemy.base_agi
$data_enemies[i].hit = game_enemy.hit
$data_enemies[i].eva = game_enemy.eva
$data_enemies[i].exp = game_enemy.exp
if $lazy_item_setup
$data_enemies[i].drop_item1 = game_enemy.drop_item1
$data_enemies[i].drop_item2 = game_enemy.drop_item2
end
end
end
save_data($data_enemies,"Data/Enemies.rvdata") if Auto_Enemy::WRITE_2_DATABASE
end
end
复制代码
作者:
你最珍贵
时间:
2014-8-25 09:05
本帖最后由 你最珍贵 于 2014-8-25 10:23 编辑
(`・ω・)看上去很简单嘛,我先占位
低估了~(害羞)
因为XP没备注栏嘛,制作有点难度
敌人能力值.rar
(193.66 KB, 下载次数: 44)
2014-8-25 10:23 上传
点击文件名下载附件
只弄了等级
作者:
恐惧剑刃
时间:
2014-8-27 13:11
本帖最后由 恐惧剑刃 于 2014-8-27 15:33 编辑
大概如此
=begin
========================================================================
关于敌人类型:
如果只是类型不同能力就有较大差异(偏血,偏攻,偏法 等),
完全可以在数据库中调整。
个人感觉“敌人类型”很是鸡肋。
添加了成长比例,自由定义各种能力的成长,有些HP成长高,有些攻击成长高
什么的,个人感觉还是可以替代“敌人类型”的。
========================================================================
=end
module Enemy
Level = []
Exp = []
Item = []
#========================================================================
# ● 等级设定
#========================================================================
# ○直接指定○:
# n : (直接指定)
#
# ○数组指定○( [参考等级, 相对等级, 成长比例的数组] ):
# 参考等级 : (标准等级)
# 相对等级 : (该敌人的等级随同伴等级的变化而变化)
# 成长比例的数组 : 随敌人实际等级的变化,能力增加或减少的比例 的数组
#========================================================================
# 实际等级算法:
# 同伴等级的均值 + 相对等级
# 实际能力算法:
# 某能力标准值 + (实际等级 - 参考等级) * (某能力标准值 * 成长比例)
# ※ 标准能力值 : 就是数据库中设置的敌人能力。
#========================================================================
# ※ 假定参考等级为20,相对等级为5,hp的成长比例为0.1,其标准MAXHP为500,
# 同伴等级的均值为30
# 那么这个敌人的实际等级为:30 + 5 = 35 级
# 那么这个敌人的实际MAXHP为:
# 500 + (35 - 20) * (500 * 0.1) = 1250 点
#========================================================================
# ○○○○○○○○○○○○○○○○○○○○○○○○○
# 比例最好小一些,不然敌人可能会异常强悍
# ○○○○○○○○○○○○○○○○○○○○○○○○○
# 比例的数组
# [最大hp, 最大mp, 力量, 灵巧, 速度, 魔力, 攻击力, 物理防御, 魔法防御, 回避]
Level[1] = [1, 5, [0.03, 0.02, 0.04, 0.01, 0.01, 0.03, 0.02, 0.001, 0.002, 0]]
#========================================================================
# ● 经验比例设定
#========================================================================
# 基础经验 , 数据库中设置的敌人经验
# 敌人等级 , (这里设置的敌人等级)
# 经验比例 , (这里设置的经验比例)
#========================================================================
# 经验计算公式 :
# 基础经验 + (敌人等级 - 角色等级) * (基础经验 * 经验比例)
#========================================================================
# ※ 假定基础经验为100,经验比例为0.1,敌人等级为10
# 如果同伴中有一个20级的角色,那么这个角色会获得:
# 100 + (10 - 20) * (100 * 0.1) = 0 小于等于0,也就是没有经验奖励,
# 而如果同伴中有一个5级的角色,那么这个角色会获得:
# 100 + (10 - 5) * (100 * 0.1) = 150 点经验
#========================================================================
Exp[1] = 0.1
#========================================================================
# ●(掉落)宝物设定
#========================================================================
# 宝物种类 0 => 物品 1 => 武器 2 => 防具
#========================================================================
# 数组内容 :
# [宝物种类, 宝物id, 获得概率[, 获得数量]] // 获得数量默认为1
#========================================================================
# ※ 数组第一项为宝物的种类数,即最多可以同时获得多少种不同的宝物。
# 另外不同的宝物概率独立,不需要设置加起来是100什么的。
#========================================================================
Item[1] = [1]
Item[1] << [0, 1, 20, 1]
end
class Game_Enemy < Game_Battler
attr_reader :level
#--------------------------------------------------------------------------
# ● 初始化对像
# troop_id : 循环 ID
# member_index : 循环成员的索引
#--------------------------------------------------------------------------
def initialize(troop_id, member_index)
super()
@troop_id = troop_id
@member_index = member_index
troop = $data_troops[@troop_id]
@enemy_id = troop.members[@member_index].enemy_id
# ================================
@plus_eva =
@plus_hp =
@plus_sp =
@plus_atk =
@plus_str =
@plus_dex =
@plus_agi =
@plus_int =
@plus_pdef =
@plus_mdef = 0
setlv
# ================================
enemy = $data_enemies[@enemy_id]
@battler_name = enemy.battler_name
@battler_hue = enemy.battler_hue
@hp = maxhp
@sp = maxsp
[url=home.php?mod=space&uid=292300]@Hidden[/url] = troop.members[@member_index].hidden
@immortal = troop.members[@member_index].immortal
end
def setlv
if Enemy::Level[@enemy_id] != nil and Enemy::Level[@enemy_id].is_a?(Array)
# 同伴等级的均值
actor_lv = 0
for l in $game_party.actors
actor_lv += l.level
end
actor_lv /= $game_party.actors.size
lv = actor_lv + Enemy::Level[@enemy_id][1]
sv = lv - Enemy::Level[@enemy_id][0]
if sv != 0
@plus_hp = sv * (maxhp * Enemy::Level[@enemy_id][2][0])
@plus_sp = sv * (maxsp * Enemy::Level[@enemy_id][2][1])
@plus_str = sv * (str * Enemy::Level[@enemy_id][2][2])
@plus_dex = sv * (dex * Enemy::Level[@enemy_id][2][3])
@plus_agi = sv * (agi * Enemy::Level[@enemy_id][2][4])
@plus_int = sv * (int * Enemy::Level[@enemy_id][2][5])
@plus_atk = sv * (atk * Enemy::Level[@enemy_id][2][6])
@plus_pdef = sv * (pdef * Enemy::Level[@enemy_id][2][7])
@plus_mdef = sv * (mdef * Enemy::Level[@enemy_id][2][8])
@plus_eva = sv * (eva * Enemy::Level[@enemy_id][2][9])
end
@level = lv
elsif Enemy::Level[@enemy_id] != nil and !Enemy::Level[@enemy_id].is_a?(Array)
@level = Enemy::Level[@enemy_id][1]
else
@level = 1
end
end
#--------------------------------------------------------------------------
# ● 获取 MaxHP
#--------------------------------------------------------------------------
def maxhp
n = [[base_maxhp + @maxhp_plus, 1].max, 999999].min
n += @plus_hp
for i in @states
n *= $data_states[i].maxhp_rate / 100.0
end
n = [[Integer(n), 1].max, 999999].min
return n
end
#--------------------------------------------------------------------------
# ● 获取 MaxSP
#--------------------------------------------------------------------------
def maxsp
n = [[base_maxsp + @maxsp_plus, 0].max, 9999].min
n += @plus_sp
for i in @states
n *= $data_states[i].maxsp_rate / 100.0
end
n = [[Integer(n), 0].max, 9999].min
return n
end
#--------------------------------------------------------------------------
# ● 获取力量
#--------------------------------------------------------------------------
def str
n = [[base_str + @str_plus, 1].max, 999].min
n += @plus_str
for i in @states
n *= $data_states[i].str_rate / 100.0
end
n = [[Integer(n), 1].max, 999].min
return n
end
#--------------------------------------------------------------------------
# ● 获取灵巧
#--------------------------------------------------------------------------
def dex
n = [[base_dex + @dex_plus, 1].max, 999].min
n += @plus_dex
for i in @states
n *= $data_states[i].dex_rate / 100.0
end
n = [[Integer(n), 1].max, 999].min
return n
end
#--------------------------------------------------------------------------
# ● 获取速度
#--------------------------------------------------------------------------
def agi
n = [[base_agi + @agi_plus, 1].max, 999].min
n += @plus_agi
for i in @states
n *= $data_states[i].agi_rate / 100.0
end
n = [[Integer(n), 1].max, 999].min
return n
end
#--------------------------------------------------------------------------
# ● 获取魔力
#--------------------------------------------------------------------------
def int
n = [[base_int + @int_plus, 1].max, 999].min
n += @plus_int
for i in @states
n *= $data_states[i].int_rate / 100.0
end
n = [[Integer(n), 1].max, 999].min
return n
end
#--------------------------------------------------------------------------
# ● 获取攻击力
#--------------------------------------------------------------------------
def atk
n = base_atk
n += @plus_atk
for i in @states
n *= $data_states[i].atk_rate / 100.0
end
return Integer(n)
end
#--------------------------------------------------------------------------
# ● 获取物理防御
#--------------------------------------------------------------------------
def pdef
n = base_pdef
n += @plus_pdef
for i in @states
n *= $data_states[i].pdef_rate / 100.0
end
return Integer(n)
end
#--------------------------------------------------------------------------
# ● 获取魔法防御
#--------------------------------------------------------------------------
def mdef
n = base_mdef
n += @plus_mdef
for i in @states
n *= $data_states[i].mdef_rate / 100.0
end
return Integer(n)
end
#--------------------------------------------------------------------------
# ● 获取回避修正
#--------------------------------------------------------------------------
def eva
n = base_eva
n += @plus_eva
for i in @states
n += $data_states[i].eva
end
return n
end
end
#==============================================================================
# ■ Window_BattleResult
#------------------------------------------------------------------------------
# 战斗结束时、显示获得的 EXP 及金钱的窗口。
#==============================================================================
class Window_BattleResult < Window_Base
#--------------------------------------------------------------------------
# ● 初始化对像
# exp : EXP
# gold : 金钱
# treasures : 宝物
#--------------------------------------------------------------------------
def initialize(exp, gold, treasures)
@exp = exp
@gold = gold
@treasures = treasures
super(0, 0, 640, 320)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.size = 15
self.back_opacity = 160
self.visible = false
refresh
end
#--------------------------------------------------------------------------
# ● 刷新
#--------------------------------------------------------------------------
def refresh
self.contents.clear
#★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
#==========================================
# 简单的示例 此处需要自定义
#==========================================
sy = 0
self.contents.draw_text(0, sy*32, self.width-40, 15, "获得了#{@gold}金币")
sy += 1
for id in @exp.keys
self.contents.draw_text(0, sy*32, self.width-40, 15, $game_actors[id].name+"获得了#{@exp[id]}点经验")
sy += 1
end
for i in @treasures
self.contents.draw_text(0, sy*32, self.width-40, 15, "获得了#{i[1]}个"+i[0].name)
sy += 1
end
#★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
end
end
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
# 处理战斗画面的类。
#==============================================================================
class Scene_Battle
def battleresult
# 初始化
exp = {}
gold = 0
treasures = []
for enemy in $game_troop.enemies
unless enemy.hidden
# 获得经验
for actor in $game_party.actors
gain_exp = Integer(enemy.exp + (enemy.level - actor.level) * (enemy.exp * Enemy::Exp[enemy.id]))
if gain_exp > 0
actor.exp += gain_exp
exp[actor.id] = gain_exp
end
end
# 获得金币
gold += enemy.gold
$game_party.gain_gold(enemy.gold)
# 随机宝物
if Enemy::Item[enemy.id] != nil
for item in Enemy::Item[enemy.id]
next unless item.is_a?(Array)
if rand(100) < item[2]
case item[0]
when 0
treasures << [$data_items[item[1]], item[3] == nil ? 1 : item[3]]
when 1
treasures << [$data_weapons[item[1]], item[3] == nil ? 1 : item[3]]
when 2
treasures << [$data_armors[item[1]], item[3] == nil ? 1 : item[3]]
end
end
end
#抽出
while treasures.size > Enemy::Item[enemy.id][0]
treasures.delete_at(rand(treasures.size))
end
end
end
end
# 获得物品
for item in treasures
case item[0]
when RPG::Item
$game_party.gain_item(item[0].id, item[1])
when RPG::Weapon
$game_party.gain_weapon(item[0].id, item[1])
when RPG::Armor
$game_party.gain_armor(item[0].id, item[1])
end
end
return [exp, gold, treasures]
end
#--------------------------------------------------------------------------
# ● 开始结束战斗回合
#--------------------------------------------------------------------------
def start_phase5
# 转移到回合 5
@phase = 5
# 演奏战斗结束 ME
$game_system.me_play($game_system.battle_end_me)
# 还原为战斗开始前的 BGM
$game_system.bgm_play($game_temp.map_bgm)
# 生成战斗结果窗口
@result_window = Window_BattleResult.new(*battleresult)
# 设置等待计数
@phase5_wait_count = 100
end
end
复制代码
敌人能力设置.rar
2014-8-27 15:33 上传
点击文件名下载附件
230.21 KB, 下载次数: 38
作者:
黑米馒头
时间:
2014-8-27 14:04
恐惧剑刃 发表于 2014-8-27 13:11
大概如此
貌似脚本怎么用,怎么设置敌人。能不能在弄个像下面这样的敌人类型设置
# 敌人类型设定
ENEMY_TYPE = {
"普通" => 0, # 普通敌人,能力值依队伍平均计算
"武士" => 1, # 武士型敌人,物理攻击等偏高
"法师" => 2, # 法师型敌人,魔法攻击偏高
"牧师" => 3, # 牧师型敌人,魔力值偏高
"巫师" => 4, # 巫师型敌人,命中率偏高
"挡箭牌" => 5, # 挡箭牌型敌人,血高肉厚
"BOSS" => 6, # BOSS型敌人,各项能力值都增强
# 以上的数值可以在下面的数组变更
"随机" => -1, # 随机,看看它的运气,加值在 1~1.99
"default"=> 0 # 这行不要修改,除错用,默认为普通
}
# 敌人能力值加值参数,对应上放哈希表的敌人类型。不会改的话就别改了。
# 普通 武士 法师 牧师 巫师 档箭 BOSS
ENEMY_TYPE_HP = [1, 1.5, 0.75, 0.6, 0.8, 2, 4] # 体力最大值
ENEMY_TYPE_MP = [1, 0.75, 1.5, 3, 1.4, 1.1, 4] # 魔力最大值
ENEMY_TYPE_ATK = [1, 2, 0.75, 0.5, 0.6, 1.1, 4] # 攻击力
ENEMY_TYPE_DEF = [1, 1.25, 0.5, 0.75, 0.7, 3, 4] # 防御力
ENEMY_TYPE_SPI = [1, 0.1, 2, 1.75, 1.5, 0, 2] # 精神力
ENEMY_TYPE_AGI = [1, 1.2, 2, 0.8, 1.1, 0.2, 2] # 敏捷
ENEMY_TYPE_HIT = [1, 1.3, 1.1, 1.5, 1.8, 1 ] # 命中率
ENEMY_TYPE_EVA = [1, 1, 1, 0.9, 1.1, 0 ] # 闪躲率
# BOSS的命中率和闪躲率为默认最高的95%
复制代码
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1