Project1

标题: 魔法反射&装備(未汉化) [打印本页]

作者: 冰风情火    时间: 2008-2-12 19:17
标题: 魔法反射&装備(未汉化)
  1. #
  2. #    魔法反射ステート&装備(RGSS2)
  3. #  (C)2007 TYPE74RX-T
  4. #

  5. # ※:カスタマイズポイント…15~18行目

  6. #==============================================================================
  7. # ★ RX_T
  8. #------------------------------------------------------------------------------
  9. #  設定用
  10. #==============================================================================

  11. module RX_T
  12.   RX_Mcounter_Comment = "魔法障壁が魔法を跳ね返した!"  # 反射時メッセージ
  13.   RX_Mcounter_SE_Name = "flash1"                        # 反射時効果音名
  14.   RX_Mcounter_SE_Volume = 80                            # 反射時効果音音量
  15.   RX_Mcounter_SE_Pitch = 100                            # 反射時効果音ピッチ
  16. end

  17. #--------------------------------------------------------------------------
  18. # ★ システムワードの登録:魔法反射
  19. #--------------------------------------------------------------------------
  20. module RPG
  21.   class State
  22.     alias rx_rgss2b2_rx_extract_sys_str_from_note rx_extract_sys_str_from_note
  23.     def rx_extract_sys_str_from_note
  24.       rx_get_sys = RX_T.get_system_word_in_note(@note, "魔法反射")
  25.       @@rx_copy_str += rx_get_sys
  26.       @note = @note.sub(rx_get_sys, "")
  27.       @note = @note.sub("\r\n", "")
  28.       @rx_sys_str = @@rx_copy_str
  29.       # メソッドを呼び戻す
  30.       rx_rgss2b2_rx_extract_sys_str_from_note
  31.     end
  32.   end
  33. end

  34. #--------------------------------------------------------------------------
  35. # ★ システムワードの登録:魔法反射・魔反射無視
  36. #--------------------------------------------------------------------------
  37. module RPG
  38.   class BaseItem
  39.     alias rx_rgss2b2_rx_extract_sys_str_from_note rx_extract_sys_str_from_note
  40.     def rx_extract_sys_str_from_note
  41.       rx_get_sys = RX_T.get_system_word_in_note(@note, "魔法反射")
  42.       @@rx_copy_str += rx_get_sys
  43.       @note = @note.sub(rx_get_sys, "")
  44.       @note = @note.sub("\r\n", "")
  45.       @rx_sys_str = @@rx_copy_str
  46.       rx_get_sys = RX_T.get_system_word_in_note(@note, "魔反射無視")
  47.       @@rx_copy_str += rx_get_sys
  48.       @note = @note.sub(rx_get_sys, "")
  49.       @note = @note.sub("\r\n", "")
  50.       @rx_sys_str = @@rx_copy_str
  51.       # メソッドを呼び戻す
  52.       rx_rgss2b2_rx_extract_sys_str_from_note
  53.     end
  54.   end
  55. end

  56. #==============================================================================
  57. # ■ Game_Battler
  58. #------------------------------------------------------------------------------
  59. #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ
  60. # スのスーパークラスとして使用されます。
  61. #==============================================================================

  62. class Game_Battler
  63.   #--------------------------------------------------------------------------
  64.   # ● オブジェクト初期化
  65.   #--------------------------------------------------------------------------
  66.   alias rx_rgss2b2_initialize initialize
  67.   def initialize
  68.     # メソッドを呼び戻す
  69.     rx_rgss2b2_initialize
  70.     @rx_refrex = false  # ★ 魔法反射フラグ
  71.     @rx_refrect = false # ★ 魔法を反射されたフラグ
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ★ 魔法反射ステートフラグ
  75.   #--------------------------------------------------------------------------
  76.   def rx_refrex
  77.     return @rx_refrex
  78.   end
  79.   #--------------------------------------------------------------------------
  80.   # ★ 魔法を反射されたフラグ
  81.   #--------------------------------------------------------------------------
  82.   def rx_refrect
  83.     return @rx_refrect
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ★ 魔法を反射されたフラグ操作
  87.   #--------------------------------------------------------------------------
  88.   def rx_refrect=(flag)
  89.     @rx_refrect = flag
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ● ステートの付加
  93.   #     state_id : ステート ID
  94.   #--------------------------------------------------------------------------
  95.   alias rx_rgss2b2_add_state add_state  
  96.   def add_state(state_id)
  97.     # メソッドを呼び戻す
  98.     rx_rgss2b2_add_state(state_id)
  99.     # ★ システムワードに「魔法反射」が含まれているか
  100.     if RX_T.check_system_word_in_sys_str($data_states[state_id], "魔法反射")
  101.       @rx_refrex = true
  102.     end
  103.   end
  104.   #--------------------------------------------------------------------------
  105.   # ● ステートの解除
  106.   #     state_id : ステート ID
  107.   #--------------------------------------------------------------------------
  108.   alias rx_rgss2b2_remove_state remove_state  
  109.   def remove_state(state_id)
  110.     # メソッドを呼び戻す
  111.     rx_rgss2b2_remove_state(state_id)
  112.     # ★ システムワードに「魔法反射」が含まれているか
  113.     if RX_T.check_system_word_in_sys_str($data_states[state_id], "魔法反射")
  114.       @rx_refrex = false
  115.     end
  116.   end
  117.   #--------------------------------------------------------------------------
  118.   # ● スキルの効果適用
  119.   #     user  : スキルの使用者
  120.   #     skill : スキル
  121.   #--------------------------------------------------------------------------
  122.   alias rx_rgss2b2_skill_effect skill_effect
  123.   def skill_effect(user, skill)
  124.     # ★ 魔法系スキル(※)を使っているか、若しくはそれを使用中かのいずれかで
  125.     #   かつ、対象が魔法反射ステートなら(魔反射無視魔法を除く)
  126.     #  (※:精神関係度が 1 以上のスキル)
  127.     if (user.action.rx_magic_use? or user.rx_magic_use) and self.rx_refrex and
  128.       not RX_T.check_system_word_in_sys_str(skill, "魔反射無視")
  129.       # 魔法使用フラグをオン
  130.       user.rx_magic_use = true
  131.       # 魔法を跳ね返されたフラグをオン
  132.       user.rx_refrect = true
  133.       # スキルの効果適用(反射用)へ
  134.       return user.rx_refrect_skill_effect(self, skill)
  135.     end
  136.     # ★ 魔法系スキル(※)を使っているか、若しくはそれを使用中かのいずれかで
  137.     #   かつ、魔法反射系装備の対象に使用した場合(魔反射無視魔法を除く)
  138.     #  (※:精神関係度が 1 以上のスキル)
  139.     if (user.action.rx_magic_use? or user.rx_magic_use) and
  140.       RX_T.check_system_word_in_equip(self.rx_sys_str, "魔法反射") and
  141.       not RX_T.check_system_word_in_sys_str(skill, "魔反射無視")
  142.       # 魔法使用フラグをオン
  143.       user.rx_magic_use = true
  144.       # 魔法を跳ね返されたフラグをオン
  145.       user.rx_refrect = true
  146.       # スキルの効果適用(反射用)へ
  147.       return user.rx_refrect_skill_effect(self, skill)
  148.     end
  149.     user.rx_magic_use = false
  150.     user.rx_refrect = false
  151.     # メソッドを呼び戻す
  152.     rx_rgss2b2_skill_effect(user, skill)
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ★ スキルの効果適用(反射用)
  156.   #     user  : スキルの使用者
  157.   #     skill : スキル
  158.   #--------------------------------------------------------------------------
  159.   def rx_refrect_skill_effect(user, skill)
  160.     clear_action_results
  161.     unless skill_effective?(user, skill)
  162.       @skipped = true
  163.       return
  164.     end
  165.     if rand(100) >= calc_hit(user, skill)         # 命中判定
  166.       @missed = true
  167.       return
  168.     end
  169.     if rand(100) < calc_eva(user, skill)          # 回避判定
  170.       @evaded = true
  171.       return
  172.     end
  173.     make_obj_damage_value(user, skill)            # ダメージ計算
  174.     make_obj_absorb_effect(user, skill)           # 吸収効果計算
  175.     execute_damage(user)                          # ダメージ反映
  176.     if skill.physical_attack and @hp_damage == 0  # 物理ノーダメージ判定
  177.       return                                    
  178.     end
  179.     apply_state_changes(skill)                    # ステート変化
  180.   end
  181. end

  182. #==============================================================================
  183. # ■ Scene_Battle
  184. #------------------------------------------------------------------------------
  185. #  バトル画面の処理を行うクラスです。
  186. #==============================================================================

  187. class Scene_Battle < Scene_Base
  188.   #--------------------------------------------------------------------------
  189.   # ★ 魔法反射エフェクト
  190.   #--------------------------------------------------------------------------
  191.   def rx_refrex_effect
  192.     @message_window.add_instant_text(RX_T::RX_Mcounter_Comment)
  193.     Audio.se_play("Audio/SE/" + RX_T::RX_Mcounter_SE_Name, RX_T::RX_Mcounter_SE_Volume, RX_T::RX_Mcounter_SE_Pitch)
  194.     wait(20)
  195.   end
  196.   #--------------------------------------------------------------------------
  197.   # ● 戦闘行動の実行
  198.   #--------------------------------------------------------------------------
  199.   alias rx_rgss2b2_execute_action execute_action
  200.   def execute_action
  201.     # ★ 魔法使用および反射フラグを初期化
  202.     @active_battler.rx_refrect = false
  203.     @active_battler.rx_magic_use = false
  204.     # メソッドを呼び戻す
  205.     rx_rgss2b2_execute_action
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # ● 行動結果の表示
  209.   #     target : 対象者
  210.   #     obj    : スキルまたはアイテム
  211.   #--------------------------------------------------------------------------  
  212.   def display_action_effects(target, obj = nil)
  213.     # ★ 魔法を跳ね返されたフラグが立っていれば
  214.     if @active_battler.rx_refrect
  215.       # 対象を使用者に変換
  216.       target = nil
  217.       target = @active_battler
  218.     end
  219.     # ★ 魔法反射エフェクトさせるなら
  220.     if @active_battler.rx_refrect and not target.skipped
  221.       line_number = @message_window.line_number
  222.       wait(5)
  223.       # 反射エフェクト
  224.       rx_refrex_effect
  225.       display_critical(target, obj)
  226.       display_damage(target, obj)
  227.       display_state_changes(target, obj)
  228.       # 反射メッセージ用・メッセージ補正
  229.       if line_number + 1 == @message_window.line_number
  230.         display_failure(target, obj) unless target.states_active?
  231.       end
  232.       if line_number != @message_window.line_number
  233.         wait(30)
  234.       end
  235.       @message_window.back_to(line_number)
  236.     end
  237.     # ★ 魔法を跳ね返されたフラグが立っていれば終了
  238.     return if @active_battler.rx_refrect
  239.     unless target.skipped
  240.       line_number = @message_window.line_number
  241.       wait(5)
  242.       display_critical(target, obj)
  243.       display_damage(target, obj)
  244.       display_state_changes(target, obj)
  245.       if line_number == @message_window.line_number
  246.         display_failure(target, obj) unless target.states_active?
  247.       end
  248.       if line_number != @message_window.line_number
  249.         wait(30)
  250.       end
  251.       @message_window.back_to(line_number)
  252.     end
  253.   end
  254. end
