赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 6422 |
最后登录 | 2018-9-22 |
在线时间 | 0 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 55
- 在线时间
- 0 小时
- 注册时间
- 2007-2-7
- 帖子
- 388
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 凌辰 于 2009-7-2 18:20 编辑
RPG的转职系统,
哪位帮我找出直接转职的。
意思就是不调用$scene = Scene_JobChange.new,选择职业界面。
而是直接和 事件对话,直接转职的,哪位可以帮我找出那段脚本。
不知道理解了没。。
#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================
#==============================================================================
# ◆ 転職システム - job_change◆
#------------------------------------------------------------------------------
# 某RPG的转职系统
#==============================================================================
#描绘职业
JOB_POP = true
#原始职业编号(无职业)
JOB_ID = 10
#角色们的初期职业编号
JOB_ID_ARRAY = [1,4,3,4,1,8,9,7]
#职业的最大等级
JOB_LV_MAX = 3
#显示技能学习
JOB_CHANGE_SKILL = true
#职业能力值变化设定(百分率)
#[职业名, HP, MP, 力量, 灵巧, 速度, 魔, [每一级职业可以学会的特技编号], [升级所需战斗次数]]
#无职业设置为全100即可
#[0,57,58,59,60]表示职业的2、3、4、5级学会特技编号为57、58、59、60
#[1,2,3,4]表示升2级需要战斗至少1次
JOB_LIST = [
["无职业", 100, 100, 100, 100, 100, 100, [ 0, 57, 58, 59, 60], [1, 2, 3, 4]],#2
["焰兵", 110, 130, 110, 110, 100, 150, [ 0, 61, 62, 63, 64], [1, 2, 3, 4]],#3
["斗兵", 120, 100, 120, 120, 140, 100, [ 0, 65, 66, 67, 68], [1, 3, 3, 4]],
["-----", 100, 100, 100, 100, 100, 100, [ 0, 69, 70, 71, 72], [1, 2, 3, 4]],
["烈将", 120, 140, 120, 120, 140, 220, [ 0, 73, 74, 75, 76], [1, 2, 3, 4]],
["战骑", 130, 100, 150, 140, 200, 100, [ 0, 77, 78, 79, 80], [1, 2, 3, 4]],
["-----", 100, 100, 100, 100, 100, 100, [ 7, 11, 15, 30, 32], [1, 2, 3, 4]],
["职业7", 80, 105, 80, 100, 90, 110, [ 1, 4, 0, 5, 6], [1, 2, 3, 4]],
["职业8", 130, 80, 130, 110, 110, 110, [ 0, 80, 76, 64, 72], [1, 3, 6, 10]],
["职业9", 130, 80, 130, 110, 110, 110, [21, 24, 27, 30, 32], [1, 3, 6, 10]],
["无职业", 100, 100, 100, 100, 100, 100]
]
#——这个不用改
JOB_SIZE = JOB_LIST.size - 1
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
# アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors)
# の内部で使用され、Game_Party クラス ($game_party) からも参照されます。
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor_id : アクター ID
#--------------------------------------------------------------------------
def initialize(actor_id)
super()
if JOB_ID_ARRAY[actor_id - 1] != nil && JOB_ID_ARRAY[actor_id - 1] != JOB_SIZE
@job_id = JOB_ID_ARRAY[actor_id - 1]
else
@job_id = JOB_ID
end
@job_level = []
@job_exp = []
setup(actor_id)
end
#--------------------------------------------------------------------------
# ● セットアップ
# actor_id : アクター ID
#--------------------------------------------------------------------------
def setup(actor_id)
actor = $data_actors[actor_id]
@actor_id = actor_id
@name = actor.name
@character_name = actor.character_name
@character_hue = actor.character_hue
@battler_name = actor.battler_name
@battler_hue = actor.battler_hue
@class_id = actor.class_id
@weapon_id = actor.weapon_id
@armor1_id = actor.armor1_id
@armor2_id = actor.armor2_id
@armor3_id = actor.armor3_id
@armor4_id = actor.armor4_id
@level = actor.initial_level
@exp_list = Array.new(101)
make_exp_list
@exp = @exp_list[@level]
@skills = []
@hp = maxhp
@sp = maxsp
@states = []
@states_turn = {}
@maxhp_plus = 0
@maxsp_plus = 0
@str_plus = 0
@dex_plus = 0
@agi_plus = 0
@int_plus = 0
# スキル習得
for i in 1..@level
for j in $data_classes[@class_id].learnings
if j.level == i
learn_skill(j.skill_id)
end
end
end
if JOB_LIST[@job_id][7][0] != 0
learn_skill(JOB_LIST[@job_id][7][0])
end
for i in 0...JOB_SIZE
if @job_id == i
@job_level.push(1)
@job_exp.push(0)
else
@job_level.push(0)
@job_exp.push(0)
end
end
# オートステートを更新
update_auto_state(nil, $data_armors[@armor1_id])
update_auto_state(nil, $data_armors[@armor2_id])
update_auto_state(nil, $data_armors[@armor3_id])
update_auto_state(nil, $data_armors[@armor4_id])
end
#--------------------------------------------------------------------------
# ● 基本 MaxHP の取得
#--------------------------------------------------------------------------
def base_maxhp
return $data_actors[@actor_id].parameters[0, @level] * JOB_LIST[@job_id][1] / 100
end
#--------------------------------------------------------------------------
# ● 基本 MaxSP の取得
#--------------------------------------------------------------------------
def base_maxsp
return $data_actors[@actor_id].parameters[1, @level] * JOB_LIST[@job_id][2] / 100
end
#--------------------------------------------------------------------------
# ● 基本腕力の取得
#--------------------------------------------------------------------------
def base_str
n = $data_actors[@actor_id].parameters[2, @level] * JOB_LIST[@job_id][3] / 100
weapon = $data_weapons[@weapon_id]
armor1 = $data_armors[@armor1_id]
armor2 = $data_armors[@armor2_id]
armor3 = $data_armors[@armor3_id]
armor4 = $data_armors[@armor4_id]
n += weapon != nil ? weapon.str_plus : 0
n += armor1 != nil ? armor1.str_plus : 0
n += armor2 != nil ? armor2.str_plus : 0
n += armor3 != nil ? armor3.str_plus : 0
n += armor4 != nil ? armor4.str_plus : 0
return [[n, 1].max, 999].min
end
#--------------------------------------------------------------------------
# ● 基本器用さの取得
#--------------------------------------------------------------------------
def base_dex
n = $data_actors[@actor_id].parameters[3, @level] * JOB_LIST[@job_id][4] / 100
weapon = $data_weapons[@weapon_id]
armor1 = $data_armors[@armor1_id]
armor2 = $data_armors[@armor2_id]
armor3 = $data_armors[@armor3_id]
armor4 = $data_armors[@armor4_id]
n += weapon != nil ? weapon.dex_plus : 0
n += armor1 != nil ? armor1.dex_plus : 0
n += armor2 != nil ? armor2.dex_plus : 0
n += armor3 != nil ? armor3.dex_plus : 0
n += armor4 != nil ? armor4.dex_plus : 0
return [[n, 1].max, 999].min
end
#--------------------------------------------------------------------------
# ● 基本素早さの取得
#--------------------------------------------------------------------------
def base_agi
n = $data_actors[@actor_id].parameters[4, @level] * JOB_LIST[@job_id][5] / 100
weapon = $data_weapons[@weapon_id]
armor1 = $data_armors[@armor1_id]
armor2 = $data_armors[@armor2_id]
armor3 = $data_armors[@armor3_id]
armor4 = $data_armors[@armor4_id]
n += weapon != nil ? weapon.agi_plus : 0
n += armor1 != nil ? armor1.agi_plus : 0
n += armor2 != nil ? armor2.agi_plus : 0
n += armor3 != nil ? armor3.agi_plus : 0
n += armor4 != nil ? armor4.agi_plus : 0
return [[n, 1].max, 999].min
end
#--------------------------------------------------------------------------
# ● 基本魔力の取得
#--------------------------------------------------------------------------
def base_int
n = $data_actors[@actor_id].parameters[5, @level] * JOB_LIST[@job_id][6] / 100
weapon = $data_weapons[@weapon_id]
armor1 = $data_armors[@armor1_id]
armor2 = $data_armors[@armor2_id]
armor3 = $data_armors[@armor3_id]
armor4 = $data_armors[@armor4_id]
n += weapon != nil ? weapon.int_plus : 0
n += armor1 != nil ? armor1.int_plus : 0
n += armor2 != nil ? armor2.int_plus : 0
n += armor3 != nil ? armor3.int_plus : 0
n += armor4 != nil ? armor4.int_plus : 0
return [[n, 1].max, 999].min
end
#--------------------------------------------------------------------------
# ● 基本 MaxHP の取得
#--------------------------------------------------------------------------
def base_maxhp_false
return $data_actors[@actor_id].parameters[0, @level]
end
#--------------------------------------------------------------------------
# ● 基本 MaxSP の取得
#--------------------------------------------------------------------------
def base_maxsp_false
return $data_actors[@actor_id].parameters[1, @level]
end
#--------------------------------------------------------------------------
# ● 基本腕力の取得
#--------------------------------------------------------------------------
def base_str_false
n = $data_actors[@actor_id].parameters[2, @level]
return [[n, 1].max, 999].min
end
#--------------------------------------------------------------------------
# ● 基本器用さの取得
#--------------------------------------------------------------------------
def base_dex_false
n = $data_actors[@actor_id].parameters[3, @level]
return [[n, 1].max, 999].min
end
#--------------------------------------------------------------------------
# ● 基本素早さの取得
#--------------------------------------------------------------------------
def base_agi_false
n = $data_actors[@actor_id].parameters[4, @level]
return [[n, 1].max, 999].min
end
#--------------------------------------------------------------------------
# ● 基本魔力の取得
#--------------------------------------------------------------------------
def base_int_false
n = $data_actors[@actor_id].parameters[5, @level]
return [[n, 1].max, 999].min
end
#--------------------------------------------------------------------------
# ● クラス名の取得
#--------------------------------------------------------------------------
def job_name
return JOB_LIST[@job_id][0]
end
#--------------------------------------------------------------------------
# ● ジョブ ID の取得
#--------------------------------------------------------------------------
def job_id
return @job_id
end
#--------------------------------------------------------------------------
# ● ジョブ LV の取得
#--------------------------------------------------------------------------
def job_level_get(get_job)
return @job_level[get_job]
end
#--------------------------------------------------------------------------
# ● ジョブ ID の変更
# job_id : 新しいジョブ ID
#--------------------------------------------------------------------------
def job_id=(job_id)
@job_id = job_id
if @job_level[@job_id] == 0
@job_level[@job_id] += 1
if JOB_LIST[@job_id][7][0] != 0
learn_skill(JOB_LIST[@job_id][7][0])
end
end
@hp = [@hp, self.maxhp].min
@sp = [@sp, self.maxsp].min
end
#--------------------------------------------------------------------------
# ● ジョブ LV の変更
# job_id : ジョブ ID
# job_level : LV @job_level
#--------------------------------------------------------------------------
def job_level(job_id, job_level)
job_level > JOB_LV_MAX ? job_level = 5 : job_level
if job_level > @job_level[job_id]
for i in @job_level[job_id]...job_level
if JOB_LIST[job_id][7] != 0# &&
learn_skill(JOB_LIST[job_id][7])
end
end
end
job_level <= 1 ? @job_exp[job_id] = 0 : @job_exp[job_id] = JOB_LIST[job_id][8][job_level - 1]
job_level == 0 ? @job_level[job_id] = 0 : @job_level[job_id] = job_level
end
#--------------------------------------------------------------------------
# ● 戦闘時の処理
#--------------------------------------------------------------------------
def job_battler
if @job_id != JOB_SIZE && @job_level[@job_id] != JOB_LV_MAX
@job_exp[@job_id] += 1
if JOB_LIST[@job_id][8][@job_level[@job_id] - 1] <= @job_exp[@job_id]
$job_level_up = true
if JOB_LIST[@job_id][7][@job_level[@job_id]] != 0
learn_skill(JOB_LIST[@job_id][7][@job_level[@job_id]])
$job_skill = JOB_LIST[@job_id][7][@job_level[@job_id]]
end
@job_level[@job_id] += 1
end
end
end
end
#-------------------------------------------------------------------------------
#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
# ゲーム中のすべてのウィンドウのスーパークラスです。
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# ● クラスの描画
# actor : アクター
# x : 描画先 X 座標
# y : 描画先 Y 座標
#--------------------------------------------------------------------------
def draw_actor_class(actor, x, y)
self.contents.font.color = normal_color
if JOB_POP && actor.job_name != "无职业"
self.contents.draw_text(x, y, 236, 32, actor.job_name)
else
self.contents.draw_text(x, y, 236, 32, actor.class_name)
end
end
end
#-------------------------------------------------------------------------------
#==============================================================================
# ■ Window_JobCommand
#------------------------------------------------------------------------------
# 転職画面のコマンド表示するウィンドウです。
#==============================================================================
class Window_JobCommand < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor : アクター
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 0, 240, 480)
@item_max = JOB_LIST.size
self.contents = Bitmap.new(width - 32, @item_max * 32)
@actor = actor
refresh
self.index = 0
self.active = true
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
for i in 0...JOB_LIST.size
self.contents.draw_text(4, i * 32, 181, 32, JOB_LIST[0])
end
end
end
#-------------------------------------------------------------------------------
#==============================================================================
# ■ Window_JobStatus
#------------------------------------------------------------------------------
# 転職画面でステータスを表示するウィンドウです。
#==============================================================================
class Window_JobStatus < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor : アクター
#--------------------------------------------------------------------------
def initialize(actor)
super(240, 0, 400, 480)
self.contents = Bitmap.new(width - 32, height - 32)
@actor = actor
@sprite = Sprite.new
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh(jobcommand = 0)
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.battler(@actor.battler_name, @actor.battler_hue)
@sprite.x = 260
@sprite.y = 30
@sprite.z = 9999
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0 * 32, 190, 32, "HP", 2)
self.contents.draw_text(4, 1 * 32, 190, 32, "MP", 2)
self.contents.draw_text(4, 2 * 32, 190, 32, $data_system.words.str, 2)
self.contents.draw_text(4, 3 * 32, 190, 32, $data_system.words.dex, 2)
self.contents.draw_text(4, 4 * 32, 190, 32, $data_system.words.agi, 2)
self.contents.draw_text(4, 5 * 32, 190, 32, $data_system.words.int, 2)
for i in 0...6
draw_actor_parameter(@actor, 200, i * 32, i, jobcommand)
end
if jobcommand != JOB_SIZE
txt = ""
for i in 0...JOB_LV_MAX
if @actor.job_level_get(jobcommand) > i
txt += "是"
end
end
if txt == ""
txt += "否"
end
self.contents.draw_text(4, 6.5 * 32, 260, 32, txt,2)
self.contents.font.color = system_color
self.contents.draw_text(4, 6.5 * 32, 220, 32, "已经是当前所处职业")
if JOB_CHANGE_SKILL
self.contents.draw_text(4, 8 * 32, 112, 32, "学会特技")
h = 0
for i in 0...JOB_LV_MAX
if JOB_LIST[jobcommand][7] != 0
skill = $data_skills[JOB_LIST[jobcommand][7]]
self.contents.font.color = system_color
u = i + 1
self.contents.draw_text(48, i * 32 + 288 - h, 364, 32, "达到LV" + u.to_s)
self.contents.font.color = normal_color
# self.contents.draw_text(158, i * 32 + 288 - h, 364, 32, skill.name)
else
h += 32
end
end
end
end
end
#--------------------------------------------------------------------------
# ● パラメータの描画
# actor : アクター
# x : 描画先 X 座標
# y : 描画先 Y 座標
# type : パラメータの種類 (0~6)
#--------------------------------------------------------------------------
def draw_actor_parameter(actor, x, y, type, job)
case type
when 0
parameter_name = actor.maxhp
parameter_value = actor.base_maxhp_false * JOB_LIST[job][1] / 100
when 1
parameter_name = actor.maxsp
parameter_value = actor.base_maxsp_false * JOB_LIST[job][2] / 100
when 2
parameter_name = actor.str
parameter_value = actor.base_str_false * JOB_LIST[job][3] / 100
when 3
parameter_name = actor.dex
parameter_value = actor.base_dex_false * JOB_LIST[job][4] / 100
when 4
parameter_name = actor.agi
parameter_value = actor.base_agi_false * JOB_LIST[job][5] / 100
when 5
parameter_name = actor.int
parameter_value = actor.base_int_false * JOB_LIST[job][6] / 100
end
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 64, 32, parameter_name.to_s, 2)
self.contents.draw_text(x + 66, y, 32, 32, " ⇒ ", 1)
self.contents.font.color = parameter_value < parameter_name ? text_color(2) :
parameter_value == parameter_name ? normal_color : text_color(3)
self.contents.draw_text(x + 80, y, 64, 32, parameter_value.to_s, 2)
self.contents.font.color = normal_color
end
def dispose
super
@sprite.bitmap.dispose
@sprite.dispose
end
end
#-------------------------------------------------------------------------------
#==============================================================================
# ■ Scene_JobChange
#------------------------------------------------------------------------------
# 転職画面処理を行うクラスです。
#==============================================================================
class Scene_JobChange
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor_index : アクターインデックス
#--------------------------------------------------------------------------
def initialize(actor_index = 0)
@actor_index = actor_index
end
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
# アクターを取得
@actor = $game_party.actors[@actor_index]
# ウィンドウを作成
@command_window = Window_JobCommand.new(@actor)
@status_window = Window_JobStatus.new(@actor)
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# ウィンドウを解放
@command_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# ウィンドウを更新
@command_window.update
@status_window.update
if @now_jobcommand != @command_window.index
# カーソル位置によって表示する画面を変える
@status_window.refresh(@command_window.index)
@now_jobcommand = @command_window.index
end
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# マップ画面に切り替え
$scene = Scene_Map.new
return
end
if Input.repeat?(Input::C)
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
@actor.job_id = @command_window.index
# マップ画面に切り替え
$scene = Scene_Map.new
end
if Input.trigger?(Input::L)
$game_system.se_play($data_system.decision_se)
id = @actor_index-1
if id == -1
id = $game_party.actors[$game_party.actors.size-1]
end
$scene = Scene_JobChange.new(id)
end
if Input.trigger?(Input::R)
$game_system.se_play($data_system.decision_se)
id = @actor_index+1
if id == $game_party.actors.size
id = 0
end
$scene = Scene_JobChange.new(id)
end
end
end
#------------------------------------------------------------------------------
#==============================================================================
# ■ Scene_CommandName
#------------------------------------------------------------------------------
# パーティ選択画面の処理を行うクラスです。
#==============================================================================
class Scene_CommandName
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
# スプライトセットを作成
@spriteset = Spriteset_Map.new
# コマンドウィンドウを作成
s = []
for i in 0...$game_party.actors.size
actor = $game_party.actors
s = actor.name
end
@command_window = Window_Command.new(192, s)
@command_window.back_opacity = 160
@command_window.x = 320 - @command_window.width / 2
@command_window.y = 240 - @command_window.height / 2
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# ウィンドウを解放
@command_window.dispose
@spriteset.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# コマンドウィンドウを更新
@command_window.update
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# マップ画面に切り替え
$scene = Scene_Map.new
return
end
# C ボタンが押された場合
if Input.repeat?(Input::C)
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# 転職画面に切り替え
$scene = Scene_JobChange.new(@command_window.index)
end
end
end
#-------------------------------------------------------------------------------
#==============================================================================
# ■ Window_JobBattle
#------------------------------------------------------------------------------
# バトル終了時に、職業のLVアップなどを表示するウィンドウです。
#==============================================================================
class Window_JobBattle < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# exp : EXP
# gold : ゴールド
# treasures : トレジャー
#--------------------------------------------------------------------------
def initialize(txt)
@txt = txt
super(320, 0, 320, @txt.size * 32 + 32)
self.y = 160 - height / 2
self.contents = Bitmap.new(width - 32, height - 32)
self.back_opacity = 160
self.visible = false
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = normal_color
y = 0
for i in [email protected]
if i % 2 == 0
self.contents.draw_text(4, y, 288, 32, @txt.name + "的职业等级上升了")
y += 32
else
if @txt != 0
self.contents.draw_text(4, y, 288, 32, @txt[i - 1].name + " 领悟 " + @txt.name + " !")
y += 32
end
end
end
end
end
#-------------------------------------------------------------------------------
#==============================================================================
# ■ Scene_Battle (分割定義 2)
#------------------------------------------------------------------------------
# バトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
# 戦闘用の各種一時データを初期化
$game_temp.in_battle = true
$game_temp.battle_turn = 0
$game_temp.battle_event_flags.clear
$game_temp.battle_abort = false
$game_temp.battle_main_phase = false
$game_temp.battleback_name = $game_map.battleback_name
$game_temp.forcing_battler = nil
# バトルイベント用インタプリタを初期化
$game_system.battle_interpreter.setup(nil, 0)
# トループを準備
@troop_id = $game_temp.battle_troop_id
$game_troop.setup(@troop_id)
# アクターコマンドウィンドウを作成
s1 = $data_system.words.attack
s2 = $data_system.words.skill
s3 = $data_system.words.guard
s4 = $data_system.words.item
@actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
@actor_command_window.y = 160
@actor_command_window.back_opacity = 160
@actor_command_window.active = false
@actor_command_window.visible = false
# その他のウィンドウを作成
@party_command_window = Window_PartyCommand.new
@help_window = Window_Help.new
@help_window.back_opacity = 160
@help_window.visible = false
@status_window = Window_BattleStatus.new
@message_window = Window_Message.new
# スプライトセットを作成
@spriteset = Spriteset_Battle.new
# ウェイトカウントを初期化
@wait_count = 0
# トランジション実行
if $data_system.battle_transition == ""
Graphics.transition(20)
else
Graphics.transition(40, "Graphics/Transitions/" +
$data_system.battle_transition)
end
# プレバトルフェーズ開始
start_phase1
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# マップをリフレッシュ
$game_map.refresh
# トランジション準備
Graphics.freeze
# ウィンドウを解放
@actor_command_window.dispose
@party_command_window.dispose
@help_window.dispose
@status_window.dispose
@message_window.dispose
if @skill_window != nil
@skill_window.dispose
end
if @item_window != nil
@item_window.dispose
end
if @result_window != nil
@result_window.dispose
end
if @job_window != nil
@job_window.dispose
end
# スプライトセットを解放
@spriteset.dispose
# タイトル画面に切り替え中の場合
if $scene.is_a?(Scene_Title)
# 画面をフェードアウト
Graphics.transition
Graphics.freeze
end
# 戦闘テストからゲームオーバー画面以外に切り替え中の場合
if $BTEST and not $scene.is_a?(Scene_Gameover)
$scene = nil
end
end
#--------------------------------------------------------------------------
# ● アフターバトルフェーズ開始
#--------------------------------------------------------------------------
def start_phase5
# フェーズ 5 に移行
@phase = 5
# バトル終了 ME を演奏
$game_system.me_play($game_system.battle_end_me)
# バトル開始前の BGM に戻す
$game_system.bgm_play($game_temp.map_bgm)
# EXP、ゴールド、トレジャーを初期化
exp = 0
gold = 0
treasures = []
# ループ
for enemy in $game_troop.enemies
# エネミーが隠れ状態でない場合
unless enemy.hidden
# 獲得 EXP、ゴールドを追加
exp += enemy.exp
gold += enemy.gold
# トレジャー出現判定
if rand(100) < enemy.treasure_prob
if enemy.item_id > 0
treasures.push($data_items[enemy.item_id])
end
if enemy.weapon_id > 0
treasures.push($data_weapons[enemy.weapon_id])
end
if enemy.armor_id > 0
treasures.push($data_armors[enemy.armor_id])
end
end
end
end
# トレジャーの数を 6 個までに限定
treasures = treasures[0..5]
# EXP 獲得
for i in 0...$game_party.actors.size
actor = $game_party.actors
if actor.cant_get_exp? == false
last_level = actor.level
actor.exp += exp
if actor.level > last_level
@status_window.level_up(i)
end
end
end
# ゴールド獲得
$game_party.gain_gold(gold)
# トレジャー獲得
for item in treasures
case item
when RPG::Item
$game_party.gain_item(item.id, 1)
when RPG::Weapon
$game_party.gain_weapon(item.id, 1)
when RPG::Armor
$game_party.gain_armor(item.id, 1)
end
end
# バトルリザルトウィンドウを作成
@result_window = Window_BattleResult.new(exp, gold, treasures)
# ウェイトカウントを設定
@phase5_wait_count = 100
job_exp = []
$job_level_up = false
$job_skill = 0
for i in 0...$game_party.actors.size
actor = $game_party.actors
actor.job_battler
if $job_level_up
job_exp.push($game_party.actors, $data_skills[$job_skill])
$job_level_up = false
$job_skill = 0
end
end
if job_exp.empty?
@result_window.x = 160
else
@job_window = Window_JobBattle.new(job_exp)
end
end
#--------------------------------------------------------------------------
# ● フレーム更新 (アフターバトルフェーズ)
#--------------------------------------------------------------------------
def update_phase5
# ウェイトカウントが 0 より大きい場合
if @phase5_wait_count > 0
# ウェイトカウントを減らす
@phase5_wait_count -= 1
# ウェイトカウントが 0 になった場合
if @phase5_wait_count == 0
# リザルトウィンドウを表示
@result_window.visible = true
if @job_window != nil
@job_window.visible = true
end
# メインフェーズフラグをクリア
$game_temp.battle_main_phase = false
# ステータスウィンドウをリフレッシュ
@status_window.refresh
end
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# バトル終了
battle_end(0)
end
end
end
#-------------------------------------------------------------------------------
#==============================================================================
# ■ Window_Status2
#------------------------------------------------------------------------------
# 職業のLVなどを画面で表示するウィンドウです。
#==============================================================================
class Window_Status2 < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor : アクター
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 0, 640, 480)
if JOB_SIZE > 24
if JOB_SIZE % 6 == 0
width = JOB_SIZE / 6 * 160 - (JOB_SIZE / 6 * 5)
else
width = JOB_SIZE / 6 * 160 + 120 - (JOB_SIZE / 6 * 5)
end
else
width = 640
end
self.contents = Bitmap.new(width - 32, height - 32)
self.visible = false
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
for i in 0...JOB_SIZE
x = i / 6 * 152
y = i % 6 * 76
txt = ""
job_name = JOB_LIST[0]
for j in 0...JOB_LV_MAX
if @actor.job_level_get(i) > j
txt += "☆"
end
end
self.contents.draw_text(x, y + 32, 152, 32, txt)
self.contents.draw_text(x, y, 152, 32, job_name)
end
end
end
#-------------------------------------------------------------------------------
#==============================================================================
# ■ Scene_Status
#------------------------------------------------------------------------------
# ステータス画面の処理を行うクラスです。
#==============================================================================
class Scene_Status
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor_index : アクターインデックス
#--------------------------------------------------------------------------
def initialize(actor_index = 0, equip_index = 0)
@actor_index = actor_index
end
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
def main
# アクターを取得
@actor = $game_party.actors[@actor_index]
# ステータスウィンドウを作成
@status_window = Window_Status.new(@actor)
@status2_window = Window_Status2.new(@actor)
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# ウィンドウを解放
@status_window.dispose
@status2_window.dispose
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
# C ボタンが押された場合
if Input.trigger?(Input::C)
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
@status_window.visible = !@status_window.visible
@status2_window.visible = !@status2_window.visible
end
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# メニュー画面に切り替え
$scene = Scene_Menu.new(3)
return
end
# R ボタンが押された場合
if Input.trigger?(Input::R)
# カーソル SE を演奏
$game_system.se_play($data_system.cursor_se)
# 次のアクターへ
@actor_index += 1
@actor_index %= $game_party.actors.size
# 別のステータス画面に切り替え
$scene = Scene_Status.new(@actor_index)
return
end
# L ボタンが押された場合
if Input.trigger?(Input::L)
# カーソル SE を演奏
$game_system.se_play($data_system.cursor_se)
# 前のアクターへ
@actor_index += $game_party.actors.size - 1
@actor_index %= $game_party.actors.size
# 別のステータス画面に切り替え
$scene = Scene_Status.new(@actor_index)
return
end
if JOB_SIZE > 24 && @status2_window.visible
# 方向ボタンの右が押された場合
if Input.trigger?(Input::RIGHT)
if @status2_window.ox != (JOB_SIZE % 6 == 0 ? (JOB_SIZE / 6 - 4) * 152 : (JOB_SIZE / 6 - 3) * 152)
@status2_window.ox += 152
$game_system.se_play($data_system.cursor_se)
end
end
# 方向ボタンの左が押された場合
if Input.trigger?(Input::LEFT)
if @status2_window.ox != 0
@status2_window.ox -= 152
$game_system.se_play($data_system.cursor_se)
end
end
end
end
end
#==============================================================================
# 本脚本来自www.66RPG.com,使用和转载请保留此信息
#==============================================================================
————————————————————
标题已修改,请遵守版规。 |
|