Refreshing original skills names
#1
Hey everyone!
I'm using Skills That Consume Items Ver 1.00a by Cogwheel modified to use skill ID rather that its name. Also, I have script that lets me put item amount in almost every place with command \It[#] (it also produces stack level too deep error with game resetting as side effect, but it's ok for now). So I have that skill e.g., "Poisonous Slash [Icon] 0/1", and its works, but only once... so its actually doesn't. Name of the skill is adjusted just once, when I will see it in any window for the first time. If I will currently have 6 poisons it will be "Poisonous Slash [Icon] 6/1" and it won't change even if poisons amount will. So original name of the skill is "Poisonous Slash [Icon] \It[#]/1", but after first look it permanently replaces \It[#] with number and command can't be used again. So I figured out that there should be the way to remember original name of the skill and "refresh" it after each attack/item use. This way skill name would always adjust to the current item amount in possession. I tried to script it by myself, but my scripting skills are close to 0. I'm becoming better in modifying scripts but I don't really have skills to write them. Can someone help me with that? Or maybe someone have different idea to solve the problem with item name adjustment?

So here you have scripts:
Code:
# Skills That Consume Items Ver 1.00a
# Distribution original support URL
# http://members.jcom.home.ne.jp/cogwheel/

#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
#  This class handles the actor. It's used within the Game_Actors class
#  ($game_actors) and refers to the Game_Party class ($game_party).
#==============================================================================

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # * Set Skill Medium (Item(s) used by Skill)
  #--------------------------------------------------------------------------
  def medium(skill_id)
    case $data_skills[skill_id].id
    when 119
      return [["Jad", 1]]
    when 123
      return [["Jad", 1]]
    when 124
      return [["Jad", 2]]
    when 287
      return [["Okruch Duszy", 10]]
    when 288
      return [["Okruch Duszy", 1]]
    end
    return false
  end
  
  #--------------------------------------------------------------------------
  # * Get Item Name
  #--------------------------------------------------------------------------
  def item_name(name)
    for item in $data_items
      if item != nil and name == item.name
        return item.id
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Determine if Skill can be Used
  #     skill_id : skill ID
  #--------------------------------------------------------------------------
  def skill_can_use?(skill_id)
    items = medium(skill_id)
    if items
      for item in items
        id = item_name(item[0])
        if $game_party.item_number(id) < (item[1] == nil ? 1 : item[1])
          return false
        end
      end
    end
    return super
  end
end

#==============================================================================
# ** Scene_Battle (part 4)
#------------------------------------------------------------------------------
#  This class performs battle screen processing.
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # * Make Skill Action Results
  #--------------------------------------------------------------------------
  def make_skill_action_result(battler)
    # Get skill
    @skill = $data_skills[battler.current_action.skill_id]
    # Verification whether or not it is cooperation skill
    speller = synthe?(battler)
    # If not a forcing action
    unless battler.current_action.forcing
      # When with SP and so on is cut off and it becomes not be able to use
      if speller == nil
        unless battler.skill_can_use?(@skill.id)
          # Shift to step 6
          battler.phase = 6
         return
        end
      end
    end
    # SP consumption
    temp = false
    if speller != nil
      for spell in speller
        if spell.current_action.spell_id == 0
          spell.sp -= @skill.sp_cost
        else
          spell.sp -= $data_skills[spell.current_action.spell_id].sp_cost
        end
      # Refreshing the status window
        status_refresh(spell)
      end
    else
      battler.sp -= @skill.sp_cost
      # Refreshing the status window
      status_refresh(battler)
    end
    # Setting animation ID
    battler.anime1 = @skill.animation1_id
    battler.anime2 = @skill.animation2_id
    # Setting common event ID
    battler.event = @skill.common_event_id
    # Setting the object side battler
    set_target_battlers(@skill.scope, battler)
    # Applying the effect of skill
    for target in battler.target
      if speller != nil
        damage = 0
        effective = false
        state_p = []
        state_m = []
        for spell in speller
          if spell.current_action.spell_id != 0
            @skill = $data_skills[spell.current_action.spell_id]
          end
          effective |= target.skill_effect(spell, @skill)
          if target.damage[spell].class != String
            damage += target.damage[spell]
          elsif effective == true
            effect = target.damage[spell]
          end
          state_p += target.state_p[spell]
          state_m += target.state_m[spell]
          target.damage.delete(spell)
          target.state_p.delete(spell)
          target.state_m.delete(spell)
        end
        if damage != 0
          target.damage[battler] = damage
        elsif effective = true
          target.damage[battler] = effect
        end
        target.state_p[battler] = state_p
        target.state_m[battler] = state_m
      else
        target.skill_effect(battler, @skill)
      end
    end
    # If item(s) are used
    if battler.is_a?(Game_Actor)
      items = battler.medium(@skill.id)
      if items
        for item in items
          id = battler.item_name(item[0])
          num = item[1] == nil ? 1 : item[1]
          # Check if consumable              
          if $data_items[id].consumable
            $game_party.gain_item(id, -num)
          end
        end
      end
    end
  end
end

#==============================================================================
# ** Scene_Skill
#------------------------------------------------------------------------------
#  This class performs skill screen processing.
#==============================================================================

class Scene_Skill
  #--------------------------------------------------------------------------
  # * Frame Update (when target window is active)
  #--------------------------------------------------------------------------
  def update_target
    # If B button was pressed
    
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Erase target window
      @skill_window.active = true
      @target_window.visible = false
      @target_window.active = false
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # If unable to use because SP ran out
      unless @actor.skill_can_use?(@skill.id)
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # If target is all
      if @target_window.index == -1
        # Apply skill use effects to entire party
        used = false
        for i in $game_party.actors
          used |= i.skill_effect(@actor, @skill)
        end
      end
      # If target is user
      if @target_window.index <= -2
        # Apply skill use effects to target actor
        target = $game_party.actors[@target_window.index + 10]
        used = target.skill_effect(@actor, @skill)
      end
      # If single target
      if @target_window.index >= 0
        # Apply skill use effects to target actor
        target = $game_party.actors[@target_window.index]
        used = target.skill_effect(@actor, @skill)
      end
      # If skill was used
      if used
        # If item(s) are used
        if @actor.is_a?(Game_Actor)
          items = @actor.medium(@skill.id)
          if items
            for item in items
              id = @actor.item_name(item[0])
              num = item[1] == nil ? 1 : item[1]
              # Check if consumable              
              if $data_items[id].consumable
                $game_party.gain_item(id, -num)
              end
            end
          end
        end
        # Play skill use SE
        $game_system.se_play(@skill.menu_se)
        # Use up SP
        @actor.sp -= @skill.sp_cost
        # Remake each window content
        @status_window.refresh
        @skill_window.refresh
        @target_window.refresh
        # If entire party is dead
        if $game_party.all_dead?
          # Switch to game over screen
          $scene = Scene_Gameover.new
          return
        end
        # If command event ID is valid
        if @skill.common_event_id > 0
          # Command event call reservation
          $game_temp.common_event_id = @skill.common_event_id
          # Switch to map screen
          $scene = Scene_Map.new
          return
        end
      end
      # If skill wasn't used
      unless used
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
      end
      return
    end
  end
end

This is the modification that I use to put item amount in skill name
Code:
class Bitmap
alias variable_sub draw_text
  def draw_text(*args)
   index = args[0].is_a?(Rect) ? 1 : 4
   args[index].gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
   args[index].gsub!(/\\[Ii]t\[([0-9]+)\]/) { $game_party.item_number($1.to_i) }
   variable_sub(*args)
end
end

This is how it looks during battle.
[Image: LJNzcVt.png]

BTW — I promise that I will watch RGSS programming Course before posting any other thread Winking
Reply }


Messages In This Thread
Refreshing original skills names - by Whisper - 05-30-2020, 06:44 PM
RE: Refreshing original skills names - by Whisper - 05-31-2020, 04:35 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
   Handling very long Item Names Mel 4 8,235 09-24-2018, 06:37 PM
Last Post: Mel
   Actor names in Quest Script jreagan406 5 8,636 03-07-2017, 08:06 AM
Last Post: JayRay
   Showing only specific skills in a window Mel 2 5,884 01-12-2016, 01:34 PM
Last Post: Mel
   Syvakal's Conditional Skills And Equipment Crashes Samven 0 3,951 08-02-2011, 01:58 PM
Last Post: Samven
   Help with using KGC's delayed skills prioran 0 3,621 05-07-2010, 11:46 PM
Last Post: prioran
   Skills that restore SP and reactive skills. Admetrynne 5 7,995 03-29-2010, 05:49 PM
Last Post: Admetrynne
   Element transmited to skills by weapons mageone 27 32,474 11-20-2009, 07:44 PM
Last Post: mageone



Users browsing this thread: 3 Guest(s)