| 
 Refreshing original skills names - Whisper -  05-30-2020
 
 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 Bitmapalias 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]](https://i.imgur.com/LJNzcVt.png) 
 BTW — I promise that I will watch RGSS programming Course before posting any other thread
   
 
 RE: Refreshing original skills names - kyonides -  05-31-2020
 
 The problem seems to be you're permanently modifying the text with gsub! instead of gsub. Of course, gsub doesn't modify the string permanently so you gotta assign it to the args array manually. Since it would be treated as a new string, the tags you've been using would not disappear, and they would be parsed every single time that comment is read by the game engine.
 
 
 RE: Refreshing original skills names - Whisper -  05-31-2020
 
 
  (05-31-2020, 02:31 AM)kyonides Wrote:  The problem seems to be you're permanently modifying the text with gsub! instead of gsub. Of course, gsub doesn't modify the string permanently so you gotta assign it to the args array manually. Since it would be treated as a new string, the tags you've been using would not disappear, and they would be parsed every single time that comment is read by the game engine. I still didn't know what to do. The script I was using isn't mine, I found it as no copyrighted advice for someone's else request (as far as I remember), but its not important anymore, since I'm not using it now. I have tried to adjust this script with my close-to-zero programming skills but it was futile, so I tried to find the author of the script I've used to credit him. I couldn't find it, but I've found different script instead, and this one works for me
   
 http://www.hbgames.org/forums/viewtopic.php?f=11&t=74073
 
 Thank you, kyonides. I found that thanks to you
   
 
 
 |