赞 | 3 |
VIP | 0 |
好人卡 | 0 |
积分 | 2 |
经验 | 45777 |
最后登录 | 2018-5-25 |
在线时间 | 248 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 199
- 在线时间
- 248 小时
- 注册时间
- 2012-4-29
- 帖子
- 386
|
4楼
楼主 |
发表于 2013-10-31 21:24:07
|
只看该作者
魔力的觉醒 发表于 2013-10-31 17:32
脚本太多了 !!!这个怎么办!!
貌似这句我没有动过 麻烦了!!- #encoding:utf-8
- #==============================================================================
- # ■ Game_Interpreter
- #------------------------------------------------------------------------------
- # 事件指令的解释器。
- # 本类在 Game_Map、Game_Troop、Game_Event 类的内部使用。
- #==============================================================================
- class Game_Interpreter
- #--------------------------------------------------------------------------
- # ● 定义实例变量
- #--------------------------------------------------------------------------
- attr_reader :map_id # 地图 ID
- attr_reader :event_id # 事件 ID(仅指普通事件)
- #--------------------------------------------------------------------------
- # ● 初始化对象
- # depth : 堆置深度
- #--------------------------------------------------------------------------
- def initialize(depth = 0)
- @depth = depth
- check_overflow
- clear
- end
- #--------------------------------------------------------------------------
- # ● 检查堆置是否过深
- # 普通情况下深度不允许超过 100 。
- # 更深的堆置可能会导致递归事件无限循环,所以直接引发退出错误。
- #--------------------------------------------------------------------------
- def check_overflow
- if @depth >= 100
- msgbox(Vocab::EventOverflow)
- exit
- end
- end
- #--------------------------------------------------------------------------
- # ● 清除
- #--------------------------------------------------------------------------
- def clear
- @map_id = 0
- @event_id = 0
- @list = nil # 执行内容
- [url=home.php?mod=space&uid=370741]@Index[/url] = 0 # 索引
- @branch = {} # 分歧数据
- @fiber = nil # 纤程
- end
- #--------------------------------------------------------------------------
- # ● 设置事件
- #--------------------------------------------------------------------------
- def setup(list, event_id = 0)
- clear
- @map_id = $game_map.map_id
- @event_id = event_id
- @list = list
- create_fiber
- end
- #--------------------------------------------------------------------------
- # ● 生成纤程
- #--------------------------------------------------------------------------
- def create_fiber
- @fiber = Fiber.new { run } if @list
- end
- #--------------------------------------------------------------------------
- # ● 储存实例
- # 对纤程进行 Marshal 的自定义方法。
- # 此方法将事件的执行位置也一并保存起来。
- #--------------------------------------------------------------------------
- def marshal_dump
- [@depth, @map_id, @event_id, @list, @index + 1, @branch]
- end
- #--------------------------------------------------------------------------
- # ● 读取实例
- # obj : marshal_dump 中储存的实例(数组)
- # 恢复多个数据(@depth、@map_id 等)的状态,必要时重新创建纤程。
- #--------------------------------------------------------------------------
- def marshal_load(obj)
- @depth, @map_id, @event_id, @list, @index, @branch = obj
- create_fiber
- end
- #--------------------------------------------------------------------------
- # ● 判定当前地图是否和事件启动时的地图相同
- #--------------------------------------------------------------------------
- def same_map?
- @map_id == $game_map.map_id
- end
- #--------------------------------------------------------------------------
- # ● 检测/设置预定调用的公共事件
- #--------------------------------------------------------------------------
- def setup_reserved_common_event
- if $game_temp.common_event_reserved?
- setup($game_temp.reserved_common_event.list)
- $game_temp.clear_common_event
- true
- else
- false
- end
- end
- #--------------------------------------------------------------------------
- # ● 执行
- #--------------------------------------------------------------------------
- def run
- wait_for_message
- while @list[@index] do
- execute_command
- @index += 1
- end
- Fiber.yield
- @fiber = nil
- end
- #--------------------------------------------------------------------------
- # ● 判定是否执行中
- #--------------------------------------------------------------------------
- def running?
- @fiber != nil
- end
- #--------------------------------------------------------------------------
- # ● 更新画面
- #--------------------------------------------------------------------------
- def update
- @fiber.resume if @fiber
- end
- #--------------------------------------------------------------------------
- # ● 迭代角色(ID)
- # param : 大于 1 则返回 ID 指定的角色、0 则迭代全体角色
- # 注意:此方法和 iterate_actor_index(param) 的参数设置有所不同
- #--------------------------------------------------------------------------
- def iterate_actor_id(param)
- if param == 0
- $game_party.members.each {|actor| yield actor }
- else
- actor = $game_actors[param]
- yield actor if actor
- end
- end
- #--------------------------------------------------------------------------
- # ● 迭代队员(可变)
- # param1 : 0 则固定、1 则变量指定
- # param2 : 角色 ID 或变量 ID
- #--------------------------------------------------------------------------
- def iterate_actor_var(param1, param2)
- if param1 == 0
- iterate_actor_id(param2) {|actor| yield actor }
- else
- iterate_actor_id($game_variables[param2]) {|actor| yield actor }
- end
- end
- #--------------------------------------------------------------------------
- # ● 迭代队员(索引)
- # param : 0 则返回索引指定的队员、 -1 则迭代全体队员
- #--------------------------------------------------------------------------
- def iterate_actor_index(param)
- if param < 0
- $game_party.members.each {|actor| yield actor }
- else
- actor = $game_party.members[param]
- yield actor if actor
- end
- end
- #--------------------------------------------------------------------------
- # ● 迭代敌人(索引)
- # param : 0 则返回索引指定的敌人、 -1 则迭代全体敌人
- #--------------------------------------------------------------------------
- def iterate_enemy_index(param)
- if param < 0
- $game_troop.members.each {|enemy| yield enemy }
- else
- enemy = $game_troop.members[param]
- yield enemy if enemy
- end
- end
- #--------------------------------------------------------------------------
- # ● 迭代战斗者(敌群全体、队伍全体考虑)
- # param1 : 0 则敌人、1 则角色
- # param2 : 敌人的索引 或 角色的 ID
- #--------------------------------------------------------------------------
- def iterate_battler(param1, param2)
- if $game_party.in_battle
- if param1 == 0
- iterate_enemy_index(param2) {|enemy| yield enemy }
- else
- iterate_actor_id(param2) {|actor| yield actor }
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 获取画面系指令的对象
- #--------------------------------------------------------------------------
- def screen
- $game_party.in_battle ? $game_troop.screen : $game_map.screen
- end
- #--------------------------------------------------------------------------
- # ● 执行事件指令
- #--------------------------------------------------------------------------
- def execute_command
- command = @list[@index]
- @params = command.parameters
- @indent = command.indent
- method_name = "command_#{command.code}"
- send(method_name) if respond_to?(method_name)
- end
- #--------------------------------------------------------------------------
- # ● 跳过指令
- # 如果下一句事件指令的缩进比当前深的话,跳过当前指令。
- #--------------------------------------------------------------------------
- def command_skip
- @index += 1 while @list[@index + 1].indent > @indent
- end
- #--------------------------------------------------------------------------
- # ● 获取下一句事件指令的代码
- #--------------------------------------------------------------------------
- def next_event_code
- @list[@index + 1].code
- end
- #--------------------------------------------------------------------------
- # ● 获取事件
- # param : -1 则玩家、0 则本事件、其他 则是指定的事件ID
- #--------------------------------------------------------------------------
- def get_character(param)
- if $game_party.in_battle
- nil
- elsif param < 0
- $game_player
- else
- events = same_map? ? $game_map.events : {}
- events[param > 0 ? param : @event_id]
- end
- end
- #--------------------------------------------------------------------------
- # ● 计算操作的数值
- # operation : 操作行为(0:增加 1:减少)
- # operand_type : 操作类型(0:常量 1:变量)
- # operand : 操作数值(数值 或 变量 的 ID)
- #--------------------------------------------------------------------------
- def operate_value(operation, operand_type, operand)
- value = operand_type == 0 ? operand : $game_variables[operand]
- operation == 0 ? value : -value
- end
- #--------------------------------------------------------------------------
- # ● 等待
- #--------------------------------------------------------------------------
- def wait(duration)
- duration.times { Fiber.yield }
- end
- #--------------------------------------------------------------------------
- # ● 等待显示信息
- #--------------------------------------------------------------------------
- def wait_for_message
- Fiber.yield while $game_message.busy?
- end
- #--------------------------------------------------------------------------
- # ● 显示文字
- #--------------------------------------------------------------------------
- def command_101
- wait_for_message
- $game_message.face_name = @params[0]
- $game_message.face_index = @params[1]
- $game_message.background = @params[2]
- $game_message.position = @params[3]
- while next_event_code == 401 # 文字数据
- @index += 1
- $game_message.add(@list[@index].parameters[0])
- end
- case next_event_code
- when 102 # 显示选项
- @index += 1
- setup_choices(@list[@index].parameters)
- when 103 # 数值输入的处理
- @index += 1
- setup_num_input(@list[@index].parameters)
- when 104 # 物品选择的处理
- @index += 1
- setup_item_choice(@list[@index].parameters)
- end
- wait_for_message
- end
- #--------------------------------------------------------------------------
- # ● 显示选项
- #--------------------------------------------------------------------------
- def command_102
- wait_for_message
- setup_choices(@params)
- Fiber.yield while $game_message.choice?
- end
- #--------------------------------------------------------------------------
- # ● 设置选项
- #--------------------------------------------------------------------------
- def setup_choices(params)
- params[0].each {|s| $game_message.choices.push(s) }
- $game_message.choice_cancel_type = params[1]
- $game_message.choice_proc = Proc.new {|n| @branch[@indent] = n }
- end
- #--------------------------------------------------------------------------
- # ● [**] 的时候
- #--------------------------------------------------------------------------
- def command_402
- command_skip if @branch[@indent] != @params[0]
- end
- #--------------------------------------------------------------------------
- # ● 取消的时候
- #--------------------------------------------------------------------------
- def command_403
- command_skip if @branch[@indent] != 4
- end
- #--------------------------------------------------------------------------
- # ● 数值输入的处理
- #--------------------------------------------------------------------------
- def command_103
- wait_for_message
- setup_num_input(@params)
- Fiber.yield while $game_message.num_input?
- end
- #--------------------------------------------------------------------------
- # ● 设置数值输入
- #--------------------------------------------------------------------------
- def setup_num_input(params)
- $game_message.num_input_variable_id = params[0]
- $game_message.num_input_digits_max = params[1]
- end
- #--------------------------------------------------------------------------
- # ● 物品选择的处理
- #--------------------------------------------------------------------------
- def command_104
- wait_for_message
- setup_item_choice(@params)
- Fiber.yield while $game_message.item_choice?
- end
- #--------------------------------------------------------------------------
- # ● 设置物品选择
- #--------------------------------------------------------------------------
- def setup_item_choice(params)
- $game_message.item_choice_variable_id = params[0]
- end
- #--------------------------------------------------------------------------
- # ● 显示滚动文字
- #--------------------------------------------------------------------------
- def command_105
- Fiber.yield while $game_message.visible
- $game_message.scroll_mode = true
- $game_message.scroll_speed = @params[0]
- $game_message.scroll_no_fast = @params[1]
- while next_event_code == 405
- @index += 1
- $game_message.add(@list[@index].parameters[0])
- end
- wait_for_message
- end
- #--------------------------------------------------------------------------
- # ● 添加注释
- #--------------------------------------------------------------------------
- def command_108
- @comments = [@params[0]]
- while next_event_code == 408
- @index += 1
- @comments.push(@list[@index].parameters[0])
- end
- end
- #--------------------------------------------------------------------------
- # ● 条件分歧
- #--------------------------------------------------------------------------
- def command_111
- result = false
- case @params[0]
- when 0 # 开关
- result = ($game_switches[@params[1]] == (@params[2] == 0))
- when 1 # 变量
- value1 = $game_variables[@params[1]]
- if @params[2] == 0
- value2 = @params[3]
- else
- value2 = $game_variables[@params[3]]
- end
- case @params[4]
- when 0 # 等于
- result = (value1 == value2)
- when 1 # 以上
- result = (value1 >= value2)
- when 2 # 以下
- result = (value1 <= value2)
- when 3 # 大于
- result = (value1 > value2)
- when 4 # 小于
- result = (value1 < value2)
- when 5 # 不等于
- result = (value1 != value2)
- end
- when 2 # 独立开关
- if @event_id > 0
- key = [@map_id, @event_id, @params[1]]
- result = ($game_self_switches[key] == (@params[2] == 0))
- end
- when 3 # 计时器
- if $game_timer.working?
- if @params[2] == 0
- result = ($game_timer.sec >= @params[1])
- else
- result = ($game_timer.sec <= @params[1])
- end
- end
- when 4 # 角色
- actor = $game_actors[@params[1]]
- if actor
- case @params[2]
- when 0 # 在队伍时
- result = ($game_party.members.include?(actor))
- when 1 # 名字
- result = (actor.name == @params[3])
- when 2 # 职业
- result = (actor.class_id == @params[3])
- when 3 # 技能
- result = (actor.skill_learn?($data_skills[@params[3]]))
- when 4 # 武器
- result = (actor.weapons.include?($data_weapons[@params[3]]))
- when 5 # 护甲
- result = (actor.armors.include?($data_armors[@params[3]]))
- when 6 # 状态
- result = (actor.state?(@params[3]))
- end
- end
- when 5 # 敌人
- enemy = $game_troop.members[@params[1]]
- if enemy
- case @params[2]
- when 0 # 出现
- result = (enemy.alive?)
- when 1 # 状态
- result = (enemy.state?(@params[3]))
- end
- end
- when 6 # 事件
- character = get_character(@params[1])
- if character
- result = (character.direction == @params[2])
- end
- when 7 # 金钱
- case @params[2]
- when 0 # 以上
- result = ($game_party.gold >= @params[1])
- when 1 # 以下
- result = ($game_party.gold <= @params[1])
- when 2 # 低于
- result = ($game_party.gold < @params[1])
- end
- when 8 # 物品
- result = $game_party.has_item?($data_items[@params[1]])
- when 9 # 武器
- result = $game_party.has_item?($data_weapons[@params[1]], @params[2])
- when 10 # 护甲
- result = $game_party.has_item?($data_armors[@params[1]], @params[2])
- when 11 # 按下按钮
- result = Input.press?(@params[1])
- when 12 # 脚本
- result = eval(@params[1])
- when 13 # 载具
- result = ($game_player.vehicle == $game_map.vehicles[@params[1]])
- end
- @branch[@indent] = result
- command_skip if !@branch[@indent]
- end
- #--------------------------------------------------------------------------
- # ● 除此之外
- #--------------------------------------------------------------------------
- def command_411
- command_skip if @branch[@indent]
- end
- #--------------------------------------------------------------------------
- # ● 循环
- #--------------------------------------------------------------------------
- def command_112
- end
- #--------------------------------------------------------------------------
- # ● 重复
- #--------------------------------------------------------------------------
- def command_413
- begin
- @index -= 1
- end until @list[@index].indent == @indent
- end
- #--------------------------------------------------------------------------
- # ● 跳出循环
- #--------------------------------------------------------------------------
- def command_113
- loop do
- @index += 1
- return if @index >= @list.size - 1
- return if @list[@index].code == 413 && @list[@index].indent < @indent
- end
- end
- #--------------------------------------------------------------------------
- # ● 中止事件处理
- #--------------------------------------------------------------------------
- def command_115
- @index = @list.size
- end
- #--------------------------------------------------------------------------
- # ● 公共事件
- #--------------------------------------------------------------------------
- def command_117
- common_event = $data_common_events[@params[0]]
- if common_event
- child = Game_Interpreter.new(@depth + 1)
- child.setup(common_event.list, same_map? ? @event_id : 0)
- child.run
- end
- end
- #--------------------------------------------------------------------------
- # ● 添加标签
- #--------------------------------------------------------------------------
- def command_118
- end
- #--------------------------------------------------------------------------
- # ● 转至标签
- #--------------------------------------------------------------------------
- def command_119
- label_name = @params[0]
- @list.size.times do |i|
- if @list[i].code == 118 && @list[i].parameters[0] == label_name
- @index = i
- return
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 操作开关
- #--------------------------------------------------------------------------
- def command_121
- (@params[0]..@params[1]).each do |i|
- $game_switches[i] = (@params[2] == 0)
- end
- end
- #--------------------------------------------------------------------------
- # ● 变量操作
- #--------------------------------------------------------------------------
- def command_122
- value = 0
- case @params[3] # 操作方式
- when 0 # 常量
- value = @params[4]
- when 1 # 变量
- value = $game_variables[@params[4]]
- when 2 # 随机数
- value = @params[4] + rand(@params[5] - @params[4] + 1)
- when 3 # 游戏数据
- value = game_data_operand(@params[4], @params[5], @params[6])
- when 4 # 脚本
- value = eval(@params[4])
- end
- (@params[0]..@params[1]).each do |i|
- operate_variable(i, @params[2], value)
- end
- end
- #--------------------------------------------------------------------------
- # ● 获取变量操作用的游戏数据
- #--------------------------------------------------------------------------
- def game_data_operand(type, param1, param2)
- case type
- when 0 # 物品
- return $game_party.item_number($data_items[param1])
- when 1 # 武器
- return $game_party.item_number($data_weapons[param1])
- when 2 # 护甲
- return $game_party.item_number($data_armors[param1])
- when 3 # 角色
- actor = $game_actors[param1]
- if actor
- case param2
- when 0 # 等级
- return actor.level
- when 1 # 经验值
- return actor.exp
- when 2 # HP
- return actor.hp
- when 3 # MP
- return actor.mp
- when 4..11 # 普通能力值
- return actor.param(param2 - 4)
- end
- end
- when 4 # 敌人
- enemy = $game_troop.members[param1]
- if enemy
- case param2
- when 0 # HP
- return enemy.hp
- when 1 # MP
- return enemy.mp
- when 2..9 # 普通能力值
- return enemy.param(param2 - 2)
- end
- end
- when 5 # 地图人物
- character = get_character(param1)
- if character
- case param2
- when 0 # X 坐标
- return character.x
- when 1 # Y 坐标
- return character.y
- when 2 # 方向
- return character.direction
- when 3 # 画面 X 坐标
- return character.screen_x
- when 4 # 画面 Y 坐标
- return character.screen_y
- end
- end
- when 6 # 队伍
- actor = $game_party.members[param1]
- return actor ? actor.id : 0
- when 7 # 其他
- case param1
- when 0 # 地图 ID
- return $game_map.map_id
- when 1 # 队伍人数
- return $game_party.members.size
- when 2 # 金钱
- return $game_party.gold
- when 3 # 步数
- return $game_party.steps
- when 4 # 游戏时间
- return Graphics.frame_count / Graphics.frame_rate
- when 5 # 计时器
- return $game_timer.sec
- when 6 # 存档回数
- return $game_system.save_count
- when 7 # 战斗回数
- return $game_system.battle_count
- end
- end
- return 0
- end
- #--------------------------------------------------------------------------
- # ● 操作变量
- #--------------------------------------------------------------------------
- def operate_variable(variable_id, operation_type, value)
- begin
- case operation_type
- when 0 # 代入
- $game_variables[variable_id] = value
- when 1 # 加法
- $game_variables[variable_id] += value
- when 2 # 减法
- $game_variables[variable_id] -= value
- when 3 # 乘法
- $game_variables[variable_id] *= value
- when 4 # 除法
- $game_variables[variable_id] /= value
- when 5 # 取余
- $game_variables[variable_id] %= value
- end
- rescue
- $game_variables[variable_id] = 0
- end
- end
- #--------------------------------------------------------------------------
- # ● 操作独立开关
- #--------------------------------------------------------------------------
- def command_123
- if @event_id > 0
- key = [@map_id, @event_id, @params[0]]
- $game_self_switches[key] = (@params[1] == 0)
- end
- end
- #--------------------------------------------------------------------------
- # ● 操作计时器
- #--------------------------------------------------------------------------
- def command_124
- if @params[0] == 0 # 开始
- $game_timer.start(@params[1] * Graphics.frame_rate)
- else # 停止
- $game_timer.stop
- end
- end
- #--------------------------------------------------------------------------
- # ● 增减持有金钱
- #--------------------------------------------------------------------------
- def command_125
- value = operate_value(@params[0], @params[1], @params[2])
- $game_party.gain_gold(value)
- end
- #--------------------------------------------------------------------------
- # ● 增减物品
- #--------------------------------------------------------------------------
- def command_126
- value = operate_value(@params[1], @params[2], @params[3])
- $game_party.gain_item($data_items[@params[0]], value)
- end
- #--------------------------------------------------------------------------
- # ● 增减武器
- #--------------------------------------------------------------------------
- def command_127
- value = operate_value(@params[1], @params[2], @params[3])
- $game_party.gain_item($data_weapons[@params[0]], value, @params[4])
- end
- #--------------------------------------------------------------------------
- # ● 增减护甲
- #--------------------------------------------------------------------------
- def command_128
- value = operate_value(@params[1], @params[2], @params[3])
- $game_party.gain_item($data_armors[@params[0]], value, @params[4])
- end
- #--------------------------------------------------------------------------
- # ● 队伍管理
- #--------------------------------------------------------------------------
- def command_129
- actor = $game_actors[@params[0]]
- if actor
- if @params[1] == 0 # 入队
- if @params[2] == 1 # 初始化
- $game_actors[@params[0]].setup(@params[0])
- end
- $game_party.add_actor(@params[0])
- else # 离队
- $game_party.remove_actor(@params[0])
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 更改战斗 BGM
- #--------------------------------------------------------------------------
- def command_132
- $game_system.battle_bgm = @params[0]
- end
- #--------------------------------------------------------------------------
- # ● 更改战斗结束 ME
- #--------------------------------------------------------------------------
- def command_133
- $game_system.battle_end_me = @params[0]
- end
- #--------------------------------------------------------------------------
- # ● 设置禁用存档
- #--------------------------------------------------------------------------
- def command_134
- $game_system.save_disabled = (@params[0] == 0)
- end
- #--------------------------------------------------------------------------
- # ● 设置禁用菜单
- #--------------------------------------------------------------------------
- def command_135
- $game_system.menu_disabled = (@params[0] == 0)
- end
- #--------------------------------------------------------------------------
- # ● 设置禁用遇敌
- #--------------------------------------------------------------------------
- def command_136
- $game_system.encounter_disabled = (@params[0] == 0)
- $game_player.make_encounter_count
- end
- #--------------------------------------------------------------------------
- # ● 设置禁用整队
- #--------------------------------------------------------------------------
- def command_137
- $game_system.formation_disabled = (@params[0] == 0)
- end
- #--------------------------------------------------------------------------
- # ● 更改窗口色调
- #--------------------------------------------------------------------------
- def command_138
- $game_system.window_tone = @params[0]
- end
- #--------------------------------------------------------------------------
- # ● 场所移动
- #--------------------------------------------------------------------------
- def command_201
- return if $game_party.in_battle
- Fiber.yield while $game_player.transfer? || $game_message.visible
- if @params[0] == 0 # 直接指定
- map_id = @params[1]
- x = @params[2]
- y = @params[3]
- else # 变量指定
- map_id = $game_variables[@params[1]]
- x = $game_variables[@params[2]]
- y = $game_variables[@params[3]]
- end
- $game_player.reserve_transfer(map_id, x, y, @params[4])
- $game_temp.fade_type = @params[5]
- Fiber.yield while $game_player.transfer?
- end
- #--------------------------------------------------------------------------
- # ● 设置载具位置
- #--------------------------------------------------------------------------
- def command_202
- if @params[1] == 0 # 直接指定
- map_id = @params[2]
- x = @params[3]
- y = @params[4]
- else # 变量指定
- map_id = $game_variables[@params[2]]
- x = $game_variables[@params[3]]
- y = $game_variables[@params[4]]
- end
- vehicle = $game_map.vehicles[@params[0]]
- vehicle.set_location(map_id, x, y) if vehicle
- end
- #--------------------------------------------------------------------------
- # ● 设置事件的位置
- #--------------------------------------------------------------------------
- def command_203
- character = get_character(@params[0])
- if character
- if @params[1] == 0 # 直接指定
- character.moveto(@params[2], @params[3])
- elsif @params[1] == 1 # 变量指定
- new_x = $game_variables[@params[2]]
- new_y = $game_variables[@params[3]]
- character.moveto(new_x, new_y)
- else # 与其他事件交换
- character2 = get_character(@params[2])
- character.swap(character2) if character2
- end
- character.set_direction(@params[4]) if @params[4] > 0
- end
- end
- #--------------------------------------------------------------------------
- # ● 地图卷动
- #--------------------------------------------------------------------------
- def command_204
- return if $game_party.in_battle
- Fiber.yield while $game_map.scrolling?
- $game_map.start_scroll(@params[0], @params[1], @params[2])
- end
- #--------------------------------------------------------------------------
- # ● 设置移动路径
- #--------------------------------------------------------------------------
- def command_205
- $game_map.refresh if $game_map.need_refresh
- character = get_character(@params[0])
- if character
- character.force_move_route(@params[1])
- Fiber.yield while character.move_route_forcing if @params[1].wait
- end
- end
- #--------------------------------------------------------------------------
- # ● 载具的乘降
- #--------------------------------------------------------------------------
- def command_206
- $game_player.get_on_off_vehicle
- end
- #--------------------------------------------------------------------------
- # ● 更改透明状态
- #--------------------------------------------------------------------------
- def command_211
- $game_player.transparent = (@params[0] == 0)
- end
- #--------------------------------------------------------------------------
- # ● 显示动画
- #--------------------------------------------------------------------------
- def command_212
- character = get_character(@params[0])
- if character
- character.animation_id = @params[1]
- Fiber.yield while character.animation_id > 0 if @params[2]
- end
- end
- #--------------------------------------------------------------------------
- # ● 显示心情图标
- #--------------------------------------------------------------------------
- def command_213
- character = get_character(@params[0])
- if character
- character.balloon_id = @params[1]
- Fiber.yield while character.balloon_id > 0 if @params[2]
- end
- end
- #--------------------------------------------------------------------------
- # ● 暂时消除事件
- #--------------------------------------------------------------------------
- def command_214
- $game_map.events[@event_id].erase if same_map? && @event_id > 0
- end
- #--------------------------------------------------------------------------
- # ● 更改队列前进
- #--------------------------------------------------------------------------
- def command_216
- $game_player.followers.visible = (@params[0] == 0)
- $game_player.refresh
- end
- #--------------------------------------------------------------------------
- # ● 集合队伍成员
- #--------------------------------------------------------------------------
- def command_217
- return if $game_party.in_battle
- $game_player.followers.gather
- Fiber.yield until $game_player.followers.gather?
- end
- #--------------------------------------------------------------------------
- # ● 淡出画面
- #--------------------------------------------------------------------------
- def command_221
- Fiber.yield while $game_message.visible
- screen.start_fadeout(30)
- wait(30)
- end
- #--------------------------------------------------------------------------
- # ● 淡入画面
- #--------------------------------------------------------------------------
- def command_222
- Fiber.yield while $game_message.visible
- screen.start_fadein(30)
- wait(30)
- end
- #--------------------------------------------------------------------------
- # ● 更改画面的色调
- #--------------------------------------------------------------------------
- def command_223
- screen.start_tone_change(@params[0], @params[1])
- wait(@params[1]) if @params[2]
- end
- #--------------------------------------------------------------------------
- # ● 画面闪烁
- #--------------------------------------------------------------------------
- def command_224
- screen.start_flash(@params[0], @params[1])
- wait(@params[1]) if @params[2]
- end
- #--------------------------------------------------------------------------
- # ● 画面震动
- #--------------------------------------------------------------------------
- def command_225
- screen.start_shake(@params[0], @params[1], @params[2])
- wait(@params[1]) if @params[2]
- end
- #--------------------------------------------------------------------------
- # ● 等待
- #--------------------------------------------------------------------------
- def command_230
- wait(@params[0])
- end
- #--------------------------------------------------------------------------
- # ● 显示图片
- #--------------------------------------------------------------------------
- def command_231
- if @params[3] == 0 # 直接指定
- x = @params[4]
- y = @params[5]
- else # 变量指定
- x = $game_variables[@params[4]]
- y = $game_variables[@params[5]]
- end
- screen.pictures[@params[0]].show(@params[1], @params[2],
- x, y, @params[6], @params[7], @params[8], @params[9])
- end
- #--------------------------------------------------------------------------
- # ● 移动图片
- #--------------------------------------------------------------------------
- def command_232
- if @params[3] == 0 # 直接指定
- x = @params[4]
- y = @params[5]
- else # 变量指定
- x = $game_variables[@params[4]]
- y = $game_variables[@params[5]]
- end
- screen.pictures[@params[0]].move(@params[2], x, y, @params[6],
- @params[7], @params[8], @params[9], @params[10])
- wait(@params[10]) if @params[11]
- end
- #--------------------------------------------------------------------------
- # ● 旋转图片
- #--------------------------------------------------------------------------
- def command_233
- screen.pictures[@params[0]].rotate(@params[1])
- end
- #--------------------------------------------------------------------------
- # ● 更改图片的色调
- #--------------------------------------------------------------------------
- def command_234
- screen.pictures[@params[0]].start_tone_change(@params[1], @params[2])
- wait(@params[2]) if @params[3]
- end
- #--------------------------------------------------------------------------
- # ● 消除图片
- #--------------------------------------------------------------------------
- def command_235
- screen.pictures[@params[0]].erase
- end
- #--------------------------------------------------------------------------
- # ● 设置天气
- #--------------------------------------------------------------------------
- def command_236
- return if $game_party.in_battle
- screen.change_weather(@params[0], @params[1], @params[2])
- wait(@params[2]) if @params[3]
- end
- #--------------------------------------------------------------------------
- # ● 播放 BGM
- #--------------------------------------------------------------------------
- def command_241
- @params[0].play
- end
- #--------------------------------------------------------------------------
- # ● 淡出 BGM
- #--------------------------------------------------------------------------
- def command_242
- RPG::BGM.fade(@params[0] * 1000)
- end
- #--------------------------------------------------------------------------
- # ● 记忆 BGM
- #--------------------------------------------------------------------------
- def command_243
- $game_system.save_bgm
- end
- #--------------------------------------------------------------------------
- # ● 恢复 BGM
- #--------------------------------------------------------------------------
- def command_244
- $game_system.replay_bgm
- end
- #--------------------------------------------------------------------------
- # ● 播放 BGS
- #--------------------------------------------------------------------------
- def command_245
- @params[0].play
- end
- #--------------------------------------------------------------------------
- # ● 淡出 BGS
- #--------------------------------------------------------------------------
- def command_246
- RPG::BGS.fade(@params[0] * 1000)
- end
- #--------------------------------------------------------------------------
- # ● 播放 ME
- #--------------------------------------------------------------------------
- def command_249
- @params[0].play
- end
- #--------------------------------------------------------------------------
- # ● 播放 SE
- #--------------------------------------------------------------------------
- def command_250
- @params[0].play
- end
- #--------------------------------------------------------------------------
- # ● 停止 SE
- #--------------------------------------------------------------------------
- def command_251
- RPG::SE.stop
- end
- #--------------------------------------------------------------------------
- # ● 播放影像
- #--------------------------------------------------------------------------
- def command_261
- Fiber.yield while $game_message.visible
- Fiber.yield
- name = @params[0]
- Graphics.play_movie('Movies/' + name) unless name.empty?
- end
- #--------------------------------------------------------------------------
- # ● 更改地图名称显示
- #--------------------------------------------------------------------------
- def command_281
- $game_map.name_display = (@params[0] == 0)
- end
- #--------------------------------------------------------------------------
- # ● 更改图块组
- #--------------------------------------------------------------------------
- def command_282
- $game_map.change_tileset(@params[0])
- end
- #--------------------------------------------------------------------------
- # ● 更改战场背景
- #--------------------------------------------------------------------------
- def command_283
- $game_map.change_battleback(@params[0], @params[1])
- end
- #--------------------------------------------------------------------------
- # ● 更改远景
- #--------------------------------------------------------------------------
- def command_284
- $game_map.change_parallax(@params[0], @params[1], @params[2],
- @params[3], @params[4])
- end
- #--------------------------------------------------------------------------
- # ● 获取指定位置的信息
- #--------------------------------------------------------------------------
- def command_285
- if @params[2] == 0 # 直接指定
- x = @params[3]
- y = @params[4]
- else # 变量指定
- x = $game_variables[@params[3]]
- y = $game_variables[@params[4]]
- end
- case @params[1]
- when 0 # 地形标志
- value = $game_map.terrain_tag(x, y)
- when 1 # 事件 ID
- value = $game_map.event_id_xy(x, y)
- when 2..4 # 图块 ID
- value = $game_map.tile_id(x, y, @params[1] - 2)
- else # 区域 ID
- value = $game_map.region_id(x, y)
- end
- $game_variables[@params[0]] = value
- end
- #--------------------------------------------------------------------------
- # ● 战斗的处理
- #--------------------------------------------------------------------------
- def command_301
- return if $game_party.in_battle
- if @params[0] == 0 # 直接指定
- troop_id = @params[1]
- elsif @params[0] == 1 # 变量指定
- troop_id = $game_variables[@params[1]]
- else # 地图指定的敌群
- troop_id = $game_player.make_encounter_troop_id
- end
- if $data_troops[troop_id]
- BattleManager.setup(troop_id, @params[2], @params[3])
- BattleManager.event_proc = Proc.new {|n| @branch[@indent] = n }
- $game_player.make_encounter_count
- SceneManager.call(Scene_Battle)
- end
- Fiber.yield
- end
- #--------------------------------------------------------------------------
- # ● 胜利的时候
- #--------------------------------------------------------------------------
- def command_601
- command_skip if @branch[@indent] != 0
- end
- #--------------------------------------------------------------------------
- # ● 撤退的时候
- #--------------------------------------------------------------------------
- def command_602
- command_skip if @branch[@indent] != 1
- end
- #--------------------------------------------------------------------------
- # ● 全灭的时候
- #--------------------------------------------------------------------------
- def command_603
- command_skip if @branch[@indent] != 2
- end
- #--------------------------------------------------------------------------
- # ● 商店的处理
- #--------------------------------------------------------------------------
- def command_302
- return if $game_party.in_battle
- goods = [@params]
- while next_event_code == 605
- @index += 1
- goods.push(@list[@index].parameters)
- end
- SceneManager.call(Scene_Shop)
- SceneManager.scene.prepare(goods, @params[4])
- Fiber.yield
- end
- #--------------------------------------------------------------------------
- # ● 名字输入的处理
- #--------------------------------------------------------------------------
- def command_303
- return if $game_party.in_battle
- if $data_actors[@params[0]]
- SceneManager.call(Scene_Name)
- SceneManager.scene.prepare(@params[0], @params[1])
- Fiber.yield
- end
- end
- #--------------------------------------------------------------------------
- # ● 增减 HP
- #--------------------------------------------------------------------------
- def command_311
- value = operate_value(@params[2], @params[3], @params[4])
- iterate_actor_var(@params[0], @params[1]) do |actor|
- next if actor.dead?
- actor.change_hp(value, @params[5])
- actor.perform_collapse_effect if actor.dead?
- end
- SceneManager.goto(Scene_Gameover) if $game_party.all_dead?
- end
- #--------------------------------------------------------------------------
- # ● 增减 MP
- #--------------------------------------------------------------------------
- def command_312
- value = operate_value(@params[2], @params[3], @params[4])
- iterate_actor_var(@params[0], @params[1]) do |actor|
- actor.mp += value
- end
- end
- #--------------------------------------------------------------------------
- # ● 更改状态
- #--------------------------------------------------------------------------
- def command_313
- iterate_actor_var(@params[0], @params[1]) do |actor|
- already_dead = actor.dead?
- if @params[2] == 0
- actor.add_state(@params[3])
- else
- actor.remove_state(@params[3])
- end
- actor.perform_collapse_effect if actor.dead? && !already_dead
- end
- end
- #--------------------------------------------------------------------------
- # ● 完全恢复
- #--------------------------------------------------------------------------
- def command_314
- iterate_actor_var(@params[0], @params[1]) do |actor|
- actor.recover_all
- end
- end
- #--------------------------------------------------------------------------
- # ● 增减经验值
- #--------------------------------------------------------------------------
- def command_315
- value = operate_value(@params[2], @params[3], @params[4])
- iterate_actor_var(@params[0], @params[1]) do |actor|
- actor.change_exp(actor.exp + value, @params[5])
- end
- end
- #--------------------------------------------------------------------------
- # ● 增减等级
- #--------------------------------------------------------------------------
- def command_316
- value = operate_value(@params[2], @params[3], @params[4])
- iterate_actor_var(@params[0], @params[1]) do |actor|
- actor.change_level(actor.level + value, @params[5])
- end
- end
- #--------------------------------------------------------------------------
- # ● 增减能力值
- #--------------------------------------------------------------------------
- def command_317
- value = operate_value(@params[3], @params[4], @params[5])
- iterate_actor_var(@params[0], @params[1]) do |actor|
- actor.add_param(@params[2], value)
- end
- end
- #--------------------------------------------------------------------------
- # ● 增减技能
- #--------------------------------------------------------------------------
- def command_318
- iterate_actor_var(@params[0], @params[1]) do |actor|
- if @params[2] == 0
- actor.learn_skill(@params[3])
- else
- actor.forget_skill(@params[3])
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 更换装备
- #--------------------------------------------------------------------------
- def command_319
- actor = $game_actors[@params[0]]
- actor.change_equip_by_id(@params[1], @params[2]) if actor
- end
- #--------------------------------------------------------------------------
- # ● 更改名字
- #--------------------------------------------------------------------------
- def command_320
- actor = $game_actors[@params[0]]
- actor.name = @params[1] if actor
- end
- #--------------------------------------------------------------------------
- # ● 更改职业
- #--------------------------------------------------------------------------
- def command_321
- actor = $game_actors[@params[0]]
- actor.change_class(@params[1]) if actor && $data_classes[@params[1]]
- end
- #--------------------------------------------------------------------------
- # ● 更改角色图像
- #--------------------------------------------------------------------------
- def command_322
- actor = $game_actors[@params[0]]
- if actor
- actor.set_graphic(@params[1], @params[2], @params[3], @params[4])
- end
- $game_player.refresh
- end
- #--------------------------------------------------------------------------
- # ● 更改载具的图像
- #--------------------------------------------------------------------------
- def command_323
- vehicle = $game_map.vehicles[@params[0]]
- vehicle.set_graphic(@params[1], @params[2]) if vehicle
- end
- #--------------------------------------------------------------------------
- # ● 更改称号
- #--------------------------------------------------------------------------
- def command_324
- actor = $game_actors[@params[0]]
- actor.nickname = @params[1] if actor
- end
- #--------------------------------------------------------------------------
- # ● 增减敌人的 HP
- #--------------------------------------------------------------------------
- def command_331
- value = operate_value(@params[1], @params[2], @params[3])
- iterate_enemy_index(@params[0]) do |enemy|
- return if enemy.dead?
- enemy.change_hp(value, @params[4])
- enemy.perform_collapse_effect if enemy.dead?
- end
- end
- #--------------------------------------------------------------------------
- # ● 增减敌人的 MP
- #--------------------------------------------------------------------------
- def command_332
- value = operate_value(@params[1], @params[2], @params[3])
- iterate_enemy_index(@params[0]) do |enemy|
- enemy.mp += value
- end
- end
- #--------------------------------------------------------------------------
- # ● 更改敌人的状态
- #--------------------------------------------------------------------------
- def command_333
- iterate_enemy_index(@params[0]) do |enemy|
- already_dead = enemy.dead?
- if @params[1] == 0
- enemy.add_state(@params[2])
- else
- enemy.remove_state(@params[2])
- end
- enemy.perform_collapse_effect if enemy.dead? && !already_dead
- end
- end
- #--------------------------------------------------------------------------
- # ● 敌人完全恢复
- #--------------------------------------------------------------------------
- def command_334
- iterate_enemy_index(@params[0]) do |enemy|
- enemy.recover_all
- end
- end
- #--------------------------------------------------------------------------
- # ● 敌人出现
- #--------------------------------------------------------------------------
- def command_335
- iterate_enemy_index(@params[0]) do |enemy|
- enemy.appear
- $game_troop.make_unique_names
- end
- end
- #--------------------------------------------------------------------------
- # ● 敌人变身
- #--------------------------------------------------------------------------
- def command_336
- iterate_enemy_index(@params[0]) do |enemy|
- enemy.transform(@params[1])
- $game_troop.make_unique_names
- end
- end
- #--------------------------------------------------------------------------
- # ● 显示战斗动画
- #--------------------------------------------------------------------------
- def command_337
- iterate_enemy_index(@params[0]) do |enemy|
- enemy.animation_id = @params[1] if enemy.alive?
- end
- end
- #--------------------------------------------------------------------------
- # ● 强制战斗行动
- #--------------------------------------------------------------------------
- def command_339
- iterate_battler(@params[0], @params[1]) do |battler|
- next if battler.death_state?
- battler.force_action(@params[2], @params[3])
- BattleManager.force_action(battler)
- Fiber.yield while BattleManager.action_forced?
- end
- end
- #--------------------------------------------------------------------------
- # ● 中止战斗
- #--------------------------------------------------------------------------
- def command_340
- BattleManager.abort
- Fiber.yield
- end
- #--------------------------------------------------------------------------
- # ● 打开菜单画面
- #--------------------------------------------------------------------------
- def command_351
- return if $game_party.in_battle
- SceneManager.call(Scene_Menu)
- Window_MenuCommand::init_command_position
- Fiber.yield
- end
- #--------------------------------------------------------------------------
- # ● 打开存档画面
- #--------------------------------------------------------------------------
- def command_352
- return if $game_party.in_battle
- SceneManager.call(Scene_Save)
- Fiber.yield
- end
- #--------------------------------------------------------------------------
- # ● 游戏结束
- #--------------------------------------------------------------------------
- def command_353
- SceneManager.goto(Scene_Gameover)
- Fiber.yield
- end
- #--------------------------------------------------------------------------
- # ● 返回标题画面
- #--------------------------------------------------------------------------
- def command_354
- SceneManager.goto(Scene_Title)
- Fiber.yield
- end
- #--------------------------------------------------------------------------
- # ● 脚本
- #--------------------------------------------------------------------------
- def command_355
- script = @list[@index].parameters[0] + "\n"
- while next_event_code == 655
- @index += 1
- script += @list[@index].parameters[0] + "\n"
- end
- eval(script)
- end
- end
复制代码 |
|