The RPG Maker Resource Kit

RMRK RPG Maker Creation => VX => VX Scripts Database => Topic started by: modern algebra on February 25, 2008, 01:05:53 PM

Title: Skills that cost HP
Post by: modern algebra on February 25, 2008, 01:05:53 PM
Skills that cost HP
Version: 1.2
Author: modern algebra
Date: February 27, 2008


Description


This script allows you to assign hp cost to skills. This means that you can make it so that a skill can hurt (or heal) the user when he casts it.

Features


Instructions

See inside the header for instructions

Script


Code: [Select]
#======================================================================
#  Skills with HP Cost
#  Author: modern algebra (rmrk.net)
#  Version: 1.2
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#    Instructions:
#      Set up the database below according to instructions
#======================================================================
# ** RPG::Skill
#======================================================================

class RPG::Skill
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * HP Cost
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def hp_cost
    # Default value for skills with undefined HP cost
    cost, percent = 0, 0
    case @id
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    # * Editable Region
    #-----------------------------------------------------------------------------------------------------------------------
    #  For each skill to which you want to assign an hp_cost, set it up like so:
    #      when skill ID
    #         cost = <the amount of HP that you want to subtract from the user. If the number is
    #                     negative, then the user of the skill will be healed by that amount>
    #         percent = <the percentage of max HP you wish to subtract from the user. If negative,
    #                             then the user of the skill will be healed by that percentage>
    #
    #  There are a couple of examples below. Feel free to delete them once you understand
    #  what is required of you
    #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    when 1  # Skill #1 in database
      cost = 10 # The amount of HP to subtract from user
      percent = 20 # The % of maxhp to subtract from user
    when 5
      cost = 100
    when 33
      percent = 10
    end
    percent = percent.to_f / 100
    return cost, percent
  end
end

#=====================================================================
# ** Game_Battler
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#  Summary of Changes:
#      aliased methods - skill_can_use?, skill_effect
#=====================================================================

class Game_Battler
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Skill Can Use?
  #-----------------------------------------------------------------------------------------------------------------------
  #  Added a requirement that a skill cannot be used if the user's HP is less than the HP Cost
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias modalg_hp_cost_skills_can_use? skill_can_use?
  def skill_can_use? (skill)
    if !skill.nil?
      basic, percent = skill.hp_cost
      return false if (basic + (percent*maxhp).to_i) > hp
    end
    return modalg_hp_cost_skills_can_use? (skill)
  end
end

class Scene_Skill
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Skill Effect
  #-----------------------------------------------------------------------------------------------------------------------
  #  Subtract the HP Cost from the user
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias modalg_hp_cost_useskill_7uj3 use_skill_nontarget
  def use_skill_nontarget (*args)
    if !@skill.nil?
      basic, percent = @skill.hp_cost
      @actor.hp -= ((percent*@actor.maxhp).to_i + basic)
    end
    modalg_hp_cost_useskill_7uj3  (*args)
  end
end

class Scene_Battle
  #--------------------------------------------------------------------------
  # * Execute Battle Action: Skill
  #--------------------------------------------------------------------------
  alias mala_hpcost_excut_skill_6yh1 execute_action_skill
  def execute_action_skill (*args)
    mala_hpcost_excut_skill_6yh1 (*args)
    if @active_battler && @active_battler.action && @active_battler.action.skill
      basic, percent = @active_battler.action.skill.hp_cost
      @active_battler.hp -= ((percent*@active_battler.maxhp).to_i + basic)
    end
  end
end

Credit



Thanks


Support


Just post in this topic at rmrk for quick support. I wrote this script very quickly and have not done any extensive testing, so please inform me if any issues arise.

Known Compatibility Issues

It should be compatible with any script that does not perform the same function as this one. If any issues arise, I will be happy to fix them for you.


Creative Commons License
This script by modern algebra is licensed under a Creative Commons Attribution-Non-Commercial-Share Alike 2.5 Canada License.
Title: Re: Skills that cost HP
Post by: GasparXR on February 26, 2008, 12:08:08 AM
This could come in handy for healing spells. Though it would be better if you could set a percentage value or a random value between numbers... But so far this sounds good. I'm definitely using this!

