由於RMXP內建的技能可用設定實在貧乏至極,大多時候都得配合公共事件進行
如果能用公用事件解決也就算了,如果我現在想做個「自爆技」...欸?我連得知剛剛是誰使用這招都沒辦法
所以,打開腳本編輯器吧...
首先做新功能之前得先分析這新功能要做什麼、什麼時候做、需要些什麼...
以自爆為例,
要做什麼:使用者使用技能後HP歸0
什麼時候做:使用技能後
需要些什麼:使用的技能、使用者,這樣才能判斷
好,分析完畢後就繼續吧,再來就是找適合的位置
不過因為要解釋整個
Scene_Battle 的運作實在太攏長,
所以為了節省時間,直接跳到我們的目的地:
update_phase4_step5為何選在這個方法追加?當然是因為能一口氣取得上述的要素:
使用者、技能(包含在使用者當中),並且時機在使用技能後
「技能就算了,使用者在哪裡?」
往上看應該會找到一個叫
@active_battler 的實體變量,再看一下那堆update_phase4_step xxx的註解,可以勉強理解這應該是一系列的處理,我們先不要管為什麼要分段和怎麼結合運作的
@active_battler 在這處理中代表當時的行動者,
可能是 我方(Game_Actor實體) 或 敵方(Game_Enemy實體),那麼或許能利用他們的方法得到他們用了什麼技能......理所當然的,其實一定會有...
總而言之,經過一番尋找和整理後得到了我們所需的「材料」:
@active_battler # 使用者 @active_battler.current_action.skill_id # 使用的技能 ID (不用技能時為 0 ) |
再來是時間點,雖然說是寫在update_phase4_step5中,不過執行上還是有順序的
就選在「顯示傷害」之後吧。攻擊完敵人後、自己才爆炸:
# 顯示傷害 for target in @target_battlers if target.damage != nil target.damage_pop = true end end |
那麼接下來呢?直接在後面加上:
# 如果使用了自爆技能 (假設自爆技能編號是 5) if @active_battler.current_action.skill_id == 5 @active_battler.hp = 0 # 使用者 HP 為 0 end |
這樣?
嗯~的確是可以,但如果需要其他的效果到時 update_phase4_step5 就會變得很長很長...
所以這裡多設一個方法把這些效果整理在一起,一樣寫在 Scene_Battle 中:
#--------------------------------------------------------------------------
# ●額外技能效果
#--------------------------------------------------------------------------
def skill_extra_effect
# 判斷行動者的技能
case @active_battler.current_action.skill_id
when 1 # 使用 1 號技能
# 我方全員HP減少 500
# (基本上還要判斷使用者是誰然後讓他的同伴扣血...算了,大不了這招不給敵人用)
for a in $game_party.actors
a.hp -= 500
# 下面這兩項操作是為了彈出傷害數字
a.damage = 500
a.damage_pop = true
end
when 3 # 使用 3 號技能
@active_battler.hp = @active_battler.maxsp / 2 # 使用者的 HP 變為自己最大SP的一半
when 5 # 使用 5 號技能
@active_battler.hp = 0 # 使用者 HP 為 0
when 8 # 使用 8 號技能
# 隨機獲得 250~350 之間的金額
$game_party.gain_gold(rand(101)+250)
end
end
update_phase4_step5在「顯示傷害」處理之後調用這個方法(skill_extra_effect)即可
只要自行追加 when 的分歧就能實現各種「技能使用後」的效果
※不過這個範例除了3、5號都能用公共事件實現,
另外有注意到嗎?能用公共事件實現的1和8號技能都是操控全域變量...
Q:我用齒輪之城 RTAB 怎麼改?一樣的做法,不過改在 update_phase4_step6 調用比較保險
只是RTAB另外改成需要一個參數(battler),剛好這參數就是代表目前行動者(Game_Actor或Game_Enemy實體)
所以同理,我們新增的 skill_extra_effect 也要改成把這參數代進去:
#-------------------------------------------------------------------------- # ● 額外技能效果 # active_battler:目前行動者 #-------------------------------------------------------------------------- def skill_extra_effect(active_battler) (內容) end |
(其實這邊原本打算直接寫battler,但為了讓初學者能和 update_phase4_step6 的區別......)
然後 @active_battler 的部分全部改成 active_battler,調用時就是把battler代入:
skill_extra_effect(battler) |
另外如果要額外進行傷害增減,請參考RTAB重新定義的 command_338
不然就用公共事件做吧,這應該沒什麼需要用到腳本的...