Project1

标题: 怎么在公共事件里写 等待三回合 再继续执行 [打印本页]

作者: 小姐姐一个    时间: 2020-1-31 16:41
标题: 怎么在公共事件里写 等待三回合 再继续执行
如题。。

作者: kunikai    时间: 2020-1-31 17:03
如果非必要的话,建议利用状态分段执行。
作者: 小姐姐一个    时间: 2020-1-31 17:52
kunikai 发表于 2020-1-31 17:03
如果非必要的话,建议利用状态分段执行。

我是萌新哎,听不懂=。=

作者: 小姐姐一个    时间: 2020-1-31 18:37
kunikai 发表于 2020-1-31 17:03
如果非必要的话,建议利用状态分段执行。

做个物品,使用后,三回合后对敌人造成伤害
作者: 小姐姐一个    时间: 2020-1-31 18:41
kunikai 发表于 2020-1-31 17:03
如果非必要的话,建议利用状态分段执行。

谢谢了

作者: 小姐姐一个    时间: 2020-1-31 18:43
kunikai 发表于 2020-1-31 17:03
如果非必要的话,建议利用状态分段执行。

大佬还有个事情,就是关于获得状态加最大体力的事=。=,我想让状态加固定的最大体力而不是百分比,咋整
作者: kunikai    时间: 2020-1-31 19:05
本帖最后由 kunikai 于 2020-1-31 19:10 编辑

将如下代码插入到默认脚本以下、Main以上。
它的效果分别是
①当26号状态解除时,执行7号公共事件。
②当19号状态解除时,对应角色MP减少“18号变量的值”
③当35号状态解除时,对应角色HP减少200。
自行更改编号为所需即可。

RUBY 代码复制
  1. class Game_Battler < Game_BattlerBase
  2.   def remove_state(state_id)
  3.     if state?(state_id)
  4.       #不需要的请注释掉
  5.       if state_id == 26 #如果解除的状态编号为26号
  6.         $game_temp.reserve_common_event(7) #执行7号公共事件
  7.       end
  8.       if state_id == 19 #如果解除的状态编号为19号
  9.         @mp -= $game_variables[18] #解除状态的角色MP减少"18号变量的值"
  10.       end
  11.       if state_id == 35 #如果解除的状态编号为35号
  12.         @hp -= 200  #解除状态的角色HP减少200  
  13.       end
  14.       #不需要的请注释掉
  15.       revive if state_id == death_state_id
  16.       erase_state(state_id)
  17.       refresh
  18.       @result.removed_states.push(state_id).uniq!
  19.     end
  20.   end
  21. end


作者: kunikai    时间: 2020-1-31 19:09
本帖最后由 kunikai 于 2020-1-31 19:13 编辑
小姐姐一个 发表于 2020-1-31 18:43
大佬还有个事情,就是关于获得状态加最大体力的事=。=,我想让状态加固定的最大体力而不是百分比,咋整 ...


同样将该脚本插入到默认脚本以下、Main以上。
该脚本原作者为TheoAllen。

在你所需要增加最大体力的状态备注栏中写下<mhp: +n>,其中n为你所需要增加的数值。
更多功能详见脚本注释。

