赞 | 0 |
VIP | 0 |
好人卡 | 2 |
积分 | 1 |
经验 | 952 |
最后登录 | 2013-12-27 |
在线时间 | 336 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 336 小时
- 注册时间
- 2010-8-26
- 帖子
- 428
|
回复 l65591397 的帖子
如果不是你脚本错的话建议你设单类型,就一种吧,个人认为还是类型好点,比的感觉死板- =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,就会将该敌人设置为与主角队伍平均等级相同
-
- 配合使用方法:
-
- 一般敌人建议用第一种方法,设立(伪)绝对等级,主角成长後依然为弱怪的敌人。
- 头目敌人可以直接指定其类型为 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 = [0.75, 1, 0.75, 0.5, 0.5, 0.7, 1] # 攻击力
- ENEMY_TYPE_DEF = [0.75, 0.5, 1, 0.7, 0.7, 1.2, 1.3] # 防御力
- ENEMY_TYPE_SPI = [0.75, 0.1, 1, 1, 1, 0.5, 1] # 精神力
- ENEMY_TYPE_AGI = [0.75, 1, 1, 1, 1, 1, 2] # 敏捷
- ENEMY_TYPE_HIT = [0.75, 0.75, 0.75, 0.75, 0.75, 0.75 ] # 命中率
- ENEMY_TYPE_EVA = [0.75, 0.75, 0.75, 0.75, 0.75, 0.75 ] # 闪躲率
- # 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 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 *= (0.7 + 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 *= (0.8 + 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 *= (0.7 + 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 *= (0.7 + 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 *= (0.8 + rand(0))
- elsif enemy.type == 6
- enemy_hit = 40
- 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 *= (0.8 + rand(0))
- elsif enemy.type == 6
- enemy_eva = 40
- 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
- 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
复制代码 我数字改了点,不过我自己用的,没出现过错误,怪物还是类型随机啊,多变化 |
|