Code:
#==============================================================================|
# ** Script Info |
#------------------------------------------------------------------------------|
# * Script Name |
# DoubleX RMVXA Item Triggers |
#------------------------------------------------------------------------------|
# * Functions |
# Sets some skills/items to trigger effects before and/or after being used |
#------------------------------------------------------------------------------|
# * Terms Of Use |
# You shall keep this script's Script Info part's contents intact |
# You shalln't claim that this script is written by anyone other than |
# DoubleX or his aliases |
# None of the above applies to DoubleX or his aliases |
#------------------------------------------------------------------------------|
# * Prerequisites |
# Abilities: |
# 1. Decent RGSS3 scripting proficiency to fully utilize this script |
#------------------------------------------------------------------------------|
# * Instructions |
# 1. Open the script editor and put this script into an open slot between |
# Materials and Main, save to take effect. |
#------------------------------------------------------------------------------|
# * Links |
# Script Usage 101: |
# 1. forums.rpgmakerweb.com/index.php?/topic/32752-rmvxa-script-usage-101/ |
# 2. rpgmakervxace.net/topic/27475-rmvxa-script-usage-101/ |
# This script: |
# 1. https://pastebin.com/FUeT6D0u |
# Mentioned Patreon Supporters: |
# https://www.patreon.com/posts/71738797 |
#------------------------------------------------------------------------------|
# * Authors |
# DoubleX |
#------------------------------------------------------------------------------|
# * Changelog |
# v1.01a(GMT 1300 26-2-2016): |
# 1. itcx and itax take the skill/item calling them as an argument as well |
# 2. Fixed passing Scene_battle instead of a battler into itcx/itax bug |
# v1.00b(GMT 0400 7-11-2015): |
# 1. Notetag values are now symbols of methods in the configuration regions |
# 2. This script doesn't need DoubleX RMVXA Item Triggers Compatibility to |
# be compatible with all its addressed scripts |
# 3. Further improved this script's compatibility, efficiency and simplicity|
# v1.00a(GMT 1300 11-5-2015): |
# 1. 1st version of this script finished |
#==============================================================================|
#==============================================================================|
# ** Notetag Info |
#------------------------------------------------------------------------------|
# * Skill/Item Notetags: |
# 1. <timing item trigger: itcx, itax> |
# - Sets a skill/item to trigger itax when timing and itcx are met |
# - It only works in battles using the default battle scene(Scene_Battle)|
# - timing can be pre, post or custom timings set by you |
# - pre means right before using the skill/item |
# - post means right after using the skill/item |
# - timing must only consist of alphanumeric characters |
# - itcx can be set in Item Trigger Condition Notetag Values |
# - itax can be set in Item Trigger Action Notetag Values |
#==============================================================================|
#==============================================================================|
# ** Script Call Info |
#------------------------------------------------------------------------------|
# * Scene manipulations |
# 1. exec_item_triggers(item, timing) |
# - Executes all item triggers with timing timing of item item |
#==============================================================================|
($doublex_rmvxa ||= {})[:Item_Triggers] = "v1.01a"
#==============================================================================|
# ** Script Configurations |
# You only need to edit this part as it's about what this script does |
#------------------------------------------------------------------------------|
module DoubleX_RMVXA
module Item_Triggers
#--------------------------------------------------------------------------|
# Item Trigger Condition Notetag Values |
# - Setups itcx used by <timing item trigger: itcx, itax> |
#--------------------------------------------------------------------------|
# itcx are used at:
# 1. Scene_Battle
# - it.send(trigger[1], self) if it.send(trigger[0], self) in
# exec_item_triggers
# itcx are strings of names of methods under DoubleX_RMVXA::Item_Triggers
# itcx names can only use alphanumeric characters
# battler is the battler using item
# item is the skill/item using the itcx
# The below itcx are examples added to help you set your itcx
# You can freely use, rewrite and/or delete these examples
# Sets the item trigger condition as always true
def self.itc1(battler, item)
true
end
# Sets the item trigger condition as always false
def self.itc2(battler, item)
false
end
# Sets the item trigger condition as needing switch with id x to be on
def self.itc3(battler, item)
$game_switches[x]
end
# Adds new itcx here
#--------------------------------------------------------------------------|
# Item Trigger Action Notetag Values |
# - Setups itax used by <timing item trigger: itcx, itax> |
#--------------------------------------------------------------------------|
# itax are used at:
# 1. Scene_Battle
# - it.send(trigger[1], self) if it.send(trigger[0], self) in
# exec_item_triggers
# itax are strings of names of methods under DoubleX_RMVXA::Item_Triggers
# itax names can only use alphanumeric characters
# battler is the battler using item
# item is the skill/item using the itax
# The below itax are examples added to help you set your itax
# You can freely use, rewrite and/or delete these examples
# Sets the item trigger action as what Special Effect Escape does
def self.ita1(battler, item)
battler.hide
end
# Sets the item trigger action as calling common event with id
# common_event_id
def self.ita2(battler, item)
$game_temp.reserve_common_event(common_event_id)
SceneManager.scene.process_event
end
# Sets the item trigger action as executing damage equal to the value of
# game variable with id x to self with type equal to that of skill with id
# equal to y
def self.ita3(battler, item)
battler.result.clear
battler.result.make_damage($game_variables[x], $data_skills[y])
battler.execute_damage(battler)
end
# Adds new itax here
end # Item_Triggers
end # DoubleX_RMVXA
#==============================================================================|
# ** Script Implementations |
# You need not edit this part as it's about how this script works |
#------------------------------------------------------------------------------|
# * Script Support Info: |
# 1. Prerequisites |
# - Some RGSS3 scripting proficiency to fully comprehend this script |
# 2. Method documentation |
# - The 1st part describes why this method's rewritten/aliased for |
# rewritten/aliased methods or what the method does for new methods |
# - The 2nd part describes what the arguments of the method are |
# - The 3rd part informs which version rewritten, aliased or created this|
# method |
# - The 4th part informs whether the method's rewritten or new |
# - The 5th part informs whether the method's a real or potential hotspot|
# - The 6th part describes how this method works for new methods only, |
# and describes the parts added, removed or rewritten for rewritten or |
# aliased methods only |
# Example: |
# #--------------------------------------------------------------------------| |
# # Why rewrite/alias/What this method does | |
# #--------------------------------------------------------------------------| |
# # *argv: What these variables are |
# # &argb: What this block is |
# def def_name(*argv, &argb) # Version X+; Rewrite/New; Hotspot |
# # Added/Removed/Rewritten to do something/How this method works |
# def_name_code |
# # |
# end # def_name |
#------------------------------------------------------------------------------|
class << DataManager # Edit
alias load_database_item_triggers load_database
def load_database
load_database_item_triggers
# Added
$data_skills.each { |obj| obj.load_item_triggers_notes if obj }
$data_items.each { |obj| obj.load_item_triggers_notes if obj }
#
end # load_database
end # DataManager
class RPG::UsableItem < RPG::BaseItem # Edit
#----------------------------------------------------------------------------|
# New public instance variable |
#----------------------------------------------------------------------------|
attr_accessor :item_triggers # The storage of all item trigger notetags
def load_item_triggers_notes
# Stores all timing, itcx and itax triples from matching lines sequentially
@item_triggers = {}
@note.split(/[\r\n]+/).each { |line|
next unless line =~ /< *(\w+) +item +trigger *: *(\w+) *, *(\w+) *>/i
(@item_triggers[$1.downcase.to_sym] ||= []).push(
[$2.downcase.to_sym, $3.downcase.to_sym])
}
#
end # load_item_triggers_notes
end # RPG::UsableItem
class Scene_Battle < Scene_Base # Edit
alias use_item_triggers use_item
def use_item
# Added to execute the item triggers with timing pre
item = @subject.current_action.item
exec_item_triggers(item, :pre)
#
use_item_triggers
# Added to execute the item triggers with timing post
exec_item_triggers(item, :post)
#
end # use_item
#----------------------------------------------------------------------------|
# Triggers each item action when each respective condition's met |
#----------------------------------------------------------------------------|
# item: The item triggering its actions
# timing: The timing of the item triggering its actions
def exec_item_triggers(item, timing)
# Evaluates each itcx to see if its corresponding itax should be evaluated
return unless triggers = item.item_triggers[timing]
it = DoubleX_RMVXA::Item_Triggers
triggers.each { |trigger|
it.send(trigger[1], @subject, item) if it.send(trigger[0], @subject, item)
}
#
end # exec_item_triggers
end # Scene_Battle
#------------------------------------------------------------------------------|
#==============================================================================|