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
也许阁下可以参考参考别人怎么写的……
#==============================================================================
# ☆VX RGSS2 「スキル使用前コモン」☆
# EnDlEss DREamER
# URL:http://mitsu-evo.6.ql.bz/
# 製作者 mitsu-evo
# Last:2010/8/16
# データベース「スキル」設定のコモンイベントをスキル使用前に実行する。
# ▼ 他の戦闘系イベントより下に。
#==============================================================================
$ed_rgss2 = {} if $ed_rgss2 == nil
$ed_rgss2["ed_skill_common"] = true
# 使い方:スキルのメモ欄に「使用前コモン」と記入。(「」はいらない。)
=begin
8/16:敵キャラIDが変数に正常に格納されていなかったのを修正。
使い方
?スキルメモ欄に「使用前コモン」と入れておくと
そのスキルのコモンイベントはスキル使用前の実行されます。
「END_SKILL_COMMON」が「true」の場合は使用後も実行されます。
?アクター及びエネミーのIDをイベントコマンドの変数に格納します。
?対象キャラのIDとは「アクターID」及び「エネミーID」です。
コモンイベントの組み方によって、特定の敵や味方の時にのみ
会話や演出を行うことが出来るようになります。
?敵キャラIDなので複数の同じ敵の場合は全員が対象となります。
ボス戦など同じ敵が複数出現しない場合などに有効です。
=end
module ED
SKILL_COMMON = "使用前コモン"
END_SKILL_COMMON = false # スキル使用前と使用後にコモン発生
ACTIVE_ACTOR = 6 # 行動中のアクターID格納変数
ACTIVE_ENEMY = 7 # 行動中のエネミーID格納変数
ACTIVE_TARGET = 8 # 対象キャラID格納変数
# 全体なら対象キャラIDは「9999」になる。
end
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
# バトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# ● 戦闘行動の実行
#--------------------------------------------------------------------------
alias ed_skill_common_execute_action execute_action
def execute_action
if @active_battler.actor?
$game_variables[ED::ACTIVE_ACTOR] = @active_battler.id
else
$game_variables[ED::ACTIVE_ENEMY] = @active_battler.enemy_id
end
ed_skill_common_execute_action
end
#--------------------------------------------------------------------------
# ● 戦闘行動の実行 : スキル
#--------------------------------------------------------------------------
def execute_action_skill
skill = @active_battler.action.skill
text = @active_battler.name + skill.message1
targets = @active_battler.action.make_targets
# ターゲットのID取得
if targets.size == 1
for ed_target in targets
if ed_target.actor?
$game_variables[ED::ACTIVE_TARGET] = ed_target.id
else
$game_variables[ED::ACTIVE_TARGET] = ed_target.enemy_id
end
end
else
$game_variables[ED::ACTIVE_TARGET] = 9999
end
skill_common = skill.note.scan(/#{ED::SKILL_COMMON}/)
skill_common = skill_common.flatten
skill_common = skill_common[0].to_s
# スキル使用前にコモンイベント実行
if skill_common != nil and not skill_common.empty?
$game_temp.common_event_id = skill.common_event_id
process_battle_event
@message_window.dispose
@message_window = Window_BattleMessage.new
end
@message_window.add_instant_text(text)
unless skill.message2.empty?
wait(10)
@message_window.add_instant_text(skill.message2)
end
display_animation(targets, skill.animation_id)
@active_battler.mp -= @active_battler.calc_mp_cost(skill)
# 通常通りにスキルコモンイベント実行
if skill_common == nil or skill_common == "" or ED::END_SKILL_COMMON == true
$game_temp.common_event_id = skill.common_event_id
end
for target in targets
target.skill_effect(@active_battler, skill)
display_action_effects(target, skill)
end
end
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