[解決]ACE:が対象の単体と全体を切り替えたい
[解決]ACE:が対象の単体と全体を切り替えたい
対象を選択している時に特定のキーで、単体と全体を変えられるようにしたいです。
最後に編集したユーザー まるぐるま on 2023年11月28日(火) 04:38 [ 編集 1 回目 ]
Re: ACE:が対象の単体と全体を切り替えたい
既にそういったスクリプトは出回っているようですが、以下はどうでしょうか。
技の対象変更_XPスタイルバトル対応版
https://wikiwiki.jp/comtarorgss/RGSS3/% ... C%E7%89%88
技の対象変更_XPスタイルバトル対応版
https://wikiwiki.jp/comtarorgss/RGSS3/% ... C%E7%89%88
Re: ACE:が対象の単体と全体を切り替えたい
皆さま、返信ありがとうございます!
もう一つ質問ですが、全体化している時に敵の数だけダメージを分散(100ダメージの場合、2体なら50で3体なら33)させるにはどうしたら良いですか?
もう一つ質問ですが、全体化している時に敵の数だけダメージを分散(100ダメージの場合、2体なら50で3体なら33)させるにはどうしたら良いですか?
Re: ACE:が対象の単体と全体を切り替えたい
「技の対象変更_XPスタイルバトル対応版」は
XPスタイルバトルを導入せず単体でも動作するハズですけどね。
ダメージの分散については各スクリプトにて仕様が異なるので
可能なスクリプトとそうでないスクリプトがあると言えると思います。
「全体化&味方攻撃 for VX Ace」
http://tm.lucky-duet.com/viewtopic.php?f=37&t=4060
こちらの方は軽くしか確認していませんが
全体化した場合に指定のダメージ倍率に変更する仕組みのようで
敵の数に応じてダメージが変動する機能は無さそうです
「技の対象変更_XPスタイルバトル対応版」
https://wikiwiki.jp/comtarorgss/RGSS3/% ... C%E7%89%88
こちらの方は全体化した場合に敵の数に応じてダメージ分散が発生する仕組みになっています
また自分の方でも全体攻撃切り替えのスクリプトを試作してみました
こちらも全体化した場合に敵の数に応じてダメージ分散するようになっています
この手のスクリプトはかなり種類があり、それぞれに個性があるので
使ってみて好みで選んでいただければ良いのではないかと思います。
XPスタイルバトルを導入せず単体でも動作するハズですけどね。
ダメージの分散については各スクリプトにて仕様が異なるので
可能なスクリプトとそうでないスクリプトがあると言えると思います。
「全体化&味方攻撃 for VX Ace」
http://tm.lucky-duet.com/viewtopic.php?f=37&t=4060
こちらの方は軽くしか確認していませんが
全体化した場合に指定のダメージ倍率に変更する仕組みのようで
敵の数に応じてダメージが変動する機能は無さそうです
「技の対象変更_XPスタイルバトル対応版」
https://wikiwiki.jp/comtarorgss/RGSS3/% ... C%E7%89%88
こちらの方は全体化した場合に敵の数に応じてダメージ分散が発生する仕組みになっています
また自分の方でも全体攻撃切り替えのスクリプトを試作してみました
こちらも全体化した場合に敵の数に応じてダメージ分散するようになっています
コード: 全て選択
module ChangeTarget
# 全体化切り替えボタン
TOGGLE_SCOPE_INPUT = :A
# 全体化可能なアイテムID
# [id1, id2, ... , idn]
TOGGLE_SCOPE_ITEM_ID = [19]
# 全体化可能なスキルID
# [id1, id2, ... , idn]
TOGGLE_SCOPE_SKILL_ID = [26, 51]
# 単体攻撃を全体化した場合ダメージを分散する
# ※使用効果は分散しません
DIVIDE_DAMAGE = true
# 単体攻撃以外でも対象変更ウィンドウを表示する
# 演出上の設定
FORCE_SELECTION = false
# ここからソースコード
TOGGLE_SCOPE_ITEM_ID_HASH = {}
TOGGLE_SCOPE_ITEM_ID.each do |id|
TOGGLE_SCOPE_ITEM_ID_HASH[id] = true
end
TOGGLE_SCOPE_SKILL_ID_HASH = {}
TOGGLE_SCOPE_SKILL_ID.each do |id|
TOGGLE_SCOPE_SKILL_ID_HASH[id] = true
end
class << self
def check_item(item)
return unless(
case item
when RPG::Item
TOGGLE_SCOPE_ITEM_ID_HASH[item.id]
when RPG::Skill
TOGGLE_SCOPE_SKILL_ID_HASH[item.id]
end
)
return unless item.for_one?
return true
end
end
end
class RPG::UsableItem < RPG::BaseItem
alias cngt_need_selection? need_selection?
def need_selection?
ChangeTarget::FORCE_SELECTION || cngt_need_selection?
end
end
class Game_Action
attr_accessor :toggle_scope
attr_accessor :toggle_scope_target_size
alias cngt_targets_for_opponents targets_for_opponents
def targets_for_opponents
if @toggle_scope
@toggle_scope_target_size = (targets =
if item.for_opponent?
opponents_unit.alive_members
else
cngt_targets_for_opponents
end
).size
return targets
else
return cngt_targets_for_opponents
end
end
alias cngt_targets_for_friends targets_for_friends
def targets_for_friends
if @toggle_scope
@toggle_scope_target_size = (targets =
if item.for_dead_friend?
friends_unit.dead_members
elsif item.for_friend?
friends_unit.alive_members
else
cngt_targets_for_friends
end
).size
return targets
else
return cngt_targets_for_friends
end
end
end
class Game_Battler < Game_BattlerBase
attr_accessor :toggle_scope_temp
attr_accessor :toggle_scope_temp_target_size
alias cngt_make_damage_value make_damage_value
def make_damage_value(user, item)
cngt_make_damage_value(user, item)
if ChangeTarget::DIVIDE_DAMAGE
if (action = user.actions[0]) && action.toggle_scope
divide_result_damage(action.toggle_scope_target_size.to_f)
end
if user.toggle_scope_temp
divide_result_damage(user.toggle_scope_temp_target_size)
end
end
end
def divide_result_damage(div)
@result.hp_damage = (@result.hp_damage / div).to_i
@result.mp_damage = (@result.mp_damage / div).to_i
@result.tp_damage = (@result.tp_damage / div).to_i
@result.hp_drain = (@result.hp_drain / div).to_i
@result.mp_drain = (@result.mp_drain / div).to_i
end
end
class Window_MenuActor < Window_MenuStatus
alias cngt_update update
def update
cngt_update
call_handler(:toggle_scope) if Input.trigger?(ChangeTarget::TOGGLE_SCOPE_INPUT)
end
end
class Window_BattleActor < Window_BattleStatus
alias cngt_update update
def update
cngt_update
call_handler(:toggle_scope) if Input.trigger?(ChangeTarget::TOGGLE_SCOPE_INPUT)
end
end
class Window_BattleEnemy < Window_Selectable
alias cngt_update update
def update
cngt_update
call_handler(:toggle_scope) if Input.trigger?(ChangeTarget::TOGGLE_SCOPE_INPUT)
end
end
class Scene_ItemBase < Scene_MenuBase
alias cngt_create_actor_window create_actor_window
def create_actor_window
cngt_create_actor_window
@actor_window.set_handler(:toggle_scope, method(:on_actor_window_toggle_scope))
end
alias cngt_on_actor_cancel on_actor_cancel
def on_actor_cancel
cngt_on_actor_cancel
user.toggle_scope_temp = false if user
end
alias cngt_item_target_actors item_target_actors
def item_target_actors
if user.toggle_scope_temp && item.for_one?
$game_party.members
else
cngt_item_target_actors
end
end
def on_actor_window_toggle_scope
if ChangeTarget::check_item(item)
Sound.play_cursor
@actor_window.cursor_all = user.toggle_scope_temp = !user.toggle_scope_temp
if user.toggle_scope_temp
user.toggle_scope_temp_target_size = item_target_actors.size
end
@actor_window.update_cursor
end
end
end
class Scene_Battle < Scene_Base
alias cngt_create_actor_window create_actor_window
def create_actor_window
cngt_create_actor_window
@actor_window.set_handler(:toggle_scope, method(:on_actor_window_toggle_scope))
end
alias cngt_create_enemy_window create_enemy_window
def create_enemy_window
cngt_create_enemy_window
@enemy_window.set_handler(:toggle_scope, method(:on_enemy_window_toggle_scope))
end
alias cngt_select_actor_selection select_actor_selection
def select_actor_selection
cngt_select_actor_selection
BattleManager.actor.input.toggle_scope = false
if (item = @item || @skill || BattleManager.actor.input.item)
@actor_window.cursor_all = item.for_all?
end
@actor_window.update_cursor
end
alias cngt_select_enemy_selection select_enemy_selection
def select_enemy_selection
cngt_select_enemy_selection
BattleManager.actor.input.toggle_scope = false
if (item = @item || @skill || BattleManager.actor.input.item)
@enemy_window.cursor_all = item.for_all?
end
@enemy_window.update_cursor
end
def on_actor_window_toggle_scope
return unless @actor_window.active
if ChangeTarget.check_item(@item || @skill || BattleManager.actor.input.item)
Sound.play_cursor
@actor_window.cursor_all = BattleManager.actor.input.toggle_scope = !BattleManager.actor.input.toggle_scope
@actor_window.update_cursor
end
end
def on_enemy_window_toggle_scope
return unless @enemy_window.active
if ChangeTarget.check_item(@item || @skill || BattleManager.actor.input.item)
Sound.play_cursor
@enemy_window.cursor_all = BattleManager.actor.input.toggle_scope = !BattleManager.actor.input.toggle_scope
@enemy_window.update_cursor
end
end
end
この手のスクリプトはかなり種類があり、それぞれに個性があるので
使ってみて好みで選んでいただければ良いのではないかと思います。
Re: [解決]ACE:が対象の単体と全体を切り替えたい
15汁酢様、工作員X様、おかげで思った通りに動きました!!