#============================================================================== # 「アクター・キーワード・システム」(ACE) ver2.2 by奈々 # # ◇使用規約 # 使用される場合はスクリプト作成者として「奈々」を明記して下さい。 # このスクリプトを改変したり、改変したものを配布するなどは自由ですが # その場合も元のスクリプトの作成者として名前は載せて下さい。 # #------------------------------------------------------------------------------ # # アクター毎に「キーワード」を付けることができます。 # キーワードはそれ単体ではゲームに何も影響を与えませんが # イベントコマンドで判定ができるので幅広い応用が可能です。 # # ・キーワードの追加と削除 # イベントコマンドの「スクリプト」に書く。 # nak_add(ID, "○○"):ID番のアクターに「○○」というキーワードを追加 # nak_add_p(No, "○○"):No番のパーティメンバーにキーワードを追加 # nak_add_all("○○"):アクター全員に「○○」というキーワードを追加 # # nak_remove(ID, "○○"):ID番のアクターから「○○」のキーワードを削除 # nak_remove_p(No, "○○"):No番のパーティメンバーからキーワードを削除 # nak_remove_all("○○"):アクター全員から「○○」のキーワードを削除 # # nak_reset(ID):ID番のアクターのキーワードを全て削除 # nak_reset_p(No):No番のパーティメンバーのキーワードを全て削除 # nak_reset_all:アクター全員のキーワードを全て削除 # # ・初期キーワードの追加 # データベースのアクター・職業のメモ欄に書く。 # <初期キーワード "○○">:ゲーム開始時に「○○」というキーワードを追加 # # ・常時キーワードの追加 # データベースのアクター・職業・武器・防具・ステートに書く。 # <常時キーワード "○○">:アクターに「○○」というキーワードを付与 # *常時キーワードはコマンドで削除することはできない。 # *装備中はキーワードが付与され、装備を外すとキーワードも消える。 # # ・キーワードの判定 # イベントコマンドの条件分岐「スクリプト」に書く。 # nak_check(ID, "○○"):ID番のアクターに「○○」というキーワードがあるか # nak_check_p(No, "○○"):No番のパーティメンバーにキーワードがあるか # nak_check_pa("○○"):パーティメンバーの誰かがキーワードを持っているか # これらはコマンドの頭に!をつけると、そのキーワードがないか、という条件になり # また&&(and)や||(or)で繋げることで複数の条件をまとめることも可能。 # # ・キーワード判定+ID取得 # イベントコマンドの「スクリプト」に書く。 # XX番の変数に「キーワードを持つアクターのID」を代入するコマンド # nak_who(XX, "○○"):アクターリストから検索する(ID順) # nak_who_p(XX, "○○"):パーティメンバーから検索する(隊列順) # # 「○○」を持つアクターがいなかった場合は0が代入される。 # 通常は検索して最初にヒットした候補のIDが代入されるが # nak_who(XX, "○○", 2)やnak_who_p(XX, "○○", 3)のように # 3つ目の引数を設定することで1番目以外の候補を探すこともできる。 # # ・一部合致コマンド # nak_remove2(ID, "○○"):ID番のアクターから「○○」を含むキーワードを全て削除 # nak_remove2_p(No, "○○"):No番のパーティメンバーからキーワードを全て削除 # nak_remove2_all("○○"):アクター全員から「○○」を含むキーワードを全て削除 # # nak_check(ID, "○○"):ID番のアクターに「○○」を含むキーワードがあるか # nak_check_p(No, "○○"):No番のパーティメンバーにキーワードがあるか # nak_check_pa("○○"):パーティメンバーの誰かがキーワードを持っているか # # ・備考 # キーワードは文字列であり、ユーザーが自由に追加することができます。 # アクター1人につき、何個でもキーワードを保持できますが # 同じ名前のキーワードは1つに纏められます。複数追加する意味はありません。 # スクリプトコマンドに「p $game_actors[ID].nana_actor_keyword」と入れることで # ID番のアクターのキーワード一覧をコンソールに表示できます。確認用にどうぞ。 # キーワードの具体的な使用例はブログをご覧下さい。 # #============================================================================== class RPG::BaseItem #-------------------------------------------------------------------------- # ● アクターキーワード(常時) #-------------------------------------------------------------------------- def actor_keyword_a list = [] @note.scan(/<常時キーワード\s?"(.*)"\s?>/) {|s| list.push($1.to_s) if $1} return list end #-------------------------------------------------------------------------- # ● アクターキーワード(初期) #-------------------------------------------------------------------------- def actor_keyword_f list = [] @note.scan(/<初期キーワード\s?"(.*)"\s?>/) {|s| list.push($1.to_s) if $1} return list end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :actor_keyword_t # アクターキーワード(一時) #-------------------------------------------------------------------------- # ○ セットアップ(エイリアス再定義) #-------------------------------------------------------------------------- alias nak_setup setup def setup(actor_id) nak_setup(actor_id) set_nak_f end #-------------------------------------------------------------------------- # ● アクターの初期キーワードをセット #-------------------------------------------------------------------------- def set_nak_f @actor_keyword_t = [] list = self.actor.actor_keyword_f list |= self.class.actor_keyword_f @actor_keyword_t |= list end #-------------------------------------------------------------------------- # ● アクターキーワードの参照 #-------------------------------------------------------------------------- def nana_actor_keyword list = @actor_keyword_t list |= self.actor.actor_keyword_a list |= self.class.actor_keyword_a self.equips.each do |equip| next unless equip list |= equip.actor_keyword_a end self.states.each do |state| list |= state.actor_keyword_a end return list end end class Game_Interpreter #-------------------------------------------------------------------------- # ● アクターキーワードの追加 #-------------------------------------------------------------------------- def nak_add(actor, keyword) t = [keyword] $game_actors[actor].actor_keyword_t |= t if $game_actors[actor] end #-------------------------------------------------------------------------- # ● アクターキーワードの追加(パーティ) #-------------------------------------------------------------------------- def nak_add_p(actor, keyword) t = [keyword] $game_party.members[actor].actor_keyword_t |= t if $game_party.members[actor] end #-------------------------------------------------------------------------- # ● アクターキーワードの追加(全員) #-------------------------------------------------------------------------- def nak_add_all(keyword) t = [keyword] for actor in 1...$data_actors.size $game_actors[actor].actor_keyword_t |= t end end #-------------------------------------------------------------------------- # ● アクターキーワードの削除 #-------------------------------------------------------------------------- def nak_remove(actor, keyword) t = [keyword] $game_actors[actor].actor_keyword_t -= t if $game_actors[actor] end #-------------------------------------------------------------------------- # ● アクターキーワードの削除(パーティ) #-------------------------------------------------------------------------- def nak_remove_p(actor, keyword) t = [keyword] $game_party.members[actor].actor_keyword_t -= t if $game_party.members[actor] end #-------------------------------------------------------------------------- # ● アクターキーワードの削除(全員) #-------------------------------------------------------------------------- def nak_remove_all(keyword) t = [keyword] for actor in 1...$data_actors.size $game_actors[actor].actor_keyword_t -= t end end #-------------------------------------------------------------------------- # ● アクターキーワードの削除(一部合致、アドバンスド) #-------------------------------------------------------------------------- def nak_remove2(actor, keyword) $game_actors[actor].actor_keyword_t.delete_if{|key| key.include?(keyword) } end #-------------------------------------------------------------------------- # ● アクターキーワードの削除(パーティ、一部合致、アドバンスド) #-------------------------------------------------------------------------- def nak_remove2_p(actor, keyword) $game_party.members[actor].actor_keyword_t.delete_if{|key| key.include?(keyword) } end #-------------------------------------------------------------------------- # ● アクターキーワードの削除(全員、一部合致、アドバンスド) #-------------------------------------------------------------------------- def nak_remove2_all(keyword) for actor in 1...$data_actors.size $game_actors[actor].actor_keyword_t.delete_if{|key| key.include?(keyword) } end end #-------------------------------------------------------------------------- # ● アクターキーワードのリセット #-------------------------------------------------------------------------- def nak_reset(actor) $game_actors[actor].actor_keyword_t = [] end #-------------------------------------------------------------------------- # ● アクターキーワードのリセット(パーティ) #-------------------------------------------------------------------------- def nak_reset_p(actor) $game_party.members[actor].actor_keyword_t = [] end #-------------------------------------------------------------------------- # ● アクターキーワードのリセット(全員) #-------------------------------------------------------------------------- def nak_reset_all for actor in 1...$data_actors.size $game_actors[actor].actor_keyword_t = [] end end #-------------------------------------------------------------------------- # ● アクターキーワードの判定 #-------------------------------------------------------------------------- def nak_check(actor, keyword) if $game_actors[actor] return $game_actors[actor].nana_actor_keyword.include?(keyword) else return false end end #-------------------------------------------------------------------------- # ● アクターキーワードの判定(パーティ) #-------------------------------------------------------------------------- def nak_check_p(actor, keyword) if $game_party.members[actor] return $game_party.members[actor].nana_actor_keyword.include?(keyword) else return false end end #-------------------------------------------------------------------------- # ● アクターキーワードの判定(パーティ全体) #-------------------------------------------------------------------------- def nak_check_pa(keyword) $game_party.members.each{|member| return true if member.nana_actor_keyword.include?(keyword) } return false end #-------------------------------------------------------------------------- # ● アクターキーワードの判定(一部合致、アドバンスド) #-------------------------------------------------------------------------- def nak_check2(actor, keyword) if $game_actors[actor] $game_actors[actor].nana_actor_keyword.each{|key| return true if key.include?(keyword) } end return false end #-------------------------------------------------------------------------- # ● アクターキーワードの判定(パーティ、一部合致、アドバンスド) #-------------------------------------------------------------------------- def nak_check2_p(actor, keyword) if $game_party.members[actor] $game_party.members[actor].nana_actor_keyword.each{|key| return true if key.include?(keyword) } end return false end #-------------------------------------------------------------------------- # ● アクターキーワードの判定(パーティ全体、一部合致、アドバンスド) #-------------------------------------------------------------------------- def nak_check2_pa(keyword) $game_party.members.each{|member| member.nana_actor_keyword.each{|key| return true if key.include?(keyword) } } return false end #-------------------------------------------------------------------------- # ● キーワード所持アクターのID特定 #-------------------------------------------------------------------------- def nak_who(val, keyword, number = 1) number = 1 if number < 1 temp = 0 for actor in 1...$data_actors.size if $game_actors[actor].nana_actor_keyword.include?(keyword) temp = actor.id number -= 1 if number == 0 $game_variables[val] = temp return end end end $game_variables[val] = temp end #-------------------------------------------------------------------------- # ● キーワード所持アクターのID特定(パーティ) #-------------------------------------------------------------------------- def nak_who_p(val, keyword, number = 1) number = 1 if number < 1 temp = 0 $game_party.members.each{|member| if member.nana_actor_keyword.include?(keyword) temp = member.id number -= 1 if number == 0 $game_variables[val] = temp return end end } $game_variables[val] = temp end end