行動回数追加によって二回行動するかどうかは
コマンドを選択し終えた後に判明しますよね
一回だと思って決定したのに、二回行動なら…と直前のコマンドをキャンセルし
最適な行動を選びなおす必要もあります
そのような煩わしい事が無いよう、行動回数追加が適用されるかどうか
ターン開始時に分かるように出来ませんか?
自分で試した所Game_Battlerの行動回数の決定が怪しいと思いましたので
2回行動以上と判断できれば、ここで効果音を鳴らせばいいのでは…と
【解決済】二回行動出来る場合、行動前に通知できないか
【解決済】二回行動出来る場合、行動前に通知できないか
最後に編集したユーザー ブラインド [ 2021年2月07日(日) 18:55 ], 累計 1 回
Re: 二回行動出来る場合、行動前に通知できないか
ブラインド様、こんにちは
スクリプトを作成してみたので宜しければお使いください
SE演奏ができればとの事でしたがウインドウ表示機能も付けてみました
設定項目で色々変更できるのでお試しください
スクリプト初心者なので不具合があるかもしれません
何かあればいつでも言って下さい
また、私の想像で作った所が多いのでブラインド様の想定と違う点があれば
教えて頂ければ変更します
スクリプトを作成してみたので宜しければお使いください
SE演奏ができればとの事でしたがウインドウ表示機能も付けてみました
設定項目で色々変更できるのでお試しください
スクリプト初心者なので不具合があるかもしれません
何かあればいつでも言って下さい
また、私の想像で作った所が多いのでブラインド様の想定と違う点があれば
教えて頂ければ変更します
コード: 全て選択
#==============================================================================
# ■ 残り行動回数表示 Ver:1.00
#------------------------------------------------------------------------------
# 2回以上行動ができる際に分かりやすいようにウィンドウ表示やSE演奏をします
#==============================================================================
# ● 設定項目
#==============================================================================
# ウィンドウを表示 : trueで表示 / falseで非表示
WINDOW_DISPLAY = true
# SEを演奏 : trueで演奏する / falseで演奏しない
SE_PLAY = true
# SEを演奏する場合のファイル名/音量/ピッチ
SE_INFO = ["Decision2",80,100]
# 行動決定毎に残り行動回数を表示 : trueで行動するたびに残り行動回数が更新される
TIME_DECREMENT = true
# 行動回数が1でもウィンドウを表示 : trueで表示 / falseで非表示
ONE_TIME_WINDOW = true
#==============================================================================
class Window_ActorCommand < Window_Command
#--------------------------------------------------------------------------
# ● 行動回数を示すウィンドウを表示/更新/消去
#--------------------------------------------------------------------------
def actor_action_time_window
if @actor.make_action_times >= 2 || ONE_TIME_WINDOW && WINDOW_DISPLAY
if $action_time_w.nil?
x = Graphics.width - 128
y = Graphics.height - 185
text = "行動回数:" + $action_time.to_s
$action_time_w = Window_Base.new(x,y,window_width,65)
$action_time_w.contents.draw_text(0, 0, 140, 40, text)
else
$action_time_w.contents.clear_rect(0, 0, 140, 40)
text = "行動回数:" + $action_time.to_s
$action_time_w.contents.draw_text(0, 0, 140, 40, text)
end
elsif $action_time_w.nil? != true && @actor.make_action_times <= 1
$action_time_w.dispose
$action_time_w = nil
end
end
#--------------------------------------------------------------------------
# ● SEを演奏
#--------------------------------------------------------------------------
def se_play
if SE_PLAY && @actor != @actor_check && @actor.make_action_times >= 2
se = "Audio/SE/" + SE_INFO[0]
Audio.se_play(se, SE_INFO[1], SE_INFO[2])
@actor_check = @actor
end
end
#--------------------------------------------------------------------------
# ● セットアップ
#--------------------------------------------------------------------------
alias setup2 setup
def setup(actor)
setup2(actor)
actor_action_time_window
se_play
end
end
class Window_PartyCommand < Window_Command
#--------------------------------------------------------------------------
# ● セットアップ
#--------------------------------------------------------------------------
alias setup2 setup
def setup
unless $action_time_w.nil?
$action_time_w.dispose
$action_time_w = nil
end
setup2
end
end
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● アクターコマンド選択の開始
#--------------------------------------------------------------------------
alias start_actor_command_selection2 start_actor_command_selection
def start_actor_command_selection
action_time_set
start_actor_command_selection2
$action_time -= 1 if TIME_DECREMENT
end
#--------------------------------------------------------------------------
# ● アクションタイムセット
#--------------------------------------------------------------------------
def action_time_set
if $cancel_flag && $actor_check != BattleManager.actor.index
$action_time = 1
$cancel_flag = false
elsif $cancel_flag != true
$action_time = BattleManager.actor.make_action_times if $actor_check != BattleManager.actor.index
end
$actor_check = BattleManager.actor.index
end
#--------------------------------------------------------------------------
# ● ターン開始
#--------------------------------------------------------------------------
alias turn_start2 turn_start
def turn_start
unless $action_time_w.nil?
$action_time_w.dispose
$action_time_w = nil
end
turn_start2
end
#--------------------------------------------------------------------------
# ● 前のコマンド入力へ
#--------------------------------------------------------------------------
def prior_command
if BattleManager.prior_command
count_increment
start_actor_command_selection
else
count_reset
start_party_command_selection
end
end
#--------------------------------------------------------------------------
# ● 回数インクリメントor代入(キャンセル用)
#--------------------------------------------------------------------------
def count_increment
if $actor_check != BattleManager.actor.index && TIME_DECREMENT
$action_time = 1
else
TIME_DECREMENT ? $action_time += 2 : $action_time = BattleManager.actor.make_action_times
end
$cancel_flag = true
$actor_check = BattleManager.actor.index
end
#--------------------------------------------------------------------------
# ● 回数リセット(パーティコマンド用)
#--------------------------------------------------------------------------
def count_reset
$cancel_flag = false
$action_time = nil
$actor_check = 4
end
end
Re: 二回行動出来る場合、行動前に通知できないか
申し訳ありません
やはり不具合がありました
不確定で行動回数増加する場合は表示がおかしくなってしまいます
修正しますので少々お待ちください
やはり不具合がありました
不確定で行動回数増加する場合は表示がおかしくなってしまいます
修正しますので少々お待ちください
Re: 二回行動出来る場合、行動前に通知できないか
行動回数追加100%でも試した所、一回目の表示以降はおかしくなってしまいますね...DEDEN さんが書きました:申し訳ありません
やはり不具合がありました
不確定で行動回数増加する場合は表示がおかしくなってしまいます
修正しますので少々お待ちください
こちらの場合、行動決定毎に残り行動回数を表示をfalseで解決するようでした
その他の挙動は好みなので、待たせていただきます!感謝