RUBY 代码复制
  1. # =============================================================================
  2. # TheoAllen - 按数值增减能力值
  3. # Version : 1.0
  4. # Contact : [url]www.rpgmakerid.com[/url] (or) [url]http://theolized.blogspot.com[/url]
  5. # (This script documentation is written in informal indonesian language)
  6. # =============================================================================
  7. ($imported ||= {})[:Theo_FixedParam] = true
  8. # =============================================================================
  9. # Change Logs:
  10. # -----------------------------------------------------------------------------
  11. # 2013.12.02 - Started and Finished script
  12. # =============================================================================
  13. =begin
  14.  
  15.   介绍 :
  16.   在默认 RMVXA 中,对于状态你只能按比例增减能力值。本脚本可以按数值增减能力值。
  17.  
  18.   使用方法 :
  19.   本脚本放在插件脚本之下,main之上
  20.  
  21.   状态备注:
  22.  
  23.   增加的情况 (n替换为数字)
  24.   <mhp: +n>
  25.   <mmp: +n>
  26.   <atk: +n>
  27.   <def: +n>
  28.   <mat: +n>
  29.   <mdf: +n>
  30.   <agi: +n>
  31.   <luk: +n>
  32.  
  33.   减少的情况, 将 + 变为 -
  34.   例如
  35.  
  36.   <mdf: +100>
  37.   <atk: -100>
  38.  
  39.   使用规定 :
  40.   署名脚本作者, TheoAllen. 你可以自由编辑此脚本,只要你不声明你是脚本的原作者
  41.   如果你想用此脚本于商业游戏,请和我共享收益.别忘了给我一份免费的游戏拷贝.
  42.  
  43. =end
  44. # =============================================================================
  45. # 设定结束 ~
  46. # =============================================================================
  47. class RPG::State < RPG::BaseItem
  48.   attr_accessor :fixed_params
  49.  
  50.   def load_fixed_params
  51.     @fixed_params = Array.new(8) {0}
  52.     note.split(/[\r\n]+/).each do |line|
  53.       case line
  54.       when /<mhp\s*:\s*(\+|-)(\d+)>/i
  55.         if $1.to_s == "+"
  56.           @fixed_params[0] = $2.to_i
  57.         else
  58.           @fixed_params[0] = $2.to_i * -1
  59.         end
  60.       when /<mmp\s*:\s*(\+|-)(\d+)>/i
  61.         if $1.to_s == "+"
  62.           @fixed_params[1] = $2.to_i
  63.         else
  64.           @fixed_params[1] = $2.to_i * -1
  65.         end
  66.       when /<atk\s*:\s*(\+|-)(\d+)>/i
  67.         if $1.to_s == "+"
  68.           @fixed_params[2] = $2.to_i
  69.         else
  70.           @fixed_params[2] = $2.to_i * -1
  71.         end
  72.       when /<def\s*:\s*(\+|-)(\d+)>/i
  73.         if $1.to_s == "+"
  74.           @fixed_params[3] = $2.to_i
  75.         else
  76.           @fixed_params[3] = $2.to_i * -1
  77.         end
  78.       when /<mat\s*:\s*(\+|-)(\d+)>/i
  79.         if $1.to_s == "+"
  80.           @fixed_params[4] = $2.to_i
  81.         else
  82.           @fixed_params[4] = $2.to_i * -1
  83.         end
  84.       when /<mdf\s*:\s*(\+|-)(\d+)>/i
  85.         if $1.to_s == "+"
  86.           @fixed_params[5] = $2.to_i
  87.         else
  88.           @fixed_params[5] = $2.to_i * -1
  89.         end
  90.       when /<agi\s*:\s*(\+|-)(\d+)>/i
  91.         if $1.to_s == "+"
  92.           @fixed_params[6] = $2.to_i
  93.         else
  94.           @fixed_params[6] = $2.to_i * -1
  95.         end
  96.       when /<luk\s*:\s*(\+|-)(\d+)>/i
  97.         if $1.to_s == "+"
  98.           @fixed_params[7] = $2.to_i
  99.         else
  100.           @fixed_params[7] = $2.to_i * -1
  101.         end
  102.       end # case
  103.     end # each
  104.   end # load_fixed_params
  105.  
  106. end
  107.  
  108. class << DataManager
  109.  
  110.   alias theo_fixedparam_load_db load_database
  111.   def load_database
  112.     theo_fixedparam_load_db
  113.     $data_states.compact.each do |state|
  114.       state.load_fixed_params
  115.     end
  116.   end
  117.  
  118. end
  119.  
  120. class Game_Battler < Game_BattlerBase
  121.  
  122.   alias theo_fixedparam_param param
  123.   def param(param_id)
  124.     result = theo_fixedparam_param(param_id)
  125.     result += calc_fixed_param(param_id)
  126.     [[result, param_max(param_id)].min, param_min(param_id)].max.to_i
  127.   end
  128.  
  129.   def calc_fixed_param(param_id)
  130.     result = states.inject(0) do |r,state|
  131.       r + state.fixed_params[param_id]
  132.     end
  133.     if $imported[:Theo_PassiveSkill] && actor?
  134.       result += passive_skills.inject(0) do |r,state|
  135.         r + state.fixed_params[param_id]
  136.       end
  137.     end
  138.     return result
  139.   end
  140.  
  141. end

作者: 小姐姐一个    时间: 2020-1-31 19:14
kunikai 发表于 2020-1-31 19:09
同样将该脚本插入到默认脚本以下、Main以上。
该脚本原作者为TheoAllen。

