Bug on a script - fgsfds - 12-11-2009
I recently found this interesting script, however, there's a serious glitch or I'm not getting this right. If I add this script, it disable my actor's skill EVEN if I set it to target, and usable in battle, in other words, I cannot use any skill. I wanna know if it's just me or there's an error in the script.
(Btw the reason I can't contact the scripter via forums because he might be suddenly inactive or doesn't go to the forum as much, and I don't want to register to a forum where stupidity reigns most of the time)
Edit: Btw I don't think I need to explain which script I'm using because this bug occurred in a new project file as well.
Code: #:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Passive Augments by Xelias
# Version: 1.00
# Type: Skill Enhacement
# Date v1.00: 6.12.2009
#
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#
# This work is protected by the following license:
# #----------------------------------------------------------------------------
# #
# # Creative Commons - Attribution-NonCommercial-ShareAlike 3.0 Unported
# # ( http://creativecommons.org/licenses/by-nc-sa/3.0/ )
# #
# # You are free:
# #
# # to Share - to copy, distribute and transmit the work
# # to Remix - to adapt the work
# #
# # Under the following conditions:
# #
# # Attribution. You must attribute the work in the manner specified by the
# # author or licensor (but not in any way that suggests that they endorse you
# # or your use of the work).
# #
# # Noncommercial. You may not use this work for commercial purposes.
# #
# # Share alike. If you alter, transform, or build upon this work, you may
# # distribute the resulting work only under the same or similar license to
# # this one.
# #
# # - For any reuse or distribution, you must make clear to others the license
# # terms of this work. The best way to do this is with a link to this web
# # page.
# #
# # - Any of the above conditions can be waived if you get permission from the
# # copyright holder.
# #
# # - Nothing in this license impairs or restricts the author's moral rights.
# #
# #----------------------------------------------------------------------------
# This script creates "Passive Skills". The "Passive Skills" you list in
# PASSIVE_SKILLS_IDS = [] are displayed in a separate menu.
# They are simple skills you can give an Icon, a name, a description...
# You can change the menu's name in PASSIVE_WORD = "Augments"
# Replace "Augments" by whatever name you want.
#
# Passive Skills only work on actors !
#
# Passive skills effects are listed here :
#
# GUARD_PLUS will decrease even more the damage taken while defending.
# MP_SHIELD will allow damage to be inflicted on SP instead of HP until you run out of SP.
# MARTYR allows the character to gain SP when taking damage
# INQUISITOR allows the character to gain SP when dealing physical damage.
# WARMAGE allows the character to gain SP when dealing damage with spells.
# BLOOD_PRICE allows the character to pay HP instead of SP. HP cost is SP cost*5
# DEMI_MP allows the character to cast spells for half the SP cost
# TURBO_MP doubles the SP cost as well as the power of the skills.
# SPELLBREAKER increases the damage dealt by spells when you have low HP
# ADRENALINE increases the damage dealt by attacks when you have low HP
# LAST_STAND decreases the damage taken when you have low HP
# CHARGED_ATTACKS increases the power of physical attacks for 6 SP a hit until you run out of SP.
# BRAWLER allows you to inflict more damage when no weapons are equipped. Note that
# thanks to this script, bare-handed attacks are available. Just modify the BARE_ANIMATION_SELF_ID
# and BARE_ANIMATION_ID to modify the animations that play on the attacker and on the enemy
# while attacking without weapons, respectively.
# CRITICAL_BOOST increases the critical hit ratio
# FOCUS slightly increases the damage dealt by attacks when at full HP
# SERENITY slightly increases the damage dealt by spells when at full HP
# ONCE_MORE allows the actor to survive all hits when his HP are higher than 1 : then his
# HP will become 1, and next strike will be deadly. Think about Kingdom Hearts for this one.
# LEARNING allows the actor to learn blue magic. This blue magic is set in BLUE_SKILLS_IDS = []
# HEALER increases the potency of healing spells and objects on the actor.
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
PASSIVE_SKILLS_IDS = [81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99]
PASSIVE_WORD = "Passive"
GUARD_PLUS_ID = 81
MP_SHIELD_ID = 82
MARTYR_ID = 83
INQUISITOR_ID = 84
WARMAGE_ID = 85
BLOOD_PRICE_ID = 86
DEMI_MP_ID = 87
TURBO_MP_ID = 88
SPELLBREAKER_ID = 89
ADRENALINE_ID = 90
LAST_STAND_ID = 91
CHARGED_ATTACKS_ID = 92
BRAWLER_ID = 93
CRITICAL_BOOST_ID = 94
FOCUS_ID = 95
SERENITY_ID = 96
ONCE_MORE_ID = 97
LEARNING_ID = 98
HEALER_ID = 100
BLUE_SKILLS_IDS = [61,62]
BARE_ANIMATION_SELF_ID = 0
BARE_ANIMATION_ID = 4
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
#
# Passive skills can also be used to equip weapons and armors, and to be able to use skills.
# Configure it like that :
#
# When [weapon/armor id] then return [passive skill id]
# When [skill id] then return [passive skill id]
#
# Note that passive skills overwrite class restrictions : if a warrior gets a "Equip Staffs"
# passive ability, he will be able to equip staffs.
#
# On a sad note, all weapons/armors need to be set to a skill in order to be equipped.
# If you put "nil" or "0", the game will crash.
# So set a skill for each different weapon or armor. Default is 100
# The same applies for skills. Skills won't crash, but won't be able to be used. Which is bad.
# However if you put "when skill X then return skill X", the skill will be usable if you have it, which
# means you won't have to learn another passive skill.
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:
module Xelias
def self.ers_config(item)
# weapon configuration
if item.is_a?(RPG::Weapon)
case item.id
# START Weapon Configuration
when 2 then return [100]
# END Weapon Configuration
end
elsif item.is_a?(RPG::Armor)
case item.id
# START Armor Configuration
when 2 then return [100]
# END Armor Configuration
end
end
return [100]
end
def self.req_skill(id)
case id
# START Skill Configuration
when 8 then return 101
end
return
end
end
#==============================================================================
# ? Game_Battler (???? 3)
#------------------------------------------------------------------------------
# ???????????????????? Game_Actor ???? Game_Enemy ??
# ???????????????????
#==============================================================================
class Game_Battler
def attack_effect(attacker)
# ?????????????
self.critical = false
# ??????
hit_result = (rand(100) < attacker.hit)
# ?????
if hit_result == true
# ?????????
atk = [attacker.atk - self.pdef / 2, 0].max
self.damage = atk * (20 + attacker.str) / 20
if attacker.is_a?(Game_Actor) && attacker.atk == 0
atk = [100 + attacker.str/8 - self.pdef / 2, 0].max
self.damage = atk * (20 + attacker.str) / 20
if attacker.skill_learn?(BRAWLER_ID)
atk = [100 + attacker.str/3 - self.pdef / 2, 0].max
self.damage = atk * (20 + attacker.str) / 20
end
# ????
self.damage *= elements_correct(attacker.element_set)
self.damage /= 100
# ????????????
if self.damage > 0
# ????????
if attacker.is_a?(Game_Actor) && attacker.skill_learn?(CRITICAL_BOOST_ID)
if rand(100) < 6 * attacker.dex / self.agi
self.damage *= 2
self.critical = true
end
else
if rand(100) < 4 * attacker.dex / self.agi
self.damage *= 2
self.critical = true
end
end
end
# ????
if self.guarding?
self.damage /= 2
end
if self.is_a?(Game_Actor) && self.guarding? && self.skill_learn?(GUARD_PLUS_ID)
self.damage /= 2
end
end
# ??
if self.damage.abs > 0
amp = [self.damage.abs * 15 / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# ??????
eva = 8 * self.agi / attacker.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
end
# ?????
if hit_result == true
# ????????
remove_states_shock
# HP ?????????
if self.is_a?(Game_Actor) && self.skill_learn?(MARTYR_ID)
sp_recovery = self.damage/10
self.sp += sp_recovery
end
if attacker.is_a?(Game_Actor) && attacker.skill_learn?(INQUISITOR_ID)
sp_recovery = self.damage/10
attacker.sp += sp_recovery
end
if attacker.is_a?(Game_Actor) && attacker.skill_learn?(ADRENALINE_ID) && ((attacker.hp*100)/attacker.maxhp) < 30
self.damage*= 2
end
if attacker.is_a?(Game_Actor) && attacker.skill_learn?(FOCUS_ID) && attacker.hp = attacker.maxhp
self.damage*= 2
end
if self.is_a?(Game_Actor) && self.skill_learn?(LAST_STAND_ID) && ((self.hp*100)/self.maxhp) < 30
self.damage/= 2
end
if attacker.is_a?(Game_Actor) && attacker.skill_learn?(CHARGED_ATTACKS_ID) && attacker.sp > 0
attacker.sp -= 6
self.damage += self.damage/3
end
if self.is_a?(Game_Actor) && self.skill_learn?(ONCE_MORE_ID) && self.hp > 1 && self.damage > self.hp
self.damage = self.hp - 1
end
if self.is_a?(Game_Actor) && self.skill_learn?(MP_SHIELD_ID) && self.sp > 0
self.sp -= self.damage
else
self.hp -= self.damage
end
# ??????
@state_changed = false
states_plus(attacker.plus_state_set)
states_minus(attacker.minus_state_set)
# ?????
else
# ????? "Miss" ???
self.damage = "Miss"
# ?????????????
self.critical = false
end
# ??????
return true
end
#--------------------------------------------------------------------------
# ? ????????
# user : ??????? (????)
# skill : ???
#--------------------------------------------------------------------------
def skill_effect(user, skill)
# ?????????????
self.critical = false
# ????????? HP 1 ?????????? HP ? 0?
# ???????????? HP 0 ???????? HP ? 1 ?????
if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
# ??????
return false
end
# ?????????
effective = false
# ??????? ID ????????????????
effective |= skill.common_event_id > 0
# ??????
hit = skill.hit
if skill.atk_f > 0
hit *= user.hit / 100
end
hit_result = (rand(100) < hit)
# ????????????????????
effective |= hit < 100
# ?????
if hit_result == true
# ?????
power = skill.power + user.atk * skill.atk_f / 100
if power > 0
power -= self.pdef * skill.pdef_f / 200
power -= self.mdef * skill.mdef_f / 200
power = [power, 0].max
end
# ?????
rate = 20
rate += (user.str * skill.str_f / 100)
rate += (user.dex * skill.dex_f / 100)
rate += (user.agi * skill.agi_f / 100)
rate += (user.int * skill.int_f / 100)
# ?????????
self.damage = power * rate / 20
# ????
self.damage *= elements_correct(skill.element_set)
self.damage /= 100
# ????????????
if self.damage > 0
# ????
if self.guarding?
self.damage /= 2
end
if self.is_a?(Game_Actor) && self.guarding? && self.skill_learn?(GUARD_PLUS_ID)
self.damage /= 2
end
end
# ??
if skill.variance > 0 and self.damage.abs > 0
amp = [self.damage.abs * skill.variance / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# ??????
eva = 8 * self.agi / user.dex + self.eva
hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
hit = self.cant_evade? ? 100 : hit
hit_result = (rand(100) < hit)
# ????????????????????
effective |= hit < 100
end
# ?????
if hit_result == true
# ?? 0 ??????????
if skill.power != 0 and skill.atk_f > 0
# ????????
remove_states_shock
# ?????????
effective = true
end
# HP ?????????
last_hp = self.hp
if self.is_a?(Game_Actor) && self.skill_learn?(MARTYR_ID)
sp_recovery = self.damage/10
self.sp += sp_recovery
end
if user.is_a?(Game_Actor) && user.skill_learn?(WARMAGE_ID) && self.damage > 0
sp_recovery = self.damage/10
user.sp += sp_recovery
end
if user.is_a?(Game_Actor) && user.skill_learn?(TURBO_MP_ID) && skill.mdef_f > 0
self.damage*=2
end
if user.is_a?(Game_Actor) && user.skill_learn?(SPELLBREAKER_ID) && skill.mdef_f > 0 && ((user.hp*100)/ user.maxhp) < 30
self.damage*=2
end
if user.is_a?(Game_Actor) && user.skill_learn?(ADRENALINE_ID) && skill.pdef_f > 0 && ((user.hp*100)/ user.maxhp) < 30
self.damage*=2
end
if user.is_a?(Game_Actor) && user.skill_learn?(SERENITY_ID) && skill.mdef_f > 0 && user.hp = user.maxhp
self.damage += self.damage/3
end
if user.is_a?(Game_Actor) && user.skill_learn?(FOCUS_ID) && skill.pdef_f > 0 && user.hp = user.maxhp
self.damage += self.damage/3
end
if self.is_a?(Game_Actor) && self.skill_learn?(LAST_STAND_ID) && ((self.hp*100)/self.maxhp) < 30
self.damage/= 2
end
if self.is_a?(Game_Actor) && self.skill_learn?(ONCE_MORE_ID) && self.hp > 1 && self.damage > self.hp
self.damage = self.hp - 1
end
if self.is_a?(Game_Actor) && self.skill_learn?(HEALER_ID) && self.damage < 0
self.damage *= 2
end
if self.is_a?(Game_Actor) && self.skill_learn?(LEARNING_ID) && BLUE_SKILLS_IDS.include?(skill.id)
learn_skill(skill.id)
end
if self.is_a?(Game_Actor) && self.skill_learn?(MP_SHIELD_ID) && self.sp > 0
self.sp -= self.damage
else
self.hp -= self.damage
end
effective |= self.hp != last_hp
# ??????
@state_changed = false
effective |= states_plus(skill.plus_state_set)
effective |= states_minus(skill.minus_state_set)
# ??? 0 ???
if skill.power == 0
# ????????????
self.damage = "Miss"
# ????????????
unless @state_changed
# ????? "Miss" ???
self.damage = "Miss"
end
end
# ?????
else
# ????? "Miss" ???
self.damage = "Miss"
end
# ????????
unless $game_temp.in_battle
# ????? nil ???
self.damage = nil
end
# ??????
return effective
end
#--------------------------------------------------------------------------
# ? ?????????
# item : ????
#--------------------------------------------------------------------------
def item_effect(item)
# ?????????????
self.critical = false
# ?????????? HP 1 ?????????? HP ? 0?
# ????????????? HP 0 ???????? HP ? 1 ?????
if ((item.scope == 3 or item.scope == 4) and self.hp == 0) or
((item.scope == 5 or item.scope == 6) and self.hp >= 1)
# ??????
return false
end
# ?????????
effective = false
# ??????? ID ????????????????
effective |= item.common_event_id > 0
# ????
hit_result = (rand(100) < item.hit)
# ????????????????????
effective |= item.hit < 100
# ?????
if hit_result == true
# ??????
recover_hp = maxhp * item.recover_hp_rate / 100 + item.recover_hp
recover_sp = maxsp * item.recover_sp_rate / 100 + item.recover_sp
if recover_hp < 0
recover_hp += self.pdef * item.pdef_f / 20
recover_hp += self.mdef * item.mdef_f / 20
recover_hp = [recover_hp, 0].min
end
# ????
recover_hp *= elements_correct(item.element_set)
recover_hp /= 100
recover_sp *= elements_correct(item.element_set)
recover_sp /= 100
# ??
if item.variance > 0 and recover_hp.abs > 0
amp = [recover_hp.abs * item.variance / 100, 1].max
recover_hp += rand(amp+1) + rand(amp+1) - amp
end
if item.variance > 0 and recover_sp.abs > 0
amp = [recover_sp.abs * item.variance / 100, 1].max
recover_sp += rand(amp+1) + rand(amp+1) - amp
end
# ???????????
if recover_hp < 0
# ????
if self.guarding?
recover_hp /= 2
end
end
# HP ????????????????????
if self.is_a?(Game_Actor) && self.skill_learn?(HEALER_ID) && recover.hp > 0
recover_hp *= 2
end
self.damage = -recover_hp
# HP ??? SP ???
last_hp = self.hp
last_sp = self.sp
self.hp += recover_hp
self.sp += recover_sp
effective |= self.hp != last_hp
effective |= self.sp != last_sp
# ??????
@state_changed = false
effective |= states_plus(item.plus_state_set)
effective |= states_minus(item.minus_state_set)
# ??????????????
if item.parameter_type > 0 and item.parameter_points != 0
# ????????
case item.parameter_type
when 1 # MaxHP
@maxhp_plus += item.parameter_points
when 2 # MaxSP
@maxsp_plus += item.parameter_points
when 3 # ??
@str_plus += item.parameter_points
when 4 # ???
@dex_plus += item.parameter_points
when 5 # ???
@agi_plus += item.parameter_points
when 6 # ??
@int_plus += item.parameter_points
end
# ?????????
effective = true
end
# HP ???????? 0 ???
if item.recover_hp_rate == 0 and item.recover_hp == 0
# ????????????
self.damage = ""
# SP ???????? 0???????????????
if item.recover_sp_rate == 0 and item.recover_sp == 0 and
(item.parameter_type == 0 or item.parameter_points == 0)
# ????????????
unless @state_changed
# ????? "Miss" ???
self.damage = "Miss"
end
end
end
# ?????
else
# ????? "Miss" ???
self.damage = "Miss"
end
# ????????
unless $game_temp.in_battle
# ????? nil ???
self.damage = nil
end
# ??????
return effective
end
#--------------------------------------------------------------------------
# ? ?????????????
#--------------------------------------------------------------------------
def slip_damage_effect
# ???????
self.damage = self.maxhp / 10
# ??
if self.damage.abs > 0
amp = [self.damage.abs * 15 / 100, 1].max
self.damage += rand(amp+1) + rand(amp+1) - amp
end
# HP ?????????
self.hp -= self.damage
# ??????
return true
end
end
class Scene_Battle
def make_skill_action_result
# ??????
@skill = $data_skills[@active_battler.current_action.skill_id]
# ????????????
unless @active_battler.current_action.forcing
# SP ????????????????
unless @active_battler.skill_can_use?(@skill.id)
# ??????????????????
$game_temp.forcing_battler = nil
# ???? 1 ???
@phase4_step = 1
return
end
end
if @active_battler.is_a?(Game_Actor) && @active_battler.skill_learn?(DEMI_MP_ID)
@skill.sp_cost/=2
end
if @active_battler.is_a?(Game_Actor) && @active_battler.skill_learn?(TURBO_MP_ID)
@skill.sp_cost*=2
end
# SP ??
if @active_battler.is_a?(Game_Actor) && @active_battler.skill_learn?(BLOOD_PRICE_ID)
@active_battler.hp -= (@skill.sp_cost *5 )
else
@active_battler.sp -= @skill.sp_cost
end
# ?????????????????
@status_window.refresh
# ????????????????
@help_window.set_text(@skill.name, 1)
# ??????? ID ???
@animation1_id = @skill.animation1_id
@animation2_id = @skill.animation2_id
# ??????? ID ???
@common_event_id = @skill.common_event_id
# ??????????
set_target_battlers(@skill.scope)
# ?????????
for target in @target_battlers
target.skill_effect(@active_battler, @skill)
end
end
end
#==============================================================================
# ? Window_Passive
#------------------------------------------------------------------------------
# ??????????????????????????????????????
#==============================================================================
class Window_Passive < Window_Selectable
#--------------------------------------------------------------------------
# ? ?????????
# actor : ????
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 128, 640, 352)
@actor = actor
@column_max = 2
refresh
self.index = 0
# ????????????????????????????
if $game_temp.in_battle
self.y = 64
self.height = 256
self.back_opacity = 160
end
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def skill
return @data[self.index]
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
for i in 0...@actor.skills.size
skill = $data_skills[@actor.skills[i]]
if skill != nil && PASSIVE_SKILLS_IDS.include?(skill.id)
@data.push(skill)
end
end
# ???? 0 ??????????????????????
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
for i in 0...@item_max
draw_item(i)
end
end
end
#--------------------------------------------------------------------------
# ? ?????
# index : ????
#--------------------------------------------------------------------------
def draw_item(index)
skill = @data[index]
self.contents.font.color = normal_color
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(skill.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
end
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.skill == nil ? "" : self.skill.description)
end
end
#==============================================================================
# ? Scene_Skill
#------------------------------------------------------------------------------
# ??????????????????
#==============================================================================
class Scene_Passive
#--------------------------------------------------------------------------
# ? ?????????
# actor_index : ??????????
#--------------------------------------------------------------------------
def initialize(actor_index = 0, equip_index = 0)
@actor_index = actor_index
end
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
def main
# ???????
@actor = $game_party.actors[@actor_index]
# ???????????????????????????????
@help_window = Window_Help.new
@status_window = Window_SkillStatus.new(@actor)
@skill_window = Window_Passive.new(@actor)
# ?????????????
@skill_window.help_window = @help_window
# ????????????? (?????????????)
@target_window = Window_Target.new
@target_window.visible = false
@target_window.active = false
# ?????????
Graphics.transition
# ??????
loop do
# ????????
Graphics.update
# ???????
Input.update
# ??????
update
# ????????????????
if $scene != self
break
end
end
# ?????????
Graphics.freeze
# ????????
@help_window.dispose
@status_window.dispose
@skill_window.dispose
@target_window.dispose
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def update
# ????????
@help_window.update
@status_window.update
@skill_window.update
@target_window.update
# ?????????????????: update_skill ???
if @skill_window.active
update_skill
return
end
# ???????????????????: update_target ???
if @target_window.active
update_target
return
end
end
#--------------------------------------------------------------------------
# ? ?????? (?????????????????)
#--------------------------------------------------------------------------
def update_skill
# B ??????????
if Input.trigger?(Input::B)
# ????? SE ???
$game_system.se_play($data_system.cancel_se)
# ???????????
$scene = Scene_Menu.new(2)
return
end
# C ??????????
if Input.trigger?(Input::C)
# ????????????????????????
@skill = @skill_window.skill
# ????????
if @skill == nil or not @actor.skill_can_use?(@skill.id)
# ??? SE ???
$game_system.se_play($data_system.buzzer_se)
return
end
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ??????????
if @skill.scope >= 3
# ?????????????????
@skill_window.active = false
@target_window.x = (@skill_window.index + 1) % 2 * 304
@target_window.visible = true
@target_window.active = true
# ???? (??/??) ?????????????
if @skill.scope == 4 || @skill.scope == 6
@target_window.index = -1
elsif @skill.scope == 7
@target_window.index = @actor_index - 10
else
@target_window.index = 0
end
# ????????????
else
# ??????? ID ??????
if @skill.common_event_id > 0
# ?????????????
$game_temp.common_event_id = @skill.common_event_id
# ??????? SE ???
$game_system.se_play(@skill.menu_se)
# SP ??
@actor.sp -= @skill.sp_cost
# ?????????????
@status_window.refresh
@skill_window.refresh
@target_window.refresh
# ??????????
$scene = Scene_Map.new
return
end
end
return
end
# R ??????????
if Input.trigger?(Input::R)
# ???? SE ???
$game_system.se_play($data_system.cursor_se)
# ???????
@actor_index += 1
@actor_index %= $game_party.actors.size
# ????????????
$scene = Scene_Skill.new(@actor_index)
return
end
# L ??????????
if Input.trigger?(Input::L)
# ???? SE ???
$game_system.se_play($data_system.cursor_se)
# ???????
@actor_index += $game_party.actors.size - 1
@actor_index %= $game_party.actors.size
# ????????????
$scene = Scene_Skill.new(@actor_index)
return
end
end
#--------------------------------------------------------------------------
# ? ?????? (???????????????????)
#--------------------------------------------------------------------------
def update_target
# B ??????????
if Input.trigger?(Input::B)
# ????? SE ???
$game_system.se_play($data_system.cancel_se)
# ?????????????
@skill_window.active = true
@target_window.visible = false
@target_window.active = false
return
end
# C ??????????
if Input.trigger?(Input::C)
# SP ????????????????
unless @actor.skill_can_use?(@skill.id)
# ??? SE ???
$game_system.se_play($data_system.buzzer_se)
return
end
# ???????????
if @target_window.index == -1
# ??????????????????
used = false
for i in $game_party.actors
used |= i.skill_effect(@actor, @skill)
end
end
# ????????????
if @target_window.index <= -2
# ??????????????????????
target = $game_party.actors[@target_window.index + 10]
used = target.skill_effect(@actor, @skill)
end
# ???????????
if @target_window.index >= 0
# ??????????????????????
target = $game_party.actors[@target_window.index]
used = target.skill_effect(@actor, @skill)
end
# ?????????
if used
# ??????? SE ???
$game_system.se_play(@skill.menu_se)
# SP ??
@actor.sp -= @skill.sp_cost
# ?????????????
@status_window.refresh
@skill_window.refresh
@target_window.refresh
# ?????
if $game_party.all_dead?
# ??????????????
$scene = Scene_Gameover.new
return
end
# ??????? ID ??????
if @skill.common_event_id > 0
# ?????????????
$game_temp.common_event_id = @skill.common_event_id
# ??????????
$scene = Scene_Map.new
return
end
end
# ????????????
unless used
# ??? SE ???
$game_system.se_play($data_system.buzzer_se)
end
return
end
end
end
#==============================================================================
# ? Scene_Menu
#------------------------------------------------------------------------------
# ???????????????????
#==============================================================================
class Scene_Menu
#--------------------------------------------------------------------------
# ? ?????????
# menu_index : ?????????????
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
end
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
def main
# ????????????
s1 = $data_system.words.item
s2 = $data_system.words.skill
s3 = PASSIVE_WORD
s4 = $data_system.words.equip
s5 = "Ãtat"
s6 = "Sauvegarder"
s7 = "Quitter"
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
@command_window.index = @menu_index
# ??????? 0 ????
if $game_party.actors.size == 0
# ?????????????????????
@command_window.disable_item(0)
@command_window.disable_item(1)
@command_window.disable_item(2)
@command_window.disable_item(3)
end
# ????????
if $game_system.save_disabled
# ?????????
@command_window.disable_item(4)
end
# ?????????????
@playtime_window = Window_PlayTime.new
@playtime_window.x = 0
@playtime_window.y = 224
# ??????????
@steps_window = Window_Steps.new
@steps_window.x = 0
@steps_window.y = 320
# ????????????
@gold_window = Window_Gold.new
@gold_window.x = 0
@gold_window.y = 416
# ?????????????
@status_window = Window_MenuStatus.new
@status_window.x = 160
@status_window.y = 0
# ?????????
Graphics.transition
# ??????
loop do
# ????????
Graphics.update
# ???????
Input.update
# ??????
update
# ????????????????
if $scene != self
break
end
end
# ?????????
Graphics.freeze
# ????????
@command_window.dispose
@playtime_window.dispose
@steps_window.dispose
@gold_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def update
# ????????
@command_window.update
@playtime_window.update
@steps_window.update
@gold_window.update
@status_window.update
# ??????????????????: update_command ???
if @command_window.active
update_command
return
end
# ???????????????????: update_status ???
if @status_window.active
update_status
return
end
end
#--------------------------------------------------------------------------
# ? ?????? (??????????????????)
#--------------------------------------------------------------------------
def update_command
# B ??????????
if Input.trigger?(Input::B)
# ????? SE ???
$game_system.se_play($data_system.cancel_se)
# ??????????
$scene = Scene_Map.new
return
end
# C ??????????
if Input.trigger?(Input::C)
# ??????? 0 ??????????????????????
if $game_party.actors.size == 0 and @command_window.index < 4
# ??? SE ???
$game_system.se_play($data_system.buzzer_se)
return
end
# ???????????????????
case @command_window.index
when 0 # ????
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ???????????
$scene = Scene_Item.new
when 1 # ???
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ???????????????????
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 2 # ???
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ???????????????????
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 3 # ??
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ???????????????????
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 4 # ?????
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ???????????????????
@command_window.active = false
@status_window.active = true
@status_window.index = 0
when 5 # ???
# ????????
if $game_system.save_disabled
# ??? SE ???
$game_system.se_play($data_system.buzzer_se)
return
end
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ??????????
$scene = Scene_Save.new
when 6 # ?????
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ????????????
$scene = Scene_End.new
end
return
end
end
#--------------------------------------------------------------------------
# ? ?????? (???????????????????)
#--------------------------------------------------------------------------
def update_status
# B ??????????
if Input.trigger?(Input::B)
# ????? SE ???
$game_system.se_play($data_system.cancel_se)
# ??????????????????
@command_window.active = true
@status_window.active = false
@status_window.index = -1
return
end
# C ??????????
if Input.trigger?(Input::C)
# ???????????????????
case @command_window.index
when 1 # ???
# ???????????? 2 ?????
if $game_party.actors[@status_window.index].restriction >= 2
# ??? SE ???
$game_system.se_play($data_system.buzzer_se)
return
end
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ??????????
$scene = Scene_Skill.new(@status_window.index)
when 2 # ???
# ???????????? 2 ?????
if $game_party.actors[@status_window.index].restriction >= 2
# ??? SE ???
$game_system.se_play($data_system.buzzer_se)
return
end
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ??????????
$scene = Scene_Passive.new(@status_window.index)
when 3 # ??
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ?????????
$scene = Scene_Equip.new(@status_window.index)
when 4 # ?????
# ?? SE ???
$game_system.se_play($data_system.decision_se)
# ????????????
$scene = Scene_Status.new(@status_window.index)
end
return
end
end
end
#==============================================================================
# ? Window_Skill
#------------------------------------------------------------------------------
# ??????????????????????????????????????
#==============================================================================
class Window_Skill < Window_Selectable
#--------------------------------------------------------------------------
# ? ?????????
# actor : ????
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 128, 640, 352)
@actor = actor
@column_max = 2
refresh
self.index = 0
# ????????????????????????????
if $game_temp.in_battle
self.y = 64
self.height = 256
self.back_opacity = 160
end
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def skill
return @data[self.index]
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
for i in 0...@actor.skills.size
skill = $data_skills[@actor.skills[i]]
if skill != nil && PASSIVE_SKILLS_IDS.include?(skill.id)
elsif skill != nil
@data.push(skill)
end
end
# ???? 0 ??????????????????????
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
self.contents.font.name = $fontface
# self.contents.font.size = $fontsize
for i in 0...@item_max
draw_item(i)
end
end
end
#--------------------------------------------------------------------------
# ? ?????
# index : ????
#--------------------------------------------------------------------------
def draw_item(index)
skill = @data[index]
if @actor.skill_can_use?(skill.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4 + index % 2 * (288 + 32)
y = index / 2 * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(skill.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
if skill.sp_cost > 0
self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
end
end
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.skill == nil ? "" : self.skill.description)
end
end
class Game_Actor < Game_Battler
def animation1_id
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.animation1_id : BARE_ANIMATION_SELF_ID
end
def animation2_id
weapon = $data_weapons[@weapon_id]
return weapon != nil ? weapon.animation2_id : BARE_ANIMATION_ID
end
end
class Scene_Equip
alias update_item_ers_later update_item
def update_item
itemskill = Xelias.ers_config(@item_window.item)
if Input.trigger?(Input::C)
unless (@actor.skill_learn?(itemskill[0]))
$game_system.se_play($data_system.buzzer_se)
return
end
end
update_item_ers_later
end
end
class Game_Battler
alias skill_met? skill_can_use?
def skill_can_use?(skill_id)
data = Xelias.req_skill(skill_id)
unless skill_learn?(data) ? false : skill_met?(skill_id)
return data != nil
end
end
end
Bug on a script - PK8 - 12-11-2009
Moving this to Support. :p
Bug on a script - fgsfds - 12-11-2009
I thought support is for non-rgss1/2? Or did I misread?
Bug on a script - PK8 - 12-11-2009
It's for both, as noted in the forum description. :)
Quote:Ask for help on non-RGSS(2) or RGSS(2) related issues here.
Bug on a script - fgsfds - 12-11-2009
Oh! RGSS2, I misread. Sorry for posting on the wrong section
Bug on a script - Charlie Fleed - 12-11-2009
You know sometimes reading the instructions helps...
Quote:# Passive skills can also be used to equip weapons and armors, and to be able to use skills.
# Configure it like that :
#
# When [weapon/armor id] then return [passive skill id]
# When [skill id] then return [passive skill id]
#
# Note that passive skills overwrite class restrictions : if a warrior gets a "Equip Staffs"
# passive ability, he will be able to equip staffs.
#
# On a sad note, all weapons/armors need to be set to a skill in order to be equipped.
# If you put "nil" or "0", the game will crash.
# So set a skill for each different weapon or armor. Default is 100
# The same applies for skills. Skills won't crash, but won't be able to be used. Which is bad.
# However if you put "when skill X then return skill X", the skill will be usable if you have it, which
# means you won't have to learn another passive skill.
Do you see this piece of code in the script?
Code: def self.req_skill(id)
case id
# START Skill Configuration
when 8 then return 101
end
return
end
You should put all the "dependencies" here, like this:
Code: def self.req_skill(id)
case id
# START Skill Configuration
when 8 then return 101
when 1 then return 1 # Heal requires Heal
when 2 then return 2 # Greater Heal requires Greater Heal
when 3 then return 2 # Mass Heal requires Greater Heal
end
return
end
However, I suggest to change it a little bit:
Code: def self.req_skill(id)
case id
# START Skill Configuration
when 8 then return 101
when 1 then return 1 # Heal requires Heal
when 2 then return 2 # Greater Heal requires Greater Heal
when 3 then return 2 # Mass Heal requires Greater Heal
end
return id
end
See the "return id" line? Now the default behavior is that a skill only needs itself to be learned in order to be used.
And if you don't need this feature at all, change it like this:
Code: def self.req_skill(id)
return id
end
Bug on a script - fgsfds - 12-11-2009
I still have bad english, I always use translator to translate things which is why my sentence makes no sense.
So, if the skill, weapon and equip works the same.. then I have to write every ID for armor.. I want to use some for the equip and weapon, like the usual thing where you put the ID when you want it, not putting the ID that your forced to do.. can that be done?
Bug on a script - Charlie Fleed - 12-11-2009
err... I'm not sure I understand what you're asking...
Bug on a script - fgsfds - 12-11-2009
Like, by default with no specifying on the script, the equipment/weapon doesn't have the effect and its equipable. Then by putting hash or array in the script, then it will have that passive effect embedded in the equip/weapon.
Bug on a script - Charlie Fleed - 12-11-2009
Ok, we need to keep the two things separated: one thing is whether a weapon/armor is equippable or not, and another is the passive skills embedded in it.
The first one is dealt with in the script. The second one is something you need a different script in order to have it (or a rather complex system of events). Usually the scripts that do this are called "Equipment Skills" or something like that. My Skills Learning System has that feature too.
|