Re: 二回行動出来る場合、行動前に通知できないか
ブラインド様、お待たせしました
修正が完了しました
かなりのクソコードだったので全て刷新したところ時間が掛かってしまいました
申し訳ありません
不具合修正に加えてウインドウを開いたり閉じたりのアニメーションに対応しました
他にも競合対策としてグローバル変数を全て廃止してインスタンス変数化、
定数をクラス内定義に変更しました
またScene_Battleをほとんど読まずに適当に作ってしまっていたので
しっかり読んでプリセットスクリプトに合わせた作りに変更しました
宜しければお使いください
修正が完了しました
かなりのクソコードだったので全て刷新したところ時間が掛かってしまいました
申し訳ありません
不具合修正に加えてウインドウを開いたり閉じたりのアニメーションに対応しました
他にも競合対策としてグローバル変数を全て廃止してインスタンス変数化、
定数をクラス内定義に変更しました
またScene_Battleをほとんど読まずに適当に作ってしまっていたので
しっかり読んでプリセットスクリプトに合わせた作りに変更しました
宜しければお使いください
コード: 全て選択
#==============================================================================
# ■ 残り行動回数表示 Ver:1.10
#------------------------------------------------------------------------------
# 2回以上行動ができる際に分かりやすいようにウィンドウ表示やSE演奏をします
#==============================================================================
# ● 設定項目
#==============================================================================
class Scene_Battle < Scene_Base
# ウィンドウを表示 : trueで表示 / falseで非表示
WINDOW_DISPLAY = true
# 行動決定毎に残り行動回数を表示 : trueで行動するたびに残り行動回数が更新される
TIME_DECREMENT = true
# SEを演奏 : trueで演奏する / falseで演奏しない
SE_PLAY = true
# SEを演奏する場合のファイル名/音量/ピッチ
SE_INFO = ["Decision2",80,100]
end
class Window_ActorActCount < Window_Base
# 行動回数が1でもウィンドウを表示 : trueで表示 / falseで非表示
ONE_TIME_WINDOW = true
end
#==============================================================================
# 〇 更新履歴
# Ver:1.01 行動回数表示がおかしくなる不具合を修正
# Ver:1.10 コードを刷新 表示/閉じる動作も追加
# 1人目が2回行動以上でもSEが演奏されない不具合を修正
#==============================================================================
class Window_ActorActCount < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
x = Graphics.width - 128
y = Graphics.height - 185
super(x,y,window_width,65)
self.openness = 0
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
return 128
end
#--------------------------------------------------------------------------
# ● 行動回数を示すウィンドウを更新
#--------------------------------------------------------------------------
def update_act(count,actor)
self.open if self.openness == 0
if actor.action_time >= 2 || ONE_TIME_WINDOW
self.contents.clear_rect(0, 0, 140, 40)
text = "行動回数:" + count.to_s
self.contents.draw_text(0, 0, 140, 40, text)
else
self.close
end
end
end
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● SEを演奏
#--------------------------------------------------------------------------
def se_play
if SE_PLAY && @cancel_flag != true
se = "Audio/SE/" + SE_INFO[0]
Audio.se_play(se, SE_INFO[1], SE_INFO[2])
end
end
#--------------------------------------------------------------------------
# ● アクターコマンドウィンドウの作成
#--------------------------------------------------------------------------
alias create_actor_command_window2 create_actor_command_window
def create_actor_command_window
create_actor_command_window2
@actor_actcount = Window_ActorActCount.new
end
#--------------------------------------------------------------------------
# ● パーティコマンド選択の開始
#--------------------------------------------------------------------------
alias start_party_command_selection2 start_party_command_selection
def start_party_command_selection
@actor_actcount.close unless @actor_actcount.disposed?
count_reset
start_party_command_selection2
end
#--------------------------------------------------------------------------
# ● アクターコマンド選択の開始
#--------------------------------------------------------------------------
alias start_actor_command_selection2 start_actor_command_selection
def start_actor_command_selection
start_actor_command_selection2
action_time_set
se_play if first_action? && BattleManager.actor.action_time >= 2
@actor_actcount.update_act(display_count,BattleManager.actor) if WINDOW_DISPLAY
count_decrement
end
#--------------------------------------------------------------------------
# ● 初回行動なら真を返す
#--------------------------------------------------------------------------
def first_action?
@action_time == BattleManager.actor.action_time && actor_index_same? ? true : false
end
#--------------------------------------------------------------------------
# ● 表示用カウントを返す
#--------------------------------------------------------------------------
def display_count
TIME_DECREMENT ? @action_time : BattleManager.actor.action_time
end
#--------------------------------------------------------------------------
# ● アクターインデックスが変化したかチェック
#--------------------------------------------------------------------------
def actor_index_same?
@actor_check == BattleManager.actor.index ? true : false
end
#--------------------------------------------------------------------------
# ● アクションタイムセット
#--------------------------------------------------------------------------
def action_time_set
if @cancel_flag && actor_index_same? != true
@action_time = 1
@cancel_flag = false
elsif @cancel_flag != true
@action_time = BattleManager.actor.action_time unless actor_index_same?
end
@actor_check = BattleManager.actor.index
end
#--------------------------------------------------------------------------
# ● カウントデクリメント
#--------------------------------------------------------------------------
def count_decrement
@action_time -= 1
end
#--------------------------------------------------------------------------
# ● ターン開始
#--------------------------------------------------------------------------
alias turn_start2 turn_start
def turn_start
@actor_actcount.close if WINDOW_DISPLAY
turn_start2
end
#--------------------------------------------------------------------------
# ● 前のコマンド入力へ
#--------------------------------------------------------------------------
alias prior_command2 prior_command
def prior_command
count_increment
prior_command2
end
#--------------------------------------------------------------------------
# ● 回数インクリメントor代入(キャンセル用)
#--------------------------------------------------------------------------
def count_increment
if actor_index_same? != true && TIME_DECREMENT
@action_time = 1
else
TIME_DECREMENT ? @action_time += 2 : @action_time = BattleManager.actor.action_time
end
@cancel_flag = true
@actor_check = BattleManager.actor.index
end
#--------------------------------------------------------------------------
# ● 回数リセット(パーティコマンド用)
#--------------------------------------------------------------------------
def count_reset
@cancel_flag = false
@action_time = nil
@actor_check = 500
end
end
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 行動回数取得
#--------------------------------------------------------------------------
def action_time
@actions.size
end
end
Re: 二回行動出来る場合、行動前に通知できないか
これは素晴らしいスクリプトを!DEDEN さんが書きました:ブラインド様、お待たせしました
修正が完了しました
かなりのクソコードだったので全て刷新したところ時間が掛かってしまいました
申し訳ありません
不具合修正に加えてウインドウを開いたり閉じたりのアニメーションに対応しました
他にも競合対策としてグローバル変数を全て廃止してインスタンス変数化、
定数をクラス内定義に変更しました
またScene_Battleをほとんど読まずに適当に作ってしまっていたので
しっかり読んでプリセットスクリプトに合わせた作りに変更しました
宜しければお使いください
ありがたく使わせて頂きます!
Re: 【解決済】二回行動出来る場合、行動前に通知できないか
突然すみません。こちらのDEDENが作られたスクリプトを私も使いたいのですが、よろしいでしょうか。権利表記についても教えてくださると幸いです。
Re: 【解決済】二回行動出来る場合、行動前に通知できないか
ズッキー様
返信が遅れて申し訳ありません
もちろん使っていただいて大丈夫ですよ
利用規約等の明記を一切せずに混乱を招いてしまい申し訳ありませんでした
私の作った素材は特に規約はありませんのでどなたでも自由に使っていただいて結構です
表記はしてもしなくても良いですが、表記する場合はDEDENで大丈夫です
返信が遅れて申し訳ありません
もちろん使っていただいて大丈夫ですよ
利用規約等の明記を一切せずに混乱を招いてしまい申し訳ありませんでした
私の作った素材は特に規約はありませんのでどなたでも自由に使っていただいて結構です
表記はしてもしなくても良いですが、表記する場合はDEDENで大丈夫です
Re: 【解決済】二回行動出来る場合、行動前に通知できないか
DENEN様。
返信ありがとうございます。
早速read meにお名前を記載させていただきました。
とても良いスクリプトをありがとうございました。
返信ありがとうございます。
早速read meにお名前を記載させていただきました。
とても良いスクリプトをありがとうございました。