Project1
标题:
合击脚本
[打印本页]
作者:
奥特曼盖亚
时间:
2013-6-30 08:27
标题:
合击脚本
谁有VA的合击脚本呀给个链接好用的并教教方法
作者:
,。、
时间:
2013-7-8 11:42
我也想要。。。。。。。。。。。。。。
作者:
786617604
时间:
2013-7-9 16:14
http://rpg.blue/forum.php?mod=viewthread&tid=247817
VA超级整合里有一个“援护系统”可以试一试。。。
作者:
奥特曼盖亚
时间:
2013-7-20 15:50
还有吗还有谁提点建议
作者:
lirn
时间:
2013-7-20 21:55
=begin
合体技VXAce
2012年07月15日 作成。
2012年12月05日 改訂。
配布元:
http://tamurarpgvx.blog137.fc2.com/
配布記事:
http://tamurarpgvx.blog137.fc2.com/blog-entry-124.html
【概要】
合体技を作成します。
【使い方】
スクリプトエディタの(ここに追加)の下に、このファイルをコピーして下さい。
【機能】
①まず、どれでもいいので、スキルのメモ欄に <combi;XXX;YYY;ZZZ;AAA> と書き込みます。
②するとこのスキルは合体技となり、IDがXXX番のスキル、IDがYYY番のスキル、
IDがZZZ番のスキル、IDがAAA番のスキルを、アクターが1人ずつ覚えていないと
使用できません。
ひとりが複数のスキルを覚えていても駄目です。ひとつずつ分担します。
また、<combi;XXX;YYY;ZZZ>とやると3人技、
<combi;XXX;YYY>で二人技です。
かならず > で終わりを閉じてください。
なお、行動不能のアクターは参加できません。
③消費するMPは、分担するスキルのものです。合体技そのもののMPは無視します。
④スキル習得・MP・行動可能の条件を満たすと、パーティコマンドの「逃げる」の下に
「合体技」が出現します。
⑤使いたい合体技を選びます。MPが足りない・参加者が行動不能な合体技は表示されません。
⑥合体技を選んだら、参加メンバーを選びます。どういう事かと言うと、
2・3人技は、同じ技を二人が覚えていると、参加メンバーの組み合わせが複数あるためです。
⑦参加メンバーを選んだら、一番上のスキルを使う人の順目で発動します。
他のメンバーは行動(コマンド入力)できません。
【統括者について】
⑥において、一番上のスキルを担当するアクターを統括者と呼びます。
合体技の威力や発動順などは、統括者の能力値に準拠します。
【注意事項】
・XPスタイルバトルよりも下に配置して下さい。
・「生者死者両方に使えるスキル・アイテム」よりも下に配置してください。
・担当スキルが使用できない場合は合体技に参加できませんが、
スキル設定の「使用可能時」に限り、これを無視して使うことができます。
【バグ対応】
20120126 ・製作。
20120305 ・5人以上のパーティに対応。
・パターンが複数ある技を使用した後、パターンが少ない技を選ぶとエラーが
発生するのを修正。
20120309 ・戦闘テストに対応。
20120310 ・XPスタ Cルバトルとの競合に対策実施。
20120311 ・使える合体技が無い場合は、「合体技」を選択できないようにした。
20120317 ・前ターンで使った合体技が使えなくなった場合、
空欄が選べてしまう不具合を修正。
・TP技に対応。
20120329 ・反撃で敵を倒したときにエラー落ちする不具合を修正。
20120402 ・合体技発動不可の場合には、指定のスキルを発動するようにした。
20120403 ・行動可能な人数と同じ必要人数の合体技を選択後、その合体技が
使用不可能になった際に不具合が起きる現象を修正。
20120420 ・処理を軽量化。
・反撃で倒されるとエラー落ちする不具合の修正。
20120503 ・アクターが目標のスキルでエラー落ちするのを修正。
・<combi;~>を複数記述した時、構成スキルを選択できるようにした。
20120505 ・<combi;~>を複数記述した時、同じスキルが複数表示されるのを修正。
20120507 ・参加メンバーパターンがおかしくなっていたのを修正。
20120715 ・合体技の効果が「使用者に行動不能ステート」の場合、エラーが出るのを修正。
・ターゲットを「使用者」にしたとき、エラーが起こるのを修正。
20121205 ・スキル封印、スキルタイプ封印のときは合体技に参加できない。
=end
module Tamura_Combi
#合体技が使用不可能な場合、以下のIDのスキルが発動します。7番は「様子を見る」。
UNUSE = 7
end
#==============================================================================
# ■ DataManager
#==============================================================================
module DataManager
#--------------------------------------------------------------------------
# ● 戦闘テスト用のデータベースをロード
#--------------------------------------------------------------------------
def self.load_battle_test_database_combi
load_battle_test_database_combi_default
$com = Combination.new
end
#--------------------------------------------------------------------------
# ● クラスメソッドのエイリアス
#--------------------------------------------------------------------------
class << self
alias :load_battle_test_database_combi_default :load_battle_test_database
alias :load_battle_test_database :load_battle_test_database_combi
end
end
#==============================================================================
# ■ BattleManager
#==============================================================================
module BattleManager
#--------------------------------------------------------------------------
# ● 次の行動主体の取得 ☆再定義
#--------------------------------------------------------------------------
def self.next_subject
loop do
battler = @action_battlers.shift
return nil unless battler
#統括者でない合体技参加メンバーは飛ばす
if battler.actor? and battler.combi_join != nil
next if battler.combi_join != 0
end
#以下デフォルト処理
next unless battler.index && battler.alive?
return battler
end
end
end
#==============================================================================
# ■ Game_Action
#------------------------------------------------------------------------------
# ・合体技のターゲットが「使用者」である場合、参加メンバー全員を返します。
# ・「生者死者双方に使えるアイテム」との競合回避を図っています。
#==============================================================================
class Game_Action
#--------------------------------------------------------------------------
# ● 味方に対するターゲット
#--------------------------------------------------------------------------
def targets_for_friends
if item.for_user?
if item.note =~ /<combi;/ #合体技なら、参加メンバーを返す。
members = []
$game_party.members.each { |actor|
members.push actor if actor.combi_join != nil
}
return members
else
[subject]
end
#以下、「生者死者双方に使えるアイテム」との競合回避。
elsif item.for_dead_friend?
if item.for_one?
if /<生者にも効果>/ =~ item.note
[friends_unit.smooth_target_all(@target_index)] #生死関わらず。
else
[friends_unit.smooth_dead_target(@target_index)]
end
else
if /<生者にも効果>/ =~ item.note
friends_unit.members #全メンバーを返す。
else
friends_unit.dead_members
end
end
elsif item.for_friend?
if item.for_one?
[friends_unit.smooth_target(@target_index)]
else
friends_unit.alive_members
end
end
end
end
#==============================================================================
# ■ Game_BattlerBase
#==============================================================================
class Game_BattlerBase
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :combi_join # 合体技発動の時、何番目のスキルを担当するか。
#0~3の数字が入る。
#--------------------------------------------------------------------------
# ● コマンド入力可能判定 ☆再定義
#--------------------------------------------------------------------------
def inputable?
return false if self.combi_join != nil
normal? && !auto_battle?
end
#--------------------------------------------------------------------------
# ● スキルの使用可能条件チェック
# 合体技が使用可能かどうかの時に使用する。
# 通常の使用可非判定と違うのは、スキルの「使用可能時」を無視するということ。
#--------------------------------------------------------------------------
def skill_conditions_met_combi?(skill)
#usable_item_conditions_met?(skill) &&
movable? &&
skill_wtype_ok?(skill) && skill_cost_payable?(skill) &&
!skill_sealed?(skill.id) && !skill_type_sealed?(skill.stype_id)
end
end
#==============================================================================
# ■ Scene_Title
#==============================================================================
class Scene_Title < Scene_Base
#--------------------------------------------------------------------------
# ● コマンド : ニューゲーム
#--------------------------------------------------------------------------
def command_new_game_combi
command_new_game_combi_default
$com = Combination.new
end
alias_method :command_new_game_combi_default, :command_new_game
alias_method :command_new_game, :command_new_game_combi
end
#==============================================================================
# ■ Scene_Load
#==============================================================================
class Scene_Load < Scene_File
#--------------------------------------------------------------------------
# ● セーブファイル[決定]
#--------------------------------------------------------------------------
def on_savefile_ok_combi
on_savefile_ok_combi_default
$com = Combination.new
end
alias_method :on_savefile_ok_combi_default, :on_savefile_ok
alias_method :on_savefile_ok, :on_savefile_ok_combi
end
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
attr_reader :combi_skill_win
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def battle_start_combi_scene_battle
battle_start_combi_scene_battle_default
#合体技の数値計算
#p "combi_call_C" #test
#$combi_skill_works = [] #配列[発動可能な合体技,その構成メンバーID]
#$combi_skill_works = $com.search_combi_skill
#start_combi_scene_battle_default
cancel_combi_join #合体技参加をクリア。
@combi_skill_win.refresh
@party_command_window.refresh
end
alias :battle_start_combi_scene_battle_default :battle_start
alias :battle_start :battle_start_combi_scene_battle
#--------------------------------------------------------------------------
# ● 合体技参加をクリア。
#--------------------------------------------------------------------------
def cancel_combi_join
for i in 0 ... $game_party.members.size
$game_party.members[i].combi_join = nil if $game_party.members[i] != nil
end
end
#--------------------------------------------------------------------------
# ● 終了処理
#--------------------------------------------------------------------------
def terminate_combi_scene_battle
terminate_combi_scene_battle_default
@combi_skill_win.dispose
end
alias :terminate_combi_scene_battle_default :terminate
alias :terminate :terminate_combi_scene_battle
#--------------------------------------------------------------------------
# ● 全ウィンドウの作成
#--------------------------------------------------------------------------
def create_all_windows_combi
create_all_windows_combi_default
@combi_skill_win = Window_CombinationSkills.new
@combi_join_win = Window_CombinationJoin.new
end
alias :create_all_windows_combi_default :create_all_windows
alias :create_all_windows :create_all_windows_combi
#--------------------------------------------------------------------------
# ● パーティコマンドウィンドウの作成
#--------------------------------------------------------------------------
def create_party_command_window_combi
create_party_command_window_combi_default
@party_command_window.set_handler(:combiskill, method(:command_combi_skill))
end
alias :create_party_command_window_combi_default :create_party_command_window
alias :create_party_command_window :create_party_command_window_combi
#--------------------------------------------------------------------------
# ● 合体技の選択へ。
#--------------------------------------------------------------------------
def command_combi_skill
@combi_skill_win.visible = true
@combi_skill_win.active = true
@help_window.visible = true
@combi_skill_win.help_window = @help_window
@combi_join_win.help_window = @help_window
@combi_skill_win.combi_join_win = @combi_join_win
end
#--------------------------------------------------------------------------
# ● 敵キャラ[決定]
#--------------------------------------------------------------------------
def on_enemy_ok_combi
if @combi_join_win.visible
$main_combi_actor.input.target_index =
@enemy_window.enemy.index #ターゲット入力
@enemy_window.hide
@combi_join_win.visible = false
next_command
else
on_enemy_ok_combi_default
end
end
alias :on_enemy_ok_combi_default :on_enemy_ok
alias :on_enemy_ok :on_enemy_ok_combi
#--------------------------------------------------------------------------
# ● 敵キャラ[キャンセル]
#--------------------------------------------------------------------------
def on_enemy_cancel_combi
if @combi_join_win.visible
@enemy_window.hide
@combi_join_win.active = true
@combi_join_win.z = 100
else
on_enemy_cancel_combi_default
end
end
alias :on_enemy_cancel_combi_default :on_enemy_cancel
alias :on_enemy_cancel :on_enemy_cancel_combi
#--------------------------------------------------------------------------
# ● アクター[決定]
#--------------------------------------------------------------------------
def on_actor_ok_combi
if @combi_join_win.visible
$main_combi_actor.input.target_index =
@actor_window.index #ターゲット入力
@actor_window.hide
@combi_join_win.visible = false
next_command
else
on_actor_ok_combi_default
end
end
alias :on_actor_ok_combi_default :on_actor_ok
alias :on_actor_ok :on_actor_ok_combi
#--------------------------------------------------------------------------
# ● アクター[キャンセル]
#--------------------------------------------------------------------------
def on_actor_cancel_combi
if @combi_join_win.visible
@actor_window.hide
@combi_join_win.active = true
@combi_join_win.z = 100
else
on_actor_cancel_combi_default
end
end
alias :on_actor_cancel_combi_default :on_actor_cancel
alias :on_actor_cancel :on_actor_cancel_combi
#--------------------------------------------------------------------------
# ● ターン終了
#--------------------------------------------------------------------------
def turn_end_combi
turn_end_combi_default
cancel_combi_join #合体技参加フラグをOFF
#$combi_skill_works = []
#p "combi_call_A" #test
#$combi_skill_works = $com.search_combi_skill
$main_combi_actor = nil
@combi_skill_win.index = 0 #カーソルを戻す。
@combi_skill_win.refresh
end
alias :turn_end_combi_default :turn_end
alias :turn_end :turn_end_combi
#--------------------------------------------------------------------------
# ● パーティコマンド選択の開始
#--------------------------------------------------------------------------
def start_party_command_selection_combi
cancel_combi_join #合体技参加フラグをOFF
@combi_join_win.z = 100
start_party_command_selection_combi_default
end
alias :start_party_command_selection_combi_default :start_party_command_selection
alias :start_party_command_selection :start_party_command_selection_combi
#--------------------------------------------------------------------------
# ● スキル/アイテムの使用
#--------------------------------------------------------------------------
def use_item_combi
item = Marshal.load(Marshal.dump(@subject.current_action.item))
if item.note =~ /<combi;/ and combi_skill_usable? == false
@subject.current_action.set_skill(Tamura_Combi::UNUSE) #使用不可能
end
use_item_combi_default
#合体技のMPを消費する。
if @subject.actor? and @subject.alive?
#item = @subject.current_action.item
if item.note =~ /<combi;/
for i in 0 ... $game_party.members.size
actor = $game_party.members[i]
if actor.combi_join != nil
part_skill = $data_skills[$combi_need[actor.combi_join]]
if part_skill != nil
actor.mp -= actor.skill_mp_cost(part_skill)
actor.tp -= actor.skill_tp_cost(part_skill)
end
end
end
end
else
#反撃技など。
end
end
alias :use_item_combi_default :use_item
alias :use_item :use_item_combi
#--------------------------------------------------------------------------
# ● 合体技が使用可能であるか。
# スキルが使用可能か・行動不能か・
#--------------------------------------------------------------------------
def combi_skill_usable?
for i in 0 ... $game_party.members.size
actor = $game_party.members[i]
next if actor.combi_join == nil
part_skill = $data_skills[$combi_need[actor.combi_join]]
return false if part_skill == nil
return false unless actor.skill_conditions_met_combi?(part_skill)
end
return true
end
#--------------------------------------------------------------------------
# ● ももまる様製作「XPスタイルバトル」競合対策
#--------------------------------------------------------------------------
def actor_selection_item
return @combi_skill_win.skill if @combi_join_win.visible #合体技
case @actor_command_window.current_symbol
when :attack ; $data_skills[BattleManager.actor.attack_skill_id]
when :skill ; @skill
when :item ; @item
when :guard ; $data_skills[BattleManager.actor.guard_skill_id]
else ; nil
end
end
end
#==============================================================================
# ■ Window_PartyCommand
#------------------------------------------------------------------------------
# バトル画面で、戦うか逃げるかを選択するウィンドウです。
#==============================================================================
class Window_PartyCommand < Window_Command
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
def make_command_list_combi
make_command_list_combi_default
if $combi_skill_works == [] #使える合体技なし。
add_command("合体技", :combiskill , false)
else
add_command("合体技", :combiskill , true)
end
end
alias :make_command_list_combi_default :make_command_list
alias :make_command_list :make_command_list_combi
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
def setup_combi
$combi_skill_works = $com.search_combi_skill
setup_combi_default
end
alias :setup_combi_default :setup
alias :setup :setup_combi
end
#==============================================================================
# ■ Window_CombinationSkills
#------------------------------------------------------------------------------
# 合体技を選択するウィンドウです。
#==============================================================================
class Window_CombinationSkills < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# x : ウィンドウの X 座標
# y : ウィンドウの Y 座標
# width : ウィンドウの幅
# height : ウィンドウの高さ
# actor : アクター
#--------------------------------------------------------------------------
def initialize
super(0, 72, 544, 344)
@index = 0
@combi_join_win = nil
self.visible = false
self.active = false
self.set_handler(:ok, method(:on_combi_skill_ok))
self.set_handler(:cancel, method(:on_combi_skill_cancel))
refresh
end
#--------------------------------------------------------------------------
# ● 桁数の取得
#--------------------------------------------------------------------------
def col_max
return 2
end
#--------------------------------------------------------------------------
# ● 項目数の取得
#--------------------------------------------------------------------------
def item_max
@data ? @data.size : 1
end
#--------------------------------------------------------------------------
# ● スキルの取得
#--------------------------------------------------------------------------
def skill
return @data[self.index]
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
if $combi_skill_works != nil
@data = []
still = []
for i in 0 ... $combi_skill_works.size
skill_id = $combi_skill_works[i][0]
skill=$data_skills[skill_id]
next if still.include?(skill.id)
@data.push(skill)
still.push(skill.id)
end
@item_max = @data.size
create_contents
for i in 0...@item_max
draw_item(i)
end
end
update_help
end
#--------------------------------------------------------------------------
# ● 項目の描画
# index : 項目番号
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
skill = @data[index]
if skill != nil
rect.width -= 4
draw_item_name(skill, rect.x, rect.y, true)
end
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
@help_window.set_item(skill) if @help_window != nil
end
#--------------------------------------------------------------------------
# ● 参加メンバー決定ウィンドウに選択したスキルを受け渡す時に使用。
#--------------------------------------------------------------------------
def combi_join_win=(combi_join_win)
@combi_join_win = combi_join_win
end
#--------------------------------------------------------------------------
# ● [決定]
#--------------------------------------------------------------------------
def on_combi_skill_ok
@combi_join_win.index = @index
@combi_join_win.active = true
@combi_join_win.visible = true
self.active = false
self.visible = false
@combi_join_win.skill = skill
@combi_join_win.prepare
@combi_join_win.combi_skill_win = self
@help_window.visible = false
end
#--------------------------------------------------------------------------
# ● [キャンセル]
#--------------------------------------------------------------------------
def on_combi_skill_cancel
self.active =false
self.visible =false
@help_window.visible = false
SceneManager.scene.start_party_command_selection
end
end
#==============================================================================
# ■ Window_CombinationJoin
#------------------------------------------------------------------------------
# 合体技に参加するメンバーを決定するウィンドウです。
#==============================================================================
class Window_CombinationJoin < Window_Base
attr_accessor :pattern
attr_accessor :combi_main_actor #統括者
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# x : ウィンドウの X 座標
# y : ウィンドウの Y 座標
# width : ウィンドウの幅
# height : ウィンドウの高さ
# actor : アクター
#--------------------------------------------------------------------------
def initialize
super(0, 0, 544, 384)
[url=home.php?mod=space&uid=260100]@skill[/url] = nil #合体技スキル
@index = 0 #合体技ウィンドウのindex
@pattern = 0 #参加メンバーのパターン
@combi_main_actor = nil #統括者(参加メンバーの一番目のアク ^ー)。
self.z = 100
self.visible = false
self.active = false
end
#--------------------------------------------------------------------------
# ● 合体技ウィンドウのindexを入力
#--------------------------------------------------------------------------
def index=(index)
@index = index
end
#--------------------------------------------------------------------------
# ● スキルを入力
#--------------------------------------------------------------------------
def skill=(skill)
@skill = skill
end
#--------------------------------------------------------------------------
# ● 合体技ウィンドウ。こちらから操作するために受け取る。
#--------------------------------------------------------------------------
def combi_skill_win=(combi_skill_win)
@combi_skill_win = combi_skill_win
end
#--------------------------------------------------------------------------
# ● 合体技ウィンドウ。こちらから操作するために受け取る。
#--------------------------------------------------------------------------
def help_window=(help_window)
@help_window = help_window
end
#--------------------------------------------------------------------------
# ● 準備
#--------------------------------------------------------------------------
def prepare
#$combi_need = $com.need_skills(@skill) #合体技に必要なスキルのID
skill_id = @skill.id
$combi_patterns = []
$combi_skill_works.each do |combi_skill|
if combi_skill[0] == skill_id
$combi_patterns.push combi_skill
end
end
#p $combi_patterns #test
@big_pattern = 0
$combi_need = Marshal.load(Marshal.dump($combi_patterns[@big_pattern][2]))
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
skill_id = $combi_patterns[@big_pattern][0]
@pattern = 0 if $combi_patterns[@big_pattern][1][@pattern] == nil
@join_pattern = Marshal.load(Marshal.dump($combi_patterns[@big_pattern][1][@pattern]))
$combi_need = Marshal.load(Marshal.dump($combi_patterns[@big_pattern][2]))
create_contents
draw_item_name(@skill, 0, 0, true)
self.contents.draw_text(220, 0*24, 270, line_height, "に参加するメンバーを選んでください。", 0)
draw_item_name(@skill, 0, 1*24, true)
self.contents.draw_text(220, 1*24, 270, line_height, "は以下の技の合体技です。", 0)
self.contents.draw_text(0, 3*24, 100, line_height, "スキル名", 0)
self.contents.draw_text(200, 3*24, 100, line_height, "MP", 0)
self.contents.draw_text(290, 3*24, 100, line_height, "使用者", 0)
for i in 0 ... $combi_need.size
#p $combi_need #test
part_skill=$data_skills[$combi_need[i]]
draw_item_name(part_skill,0 , (i+4)*24, true)
actor = $game_party.members[@join_pattern[i]]
draw_actor_name(actor, 290, (i+4)*24)
#統括者の取得。
@main_combi_actor = actor if i == 0
if part_skill != nil
if actor.skill_mp_cost(part_skill) >0 #MPコストを表示する
self.contents.draw_text(200, (i+4)*24, 100, line_height , actor.skill_mp_cost(part_skill), 0)
elsif actor.skill_tp_cost(part_skill) > 0 #TPコスト表示
str = "TP" + actor.skill_tp_cost(part_skill).to_s
self.contents.draw_text(200, (i+4)*24, 100, line_height , str, 0)
end
end
end
self.contents.draw_text(0, ($combi_need.size + 5)*24, 270, line_height, "←→:参加メンバーの変更", 0)
self.contents.draw_text(0, ($combi_need.size + 6)*24, 270, line_height, "決定:このメンバーで使用する。", 0)
self.contents.draw_text(0, ($combi_need.size + 7)*24, 270, line_height, "キャンセル:合体技の選択に戻る", 0)
#@join_pattern = Marshal.load(Marshal.dump($combi_skill_works[@index][1][@pattern]))
end
#--------------------------------------------------------------------------
# ● 項目の描画
# index : 項目番号
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
if skill != nil
rect.width -= 4
draw_item_name(skill, rect.x, rect.y, true)
end
end
#--------------------------------------------------------------------------
# ● 更新
#--------------------------------------------------------------------------
def update
super
if self.active
on_combi_join_ok if (Input.trigger?(:C))
on_combi_join_cancel if (Input.trigger?(:B))
on_combi_join_right if Input.repeat?(:RIGHT) #(Input.trigger?(:RIGHT))
on_combi_join_left if Input.repeat?(:LEFT) #(Input.trigger?(:LEFT))
end
end
#--------------------------------------------------------------------------
# ● [決定]
#--------------------------------------------------------------------------
def on_combi_join_ok
$main_combi_actor = @main_combi_actor
$main_combi_actor.input.set_skill(@skill.id) #統括者にスキル入力。
$main_combi_actor.last_skill.object = @skill
decision_join_member #combi_join入力
self.z = 10
self.active = false
#self.visible = false #ここではまだ表示し、表示をフラグとして扱う。
#必要であればターゲット選択へ。
if
[email protected]
_selection?
self.visible = false
SceneManager.scene.next_command
elsif @skill.for_opponent?
SceneManager.scene.select_enemy_selection
else
SceneManager.scene.select_actor_selection
end
end
#--------------------------------------------------------------------------
# ● [キャンセル]
#--------------------------------------------------------------------------
def on_combi_join_cancel
@combi_skill_win.active = true
@combi_skill_win.visible = true
@help_window.visible = true
self.active =false
self.visible =false
end
#--------------------------------------------------------------------------
# ● [右] パターン+1
#--------------------------------------------------------------------------
def on_combi_join_right
self.pattern += 1
#if self.pattern == $combi_skill_works[@index][1].size
if self.pattern == $combi_patterns[@big_pattern][1].size
self.pattern = 0
@big_pattern += 1
if @big_pattern == $combi_patterns.size
@big_pattern = 0
end
end
self.refresh
end
#--------------------------------------------------------------------------
# ● [左] パターン-1
#--------------------------------------------------------------------------
def on_combi_join_left
self.pattern -= 1
if self.pattern < 0
@big_pattern -= 1
if @big_pattern < 0
@big_pattern = $combi_patterns.size - 1
end
self.pattern = $combi_patterns[@big_pattern][1].size - 1
end
self.refresh
end
#--------------------------------------------------------------------------
# ● 参加メンバー決定ウィンドウで使用。参加メンバーを決定し、combi_join入力。
#--------------------------------------------------------------------------
def decision_join_member
cancel_combi_join
$main_combi_actor = @main_combi_actor
#p "C" #test
#p @join_pattern #test
for j in 0 ... @join_pattern.size
$game_party.members[@join_pattern[j]].combi_join = j
end
end
#--------------------------------------------------------------------------
# ● 合体技参加をクリア。
#--------------------------------------------------------------------------
def cancel_combi_join
#p "B" #test
#p @join_pattern #test
for i in 0 ... $game_party.members.size
$game_party.members[i].combi_join = nil if $game_party.members[i] != nil
end
$main_combi_actor = nil
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(skill == nil ? "" : skill.description)
end
end
#==============================================================================
# ■ Combination
#------------------------------------------------------------------------------
# 合体技が発動可能かを調べる。
#
# actor_works : [ [[分担パターン1],[分担パターン2],……], [スキル②のパターン達],……]
#==============================================================================
#total_skill_arr[0] : 合体技スキルのID
#total_skill_arr[1] : 合体技の参加パターン
#total_skill_arr[2] : 合体技の構成スキルIDの配列
class Combination
#すべてのスキルを調べ、合体技を抜き出す。
def search_combi_skill
total_skill_arr=[]
actor_works = []
for i in 1 ... $data_skills.size
need = []
need = need_skills($data_skills[i])
if need != []
#p $data_skills[i].name #test
need.each do |n|
skill_arr=[]
skill_arr.push i
actor_works = combination_usable?(n)
#p actor_works #test
if actor_works != []
skill_arr.push actor_works
skill_arr.push n
total_skill_arr.push skill_arr
end
#p skill_arr #test
end
end
end
#p create_party_skills #test
#p total_skill_arr #test
return total_skill_arr
end
#スキルIDを受け取り、合体技に必要なIDを調べてneed配列を返す。
#なお、合体技でない場合は空の配列を返す。
def need_skills(skill)
return false if skill.id == nil
note = skill.note
if /<combi;/ =~ note
str1 = note.scan(/<combi(\S+)>/)
need = []
str1.each do |s|
#p s #test
need_one = []
str2 = s[0].scan(/;(\d+)/)
for str in str2
need_one.push str[0].to_i
end
need.push need_one
end
#p need #test
return need
end
return []
end
#使用可能なスキルIDの配列を作る。
# [[1],[2,3],[]] で、一人目がスキル1番、二人目がスキル2,3番習得。
# 3人目 ヘ行動不能か、スキル無し。
def create_party_skills
party_skills = []
for actor in $game_party.members
ini_skills_id = []
unless actor.movable?
party_skills.push []
next
end
for i in 0 ... actor.skills.size
skill = $data_skills[actor.skills[i].id]
next unless actor.skill_conditions_met_combi?(skill)
#if skill.mp_cost > actor.mp
# next
#elsif skill.tp_cost > actor.tp
# next
#end
ini_skills_id.push skill.id
end
party_skills.push ini_skills_id
end
return party_skills
end
#もし、合体技の構成スキル3番を、1番目のアクターが、担当できるのなら、
#[X,X,1]といったような配列を作る。これをパターンの数だけ作る。すなわち
#[[1,3,2],[3,2,1],[3,4,1]]のような配列を最終的に作る。
def combination_usable?(need)
@need = need #必要スキルのIDの配列。
@actor_works = []
[url=home.php?mod=space&uid=95897]@actor[/url] = []
@party_skills = create_party_skills
#まず、全ての習得パターンを書き出す。
@pre_actor_works = [] #途中経過を記録する配列。
@new_actor_works = [] #そのさらに途中経過を一時保管。
return [] if @party_skills.size < @need.size #人数不足。
for i in 0 ... @need.size
if i == 0
for j in 0 ... @party_skills.size
if @party_skills[j].include?(@need[i])
@pre_actor_works.push [j]
end
end
else
@new_actor_works = []
for k in 0 ... @pre_actor_works.size
for j in 0 ... @party_skills.size #パーティを一人ずつ調べる。
next if @pre_actor_works[k].include?(j)
if @party_skills[j].include?(@need[i])
#p k.to_s + "" + j.to_s if i == 3
now_research_arr = Marshal.load(Marshal.dump(@pre_actor_works[k]))
now_research_arr.push j
@new_actor_works.push now_research_arr
end
end
end
@pre_actor_works = Marshal.load(Marshal.dump(@new_actor_works))
end
end
return @pre_actor_works
end
end
#=end
复制代码
来源,不记得了。
作者:
lirn
时间:
2013-7-20 22:44
没试过,大概是这样。
在需要合体技的备注栏写入<combi;技能ID;技能ID;技能ID;技能ID>,在条件符合的情况下在逃跑下方使用
作者:
奥特曼盖亚
时间:
2013-7-23 20:10
lirn没有用呀
作者:
伪3D春哥
时间:
2013-7-24 13:33
看样子像是外源脚本
求简化
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1