复制代码

作者: 冰风情火    时间: 2008-2-12 19:24
另外脚本介绍里写着:
08/1/9 不具合を修正するため、スクリプトを大幅変更しました→更に修正(9:20)。
08/1/8 装備物に魔法反射機能を付けられるようにしました。
各種不具合を修正しました。
修正しきれていない部分がございましたら「不具合報告スレ」にて詳細を説明お願いします。
08/1/5 一度魔法反射した対象にアイテムで攻撃すると使用者がダメージを受ける不具合を修正しました。
魔法反射ステートにかかっている相手が何かのステート変化にかかると
魔法反射が無効化される不具合を修正しました。
08/1/5 魔法反射無視スキルに対応、これに合わせてベーススクリプトAが必要になりました。
08/1/1 各種不具合を修正。変な仕様を全て解消しました。

ベーススクリプトA(Ver1.05)以降専用スクリプトです。
Ver1.05より古いベーススクリプト(A)をお持ちの方は、恐れ入りますが最新版に差し替えてください。

魔法系のスキル(※)を反射するステートや装備物を作成できるスクリプトです。
更に、魔法反射無視スキルを作成できます(詳しくは後述)。

効果不確定スキルを導入している場合は
そのタイプのスキルを魔法反射無視スキルに設定してください(不具合回避のため)。
また、スキル追加発動装備を導入している場合は
そのスクリプトよりも下のセクションに導入してください。
※:精神関係度が1以上のスキルを指します。

