Project1
标题:
求教:脚本出错!
[打印本页]
作者:
wei19840826
时间:
2012-9-18 00:08
标题:
求教:脚本出错!
本帖最后由 wei19840826 于 2012-9-18 22:39 编辑
下载了这个整合系统
http://rpg.blue/thread-243669-1-1.html
开始游戏就跳错误框
完全不懂脚本 求破!!!!
#==============================================================================
# ■ Game_Character_re
#------------------------------------------------------------------------------
# キャラクターを扱うクラスです。このクラスは Game_Player クラスと Game_Event
# クラスのスーパークラスとして使用されます。(再定義)
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
# ● キャラクター衝突判定
# x : X 座標
# y : Y 座標
# プレイヤーと乗り物を含め、通常キャラの衝突を検出する。
#--------------------------------------------------------------------------
def collide_with_characters?(x, y)
for event in $game_map.events_xy(x, y) # イベントの座標と一致
unless event.through # すり抜け OFF?
return true if self.is_a?(Game_Event) # 自分がイベント
return true if event.priority_type == 1 # 相手が通常キャラ
end
end
if @priority_type == 1 # 自分が通常キャラ
return true if $game_player.pos_nt?(x, y) # プレイヤーの座標と一致
return true if $game_subplayer1.pos_nt?(x,y) # サブプレイヤーの座標と一致#追加
return true if $game_subplayer2.pos_nt?(x,y) # サブプレイヤーの座標と一致#追加
return true if $game_subplayer3.pos_nt?(x,y) # サブプレイヤーの座標と一致#追加
return true if $game_map.boat.pos_nt?(x, y) # 小型船の座標と一致
return true if $game_map.ship.pos_nt?(x, y) # 大型船の座標と一致
end
return false
end
end
#==============================================================================
# ■ Game_Player_re
#------------------------------------------------------------------------------
# プレイヤーを扱うクラスです。イベントの起動判定や、マップのスクロールなどの
# 機能を持っています。このクラスのインスタンスは $game_player で参照されます。
# (再定義)
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :gather_on # メンバー集合フラグ #追加
attr_reader :member # 強制動作を行うプレイヤー番号(0:全員)#追加
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super
@vehicle_type = -1
@vehicle_getting_on = false # 乗る動作の途中フラグ
@vehicle_getting_off = false # 降りる動作の途中フラグ
@transferring = false # 場所移動フラグ
@new_map_id = 0 # 移動先 マップ ID
@new_x = 0 # 移動先 X 座標
@new_y = 0 # 移動先 Y 座標
@new_direction = 0 # 移動後の向き
@walking_bgm = nil # 歩行時の BGM 記憶用
@gather_on = false # 追加
@gather_count = 0 # 集合用カウンター #追加
@member = 0
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
if $game_party.members.size == 0
@character_name = ""
@character_index = 0
else
actor = $game_party.members[0] # 先頭のアクターを取得
@character_name = actor.character_name
@character_index = actor.character_index
end
$game_subplayer1.refresh(1)#追加
$game_subplayer2.refresh(2)#追加
$game_subplayer3.refresh(3)#追加
end
#--------------------------------------------------------------------------
# ● 乗り物の処理
#--------------------------------------------------------------------------
def update_vehicle
return unless in_vehicle?
vehicle = $game_map.vehicles[@vehicle_type]
if @vehicle_getting_on # 乗る途中?
if not moving?
@direction = vehicle.direction # 向きを変更
@move_speed = vehicle.speed # 移動速度を変更
@vehicle_getting_on = false # 乗る動作終了
@transparent = true # 透明化
$game_subplayer1.transparent = true # 透明化 #追加
$game_subplayer2.transparent = true # 透明化 #追加
$game_subplayer3.transparent = true # 透明化 #追加
end
elsif @vehicle_getting_off # 降りる途中?
if not moving? and vehicle.altitude == 0
@vehicle_getting_off = false # 降りる動作終了
@vehicle_type = -1 # 乗り物タイプ消去
@transparent = false # 透明を解除
$game_subplayer1.moveto($game_player.x,$game_player.y) #追加
$game_subplayer1.transparent = false # 透明を解除 #追加
$game_subplayer2.moveto($game_player.x,$game_player.y) #追加
$game_subplayer2.transparent = false # 透明を解除 #追加
$game_subplayer3.moveto($game_player.x,$game_player.y) #追加
$game_subplayer3.transparent = false # 透明を解除 #追加
end
else # 乗り物に乗っている
vehicle.sync_with_player # プレイヤーと同時に動かす
end
end
#--------------------------------------------------------------------------
# ● 乗り物から降りる
# 現在乗り物に乗っていることが前提。
#--------------------------------------------------------------------------
def get_off_vehicle
if in_airship? # 飛行船
return unless airship_land_ok?(@x, @y) # 着陸できない?
else # 小型船・大型船
front_x = $game_map.x_with_direction(@x, @direction)
front_y = $game_map.y_with_direction(@y, @direction)
return unless can_walk?(front_x, front_y) # 接岸できない?
end
$game_map.vehicles[@vehicle_type].get_off # 降りる処理
if in_airship? # 飛行船
@direction = 2 # 下を向く
else # 小型船・大型船
force_move_forward # 一歩前進
@transparent = false # 透明を解除
end
@vehicle_getting_off = true # 降りる動作の開始
@move_speed = 4 # 移動速度を戻す
$game_subplayer1.move_speed = 4 # 移動速度を戻す# 追加
$game_subplayer2.move_speed = 4 # 移動速度を戻す# 追加
$game_subplayer3.move_speed = 4 # 移動速度を戻す# 追加
@through = false # すり抜け OFF
@walking_bgm.play # 歩行時の BGM 復帰
make_encounter_count # エンカウント初期化
end
#--------------------------------------------------------------------------
# ● 下に移動
# turn_ok : その場での向き変更を許可
#--------------------------------------------------------------------------
def move_down(turn_ok = true)
pos = [] #追加
if passable?(@x, @y+1) # 通行可能
turn_down
pos.push(@x,@y) #追加
@y = $game_map.round_y(@y+1)
@real_y = (@y-1)*256
$game_subplayer1.move(pos) #追加
increase_steps
@move_failed = false
else # 通行不可能
turn_down if turn_ok
check_event_trigger_touch(@x, @y+1) # 接触イベントの起動判定
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● 左に移動
# turn_ok : その場での向き変更を許可
#--------------------------------------------------------------------------
def move_left(turn_ok = true)
pos = [] #追加
if passable?(@x-1, @y) # 通行可能
turn_left
pos.push(@x,@y) #追加
@x = $game_map.round_x(@x-1)
@real_x = (@x+1)*256
$game_subplayer1.move(pos) #追加
increase_steps
@move_failed = false
else # 通行不可能
turn_left if turn_ok
check_event_trigger_touch(@x-1, @y) # 接触イベントの起動判定
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● 右に移動
# turn_ok : その場での向き変更を許可
#--------------------------------------------------------------------------
def move_right(turn_ok = true)
pos = [] #追加
if passable?(@x+1, @y) # 通行可能
turn_right
pos.push(@x,@y) #追加
@x = $game_map.round_x(@x+1)
@real_x = (@x-1)*256
$game_subplayer1.move(pos) #追加
increase_steps
@move_failed = false
else # 通行不可能
turn_right if turn_ok
check_event_trigger_touch(@x+1, @y) # 接触イベントの起動判定
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● 上に移動
# turn_ok : その場での向き変更を許可
#--------------------------------------------------------------------------
def move_up(turn_ok = true)
pos = [] #追加
if passable?(@x, @y-1) # 通行可能
turn_up
pos.push(@x,@y) #追加
@y = $game_map.round_y(@y-1)
@real_y = (@y+1)*256
$game_subplayer1.move(pos) #追加
increase_steps
@move_failed = false
else # 通行不可能
turn_up if turn_ok
check_event_trigger_touch(@x, @y-1) # 接触イベントの起動判定
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● 左下に移動
#--------------------------------------------------------------------------
def move_lower_left
pos = [] #追加
unless @direction_fix
@direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
end
if (passable?(@x, @y+1) and passable?(@x-1, @y+1)) or
(passable?(@x-1, @y) and passable?(@x-1, @y+1))
pos.push(@x,@y) #追加
@x -= 1
@y += 1
$game_subplayer1.move(pos) #追加
increase_steps
@move_failed = false
else
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● 右下に移動
#--------------------------------------------------------------------------
def move_lower_right
pos = [] #追加
unless @direction_fix
@direction = (@direction == 4 ? 6 : @direction == 8 ? 2 : @direction)
end
if (passable?(@x, @y+1) and passable?(@x+1, @y+1)) or
(passable?(@x+1, @y) and passable?(@x+1, @y+1))
pos.push(@x,@y) #追加
@x += 1
@y += 1
$game_subplayer1.move(pos) #追加
increase_steps
@move_failed = false
else
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● 左上に移動
#--------------------------------------------------------------------------
def move_upper_left
pos = [] #追加
unless @direction_fix
@direction = (@direction == 6 ? 4 : @direction == 2 ? 8 : @direction)
end
if (passable?(@x, @y-1) and passable?(@x-1, @y-1)) or
(passable?(@x-1, @y) and passable?(@x-1, @y-1))
pos.push(@x,@y) #追加
@x -= 1
@y -= 1
$game_subplayer1.move(pos) #追加
increase_steps
@move_failed = false
else
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● 右上に移動
#--------------------------------------------------------------------------
def move_upper_right
pos = [] #追加
unless @direction_fix
@direction = (@direction == 4 ? 6 : @direction == 2 ? 8 : @direction)
end
if (passable?(@x, @y-1) and passable?(@x+1, @y-1)) or
(passable?(@x+1, @y) and passable?(@x+1, @y-1))
pos.push(@x,@y) #追加
@x += 1
@y -= 1
$game_subplayer1.move(pos) #追加
increase_steps
@move_failed = false
else
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● キャラクター衝突判定
# x : X 座標
# y : Y 座標
#--------------------------------------------------------------------------
def collide_with_characters?(x, y)
for event in $game_map.events_xy(x, y) # イベントの座標と一致
unless event.through # すり抜け OFF?
return true if self.is_a?(Game_Event) # 自分がイベント
return true if event.priority_type == 1 # 相手が通常キャラ
end
end
if @priority_type == 1 # 自分が通常キャラ
return true if $game_map.boat.pos_nt?(x, y) # 小型船の座標と一致
return true if $game_map.ship.pos_nt?(x, y) # 大型船の座標と一致
end
return false
end
#--------------------------------------------------------------------------
# ● 移動タイプ : カスタム
#--------------------------------------------------------------------------
def move_type_custom
if stopping?
command = @move_route.list[@move_route_index] # 移動コマンドを取得
@move_failed = false
if command.code == 0 # リストの最後
if @move_route.repeat # [動作を繰り返す]
@move_route_index = 0
elsif @move_route_forcing # 移動ルート強制中
@move_route_forcing = false # 強制を解除
@move_route = @original_move_route # オリジナルを復帰
@move_route_index = @original_move_route_index
@original_move_route = nil
end
else
case command.code
when 1 # 下に移動
move_down
when 2 # 左に移動
move_left
when 3 # 右に移動
move_right
when 4 # 上に移動
move_up
when 5 # 左下に移動
move_lower_left
when 6 # 右下に移動
move_lower_right
when 7 # 左上に移動
move_upper_left
when 8 # 右上に移動
move_upper_right
when 9 # ランダムに移動
move_random
when 10 # プレイヤーに近づく
move_toward_player
when 11 # プレイヤーから遠ざかる
move_away_from_player
when 12 # 一歩前進
move_forward
when 13 # 一歩後退
move_backward
when 14 # ジャンプ
#以下変更
if command.parameters[0]==0 && command.parameters[1]==0
if @member==1
jump(command.parameters[0], command.parameters[1])
elsif @member==2
$game_subplayer1.jump(command.parameters[0], command.parameters[1])
elsif @member==3
$game_subplayer2.jump(command.parameters[0], command.parameters[1])
elsif @member==4
$game_subplayer3.jump(command.parameters[0], command.parameters[1])
elsif @member==0
$game_subplayer3.jump(command.parameters[0], command.parameters[1])
$game_subplayer2.jump(command.parameters[0], command.parameters[1])
$game_subplayer1.jump(command.parameters[0], command.parameters[1])
jump(command.parameters[0], command.parameters[1])
end
else
$game_subplayer3.jump(command.parameters[0], command.parameters[1])
$game_subplayer2.jump(command.parameters[0], command.parameters[1])
$game_subplayer1.jump(command.parameters[0], command.parameters[1])
jump(command.parameters[0], command.parameters[1])
end
#ここまで
when 15 # ウェイト
@wait_count = command.parameters[0] - 1
when 16 # 下を向く
#以下変更
if @member==1
turn_down
elsif @member==2
$game_subplayer1.turn_down
elsif @member==3
$game_subplayer2.turn_down
elsif @member==4
$game_subplayer3.turn_down
elsif @member==0
$game_subplayer3.turn_down
$game_subplayer2.turn_down
$game_subplayer1.turn_down
turn_down
end
#ここまで
when 17 # 左を向く
#以下変更
if @member==1
turn_left
elsif @member==2
$game_subplayer1.turn_left
elsif @member==3
$game_subplayer2.turn_left
elsif @member==4
$game_subplayer3.turn_left
elsif @member==0
$game_subplayer3.turn_left
$game_subplayer2.turn_left
$game_subplayer1.turn_left
turn_left
end
#ここまで
when 18 # 右を向く
#以下変更
if @member==1
turn_right
elsif @member==2
$game_subplayer1.turn_right
elsif @member==3
$game_subplayer2.turn_right
elsif @member==4
$game_subplayer3.turn_right
elsif @member==0
$game_subplayer3.turn_right
$game_subplayer2.turn_right
$game_subplayer1.turn_right
turn_right
end
#ここまで
when 19 # 上を向く
#以下変更
if @member==1
turn_up
elsif @member==2
$game_subplayer1.turn_up
elsif @member==3
$game_subplayer2.turn_up
elsif @member==4
$game_subplayer3.turn_up
elsif @member==0
$game_subplayer3.turn_up
$game_subplayer2.turn_up
$game_subplayer1.turn_up
turn_up
end
#ここまで
when 20 # 右に 90 度回転
#以下変更
if @member==1
turn_right_90
elsif @member==2
$game_subplayer1.turn_right_90
elsif @member==3
$game_subplayer2.turn_right_90
elsif @member==4
$game_subplayer3.turn_right_90
elsif @member==0
$game_subplayer3.turn_right_90
$game_subplayer2.turn_right_90
$game_subplayer1.turn_right_90
turn_right_90
end
#ここまで
when 21 # 左に 90 度回転
#以下変更
if @member==1
turn_left_90
elsif @member==2
$game_subplayer1.turn_left_90
elsif @member==3
$game_subplayer2.turn_left_90
elsif @member==4
$game_subplayer3.turn_left_90
elsif @member==0
$game_subplayer3.turn_left_90
$game_subplayer2.turn_left_90
$game_subplayer1.turn_left_90
turn_left_90
end
#ここまで
when 22 # 180 度回転
#以下変更
if @member==1
turn_180
elsif @member==2
$game_subplayer1.turn_180
elsif @member==3
$game_subplayer2.turn_180
elsif @member==4
$game_subplayer3.turn_180
elsif @member==0
$game_subplayer3.turn_180
$game_subplayer2.turn_180
$game_subplayer1.turn_180
turn_180
end
#ここまで
when 23 # 右か左に 90 度回転
#以下変更
if @member==1
turn_right_or_left_90
elsif @member==2
$game_subplayer1.turn_right_or_left_90
elsif @member==3
$game_subplayer2.turn_right_or_left_90
elsif @member==4
$game_subplayer3.turn_right_or_left_90
elsif @member==0
$game_subplayer3.turn_right_or_left_90
$game_subplayer2.turn_right_or_left_90
$game_subplayer1.turn_right_or_left_90
turn_right_or_left_90
end
#ここまで
when 24 # ランダムに方向転換
#以下変更
if @member==1
turn_random
elsif @member==2
$game_subplayer1.turn_random
elsif @member==3
$game_subplayer2.turn_random
elsif @member==4
$game_subplayer3.turn_random
elsif @member==0
$game_subplayer3.turn_random
$game_subplayer2.turn_random
$game_subplayer1.turn_random
turn_random
end
#ここまで
when 25 # プレイヤーの方を向く
#以下変更
if @member==1
turn_toward_player
elsif @member==2
$game_subplayer1.turn_toward_player
elsif @member==3
$game_subplayer2.turn_toward_player
elsif @member==4
$game_subplayer3.turn_toward_player
elsif @member==0
$game_subplayer3.turn_toward_player
$game_subplayer2.turn_toward_player
$game_subplayer1.turn_toward_player
turn_toward_player
end
#ここまで
when 26 # プレイヤーの逆を向く
#以下変更
if @member==1
turn_away_from_player
elsif @member==2
$game_subplayer1.turn_away_from_player
elsif @member==3
$game_subplayer2.turn_away_from_player
elsif @member==4
$game_subplayer3.turn_away_from_player
elsif @member==0
$game_subplayer3.turn_away_from_player
$game_subplayer2.turn_away_from_player
$game_subplayer1.turn_away_from_player
turn_away_from_player
end
#ここまで
when 27 # スイッチ ON
$game_switches[command.parameters[0]] = true
$game_map.need_refresh = true
when 28 # スイッチ OFF
$game_switches[command.parameters[0]] = false
$game_map.need_refresh = true
when 29 # 移動速度の変更
#以下変更
@move_speed = command.parameters[0]
$game_subplayer1.move_speed = command.parameters[0]
$game_subplayer2.move_speed = command.parameters[0]
$game_subplayer3.move_speed = command.parameters[0]
#ここまで
when 30 # 移動頻度の変更
@move_frequency = command.parameters[0]
when 31 # 歩行アニメ ON
#以下変更
if @member==1
@walk_anime = true
elsif @member==2
$game_subplayer1.walk_anime = true
elsif @member==3
$game_subplayer2.walk_anime = true
elsif @member==4
$game_subplayer3.walk_anime = true
elsif @member==0
$game_subplayer3.walk_anime = true
$game_subplayer2.walk_anime = true
$game_subplayer1.walk_anime = true
@walk_anime = true
end
#ここまで
when 32 # 歩行アニメ OFF
#以下変更
if @member==1
@walk_anime = false
elsif @member==2
$game_subplayer1.walk_anime = false
elsif @member==3
$game_subplayer2.walk_anime = false
elsif @member==4
$game_subplayer3.walk_anime = false
elsif @member==0
$game_subplayer3.walk_anime = false
$game_subplayer2.walk_anime = false
$game_subplayer1.walk_anime = false
@walk_anime = false
end
#ここまで
when 33 # 足踏みアニメ ON
#以下変更
if @member==1
@step_anime = true
elsif @member==2
$game_subplayer1.step_anime = true
elsif @member==3
$game_subplayer2.step_anime = true
elsif @member==4
$game_subplayer3.step_anime = true
elsif @member==0
$game_subplayer3.step_anime = true
$game_subplayer2.step_anime = true
$game_subplayer1.step_anime = true
@step_anime = true
end
#ここまで
when 34 # 足踏みアニメ OFF
#以下変更
if @member==1
@step_anime = false
elsif @member==2
$game_subplayer1.step_anime = false
elsif @member==3
$game_subplayer2.step_anime = false
elsif @member==4
$game_subplayer3.step_anime = false
elsif @member==0
$game_subplayer3.step_anime = false
$game_subplayer2.step_anime = false
$game_subplayer1.step_anime = false
@step_anime = false
end
#ここまで
when 35 # 向き固定 ON
#以下変更
if @member==1
@direction_fix = true
elsif @member==2
$game_subplayer1.direction_fix = true
elsif @member==3
$game_subplayer2.direction_fix = true
elsif @member==4
$game_subplayer3.direction_fix = true
elsif @member==0
$game_subplayer3.direction_fix = true
$game_subplayer2.direction_fix = true
$game_subplayer1.direction_fix = true
@direction_fix = true
end
#ここまで
when 36 # 向き固定 OFF
#以下変更
if @member==1
@direction_fix = false
elsif @member==2
$game_subplayer1.direction_fix = false
elsif @member==3
$game_subplayer2.direction_fix = false
elsif @member==4
$game_subplayer3.direction_fix = false
elsif @member==0
$game_subplayer3.direction_fix = false
$game_subplayer2.direction_fix = false
$game_subplayer1.direction_fix = false
@direction_fix = false
end
#ここまで
when 37 # すり抜け ON
#以下変更
@through = true
$game_subplayer1.through = true
$game_subplayer2.through = true
$game_subplayer3.through = true
#ここまで
when 38 # すり抜け OFF
#以下変更
@through = false
$game_subplayer1.through = false
$game_subplayer2.through = false
$game_subplayer3.through = false
#ここまで
when 39 # 透明化 ON
#以下変更
if @member==1
@transparent = true
elsif @member==2
$game_subplayer1.transparent = true
elsif @member==3
$game_subplayer2.transparent = true
elsif @member==4
$game_subplayer3.transparent = true
elsif @member==0
$game_subplayer3.transparent = true
$game_subplayer2.transparent = true
$game_subplayer1.transparent = true
@transparent = true
end
#ここまで
when 40 # 透明化 OFF
#以下変更
if @member==1
@transparent = false
elsif @member==2
$game_subplayer1.transparent = false
elsif @member==3
$game_subplayer2.transparent = false
elsif @member==4
$game_subplayer3.transparent = false
elsif @member==0
$game_subplayer3.transparent = false
$game_subplayer2.transparent = false
$game_subplayer1.transparent = false
@transparent = false
end
#ここまで
when 41 # グラフィック変更
#以下変更
if @member==1
set_graphic(command.parameters[0], command.parameters[1])
elsif @member==2
$game_subplayer1.set_graphic(command.parameters[0], command.parameters[1])
elsif @member==3
$game_subplayer2.set_graphic(command.parameters[0], command.parameters[1])
elsif @member==4
$game_subplayer3.set_graphic(command.parameters[0], command.parameters[1])
elsif @member==0
$game_subplayer3.set_graphic(command.parameters[0], command.parameters[1])
$game_subplayer2.set_graphic(command.parameters[0], command.parameters[1])
$game_subplayer1.set_graphic(command.parameters[0], command.parameters[1])
set_graphic(command.parameters[0], command.parameters[1])
end
#ここまで
when 42 # 不透明度の変更
#以下変更
if @member==1
@opacity = command.parameters[0]
elsif @member==2
$game_subplayer1.opacity = command.parameters[0]
elsif @member==3
$game_subplayer2.opacity = command.parameters[0]
elsif @member==4
$game_subplayer3.opacity = command.parameters[0]
elsif @member==0
$game_subplayer3.opacity = command.parameters[0]
$game_subplayer2.opacity = command.parameters[0]
$game_subplayer1.opacity = command.parameters[0]
@opacity = command.parameters[0]
end
#ここまで
when 43 # 合成方法の変更
#以下変更
if @member==1
@blend_type = command.parameters[0]
elsif @member==2
$game_subplayer1.blend_type = command.parameters[0]
elsif @member==3
$game_subplayer2.blend_type = command.parameters[0]
elsif @member==4
$game_subplayer3.blend_type = command.parameters[0]
elsif @member==0
$game_subplayer3.blend_type = command.parameters[0]
$game_subplayer2.blend_type = command.parameters[0]
$game_subplayer1.blend_type = command.parameters[0]
@blend_type = command.parameters[0]
end
#ここまで
when 44 # SE の演奏
command.parameters[0].play
when 45 # スクリプト
eval(command.parameters[0])
end
if not @move_route.skippable and @move_failed
return # [移動できない場合は無視] OFF & 移動失敗
end
@move_route_index += 1
end
end
end
#--------------------------------------------------------------------------
# ● 移動可能判定
#--------------------------------------------------------------------------
def movable?
return false if moving? # 移動中
return false if @move_route_forcing # 移動ルート強制中
return false if @vehicle_getting_on # 乗る動作の途中
return false if @vehicle_getting_off # 降りる動作の途中
return false if $game_message.visible # メッセージ表示中
return false if @gather_on # 集合中 #追加
return false if in_airship? and not $game_map.airship.movable?
return true
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
last_real_x = @real_x
last_real_y = @real_y
last_moving = moving?
move_by_input
#以下スーパークラスのupdateメソッドをコピー
if jumping? # ジャンプ中
update_jump
elsif moving? # 移動中
update_move
else # 停止中
update_stop
end
if @wait_count > 0 # ウェイト中
@wait_count -= 1
elsif @gather_on # 追加
update_gather # 追加
elsif @move_route_forcing # 移動ルート強制中
move_type_custom
elsif not @locked # ロック中以外
update_self_movement
end
update_animation
#ここまで
update_scroll(last_real_x, last_real_y)
update_vehicle
update_nonmoving(last_moving)
end
#--------------------------------------------------------------------------
# ● サブキャラクター集合メソッド(これを,スクリプトにより呼び出す) #追加
#--------------------------------------------------------------------------
def gather
@gather_on = true
end
#--------------------------------------------------------------------------
# ● サブキャラクター集合更新 #追加
#--------------------------------------------------------------------------
def update_gather
return unless @gather_on
return if $game_subplayer3.moving?
pos = []
pos.push(@x,@y)
if(@gather_count==0)
$game_subplayer1.move(pos);@gather_count+=1
elsif(@gather_count==1)
$game_subplayer2.move(pos);@gather_count+=1
elsif(@gather_count==2)
$game_subplayer3.move(pos);@gather_count+=1
elsif(@gather_count==3)
@gather_count=0;@gather_on=false
end
end
#--------------------------------------------------------------------------
# ● 強制行動キャラクタを選択する(これを,スクリプトにより呼び出す) #追加
#--------------------------------------------------------------------------
def set_member(x)
@member = x
end
end
#==============================================================================
# ■ Game_Interpreter_re
#------------------------------------------------------------------------------
# イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。(再定義)
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# ● 場所移動
#--------------------------------------------------------------------------
def command_201
return true if $game_temp.in_battle
if $game_player.transfer? or # 場所移動中
$game_message.visible # メッセージ表示中
return false
end
if @params[0] == 0 # 直接指定
map_id = @params[1]
x = @params[2]
y = @params[3]
direction = @params[4]
else # 変数で指定
map_id = $game_variables[@params[1]]
x = $game_variables[@params[2]]
y = $game_variables[@params[3]]
direction = @params[4]
end
$game_player.reserve_transfer(map_id, x, y, direction)
$game_subplayer1.reserve_transfer(map_id, x, y, direction) #追加
$game_subplayer2.reserve_transfer(map_id, x, y, direction) #追加
$game_subplayer3.reserve_transfer(map_id, x, y, direction) #追加
@index += 1
return false
end
#--------------------------------------------------------------------------
# ● 透明状態の変更
#--------------------------------------------------------------------------
def command_211
$game_player.transparent = (@params[0] == 0)
$game_subplayer1.transparent = (@params[0] == 0) #追加
$game_subplayer2.transparent = (@params[0] == 0) #追加
$game_subplayer3.transparent = (@params[0] == 0) #追加
return true
end
#--------------------------------------------------------------------------
# ● アニメーションの表示
#--------------------------------------------------------------------------
def command_212
character = get_character(@params[0])
if character == $game_player
if $game_player.member == 0
$game_player.animation_id = @params[1]
$game_subplayer1.animation_id = @params[1]
$game_subplayer2.animation_id = @params[1]
$game_subplayer3.animation_id = @params[1]
elsif $game_player.member == 1
$game_player.animation_id = @params[1]
elsif $game_player.member == 2
$game_subplayer1.animation_id = @params[1]
elsif $game_player.member == 3
$game_subplayer2.animation_id = @params[1]
elsif $game_player.member == 4
$game_subplayer3.animation_id = @params[1]
end
elsif character != nil
character.animation_id = @params[1]
end
return true
end
#--------------------------------------------------------------------------
# ● フキダシアイコンの表示
#--------------------------------------------------------------------------
def command_213
character = get_character(@params[0])
if character == $game_player
if $game_player.member == 0
$game_player.balloon_id = @params[1]
$game_subplayer1.balloon_id = @params[1]
$game_subplayer2.balloon_id = @params[1]
$game_subplayer3.balloon_id = @params[1]
elsif $game_player.member == 1
$game_player.balloon_id = @params[1]
elsif $game_player.member == 2
$game_subplayer1.balloon_id = @params[1]
elsif $game_player.member == 3
$game_subplayer2.balloon_id = @params[1]
elsif $game_player.member == 4
$game_subplayer3.balloon_id = @params[1]
end
elsif character != nil
character.balloon_id = @params[1]
end
return true
end
end
#==============================================================================
# ■ Scene_File
#------------------------------------------------------------------------------
# ファイル画面の処理を行うクラスです。
#==============================================================================
class Scene_File < Scene_Base
#--------------------------------------------------------------------------
# ● セーブデータの書き込み
# file : 書き込み用ファイルオブジェクト (オープン済み)
#--------------------------------------------------------------------------
def write_save_data(file)
characters = []
for actor in $game_party.members
characters.push([actor.character_name, actor.character_index])
end
$game_system.save_count += 1
$game_system.version_id = $data_system.version_id
@last_bgm = RPG::BGM::last
@last_bgs = RPG::BGS::last
Marshal.dump(characters, file)
Marshal.dump(Graphics.frame_count, file)
Marshal.dump(@last_bgm, file)
Marshal.dump(@last_bgs, file)
Marshal.dump($game_system, file)
Marshal.dump($game_message, file)
Marshal.dump($game_switches, file)
Marshal.dump($game_variables, file)
Marshal.dump($game_self_switches, file)
Marshal.dump($game_actors, file)
Marshal.dump($game_party, file)
Marshal.dump($game_troop, file)
Marshal.dump($game_map, file)
Marshal.dump($game_player, file)
Marshal.dump($game_subplayer1, file) #追加
Marshal.dump($game_subplayer2, file) #追加
Marshal.dump($game_subplayer3, file) #追加
end
#--------------------------------------------------------------------------
# ● セーブデータの読み込み
# file : 読み込み用ファイルオブジェクト (オープン済み)
#--------------------------------------------------------------------------
def read_save_data(file)
characters = Marshal.load(file)
Graphics.frame_count = Marshal.load(file)
@last_bgm = Marshal.load(file)
@last_bgs = Marshal.load(file)
$game_system = Marshal.load(file)
$game_message = Marshal.load(file)
$game_switches = Marshal.load(file)
$game_variables = Marshal.load(file)
$game_self_switches = Marshal.load(file)
$game_actors = Marshal.load(file)
$game_party = Marshal.load(file)
$game_troop = Marshal.load(file)
$game_map = Marshal.load(file)
$game_player = Marshal.load(file)
$game_subplayer1 = Marshal.load(file) #追加
$game_subplayer2 = Marshal.load(file) #追加
$game_subplayer3 = Marshal.load(file) #追加
if $game_system.version_id != $data_system.version_id
$game_map.setup($game_map.map_id)
$game_player.center($game_player.x, $game_player.y)
end
end
end
#==============================================================================
# ■ Scene_Map_re
#------------------------------------------------------------------------------
# マップ画面の処理を行うクラスです。(再定義)
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
$game_map.interpreter.update # インタプリタを更新
$game_map.update # マップを更新
$game_player.update # プレイヤーを更新
$game_subplayer1.update # サブプレイヤーを更新 #追加
$game_subplayer2.update # サブプレイヤーを更新 #追加
$game_subplayer3.update # サブプレイヤーを更新 #追加
$game_system.update # タイマーを更新
@spriteset.update # スプライトセットを更新
@message_window.update # メッセージウィンドウを更新
unless $game_message.visible # メッセージ表示中以外
update_transfer_player
update_encounter
update_call_menu
update_call_debug
update_scene_change
end
end
#--------------------------------------------------------------------------
# ● 場所移動の処理
#--------------------------------------------------------------------------
def update_transfer_player
return unless $game_player.transfer?
fade = (Graphics.brightness > 0)
fadeout(30) if fade
@spriteset.dispose # スプライトセットを解放
$game_player.perform_transfer # 場所移動の実行
$game_subplayer1.perform_transfer # 場所移動の実行 #追加
$game_subplayer2.perform_transfer # 場所移動の実行 #追加
$game_subplayer3.perform_transfer # 場所移動の実行 #追加
$game_map.autoplay # BGM と BGS の自動切り替え
$game_map.update
Graphics.wait(15)
@spriteset = Spriteset_Map.new # スプライトセットを再作成
fadein(30) if fade
Input.update
end
end
#==============================================================================
# ■ Scene_Title_re
#------------------------------------------------------------------------------
# タイトル画面の処理を行うクラスです。(再定義)
#==============================================================================
class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# ● 各種ゲームオブジェクトの作成
#--------------------------------------------------------------------------
def create_game_objects
$game_temp = Game_Temp.new
$game_message = Game_Message.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
$game_subplayer1 = Game_Subplayer.new #追加
$game_subplayer2 = Game_Subplayer.new #追加
$game_subplayer3 = Game_Subplayer.new #追加
end
#--------------------------------------------------------------------------
# ● コマンド : ニューゲーム
#--------------------------------------------------------------------------
def command_new_game
confirm_player_location
Sound.play_decision
$game_party.setup_starting_members # 初期パーティ
$game_map.setup($data_system.start_map_id) # 初期位置のマップ
$game_player.moveto($data_system.start_x, $data_system.start_y)
$game_player.refresh
$game_subplayer1.moveto($data_system.start_x, $data_system.start_y)#追加
$game_subplayer1.refresh(1) #追加
$game_subplayer2.moveto($data_system.start_x, $data_system.start_y)#追加
$game_subplayer2.refresh(2) #追加
$game_subplayer3.moveto($data_system.start_x, $data_system.start_y)#追加
$game_subplayer3.refresh(3) #追加
$scene = Scene_Map.new
RPG::BGM.fade(1500)
close_command_window
Graphics.fadeout(60)
Graphics.wait(40)
Graphics.frame_count = 0
RPG::BGM.stop
$game_map.autoplay
end
end
#==============================================================================
# ■ Spriteset_Map_re
#------------------------------------------------------------------------------
# マップ画面のスプライトやタイルマップなどをまとめたクラスです。このクラスは
# Scene_Map クラスの内部で使用されます。(再定義)
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# ● キャラクタースプライトの作成
#--------------------------------------------------------------------------
def create_characters
@character_sprites = []
for i in $game_map.events.keys.sort
sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
@character_sprites.push(sprite)
end
for vehicle in $game_map.vehicles
sprite = Sprite_Character.new(@viewport1, vehicle)
@character_sprites.push(sprite)
end
@character_sprites.push(Sprite_Character.new(@viewport1, $game_subplayer3))#追加
@character_sprites.push(Sprite_Character.new(@viewport1, $game_subplayer2))#追加
@character_sprites.push(Sprite_Character.new(@viewport1, $game_subplayer1))#追加
@character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
end
end
#==============================================================================
# ■ Game_Subplayer
#------------------------------------------------------------------------------
# サブプレイヤーを扱うクラスです。
# このクラスのインスタンスは $game_subplayer1~3で参照されます。
# Game_Playerクラスを元に作っています
#==============================================================================
class Game_Subplayer < Game_Character
#--------------------------------------------------------------------------
# ● 定数
#--------------------------------------------------------------------------
CENTER_X = (544 / 2 - 16) * 8 # 画面中央の X 座標 * 8
CENTER_Y = (416 / 2 - 16) * 8 # 画面中央の Y 座標 * 8
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :move_speed # 移動速度
attr_accessor :walk_anime # 歩行アニメ
attr_accessor :step_anime # 足踏みアニメ
attr_accessor :direction_fix # 向き固定
attr_accessor :through # すり抜け
attr_accessor :opacity # 不透明度
attr_accessor :blend_type # 合成方法
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super
@transferring = false # 場所移動フラグ
@new_map_id = 0 # 移動先 マップ ID
@new_x = 0 # 移動先 X 座標
@new_y = 0 # 移動先 Y 座標
@new_direction = 0 # 移動後の向き
@number = 0 # 何番目のキャラか
end
#--------------------------------------------------------------------------
# ● 場所移動の予約
# map_id : マップ ID
# x : X 座標
# y : Y 座標
# direction : 移動後の向き
#--------------------------------------------------------------------------
def reserve_transfer(map_id, x, y, direction)
@transferring = true
@new_map_id = map_id
@new_x = x
@new_y = y
@new_direction = direction
end
#--------------------------------------------------------------------------
# ● 場所移動の実行
#--------------------------------------------------------------------------
def perform_transfer
return unless @transferring
@transferring = false
set_direction(@new_direction)
if $game_map.map_id != @new_map_id
$game_map.setup(@new_map_id) # 別マップへ移動
end
moveto(@new_x, @new_y)
end
#--------------------------------------------------------------------------
# ● ダッシュ状態判定
#--------------------------------------------------------------------------
def dash?
return false if $game_player.move_route_forcing
return false if $game_map.disable_dash?
return false if $game_player.gather_on # 集合中
return Input.press?(Input::A)
end
#--------------------------------------------------------------------------
# ● デバッグすり抜け状態判定
#--------------------------------------------------------------------------
def debug_through?
return false unless $TEST
return Input.press?(Input::CTRL)
end
#--------------------------------------------------------------------------
# ● 画面中央に来るようにマップの表示位置を設定
# x : X 座標
# y : Y 座標
#--------------------------------------------------------------------------
def center(x, y)
display_x = x * 256 - CENTER_X # 座標を計算
unless $game_map.loop_horizontal? # 横にループしない?
max_x = ($game_map.width - 17) * 256 # 最大値を計算
display_x = [0, [display_x, max_x].min].max # 座標を修正
end
display_y = y * 256 - CENTER_Y # 座標を計算
unless $game_map.loop_vertical? # 縦にループしない?
max_y = ($game_map.height - 13) * 256 # 最大値を計算
display_y = [0, [display_y, max_y].min].max # 座標を修正
end
$game_map.set_display_pos(display_x, display_y) # 表示位置変更
end
#--------------------------------------------------------------------------
# ● 指定位置に移動
# x : X 座標
# y : Y 座標
#--------------------------------------------------------------------------
def moveto(x, y)
super
center(x, y) # センタリング
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh(number)
@number = number
if $game_party.members.size <= number
@character_name = ""
@character_index = 0
else
actor = $game_party.members[number] # アクターを取得
@character_name = actor.character_name
@character_index = actor.character_index
end
end
#--------------------------------------------------------------------------
# ● 動き
#--------------------------------------------------------------------------
def move(xy)
if @x==xy[0] && @y==xy[1]
return
elsif @x==xy[0]+1 && @y==xy[1]
move_left
elsif @x==xy[0]-1 && @y==xy[1]
move_right
elsif @x==xy[0] && @y==xy[1]+1
move_up
elsif @x==xy[0] && @y==xy[1]-1
move_down
elsif @x==xy[0]+1 && @y==xy[1]+1
move_upper_left
elsif @x==xy[0]-1 && @y==xy[1]+1
move_upper_right
elsif @x==xy[0]+1 && @y==xy[1]-1
move_lower_left
elsif @x==xy[0]-1 && @y==xy[1]-1
move_lower_right
#画面ループの端っこの時
elsif @x==0 && xy[0]>@x+1 && @y==xy[1]
move_left
elsif xy[0]==0 && @x+1>xy[0] && @y==xy[1]
move_right
elsif @x==xy[0] && @y==0 && xy[1]>@y+1
move_up
elsif @x==xy[0] && xy[1]==0 && @y+1>xy[1]
move_down
#画面ループの端っこで,ナナメ移動の場合
elsif @x<0 || @y<0
temp_x = $game_map.round_x(@x)
temp_y = $game_map.round_y(@y)
if temp_x==xy[0]+1 && @y==xy[1]
move_left
elsif temp_x==xy[0]-1 && @y==xy[1]
move_right
elsif @x==xy[0] && temp_y==xy[1]+1
move_up
elsif @x==xy[0] && temp_y==xy[1]-1
move_down
end
end
end
#--------------------------------------------------------------------------
# ● 下に移動
# turn_ok : その場での向き変更を許可
#--------------------------------------------------------------------------
def move_down(turn_ok = true)
pos = []
if passable?(@x, @y+1) # 通行可能
turn_down
pos.push(@x,@y)
@y = $game_map.round_y(@y+1)
@real_y = (@y-1)*256
if @number == 1
$game_subplayer2.move(pos)
elsif @number == 2
$game_subplayer3.move(pos)
end
@move_failed = false
else # 通行不可能
turn_down if turn_ok
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● 左に移動
# turn_ok : その場での向き変更を許可
#--------------------------------------------------------------------------
def move_left(turn_ok = true)
pos = []
if passable?(@x-1, @y) # 通行可能
turn_left
pos.push(@x,@y)
@x = $game_map.round_x(@x-1)
@real_x = (@x+1)*256
if @number == 1
$game_subplayer2.move(pos)
elsif @number == 2
$game_subplayer3.move(pos)
end
@move_failed = false
else # 通行不可能
turn_left if turn_ok
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● 右に移動
# turn_ok : その場での向き変更を許可
#--------------------------------------------------------------------------
def move_right(turn_ok = true)
pos = []
if passable?(@x+1, @y) # 通行可能
turn_right
pos.push(@x,@y)
@x = $game_map.round_x(@x+1)
@real_x = (@x-1)*256
if @number == 1
$game_subplayer2.move(pos)
elsif @number == 2
$game_subplayer3.move(pos)
end
@move_failed = false
else # 通行不可能
turn_right if turn_ok
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● 上に移動
# turn_ok : その場での向き変更を許可
#--------------------------------------------------------------------------
def move_up(turn_ok = true)
pos = []
if passable?(@x, @y-1) # 通行可能
turn_up
pos.push(@x,@y)
@y = $game_map.round_y(@y-1)
@real_y = (@y+1)*256
if @number == 1
$game_subplayer2.move(pos)
elsif @number == 2
$game_subplayer3.move(pos)
end
@move_failed = false
else # 通行不可能
turn_up if turn_ok
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● 左下に移動
#--------------------------------------------------------------------------
def move_lower_left
pos = []
unless @direction_fix
@direction = (@direction == 6 ? 4 : @direction == 8 ? 2 : @direction)
end
if (passable?(@x, @y+1) and passable?(@x-1, @y+1)) or
(passable?(@x-1, @y) and passable?(@x-1, @y+1))
pos.push(@x,@y)
@x -= 1
@y += 1
if @number == 1
$game_subplayer2.move(pos)
elsif @number == 2
$game_subplayer3.move(pos)
end
@move_failed = false
else
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● 右下に移動
#--------------------------------------------------------------------------
def move_lower_right
pos = []
unless @direction_fix
@direction = (@direction == 4 ? 6 : @direction == 8 ? 2 : @direction)
end
if (passable?(@x, @y+1) and passable?(@x+1, @y+1)) or
(passable?(@x+1, @y) and passable?(@x+1, @y+1))
pos.push(@x,@y)
@x += 1
@y += 1
if @number == 1
$game_subplayer2.move(pos)
elsif @number == 2
$game_subplayer3.move(pos)
end
@move_failed = false
else
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● 左上に移動
#--------------------------------------------------------------------------
def move_upper_left
pos = []
unless @direction_fix
@direction = (@direction == 6 ? 4 : @direction == 2 ? 8 : @direction)
end
if (passable?(@x, @y-1) and passable?(@x-1, @y-1)) or
(passable?(@x-1, @y) and passable?(@x-1, @y-1))
pos.push(@x,@y)
@x -=1
@y -=1
if @number == 1
$game_subplayer2.move(pos)
elsif @number == 2
$game_subplayer3.move(pos)
end
@move_failed = false
else
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● 右上に移動
#--------------------------------------------------------------------------
def move_upper_right
pos = []
unless @direction_fix
@direction = (@direction == 4 ? 6 : @direction == 2 ? 8 : @direction)
end
if (passable?(@x, @y-1) and passable?(@x+1, @y-1)) or
(passable?(@x+1, @y) and passable?(@x+1, @y-1))
pos.push(@x,@y)
@x += 1
@y -= 1
if @number == 1
$game_subplayer2.move(pos)
elsif @number == 2
$game_subplayer3.move(pos)
end
@move_failed = false
else
@move_failed = true
end
end
#--------------------------------------------------------------------------
# ● キャラクター衝突判定
# x : X 座標
# y : Y 座標
#--------------------------------------------------------------------------
def collide_with_characters?(x, y)
for event in $game_map.events_xy(x, y) # イベントの座標と一致
unless event.through # すり抜け OFF?
return true if self.is_a?(Game_Event) # 自分がイベント
return true if event.priority_type == 1 # 相手が通常キャラ
end
end
if @priority_type == 1 # 自分が通常キャラ
return true if $game_map.boat.pos_nt?(x, y) # 小型船の座標と一致
return true if $game_map.ship.pos_nt?(x, y) # 大型船の座標と一致
end
return false
end
end
复制代码
作者:
千城落水千城梦
时间:
2012-9-18 16:08
虽然我不怎么懂脚本,但是你连错误信息截图都没谁能帮的了你。
作者:
怪蜀黍
时间:
2012-9-18 16:46
添加的外来脚本多了,所以不兼容。
P叔帮你修复了,拿走吧
Scripts.rvdata
(199.15 KB, 下载次数: 22)
2012-9-18 16:46 上传
点击文件名下载附件
作者:
wei19840826
时间:
2012-9-18 21:22
protosssonny 发表于 2012-9-18 16:46
添加的外来脚本多了,所以不兼容。
P叔帮你修复了,拿走吧
...
感谢P叔
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1