设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1157|回复: 4
打印 上一主题 下一主题

[已经过期] 有没有办法实现复活甲

[复制链接]

Lv1.梦旅人

梦石
0
星屑
201
在线时间
20 小时
注册时间
2022-10-24
帖子
7
跳转到指定楼层
1
发表于 2022-10-26 17:38:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
设想是如果角色装备了指定的装备,那该角色在战斗中死亡时立刻完全恢复,同时失去这个装备。

Lv3.寻梦者

梦石
0
星屑
1985
在线时间
176 小时
注册时间
2022-6-24
帖子
176
2
发表于 2022-10-27 09:16:56 | 只看该作者
这个是日本的网站http://artificialprovidence.web.fc2.com/
里面找能力扩展,搜索 オートリザレクション特徴 就行
如果不会翻墙
那么这是脚本,怎么用可以翻译一下
  1. #==============================================================================
  2. # ■ RGSS3 オートリザレクション特徴 Ver2.04 by 星潟
  3. #------------------------------------------------------------------------------
  4. # 戦闘不能に陥った際、一定確率で自動回復する特徴を作成します。
  5. # 著しくゲームバランスを損ねる場合がありますので、ご利用は計画的に。
  6. # なお、イベントコマンドのHP増減やステート付与による戦闘不能では
  7. # 動作しないようにしています。
  8. #
  9. # また、自動蘇生効果発動時に破損する装備品や
  10. # 解除するステートを作成することもできます。
  11. # (特に素材を導入していない限りは、戦闘不能時にステートは自動消滅します。
  12. #   戦闘不能時にステートが解除されないような素材を導入されている場合のみ
  13. #   解除するステート設定は有効です)
  14. #==============================================================================
  15. # ★自動蘇生特徴設定例(アクター・装備品・ステート・エネミー用)
  16. #------------------------------------------------------------------------------
  17. # <自動蘇生:500,42,25>
  18. #
  19. # 戦闘不能になった際、アニメーションID42を再生しつつ
  20. # 25%の確率でHP500の状態で蘇生します。
  21. #------------------------------------------------------------------------------
  22. # <自動蘇生:self.mhp*3/4,0>
  23. #
  24. # 戦闘不能になった際、アニメーションは表示せず
  25. # 100%の確率でHPが最大HPの75%の状態で蘇生します。
  26. #==============================================================================
  27. # ★自動蘇生破損特徴設定例(装備品・ステート用)
  28. #------------------------------------------------------------------------------
  29. # <自動蘇生破損:75>
  30. #
  31. # この装備・ステートで自動蘇生が発動した際
  32. # 75%の確率で破壊/解除されます。
  33. #------------------------------------------------------------------------------
  34. # <自動蘇生破損:$game_variables[1]>
  35. #
  36. # この装備・ステートで自動蘇生が発動した際
  37. # 変数1の値分の確率で破壊/解除されます。
  38. #==============================================================================
  39. # ★自動蘇生無効設定例(アイテム・スキル用)
  40. #------------------------------------------------------------------------------
  41. # <自動蘇生無効>
  42. #
  43. # このアイテム・スキルで自動蘇生の条件を満たした場合は
  44. # 自動蘇生の効果は発動しない。
  45. #==============================================================================
  46. # Ver1.01
  47. # 自動蘇生を特徴化。
  48. # Ver2.00
  49. # 注釈を全面的に追加。
  50. # キャッシュ化による軽量化を実施。
  51. # HP回復量・発動確率にスクリプトによる計算を行えるように変更。
  52. # 装備・ステートに対し、自動蘇生発動時に破壊/解除される確率を
  53. # 指定できるように機能を拡張。
  54. # Ver2.01
  55. # アイテム・スキルで戦闘不能ステートが付与された場合と
  56. # 反撃で戦闘不能になった場合にも自動蘇生対象となるように修正。
  57. # また、受けても自動蘇生させないアイテム・スキルが作成可能に。
  58. # Ver2.03
  59. # アイテム・スキルで戦闘不能ステートが付与された場合については
  60. # 自動蘇生が発生しないようにする設定項目を追加しました。
  61. # Ver2.04
  62. # 戦闘中の行動であるならばなるべく対応するようにする設定を追加。
  63. # (鳥小屋.txt様のターン消費無しスキルを想定)
  64. #==============================================================================
  65. module A_Resurrection
  66.   
  67.   #死亡時自動蘇生の設定用キーワードを指定。
  68.   
  69.   WORD1    = "自動蘇生"
  70.   
  71.   #死亡時自動蘇生が発動した際の破壊/解除率設定用キーワードを指定。
  72.   
  73.   WORD2    = "自動蘇生破損"
  74.   
  75.   #自動蘇生無効スキル・アイテム設定用キーワードを指定。
  76.   #(イベント戦用)
  77.   
  78.   WORD3    = "自動蘇生無効"
  79.   
  80.   #ステート付与効果によって戦闘不能ステートが付与された場合は発動せず
  81.   #HPが0になることで戦闘不能になった場合のみ有効にするかを指定。
  82.   #true  …… HPが0になったことによる戦闘不能のみ
  83.   #false …… 戦闘不能ステート付与についても有効
  84.   
  85.   HP0_ONLY = false
  86.   
  87.   #自動回復させる場合にHP回復量を表示するか否かを指定。
  88.   #true …… 表示する false …… 表示しない
  89.   
  90.   RE_HPDIS = true
  91.   
  92.   #スリップダメージによる戦闘不能でも自動回復するか否かを指定。
  93.   #true …… する false …… しない
  94.   
  95.   SLIP_REC = true
  96.   
  97.   #戦闘中の行動によるものであればなるべく適用するようにするかを指定。
  98.   #鳥小屋.txt様のターン消費無しスキルのスクリプトを導入されている場合は
  99.   #trueを推奨。
  100.   
  101.   ACTFORCE = false
  102.   
  103.   #死亡時自動蘇生時に装備品が破壊された場合のキーワードを指定。
  104.   
  105.   TEXT = "%sは砕け散った!"
  106.   
  107.   #装備品が破壊された場合のSEを指定。
  108.   #指定順は[SE名,音量,ピッチ]。
  109.   
  110.   SE       = ["Crash",80,100]
  111.   
  112. end
  113. class Game_ActionResult
  114.   attr_accessor :a_resurrection
  115.   #--------------------------------------------------------------------------
  116.   # ダメージ値のクリア
  117.   #--------------------------------------------------------------------------
  118.   alias clear_damage_values_a_resurrection clear_damage_values
  119.   def clear_damage_values
  120.    
  121.     #本来の処理を実行。
  122.    
  123.     clear_damage_values_a_resurrection
  124.    
  125.     #自動蘇生データを初期化する。
  126.    
  127.     a_resurrection_clear
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # 自動蘇生データを初期化
  131.   #--------------------------------------------------------------------------
  132.   def a_resurrection_clear
  133.     @a_resurrection = [0,0]
  134.   end
  135. end
  136. module BattleManager
  137.   #--------------------------------------------------------------------------
  138.   # 蘇生可能タイミングかどうかを判定。
  139.   #--------------------------------------------------------------------------
  140.   def self.resurrection
  141.    
  142.     #ターン中、もしくはターン終了時はtrue、そうでない場合はfalse
  143.    
  144.     @phase == :turn or @phase == :turn_end or (A_Resurrection::ACTFORCE ? $game_party.a_resurrection : false)
  145.    
  146.   end
  147. end
  148. class Game_Party < Game_Unit
  149.   attr_accessor :a_resurrection
  150. end
  151. class Game_Battler < Game_BattlerBase
  152.   #--------------------------------------------------------------------------
  153.   # ステート付与
  154.   #--------------------------------------------------------------------------
  155.   alias add_state_a_resurrection add_state
  156.   def add_state(state_id)
  157.    
  158.     #ステートIDが死亡ステートであり
  159.     #蘇生可能なタイミングであり
  160.     #なおかつまだ死亡していない場合は分岐。
  161.    
  162.     if state_id == death_state_id && (A_Resurrection::HP0_ONLY ? self.hp == 0 : true) && BattleManager.resurrection && !state?(death_state_id)
  163.       
  164.       #自動蘇生データを取得。
  165.       
  166.       data = a_resurrection_check
  167.       
  168.       #本来の処理を実行。
  169.       
  170.       add_state_a_resurrection(state_id)
  171.       
  172.       #自動蘇生データのHP回復量が0以上の場合は行動結果に反映。
  173.       
  174.       @result.a_resurrection = data if data[0] > 0
  175.       
  176.     else
  177.       
  178.       #本来の処理を実行。
  179.       
  180.       add_state_a_resurrection(state_id)
  181.       
  182.     end
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # 自動蘇生データ生成
  186.   #--------------------------------------------------------------------------
  187.   def a_resurrection_check
  188.    
  189.     #既に戦闘不能状態の場合はデフォルトの配列を返す。
  190.    
  191.     return [0,0] if self.state?(death_state_id)
  192.    
  193.     #特徴別に判定。
  194.    
  195.     feature_objects.each {|f| a1 = f.a_resurrection
  196.    
  197.     #特徴の自動蘇生データの配列から発動率を計算する。
  198.    
  199.     a1.each {|a2| next unless eval(a2[2]) > rand(100)
  200.    
  201.     #HP回復量を計算。
  202.    
  203.     data = eval(a2[0]).to_i
  204.    
  205.     #HP回復量が0以上の場合のみ続行。
  206.    
  207.     next unless data > 0
  208.    
  209.     #HP回復量、アニメーションID、特徴データを返す。
  210.    
  211.     return [data, a2[1],f]}}
  212.    
  213.     #デフォルトの配列を返す。
  214.    
  215.     [0,0]
  216.    
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # 自動蘇生データ
  220.   #--------------------------------------------------------------------------
  221.   def a_resurrection
  222.    
  223.     #自動蘇生データを返す。
  224.    
  225.     @result.a_resurrection
  226.    
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # ターン終了
  230.   #--------------------------------------------------------------------------
  231.   alias regenerate_hp_a_resurrection regenerate_hp
  232.   def regenerate_hp
  233.    
  234.     #スリップダメージによる死亡からの自動蘇生を行う場合
  235.     #自動蘇生データを取得し、そうでない場合はデフォルトの配列を返す。
  236.    
  237.     @result.a_resurrection = A_Resurrection::SLIP_REC ? a_resurrection_check : [0,0]
  238.    
  239.     #本来の処理を実行。
  240.    
  241.     regenerate_hp_a_resurrection
  242.    
  243.     #本来の処理を行った上でHPが0でないか死亡していない場合は
  244.     #デフォルトの配列を返す。
  245.    
  246.     @result.a_resurrection = [0,0] if self.hp != 0 or !state?(death_state_id)
  247.    
  248.   end
  249.   #--------------------------------------------------------------------------
  250.   # 破損率確率の計算
  251.   #--------------------------------------------------------------------------
  252.   def a_r_break_rate(f)
  253.     eval(f.a_r_break_rate)
  254.   end
  255. end
  256. class Scene_Battle < Scene_Base
  257.   #--------------------------------------------------------------------------
  258.   # スキル/アイテムの効果を適用
  259.   #--------------------------------------------------------------------------
  260.   alias apply_item_effects_a_resurrection apply_item_effects
  261.   def apply_item_effects(target, item)
  262.    
  263.     #本来の処理を実行。
  264.    
  265.     $game_party.a_resurrection = true if A_Resurrection::ACTFORCE
  266.    
  267.     apply_item_effects_a_resurrection(target, item)
  268.    
  269.     $game_party.a_resurrection = nil if A_Resurrection::ACTFORCE
  270.    
  271.     #自動蘇生を実行。
  272.    
  273.     execute_a_resurrection(target,item)
  274.    
  275.   end
  276.   #--------------------------------------------------------------------------
  277.   # 反撃の発動
  278.   #--------------------------------------------------------------------------
  279.   alias invoke_counter_attack_a_resurrection invoke_counter_attack
  280.   def invoke_counter_attack(target, item)
  281.    
  282.     #本来の処理を実行。
  283.    
  284.     $game_party.a_resurrection = true if A_Resurrection::ACTFORCE
  285.    
  286.     invoke_counter_attack_a_resurrection(target, item)
  287.    
  288.     $game_party.a_resurrection = nil if A_Resurrection::ACTFORCE
  289.    
  290.     #自動蘇生を実行。
  291.    
  292.     execute_a_resurrection(@subject,item)
  293.    
  294.   end
  295.   #--------------------------------------------------------------------------
  296.   # 自動蘇生の発動
  297.   #--------------------------------------------------------------------------
  298.   def execute_a_resurrection(target,item = nil)
  299.    
  300.     #自動蘇生データを取得。
  301.    
  302.     data = target.a_resurrection
  303.    
  304.     #自動蘇生禁止スキルの場合は処理を中断。
  305.    
  306.     return if item && item.anti_a_resurrection
  307.    
  308.     #HP回復量が0より大きい場合は処理を続行。
  309.    
  310.     return if data[0] <= 0 or !target.state?(target.death_state_id)
  311.    
  312.     #ログウィンドウをクリア。
  313.    
  314.     @log_window.clear
  315.    
  316.     #指定したアニメーションを再生。ID0の場合は再生しない。
  317.    
  318.     show_animation([target], data[1]) if data[1] > 0
  319.    
  320.     #対象のHPを回復。
  321.    
  322.     target.hp = data[0]
  323.    
  324.     #ステータスウィンドウの更新。
  325.    
  326.     refresh_status
  327.    
  328.     #自動蘇生を表示。
  329.    
  330.     @log_window.display_a_resurrection(target)
  331.    
  332.     #自動蘇生による破損の表示。
  333.    
  334.     @log_window.display_a_r_break(target, data[2])
  335.    
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ターン終了
  339.   #--------------------------------------------------------------------------
  340.   alias turn_end_a_resurrection turn_end
  341.   def turn_end
  342.    
  343.     #スリップダメージによる死亡からの蘇生フラグを取得。
  344.    
  345.     @te_a_resurrection = A_Resurrection::SLIP_REC
  346.    
  347.     #本来の処理を実行。
  348.    
  349.     turn_end_a_resurrection
  350.    
  351.     #スリップダメージによる死亡からの蘇生フラグを消去。
  352.    
  353.     @te_a_resurrection = nil
  354.    
  355.   end
  356.   #--------------------------------------------------------------------------
  357.   # イベント処理
  358.   #--------------------------------------------------------------------------
  359.   alias process_event_te_a_resurrection process_event
  360.   def process_event
  361.    
  362.     #スリップダメージによる死亡からの蘇生フラグが有効な場合
  363.     #ここで蘇生処理を実行する。
  364.    
  365.     te_a_resurrection_execute if @te_a_resurrection
  366.     process_event_te_a_resurrection
  367.   end
  368.   #--------------------------------------------------------------------------
  369.   # イベント前にスリップダメージによる自動蘇生演出
  370.   #--------------------------------------------------------------------------
  371.   def te_a_resurrection_execute
  372.    
  373.     #全ての戦闘メンバー別に処理。
  374.    
  375.     all_battle_members.each do |battler|
  376.       
  377.       #自動蘇生のデータを取得。
  378.       
  379.       data = battler.result.a_resurrection
  380.       
  381.       #自動蘇生のHP回復量が0より大きい場合
  382.       
  383.       if data[0] > 0
  384.         
  385.         #ログウィンドウをクリア。
  386.         
  387.         @log_window.clear
  388.         
  389.         #指定したアニメーションを再生。ID0の場合は再生しない。
  390.         
  391.         show_animation([battler], data[1]) if data[1] > 0
  392.         
  393.         #対象のHPを回復。
  394.         
  395.         battler.hp = data[0]
  396.         
  397.         #ステータスウィンドウの更新。
  398.         
  399.         refresh_status
  400.         
  401.         #自動蘇生の表示。
  402.         
  403.         @log_window.display_a_resurrection(battler)
  404.         
  405.         #ログウィンドウのクリア。
  406.         
  407.         @log_window.wait_and_clear
  408.         
  409.         #自動蘇生による破損の表示。
  410.         
  411.         @log_window.display_a_r_break(battler,data[2])
  412.         
  413.       end
  414.     end
  415.   end
  416. end
  417. class Window_BattleLog < Window_Selectable
  418.   #--------------------------------------------------------------------------
  419.   # 自動蘇生時のHP回復表示
  420.   #--------------------------------------------------------------------------
  421.   def a_resurrection_hp_recovery(target)
  422.    
  423.     #回復ではなくダメージである場合や
  424.     #回復量を表示しない設定である場合は処理しない。
  425.    
  426.     return unless target.result.hp_damage > 0 or A_Resurrection::RE_HPDIS
  427.    
  428.     #回復SEを実行。
  429.    
  430.     Sound.play_recovery
  431.    
  432.     #回復メッセージを表示。
  433.    
  434.     add_text(target.result.hp_damage_text)
  435.    
  436.     #ウェイトを実行。
  437.    
  438.     wait
  439.    
  440.   end
  441.   #--------------------------------------------------------------------------
  442.   # 自動蘇生の表示
  443.   #--------------------------------------------------------------------------
  444.   def display_a_resurrection(target)
  445.    
  446.     #結果を書き換える。
  447.    
  448.     target.result.used = true
  449.     target.result.critical = false
  450.     target.result.success = true
  451.     target.result.hp_damage = -target.result.a_resurrection[0]
  452.    
  453.     #死亡ステートデータを取得。
  454.    
  455.     state = $data_states[target.death_state_id]
  456.    
  457.     #最終行を取得。
  458.    
  459.     last_line_number = line_number
  460.    
  461.     #自動蘇生時のHP回復表示。
  462.    
  463.     a_resurrection_hp_recovery(target)
  464.    
  465.     #戦闘不能ステート解除メッセージを表示。
  466.    
  467.     add_text(target.name + state.message4) unless state.message4.empty?
  468.    
  469.     #ウェイトを実行。
  470.    
  471.     wait if line_number > last_line_number
  472.    
  473.     #行を戻す。
  474.    
  475.     back_to(last_line_number)
  476.    
  477.   end
  478.   #--------------------------------------------------------------------------
  479.   # 自動蘇生破損の表示
  480.   #--------------------------------------------------------------------------
  481.   def display_a_r_break(target, feature)
  482.    
  483.     #該当する特徴の破損判定を実行。
  484.    
  485.     return unless target.a_r_break_rate(feature) > rand(100)
  486.    
  487.     #最終行を取得。
  488.    
  489.     last_line_number = line_number
  490.    
  491.     #特徴が装備品である場合
  492.    
  493.     if feature.is_a?(RPG::EquipItem)
  494.       
  495.       #なんらかの原因で既に装備解除されている状況を考え
  496.       #装備品別に自動蘇生に用いた装備品を装備しているか否かを判定。
  497.       
  498.       return unless target.equips.include?(feature)
  499.       
  500.       #ウェイトを実行。
  501.       
  502.       wait
  503.       
  504.       #該当する装備を破棄。
  505.       
  506.       target.discard_equip(feature)
  507.       SceneManager.scene.refresh_status if $game_party.in_battle
  508.       
  509.       #SEの配列を用意。
  510.       
  511.       array = A_Resurrection::SE
  512.       
  513.       #SEを演奏。
  514.       
  515.       RPG::SE.new(array[0],array[1],array[2]).play
  516.       
  517.       #設定に応じてメッセージを表示。
  518.       
  519.       add_text(sprintf(A_Resurrection::TEXT,feature.name)) unless A_Resurrection::TEXT.empty?
  520.       
  521.       #ウェイトを実行。
  522.       
  523.       wait
  524.       
  525.       #行を戻す。
  526.       
  527.       back_to(last_line_number)
  528.       
  529.     #対象がステートである場合
  530.       
  531.     elsif feature.is_a?(RPG::State)
  532.       
  533.       #そのステートが付与されていない場合は飛ばす。
  534.       
  535.       return unless target.state?(feature.id)
  536.       
  537.       #ウェイトを実行。
  538.       
  539.       wait
  540.       
  541.       #該当するステートを解除。
  542.       
  543.       target.remove_state(feature.id)
  544.       SceneManager.scene.refresh_status if $game_party.in_battle
  545.       
  546.       #ステート解除メッセージを表示。
  547.       
  548.       add_text(target.name + feature.message4) unless feature.message4.empty?
  549.       
  550.       #ウェイトを実行。
  551.       
  552.       wait
  553.       
  554.       #行を戻す。
  555.       
  556.       back_to(last_line_number)
  557.       
  558.     end
  559.   end
  560. end
  561. class RPG::BaseItem
  562.   #--------------------------------------------------------------------------
  563.   # 自動蘇生データ
  564.   #--------------------------------------------------------------------------
  565.   def a_resurrection
  566.    
  567.     #キャッシュが存在する場合はキャッシュを返す。
  568.    
  569.     @a_resurrection ||= create_a_resurrection
  570.    
  571.   end
  572.   def create_a_resurrection
  573.    
  574.     #配列を作成。
  575.    
  576.     r = []
  577.    
  578.     #メモ欄からデータを取得する。
  579.    
  580.     note.each_line {|l|
  581.    
  582.     #正常なデータを取得できた場合はそのデータを分解する。
  583.    
  584.     if /<#{A_Resurrection::WORD1}[::](\S+)>/ =~ l
  585.    
  586.       a = $1.to_s.split(/\s*,\s*/)
  587.       
  588.       #要素数が決定的に足りない場合は飛ばす。
  589.       
  590.       next if a.size < 2
  591.       
  592.       #要素が1足りない場合は確率の省略とみなし、文字列の100を代入。
  593.       
  594.       a.push("100") if a.size < 3
  595.       
  596.       #アニメーションIDは整数とする。
  597.       
  598.       a[1] = a[1].to_i
  599.       
  600.       #配列にデータを追加。
  601.       
  602.       r.push(a)
  603.    
  604.     end
  605.    
  606.     }
  607.    
  608.     #データを返す。
  609.    
  610.     r
  611.    
  612.   end
  613.   #--------------------------------------------------------------------------
  614.   # 自動蘇生時破損確率
  615.   #--------------------------------------------------------------------------
  616.   def a_r_break_rate
  617.    
  618.     #キャッシュが存在する場合はキャッシュを返す。
  619.    
  620.     @a_r_break ||= /<#{A_Resurrection::WORD2}[::](\S+)>/ =~ note ? $1.to_s : "0"
  621.    
  622.   end
  623. end
  624. class RPG::UsableItem < RPG::BaseItem
  625.   #--------------------------------------------------------------------------
  626.   # 自動蘇生禁止アイテム
  627.   #--------------------------------------------------------------------------
  628.   def anti_a_resurrection
  629.     (@anti_a_resurrection ||= /<#{A_Resurrection::WORD3}>/ =~ note ? 1 : 0) == 1
  630.   end
  631. end
复制代码
在尝试做游戏了,但还是个菜狗(结果现在编程,音乐和剧情设计没开始学,画画也暂时没时间学了(;д;))

(个人精神状况不是很好,有时会说出一些奇怪且根本没法理解意思的话,直接无视就好,如果说出的话不小心冒犯到你,我会在精神状况良好时和你道歉的(`・ω・´)(不过一般在感觉到不适时会直接下线,请勿过于担心))
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
201
在线时间
20 小时
注册时间
2022-10-24
帖子
7
3
 楼主| 发表于 2022-10-27 15:46:54 | 只看该作者
ACRI 发表于 2022-10-27 09:16
这个是日本的网站http://artificialprovidence.web.fc2.com/
里面找能力扩展,搜索 オートリザレクション特 ...

虽然没看明白但还是非常感谢!

点评

....,我有个自己机翻的使用方法,待会给你贴上来  发表于 2022-10-28 05:12
回复 支持 1 反对 0

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1985
在线时间
176 小时
注册时间
2022-6-24
帖子
176
4
发表于 2022-10-28 05:13:43 | 只看该作者
时光之歌 发表于 2022-10-27 15:46
虽然没看明白但还是非常感谢!
  1. #==============================================================================
  2. # ■ RGSS3 オートリザレクション特徴 Ver2.04 by 星潟
  3. #------------------------------------------------------------------------------
  4. # 戦闘不能に陥った際、一定確率で自動回復する特徴を作成します。
  5. # 著しくゲームバランスを損ねる場合がありますので、ご利用は計画的に。
  6. # なお、イベントコマンドのHP増減やステート付与による戦闘不能では
  7. # 動作しないようにしています。
  8. #
  9. # また、自動蘇生効果発動時に破損する装備品や
  10. # 解除するステートを作成することもできます。
  11. # (特に素材を導入していない限りは、戦闘不能時にステートは自動消滅します。
  12. #   戦闘不能時にステートが解除されないような素材を導入されている場合のみ
  13. #   解除するステート設定は有効です)
  14. #==============================================================================
  15. # ★自動蘇生特徴設定例(アクター・装備品・ステート・エネミー用)
  16. #------------------------------------------------------------------------------
  17. # <自動蘇生:500,42,25>
  18. #
  19. # 无法战斗时,播放动画ID 42
  20. # HP500 有 25% 的几率复活。
  21. #------------------------------------------------------------------------------
  22. # <自動蘇生:self.mhp*3/4,0>   (可以理解为不填写几率就是百分百)
  23. #
  24. # 戦闘不能になった際、アニメーションは表示せず
  25. # 100%の確率でHPが最大HPの75%の状態で蘇生します。
  26. #==============================================================================
  27. # ★自動蘇生破損特徴設定例(装備品・ステート用)
  28. #------------------------------------------------------------------------------
  29. # <自動蘇生破損:75>
  30. #
  31. # 当使用此装备/状态激活自动复活时
  32. # 有 75% 的几率会被摧毁/解锁。
  33. #------------------------------------------------------------------------------
  34. # <自動蘇生破損:$game_variables[1]>
  35. #
  36. # 当使用此装备/状态激活自动复活时
  37. # 它将以变量1的值的概率被销毁/释放。
  38. #==============================================================================
  39. # ★自動蘇生無効設定例(アイテム・スキル用)
  40. #------------------------------------------------------------------------------
  41. # <自動蘇生無効>
  42. #
  43. # 设定在技能或者对敌伤害的物品上
  44. # 即可让自动复活无发激活直接死去。
  45. #==============================================================================
  46. # Ver1.01
  47. # 自動蘇生を特徴化。
  48. # Ver2.00
  49. # 注釈を全面的に追加。
  50. # キャッシュ化による軽量化を実施。
  51. # HP回復量・発動確率にスクリプトによる計算を行えるように変更。
  52. # 装備・ステートに対し、自動蘇生発動時に破壊/解除される確率を
  53. # 指定できるように機能を拡張。
  54. # Ver2.01
  55. # アイテム・スキルで戦闘不能ステートが付与された場合と
  56. # 反撃で戦闘不能になった場合にも自動蘇生対象となるように修正。
  57. # また、受けても自動蘇生させないアイテム・スキルが作成可能に。
  58. # Ver2.03
  59. # アイテム・スキルで戦闘不能ステートが付与された場合については
  60. # 自動蘇生が発生しないようにする設定項目を追加しました。
  61. # Ver2.04
  62. # 戦闘中の行動であるならばなるべく対応するようにする設定を追加。
  63. # (鳥小屋.txt様のターン消費無しスキルを想定)
  64. #==============================================================================
  65. module A_Resurrection
  66.   
  67.   #死亡時自動蘇生の設定用キーワードを指定。
  68.   
  69.   WORD1    = "自動蘇生"
  70.   
  71.   #死亡時自動蘇生が発動した際の破壊/解除率設定用キーワードを指定。
  72.   
  73.   WORD2    = "自動蘇生破損"
  74.   
  75.   #自動蘇生無効スキル・アイテム設定用キーワードを指定。
  76.   #(イベント戦用)
  77.   
  78.   WORD3    = "自動蘇生無効"
  79.   
  80.   #ステート付与効果によって戦闘不能ステートが付与された場合は発動せず
  81.   #HPが0になることで戦闘不能になった場合のみ有効にするかを指定。
  82.   #true  …… HPが0になったことによる戦闘不能のみ
  83.   #false …… 戦闘不能ステート付与についても有効
  84.   
  85.   HP0_ONLY = false
  86.   
  87.   #自動回復させる場合にHP回復量を表示するか否かを指定。
  88.   #true …… 表示する false …… 表示しない
  89.   
  90.   RE_HPDIS = true
  91.   
  92.   #スリップダメージによる戦闘不能でも自動回復するか否かを指定。
  93.   #true …… する false …… しない
  94.   
  95.   SLIP_REC = true
  96.   
  97.   #戦闘中の行動によるものであればなるべく適用するようにするかを指定。
  98.   #鳥小屋.txt様のターン消費無しスキルのスクリプトを導入されている場合は
  99.   #trueを推奨。
  100.   
  101.   ACTFORCE = false
  102.   
  103.   #死亡時自動蘇生時に装備品が破壊された場合のキーワードを指定。
  104.   
  105.   TEXT = "%sは砕け散った!"
  106.   
  107.   #装備品が破壊された場合のSEを指定。
  108.   #指定順は[SE名,音量,ピッチ]。
  109.   
  110.   SE       = ["Crash",80,100]
  111.   
  112. end
  113. class Game_ActionResult
  114.   attr_accessor :a_resurrection
  115.   #--------------------------------------------------------------------------
  116.   # ダメージ値のクリア
  117.   #--------------------------------------------------------------------------
  118.   alias clear_damage_values_a_resurrection clear_damage_values
  119.   def clear_damage_values
  120.    
  121.     #本来の処理を実行。
  122.    
  123.     clear_damage_values_a_resurrection
  124.    
  125.     #自動蘇生データを初期化する。
  126.    
  127.     a_resurrection_clear
  128.   end
  129.   #--------------------------------------------------------------------------
  130.   # 自動蘇生データを初期化
  131.   #--------------------------------------------------------------------------
  132.   def a_resurrection_clear
  133.     @a_resurrection = [0,0]
  134.   end
  135. end
  136. module BattleManager
  137.   #--------------------------------------------------------------------------
  138.   # 蘇生可能タイミングかどうかを判定。
  139.   #--------------------------------------------------------------------------
  140.   def self.resurrection
  141.    
  142.     #ターン中、もしくはターン終了時はtrue、そうでない場合はfalse
  143.    
  144.     @phase == :turn or @phase == :turn_end or (A_Resurrection::ACTFORCE ? $game_party.a_resurrection : false)
  145.    
  146.   end
  147. end
  148. class Game_Party < Game_Unit
  149.   attr_accessor :a_resurrection
  150. end
  151. class Game_Battler < Game_BattlerBase
  152.   #--------------------------------------------------------------------------
  153.   # ステート付与
  154.   #--------------------------------------------------------------------------
  155.   alias add_state_a_resurrection add_state
  156.   def add_state(state_id)
  157.    
  158.     #ステートIDが死亡ステートであり
  159.     #蘇生可能なタイミングであり
  160.     #なおかつまだ死亡していない場合は分岐。
  161.    
  162.     if state_id == death_state_id && (A_Resurrection::HP0_ONLY ? self.hp == 0 : true) && BattleManager.resurrection && !state?(death_state_id)
  163.       
  164.       #自動蘇生データを取得。
  165.       
  166.       data = a_resurrection_check
  167.       
  168.       #本来の処理を実行。
  169.       
  170.       add_state_a_resurrection(state_id)
  171.       
  172.       #自動蘇生データのHP回復量が0以上の場合は行動結果に反映。
  173.       
  174.       @result.a_resurrection = data if data[0] > 0
  175.       
  176.     else
  177.       
  178.       #本来の処理を実行。
  179.       
  180.       add_state_a_resurrection(state_id)
  181.       
  182.     end
  183.   end
  184.   #--------------------------------------------------------------------------
  185.   # 自動蘇生データ生成
  186.   #--------------------------------------------------------------------------
  187.   def a_resurrection_check
  188.    
  189.     #既に戦闘不能状態の場合はデフォルトの配列を返す。
  190.    
  191.     return [0,0] if self.state?(death_state_id)
  192.    
  193.     #特徴別に判定。
  194.    
  195.     feature_objects.each {|f| a1 = f.a_resurrection
  196.    
  197.     #特徴の自動蘇生データの配列から発動率を計算する。
  198.    
  199.     a1.each {|a2| next unless eval(a2[2]) > rand(100)
  200.    
  201.     #HP回復量を計算。
  202.    
  203.     data = eval(a2[0]).to_i
  204.    
  205.     #HP回復量が0以上の場合のみ続行。
  206.    
  207.     next unless data > 0
  208.    
  209.     #HP回復量、アニメーションID、特徴データを返す。
  210.    
  211.     return [data, a2[1],f]}}
  212.    
  213.     #デフォルトの配列を返す。
  214.    
  215.     [0,0]
  216.    
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # 自動蘇生データ
  220.   #--------------------------------------------------------------------------
  221.   def a_resurrection
  222.    
  223.     #自動蘇生データを返す。
  224.    
  225.     @result.a_resurrection
  226.    
  227.   end
  228.   #--------------------------------------------------------------------------
  229.   # ターン終了
  230.   #--------------------------------------------------------------------------
  231.   alias regenerate_hp_a_resurrection regenerate_hp
  232.   def regenerate_hp
  233.    
  234.     #スリップダメージによる死亡からの自動蘇生を行う場合
  235.     #自動蘇生データを取得し、そうでない場合はデフォルトの配列を返す。
  236.    
  237.     @result.a_resurrection = A_Resurrection::SLIP_REC ? a_resurrection_check : [0,0]
  238.    
  239.     #本来の処理を実行。
  240.    
  241.     regenerate_hp_a_resurrection
  242.    
  243.     #本来の処理を行った上でHPが0でないか死亡していない場合は
  244.     #デフォルトの配列を返す。
  245.    
  246.     @result.a_resurrection = [0,0] if self.hp != 0 or !state?(death_state_id)
  247.    
  248.   end
  249.   #--------------------------------------------------------------------------
  250.   # 破損率確率の計算
  251.   #--------------------------------------------------------------------------
  252.   def a_r_break_rate(f)
  253.     eval(f.a_r_break_rate)
  254.   end
  255. end
  256. class Scene_Battle < Scene_Base
  257.   #--------------------------------------------------------------------------
  258.   # スキル/アイテムの効果を適用
  259.   #--------------------------------------------------------------------------
  260.   alias apply_item_effects_a_resurrection apply_item_effects
  261.   def apply_item_effects(target, item)
  262.    
  263.     #本来の処理を実行。
  264.    
  265.     $game_party.a_resurrection = true if A_Resurrection::ACTFORCE
  266.    
  267.     apply_item_effects_a_resurrection(target, item)
  268.    
  269.     $game_party.a_resurrection = nil if A_Resurrection::ACTFORCE
  270.    
  271.     #自動蘇生を実行。
  272.    
  273.     execute_a_resurrection(target,item)
  274.    
  275.   end
  276.   #--------------------------------------------------------------------------
  277.   # 反撃の発動
  278.   #--------------------------------------------------------------------------
  279.   alias invoke_counter_attack_a_resurrection invoke_counter_attack
  280.   def invoke_counter_attack(target, item)
  281.    
  282.     #本来の処理を実行。
  283.    
  284.     $game_party.a_resurrection = true if A_Resurrection::ACTFORCE
  285.    
  286.     invoke_counter_attack_a_resurrection(target, item)
  287.    
  288.     $game_party.a_resurrection = nil if A_Resurrection::ACTFORCE
  289.    
  290.     #自動蘇生を実行。
  291.    
  292.     execute_a_resurrection(@subject,item)
  293.    
  294.   end
  295.   #--------------------------------------------------------------------------
  296.   # 自動蘇生の発動
  297.   #--------------------------------------------------------------------------
  298.   def execute_a_resurrection(target,item = nil)
  299.    
  300.     #自動蘇生データを取得。
  301.    
  302.     data = target.a_resurrection
  303.    
  304.     #自動蘇生禁止スキルの場合は処理を中断。
  305.    
  306.     return if item && item.anti_a_resurrection
  307.    
  308.     #HP回復量が0より大きい場合は処理を続行。
  309.    
  310.     return if data[0] <= 0 or !target.state?(target.death_state_id)
  311.    
  312.     #ログウィンドウをクリア。
  313.    
  314.     @log_window.clear
  315.    
  316.     #指定したアニメーションを再生。ID0の場合は再生しない。
  317.    
  318.     show_animation([target], data[1]) if data[1] > 0
  319.    
  320.     #対象のHPを回復。
  321.    
  322.     target.hp = data[0]
  323.    
  324.     #ステータスウィンドウの更新。
  325.    
  326.     refresh_status
  327.    
  328.     #自動蘇生を表示。
  329.    
  330.     @log_window.display_a_resurrection(target)
  331.    
  332.     #自動蘇生による破損の表示。
  333.    
  334.     @log_window.display_a_r_break(target, data[2])
  335.    
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ターン終了
  339.   #--------------------------------------------------------------------------
  340.   alias turn_end_a_resurrection turn_end
  341.   def turn_end
  342.    
  343.     #スリップダメージによる死亡からの蘇生フラグを取得。
  344.    
  345.     @te_a_resurrection = A_Resurrection::SLIP_REC
  346.    
  347.     #本来の処理を実行。
  348.    
  349.     turn_end_a_resurrection
  350.    
  351.     #スリップダメージによる死亡からの蘇生フラグを消去。
  352.    
  353.     @te_a_resurrection = nil
  354.    
  355.   end
  356.   #--------------------------------------------------------------------------
  357.   # イベント処理
  358.   #--------------------------------------------------------------------------
  359.   alias process_event_te_a_resurrection process_event
  360.   def process_event
  361.    
  362.     #スリップダメージによる死亡からの蘇生フラグが有効な場合
  363.     #ここで蘇生処理を実行する。
  364.    
  365.     te_a_resurrection_execute if @te_a_resurrection
  366.     process_event_te_a_resurrection
  367.   end
  368.   #--------------------------------------------------------------------------
  369.   # イベント前にスリップダメージによる自動蘇生演出
  370.   #--------------------------------------------------------------------------
  371.   def te_a_resurrection_execute
  372.    
  373.     #全ての戦闘メンバー別に処理。
  374.    
  375.     all_battle_members.each do |battler|
  376.       
  377.       #自動蘇生のデータを取得。
  378.       
  379.       data = battler.result.a_resurrection
  380.       
  381.       #自動蘇生のHP回復量が0より大きい場合
  382.       
  383.       if data[0] > 0
  384.         
  385.         #ログウィンドウをクリア。
  386.         
  387.         @log_window.clear
  388.         
  389.         #指定したアニメーションを再生。ID0の場合は再生しない。
  390.         
  391.         show_animation([battler], data[1]) if data[1] > 0
  392.         
  393.         #対象のHPを回復。
  394.         
  395.         battler.hp = data[0]
  396.         
  397.         #ステータスウィンドウの更新。
  398.         
  399.         refresh_status
  400.         
  401.         #自動蘇生の表示。
  402.         
  403.         @log_window.display_a_resurrection(battler)
  404.         
  405.         #ログウィンドウのクリア。
  406.         
  407.         @log_window.wait_and_clear
  408.         
  409.         #自動蘇生による破損の表示。
  410.         
  411.         @log_window.display_a_r_break(battler,data[2])
  412.         
  413.       end
  414.     end
  415.   end
  416. end
  417. class Window_BattleLog < Window_Selectable
  418.   #--------------------------------------------------------------------------
  419.   # 自動蘇生時のHP回復表示
  420.   #--------------------------------------------------------------------------
  421.   def a_resurrection_hp_recovery(target)
  422.    
  423.     #回復ではなくダメージである場合や
  424.     #回復量を表示しない設定である場合は処理しない。
  425.    
  426.     return unless target.result.hp_damage > 0 or A_Resurrection::RE_HPDIS
  427.    
  428.     #回復SEを実行。
  429.    
  430.     Sound.play_recovery
  431.    
  432.     #回復メッセージを表示。
  433.    
  434.     add_text(target.result.hp_damage_text)
  435.    
  436.     #ウェイトを実行。
  437.    
  438.     wait
  439.    
  440.   end
  441.   #--------------------------------------------------------------------------
  442.   # 自動蘇生の表示
  443.   #--------------------------------------------------------------------------
  444.   def display_a_resurrection(target)
  445.    
  446.     #結果を書き換える。
  447.    
  448.     target.result.used = true
  449.     target.result.critical = false
  450.     target.result.success = true
  451.     target.result.hp_damage = -target.result.a_resurrection[0]
  452.    
  453.     #死亡ステートデータを取得。
  454.    
  455.     state = $data_states[target.death_state_id]
  456.    
  457.     #最終行を取得。
  458.    
  459.     last_line_number = line_number
  460.    
  461.     #自動蘇生時のHP回復表示。
  462.    
  463.     a_resurrection_hp_recovery(target)
  464.    
  465.     #戦闘不能ステート解除メッセージを表示。
  466.    
  467.     add_text(target.name + state.message4) unless state.message4.empty?
  468.    
  469.     #ウェイトを実行。
  470.    
  471.     wait if line_number > last_line_number
  472.    
  473.     #行を戻す。
  474.    
  475.     back_to(last_line_number)
  476.    
  477.   end
  478.   #--------------------------------------------------------------------------
  479.   # 自動蘇生破損の表示
  480.   #--------------------------------------------------------------------------
  481.   def display_a_r_break(target, feature)
  482.    
  483.     #該当する特徴の破損判定を実行。
  484.    
  485.     return unless target.a_r_break_rate(feature) > rand(100)
  486.    
  487.     #最終行を取得。
  488.    
  489.     last_line_number = line_number
  490.    
  491.     #特徴が装備品である場合
  492.    
  493.     if feature.is_a?(RPG::EquipItem)
  494.       
  495.       #なんらかの原因で既に装備解除されている状況を考え
  496.       #装備品別に自動蘇生に用いた装備品を装備しているか否かを判定。
  497.       
  498.       return unless target.equips.include?(feature)
  499.       
  500.       #ウェイトを実行。
  501.       
  502.       wait
  503.       
  504.       #該当する装備を破棄。
  505.       
  506.       target.discard_equip(feature)
  507.       SceneManager.scene.refresh_status if $game_party.in_battle
  508.       
  509.       #SEの配列を用意。
  510.       
  511.       array = A_Resurrection::SE
  512.       
  513.       #SEを演奏。
  514.       
  515.       RPG::SE.new(array[0],array[1],array[2]).play
  516.       
  517.       #設定に応じてメッセージを表示。
  518.       
  519.       add_text(sprintf(A_Resurrection::TEXT,feature.name)) unless A_Resurrection::TEXT.empty?
  520.       
  521.       #ウェイトを実行。
  522.       
  523.       wait
  524.       
  525.       #行を戻す。
  526.       
  527.       back_to(last_line_number)
  528.       
  529.     #対象がステートである場合
  530.       
  531.     elsif feature.is_a?(RPG::State)
  532.       
  533.       #そのステートが付与されていない場合は飛ばす。
  534.       
  535.       return unless target.state?(feature.id)
  536.       
  537.       #ウェイトを実行。
  538.       
  539.       wait
  540.       
  541.       #該当するステートを解除。
  542.       
  543.       target.remove_state(feature.id)
  544.       SceneManager.scene.refresh_status if $game_party.in_battle
  545.       
  546.       #ステート解除メッセージを表示。
  547.       
  548.       add_text(target.name + feature.message4) unless feature.message4.empty?
  549.       
  550.       #ウェイトを実行。
  551.       
  552.       wait
  553.       
  554.       #行を戻す。
  555.       
  556.       back_to(last_line_number)
  557.       
  558.     end
  559.   end
  560. end
  561. class RPG::BaseItem
  562.   #--------------------------------------------------------------------------
  563.   # 自動蘇生データ
  564.   #--------------------------------------------------------------------------
  565.   def a_resurrection
  566.    
  567.     #キャッシュが存在する場合はキャッシュを返す。
  568.    
  569.     @a_resurrection ||= create_a_resurrection
  570.    
  571.   end
  572.   def create_a_resurrection
  573.    
  574.     #配列を作成。
  575.    
  576.     r = []
  577.    
  578.     #メモ欄からデータを取得する。
  579.    
  580.     note.each_line {|l|
  581.    
  582.     #正常なデータを取得できた場合はそのデータを分解する。
  583.    
  584.     if /<#{A_Resurrection::WORD1}[::](\S+)>/ =~ l
  585.    
  586.       a = $1.to_s.split(/\s*,\s*/)
  587.       
  588.       #要素数が決定的に足りない場合は飛ばす。
  589.       
  590.       next if a.size < 2
  591.       
  592.       #要素が1足りない場合は確率の省略とみなし、文字列の100を代入。
  593.       
  594.       a.push("100") if a.size < 3
  595.       
  596.       #アニメーションIDは整数とする。
  597.       
  598.       a[1] = a[1].to_i
  599.       
  600.       #配列にデータを追加。
  601.       
  602.       r.push(a)
  603.    
  604.     end
  605.    
  606.     }
  607.    
  608.     #データを返す。
  609.    
  610.     r
  611.    
  612.   end
  613.   #--------------------------------------------------------------------------
  614.   # 自動蘇生時破損確率
  615.   #--------------------------------------------------------------------------
  616.   def a_r_break_rate
  617.    
  618.     #キャッシュが存在する場合はキャッシュを返す。
  619.    
  620.     @a_r_break ||= /<#{A_Resurrection::WORD2}[::](\S+)>/ =~ note ? $1.to_s : "0"
  621.    
  622.   end
  623. end
  624. class RPG::UsableItem < RPG::BaseItem
  625.   #--------------------------------------------------------------------------
  626.   # 自動蘇生禁止アイテム
  627.   #--------------------------------------------------------------------------
  628.   def anti_a_resurrection
  629.     (@anti_a_resurrection ||= /<#{A_Resurrection::WORD3}>/ =~ note ? 1 : 0) == 1
  630.   end
  631. end
复制代码
在尝试做游戏了,但还是个菜狗(结果现在编程,音乐和剧情设计没开始学,画画也暂时没时间学了(;д;))

(个人精神状况不是很好,有时会说出一些奇怪且根本没法理解意思的话,直接无视就好,如果说出的话不小心冒犯到你,我会在精神状况良好时和你道歉的(`・ω・´)(不过一般在感觉到不适时会直接下线,请勿过于担心))
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-20 10:52

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表