【ステートの設定】
魔法反射用のステートを作成し、メモ欄に魔法反射と記述すれば完成です。
ご注意:
RPGツクールVXのステート解除タイミングの仕様上、スキルを唱えたターンの間だけ有効なスキルの作成はオススメできません。
詳細はこちらをご参照ください。

【スクリプトでの初期設定】
魔法反射した時のナレーションと魔法反射効果音、音量、ピッチを、スクリプトの15~18行目で変更できます。

RX_Mcounter_Comment(デフォルト:魔法障壁が魔法を跳ね返した!)
魔法反射した時のナレーションを設定できます。

RX_Mcounter_SE_Name(デフォルト:flash1)
魔法反射効果音を設定できます。

RX_Mcounter_SE_Volume(デフォルト:80)
魔法反射効果音の音量を設定できます。

RX_Mcounter_SE_Pitch(デフォルト:100)
魔法反射効果音のピッチを設定できます。

【魔法反射無視スキルの設定】
スキルのメモ欄に魔反射無視(「魔法反射」無視、ではない事に注意)のシステムワードを入力してください。

【魔法反射装備の設定】
各種装備物のメモ欄に魔法反射のシステムワードを入力してください。
※いずれもRX-SYSを含ませる必要はありません。
上記システムワードはメモ欄のどこかに含まれていればOKです。
作者: 雪流星    时间: 2008-2-12 19:38
能不能把来源地址贴上呢?
作者: LiSteve    时间: 2008-2-12 19:41
以下引用snstar2006于2008-2-12 11:38:26的发言:

能不能把来源地址贴上呢?


在這邊
http://mdc-light.jpn.org/TYPE74RX-T/rgss2b2.html
作者: 雪流星    时间: 2008-2-12 19:54
似乎不难
汉化工作我接了
作者: LiSteve    时间: 2008-2-12 20:01
那我簡單的說下使用方法
[魔法反射]
在裝備或者狀態的註解欄加上魔法反射
[魔法反射無視]
在技能的註解欄加上魔反射無視

