赞 | 0 |
VIP | 17 |
好人卡 | 0 |
积分 | 1 |
经验 | 1022914 |
最后登录 | 2017-2-4 |
在线时间 | 10 小时 |
Lv1.梦旅人 月下可怜人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 10 小时
- 注册时间
- 2005-11-23
- 帖子
- 4085
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
一:怪物单体随机出现。
- 例如队伍中3个怪物,每个都随机出现,但至少一个。
- 修改Game_Troop类的setup方法:
- def setup(troop_id)
- @enemies = []
- troop = $data_troops[troop_id]
- #存储必定出现的怪物序号(为保证至少一个)
- kind = rand(troop.members.size)
- for i in 0...troop.members.size
- enemy = $data_enemies[troop.members[i].enemy_id]
- #若不是必定出现的怪物,并且rand(2) == 0(50%)则跳过循环,该怪不出现
- if (i != kind) and (rand(2) == 0)
- next
- end
- if enemy != nil
- @enemies.push(Game_Enemy.new(troop_id, i))
- end
- end
- end
复制代码
二:怪物种族群组随机出现。
- 相同怪物作为一组,相对每组,每个怪物随机,但至少出现一次。
- 例如出现2只A和2只B,可能2只A和2只B一起出现,或者出现1只A和2只B,或者2只A和1只B,或者1只A和1只B。
- 依然修改Game_Troop类的setup方法:
- def setup(troop_id)
- # 由敌人序列的设置来确定队伍的设置
- @enemies = []
- troop = $data_troops[troop_id]
- #存储已出现过的ID(为保证每组至少一个)
- kinds = []
- for i in 0...troop.members.size
- enemy = $data_enemies[troop.members[i].enemy_id]
- #代入成员的怪物ID
- id = troop.members[i].enemy_id
- #若该怪物已出现过并且rand(2) == 0(50%)则跳过循环,该怪不出现
- #若该怪物未出现过,则代入存储ID的数组用于下次判断
- kinds.include?(id) ? (next if rand(2) == 0) : (kinds.push id)
- if enemy != nil
- @enemies.push(Game_Enemy.new(troop_id, i))
- end
- end
- end
复制代码
三:一+二
- 为了不与默认方式冲突,并且使用灵活,将一、二两种随机方式与默认整合,利用变量区分,具体如下:
- def setup(troop_id)
- # 设置敌人的序列来确定队伍情况
- @enemies = []
- troop = $data_troops[troop_id]
- kinds = []
- kind = rand(troop.members.size)
- for i in 0...troop.members.size
- enemy = $data_enemies[troop.members[i].enemy_id]
- case $game_variables[10]
- when 1 # 单体随机
- if (i != kind) and (rand(2) == 0)
- next
- end
- when 2 # 组合随机
- id = troop.members[i].enemy_id
- kinds.include?(id) ? (next if rand(2) == 0) : (kinds.push id)
- end
- if enemy != nil
- @enemies.push(Game_Enemy.new(troop_id, i))
- end
- end
- end
复制代码
四:自定义遇敌
- 专门建立个方法设置敌人组合,如下:
- module District_Enemy
-
- def self.setup(id,members)
- #新建队伍,
- $data_troops[id] = RPG::Troop.new
- #设定队伍基本属性
- $data_troops[id].id = id
- $data_troops[id].name = 'orz'
- #为新队伍添加成员
- for i in members
- enemy = RPG::Troop::Member.new
- enemy.enemy_id = i[0]
- enemy.x = i[1]
- enemy.y = i[2]
- $data_troops[id].members.push enemy
- end
- #触发战斗
- $game_temp.battle_calling = true
- $game_temp.battle_troop_id = id
- $game_temp.battle_can_escape = true
- $game_temp.battle_can_lose = false
- return
- end
-
- end
- 如此可依靠事件的“脚本”中输入
- District_Enemy.setup(队伍ID,[[A敌人ID,A敌人x,A敌人y],[B敌人ID,B敌人x,B敌人y],…………])
- 的方法设置敌人组合,也可事先将敌人组合在RGSS书写完成,通过全局数组插入,其中队伍ID尽量设定数据库不存在的ID,例如1000,2000之类。
- 这个方法最大的意义是可以突破数据库最大成员8的限制,效果如图,具体见范例。
复制代码破限之百鬼夜行
五:区域遇敌
使用脚本可大为提升效率。
- 基础设定:
- 其中DISTRICT常量为对应地图的遇敌区域与种类,设定规则为:
- 地图ID => [[区域A左上X,区域A左上Y,区域A右下X,区域A右下Y,[敌人队伍A的ID,…]],[区域B左上X,区域B左上Y,区域B右下X,区域B右下Y,[敌人队伍A的ID,…]]……]
- 例如想一号地图的0,0到5,5的位置遇到1,2号敌人队伍,4,4到10,10的位置遇到3,4号敌人队伍,
- 则在DISTRICT{}里添加
- 1 => [[0,0,5,5,[1,2]],[4,4,10,10,[3,4]]]
- 注意,要保证添加的区域可构成矩形,例如-10,20i之类的就不要尝试了——
- module District_Enemy
-
- #允许区域遇敌开关ID
- ALLOW_ID = 10
- #区域遇敌开启时,区域外部分是否遵循默认遇敌ID
- SYSTEM_ID = 11
-
- #设置对应地图的遇敌区域与种类
- DISTRICT = {
- 1 => [[0,0,5,5,[1,2]],[4,4,10,10,[3,4]]],
- 2 => [[2,7,9,9,[6]],[4,4,10,10,[8]]]
- }
-
- def self.catch(id,x,y)
- data = DISTRICT[id]
- return nil if data.nil?
- temp = Array.new
- for i in data
- if x.between?(i[0], i[2]) and y.between?(i[1], i[3])
- temp.concat(i[4])
- end
- end
- return false if temp.empty?
- return temp
- end
-
- end
- 基础设定完毕后,将其插入遇敌部分:
- 见Scene_Map类的
- # 确定队伍
- n = rand($game_map.encounter_list.size)
- troop_id = $game_map.encounter_list[n]
- 将其改写为
- # 确定队伍
- # 获得当前地图区域遇敌的相关资料
- sum = District_Enemy.catch($game_map.map_id,$game_player.x,$game_player.y)
- # 若当前地图未设置过区域,或者区域遇敌未打开,则执行默认的遇敌方式
- if sum == nil or !$game_switches[District_Enemy::ALLOW_ID]
- n = rand($game_map.encounter_list.size)
- troop_id = $game_map.encounter_list[n]
- else
- # 反之若角色不在区域内
- if sum == false
- # 区域外遇敌开关开启,则执行默认遇敌方式
- if $game_switches[District_Enemy::SYSTEM_ID]
- n = rand($game_map.encounter_list.size)
- troop_id = $game_map.encounter_list[n]
- else
- # 反之,不遇敌
- troop_id = -100
- end
- else
- # 若在区域内,遭遇对应区域设置的敌人队伍
- n = rand(sum.size)
- troop_id = sum[n]
- end
- end
复制代码区域遇敌
范例下载,注意查毒
ftp://[email protected]/个� ... 遇敌变奏曲.rar
[本贴由 叶舞枫 于 2007-6-20 9:41:31 进行了编辑] |
|