赞 | 5 |
VIP | 71 |
好人卡 | 22 |
积分 | 6 |
经验 | 32145 |
最后登录 | 2013-8-9 |
在线时间 | 184 小时 |
Lv2.观梦者 天仙
- 梦石
- 0
- 星屑
- 620
- 在线时间
- 184 小时
- 注册时间
- 2008-4-15
- 帖子
- 5023
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 雪流星 于 2012-3-8 19:55 编辑
没搜索到原VX版脚本的帖子,脚本工程是从此帖下载的
谁知道的话帮我贴一下连结,谢谢
说明写在脚本里面了
范例工程:
http://hop.tl/QMyGHP7J96dT168yTv
http://115.com/file/e733ay1n
更新日志:
2012-03-08
* 更新功能:不需占用数据库中敌人队伍的位置
* 新增功能:增加敌人视野效果
* 功能修改:敌人设置改在事件指令中,名称空出来可以照常随便使用
- #===============================================================
- # ■ 即时遇敌,
- #---------------------------------------------------------------
- # 碰到什么怪物,周围是什么怪物战斗中就是什么怪物
- #===============================================================
- =begin
- 使用说明
- 在地图上放置事件,事件的第一个指令用注释
- 在里面填写 敌人: ID (注意是半角冒号),决定触碰到此事件时所战斗的敌人
- 第二行可以填写 视野: 数字 ,决定本事件追逐主角的视野范围(默认为8)
- 触碰后就会触发战斗,敌人队伍依照主角身边的敌人事件设定生成
- 如果主角身边有5个敌人事件,则敌人队伍有五个
- 战斗胜利、失败、逃跑后的公共事件,先设定好,把ID填写在脚本当中
- ($win_common_event_id 这几行)
- 数据库里面的敌人队伍可以照常使用,没有影响。
- 作为敌人的事件也可以照常放置其他的指令,执行完后才会执行战斗
- =end
- $win_common_event_id = 1 # 战胜时的公共事件
- $lose_common_event_id = 2 # 战败时的公共事件
- $escape_common_event_id = 3 # 逃跑时的公共事件
- class Game_Character < Game_CharacterBase
- def move_type_toward_player
- # 计算与主角的距离
- sx = (@x - $game_player.x).abs
- sy = (@y - $game_player.y).abs
- # 如果纵横共计离开 20 个元件
- if sx + sy >= approach_range
- # 随机
- move_random
- return
- end
- # 随机 0~5 的分支
- case rand(6)
- when 0..3 # 接近主角
- move_toward_player
- when 4 # 随机
- move_random
- when 5 # 前进一步
- move_forward
- end
- end
- def approach_range
- return 8
- end
- end
- class Game_Event < Game_Character
- #--------------------------------------------------------------------------
- # ● 初始化对像
- # map_id : 地图 ID
- # event : 事件 (RPG::Event)
- #--------------------------------------------------------------------------
- alias old_initialize initialize
- def initialize(map_id, event)
- old_initialize(map_id, event)
- name = event.name
- @enemy_id = 0
- @approach_range = 8
- setup_as_enemy
- end
- #--------------------------------------------------------------------------
- # ● 返回视野距离
- #--------------------------------------------------------------------------
- def approach_range
- return @approach_range
- end
- #--------------------------------------------------------------------------
- # ● 判断事件是否存在
- #--------------------------------------------------------------------------
- def exist?
- return !@erased
- end
- #--------------------------------------------------------------------------
- # ● 将事件设为敌人
- #--------------------------------------------------------------------------
- def setup_as_enemy
- enemy_comment = @list[0]
- scope_comment = @list[1] if @list[1] && @list[1].code == 408
- return if enemy_comment.code != 108
- # 读取敌人 ID
- if enemy_comment.parameters[0] =~ /(?:敌人):(?:\s|)(\d+)/
- @enemy_id = $1.to_i
- else
- return
- end
- # 读取敌人视野距离
- if scope_comment.parameters[0] =~ /(?:视野):(?:\s|)(\d+)/
- @approach_range = $1.to_i
- end
- command = RPG::EventCommand.new(355, 0, ["$instant_encounter_battle=true"])
- @list.push(command) # 执行脚本
- command = RPG::EventCommand.new(301, 0, [0, 1, true, true])
- @list.push(command) # 战斗处理
- command = RPG::EventCommand.new(601, 0)
- @list.push(command) # 战胜时的场合
- command = RPG::EventCommand.new(117, 1, [$win_common_event_id])
- @list.push(command) # 呼叫公共事件
- command = RPG::EventCommand.new(602, 0)
- @list.push(command) # 逃跑时的场合
- command = RPG::EventCommand.new(117, 1, [$escape_common_event_id])
- @list.push(command) # 呼叫公共事件
- command = RPG::EventCommand.new(603, 0)
- @list.push(command) # 战败时的场合
- command = RPG::EventCommand.new(117, 1, [$lose_common_event_id])
- @list.push(command) # 呼叫公共事件
- command = RPG::EventCommand.new(604, 0)
- @list.push(command) # 战斗处理结束
- command = RPG::EventCommand.new
- @list.push(command)
- end
- #--------------------------------------------------------------------------
- # ● 判断事件是否为敌人
- #--------------------------------------------------------------------------
- def isEnemy?
- return @enemy_id > 0
- end
- attr_reader :enemy_id # 指定的敌人ID
- end
- class Game_Map
- ENCOUNTER_RANGE = 3 #这个代表遇到敌人的范围大小
- #--------------------------------------------------------------------------
- # ●获取指定范围内的事件
- # x : X 坐标
- # y : Y 坐标
- # l : 范围
- #--------------------------------------------------------------------------
- def scope_event
- scope_event = []
- x = $game_player.x
- y = $game_player.y
- for event in $game_map.events.values
- next unless event.isEnemy?
- if (event.x - x).abs + (event.y - y).abs <=ENCOUNTER_RANGE and event.exist?
- scope_event.push(event.id)
- break if scope_event.size >= 8
- end
- end
- return scope_event
- end
- end
- module BattleManager
- #--------------------------------------------------------------------------
- # ● 处理战斗结束
- #--------------------------------------------------------------------------
- class << self
- alias instant_encounter_setup setup
- def setup(troop_id, can_escape = true, can_lose = false)
- if $instant_encounter_battle
- $data_troops[1].members = []
- scope_event = $game_map.scope_event
- size = scope_event.size
- for i in 1..size
- temp = RPG::Troop::Member.new
- temp.enemy_id = $game_map.events[scope_event[i-1]].enemy_id
- if size > 4
- temp.x = Graphics.width * (i - 0.5) / size
- temp.y = 288 / 2*(i%2+1)
- temp.y += 100*((i+1)%2)
- else
- temp.x = Graphics.width * (i - 0.5) / size
- temp.y = 288
- end
- $data_troops[1].members.push(temp)
- $instant_encounter_battle = false
- end
- end
- instant_encounter_setup(troop_id, can_escape, can_lose)
- end
- alias instant_encounter_battle_end battle_end
- def battle_end(result)
- if result == 0
- # 战斗结束后清除事件(未完成)
- scope_event = $game_map.scope_event
- $game_troop.members.size.times{ |i|
- $game_map.events[scope_event[i]].erase
- }
- end
- instant_encounter_battle_end(result)
- end
- end
- end
复制代码 |
|