谢谢大佬!
作者: Nil2018    时间: 2020-1-31 20:01
  1. #==============================================================================
  2. # ■ RGSS3 延迟效果  Ver2.01 by 星潟
  3. #------------------------------------------------------------------------------
  4. # 物品或技能使用後延迟使用其他技能的效果
  5. # 可以在n回合后发动,也可以是n次行动结束后。
  6. #==============================================================================
  7. # 使用技能或物品备注:
  8. #
  9. # <回合后延迟发动:a,b,c(,d,e)>
  10. # <回合后延迟发动:a,b,c(,d,e)>
  11. #
  12. # a:技能发动对象,可以是0或1,0代表自身使用,1代表目标使用
  13. # b:延迟发动的技能或物品id,物品只能延迟发动物品,而不能是技能,反之也是
  14. # c:延迟n回合
  15. # d:(可被省略,d省略时e也必须被省略)延长发动时间
  16. # e:(可被省略)发动几率,仅在存在延长发动时间时有效
  17. #
  18. # 可以一次性使用多个备注。
  19. #==============================================================================
  20. # 物品/技能备注
  21. #==============================================================================
  22. # <回合后延迟发动:0,20,0>
  23. # 该技能或物品使用后,本回合结束时自身使用20号技能或物品
  24. #------------------------------------------------------------------------------
  25. # <回合后延迟发动:1,25,1,0,50>
  26. # 该技能或物品使用后,下回合结束时有50%概率目标使用25号技能或物品   
  27. #------------------------------------------------------------------------------
  28. # <行动后延迟发动:0,30,2>
  29. # 该技能或物品使用后,自身行动结束两回时自身使用30号技能或物品  
  30. #------------------------------------------------------------------------------
  31. # <行动后延迟发动:1,35,3,2,25>
  32. # 该技能或物品使用后,4回合结束至6回合时有25%概率目标使用35号技能或物品   
  33. # (看不懂就去群里问)
  34. #==============================================================================
  35. # 使用者対象のスキルで遅延発動させ
  36. # 遅延発動させるスキルとして敵をランダム攻撃する物や敵全体攻撃の物を指定すれば
  37. # 一度の遅延効果で複数の敵を攻撃する遅延スキルも作成出来ます。
  38. # (日文太可怕了,看不懂,估计是延迟技能也可以延迟发动其他技能,做连锁效果)
  39. #==============================================================================
  40. module DelayAct
  41.   
  42.   #ターン終了時に発動する場合のキーワード設定
  43.   
  44.   WORD1 = "回合后延迟发动"
  45.   
  46.   #行動後に発動する場合のキーワード設定
  47.   
  48.   WORD2 = "行动后延迟发动"
  49.   
  50. end
  51. class RPG::UsableItem < RPG::BaseItem
  52.   #--------------------------------------------------------------------------
  53.   # 遅延発動
  54.   #--------------------------------------------------------------------------
  55.   def delay_skill_data
  56.     @delay_skill_data ||= create_delay_skill_data
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # 遅延発動データ作成
  60.   #--------------------------------------------------------------------------
  61.   def create_delay_skill_data
  62.     h = {}
  63.     self.note.each_line {|l|
  64.     if /<#{DelayAct::WORD1}[::](\S+)>/ =~ l
  65.       a = $1.to_s.split(/\s*,\s*/).inject([]) {|r,i| r.push(i.to_i)}
  66.       if a.size > 2
  67.         a.push(0) if a.size == 3
  68.         a.push(100) if a.size == 4
  69.         a.push(0)
  70.         h[h.size] = a
  71.       end
  72.     end
  73.     if /<#{DelayAct::WORD2}[::](\S+)>/ =~ l
  74.       a = $1.to_s.split(/\s*,\s*/).inject([]) {|r,i| r.push(i.to_i)}
  75.       if a.size > 2
  76.         a.push(0) if a.size == 3
  77.         a.push(100) if a.size == 4
  78.         a.push(1)
  79.         h[h.size] = a
  80.       end
  81.     end}
  82.     h
  83.   end
  84. end
  85. class << BattleManager
  86.   attr_accessor :delay_actions_turnend
  87.   attr_accessor :delay_actions_actend
  88.   attr_accessor :display_name_delayact
  89.   #--------------------------------------------------------------------------
  90.   # メンバ変数の初期化
  91.   #--------------------------------------------------------------------------
  92.   alias init_members_delay_actions init_members
  93.   def init_members
  94.     init_members_delay_actions
  95.     @delay_actions_turnend = []
  96.     @delay_actions_actend = []
  97.     @display_name_delayact = nil
  98.   end
  99.   #--------------------------------------------------------------------------
  100.   # ターン終了時遅延発動の配列内データを更新
  101.   #--------------------------------------------------------------------------
  102.   def delay_actions_turnend_update
  103.     a1 = []
  104.     a2 = []
  105.     @delay_actions_turnend.each_with_index {|a|
  106.     if a[:count] >= 1
  107.       a[:count] -= 1
  108.       a1.push(a)
  109.     else
  110.       a2.push(a)
  111.     end}
  112.     @delay_actions_turnend = a1
  113.     a2
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # 行動終了時遅延発動の配列内データを更新
  117.   #--------------------------------------------------------------------------
  118.   def delay_actions_actend_update(target)
  119.     ar = []
  120.     @delay_actions_actend.each {|a|
  121.     next if target != a[:target]
  122.     if a[:count] <= 0
  123.       ar.push(a.clone)
  124.     else
  125.       a[:count] -= 1
  126.     end}
  127.     ar.each {|a| @delay_actions_actend.delete(a)}
  128.     ar
  129.   end
  130. end
  131. class Game_Battler < Game_BattlerBase
  132.   #--------------------------------------------------------------------------
  133.   # スキル/アイテムの使用者側への効果
  134.   #--------------------------------------------------------------------------
  135.   alias item_user_effect_delayact item_user_effect
  136.   def item_user_effect(user, item)
  137.     if $game_party.in_battle
  138.       item.delay_skill_data.each_value {|data|
  139.       if data[4].to_i > rand(100)
  140.         count = data[2].to_i + rand(data[3].to_i + 1)
  141.         sid = data[1].to_i
  142.         item2 = item.is_a?(RPG::Skill) ? $data_skills[sid] : $data_items[sid]
  143.         hash = {:user => user,:target => self,:item => item2,:count => count,:name_type => data[0] == 1 ? true : false}
  144.         if data[5].to_i == 0
  145.           BattleManager.delay_actions_turnend.push(hash)
  146.         else
  147.           BattleManager.delay_actions_actend.push(hash)
  148.         end
  149.         @result.success = true
  150.       end}
  151.     end
  152.     item_user_effect_delayact(user, item)
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # スキル/アイテムの使用者側への効果
  156.   #--------------------------------------------------------------------------
  157.   def set_deley_act(target,item)
  158.     @pre_delay_actions = @actions.clone
  159.     @actions.clear
  160.     action = Game_Action.new(self,true)
  161.     action.target_index = target.index
  162.     if item.is_a?(RPG::Skill)
  163.       action.set_skill(item.id)
  164.     else
  165.       action.set_item(item.id)
  166.     end
  167.     @actions.push(action)
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # 遅延行動後のデータ復帰
  171.   #--------------------------------------------------------------------------
  172.   def after_delay_act
  173.     @actions = @pre_delay_actions.clone if movable?
  174.     @pre_delay_actions = nil
  175.   end
  176. end
  177. class Scene_Battle < Scene_Base
  178.   #--------------------------------------------------------------------------
  179.   # 行動終了の処理
  180.   #--------------------------------------------------------------------------
  181.   alias process_action_end_delayact process_action_end
  182.   def process_action_end
  183.     a = BattleManager.delay_actions_actend_update(@subject)
  184.     a.each {|hash| delay_act_execute(hash);@log_window.clear} if !a.empty?
  185.     process_action_end_delayact
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # 遅延行動の実行
  189.   #--------------------------------------------------------------------------
  190.   def delay_act_execute(hash)
  191.     last_subject = @subject
  192.     user = hash[:user]
  193.     target = hash[:target]
  194.     item = hash[:item]
  195.     return unless target.exist?
  196.     return if target.dead?
  197.     @subject = user
  198.     user.set_deley_act(target,item)
  199.     BattleManager.display_name_delayact = target if hash[:name_type]
  200.     use_item
  201.     user.after_delay_act
  202.     @subject = last_subject
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ターン終了
  206.   #--------------------------------------------------------------------------
  207.   alias turn_end_delayact turn_end
  208.   def turn_end
  209.     return if @turn_ending_delay_act
  210.     @turn_ending_delay_act = true
  211.     a = BattleManager.delay_actions_turnend_update
  212.     a.each {|hash| delay_act_execute(hash);@log_window.clear} if !a.empty?
  213.     turn_end_delayact
  214.     @turn_ending_delay_act = nil
  215.   end
  216. end
  217. class Window_BattleLog < Window_Selectable
  218.   #--------------------------------------------------------------------------
  219.   # スキル/アイテム使用の表示
  220.   #--------------------------------------------------------------------------
  221.   alias display_use_item_delayact display_use_item
  222.   def display_use_item(subject, item)
  223.     s = BattleManager.display_name_delayact
  224.     BattleManager.display_name_delayact = nil
  225.     display_use_item_delayact(s ? s : subject, item)
  226.   end
  227. end
复制代码





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