EDIT: I guess not! XD It only works for the user. Oh well. Could come to use sometime.
Title: Re: Skills that cost HP
Post by: modern algebra on February 26, 2008, 08:04:24 AM
You can set healing spells in the database normally. Just set the damage effect to a negative value.
Title: Re: Skills that cost HP
Post by: GasparXR on February 26, 2008, 09:42:20 PM
I know that, but it's a random value. I guess that's okay though, that's why there's such a thing as updating =P I remember in 2000 that you could set a spell to heal... I'll have to check it again.
Title: Re: Skills that cost HP
Post by: modern algebra on February 27, 2008, 11:33:20 AM
random? set variance, pdef_f, and mdef_f to 0 and it will do the exact amount you set in basic effect
Title: Re: Skills that cost HP
Post by: A13x on March 23, 2008, 12:54:40 AM
hate to rain on ur parade but.... this could be done with common events =P
Title: Re: Skills that cost HP
Post by: modern algebra on March 23, 2008, 03:07:03 AM
Yeah, I know that, but it's easier through a script like this.

And also, you aren't able to disable the skill easily if the hero doesn't have enough HP to cast it through events. It's a huge pain. With scripts, it simply doesn't allow you to use the skill if you don't have enough HP to do so.
Title: Re: Skills that cost HP
Post by: ShadowMaster215 on April 02, 2008, 07:10:04 PM
This script also works with MP.  You just have to change few things that have hp in the script. 
Title: Re: Skills that cost HP
Post by: modern algebra on April 02, 2008, 07:19:18 PM
You can set the skill to decrease the user's MP through the database :P
Title: Re: Skills that cost HP
Post by: ShadowMaster215 on April 04, 2008, 07:16:14 PM

Yea. but I wonder we can modify the script to do percent instead.
Title: Re: Skills that cost HP
Post by: KAZRCRW_ME on February 12, 2009, 09:44:53 PM
Yes...Very good script..

I might use this script..
If I found bug or other error I will post in this thread...

Thank you~^^
Title: Re: Skills that cost HP
Post by: DE5PA1R on September 14, 2009, 12:58:56 PM
This is awesome! Thanks a lot.
Title: Re: Skills that cost HP
Post by: Jexxy_63 on October 10, 2009, 09:47:20 AM
Does this work with GubiD's Tactical Battle System VX?
I couldnt get it working on there for some reason. If there is a patch to make it work, or if you know it doesn't work, please get back to me on this one.

Thanks a lot.           Jesse

Ps. You have made all of my favourite work. (Not a big Yanfly fan, not saying Yanfly is bad, just an opinion)
Title: Re: Skills that cost HP
Post by: modern algebra on October 10, 2009, 04:06:24 PM
I don't know if it works with GubiD or not, but I would think it strange not to. Have you tried putting this script below Gubid's TBS in the Script Editor. It should still be above Main.

And thanks for the compliment.
Title: Re: Skills that cost HP
Post by: Jexxy_63 on October 14, 2009, 06:27:09 AM
Yeah, I've tried that. I'm not too skilled at scripting in general, but if I have a problem I can usually find a solution... But this eludes me at every turn... Theres no errors. No leads... Just... Nothing.
Title: Re: Skills that cost HP
Post by: modern algebra on October 14, 2009, 08:14:12 PM
So there aren't any errors or anything - it just isn't being applied?


EDIT::

I just downloaded and tested - it worked for me - the HP was reduced, though there was no damage popup.
Title: Re: Skills that cost HP
Post by: Jexxy_63 on October 17, 2009, 11:48:23 PM
Hmm, I didnt even get that much out of it... What exactly did you do then? I may have written it wrong, or in the wrong place. Hence the fact that Im only human.  xD Lol. And thanks for your help.
Title: Re: Skills that cost HP
Post by: modern algebra on October 17, 2009, 11:53:19 PM
All I did was put it directly above Main and below all parts of Gubid's script
Title: Re: Skills that cost HP
Post by: Lazer Ki on October 18, 2009, 01:10:51 AM
This looks nice...


but I want one for RMXP ;_;
Title: Re: Skills that cost HP
Post by: Aromatic on June 02, 2010, 04:09:55 AM
Hello,
I got an error when using this script.  The error comes when I attempt to use the skill of a hero who does not have any skills yet.

line 61: NoMethodError occurred.
undefined method 'hp_cost' for nil:NilClass

Thanks a bunch!
Title: Re: Skills that cost HP
Post by: modern algebra on June 02, 2010, 10:00:59 AM
I updated the script in the main post. Replace your version with that and see if it works.
Title: Re: Skills that cost HP
Post by: Aromatic on June 02, 2010, 02:21:25 PM
It works perfectly now! Thanks for your quick responses.  I'm using a lot of your scripts because they are just too useful to pass up.  ;D
Title: Re: Skills that cost HP
Post by: skulper34 on December 17, 2010, 01:50:27 AM
Would it be possible to make something with a state like if inflicted with a state all skills that require MP will use up HP instead?
Title: Re: Skills that cost HP
Post by: hiromu656 on December 19, 2010, 09:56:28 AM
I smell my 13th class - heh heh heh :zwink:, the Bloodmage. Great job yet again.
Title: Re: Skills that cost HP
Post by: apoclaydon on December 25, 2010, 12:35:35 AM
hi would it be at all possible to have it so it shows the hp cost with the skill like it dse for mp
Title: Re: Skills that cost HP
Post by: Armisael191 on February 15, 2011, 02:03:06 AM
Hey Modern Algebra, just wanted to say that I can't seem to get this script functioning with Tankentai. I've tried placing this script into a fresh download of the SBS, changed the script to have a skill take 40% of my maximum HP, and when I use the skill, it kills the user.