順帶一提
作者有說如果有改造過內容,要跟他討論過才能自行發佈
單純漢化不涉及改造是不在此限就是了
作者: 冰风情火    时间: 2008-2-12 20:02
里面还有相当多别的东西。不过看不懂就没仔细研究过了。
作者: LiSteve    时间: 2008-2-12 20:18
說明有提到
ベーススクリプトA(Ver1.05)以降専用スクリプトです。
Ver1.05より古いベーススクリプト(A)をお持ちの方は、恐れ入りますが最新版に差し替えてください。

不知道是不是必須用到

這個腳本在這邊
http://mdc-light.jpn.org/TYPE74RX-T/rgss2/rx2_base_script_for_special_effect.txt
作者: 雪流星    时间: 2008-2-12 21:16
刚才看了看
几乎不用汉化
只要把上面的脚本贴进脚本编辑器
再把紫色的字串修改成自己想要的文字就好了
几乎那些字串都是中文
除了第15~18行

  1.   RX_Mcounter_Comment = "魔法护镜将魔法反弹了回去!"    # 反射魔法时的信息
  2.   RX_Mcounter_SE_Name = "flash1"                        # 反射魔法时音效名称
  3.   RX_Mcounter_SE_Volume = 80                            # 反射魔法时音效音量
  4.   RX_Mcounter_SE_Pitch = 100                            # 反射魔法时音效节拍
复制代码


