赞 | 352 |
VIP | 55 |
好人卡 | 9 |
积分 | 364 |
经验 | 117206 |
最后登录 | 2024-11-21 |
在线时间 | 10796 小时 |
Lv5.捕梦者
- 梦石
- 0
- 星屑
- 36427
- 在线时间
- 10796 小时
- 注册时间
- 2009-3-15
- 帖子
- 4814
|
本帖最后由 soulsaga 于 2017-11-29 19:32 编辑
找到个按键发动技能脚本..根据用法..或许可完成LZ要的中途输入指令发动超必杀..#============================================================================== # ■ XP-RGSS-33 コマンドスキル [Ver.2.3.0] by Claimh #------------------------------------------------------------------------------ # コマンド入力によってスキルを発動させます。 # コマンド入力に失敗した場合、威力減少(&アニメーション変化) #============================================================================== module CommandSkill # キー簡易置き換え A = Input::A # キーボード:Z B = Input::B # キーボード:X C = Input::C # キーボード:C X = Input::X # キーボード:A Y = Input::Y # キーボード:S Z = Input::Z # キーボード:D L = Input::L # キーボード:Q R = Input::R # キーボード:W UP = Input::UP DOWN = Input::DOWN LEFT = Input::LEFT RIGHT = Input::RIGHT RAND = "?" # ランダムキー #============================================================================== # □ カスタマイズSTART #============================================================================== # 1キーあたりの入力時間 KEY_SEC = 1.0 # キー入力時に表示するバーのファイル名(Graphics/Windowskinsにインポート) T_BAR_NAME = "bar" # コマンド表示タイプ # true :ゲームパッド式 # false:キーボード式 KEY_TYPE = true # コマンド入力成功時に対象を全体化(true:有効|false:無効) ALL_ATK = false # 全体化するスキルID ALL_ATK_SK = [57, 61] # 成功時のSE(nil:無効) COMP_SE = "056-Right02" # 失敗時のSE(nil:無効) MISS_SE = "058-Wrong02" # 失敗時に対象側アニメーションを変える(true:有効|false:無効) MISS_ANIME = true # コマンド表示時の文字間隔 TEXT_W = 32 # スキル設定 T_SKILL = { #スキルID => [[キー1,キー2,・・・],失敗時の威力(%)(,失敗時のアニメID)] 1 => [[UP,DOWN], 0.0], 7 => [[UP,DOWN], 50], 8 => [[X,C,Z], 50], 9 => [[DOWN,X,A,B], 50], 10 => [[LEFT,UP], 50], 11 => [[L,X,R], 50], 12 => [[X,C,RIGHT,R], 50], 13 => [[UP,RIGHT], 50], 14 => [[L,Z,A], 50], 15 => [[R,X,X,DOWN], 50], 16 => [[DOWN, RIGHT], 50], 17 => [[A,B,C], 50], 18 => [[Y,X,DOWN,B], 50], 19 => [[LEFT,DOWN], 50], 20 => [[Z,Y,A], 50], 21 => [[B,C,X,L], 50], 22 => [[RIGHT,DOWN], 50], 23 => [[A,B,R], 50], 24 => [[X,Y,LEFT,R], 50], 25 => [[LEFT,RIGHT], 50], 26 => [[X,L,B], 50], 27 => [[LEFT,X,C,Z], 50], 28 => [[LEFT,DOWN], 50], 29 => [[C,X,A], 50], 30 => [[X,Z,C,UP], 50], 31 => [[UP,DOWN,X], 0], 32 => [[LEFT,RIGHT,L,R], 50], 57 => [[RAND, RAND], 10], 58 => [[C, X, UP], 50], 59 => [[A, UP, RIGHT, A], 50], 60 => [[Z, C, A, B], 50], 61 => [[X, RAND], 50], 62 => [[UP, X, DOWN], 50], 63 => [[LEFT, C, Y, A], 50], 64 => [[X, C, Y, A], 50], 65 => [[Y, A], 50], 66 => [[RIGHT, B, A], 50], 67 => [[LEFT, UP, Z, A], 50], 68 => [[Y, B, Y, A], 50], 69 => [[LEFT, A], 50], 70 => [[A, C, A], 50], 71 => [[B, B, A, A], 50], 72 => [[A, B, X, Y], 50], 73 => [[X, A], 50], 74 => [[Y, A, B], 50], 75 => [[LEFT, RIGHT, Y, A], 50], 76 => [[A, C, L, A], 50], 77 => [[R, X], 50], 78 => [[L, C, R], 50], 79 => [[LEFT, L, RIGHT, R], 50], 80 => [[C, C, Z, RIGHT], 50], #100 => [[LEFT], 0,0], 101 => [[LEFT], 0,0] } #============================================================================== # □ カスタマイズEND #============================================================================== R_KEYS = [A,B,C,X,Y,Z,L,R,UP,DOWN,LEFT,RIGHT] # ランダムキーに使うキー配列 #-------------------------------------------------------------------------- # ● キーリスト取得 #-------------------------------------------------------------------------- def self.get_key_list(skill_id) return nil if T_SKILL[skill_id].nil? return nil if T_SKILL[skill_id][0].nil? return T_SKILL[skill_id][0] end #-------------------------------------------------------------------------- # ● ランダムキー変換 #-------------------------------------------------------------------------- def self.change_rand(list) ret_list = [] for i in 0...list.size ret_list.push(list[i] == RAND ? R_KEYS[rand(R_KEYS.size)] : list[i]) end return ret_list end end #============================================================================== # ■ Input #============================================================================== module Input module_function #-------------------------------------------------------------------------- # ● 指定キー以外のキー入力判定 #-------------------------------------------------------------------------- def n_trigger?(num) if trigger?(num) return false elsif trigger?(A) or trigger?(B) or trigger?(C) or trigger?(X) or trigger?(Y) or trigger?(Z) or trigger?(L) or trigger?(R) or trigger?(UP) or trigger?(DOWN) or trigger?(RIGHT) or trigger?(LEFT) return true end return false # 未入力または使用しないキーの場合 end #-------------------------------------------------------------------------- # ● キー変換テーブル(表示文字取得用) #-------------------------------------------------------------------------- GP_KEY = { # ゲームパッド用変換テーブル A=>"A",B=>"B",C=>"C",X=>"X",Y=>"Y",Z=>"Z",L=>"L",R=>"R", UP=>"↑",DOWN=>"↓",LEFT=>"←",RIGHT=>"→" } KB_KEY = { # キーボード用変換テーブル A=>"Z",B=>"X",C=>"C",X=>"A",Y=>"S",Z=>"D",L=>"Q",R=>"W", UP=>"↑",DOWN=>"↓",LEFT=>"←",RIGHT=>"→" } def key_converter(key) return CommandSkill::RAND if key == CommandSkill::RAND # ゲームパッドタイプ if CommandSkill::KEY_TYPE ret = GP_KEY[key] # キーボードタイプ else ret = KB_KEY[key] end return (ret == nil ? "" : ret ) end end #============================================================================== # ■ Window_KeyCounter #------------------------------------------------------------------------------ # 進捗率を表示するバー #============================================================================== class Window_KeyCounter < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # key :キー配列 #-------------------------------------------------------------------------- def initialize #p 111 super(0, 256, 150, 80) self.contents = Bitmap.new(width - 32, height - 32) self.opacity = 0 self.z = 1 # バトラーよりも奥に表示 refresh(0) end #-------------------------------------------------------------------------- # ● リフレッシュ # current = 進捗率(%) #-------------------------------------------------------------------------- def refresh(current) self.contents.clear #draw_counter_bar(0, 0, 100-current) # 進捗方向:← draw_counter_bar(0, 0, current) # 進捗方向:→ end #-------------------------------------------------------------------------- # ● バー表示 # x : x表示位置 # y : y表示位置 # current : 進捗率(%) #-------------------------------------------------------------------------- def draw_counter_bar(x, y, current) bitmap = RPG::Cache.windowskin(CommandSkill::T_BAR_NAME) cw = bitmap.width * current / 100 ch = bitmap.height src_rect = Rect.new(0, 0, cw, ch) self.contents.blt(x, y, bitmap, src_rect) end end #============================================================================== # ■ Window_KeyCount #------------------------------------------------------------------------------ # 入力するキーを表示するウィンドウ。 #============================================================================== class Window_KeyCount < Window_Base TEXT_H = 32 # 文字高さ #-------------------------------------------------------------------------- # ● オブジェクト初期化 # key :キー配列 #-------------------------------------------------------------------------- def initialize(key) super(0, 220, 150, 80) self.contents = Bitmap.new(width - 32, height - 32) self.back_opacity = 160 # 半透明 self.z = 0 # 進捗バーよりも奥に表示 @key = key @key_count = 0 refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear for i in 0...@key.size x = i * CommandSkill::TEXT_W # 文字間の間隔 if i < @key_count self.contents.font.color = knockout_color else self.contents.font.color = normal_color end self.contents.draw_text(x, 0, 100, TEXT_H, Input.key_converter(@key[i])) end end #-------------------------------------------------------------------------- # ● キーカウント #-------------------------------------------------------------------------- def key_in @key_count += 1 refresh end #-------------------------------------------------------------------------- # ● テキスト表示 # text : テキスト #-------------------------------------------------------------------------- def text_in(text) self.contents.clear self.contents.draw_text(0, 0, 100, TEXT_H, text, 1) end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler attr_accessor :cmd_miss_flag # コマンド入力ミス #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_cmd_skill initialize def initialize initialize_cmd_skill # 原物 @cmd_miss_flag = false $csk = 1 end #-------------------------------------------------------------------------- # ● スキルの効果適用 # user : スキルの使用者 (バトラー) # skill : スキル #-------------------------------------------------------------------------- alias skill_effect_cmd_skill skill_effect def skill_effect(user, skill) if $scene.is_a?(Scene_Battle) and user.cmd_miss_flag skill_copy = $data_skills[skill.id].dup skill.power = skill.power * CommandSkill::T_SKILL[skill.id][1] / 100 skill.hit = 0 if skill.power == 0 # 威力0で命中しない補正 end ret = skill_effect_cmd_skill(user, skill) if $scene.is_a?(Scene_Battle) and user.cmd_miss_flag user.cmd_miss_flag = false $data_skills[skill.id] = skill_copy.dup end return ret end end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ● CMD Skill初期化 #-------------------------------------------------------------------------- def init_cmd_skill @active_battler.cmd_miss_flag = false @cmd_skill_ok = false @cmd_skill_miss_flag = false end #-------------------------------------------------------------------------- # ● CMD Skill実行可能? #-------------------------------------------------------------------------- def cmd_skill_enable?(skill_id) # エネミーは不可 return false if @active_battler.is_a?(Game_Enemy) # データなし return false if CommandSkill.get_key_list(skill_id).nil? # 閃き時コマンドなし return false if defined?(SysFlash) and @active_battler.flash_flg # 強制アクションでなければ unless @active_battler.current_action.forcing # SP 切れなどで使用できなくなった場合 unless @active_battler.skill_can_use?(skill_id) # アクション強制対象のバトラーをクリア $game_temp.forcing_battler = nil return false end end return true end #-------------------------------------------------------------------------- # ● CMD Skill前処理 #-------------------------------------------------------------------------- def pre_cmd_skill init_cmd_skill $csk = @active_battler.current_action.skill_id skill_id = @active_battler.current_action.skill_id return unless cmd_skill_enable?(skill_id) # コマンドスキル発動 make_cmd_skill_skill_result(skill_id) #skill_update_phase4_step3(skill_id) # 全体化 if CommandSkill::ALL_ATK and @cmd_skill_ok if CommandSkill::ALL_ATK_SK.include?(skill_id) @skill_copy = @skill.dup @skill.scope = 2 end end end #-------------------------------------------------------------------------- # ● CMD Skill後処理 #-------------------------------------------------------------------------- def after_cmd_skill if CommandSkill::ALL_ATK and @cmd_skill_ok if CommandSkill::ALL_ATK_SK.include?(@skill_copy.id) @skill = $data_skills[@skill_copy.id] = @skill_copy end end # Miss時にアニメーションを変える if CommandSkill::MISS_ANIME and @cmd_skill_miss_flag unless CommandSkill::T_SKILL[@skill.id][2].nil? @animation1_id = CommandSkill::T_SKILL[@skill.id][1] @animation2_id = CommandSkill::T_SKILL[@skill.id][2] end end init_cmd_skill end #-------------------------------------------------------------------------- # ● コマンドスキル Window X位置取得 #-------------------------------------------------------------------------- def cmd_skill_window_x #「戦闘位置補正」併用時にコメント外す #case $game_party.actors.size #when 1 # actor_x = 240 #when 2 # actor_x = @active_battler.index * 240 + 120 #when 3 # actor_x = @active_battler.index * 200 + 40 #when 4 actor_x = @active_battler.index * 160 #end return actor_x end #-------------------------------------------------------------------------- # ● コマンドスキル コマンド入力ループUPDATE #-------------------------------------------------------------------------- def cmd_skill_loop_update Graphics.update Input.update @spriteset.update end #-------------------------------------------------------------------------- # ● コマンドスキル コマンド入力ループ #-------------------------------------------------------------------------- def cmd_skill_loop(cmd_list, time) key_count = 0 for i in 0...time cmd_skill_loop_update # キー入力に成功? if Input.trigger?(cmd_list[key_count]) key_count += 1 @window_keycount.key_in elsif Input.n_trigger?(cmd_list[key_count]) # 違うキーを押した # Miss時 SE演奏 Audio.se_play("Audio/SE/" + CommandSkill::MISS_SE) if CommandSkill::MISS_SE != nil break end # 全キー入力完了 if key_count >= cmd_list.size @window_keycount.text_in("Complete") # Complete時 SE演奏 Audio.se_play("Audio/SE/" + CommandSkill::COMP_SE) if CommandSkill::COMP_SE != nil @cmd_skill_ok = true break end # 進捗バーの更新 @window_counter.refresh((i*100/time).truncate) end end #-------------------------------------------------------------------------- # ● コマンドスキル 結果作成 #-------------------------------------------------------------------------- def make_cmd_skill_skill_result(skill_id) # コマンドリスト取得 cmd_list = CommandSkill.get_key_list(skill_id) cmd_list = CommandSkill.change_rand(cmd_list) time = CommandSkill::KEY_SEC * cmd_list.size * Graphics.frame_rate # キー入力&カウントウィンドウ作成 @window_keycount = Window_KeyCount.new(cmd_list) @window_counter = Window_KeyCounter.new @window_keycount.x = @window_counter.x = cmd_skill_window_x # コマンド入力ループ cmd_skill_loop(cmd_list, time) # ミス時は"Miss"表示 unless @cmd_skill_ok @window_keycount.text_in("Miss") @active_battler.cmd_miss_flag = true @cmd_skill_miss_flag = true end # Miss、Complete表示用のウェイト for i in 0...10 cmd_skill_loop_update end @window_keycount.dispose @window_counter.dispose end #------------------------------------------------------------------------------ #-------------------------------------------------------------------------- # ● スキルアクション 結果作成 #-------------------------------------------------------------------------- alias make_skill_action_result_cmd_skill make_skill_action_result def make_skill_action_result pre_cmd_skill make_skill_action_result_cmd_skill # 原物 after_cmd_skill end end
#==============================================================================
# ■ XP-RGSS-33 コマンドスキル [Ver.2.3.0] by Claimh
#------------------------------------------------------------------------------
# コマンド入力によってスキルを発動させます。
# コマンド入力に失敗した場合、威力減少(&アニメーション変化)
#==============================================================================
module CommandSkill
# キー簡易置き換え
A = Input::A # キーボード:Z
B = Input::B # キーボード:X
C = Input::C # キーボード:C
X = Input::X # キーボード:A
Y = Input::Y # キーボード:S
Z = Input::Z # キーボード:D
L = Input::L # キーボード:Q
R = Input::R # キーボード:W
UP = Input::UP
DOWN = Input::DOWN
LEFT = Input::LEFT
RIGHT = Input::RIGHT
RAND = "?" # ランダムキー
#==============================================================================
# □ カスタマイズSTART
#==============================================================================
# 1キーあたりの入力時間
KEY_SEC = 1.0
# キー入力時に表示するバーのファイル名(Graphics/Windowskinsにインポート)
T_BAR_NAME = "bar"
# コマンド表示タイプ
# true :ゲームパッド式
# false:キーボード式
KEY_TYPE = true
# コマンド入力成功時に対象を全体化(true:有効|false:無効)
ALL_ATK = false
# 全体化するスキルID
ALL_ATK_SK = [57, 61]
# 成功時のSE(nil:無効)
COMP_SE = "056-Right02"
# 失敗時のSE(nil:無効)
MISS_SE = "058-Wrong02"
# 失敗時に対象側アニメーションを変える(true:有効|false:無効)
MISS_ANIME = true
# コマンド表示時の文字間隔
TEXT_W = 32
# スキル設定
T_SKILL = {
#スキルID => [[キー1,キー2,・・・],失敗時の威力(%)(,失敗時のアニメID)]
1 => [[UP,DOWN], 0.0],
7 => [[UP,DOWN], 50],
8 => [[X,C,Z], 50],
9 => [[DOWN,X,A,B], 50],
10 => [[LEFT,UP], 50],
11 => [[L,X,R], 50],
12 => [[X,C,RIGHT,R], 50],
13 => [[UP,RIGHT], 50],
14 => [[L,Z,A], 50],
15 => [[R,X,X,DOWN], 50],
16 => [[DOWN, RIGHT], 50],
17 => [[A,B,C], 50],
18 => [[Y,X,DOWN,B], 50],
19 => [[LEFT,DOWN], 50],
20 => [[Z,Y,A], 50],
21 => [[B,C,X,L], 50],
22 => [[RIGHT,DOWN], 50],
23 => [[A,B,R], 50],
24 => [[X,Y,LEFT,R], 50],
25 => [[LEFT,RIGHT], 50],
26 => [[X,L,B], 50],
27 => [[LEFT,X,C,Z], 50],
28 => [[LEFT,DOWN], 50],
29 => [[C,X,A], 50],
30 => [[X,Z,C,UP], 50],
31 => [[UP,DOWN,X], 0],
32 => [[LEFT,RIGHT,L,R], 50],
57 => [[RAND, RAND], 10],
58 => [[C, X, UP], 50],
59 => [[A, UP, RIGHT, A], 50],
60 => [[Z, C, A, B], 50],
61 => [[X, RAND], 50],
62 => [[UP, X, DOWN], 50],
63 => [[LEFT, C, Y, A], 50],
64 => [[X, C, Y, A], 50],
65 => [[Y, A], 50],
66 => [[RIGHT, B, A], 50],
67 => [[LEFT, UP, Z, A], 50],
68 => [[Y, B, Y, A], 50],
69 => [[LEFT, A], 50],
70 => [[A, C, A], 50],
71 => [[B, B, A, A], 50],
72 => [[A, B, X, Y], 50],
73 => [[X, A], 50],
74 => [[Y, A, B], 50],
75 => [[LEFT, RIGHT, Y, A], 50],
76 => [[A, C, L, A], 50],
77 => [[R, X], 50],
78 => [[L, C, R], 50],
79 => [[LEFT, L, RIGHT, R], 50],
80 => [[C, C, Z, RIGHT], 50],
#100 => [[LEFT], 0,0],
101 => [[LEFT], 0,0]
}
#==============================================================================
# □ カスタマイズEND
#==============================================================================
R_KEYS = [A,B,C,X,Y,Z,L,R,UP,DOWN,LEFT,RIGHT] # ランダムキーに使うキー配列
#--------------------------------------------------------------------------
# ● キーリスト取得
#--------------------------------------------------------------------------
def self.get_key_list(skill_id)
return nil if T_SKILL[skill_id].nil?
return nil if T_SKILL[skill_id][0].nil?
return T_SKILL[skill_id][0]
end
#--------------------------------------------------------------------------
# ● ランダムキー変換
#--------------------------------------------------------------------------
def self.change_rand(list)
ret_list = []
for i in 0...list.size
ret_list.push(list[i] == RAND ? R_KEYS[rand(R_KEYS.size)] : list[i])
end
return ret_list
end
end
#==============================================================================
# ■ Input
#==============================================================================
module Input
module_function
#--------------------------------------------------------------------------
# ● 指定キー以外のキー入力判定
#--------------------------------------------------------------------------
def n_trigger?(num)
if trigger?(num)
return false
elsif trigger?(A) or trigger?(B) or trigger?(C) or
trigger?(X) or trigger?(Y) or trigger?(Z) or
trigger?(L) or trigger?(R) or
trigger?(UP) or trigger?(DOWN) or trigger?(RIGHT) or trigger?(LEFT)
return true
end
return false # 未入力または使用しないキーの場合
end
#--------------------------------------------------------------------------
# ● キー変換テーブル(表示文字取得用)
#--------------------------------------------------------------------------
GP_KEY = { # ゲームパッド用変換テーブル
A=>"A",B=>"B",C=>"C",X=>"X",Y=>"Y",Z=>"Z",L=>"L",R=>"R",
UP=>"↑",DOWN=>"↓",LEFT=>"←",RIGHT=>"→"
}
KB_KEY = { # キーボード用変換テーブル
A=>"Z",B=>"X",C=>"C",X=>"A",Y=>"S",Z=>"D",L=>"Q",R=>"W",
UP=>"↑",DOWN=>"↓",LEFT=>"←",RIGHT=>"→"
}
def key_converter(key)
return CommandSkill::RAND if key == CommandSkill::RAND
# ゲームパッドタイプ
if CommandSkill::KEY_TYPE
ret = GP_KEY[key]
# キーボードタイプ
else
ret = KB_KEY[key]
end
return (ret == nil ? "" : ret )
end
end
#==============================================================================
# ■ Window_KeyCounter
#------------------------------------------------------------------------------
# 進捗率を表示するバー
#==============================================================================
class Window_KeyCounter < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# key :キー配列
#--------------------------------------------------------------------------
def initialize
#p 111
super(0, 256, 150, 80)
self.contents = Bitmap.new(width - 32, height - 32)
self.opacity = 0
self.z = 1 # バトラーよりも奥に表示
refresh(0)
end
#--------------------------------------------------------------------------
# ● リフレッシュ
# current = 進捗率(%)
#--------------------------------------------------------------------------
def refresh(current)
self.contents.clear
#draw_counter_bar(0, 0, 100-current) # 進捗方向:←
draw_counter_bar(0, 0, current) # 進捗方向:→
end
#--------------------------------------------------------------------------
# ● バー表示
# x : x表示位置
# y : y表示位置
# current : 進捗率(%)
#--------------------------------------------------------------------------
def draw_counter_bar(x, y, current)
bitmap = RPG::Cache.windowskin(CommandSkill::T_BAR_NAME)
cw = bitmap.width * current / 100
ch = bitmap.height
src_rect = Rect.new(0, 0, cw, ch)
self.contents.blt(x, y, bitmap, src_rect)
end
end
#==============================================================================
# ■ Window_KeyCount
#------------------------------------------------------------------------------
# 入力するキーを表示するウィンドウ。
#==============================================================================
class Window_KeyCount < Window_Base
TEXT_H = 32 # 文字高さ
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# key :キー配列
#--------------------------------------------------------------------------
def initialize(key)
super(0, 220, 150, 80)
self.contents = Bitmap.new(width - 32, height - 32)
self.back_opacity = 160 # 半透明
self.z = 0 # 進捗バーよりも奥に表示
@key = key
@key_count = 0
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
for i in 0...@key.size
x = i * CommandSkill::TEXT_W # 文字間の間隔
if i < @key_count
self.contents.font.color = knockout_color
else
self.contents.font.color = normal_color
end
self.contents.draw_text(x, 0, 100, TEXT_H, Input.key_converter(@key[i]))
end
end
#--------------------------------------------------------------------------
# ● キーカウント
#--------------------------------------------------------------------------
def key_in
@key_count += 1
refresh
end
#--------------------------------------------------------------------------
# ● テキスト表示
# text : テキスト
#--------------------------------------------------------------------------
def text_in(text)
self.contents.clear
self.contents.draw_text(0, 0, 100, TEXT_H, text, 1)
end
end
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
attr_accessor :cmd_miss_flag # コマンド入力ミス
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_cmd_skill initialize
def initialize
initialize_cmd_skill # 原物
@cmd_miss_flag = false
$csk = 1
end
#--------------------------------------------------------------------------
# ● スキルの効果適用
# user : スキルの使用者 (バトラー)
# skill : スキル
#--------------------------------------------------------------------------
alias skill_effect_cmd_skill skill_effect
def skill_effect(user, skill)
if $scene.is_a?(Scene_Battle) and user.cmd_miss_flag
skill_copy = $data_skills[skill.id].dup
skill.power = skill.power * CommandSkill::T_SKILL[skill.id][1] / 100
skill.hit = 0 if skill.power == 0 # 威力0で命中しない補正
end
ret = skill_effect_cmd_skill(user, skill)
if $scene.is_a?(Scene_Battle) and user.cmd_miss_flag
user.cmd_miss_flag = false
$data_skills[skill.id] = skill_copy.dup
end
return ret
end
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
#--------------------------------------------------------------------------
# ● CMD Skill初期化
#--------------------------------------------------------------------------
def init_cmd_skill
@active_battler.cmd_miss_flag = false
@cmd_skill_ok = false
@cmd_skill_miss_flag = false
end
#--------------------------------------------------------------------------
# ● CMD Skill実行可能?
#--------------------------------------------------------------------------
def cmd_skill_enable?(skill_id)
# エネミーは不可
return false if @active_battler.is_a?(Game_Enemy)
# データなし
return false if CommandSkill.get_key_list(skill_id).nil?
# 閃き時コマンドなし
return false if defined?(SysFlash) and @active_battler.flash_flg
# 強制アクションでなければ
unless @active_battler.current_action.forcing
# SP 切れなどで使用できなくなった場合
unless @active_battler.skill_can_use?(skill_id)
# アクション強制対象のバトラーをクリア
$game_temp.forcing_battler = nil
return false
end
end
return true
end
#--------------------------------------------------------------------------
# ● CMD Skill前処理
#--------------------------------------------------------------------------
def pre_cmd_skill
init_cmd_skill
$csk = @active_battler.current_action.skill_id
skill_id = @active_battler.current_action.skill_id
return unless cmd_skill_enable?(skill_id)
# コマンドスキル発動
make_cmd_skill_skill_result(skill_id)
#skill_update_phase4_step3(skill_id)
# 全体化
if CommandSkill::ALL_ATK and @cmd_skill_ok
if CommandSkill::ALL_ATK_SK.include?(skill_id)
@skill_copy = @skill.dup
@skill.scope = 2
end
end
end
#--------------------------------------------------------------------------
# ● CMD Skill後処理
#--------------------------------------------------------------------------
def after_cmd_skill
if CommandSkill::ALL_ATK and @cmd_skill_ok
if CommandSkill::ALL_ATK_SK.include?(@skill_copy.id)
@skill = $data_skills[@skill_copy.id] = @skill_copy
end
end
# Miss時にアニメーションを変える
if CommandSkill::MISS_ANIME and @cmd_skill_miss_flag
unless CommandSkill::T_SKILL[@skill.id][2].nil?
@animation1_id = CommandSkill::T_SKILL[@skill.id][1]
@animation2_id = CommandSkill::T_SKILL[@skill.id][2]
end
end
init_cmd_skill
end
#--------------------------------------------------------------------------
# ● コマンドスキル Window X位置取得
#--------------------------------------------------------------------------
def cmd_skill_window_x
#「戦闘位置補正」併用時にコメント外す
#case $game_party.actors.size
#when 1
# actor_x = 240
#when 2
# actor_x = @active_battler.index * 240 + 120
#when 3
# actor_x = @active_battler.index * 200 + 40
#when 4
actor_x = @active_battler.index * 160
#end
return actor_x
end
#--------------------------------------------------------------------------
# ● コマンドスキル コマンド入力ループUPDATE
#--------------------------------------------------------------------------
def cmd_skill_loop_update
Graphics.update
Input.update
@spriteset.update
end
#--------------------------------------------------------------------------
# ● コマンドスキル コマンド入力ループ
#--------------------------------------------------------------------------
def cmd_skill_loop(cmd_list, time)
key_count = 0
for i in 0...time
cmd_skill_loop_update
# キー入力に成功?
if Input.trigger?(cmd_list[key_count])
key_count += 1
@window_keycount.key_in
elsif Input.n_trigger?(cmd_list[key_count]) # 違うキーを押した
# Miss時 SE演奏
Audio.se_play("Audio/SE/" + CommandSkill::MISS_SE) if CommandSkill::MISS_SE != nil
break
end
# 全キー入力完了
if key_count >= cmd_list.size
@window_keycount.text_in("Complete")
# Complete時 SE演奏
Audio.se_play("Audio/SE/" + CommandSkill::COMP_SE) if CommandSkill::COMP_SE != nil
@cmd_skill_ok = true
break
end
# 進捗バーの更新
@window_counter.refresh((i*100/time).truncate)
end
end
#--------------------------------------------------------------------------
# ● コマンドスキル 結果作成
#--------------------------------------------------------------------------
def make_cmd_skill_skill_result(skill_id)
# コマンドリスト取得
cmd_list = CommandSkill.get_key_list(skill_id)
cmd_list = CommandSkill.change_rand(cmd_list)
time = CommandSkill::KEY_SEC * cmd_list.size * Graphics.frame_rate
# キー入力&カウントウィンドウ作成
@window_keycount = Window_KeyCount.new(cmd_list)
@window_counter = Window_KeyCounter.new
@window_keycount.x = @window_counter.x = cmd_skill_window_x
# コマンド入力ループ
cmd_skill_loop(cmd_list, time)
# ミス時は"Miss"表示
unless @cmd_skill_ok
@window_keycount.text_in("Miss")
@active_battler.cmd_miss_flag = true
@cmd_skill_miss_flag = true
end
# Miss、Complete表示用のウェイト
for i in 0...10
cmd_skill_loop_update
end
@window_keycount.dispose
@window_counter.dispose
end
#------------------------------------------------------------------------------
#--------------------------------------------------------------------------
# ● スキルアクション 結果作成
#--------------------------------------------------------------------------
alias make_skill_action_result_cmd_skill make_skill_action_result
def make_skill_action_result
pre_cmd_skill
make_skill_action_result_cmd_skill # 原物
after_cmd_skill
end
end
用法..第1段技能调用公共事件强行行动用技能..然后这个强制技能的技能ID写在技能指令的列表里的话..输入命令后就可以发动技能了....
指令列表填RAND就是随机一个命令..可填多个..
美中不足的是..等待输入指令时..不会是播放动画中..
|
|