Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
 Bug on a script
#1
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
Reply }


Messages In This Thread
Bug on a script - by fgsfds - 12-11-2009, 06:42 AM
Bug on a script - by PK8 - 12-11-2009, 07:47 AM
Bug on a script - by fgsfds - 12-11-2009, 09:28 AM
Bug on a script - by PK8 - 12-11-2009, 12:14 PM
Bug on a script - by fgsfds - 12-11-2009, 12:53 PM
Bug on a script - by Charlie Fleed - 12-11-2009, 12:55 PM
Bug on a script - by fgsfds - 12-11-2009, 01:29 PM
Bug on a script - by Charlie Fleed - 12-11-2009, 04:06 PM
Bug on a script - by fgsfds - 12-11-2009, 04:42 PM
Bug on a script - by Charlie Fleed - 12-11-2009, 05:22 PM
Bug on a script - by fgsfds - 12-11-2009, 06:20 PM
Bug on a script - by fgsfds - 12-15-2009, 03:46 PM
Bug on a script - by Charlie Fleed - 12-16-2009, 04:21 PM
Bug on a script - by fgsfds - 12-16-2009, 07:48 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
   Script compatibility help Lord Vectra 3 3,657 07-25-2021, 11:42 PM
Last Post: DerVVulfman
   Adding face script on Cogwheel's RTAB Battle Status rekkatsu 15 13,189 08-25-2020, 03:09 AM
Last Post: DerVVulfman
   "Wait" in the script Whisper 13 13,926 04-28-2020, 04:06 PM
Last Post: Whisper
   Skill Cooldown script Fenriswolf 11 14,347 12-10-2019, 11:10 AM
Last Post: Fenriswolf
   Help iwth script (RGSS Player crash) Whisper 3 7,714 06-17-2017, 05:03 PM
Last Post: Whisper
   Help modifying a script Keeroh 7 9,100 06-11-2017, 04:43 PM
Last Post: DerVVulfman
Question  Mog Menu script: help me stop the crazy picture movement during transitions Zachariad 4 8,764 05-31-2017, 05:10 AM
Last Post: Zachariad
   Actor names in Quest Script jreagan406 5 7,707 03-07-2017, 08:06 AM
Last Post: JayRay
   Bizarre issue with Lanzer counter script. Steel Beast 6Beets 2 6,666 10-04-2016, 11:46 AM
Last Post: Steel Beast 6Beets
   Moonpearl script Animated Battlers help!! x(( Starmage 11 13,995 05-21-2016, 05:34 AM
Last Post: Starmage



Users browsing this thread: