RPG Maker XP 设置问题
1.部分NPC属于剧情,但是离开地图后再回来他就会重新出现,如果设置变量让他在某件事完成后消失或出现并且以后不再出现该怎么设置?2.原系统队伍里只能容纳4人,我想把它改成...
1.部分NPC属于剧情,但是离开地图后再回来他就会重新出现,如果设置变量让他在某件事完成后消失或出现并且以后不再出现该怎么设置?
2.原系统队伍里只能容纳4人,我想把它改成8人,并且可以选择战斗队员和领队,有谁有那个系统配置吗? 展开
2.原系统队伍里只能容纳4人,我想把它改成8人,并且可以选择战斗队员和领队,有谁有那个系统配置吗? 展开
展开全部
第二个问题的脚本。。
#队伍最大人数
ACTORS = 10 #可以修改这个10这个是人数。下面也一样
#战斗人数
BATTLER_ACTORS = 10
#战斗画面修补
#目标 3人 200, 4人 160, 5人 120
SPRITES_BATTLER = 120 #这个120是单个角色的显示大小。人数越多,调的越小
#游戏开始时步行图的显示(1即是角色1的步行图,如此类推)
CHARACTER_GRAPHIC = 1
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● バトル画面 X 座标の取得
#--------------------------------------------------------------------------
def screen_x
# パーティ内の并び顺から X 座标を计算して返す
if self.index != nil
return self.index * SPRITES_BATTLER + 80
else
return 0
end
end
end
#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
# パーティを扱うクラスです。ゴールドやアイテムなどの情报が含まれます。このク
# ラスのインスタンスは $game_party で参照されます。
#==============================================================================
class Game_Party
#--------------------------------------------------------------------------
# ● アクターを加える
# actor_id : アクター ID
#--------------------------------------------------------------------------
def add_actor(actor_id)
# アクターを取得
actor = $game_actors[actor_id]
# パーティ人数が 4 人未満で、このアクターがパーティにいない场合
if @actors.size < ACTORS and not @actors.include?(actor)
# アクターを追加
@actors.push(actor)
# プレイヤーをリフレッシュ
$game_player.refresh
end
end
#--------------------------------------------------------------------------
# ● アクターの配列
#--------------------------------------------------------------------------
def actors
a = []
if $game_temp.in_battle
for i in 0...[@actors.size, BATTLER_ACTORS].min
a.push(@actors[i])
end
else
a = @actors
end
return a
end
#--------------------------------------------------------------------------
# ● フレーム更新 (ステータスウィンドウがアクティブの场合)
#--------------------------------------------------------------------------
def change_actor(index1, index2)
temp_skill1 = @actors[index1]
temp_skill2 = @actors[index2]
# 実际に入れ替える
@actors[index1] = temp_skill2
@actors[index2] = temp_skill1
end
#--------------------------------------------------------------------------
# ● 全员のアクションクリア
#--------------------------------------------------------------------------
def clear_actions
# パーティ全员のアクションをクリア
for actor in actors
actor.current_action.clear
end
end
#--------------------------------------------------------------------------
# ● コマンド入力可能判定
#--------------------------------------------------------------------------
def inputable?
# 一人でもコマンド入力可能なら true を返す
for actor in actors
if actor.inputable?
return true
end
end
return false
end
#--------------------------------------------------------------------------
# ● 対象アクターのランダムな决定
# hp0 : HP 0 のアクターに限る
#--------------------------------------------------------------------------
def random_target_actor(hp0 = false)
# ルーレットを初期化
roulette = []
# ループ
for actor in actors
# 条件に该当する场合
if (not hp0 and actor.exist?) or (hp0 and actor.hp0?)
# アクターのクラスの [位置] を取得
position = $data_classes[actor.class_id].position
# 前卫のとき n = 4、中卫のとき n = 3、後卫のとき n = 2
n = 4 - position
# ルーレットにアクターを n 回追加
n.times do
roulette.push(actor)
end
end
end
# ルーレットのサイズが 0 の场合
if roulette.size == 0
return nil
end
# ルーレットを回し、アクターを决定
return roulette[rand(roulette.size)]
end
#--------------------------------------------------------------------------
# ● 全灭判定
#--------------------------------------------------------------------------
def all_dead?
# パーティ人数が 0 人の场合
if $game_party.actors.size == 0
return false
end
# HP 0 以上のアクターがパーティにいる场合
for actor in actors
if actor.hp > 0
return false
end
end
# 全灭
return true
end
#--------------------------------------------------------------------------
# ● 対象アクターのスムーズな决定
# actor_index : アクターインデックス
#--------------------------------------------------------------------------
def smooth_target_actor(actor_index)
# アクターを取得
actor = actors[actor_index]
# アクターが存在する场合
if actor != nil and actor.exist?
return actor
end
# ループ
for actor in actors
# アクターが存在する场合
if actor.exist?
return actor
end
end
end
end
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
# プレイヤーを扱うクラスです。イベントの起动判定や、マップのスクロールなどの
# 机能を持っています。このクラスのインスタンスは $game_player で参照されます。
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
# パーティ人数が 0 人の场合
if $game_party.actors.size == 0
# キャラクターのファイル名と色相をクリア
@character_name = ""
@character_hue = 0
# メソッド终了
return
end
# アクターを取得
if $game_party.actors.include?($game_actors[CHARACTER_GRAPHIC]) && CHARACTER_GRAPHIC != 0
actor = $game_actors[CHARACTER_GRAPHIC]
else
actor = $game_party.actors[0]
end
# キャラクターのファイル名と色相を设定
@character_name = actor.character_name
@character_hue = actor.character_hue
# 不透明度と合成方法を初期化
@opacity = 255
@blend_type = 0
end
end
#==============================================================================
# ■ Spriteset_Battle
#------------------------------------------------------------------------------
# バトル画面のスプライトをまとめたクラスです。このクラスは Scene_Battle クラ
# スの内部で使用されます。
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
# ビューポートを作成
@viewport1 = Viewport.new(0, 0, 640, 640)#320
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport3 = Viewport.new(0, 0, 640, 480)
@viewport4 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 101
@viewport3.z = 200
@viewport4.z = 5000
# バトルバックスプライトを作成
@battleback_sprite = Sprite.new(@viewport1)
# エネミースプライトを作成
@enemy_sprites = []
for enemy in $game_troop.enemies.reverse
@enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
end
# アクタースプライトを作成
@actor_sprites = []
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
if BATTLER_ACTORS > 4
for i in 4...BATTLER_ACTORS
@actor_sprites.push(Sprite_Battler.new(@viewport2))
end
end
# 天候を作成
@weather = RPG::Weather.new(@viewport1)
# ピクチャスプライトを作成
@picture_sprites = []
for i in 51..100
@picture_sprites.push(Sprite_Picture.new(@viewport3,
$game_screen.pictures[i]))
end
# タイマースプライトを作成
@timer_sprite = Sprite_Timer.new
# フレーム更新
update
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias update_actor_change update
def update
if BATTLER_ACTORS > 4
for i in 4...BATTLER_ACTORS
@actor_sprites[i].battler = $game_party.actors[i]
end
end
update_actor_change
end
end
#==============================================================================
# ■ Window_MenuStatus
#------------------------------------------------------------------------------
# メニュー画面でパーティメンバーのステータスを表示するウィンドウです。
#==============================================================================
class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, 0, 480, 480)
refresh
self.active = false
self.index = -1
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@item_max = $game_party.actors.size
self.contents = Bitmap.new(width - 32, self.row_max * 116 - 16)
for i in 0...$game_party.actors.size
x = 64
y = i * 116
actor = $game_party.actors[i]
draw_actor_graphic(actor, x - 40, y + 80)
draw_actor_name(actor, x, y)
draw_actor_class(actor, x + 144, y)
draw_actor_level(actor, x, y + 32)
draw_actor_state(actor, x + 90, y + 32)
draw_actor_exp(actor, x, y + 64)
draw_actor_hp(actor, x + 236, y + 32)
draw_actor_sp(actor, x + 236, y + 64)
end
end
#--------------------------------------------------------------------------
# ● カーソル矩形更新
#--------------------------------------------------------------------------
def update_cursor_rect
# カーソル位置が 0 未満の场合
if @index < 0
self.cursor_rect.empty
return
end
# 现在の行を取得
row = @index
# 现在の行が、表示されている先头の行より前の场合
if row < self.top_row
# 现在の行が先头になるようにスクロール
self.top_row = row
end
# 现在の行が、表示されている最後尾の行より後ろの场合
if row > self.top_row + (self.page_row_max - 1)
# 现在の行が最後尾になるようにスクロール
self.top_row = row - (self.page_row_max - 1)
end
# カーソルの幅を计算
cursor_width = self.width - 32
# カーソルの座标を计算
x = @index % @column_max * (cursor_width + 32)
y = @index / @column_max * 116 - self.oy
# カーソルの矩形を更新
self.cursor_rect.set(x, y, self.width - 32, 100)
end
#--------------------------------------------------------------------------
# ● 先头の行の取得
#--------------------------------------------------------------------------
def top_row
# ウィンドウ内容の転送元 Y 座标を、1 行の高さ 116 で割る
return self.oy / 116
end
#--------------------------------------------------------------------------
# ● 先头の行の设定
# row : 先头に表示する行
#--------------------------------------------------------------------------
def top_row=(row)
# row が 0 未満の场合は 0 に修正
if row < 0
row = 0
end
# row が row_max - 1 超の场合は row_max - 1 に修正
if row > row_max - 1
row = row_max - 1
end
# row に 1 行の高さ 116 を挂け、ウィンドウ内容の転送元 Y 座标とする
self.oy = row * 116
end
#--------------------------------------------------------------------------
# ● 1 ページに表示できる行数の取得
#--------------------------------------------------------------------------
def page_row_max
return 4
end
end
#==============================================================================
# ■ Window_BattleStatus
#------------------------------------------------------------------------------
# バトル画面でパーティメンバーのステータスを表示するウィンドウです。
#==============================================================================
class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_LargeParty initialize
def initialize
# 元の処理を実行
initialize_KGC_LargeParty
# レベルアップフラグを再作成
@level_up_flags = []
for i in 0...BATTLER_ACTORS
@level_up_flags[i] = false
end
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = system_color
# self.contents.font.size = 18
# self.contents.draw_text(0, 32, 24, 32, "HP")
# self.contents.draw_text(0, 64, 24, 32, "MP")
@item_max = $game_party.actors.size
# self.contents.font.size = 20
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
actor_x = i * SPRITES_BATTLER + 4
# draw_actor_name(actor, actor_x, 0)
# draw_actor_hp(actor, actor_x, 32, 120)
# draw_actor_sp(actor, actor_x, 64, 120)
if @level_up_flags[i]
self.contents.font.color = normal_color
self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
else
#draw_actor_state(actor, actor_x, 96)
end
end
end
end
#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
# メニュー画面の処理を行うクラスです。
#==============================================================================
class Scene_Menu
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# menu_index : コマンドのカーソル初期位置
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
@actor_change = false
@actor_index = nil
end
#--------------------------------------------------------------------------
# ● フレーム更新 (コマンドウィンドウがアクティブの场合)
#--------------------------------------------------------------------------
alias update_command_actor_change update_command
def update_command
# 元の処理を実行
update_command_actor_change
# 方向ボタンの左か右が押された场合
if Input.trigger?(Input::LEFT) || Input.trigger?(Input::RIGHT)
# 决定 SE を演奏
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@status_window.active = true
@status_window.index = 0
@actor_change = true
@actor_index = nil
return
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (ステータスウィンドウがアクティブの场合)
#--------------------------------------------------------------------------
def update_status
# B ボタンが押された场合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# コマンドウィンドウをアクティブにする
@command_window.active = true
@status_window.active = false
@status_window.index = -1
@actor_change = false
return
end
# C ボタンが押された场合
if Input.trigger?(Input::C)
if @actor_change
# 决定 SE を演奏
$game_system.se_play($data_system.decision_se)
if @actor_index == nil
@actor_index = @status_window.index
else
$game_party.change_actor(@actor_index, @status_window.index)
@actor_index = nil
@status_window.refresh
if $game_party.actors.include?($game_actors[CHARACTER_GRAPHIC]) == false || CHARACTER_GRAPHIC == 0
$game_player.refresh
end
end
return
else
# コマンドウィンドウのカーソル位置で分岐
case @command_window.index
when 1 # スキル
# このアクターの行动制限が 2 以上の场合
if $game_party.actors[@status_window.index].restriction >= 2
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 决定 SE を演奏
$game_system.se_play($data_system.decision_se)
# スキル画面に切り替え
$scene = Scene_Skill.new(@status_window.index)
when 2 # 装备
# 决定 SE を演奏
$game_system.se_play($data_system.decision_se)
# 装备画面に切り替え
$scene = Scene_Equip.new(@status_window.index)
when 3 # ステータス
# 决定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ステータス画面に切り替え
$scene = Scene_Status.new(@status_window.index)
end
return
end
end
end
end
#==============================================================================
# ■ Scene_Battle (分割定义 2)
#------------------------------------------------------------------------------
# バトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● アクターコマンドウィンドウのセットアップ
#--------------------------------------------------------------------------
alias phase3_setup_command_window_actor_change phase3_setup_command_window
def phase3_setup_command_window
# 元の処理を実行
phase3_setup_command_window_actor_change
# アクターコマンドウィンドウの位置を设定
@actor_command_window.x = @actor_index * SPRITES_BATTLER
end
end
#队伍最大人数
ACTORS = 10 #可以修改这个10这个是人数。下面也一样
#战斗人数
BATTLER_ACTORS = 10
#战斗画面修补
#目标 3人 200, 4人 160, 5人 120
SPRITES_BATTLER = 120 #这个120是单个角色的显示大小。人数越多,调的越小
#游戏开始时步行图的显示(1即是角色1的步行图,如此类推)
CHARACTER_GRAPHIC = 1
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● バトル画面 X 座标の取得
#--------------------------------------------------------------------------
def screen_x
# パーティ内の并び顺から X 座标を计算して返す
if self.index != nil
return self.index * SPRITES_BATTLER + 80
else
return 0
end
end
end
#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
# パーティを扱うクラスです。ゴールドやアイテムなどの情报が含まれます。このク
# ラスのインスタンスは $game_party で参照されます。
#==============================================================================
class Game_Party
#--------------------------------------------------------------------------
# ● アクターを加える
# actor_id : アクター ID
#--------------------------------------------------------------------------
def add_actor(actor_id)
# アクターを取得
actor = $game_actors[actor_id]
# パーティ人数が 4 人未満で、このアクターがパーティにいない场合
if @actors.size < ACTORS and not @actors.include?(actor)
# アクターを追加
@actors.push(actor)
# プレイヤーをリフレッシュ
$game_player.refresh
end
end
#--------------------------------------------------------------------------
# ● アクターの配列
#--------------------------------------------------------------------------
def actors
a = []
if $game_temp.in_battle
for i in 0...[@actors.size, BATTLER_ACTORS].min
a.push(@actors[i])
end
else
a = @actors
end
return a
end
#--------------------------------------------------------------------------
# ● フレーム更新 (ステータスウィンドウがアクティブの场合)
#--------------------------------------------------------------------------
def change_actor(index1, index2)
temp_skill1 = @actors[index1]
temp_skill2 = @actors[index2]
# 実际に入れ替える
@actors[index1] = temp_skill2
@actors[index2] = temp_skill1
end
#--------------------------------------------------------------------------
# ● 全员のアクションクリア
#--------------------------------------------------------------------------
def clear_actions
# パーティ全员のアクションをクリア
for actor in actors
actor.current_action.clear
end
end
#--------------------------------------------------------------------------
# ● コマンド入力可能判定
#--------------------------------------------------------------------------
def inputable?
# 一人でもコマンド入力可能なら true を返す
for actor in actors
if actor.inputable?
return true
end
end
return false
end
#--------------------------------------------------------------------------
# ● 対象アクターのランダムな决定
# hp0 : HP 0 のアクターに限る
#--------------------------------------------------------------------------
def random_target_actor(hp0 = false)
# ルーレットを初期化
roulette = []
# ループ
for actor in actors
# 条件に该当する场合
if (not hp0 and actor.exist?) or (hp0 and actor.hp0?)
# アクターのクラスの [位置] を取得
position = $data_classes[actor.class_id].position
# 前卫のとき n = 4、中卫のとき n = 3、後卫のとき n = 2
n = 4 - position
# ルーレットにアクターを n 回追加
n.times do
roulette.push(actor)
end
end
end
# ルーレットのサイズが 0 の场合
if roulette.size == 0
return nil
end
# ルーレットを回し、アクターを决定
return roulette[rand(roulette.size)]
end
#--------------------------------------------------------------------------
# ● 全灭判定
#--------------------------------------------------------------------------
def all_dead?
# パーティ人数が 0 人の场合
if $game_party.actors.size == 0
return false
end
# HP 0 以上のアクターがパーティにいる场合
for actor in actors
if actor.hp > 0
return false
end
end
# 全灭
return true
end
#--------------------------------------------------------------------------
# ● 対象アクターのスムーズな决定
# actor_index : アクターインデックス
#--------------------------------------------------------------------------
def smooth_target_actor(actor_index)
# アクターを取得
actor = actors[actor_index]
# アクターが存在する场合
if actor != nil and actor.exist?
return actor
end
# ループ
for actor in actors
# アクターが存在する场合
if actor.exist?
return actor
end
end
end
end
#==============================================================================
# ■ Game_Player
#------------------------------------------------------------------------------
# プレイヤーを扱うクラスです。イベントの起动判定や、マップのスクロールなどの
# 机能を持っています。このクラスのインスタンスは $game_player で参照されます。
#==============================================================================
class Game_Player < Game_Character
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
# パーティ人数が 0 人の场合
if $game_party.actors.size == 0
# キャラクターのファイル名と色相をクリア
@character_name = ""
@character_hue = 0
# メソッド终了
return
end
# アクターを取得
if $game_party.actors.include?($game_actors[CHARACTER_GRAPHIC]) && CHARACTER_GRAPHIC != 0
actor = $game_actors[CHARACTER_GRAPHIC]
else
actor = $game_party.actors[0]
end
# キャラクターのファイル名と色相を设定
@character_name = actor.character_name
@character_hue = actor.character_hue
# 不透明度と合成方法を初期化
@opacity = 255
@blend_type = 0
end
end
#==============================================================================
# ■ Spriteset_Battle
#------------------------------------------------------------------------------
# バトル画面のスプライトをまとめたクラスです。このクラスは Scene_Battle クラ
# スの内部で使用されます。
#==============================================================================
class Spriteset_Battle
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
# ビューポートを作成
@viewport1 = Viewport.new(0, 0, 640, 640)#320
@viewport2 = Viewport.new(0, 0, 640, 480)
@viewport3 = Viewport.new(0, 0, 640, 480)
@viewport4 = Viewport.new(0, 0, 640, 480)
@viewport2.z = 101
@viewport3.z = 200
@viewport4.z = 5000
# バトルバックスプライトを作成
@battleback_sprite = Sprite.new(@viewport1)
# エネミースプライトを作成
@enemy_sprites = []
for enemy in $game_troop.enemies.reverse
@enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
end
# アクタースプライトを作成
@actor_sprites = []
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
if BATTLER_ACTORS > 4
for i in 4...BATTLER_ACTORS
@actor_sprites.push(Sprite_Battler.new(@viewport2))
end
end
# 天候を作成
@weather = RPG::Weather.new(@viewport1)
# ピクチャスプライトを作成
@picture_sprites = []
for i in 51..100
@picture_sprites.push(Sprite_Picture.new(@viewport3,
$game_screen.pictures[i]))
end
# タイマースプライトを作成
@timer_sprite = Sprite_Timer.new
# フレーム更新
update
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias update_actor_change update
def update
if BATTLER_ACTORS > 4
for i in 4...BATTLER_ACTORS
@actor_sprites[i].battler = $game_party.actors[i]
end
end
update_actor_change
end
end
#==============================================================================
# ■ Window_MenuStatus
#------------------------------------------------------------------------------
# メニュー画面でパーティメンバーのステータスを表示するウィンドウです。
#==============================================================================
class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, 0, 480, 480)
refresh
self.active = false
self.index = -1
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@item_max = $game_party.actors.size
self.contents = Bitmap.new(width - 32, self.row_max * 116 - 16)
for i in 0...$game_party.actors.size
x = 64
y = i * 116
actor = $game_party.actors[i]
draw_actor_graphic(actor, x - 40, y + 80)
draw_actor_name(actor, x, y)
draw_actor_class(actor, x + 144, y)
draw_actor_level(actor, x, y + 32)
draw_actor_state(actor, x + 90, y + 32)
draw_actor_exp(actor, x, y + 64)
draw_actor_hp(actor, x + 236, y + 32)
draw_actor_sp(actor, x + 236, y + 64)
end
end
#--------------------------------------------------------------------------
# ● カーソル矩形更新
#--------------------------------------------------------------------------
def update_cursor_rect
# カーソル位置が 0 未満の场合
if @index < 0
self.cursor_rect.empty
return
end
# 现在の行を取得
row = @index
# 现在の行が、表示されている先头の行より前の场合
if row < self.top_row
# 现在の行が先头になるようにスクロール
self.top_row = row
end
# 现在の行が、表示されている最後尾の行より後ろの场合
if row > self.top_row + (self.page_row_max - 1)
# 现在の行が最後尾になるようにスクロール
self.top_row = row - (self.page_row_max - 1)
end
# カーソルの幅を计算
cursor_width = self.width - 32
# カーソルの座标を计算
x = @index % @column_max * (cursor_width + 32)
y = @index / @column_max * 116 - self.oy
# カーソルの矩形を更新
self.cursor_rect.set(x, y, self.width - 32, 100)
end
#--------------------------------------------------------------------------
# ● 先头の行の取得
#--------------------------------------------------------------------------
def top_row
# ウィンドウ内容の転送元 Y 座标を、1 行の高さ 116 で割る
return self.oy / 116
end
#--------------------------------------------------------------------------
# ● 先头の行の设定
# row : 先头に表示する行
#--------------------------------------------------------------------------
def top_row=(row)
# row が 0 未満の场合は 0 に修正
if row < 0
row = 0
end
# row が row_max - 1 超の场合は row_max - 1 に修正
if row > row_max - 1
row = row_max - 1
end
# row に 1 行の高さ 116 を挂け、ウィンドウ内容の転送元 Y 座标とする
self.oy = row * 116
end
#--------------------------------------------------------------------------
# ● 1 ページに表示できる行数の取得
#--------------------------------------------------------------------------
def page_row_max
return 4
end
end
#==============================================================================
# ■ Window_BattleStatus
#------------------------------------------------------------------------------
# バトル画面でパーティメンバーのステータスを表示するウィンドウです。
#==============================================================================
class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_LargeParty initialize
def initialize
# 元の処理を実行
initialize_KGC_LargeParty
# レベルアップフラグを再作成
@level_up_flags = []
for i in 0...BATTLER_ACTORS
@level_up_flags[i] = false
end
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = system_color
# self.contents.font.size = 18
# self.contents.draw_text(0, 32, 24, 32, "HP")
# self.contents.draw_text(0, 64, 24, 32, "MP")
@item_max = $game_party.actors.size
# self.contents.font.size = 20
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
actor_x = i * SPRITES_BATTLER + 4
# draw_actor_name(actor, actor_x, 0)
# draw_actor_hp(actor, actor_x, 32, 120)
# draw_actor_sp(actor, actor_x, 64, 120)
if @level_up_flags[i]
self.contents.font.color = normal_color
self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
else
#draw_actor_state(actor, actor_x, 96)
end
end
end
end
#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
# メニュー画面の処理を行うクラスです。
#==============================================================================
class Scene_Menu
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# menu_index : コマンドのカーソル初期位置
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
@actor_change = false
@actor_index = nil
end
#--------------------------------------------------------------------------
# ● フレーム更新 (コマンドウィンドウがアクティブの场合)
#--------------------------------------------------------------------------
alias update_command_actor_change update_command
def update_command
# 元の処理を実行
update_command_actor_change
# 方向ボタンの左か右が押された场合
if Input.trigger?(Input::LEFT) || Input.trigger?(Input::RIGHT)
# 决定 SE を演奏
$game_system.se_play($data_system.decision_se)
@command_window.active = false
@status_window.active = true
@status_window.index = 0
@actor_change = true
@actor_index = nil
return
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (ステータスウィンドウがアクティブの场合)
#--------------------------------------------------------------------------
def update_status
# B ボタンが押された场合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# コマンドウィンドウをアクティブにする
@command_window.active = true
@status_window.active = false
@status_window.index = -1
@actor_change = false
return
end
# C ボタンが押された场合
if Input.trigger?(Input::C)
if @actor_change
# 决定 SE を演奏
$game_system.se_play($data_system.decision_se)
if @actor_index == nil
@actor_index = @status_window.index
else
$game_party.change_actor(@actor_index, @status_window.index)
@actor_index = nil
@status_window.refresh
if $game_party.actors.include?($game_actors[CHARACTER_GRAPHIC]) == false || CHARACTER_GRAPHIC == 0
$game_player.refresh
end
end
return
else
# コマンドウィンドウのカーソル位置で分岐
case @command_window.index
when 1 # スキル
# このアクターの行动制限が 2 以上の场合
if $game_party.actors[@status_window.index].restriction >= 2
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 决定 SE を演奏
$game_system.se_play($data_system.decision_se)
# スキル画面に切り替え
$scene = Scene_Skill.new(@status_window.index)
when 2 # 装备
# 决定 SE を演奏
$game_system.se_play($data_system.decision_se)
# 装备画面に切り替え
$scene = Scene_Equip.new(@status_window.index)
when 3 # ステータス
# 决定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ステータス画面に切り替え
$scene = Scene_Status.new(@status_window.index)
end
return
end
end
end
end
#==============================================================================
# ■ Scene_Battle (分割定义 2)
#------------------------------------------------------------------------------
# バトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● アクターコマンドウィンドウのセットアップ
#--------------------------------------------------------------------------
alias phase3_setup_command_window_actor_change phase3_setup_command_window
def phase3_setup_command_window
# 元の処理を実行
phase3_setup_command_window_actor_change
# アクターコマンドウィンドウの位置を设定
@actor_command_window.x = @actor_index * SPRITES_BATTLER
end
end
更多追问追答
追问
……
追答
#队伍最大人数
ACTORS = 10 #可以修改这个10这个是人数。下面也一样
#战斗人数
BATTLER_ACTORS = 10
#战斗画面修补
#目标 3人 200, 4人 160, 5人 120
SPRITES_BATTLER = 120 #这个120是单个角色的显示大小。人数越多,调的越小
#游戏开始时步行图的显示(1即是角色1的步行图,如此类推)
CHARACTER_GRAPHIC = 1
这一段有没有看哦。。。。。。我都有在旁边做注释了的说。。。
参考资料: 我的相同回答。http://zhidao.baidu.com/question/289785434.html
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询