Project1

标题: 如何在某技能释放之后,先执行公共事件再实现技能效果 [打印本页]

作者: 黄亦天    时间: 2011-1-12 20:32
标题: 如何在某技能释放之后,先执行公共事件再实现技能效果
本帖最后由 黄亦天 于 2011-1-13 17:04 编辑

其实我最理想的想法是:发动技能后的顺序是公共事件A+技能效果+公共事件B……
但是感觉比较麻烦,于是打算改成:公共事件A+技能效果+公共事件A 这样的组合
于是我试着改了Scene_Skill里面的内容,但是改完之后啥用没有……
求解,应该改什么地方……
作者: chung0919    时间: 2011-1-13 03:27
应该着手在战斗系统?
楼主是用哪一个战斗脚本哦?
作者: 企鹅达达    时间: 2011-1-13 08:50
也许阁下可以参考参考别人怎么写的……
  1. #==============================================================================
  2. #    ☆VX RGSS2 「スキル使用前コモン」☆
  3. #      EnDlEss DREamER
  4. #     URL:http://mitsu-evo.6.ql.bz/
  5. #     製作者 mitsu-evo
  6. #     Last:2010/8/16
  7. #   データベース「スキル」設定のコモンイベントをスキル使用前に実行する。
  8. #     ▼ 他の戦闘系イベントより下に。
  9. #==============================================================================
  10. $ed_rgss2 = {} if $ed_rgss2 == nil
  11. $ed_rgss2["ed_skill_common"] = true
  12. # 使い方:スキルのメモ欄に「使用前コモン」と記入。(「」はいらない。)
  13. =begin

  14. 8/16:敵キャラIDが変数に正常に格納されていなかったのを修正。

  15.      使い方
  16.     ?スキルメモ欄に「使用前コモン」と入れておくと
  17.      そのスキルのコモンイベントはスキル使用前の実行されます。
  18.      「END_SKILL_COMMON」が「true」の場合は使用後も実行されます。
  19.     ?アクター及びエネミーのIDをイベントコマンドの変数に格納します。
  20.     ?対象キャラのIDとは「アクターID」及び「エネミーID」です。
  21.      コモンイベントの組み方によって、特定の敵や味方の時にのみ
  22.      会話や演出を行うことが出来るようになります。
  23.     ?敵キャラIDなので複数の同じ敵の場合は全員が対象となります。
  24.      ボス戦など同じ敵が複数出現しない場合などに有効です。
  25.    
  26. =end

  27. module ED
  28.   SKILL_COMMON = "使用前コモン"
  29.   END_SKILL_COMMON = false                # スキル使用前と使用後にコモン発生
  30.   ACTIVE_ACTOR = 6                        # 行動中のアクターID格納変数
  31.   ACTIVE_ENEMY = 7                        # 行動中のエネミーID格納変数
  32.   ACTIVE_TARGET = 8                       # 対象キャラID格納変数
  33.   # 全体なら対象キャラIDは「9999」になる。
  34. end

  35. #==============================================================================
  36. # ■ Scene_Battle
  37. #------------------------------------------------------------------------------
  38. #  バトル画面の処理を行うクラスです。
  39. #==============================================================================

  40. class Scene_Battle < Scene_Base
  41.   #--------------------------------------------------------------------------
  42.   # ● 戦闘行動の実行
  43.   #--------------------------------------------------------------------------
  44.   alias ed_skill_common_execute_action execute_action
  45.   def execute_action
  46.     if @active_battler.actor?
  47.       $game_variables[ED::ACTIVE_ACTOR] = @active_battler.id
  48.     else
  49.       $game_variables[ED::ACTIVE_ENEMY] = @active_battler.enemy_id
  50.     end
  51.     ed_skill_common_execute_action
  52.   end
  53.   #--------------------------------------------------------------------------
  54.   # ● 戦闘行動の実行 : スキル
  55.   #--------------------------------------------------------------------------
  56.   def execute_action_skill
  57.    
  58.     skill = @active_battler.action.skill
  59.     text = @active_battler.name + skill.message1
  60.     targets = @active_battler.action.make_targets
  61.     # ターゲットのID取得
  62.     if targets.size == 1
  63.       for ed_target in targets
  64.         if ed_target.actor?
  65.           $game_variables[ED::ACTIVE_TARGET] = ed_target.id
  66.         else
  67.           $game_variables[ED::ACTIVE_TARGET] = ed_target.enemy_id
  68.         end
  69.       end
  70.     else
  71.       $game_variables[ED::ACTIVE_TARGET] = 9999
  72.     end
  73.     skill_common = skill.note.scan(/#{ED::SKILL_COMMON}/)
  74.     skill_common = skill_common.flatten
  75.     skill_common = skill_common[0].to_s
  76.     # スキル使用前にコモンイベント実行
  77.     if skill_common != nil and not skill_common.empty?
  78.       $game_temp.common_event_id = skill.common_event_id
  79.       process_battle_event
  80.       @message_window.dispose
  81.       @message_window = Window_BattleMessage.new
  82.     end
  83.    
  84.     @message_window.add_instant_text(text)
  85.     unless skill.message2.empty?
  86.       wait(10)
  87.       @message_window.add_instant_text(skill.message2)
  88.     end
  89.     display_animation(targets, skill.animation_id)
  90.     @active_battler.mp -= @active_battler.calc_mp_cost(skill)
  91.     # 通常通りにスキルコモンイベント実行
  92.     if skill_common == nil or skill_common == "" or ED::END_SKILL_COMMON == true
  93.       $game_temp.common_event_id = skill.common_event_id
  94.     end
  95.     for target in targets
  96.       target.skill_effect(@active_battler, skill)
  97.       display_action_effects(target, skill)
  98.     end
  99.   end
  100.   
  101. end



复制代码

作者: 黄亦天    时间: 2011-1-13 13:25
回复 企鹅达达 的帖子

一堆日文很头疼……(只会读平假名不会读片假名的飘过~~)
突然想起不知是哪位前辈说过的“一顿p”的方法,于是我也一顿p……
这个脚本的意思我大概弄清楚了,它的原理就是先判定技能注释里有没有识别标识,如果有,就直接执行公共事件,如果没有,就不带入技能公共事件的ID
那么说明,技能执行公共事件的地方还不是Scene_Battle
于是我又回去找了Scene_Skill,只在最后那块找到了common字样的一段,我把包含common的整个if判断放到它那个def的最前面,但是貌似还是没有效果……
这个公共事件处理的地方应该是哪?求解……
作者: 企鹅达达    时间: 2011-1-13 14:39
回复 黄亦天 的帖子

就是在Scene_Battle这里,def execute_action_skill
display_animation(targets, skill.animation_id)这个是播放技能动画
$game_temp.common_event_id =×× 这个是执行公用事件




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