对了,此脚本必须贴在以下脚本的下面,否则会出错:

  1. #
  2. #    特殊効果判定用ベーススクリプトVer1.10(RGSS2)
  3. #  (C)2007-2008 TYPE74RX-T
  4. #

  5. #==============================================================================
  6. # ■ module Kernel(機能拡張)
  7. #   (Ver1.09より実装)
  8. #     ★ rx_delete(array)
  9. #   配列で指定した要素を全て取り除く
  10. #     ★ rx_eqaror(array)
  11. #   配列で指定した要素のうちのいずれかに一致しているか
  12. #     ★ rx_eqarand(array)
  13. #   配列で指定した要素のうちのどれにも一致しているか
  14. #     ★ rx_atob(a, b)
  15. #   整数値がaからbまでの範囲内であるか
  16. #==============================================================================

  17. module Kernel
  18.   #--------------------------------------------------------------------------
  19.   # ★ 配列で指定した要素を全て取り除く
  20.   #--------------------------------------------------------------------------
  21.   def rx_delete(array)
  22.     for i in 0...array.size
  23.       self.delete(array[i])
  24.     end
  25.   end
  26.   #--------------------------------------------------------------------------
  27.   # ★ 配列で指定した要素のうちのいずれかに一致しているか
  28.   #--------------------------------------------------------------------------
  29.   def rx_eqaror(array)
  30.     result = false
  31.     for i in 0...array.size
  32.       if self == array[i]
  33.         result = true
  34.         break
  35.       end
  36.     end
  37.     return result
  38.   end
  39.   #--------------------------------------------------------------------------
  40.   # ★ 配列で指定した要素のうちのどれにも一致しているか
  41.   #--------------------------------------------------------------------------
  42.   def rx_eqarand(array)
  43.     result = true
  44.     for i in 0...array.size
  45.       if self != array[i]
  46.         result = false
  47.         break
  48.       end
  49.     end
  50.     return result
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ★ 整数値がaからbまでの範囲内であるか
  54.   #--------------------------------------------------------------------------
  55.   def rx_atob(a, b)
  56.     return (self >= a and self <= b)
  57.   end
  58. end

  59. #==============================================================================
  60. # ★ RX_T
  61. #------------------------------------------------------------------------------
  62. #  素材用汎用モジュールです。
  63. #==============================================================================

  64. module RX_T
  65.   #--------------------------------------------------------------------------
  66.   # ● 装備用システムワードに指定文字列が含まれているか
  67.   #--------------------------------------------------------------------------
  68.   def self.check_system_word_in_equip(sys_str, string)
  69.     return sys_str.include?(string)
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 装備用システムワードに指定文字列が含まれていれば
  73.   #   それに付随する数値を抽出
  74.   #    obj : スキル、アイテム、武器、防具 string : 指定文字列
  75.   #--------------------------------------------------------------------------
  76.   def self.get_numeric_of_system_word_in_equip(sys_str, string)
  77.     if sys_str.include?(string)
  78.       # 最後に指定のシステムワードが書かれた場所以降の文字列を取得
  79.       words_loc = sys_str.rindex(string)  # 文字位置取得
  80.       # 文字列取得(文字位置が 1 番目以上なら)
  81.       new_words = sys_str[words_loc, sys_str.length - 1] if words_loc > 0
  82.       # 数字文字列を取得(文字位置によって処理が異なる)
  83.       param = new_words.scan(/[-10-9]+/) if words_loc > 0
  84.       param = sys_str.scan(/[-10-9]+/) if words_loc < 1
  85.       numeric = param[0].to_i
  86.     else
  87.       numeric = 0
  88.     end
  89.     return numeric
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ● 装備用システムワードに指定文字列が含まれていれば
  93.   #   それに付随する数値群を配列化して返す
  94.   #    obj : スキル、アイテム、武器、防具 string : 指定文字列
  95.   #--------------------------------------------------------------------------
  96.   def self.get_array_of_system_word_in_equip(sys_str, string)
  97.     elements = []
  98.     if sys_str.include?(string)
  99.       # 最後に指定のシステムワードが書かれた場所以降の文字列を取得
  100.       words_loc = sys_str.rindex(string) + string.size # 文字位置取得
  101.       # 文字列取得
  102.       new_words = sys_str[words_loc, sys_str.length - 1]
  103.       # 数字文字列を配列化して取得
  104.       param = new_words.split(/\s*,\s*/)
  105.       numeric = param[0].to_i
  106.       # 数値を配列に入れる
  107.       for i in 0...param.size
  108.         numeric = param[i].to_i
  109.         if numeric > 0
  110.           elements.push(numeric)
  111.         else
  112.           break
  113.         end
  114.       end
  115.     end
  116.     return elements
  117.   end
  118.   #--------------------------------------------------------------------------
  119.   # ● システムワードに指定文字列が含まれているか
  120.   #--------------------------------------------------------------------------
  121.   def self.check_system_word_in_sys_str(obj, string)
  122.     return obj.rx_sys_str.include?(string)
  123.   end
  124.   #--------------------------------------------------------------------------
  125.   # ● システムワード格納変数に指定文字列が含まれていれば
  126.   #   それに付随する数値を抽出
  127.   #    obj : スキル、アイテム、武器、防具 string : 指定文字列
  128.   #--------------------------------------------------------------------------
  129.   def self.get_numeric_of_system_word_in_sys_str(obj, string)
  130.     # 素手に対応
  131.     if obj == nil
  132.       return 0
  133.     end
  134.     if obj.rx_sys_str.include?(string)
  135.       # 最後に指定のシステムワードが書かれた場所以降の文字列を取得
  136.       words_loc = obj.rx_sys_str.rindex(string)  # 文字位置取得
  137.       # 文字列取得(文字位置が 1 番目以上なら)
  138.       new_words = obj.rx_sys_str[words_loc, obj.rx_sys_str.length - 1] if words_loc > 0
  139.       # 数字文字列を取得(文字位置によって処理が異なる)
  140.       param = new_words.scan(/[-10-9]+/) if words_loc > 0
  141.       param = obj.rx_sys_str.scan(/[-10-9]+/) if words_loc < 1
  142.       numeric = param[0].to_i
  143.     else
  144.       numeric = 0
  145.     end
  146.     return numeric
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● システムワード格納変数に指定文字列が含まれていれば
  150.   #   それに付随する数値群を配列化して返す
  151.   #    obj : スキル、アイテム、武器、防具 string : 指定文字列
  152.   #--------------------------------------------------------------------------
  153.   def self.get_array_of_system_word_in_sys_str(obj, string)
  154.     elements = []
  155.     # 素手に対応
  156.     if obj == nil
  157.       return elements
  158.     end
  159.     if obj.rx_sys_str.include?(string)
  160.       # 最後に指定のシステムワードが書かれた場所以降の文字列を取得
  161.       words_loc = obj.rx_sys_str.rindex(string) + string.size # 文字位置取得
  162.       # 文字列取得
  163.       new_words = obj.rx_sys_str[words_loc, obj.rx_sys_str.length - 1]
  164.       # 数字文字列を配列化して取得
  165.       param = new_words.split(/\s*,\s*/)
  166.       numeric = param[0].to_i
  167.       # 数値を配列に入れる
  168.       for i in 0...param.size
  169.         numeric = param[i].to_i
  170.         if numeric > 0
  171.           elements.push(numeric)
  172.         else
  173.           break
  174.         end
  175.       end
  176.     end
  177.     return elements
  178.   end
  179.   #--------------------------------------------------------------------------
  180.   # ● メモにシステムワードが含まれているか
  181.   #--------------------------------------------------------------------------
  182.   def self.check_system_word_in_note(obj, string)
  183.     return obj.note.include?(string)
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   # ● メモにシステムワードが含まれていれば、それとそれに付随する数値を返す
  187.   #    note : メモ string : 指定文字列 option : 数値も返すか否か
  188.   #--------------------------------------------------------------------------
  189.   def self.get_system_word_in_note(note, string, option = false)
  190.     if note.include?(string)
  191.       # 最後に指定のシステムワードが書かれた場所以降の文字列を取得
  192.       words_loc = note.rindex(string)  # 文字位置取得
  193.       # 文字列取得(文字位置が 1 番目以上なら)
  194.       new_words = note[words_loc, note.length - 1] if words_loc > 0
  195.       # 数字文字列を取得(文字位置によって処理が異なる)
  196.       param = new_words.scan(/[-10-9]+/) if words_loc > 0
  197.       param = note.scan(/[-10-9]+/) if words_loc < 1
  198.       # 検出された指定の文字列(と数値)を返す
  199.       return string + param[0] if param != [] and option
  200.       return string if param == [] or not option
  201.     end
  202.     return ""
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● メモにシステムワードが含まれていれば
  206.   #  それとそれに付随する配列用の数値を返す
  207.   #    note : メモ string : 指定文字列 option : 数値も返すか否か
  208.   #--------------------------------------------------------------------------
  209.   def self.get_system_word_in_note2(note, string)
  210.     str = ""
  211.     if note.include?(string)
  212.       # 最後に指定のシステムワードが書かれた場所以降の文字列を取得
  213.       words_loc = note.rindex(string) + string.size # 文字位置取得
  214.       # 文字列取得
  215.       new_words = note[words_loc, note.length - 1]
  216.       # 数字文字列を取得(文字位置によって処理が異なる)
  217.       param = new_words.split(/\s*,\s*/)
  218.       for i in 0...param.size
  219.         numeric = param[i].to_i
  220.         if numeric > 0
  221.           str += param[i] + ","
  222.         else
  223.           break
  224.         end
  225.       end
  226.       str = string + str
  227.     end
  228.     return str
  229.   end
  230. end

  231. #==============================================================================
  232. # ● RPG::BaseItem
  233. #------------------------------------------------------------------------------
  234. #  スキル、アイテム、武器、防具のスーパークラスです。
  235. #==============================================================================

  236. module RPG
  237.   class BaseItem
  238.     @@rx_copy_str = ""  #コピー用変数
  239.     alias rx_rgss_rxsys_initialize initialize
  240.     def initialize
  241.       rx_rgss_rxsys_initialize
  242.       # ★ システムワード用文字列変数(メモから抽出)
  243.       @rx_sys_str = ""
  244.     end
  245.     #--------------------------------------------------------------------------
  246.     # ★ メモ(システムワードが空ならメモから抽出)
  247.     #--------------------------------------------------------------------------
  248.     def note
  249.       rx_extract_sys_str_from_note if @rx_sys_str == "" or @rx_sys_str == nil
  250.       return @note
  251.     end
  252.     #--------------------------------------------------------------------------
  253.     # ★ システム用文字列変数(システムワードが空ならメモから抽出)
  254.     #--------------------------------------------------------------------------
  255.     def rx_sys_str
  256.       rx_extract_sys_str_from_note if @rx_sys_str == "" or @rx_sys_str == nil
  257.       return @rx_sys_str
  258.     end
  259.     #--------------------------------------------------------------------------
  260.     # ★ メモからシステム用文字列を排除したものをメモとして返す
  261.     #--------------------------------------------------------------------------
  262.     def rx_extract_sys_str_from_note
  263.       rx_copy_str = @@rx_copy_str
  264.       @@rx_copy_str = ""
  265.       return rx_copy_str
  266.     end
  267.   end
  268. end

  269. #==============================================================================
  270. # ● RPG::Actor
  271. #------------------------------------------------------------------------------
  272. #  アクターのデータクラスです。
  273. #==============================================================================
  274. module RPG
  275.   class Actor
  276.     alias rx_rgss_rxsys_initialize initialize
  277.     def initialize
  278.       rx_rgss_rxsys_initialize
  279.       @rx_sys_str = ""
  280.     end
  281.     #--------------------------------------------------------------------------
  282.     # ★ システム用文字列変数
  283.     #--------------------------------------------------------------------------
  284.     def rx_sys_str
  285.       return @rx_sys_str
  286.     end
  287.     #--------------------------------------------------------------------------
  288.     # ★ システム用文字列変数
  289.     #--------------------------------------------------------------------------
  290.     def rx_sys_str=(str)
  291.       @rx_sys_str = str
  292.     end
  293.   end
  294. end


  295. #==============================================================================
  296. # ● RPG::Class
  297. #------------------------------------------------------------------------------
  298. #  職業のデータクラスです。
  299. #==============================================================================
  300. module RPG
  301.   class Class
  302.     alias rx_rgss_rxsys_initialize initialize
  303.     def initialize
  304.       rx_rgss_rxsys_initialize
  305.       @rx_sys_str = ""
  306.     end
  307.     #--------------------------------------------------------------------------
  308.     # ★ システム用文字列変数
  309.     #--------------------------------------------------------------------------
  310.     def rx_sys_str
  311.       return @rx_sys_str
  312.     end
  313.     #--------------------------------------------------------------------------
  314.     # ★ システム用文字列変数
  315.     #--------------------------------------------------------------------------
  316.     def rx_sys_str=(str)
  317.       @rx_sys_str = str
  318.     end
  319.   end
  320. end

  321. #==============================================================================
  322. # ● RPG::Troop
  323. #------------------------------------------------------------------------------
  324. #  敵グループのデータクラスです。
  325. #==============================================================================
  326. module RPG
  327.   class Troop
  328.     alias rx_rgss_rxsys_initialize initialize
  329.     def initialize
  330.       rx_rgss_rxsys_initialize
  331.       @rx_sys_str = ""
  332.     end
  333.     #--------------------------------------------------------------------------
  334.     # ★ システム用文字列変数
  335.     #--------------------------------------------------------------------------
  336.     def rx_sys_str
  337.       return @rx_sys_str
  338.     end
  339.     #--------------------------------------------------------------------------
  340.     # ★ システム用文字列変数
  341.     #--------------------------------------------------------------------------
  342.     def rx_sys_str=(str)
  343.       @rx_sys_str = str
  344.     end
  345.   end
  346. end

  347. #==============================================================================
  348. # ● RPG::Enemy
  349. #------------------------------------------------------------------------------
  350. #  敵キャラのデータクラスです。
  351. #==============================================================================

  352. module RPG
  353.   class Enemy
  354.     @@rx_copy_str = ""  #コピー用変数
  355.     alias rx_rgss_rxsys_initialize initialize
  356.     def initialize
  357.       rx_rgss_rxsys_initialize
  358.       # ★ システムワード用文字列変数(メモから抽出)
  359.       @rx_sys_str = ""
  360.     end
  361.     #--------------------------------------------------------------------------
  362.     # ★ メモ(システムワードが空ならメモから抽出)
  363.     #--------------------------------------------------------------------------
  364.     def note
  365.       rx_extract_sys_str_from_note if @rx_sys_str == "" or @rx_sys_str == nil
  366.       return @note
  367.     end
  368.     #--------------------------------------------------------------------------
  369.     # ★ システム用文字列変数(システムワードが空ならメモから抽出)
  370.     #--------------------------------------------------------------------------
  371.     def rx_sys_str
  372.       rx_extract_sys_str_from_note if @rx_sys_str == "" or @rx_sys_str == nil
  373.       return @rx_sys_str
  374.     end
  375.     #--------------------------------------------------------------------------
  376.     # ★ メモからシステム用文字列を排除したものをメモとして返す
  377.     #--------------------------------------------------------------------------
  378.     def rx_extract_sys_str_from_note
  379.       rx_copy_str = @@rx_copy_str
  380.       @@rx_copy_str = ""
  381.       return rx_copy_str
  382.     end
  383.   end
  384. end

  385. #==============================================================================
  386. # ● RPG::State
  387. #------------------------------------------------------------------------------
  388. #  敵キャラのデータクラスです。
  389. #==============================================================================

  390. module RPG
  391.   class State
  392.     @@rx_copy_str = ""  #コピー用変数
  393.     alias rx_rgss_rxsys_initialize initialize
  394.     def initialize
  395.       rx_rgss_rxsys_initialize
  396.       # ★ システムワード用文字列変数(メモから抽出)
  397.       @rx_sys_str = ""
  398.     end
  399.     #--------------------------------------------------------------------------
  400.     # ★ メモ(システムワードが空ならメモから抽出)
  401.     #--------------------------------------------------------------------------
  402.     def note
  403.       rx_extract_sys_str_from_note if @rx_sys_str == "" or @rx_sys_str == nil
  404.       return @note
  405.     end
  406.     #--------------------------------------------------------------------------
  407.     # ★ システム用文字列変数(システムワードが空ならメモから抽出)
  408.     #--------------------------------------------------------------------------
  409.     def rx_sys_str
  410.       rx_extract_sys_str_from_note if @rx_sys_str == "" or @rx_sys_str == nil
  411.       return @rx_sys_str
  412.     end
  413.     #--------------------------------------------------------------------------
  414.     # ★ メモからシステム用文字列を排除したものをメモとして返す
  415.     #--------------------------------------------------------------------------
  416.     def rx_extract_sys_str_from_note
  417.       rx_copy_str = @@rx_copy_str
  418.       @@rx_copy_str = ""
  419.       return rx_copy_str
  420.     end
  421.   end
  422. end

  423. #==============================================================================
  424. # ■ Game_Battler
  425. #------------------------------------------------------------------------------
  426. #  バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ
  427. # スのスーパークラスとして使用されます。
  428. #==============================================================================

  429. class Game_Battler
  430.   #--------------------------------------------------------------------------
  431.   # ● オブジェクト初期化
  432.   #--------------------------------------------------------------------------
  433.   alias rx_rgss2bs1_initialize initialize
  434.   def initialize
  435.     # メソッドを呼び戻す
  436.     rx_rgss2bs1_initialize
  437.     @rx_magic_use = false  # ★ 魔法使用フラグ
  438.   end
  439.   #--------------------------------------------------------------------------
  440.   # ★ 魔法使用フラグ
  441.   #--------------------------------------------------------------------------
  442.   def rx_magic_use
  443.     return @rx_magic_use
  444.   end
  445.   #--------------------------------------------------------------------------
  446.   # ★ 魔法使用フラグの操作
  447.   #--------------------------------------------------------------------------
  448.   def rx_magic_use=(use)
  449.     @rx_magic_use = use
  450.   end
  451.   #--------------------------------------------------------------------------
  452.   # ★ 武器を持っているかの判定
  453.   #--------------------------------------------------------------------------
  454.   def rx_weapon_equip?
  455.     return false unless self.actor?
  456.     return (self.weapon_id > 0 or (self.two_swords_style and self.armor1_id > 0))
  457.   end
  458.   #--------------------------------------------------------------------------
  459.   # ★ 武器で攻撃しているかの判定
  460.   #--------------------------------------------------------------------------
  461.   def rx_weapon_attack?
  462.     return false unless rx_weapon_equip?
  463.     return self.action.attack?
  464.   end
  465.   #--------------------------------------------------------------------------
  466.   # ★ 装備しているものに含まれているシステムワードを取得
  467.   #--------------------------------------------------------------------------
  468.   def rx_sys_str
  469.     return ""
  470.   end
  471. end

  472. #==============================================================================
  473. # ■ Game_Actor
  474. #------------------------------------------------------------------------------
  475. #  アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors)
  476. # の内部で使用され、Game_Party クラス ($game_party) からも参照されます。
  477. #==============================================================================

  478. class Game_Actor < Game_Battler
  479.   #--------------------------------------------------------------------------
  480.   # ● セットアップ
  481.   #     actor_id : アクター ID
  482.   #--------------------------------------------------------------------------
  483.   alias rx_rgss2bs1_setup setup
  484.   def setup(actor_id)
  485.     # メソッドを呼び戻す
  486.     rx_rgss2bs1_setup(actor_id)
  487.     # ★ 職業のシステムワードを初期化
  488.     format_class_rx_sys_str
  489.   end
  490.   #--------------------------------------------------------------------------
  491.   # ★ 職業のシステムワードを初期化
  492.   #--------------------------------------------------------------------------
  493.   def format_class_rx_sys_str
  494.     self.class.rx_sys_str = "" if self.class.rx_sys_str == nil
  495.   end
  496.   #--------------------------------------------------------------------------
  497.   # ★ 装備しているものに含まれているシステムワードを取得
  498.   #--------------------------------------------------------------------------
  499.   def rx_sys_str
  500.     sys_str = ""
  501.     sys_str += $data_weapons[@weapon_id].rx_sys_str if @weapon_id > 0
  502.     if self.two_swords_style
  503.       sys_str += $data_weapons[@armor1_id].rx_sys_str if @armor1_id > 0
  504.     else
  505.       sys_str += $data_armors[@armor1_id].rx_sys_str if @armor1_id > 0
  506.     end
  507.     sys_str += $data_armors[@armor2_id].rx_sys_str if @armor2_id > 0
  508.     sys_str += $data_armors[@armor3_id].rx_sys_str if @armor3_id > 0
  509.     sys_str += $data_armors[@armor4_id].rx_sys_str if @armor4_id > 0
  510.     return sys_str
  511.   end
  512. end

  513. #==============================================================================
  514. # ■ Game_Enemy
  515. #------------------------------------------------------------------------------
  516. #  敵キャラを扱うクラスです。このクラスは Game_Troop クラス ($game_troop) の
  517. # 内部で使用されます。
  518. #==============================================================================

  519. class Game_Enemy < Game_Battler
  520.   #--------------------------------------------------------------------------
  521.   # ★ 装備しているものに含まれているシステムワードを取得
  522.   #--------------------------------------------------------------------------
  523.   def rx_sys_str
  524.     return ""
  525.   end
  526. end

  527. #==============================================================================
  528. # ■ Game_BattleAction
  529. #------------------------------------------------------------------------------
  530. #  戦闘行動を扱うクラスです。このクラスは Game_Battler クラスの内部で使用され
  531. # ます。
  532. #==============================================================================

  533. class Game_BattleAction
  534.   #--------------------------------------------------------------------------
  535.   # ★ 魔法(精神関係度 1 以上)を使っているかの判定
  536.   #--------------------------------------------------------------------------
  537.   def rx_magic_use?
  538.     return (skill? and $data_skills[@skill_id].spi_f >= 1)
  539.   end
  540. end
复制代码


使用说明:
在装备的备注栏加上「魔法反射」(不带引号)
如此此装备就能反射敌人的魔法了

那麽怎麽分辨敌人是不是使用了魔法技能呢?
只要是技能的「精神关系度」大於0就算是魔法


[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 飞起一键盘    时间: 2008-2-12 23:49
强...啊 .... [LINE]1,#dddddd[/LINE]版主对此帖的评论:『3字内回复……注意版规……』,积分『-5』。这些被扣积分的一半会用于对本帖正确答案的悬赏。




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