みなさん、こんにちは!ギルドへの投稿が初めてなので、フォーラムから移行したばかりでこのサイトになじみがありません。もし何か間違っていたらお許しください。
私のゲームでは、Sixth氏が作成したスクリプト(Yanfly Engineを使用しています)を利用しています。このスクリプトは、ユーザー以外のアリー1人を対象とするスコープを作成するものです。なお、98行目に記載した通り、私のゲームではパーティーメンバーが同時に5人になるため、それに合わせてスクリプトを少し修正しています。
以下がそのスクリプトです。
=begin
- ターゲット: アリー1人(ユーザー以外)スコープ - なんておかしなタイトル!
- 作成者: Sixth
- 概要
このスクリプトを使用すると、スキル用の新しいスコープを作成できます(ある意味で)。
このスコープを使用すると、プレイヤーはユーザー以外のアリーから誰かを対象に選べます。
このスコープを使用するスキルを作成するには、データベースでスコープを
「アリー1人」タイプに設定し、メモ欄に以下のノートタグを使用してください。
<one_ally_no_user>
これにより、スキル用の新しいスコープが設定されます。戦闘外メニューでも機能しますが、
スキルにのみ適用されます。
アイテムメニューではユーザーが設定される仕組み(アイテムを使用するたびにPHAステータスが
最も高いメンバーがユーザーになる)のため、ここでこの新しいスコープを有効にするのは
あまり意味がありません(ただし、アイテムに「アリー1人」スコープと上記のノートタグを
使用した場合、戦闘中は期待通りに機能し、ユーザーは自分自身にアイテムを使用できなくなります)。
必要な修正として、敵が「アリー1人」スコープのスキルを使用するたびに最後の隊員を
対象にする問題を修正しました。代わりに、敵はランダムなアリーを対象にしますが、
スキルに <one_ally_no_user> ノートタグがある場合、敵は自分自身を対象にできません。
このスクリプトはカスタム戦闘スクリプトなしでテストされているため、それらと併用した場合の
動作保証はありません!
=end
class RPG::UsableItem < RPG::BaseItem
attr_accessor :one_no_user
def one_no_user
init_one_no_user if @one_no_user.nil?
return @one_no_user
end
def init_one_no_user
@one_no_user = @note =~ /<one_ally_no_user>/i ? true : false
end
end
class Game_Action
alias check_no_user1232 targets_for_friends
def item_target_candidates
trgs = check_no_user1232
trgs.delete(subject) if item.one_no_user && item.for_one?
return trgs
end
alias check_no_user1132 targets_for_friends
def targets_for_friends
if subject.is_a?(Game_Enemy) && item.scope == 7
ids = []
friends_unit.alive_members.each_with_index do |mem,i|
next if item.one_no_user && mem == subject
ids << $game_troop.members.index(mem)
end
@target_index = ids.sample
end
trgs = check_no_user1132
return trgs
end
end
class Game_BattlerBase
alias check_no_user7541 usable?
def usable?(item)
if item.is_a?(RPG::UsableItem) && item.one_no_user && friends_unit.alive_members.size <= 1
return false
end
check_no_user7541(item)
end
end
class Game_Actor < Game_Battler
alias check_no_user9265 item_test
def item_test(user, item)
return false if item.one_no_user && self == user
check_no_user9265(user, item)
end
end
class Window_BattleActor < Window_BattleStatus
# この部分は、UIが5人のパーティーメンバーを表示するように修正されました。
def draw_actor_name(actor, dx, dy, dw = 112)
if BattleManager.actor && BattleManager.actor.input.item.one_no_user &&
actor == BattleManager.actor
act_enable = false
else
act_enable = true
end
reset_font_settings
contents.font.size = YEA::BATTLE::BATTLESTATUS_NAME_FONT_SIZE
change_color(hp_color(actor),act_enable)
draw_text(dx+24, dy, dw-24, line_height, actor.name)
end
def current_item_enabled?
if BattleManager.actor && BattleManager.actor.input.item.one_no_user &&
$game_party.members[@index] == BattleManager.actor
return false
else
super
end
end
end
class Scene_Skill < Scene_ItemBase
alias check_no_user8826 use_item
def use_item
if item.one_no_user && user == $game_party.members[@actor_window.index]
return Sound.play_buzzer
end
check_no_user8826
end
end
class Scene_Battle < Scene_Base
alias check_no_user5413 on_actor_ok
def on_actor_ok
if BattleManager.actor.input.item.one_no_user &&
BattleManager.actor == $game_party.battle_members[@actor_window.index]
return Sound.play_buzzer
end
check_no_user5413
end
end
このスクリプトはYanflyなどの外部スクリプトとの併用を想定して作成されたものではありませんが、このスクリプトが「アリー1人(死)」スコープを実質的に無効化していることに気づきました。具体的には、このスコープは「アリー1人」として機能しますが、生存しているキャラクターにスキルやアイテムを使用しても何もしません。
この問題を修正し、通常通り「アリー1人(死)」スコープを使用する際に、現在生存しているアリーをクリックできないようにすることは可能でしょうか?
あまり無理を言っているわけではありませんが、事前に感謝申し上げます!