Project1

标题: 請問攻擊指令是否可以自訂? [打印本页]

作者: 亂堂和樹    时间: 2012-4-10 14:10
标题: 請問攻擊指令是否可以自訂?
本帖最后由 iisnow 于 2012-4-10 14:26 编辑

小弟正在製作一個遊戲碰上了個問題...
使用這個腳本"精神コマンド再現"的腳本

所以把【技能】稱呼改成【精神】
但是又不想把精神跟攻擊技能放在一起...
是否可以把【攻擊】這個默認指令
改為另一個技能指令視窗呢?

希望前輩們能夠幫幫忙~謝謝=w=

另外問個問題~精神コマンド再現..這個哪個前輩有用過0.0?
能不能把這腳本變成..不用耗到MP~而是另一個自創數值(如:SP)
原網頁腳本如下0.0”

  1. #==============================================================================
  2. #    ?VX RGSS2 「精神コマンド再現」?
  3. #      EnDlEss DREamER
  4. #     URL:[url]http://mitsu-evo.6.ql.bz/[/url]
  5. #     製作者 mitsu-evo
  6. #     Last:2012/1/20
  7. #   一部のスパロボ精神コマンドの効果をスキル・アイテムで再現します。
  8. #     ▼ MAIN 直上付近
  9. #==============================================================================
  10. $ed_rgss2 = {} if $ed_rgss2 == nil
  11. $ed_rgss2["ed_spirit_command"] = true
  12. =begin

  13. 1/20:必中・鉄壁・集中使用後、ほかの精神コマンド使用時にターン経過して
  14. 効果が切れてしまう現象を修正。
  15. 戦闘終了後、前回戦闘での精神コマンド効果が継続する現象を修正。





  16.       ★ 概要 ★
  17.    
  18.     ・スパロボの精神コマンドの効果を再現します。
  19.     ・スキル選択後、原作同様にエフェクト後効果を発動します。
  20.     ・敵も行動リストに精神スキルを入れると行動前に使用します。
  21.     ・簡易汎用ATB併用時は精神スキルは詠唱しません。
  22.     ・スキル及びアイテムのメモ欄にコマンドを記載します。
  23.     ・使用精神コマンド一覧
  24.      「熱血」「魂」「必中」「閃き」「鉄壁」「不屈」「かく乱」「再動」
  25.      「集中」「直撃」
  26.     ・メモ欄に<熱血>などと入れるとそのスキルを対象に付加します。
  27.      再動なら<再動>とメモ欄に入れると効果が付与されます。
  28.      その性質上「感応」や「幸運」「努力」などは再現していません。
  29.     ・「直撃」はダメージ吸収と属性補正を無効化します。
  30.     ・「再動」は入力行動を再度実行する仕様となっています。
  31.     ・最終ダメージで回復するものは熱血・魂・鉄壁・不屈の効果が発動しません。
  32.     ・「熱血」は2倍。「魂」は3倍。「不屈」は10ダメージ。
  33.      「鉄壁」はダメージ1/4。「必中」より「閃き」優先。
  34.      「かく乱」は命中1/2。
  35.     ・「奇跡」などは複数のメモ欄コマンドを記載してやるといいです。
  36.     ・ツクールの仕様上「対象」を指定できるので
  37.      敵単体に「かく乱」。味方全体に「魂」など出来て
  38.      かなりチートになるので、制作者側で調整や制限して下さい。
  39.    
  40.      ★ 導入位置 ★
  41.    
  42.     ・「指定値ダメージ緩和バリア」「特殊ダメージ計算式」よりも下に導入すること。
  43.     ・「通常攻撃回数システム」よりも上

  44. =end
  45. #==============================================================================
  46. # ■ RPG::UsableItem
  47. #==============================================================================
  48. module RPG
  49.   class UsableItem < BaseItem
  50.   #--------------------------------------------------------------------------
  51.   # ● 精神コマンド「熱血」の取得
  52.   #--------------------------------------------------------------------------
  53.     def nekketu
  54.       sp_com = self.note.scan(/<熱血>/)
  55.       sp_com = sp_com.flatten
  56.       sp_com = sp_com[0].to_s
  57.       # 魂がある場合はfalse
  58.       return false if tamasii
  59.       # sp_com が nil でなくて 配列が空でもない
  60.       if sp_com != nil and not sp_com.empty?
  61.         return true
  62.       else
  63.         return false
  64.       end
  65.     end
  66.   #--------------------------------------------------------------------------
  67.   # ● 精神コマンド「魂」の取得
  68.   #--------------------------------------------------------------------------
  69.     def tamasii
  70.       sp_com = self.note.scan(/<魂>/)
  71.       sp_com = sp_com.flatten
  72.       sp_com = sp_com[0].to_s
  73.       # sp_com が nil でなくて 配列が空でもない
  74.       if sp_com != nil and not sp_com.empty?
  75.         return true
  76.       else
  77.         return false
  78.       end
  79.     end
  80.   #--------------------------------------------------------------------------
  81.   # ● 精神コマンド「閃き」の取得
  82.   #--------------------------------------------------------------------------
  83.     def hirameki
  84.       sp_com = self.note.scan(/<閃き>/)
  85.       sp_com = sp_com.flatten
  86.       sp_com = sp_com[0].to_s
  87.       # sp_com が nil でなくて 配列が空でもない
  88.       if sp_com != nil and not sp_com.empty?
  89.         return true
  90.       else
  91.         return false
  92.       end
  93.     end
  94.   #--------------------------------------------------------------------------
  95.   # ● 精神コマンド「必中」の取得
  96.   #--------------------------------------------------------------------------
  97.     def hittyuu
  98.       sp_com = self.note.scan(/<必中>/)
  99.       sp_com = sp_com.flatten
  100.       sp_com = sp_com[0].to_s
  101.       # sp_com が nil でなくて 配列が空でもない
  102.       if sp_com != nil and not sp_com.empty?
  103.         return true
  104.       else
  105.         return false
  106.       end
  107.     end
  108.   #--------------------------------------------------------------------------
  109.   # ● 精神コマンド「鉄壁」の取得
  110.   #--------------------------------------------------------------------------
  111.     def teppeki
  112.       sp_com = self.note.scan(/<鉄壁>/)
  113.       sp_com = sp_com.flatten
  114.       sp_com = sp_com[0].to_s
  115.       # sp_com が nil でなくて 配列が空でもない
  116.       if sp_com != nil and not sp_com.empty?
  117.         return true
  118.       else
  119.         return false
  120.       end
  121.     end
  122.   #--------------------------------------------------------------------------
  123.   # ● 精神コマンド「集中」の取得
  124.   #--------------------------------------------------------------------------
  125.     def syuutyuu
  126.       sp_com = self.note.scan(/<集中>/)
  127.       sp_com = sp_com.flatten
  128.       sp_com = sp_com[0].to_s
  129.       # sp_com が nil でなくて 配列が空でもない
  130.       if sp_com != nil and not sp_com.empty?
  131.         return true
  132.       else
  133.         return false
  134.       end
  135.     end
  136.   #--------------------------------------------------------------------------
  137.   # ● 精神コマンド「直撃」の取得
  138.   #--------------------------------------------------------------------------
  139.     def tyokugeki
  140.       sp_com = self.note.scan(/<直撃>/)
  141.       sp_com = sp_com.flatten
  142.       sp_com = sp_com[0].to_s
  143.       # sp_com が nil でなくて 配列が空でもない
  144.       if sp_com != nil and not sp_com.empty?
  145.         return true
  146.       else
  147.         return false
  148.       end
  149.     end
  150.   #--------------------------------------------------------------------------
  151.   # ● 精神コマンド「不屈」の取得
  152.   #--------------------------------------------------------------------------
  153.     def hukutu
  154.       sp_com = self.note.scan(/<不屈>/)
  155.       sp_com = sp_com.flatten
  156.       sp_com = sp_com[0].to_s
  157.       # sp_com が nil でなくて 配列が空でもない
  158.       if sp_com != nil and not sp_com.empty?
  159.         return true
  160.       else
  161.         return false
  162.       end
  163.     end
  164.   #--------------------------------------------------------------------------
  165.   # ● 精神コマンド「かく乱」の取得
  166.   #--------------------------------------------------------------------------
  167.     def kakuran
  168.       sp_com = self.note.scan(/<かく乱>/)
  169.       sp_com = sp_com.flatten
  170.       sp_com = sp_com[0].to_s
  171.       # sp_com が nil でなくて 配列が空でもない
  172.       if sp_com != nil and not sp_com.empty?
  173.         return true
  174.       else
  175.         return false
  176.       end
  177.     end
  178.   #--------------------------------------------------------------------------
  179.   # ● 精神コマンド「再動」の取得
  180.   #--------------------------------------------------------------------------
  181.     def saidou
  182.       sp_com = self.note.scan(/<再動>/)
  183.       sp_com = sp_com.flatten
  184.       sp_com = sp_com[0].to_s
  185.       # sp_com が nil でなくて 配列が空でもない
  186.       if sp_com != nil and not sp_com.empty?
  187.         return true
  188.       else
  189.         return false
  190.       end
  191.     end
  192.   #--------------------------------------------------------------------------
  193.   # ● 精神コマンド「奇跡」の取得
  194.   #--------------------------------------------------------------------------
  195.     def kiseki
  196.       sp_com = self.note.scan(/<奇跡>/)
  197.       sp_com = sp_com.flatten
  198.       sp_com = sp_com[0].to_s
  199.       # sp_com が nil でなくて 配列が空でもない
  200.       if sp_com != nil and not sp_com.empty?
  201.         return true
  202.       else
  203.         return false
  204.       end
  205.     end
  206.   #--------------------------------------------------------------------------
  207.   # ● 精神コマンドの取得(ハッシュで返す。key="精神コマンド名"value=有効無効)
  208.   #    メモ欄に指定文字を確認し、リストを返す。
  209.   #--------------------------------------------------------------------------
  210.     def sp_command
  211.       sp_com = {}
  212.       sp_com["nekketu"] = nekketu
  213.       sp_com["tamasii"] = tamasii
  214.       sp_com["hirameki"] = hirameki
  215.       sp_com["hittyuu"] = hittyuu
  216.       sp_com["teppeki"] = teppeki
  217.       sp_com["syuutyuu"] = syuutyuu
  218.       sp_com["tyokugeki"] = tyokugeki
  219.       sp_com["hukutu"] = hukutu
  220.       sp_com["kakuran"] = kakuran
  221.       sp_com["saidou"] = saidou
  222.       sp_com["kiseki"] = kiseki
  223.       return sp_com
  224.     end
  225.   #--------------------------------------------------------------------------
  226.   # ● 精神コマンドかどうかの取得
  227.   #--------------------------------------------------------------------------
  228.     def sp_command?
  229.       for sp in sp_command.values
  230.         next if sp == false
  231.         return true
  232.       end
  233.       return false
  234.     end
  235.   end
  236. end
  237. #==============================================================================
  238. # ■ Game_Battler
  239. #------------------------------------------------------------------------------
  240. #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ
  241. # スのスーパークラスとして使用されます。
  242. #==============================================================================

  243. class Game_Battler
  244.   
  245.   #--------------------------------------------------------------------------
  246.   # ● 自分のターン設定&取得
  247.   #--------------------------------------------------------------------------
  248.   def my_turn
  249.     @my_turn = 0 if @my_turn == nil
  250.     return @my_turn
  251.   end
  252.   def my_turn=(value)
  253.     @my_turn = value
  254.   end
  255.   #--------------------------------------------------------------------------
  256.   # ● 精神コマンドの初期設定
  257.   #--------------------------------------------------------------------------
  258.   def initialize_sp_command_list(forcing=false)
  259.     return if @sp_command != nil and not forcing
  260.     # 付与されているかどうかの管理
  261.     sp_com = {}
  262.     sp_com["hirameki"] = false
  263.     sp_com["hittyuu"] = false
  264.     sp_com["teppeki"] = false
  265.     sp_com["syuutyuu"] = false
  266.     sp_com["tyokugeki"] = false
  267.     sp_com["hukutu"] = false
  268.     sp_com["kakuran"] = false
  269.     sp_com["saidou"] = false
  270.     sp_com["kiseki"] = false
  271.     @sp_command = sp_com if @sp_command == nil
  272.    
  273.     # 付与されたものの経過管理
  274.     sp_com = {}
  275.     sp_com["hirameki"] = false
  276.     sp_com["hittyuu"] = nil
  277.     sp_com["teppeki"] = nil
  278.     sp_com["syuutyuu"] = nil
  279.     sp_com["tyokugeki"] = false
  280.     sp_com["hukutu"] = false
  281.     sp_com["kakuran"] = nil
  282.     sp_com["saidou"] = false
  283.     sp_com["kiseki"] = false
  284.     @manage_sp_com = sp_com if @manage_sp_com == nil
  285.   end
  286.   #--------------------------------------------------------------------------
  287.   # ● 精神コマンドの設定
  288.   #     obj  : スキルまたはアイテム (通常攻撃の場合は nil)
  289.   #--------------------------------------------------------------------------
  290.   def set_sp_command_list(obj)
  291.     # 初期設定
  292.     initialize_sp_command_list
  293.    
  294.     # 精神付与管理
  295.     if obj.sp_command["nekketu"]
  296.       # 既に魂が掛かっていれば熱血は有効にしない。
  297.       @sp_command["nekketu"] = true unless @sp_command["tamasii"]
  298.     end
  299.     if obj.sp_command["tamasii"]
  300.       # 魂と熱血の重複はしない。
  301.       @sp_command["tamasii"] = true
  302.       @sp_command["nekketu"] = false
  303.     end
  304.     @sp_command["hirameki"] = true if obj.sp_command["hirameki"]
  305.     @sp_command["hittyuu"] = true if obj.sp_command["hittyuu"]
  306.     @sp_command["teppeki"] = true if obj.sp_command["teppeki"]
  307.     @sp_command["syuutyuu"] = true if obj.sp_command["syuutyuu"]
  308.     @sp_command["tyokugeki"] = true if obj.sp_command["tyokugeki"]
  309.     @sp_command["hukutu"] = true if obj.sp_command["hukutu"]
  310.     @sp_command["kakuran"] = true if obj.sp_command["kakuran"]
  311.     @sp_command["saidou"] = true if obj.sp_command["saidou"]
  312.     @sp_command["kiseki"] = true if obj.sp_command["kiseki"]
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # ● 精神コマンドの取得
  316.   #--------------------------------------------------------------------------
  317.   def get_sp_command_list
  318.     initialize_sp_command_list
  319.     return @sp_command
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # ● 精神コマンドの経過ターンなど管理設定
  323.   #--------------------------------------------------------------------------
  324.   def manage_sp_command(turn,user)
  325.     @manage_sp_com = {} if @manage_sp_com == nil
  326.     unless get_sp_command_list["tamasii"]
  327.       # 既に魂が掛かっていれば熱血は有効にしない。
  328.       @manage_sp_com["nekketu"] = get_sp_command_list["nekketu"] ? true : false
  329.       get_sp_command_list["nekketu"] = false unless @manage_sp_com["nekketu"]
  330.     end
  331.    
  332.     if get_sp_command_list["tamasii"]
  333.       # 魂と熱血の重複はしない。
  334.       @manage_sp_com["tamasii"] = get_sp_command_list["tamasii"] ? true : false
  335.       @manage_sp_com["nekketu"] = false
  336.       get_sp_command_list["tamasii"] = false unless @manage_sp_com["tamasii"]
  337.     end
  338.    
  339.     @manage_sp_com["hirameki"] = get_sp_command_list["hirameki"] ? true : false
  340.     get_sp_command_list["hirameki"] = false unless @manage_sp_com["hirameki"]
  341.    
  342.     #unless turn == -1
  343.     # 必中・鉄壁・集中は次の自分のターンまで
  344.     if get_sp_command_list["hittyuu"]
  345.       if @manage_sp_com["hittyuu"] == nil #< turn
  346.         if self == user
  347.           @manage_sp_com["hittyuu"] = turn + 2
  348.         else
  349.           @manage_sp_com["hittyuu"] = turn + 1
  350.         end
  351.       end
  352.     end
  353.     if @manage_sp_com["hittyuu"] != nil and turn > @manage_sp_com["hittyuu"]
  354.       get_sp_command_list["hittyuu"] = false
  355.       @manage_sp_com["hittyuu"] = nil
  356.     end
  357.    
  358.     if get_sp_command_list["teppeki"]
  359.       if @manage_sp_com["teppeki"] == nil #< turn
  360.         if self == user
  361.           @manage_sp_com["teppeki"] = turn + 2
  362.         else
  363.           @manage_sp_com["teppeki"] = turn + 1
  364.         end
  365.       end
  366.     end
  367.     if @manage_sp_com["teppeki"] != nil and turn > @manage_sp_com["teppeki"]
  368.       get_sp_command_list["teppeki"] = false
  369.       @manage_sp_com["teppeki"] = nil
  370.     end
  371.    
  372.     if get_sp_command_list["syuutyuu"]
  373.       if @manage_sp_com["syuutyuu"] == nil #< turn
  374.         if self == user
  375.           @manage_sp_com["syuutyuu"] = turn + 2
  376.         else
  377.           @manage_sp_com["syuutyuu"] = turn + 1
  378.         end
  379.       end
  380.     end
  381.     if @manage_sp_com["syuutyuu"] != nil and  turn > @manage_sp_com["syuutyuu"]
  382.       get_sp_command_list["syuutyuu"] = false
  383.       @manage_sp_com["syuutyuu"] = nil
  384.     end
  385.    
  386.     if get_sp_command_list["kakuran"]
  387.       if @manage_sp_com["kakuran"] == nil #< turn
  388.         if self == user
  389.           @manage_sp_com["kakuran"] = turn + 2
  390.         else
  391.           @manage_sp_com["kakuran"] = turn + 1
  392.         end
  393.       end
  394.     end
  395.     if @manage_sp_com["kakuran"] != nil and turn > @manage_sp_com["kakuran"]
  396.       get_sp_command_list["kakuran"] = false
  397.       @manage_sp_com["kakuran"] = nil
  398.     end
  399.    
  400.     #end#unless turn == 0
  401.   
  402.     @manage_sp_com["tyokugeki"] = get_sp_command_list["tyokugeki"] ? true : false
  403.     get_sp_command_list["tyokugeki"] = false unless @manage_sp_com["tyokugeki"]
  404.    
  405.     @manage_sp_com["hukutu"] = get_sp_command_list["hukutu"] ? true : false
  406.     get_sp_command_list["hukutu"] = false unless @manage_sp_com["hukutu"]
  407.    
  408.     @manage_sp_com["saidou"] = get_sp_command_list["saidou"] ? true : false
  409.     get_sp_command_list["saidou"] = false unless @manage_sp_com["saidou"]
  410.    
  411.     @manage_sp_com["kiseki"] = get_sp_command_list["kiseki"] ? true : false
  412.     get_sp_command_list["kiseki"] = false unless @manage_sp_com["kiseki"]
  413.   end
  414.   #--------------------------------------------------------------------------
  415.   # ● 精神コマンドの経過ターンなど管理取得
  416.   #--------------------------------------------------------------------------
  417.   def manage_sp_command?
  418.     @manage_sp_com = {} if @manage_sp_com == nil
  419.     return nil if @manage_sp_com == {}
  420.     return @manage_sp_com
  421.   end
  422.   #--------------------------------------------------------------------------
  423.   # ● 最終命中率の計算
  424.   #     user : 攻撃者、スキルまたはアイテムの使用者
  425.   #     obj  : スキルまたはアイテム (通常攻撃の場合は nil)
  426.   #--------------------------------------------------------------------------
  427.   alias ed_spirit_command_calc_hit calc_hit
  428.   def calc_hit(user, obj = nil)
  429.     hit = ed_spirit_command_calc_hit(user, obj)
  430.    
  431.     hit /= 2 if user.get_sp_command_list["kakuran"]
  432.     if user.get_sp_command_list["hittyuu"]
  433.       unless get_sp_command_list["hirameki"]
  434.         hit += 1000
  435.         if obj != nil and not obj.for_opponent?
  436.           hit -= 1000
  437.         end
  438.       end
  439.     elsif user.get_sp_command_list["syuutyuu"]
  440.       unless get_sp_command_list["hirameki"]
  441.         hit += 30
  442.         hit -= 30 if obj != nil and not obj.for_opponent?
  443.       end
  444.     end
  445.     return hit
  446.   end
  447.   #--------------------------------------------------------------------------
  448.   # ● 最終回避率の計算
  449.   #     user : 攻撃者、スキルまたはアイテムの使用者
  450.   #     obj  : スキルまたはアイテム (通常攻撃の場合は nil)
  451.   #--------------------------------------------------------------------------
  452.   alias ed_spirit_command_calc_eva calc_eva
  453.   def calc_eva(user, obj = nil)
  454.     eva = ed_spirit_command_calc_eva(user, obj)
  455.     @effect_test = false unless $ed_rgss2["ed_damage_hit_time"]
  456.     if get_sp_command_list["hirameki"]
  457.       # 閃きが掛かっていて、スキルが敵対象の場合。
  458.       eva += 2000
  459.       if obj != nil and not obj.for_opponent?
  460.         eva -= 2000
  461.       else
  462.         get_sp_command_list["hirameki"] = false unless @effect_test
  463.       end
  464.     elsif get_sp_command_list["syuutyuu"]
  465.       eva += 30
  466.       eva -= 30 if obj != nil and not obj.for_opponent?
  467.     end
  468.     if user.get_sp_command_list["hittyuu"] and not get_sp_command_list["hirameki"]
  469.       # 必中が掛かっている場合。閃きが
  470.       eva = 0
  471.     end
  472.     return eva
  473.   end
  474.   #--------------------------------------------------------------------------
  475.   # ● 攻撃計算後の精神コマンドダメージ補正
  476.   #--------------------------------------------------------------------------
  477.   def sp_com_damage_revision(attacker)
  478.     # ダメージが0以下・・回復なら適用しない。
  479.     return if @hp_damage <= 0
  480.     # バトルレイアウト変更:extension「○○effect_test」のメソッド対応
  481.     @effect_test = false unless $ed_rgss2["ed_battle_extension"]
  482.     if attacker.get_sp_command_list["nekketu"]
  483.       @hp_damage *= 2
  484.       attacker.get_sp_command_list["nekketu"] = false unless @effect_test
  485.     elsif attacker.get_sp_command_list["tamasii"]
  486.       @hp_damage *= 3
  487.       attacker.get_sp_command_list["tamasii"] = false unless @effect_test
  488.     elsif get_sp_command_list["hukutu"]
  489.       @hp_damage = 10
  490.       get_sp_command_list["hukutu"] = false unless @effect_test
  491.     elsif get_sp_command_list["teppeki"]
  492.       @hp_damage /= 4
  493.     end
  494.   end
  495.   #--------------------------------------------------------------------------
  496.   # ● 吸収効果の計算
  497.   #     user : スキルまたはアイテムの使用者
  498.   #     obj  : スキルまたはアイテム
  499.   #    呼び出し前に @hp_damage と @mp_damage が計算されていること。
  500.   #--------------------------------------------------------------------------
  501.   alias ed_spirit_command_make_obj_absorb_effect make_obj_absorb_effect
  502.   def make_obj_absorb_effect(user, obj)
  503.     ed_spirit_command_make_obj_absorb_effect(user, obj)
  504.     if @tyokugeki
  505.       # 直撃なら吸収を無効にする
  506.       @absorbed = false
  507.     end
  508.   end
  509.   #--------------------------------------------------------------------------
  510.   # ● 属性の最大修正値の取得
  511.   #     element_set : 属性
  512.   #    与えられた属性の中で最も有効な修正値を返す
  513.   #--------------------------------------------------------------------------
  514.   alias ed_spirit_command_elements_max_rate elements_max_rate
  515.   def elements_max_rate(element_set)
  516.     if @tyokugeki
  517.       # 直撃なら属性補正を無効にして無属性攻撃とする。
  518.       return 100
  519.     else
  520.       ed_spirit_command_elements_max_rate(element_set)
  521.     end
  522.   end
  523.   #--------------------------------------------------------------------------
  524.   # ● 通常攻撃によるダメージ計算
  525.   #     attacker : 攻撃者
  526.   #    結果は @hp_damage に代入する。
  527.   #--------------------------------------------------------------------------
  528.   alias ed_spirit_command_make_attack_damage_value make_attack_damage_value
  529.   def make_attack_damage_value(attacker)
  530.     # バトルレイアウト変更:extension「○○effect_test」のメソッド対応
  531.     @effect_test = false unless $ed_rgss2["ed_battle_extension"]
  532.    
  533.     if attacker.get_sp_command_list["tyokugeki"]
  534.       # 直撃なら属性補正を無効にして無属性攻撃とする。
  535.       @tyokugeki = true
  536.       attacker.get_sp_command_list["tyokugeki"] = false unless @effect_test
  537.       manage_sp_command(-1,attacker) unless @effect_test
  538.     else
  539.       @tyokugeki = false
  540.     end
  541.     ed_spirit_command_make_attack_damage_value(attacker)
  542.     # ダメージ補正
  543.     sp_com_damage_revision(attacker)
  544.     # 精神コマンド管理
  545.     manage_sp_command(-1,attacker) unless @effect_test
  546.   end
  547.   #--------------------------------------------------------------------------
  548.   # ● スキルまたはアイテムによるダメージ計算
  549.   #     user : スキルまたはアイテムの使用者
  550.   #     obj  : スキルまたはアイテム
  551.   #    結果は @hp_damage または @mp_damage に代入する。
  552.   #--------------------------------------------------------------------------
  553.   alias ed_spirit_command_make_obj_damage_value make_obj_damage_value
  554.   def make_obj_damage_value(user, obj)
  555.     # 精神コマンドの取得
  556.     sp = get_sp_command_list
  557.     # バトルレイアウト変更:extension「○○effect_test」のメソッド対応
  558.     @effect_test = false unless $ed_rgss2["ed_battle_extension"]
  559.    
  560.     if user.get_sp_command_list["tyokugeki"]
  561.       # 直撃なら属性補正を無効にして無属性攻撃とする。
  562.       @tyokugeki = true
  563.       user.get_sp_command_list["tyokugeki"] = false unless @effect_test
  564.       manage_sp_command(-1,user) unless @effect_test
  565.     else
  566.       @tyokugeki = false
  567.     end
  568.     ed_spirit_command_make_obj_damage_value(user, obj)
  569.     # ダメージ補正
  570.     sp_com_damage_revision(user)
  571.     # 精神コマンド管理
  572.     #manage_sp_command = -1
  573.    
  574.     # 精神コマンドのセッティング
  575.     set_sp_command_list(obj) unless @effect_test
  576.    
  577.     # ターン経過ものは付与後に自分の経過ターンを記録。
  578.     manage_sp_command(self.my_turn,user) unless @effect_test
  579.   end
  580. end
  581. #==============================================================================
  582. # ■ Scene_Battle
  583. #------------------------------------------------------------------------------
  584. #  バトル画面の処理を行うクラスです。
  585. #==============================================================================
  586. class Scene_Battle < Scene_Base
  587.   
  588.   #--------------------------------------------------------------------------
  589.   # ● 終了処理
  590.   #--------------------------------------------------------------------------
  591.   alias ed_spirit_command_terminate terminate
  592.   def terminate
  593.     battler_sp_initialize(true)
  594.     ed_spirit_command_terminate
  595.   end
  596.   #--------------------------------------------------------------------------
  597.   # ● 精神コマンド初期化
  598.   #--------------------------------------------------------------------------
  599.   def battler_sp_initialize(forcing=false)
  600.     for battler in $game_troop.members
  601.       battler.initialize_sp_command_list(forcing)
  602.       battler.my_turn = 0
  603.     end
  604.     for battler in $game_party.members
  605.       battler.initialize_sp_command_list(forcing)
  606.       battler.my_turn = 0
  607.     end
  608.   end
  609.   #--------------------------------------------------------------------------
  610.   # ● 精神コマンド重複のチェック
  611.   #--------------------------------------------------------------------------
  612.   def overlap_sp_skill(battler,skill)
  613.     return false unless skill.sp_command?
  614.     list = battler.get_sp_command_list
  615.     ch = {}
  616.     for key in list.keys
  617.       return true if skill.sp_command[key] == true and list[key] == true
  618.     end
  619.     return false
  620.   end
  621.   #--------------------------------------------------------------------------
  622.   # ● フレーム更新
  623.   #--------------------------------------------------------------------------
  624.   alias ed_spirit_command_update update
  625.   def update
  626.     unless @active_battler == nil
  627.       skill = @active_battler.action.skill? ? @active_battler.action.skill : nil
  628.       unless skill == nil
  629.         if skill.sp_command?
  630.           if @active_battler.is_a?(Game_Enemy)
  631.             # 敵の場合
  632.             if skill.id != @old_sp_skill and
  633.               not overlap_sp_skill(@active_battler,skill)
  634.               
  635.               @action_battlers.unshift(@active_battler)
  636.               @sp_command_effect = true
  637.             else
  638.               @active_battler.make_action
  639.               if skill.sp_command? and overlap_sp_skill(@active_battler,skill)
  640.                 # 再度行動作成し同じなら待機する。
  641.                 @active_battler.action.kind = 0
  642.                 @active_battler.action.kind = 3
  643.                 @old_sp_skill = 0
  644.               end
  645.               @sp_command_effect = nil
  646.               return
  647.             end
  648.           end
  649.         end
  650.         # 同じでないなら実行。
  651.         unless @sp_command_effect == nil
  652.           super
  653.           update_basic(true)
  654.           update_info_viewport                  # 情報表示ビューポートを更新
  655.           process_action
  656.           # 簡易汎用ATB導入時は下記で行動実行
  657.           set_next_active_battler if $ed_rgss2["ed_active_time_battle"]
  658.           @sp_command_effect = nil
  659.           @old_sp_skill = skill.id
  660.           if @active_battler.is_a?(Game_Enemy)
  661.             # 敵の場合は再度実行できるように
  662.             @active_battler.make_action
  663.           end
  664.           return
  665.         end
  666.       end
  667.       @old_sp_skill = 0
  668.     end
  669.    
  670.     ed_spirit_command_update
  671.   end
  672.   #--------------------------------------------------------------------------
  673.   # ● 次のアクターのコマンド入力へ
  674.   #--------------------------------------------------------------------------
  675.   alias ed_spirit_command_next_actor next_actor
  676.   def next_actor
  677.     return unless @sp_command_effect == nil
  678.     ed_spirit_command_next_actor
  679.   end
  680.   #--------------------------------------------------------------------------
  681.   # ● スキル選択の終了
  682.   #--------------------------------------------------------------------------
  683.   alias ed_spirit_command_end_skill_selection end_skill_selection
  684.   def end_skill_selection
  685.     skill = @active_battler.action.skill? ? @active_battler.action.skill : nil
  686.     unless skill == nil
  687.       if skill.sp_command? and Input.trigger?(Input::C)
  688.         # スキルが精神コマンドの場合。
  689.         @action_battlers.unshift(@active_battler)
  690.         @sp_command_effect = true
  691.       end
  692.     end
  693.     ed_spirit_command_end_skill_selection

  694.   end
  695.   #--------------------------------------------------------------------------
  696.   # ● 戦闘開始の処理
  697.   #--------------------------------------------------------------------------
  698.   alias ed_spirit_command_process_battle_start process_battle_start
  699.   def process_battle_start
  700.     @old_sp_skill = nil
  701.     battler_sp_initialize
  702.     ed_spirit_command_process_battle_start
  703.   end
  704.   #--------------------------------------------------------------------------
  705.   # ● 行動順序作成
  706.   #--------------------------------------------------------------------------
  707.   alias ed_spirit_command_make_action_orders make_action_orders
  708.   def make_action_orders
  709.     if $ed_rgss2["ed_active_time_battle"]   
  710.       frame = @frames[0] - @frames[1]   
  711.       for battler in $game_troop.all_members?
  712.         next if battler == nil
  713.         if battler.get_sp_command_list["saidou"]
  714.           @action_battlers.unshift(@active_battler)
  715.           battler.get_sp_command_list["saidou"] = false
  716.         end
  717.         if battler.action.magic_spell_ok?
  718.           if battler.add_action_battler_list == false
  719.             @action_battlers.unshift battler
  720.             battler.add_action_battler_list = true
  721.           end
  722.         elsif battler.action.speed >= COUNT_MAX
  723.           if battler.add_action_battler_list == false
  724.             @action_battlers.push battler
  725.             battler.add_action_battler_list = true
  726.           end
  727.         end
  728.       end
  729.       set_next_active_battler unless chack_battler
  730.     else
  731.       ed_spirit_command_make_action_orders
  732.     end
  733.   end
  734.   #--------------------------------------------------------------------------
  735.   # ● 次に行動するべきバトラーの設定
  736.   #    イベントコマンドで [戦闘行動の強制] が行われているときはそのバトラー
  737.   #    を設定して、リストから削除する。それ以外はリストの先頭から取得する。
  738.   #    現在パーティにいないアクターを取得した場合 (index が nil, バトルイベ
  739.   #    ントでの離脱直後などに発生) は、それをスキップする。
  740.   #--------------------------------------------------------------------------
  741.   alias ed_spirit_command_set_next_active_battler set_next_active_battler
  742.   def set_next_active_battler
  743.     if $ed_rgss2["ed_active_time_battle"]      
  744.       ed_spirit_command_set_next_active_battler
  745.       unless @active_battler == nil
  746.         # ゲージがMAXでないなら中断
  747.         return unless @active_battler.action.speed >= COUNT_MAX
  748.         return if @sp_command_effect
  749.         # 行動者のターン設定
  750.         turn = @active_battler.my_turn
  751.         @active_battler.my_turn = turn + 1
  752.         # 精神コマンドの経過管理設定
  753.         @active_battler.manage_sp_command(turn + 1,@active_battler)
  754.       end
  755.       return
  756.     end
  757.    
  758.     unless @active_battler == nil
  759.       if @active_battler.get_sp_command_list["saidou"]
  760.         if @active_battler.action.skill?
  761.           unless @active_battler.action.skill.saidou
  762.             @action_battlers.unshift(@active_battler)
  763.             @active_battler.get_sp_command_list["saidou"] = false
  764.           end
  765.         else
  766.           @action_battlers.unshift(@active_battler)
  767.           @active_battler.get_sp_command_list["saidou"] = false
  768.         end
  769.       end
  770.     end
  771.     loop do
  772.       
  773.       if $game_troop.forcing_battler != nil
  774.         @active_battler = $game_troop.forcing_battler
  775.         @action_battlers.delete(@active_battler)
  776.         $game_troop.forcing_battler = nil
  777.       else
  778.         @active_battler = @action_battlers.shift
  779.       end
  780.       return if @active_battler == nil
  781.       return if @sp_command_effect
  782.       # 行動者のターン設定
  783.       turn = @active_battler.my_turn
  784.       @active_battler.my_turn = turn + 1
  785.       # 精神コマンドの経過管理設定
  786.       @active_battler.manage_sp_command(turn + 1,@active_battler)
  787.       return if @active_battler.index != nil
  788.     end
  789.   end
  790. end
复制代码


‘‘──亂堂和樹于2012-4-13 12:51补充以下内容

喔喔~這問題改變一下~我發現自己改有很腳本衝突的問題Orz...

有誰能夠幫我改成~這【精神指令】腳本
搭配著職業類別~每個角色分別學到不同的特殊技能
但是特殊技能~跟魔法是分開的技能欄位~
說明白點...

魔法=系統默認技能
特殊技能=另一個窗口,變成只辨認【職業別】而學習技能

兩者不會出現在同一個【技能視窗】的喔~是分開獨立的~

因為想做~
回到菜單後~選取查看人物能力時~能夠出現另一個以學習精神表窗口
還有戰鬥選單也能分開來=w="

懇求各位前輩了~
一點點網路資訊也好~推薦我去看~
我會努力學習的~謝謝
’’dsu_plus_rewardpost_czw




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1