Skip to content
Permalink
master
Go to file
 
 
Cannot retrieve contributors at this time
245 lines (211 sloc) 9 KB
#==============================================================================
#
# ▼ Yanfly Engine Ace - Skill Steal v1.00
# -- Last Updated: 2011.12.10
# -- Level: Normal
# -- Requires: n/a
#
#==============================================================================
$imported = {} if $imported.nil?
$imported["YEA-SkillSteal"] = true
#==============================================================================
# ▼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2011.12.10 - Started Script and Finished.
#
#==============================================================================
# ▼ Introduction
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script enables items and skills to have skill stealing properties. When
# an actor uses that said item or skill on an enemy and the enemy has skills
# that can be stolen, that actor will learn all of the skills the enemy has to
# provide. This skill stealing system is madeakin to the Final Fantasy X's
# Lancet skill from Kimahri.
#
#==============================================================================
# ▼ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# To install this script, open up your script editor and copy/paste this script
# to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save.
#
# -----------------------------------------------------------------------------
# Skill Notetags - These notetags go in the skills notebox in the database.
# -----------------------------------------------------------------------------
# <skill steal>
# If this skill targets an enemy, the actor who uses it will learn all of the
# stealable skills the enemy knows in its action list.
#
# <stealable skill>
# A skill with this notetag can be stolen from enemies if it is listed within
# the enemy's action list.
#
# -----------------------------------------------------------------------------
# Item Notetags - These notetags go in the items notebox in the database.
# -----------------------------------------------------------------------------
# <skill steal>
# If this item targets an enemy, the actor who uses it will learn all of the
# stealable skills the enemy knows in its action list.
#
#==============================================================================
# ▼ Compatibility
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
# it will run with RPG Maker VX without adjusting.
#
#==============================================================================
module YEA
module SKILL_STEAL
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# - Battlelog Settings -
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
# These are the various battlelog settings made for skill stealing. Change
# the text and message duration for a successful skill stealing.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
MSG_SKILL_STEAL = "%s learns %s from %s!" # Text for successful steal.
MSG_DURATION = 4 # Lower number = shorter duration.
end # SKILL_STEAL
end # YEA
#==============================================================================
# ▼ Editting anything past this point may potentially result in causing
# computer damage, incontinence, explosion of user's head, coma, death, and/or
# halitosis so edit at your own risk.
#==============================================================================
module YEA
module REGEXP
module USABLEITEM
SKILL_STEAL = /<(?:SKILL_STEAL|skill steal)>/i
STEALABLE_SKILL = /<(?:STEALABLE_SKILL|stealable skill)>/i
end # USABLEITEM
end # REGEXP
end # YEA
#==============================================================================
# ■ DataManager
#==============================================================================
module DataManager
#--------------------------------------------------------------------------
# alias method: load_database
#--------------------------------------------------------------------------
class <<self; alias load_database_ss load_database; end
def self.load_database
load_database_ss
load_notetags_ss
end
#--------------------------------------------------------------------------
# new method: load_notetags_ss
#--------------------------------------------------------------------------
def self.load_notetags_ss
groups = [$data_skills, $data_items]
for group in groups
for obj in group
next if obj.nil?
obj.load_notetags_ss
end
end
end
end # DataManager
#==============================================================================
# ■ RPG::UsableItem
#==============================================================================
class RPG::UsableItem < RPG::BaseItem
#--------------------------------------------------------------------------
# public instance variables
#--------------------------------------------------------------------------
attr_accessor :skill_steal
attr_accessor :stealable_skill
#--------------------------------------------------------------------------
# common cache: load_notetags_ss
#--------------------------------------------------------------------------
def load_notetags_ss
#---
self.note.split(/[\r\n]+/).each { |line|
case line
#---
when YEA::REGEXP::USABLEITEM::SKILL_STEAL
@skill_steal = true
when YEA::REGEXP::USABLEITEM::STEALABLE_SKILL
next unless self.is_a?(RPG::Skill)
@stealable_skill = true
#---
end
} # self.note.split
#---
end
end # RPG::UsableItem
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
#--------------------------------------------------------------------------
# alias method: item_user_effect
#--------------------------------------------------------------------------
alias game_battler_item_user_effect_ss item_user_effect
def item_user_effect(user, item)
game_battler_item_user_effect_ss(user, item)
item_skill_steal_effect(user, item)
end
#--------------------------------------------------------------------------
# new method: item_skill_steal_effect
#--------------------------------------------------------------------------
def item_skill_steal_effect(user, item)
return unless item.skill_steal
return unless user.actor?
return if self.actor?
for skill in stealable_skills
next if user.skill_learn?(skill)
@result.success = true
break
end
end
end # Game_Battler
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# stealable_skills
#--------------------------------------------------------------------------
def stealable_skills
array = []
for action in enemy.actions
skill = $data_skills[action.skill_id]
array.push(skill) if skill.stealable_skill
end
return array
end
end # Game_Enemy
#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# alias method: apply_item_effects
#--------------------------------------------------------------------------
alias scene_battle_apply_item_effects_ss apply_item_effects
def apply_item_effects(target, item)
scene_battle_apply_item_effects_ss(target, item)
apply_skill_steal(target, item)
end
#--------------------------------------------------------------------------
# new method: apply_skill_steal
#--------------------------------------------------------------------------
def apply_skill_steal(target, item)
return unless item.skill_steal
return if target.actor?
return unless @subject.actor?
for skill in target.stealable_skills
next if @subject.skill_learn?(skill)
@subject.learn_skill(skill.id)
string = YEA::SKILL_STEAL::MSG_SKILL_STEAL
skill_text = sprintf("\\i[%d]%s", skill.icon_index, skill.name)
text = sprintf(string, @subject.name, skill_text, target.name)
@log_window.add_text(text)
YEA::SKILL_STEAL::MSG_DURATION.times do @log_window.wait end
@log_window.back_one
end
end
end # Scene_Battle
#==============================================================================
#
# ▼ End of File
#
#==============================================================================
You can’t perform that action at this time.