I was attempting to make an attack that Drained his health and healed all the allies.

I made another attack that damaged all enemies and drained 10% of his Maximum HP, and it took way more than 10%. I've tried placing the script, above, below, all around and upside down in my list of scripts, and still doesn't seem to work. Any idea? I love this script and have a character in my RPG completely based around his skills functioning like this. I'm also not a complete newbie when it comes to editting scripts and customizing them a bit, so I do not think that is the issue. You placed a pretty easy to follow example in the script itself.
Title: Re: Skills that cost HP
Post by: modern algebra on February 15, 2011, 02:47:52 AM
Hmm, it looks like it might not have anything to do with tankentai - just a straight up logic error - totally my fault. I'll fix it.

EDIT::

Alright, I did a quick and messy "fix" and it is now in the first post. It should fix the initial problem, which was that I was subtracting the HP every time the skill hit a target. So 3 targets meant 120% instead of 40%. However, I haven't tested the new fix so I might have screwed up with syntax or any other number of reasons it's dumb not to test things.

Also, now it really might not be compatible with Tankentai, as I directly alias a method in Scene_Battle, which may operate unexpectedly now. So test it out in a new project and see if everything is dandy before putting it in your main project. If I created an incompatibility or created a new error, just let me know and I will address the problem more fully once I have time.
Title: Re: Skills that cost HP
Post by: Armisael191 on February 15, 2011, 04:14:21 AM
Here is the error that I receive now. The skill fires off, but when it goes to calculate the HP done, this happens. I don't actually see the HP get subtracted.

(https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg835.imageshack.us%2Fimg835%2F4137%2Fhperror.jpg&hash=6379fce161befbda1c672d150ac811749d40c330) (http://img835.imageshack.us/i/hperror.jpg/)

Uploaded with ImageShack.us (http://imageshack.us)
Title: Re: Skills that cost HP
Post by: modern algebra on February 15, 2011, 06:30:58 PM
Sorry, dumb mistake. I have again updated the first post so try it again.
Title: Re: Skills that cost HP
Post by: Breezer226 on March 22, 2011, 05:59:31 AM
Getting a similar problem to the guy above. The HP is subtracted after the skill is used, but then I get this error and the game crashes.

(https://rmrk.net/proxy.php?request=http%3A%2F%2Fi1141.photobucket.com%2Falbums%2Fn594%2FBreezer226%2FError.png&hash=3ceb4f50f85b80314133a28b413db795d582c015)
Title: Re: Skills that cost HP
Post by: modern algebra on March 22, 2011, 12:24:24 PM
Are you using a non-default battle system? Either way, you might be able to fix it by replacing:

Code: [Select]
class Scene_Battle
  #--------------------------------------------------------------------------
  # * Execute Battle Action: Skill
  #--------------------------------------------------------------------------
  alias mala_hpcost_excut_skill_6yh1 execute_action_skill
  def execute_action_skill (*args)
    mala_hpcost_excut_skill_6yh1 (*args)
    basic, percent = @active_battler.action.skill.hp_cost
    @active_battler.hp -= ((percent*@active_battler.maxhp).to_i + basic)
  end
end

with:

Code: [Select]
class Scene_Battle
  #--------------------------------------------------------------------------
  # * Execute Battle Action: Skill
  #--------------------------------------------------------------------------
  alias mala_hpcost_excut_skill_6yh1 execute_action_skill
  def execute_action_skill (*args)
    mala_hpcost_excut_skill_6yh1 (*args)
    return if !@active_battler || !@active_battler.action || !@active_battler.action.skill
    basic, percent = @active_battler.action.skill.hp_cost
    @active_battler.hp -= ((percent*@active_battler.maxhp).to_i + basic)
  end
end
Title: Re: Skills that cost HP
Post by: Breezer226 on March 22, 2011, 03:50:25 PM
Ah, that took care of it. Thanks. I was using the Tankentai Side View System, which may have caused the problem. But that code took care of it.
Title: Re: Skills that cost HP
Post by: kathy on November 13, 2011, 08:34:18 PM
How do I set up the displayed cost for a skill? To have either the text be misleading or have a skill cost both MP and HP is very annoying.