[XP] Weapon Specific Skills

Started by Aqua, July 29, 2009, 02:04:12 pm

Previous topic - Next topic

Aqua

July 29, 2009, 02:04:12 pm Last Edit: September 28, 2009, 07:40:37 pm by Aqua
Weapon Specific Skills
Authors: Aqua
Version: 1.1
Type: Skill Limitation Add-on
Key Term: Custom Skill System



Introduction

This script makes it so that some skills can only be used when a certain weapon type is equipped.
For example, it shouldn't be possible to use a skill that shoots a bullet when you're equipped with a sword.


Features


  • Easy Configuration
  • Skills can be set to be used by any weapon type, one weapon type, or only a few weapon types.
  • Should be compatible with all battle systems.



Screenshots

Spoiler: ShowHide



Demo

[link]


Script

Spoiler: ShowHide
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=#
# Weapon Specific Skills Script by TerreAqua
# Version: 1.1
# Type: Skill Limitation Add-on
# Key Term: Custom Skill System
# Date: 7/29/09
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=#

#===============================================================================
# Information
#-------------------------------------------------------------------------------
#
#   This script makes it so that some skills can only be used when a certain
#   weapon type is equipped.
#   For example, it shouldn't be possible to use a skill that shoots a bullet
#   when you're equipped with a sword.
#
#   Note: Should be compatible with all battle systems.
#
#   If you need to contact me about this script, please go to:
#   http://forum.chaos-project.com
#
#   You should have only gotten this script from http://chaos-project.com
#   Please let me know if you have found it somewhere else.
#===============================================================================
module Aqua
  module WeaponSpecificSkills
#:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~#
#:~:~:~:~:~:~:~:~:~:~::~:~:~: Instructions :~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~#
#:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~#
#===============================================================================
#
# Configure DUMMY_ELEMENT to include all the elements that are used for weapon
# types.
# Each weapon should have at least one of the dummy elements.
#
# Skills without a dummy element can be used with any weapon.
# Skills with 1 dummy element can only be used by that weapon type.
# Skills with multiple dummy elements can be used by multiple weapon types.
#
#===============================================================================

DUMMY_ELEMENT = [17, 18, 19, 20]

#:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~#
#:~:~:~:~:~:~:~:~:~:~:~:~  End Configure Area  :~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~#
#:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~#
  end
end

#===============================================================================
# Credits:
# Aqua (aka TerreAqua) for making this.
# vacancydenied for requesting it.
# Starrodkirby86 for just being him :)
#===============================================================================

#===============================================================================
#  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.
# # 
# #-----------------------------------------------------------------------------
#===============================================================================

class Game_Actor
  alias aqua_weapon_specific_skill_can_use? skill_can_use?
  def skill_can_use?(skill_id)
    for i in 0...Aqua::WeaponSpecificSkills::DUMMY_ELEMENT.size
      dummyele = Aqua::WeaponSpecificSkills::DUMMY_ELEMENT[i]
      weapon = $data_weapons[self.weapon_id]
      if weapon == nil && $data_skills[skill_id].element_set.include?(dummyele)
        return false
      end
      if $data_skills[skill_id].element_set.include?(dummyele) &&
          weapon.element_set.include?(dummyele)
       return super
      end
    end
    a = Aqua::WeaponSpecificSkills::DUMMY_ELEMENT.any? {|e|
        $data_skills[skill_id].element_set.include?(e)}
    return false if a == true
    aqua_weapon_specific_skill_can_use?(skill_id)
  end
end

if $DUMMY_ELEMENTS != nil
  $DUMMY_ELEMENTS |= Aqua::WeaponSpecificSkills::DUMMY_ELEMENT
else
  $DUMMY_ELEMENTS = Aqua::WeaponSpecificSkills::DUMMY_ELEMENT.clone
end

class Game_Battler
  #--------------------------------------------------------------------------
  # * Fix Elements
  #--------------------------------------------------------------------------
  def elements_correct(elements)
    multiplier = size = 0
    elements.each {|i|
        unless $DUMMY_ELEMENTS.include?(i)
          multiplier += self.element_rate(i)
          size += 1
        end}
    return (size == 0 ? 100 : multiplier/size)
  end
 
end


Put in new slot above name, probably best right under the RTP scripts.


Instructions

Configure DUMMY_ELEMENT to include all the elements that are used for weapon types.
Each weapon should have at least one of the dummy elements.

Skills without a dummy element can be used with any weapon.
Skills with 1 dummy element can only be used by that weapon type.
Skills with multiple dummy elements can be used by multiple weapon types.


Compatibility

Should be compatible with all battle systems


Credits and Thanks


  • Aqua (aka TerreAqua) for making this.
  • vacancydenied for requesting it.
  • Starrodkirby86 for just being him :)



Author's Notes

This was much easier than I thought :P

winkio

 :clap: an all around useful little script.  Always good to see more of these types of scripts going up.

Aqua

I find it kinda funny how I have more comments than actual script :x

Subsonic_Noise

I didn't know how much I needed this for my game before I saw this thread^^
Thanks + level up

G_G

*levels up*

This should go in tons

Aqua

July 29, 2009, 02:34:16 pm #5 Last Edit: July 29, 2009, 02:37:28 pm by Aqua
Eep... there's a bug... major bug :P

So don't use it yet D:


Edit:
Bug fixed :P

Ryex

I no longer keep up with posts in the forum very well. If you have a question or comment, about my work, or in general I welcome PM's. if you make a post in one of my threads and I don't reply with in a day or two feel free to PM me and point it out to me.<br /><br />DropBox, the best free file syncing service there is.<br />

Fantasist

July 31, 2009, 05:37:07 am #7 Last Edit: July 31, 2009, 05:55:51 am by Fantasist
You beat me to it! I was going to complete a slightly different version of this same script. I planned this for my game... Anyway, good work Aqua :) *wants to level up but already did in an other topic just now, so can't*

EDIT: Wait, you used dummy elements for this? Wow, I never thought of that. I made an elaborate configuration for defining weapon types. But I prefer my way, I like to leave my elements as elements.

Anyway, I'll explain my ideas about this feature so maybe you can expand it. Every weapon type has a certain set of skills the user can master. When a certain weapon type has been used a certain number of times, the actor's weapon level increases and new skills are learned. Basically, it's just another class system with certain skills for certain weapon classes and higher levels teach you more abilities. And as always, you can only use the acquired skills if you're wielding a certain weapon type.
Do you like ambient/electronic music? Then you should promote a talented artist! Help out here. (I'm serious. Just listen to his work at least!)


The best of freeware reviews: Gizmo's Freeware Reviews




Aqua

Haha thanks.

Nice idea, Fanta
Looking foward to it.

Fantasist

Oh, don't look forward to it. I just wanted to share the idea but since this is already out, there's no need for me to do it again, not until I start working on my game again. And oh, *levels up*
Do you like ambient/electronic music? Then you should promote a talented artist! Help out here. (I'm serious. Just listen to his work at least!)


The best of freeware reviews: Gizmo's Freeware Reviews




vacancydenied

I can't wait to make full use of this with my project. Hopefully I can learn a thing or two from this =). Thank you for making this script =D
Nothing goes as planned but I keep going forward.

C.C. rOyAl

im  a noob, wat do u mean by dummy element lol  :^_^':
Spoiler: ShowHide

Aqua

Configure DUMMY_ELEMENT to include all the elements that are used for weapon types.
Each weapon should have at least one of the dummy elements.

Skills without a dummy element can be used with any weapon.
Skills with 1 dummy element can only be used by that weapon type.
Skills with multiple dummy elements can be used by multiple weapon types.

You know... in System how there are elements...
And how there are elemental properties for weapons/armors/items/skills? :P

C.C. rOyAl

oh ya! srry i hadnt actually been RMing much so i had to go to database. so i just make an element for weapons such as bullets and switch it to A?
Spoiler: ShowHide

Aqua

On the weapons part of the DB, you just checkmark stuff...

So if it's a gun, you checkmark Gun and stuff... XD

C.C. rOyAl

ok i think i get it. so say i wanted a skill called sure shot for guns only. for the weapon guns i would make an element named guns and in skills where i put sure shot i would check guns?
Spoiler: ShowHide

Aqua

Yes, you would.
You know... I put up a demo for a reason :P

C.C. rOyAl

lol oops i didnt even realize there was one. sorry  :^_^':
Spoiler: ShowHide

samsonite789

I'm having a bit of trouble implementing this script.  I'm trying to use it for my RMXP game but it's not working correctly.

I placed it above main and under my other custom scripts.  I followed the directions in setting a dummy element and when I test it it works fine UNTIL I unequip the required weapon from my character and then go into the Skills menu.  When I do that, the game throws this at me and shuts down:

Script 'Weapon Specific Skills' line 101: NoMethodError occurred
undefined method 'element'set' for nil:NilClass

Not exactly sure what to do...if anyone could help me fix this it would be a terrific help and I would appreciate it very much.  I'll even bake you cookies.


Aqua

Are you saying that you don't have any weapon equipped when it throws the error?

Since... barehands isn't a weapon, and therefore, can't have an element set, that's where the error would be coming from.
Soo...
I'll fix that soon I guess

samsonite789

September 28, 2009, 07:13:52 pm #20 Last Edit: September 28, 2009, 07:26:58 pm by Aqua
Yes, I do not have a weapon equipped when it throws the error.  That makes perfect sense.

I'm going to try adding Guillame's (sp?) multi-slot equipment script in and see if I can get them to work together, since that has the option of allowing barehanded weapons.  I don't know if that would fix the element set problem, but...

I'll play around with it and see if I can't cook something up.  But thanks for the insight!

Cookies coming your way.

Edit:
Me <-- Scripting n00b

What is the method or some such to check if a character has something equipped?  If I can just add another "if" in there checking if they have anything equipped, that might bypass the problem.

Aqua

September 28, 2009, 07:27:30 pm #21 Last Edit: September 28, 2009, 07:41:13 pm by Aqua
Don't double post within 24 hours; it's against the rules.

Lemme fix it right now.

Edit:
Posted edited.
Demo coming later... when my FTP host isn't so slow >.>

samsonite789

My apologies for the double-post.  I didn't realize it was against the rules.

Thank you for the edit!  I must admit, however, I messed around with it and came up with another solution as well.  I also figured out a way to make it work with more than one weapon slot (since barehanded having no element set was the problem).  I'd like to post that here so anyone else with similar problems can fix it as well:

IF USING ONE WEAPON SLOT:
Spoiler: ShowHide

class Game_Actor
  alias aqua_weapon_specific_skill_can_use? skill_can_use?
  def skill_can_use?(skill_id)
    unless $data_weapons[@weapon_id] == nil  <-----ADDED THIS LINE
      for i in 0...Aqua::WeaponSpecificSkills::DUMMY_ELEMENT.size
      dummyele = Aqua::WeaponSpecificSkills::DUMMY_ELEMENT
      weapon = $data_weapons[self.weapon_id]
        if $data_skills[skill_id].element_set.include?(dummyele) &&
             weapon.element_set.include?(dummyele)
          return super
        end
      end
    end
  end
   a = Aqua::WeaponSpecificSkills::DUMMY_ELEMENT.any? {|e|
        $data_skills[skill_id].element_set.include?(e)}
    return false if a == true
    aqua_weapon_specific_skill_can_use?(skill_id)
end


By adding the line:
Quoteunless $data_weapons[@weapon_id] == nil

It just bypasses the whole check if the player doesn't have anything equipped instead of thinking it needs an element set that isn't there.

TO MAKE IT WORK WITH MULTI SLOTS (SPECIFICALLY, GUILLAUME's):

When I tried it with multi-slot equipment (which I am using), there was another problem.  Although it wouldn't bug out, it assumed that if the first equipment slot == nil, then it didn't bother to check the second slot.  Therefore, if I equipped the required weapon in the first hand slot, the skill would work, but if it was in the second, it wouldn't.  So, I did the following:
Spoiler: ShowHide

class Game_Actor
  alias aqua_weapon_specific_skill_can_use? skill_can_use?
  def skill_can_use?(skill_id)
   
      unless $data_weapons[self.weapon_ids[0]] == nil
        for i in 0...Aqua::WeaponSpecificSkills::DUMMY_ELEMENT.size
          dummyele = Aqua::WeaponSpecificSkills::DUMMY_ELEMENT
          weapon = $data_weapons[self.weapon_ids[0]]
              if $data_skills[skill_id].element_set.include?(dummyele) &&
                weapon.element_set.include?(dummyele)
                return super
              end
        end
      end
   
      unless $data_weapons[self.weapon_ids[1]] == nil
        for i in 0...Aqua::WeaponSpecificSkills::DUMMY_ELEMENT.size
          dummyele = Aqua::WeaponSpecificSkills::DUMMY_ELEMENT
          weapon = $data_weapons[self.weapon_ids[1]]
              if $data_skills[skill_id].element_set.include?(dummyele) &&
                weapon.element_set.include?(dummyele)
                return super
              end
           
        end
      end
     
      a = Aqua::WeaponSpecificSkills::DUMMY_ELEMENT.any? {|e|
        $data_skills[skill_id].element_set.include?(e)}
      return false if a == true
      aqua_weapon_specific_skill_can_use?(skill_id)
     
  end
end


By making more than one unless block, it checks each slot independently.  Voila!

Hope this helps anyone else who has the same problem as I did.



ShadowPierce

->Hey, I have 0 scripting experience and I was wondering why this script doesn't work on my game? I currently have these scripts on my game...

Spoiler: ShowHide
Custom shop system by RPG advocate/ Fantasist(Where you can see what item can be equipped by your character & its effects)
Stat allocation system by Blizzard (Lets you customize what your character's stats are)
Ragnarok Online Skill System by Blizzard (Skill Tree system)
One man menu system by Rune (Menu where only the main character is displayed)


I have a hunch that it is in conflict with the stat allocation system but I really like those scripts & don't want to give them up, but I also need this script too... Pleas fix it...

Please & thanks!!! ^^


†

Spoiler: ShowHide
Quote from: Blizzard on February 16, 2011, 03:44:48 pmThere you go. It's the proof that SDK is crap. It's incompatible with itself.
3DS Friend Code: ShowHide
1161-0627-9890

Jackolas

Quotebut I also need this script too

you never NEED a script, you could use it and it makes your game better (if you know what your doing)
also.. look at what order the scripts are placed.


Aqua

Did you set everything up correctly?
Like the Dummy Elements and stuffles?

This script shouldn't conflict with /anything/... O.o

ShadowPierce

->Yep, I've made dummy elements for these weapon types:

Spoiler: ShowHide

*17- Sword
*18- Bow
*19- Javelin
*20- Rod
*21- Axe
*22- Dagger
*23- Fist
(Not sure about my numbering... Oh well...)


I also put their id in the script but when I try the game, the skills with Weapon requirements can't be used... If it's okay with you, I'll send it to you and tell me what's wrong... How can I send it to you?

Please and thanks!!! ^^


†

Spoiler: ShowHide
Quote from: Blizzard on February 16, 2011, 03:44:48 pmThere you go. It's the proof that SDK is crap. It's incompatible with itself.
3DS Friend Code: ShowHide
1161-0627-9890

Aqua

Did you go to the Weapons & Skills tabs in the Database and then add a Checkmark next to the corresponding dummy element?


If you did and it's still not working,
It miiight be RO Skill System... but Iunno XD

ShadowPierce

October 15, 2009, 08:20:18 pm #28 Last Edit: October 15, 2009, 08:41:21 pm by Aqua
->Yep, I did all that and checked everything that might be wrong... I'll try removing my other scripts one by one and post here when it finally works...

Please wait for my reply, I'll tell you when it works...


†

Edit:
->I tried removing everything but it seems that it's still not working... Maybe It's in an event or something? I made an intro NPC that forces the character to learn all his chosen job's skills... Maybe it has something to do with that? By the way, what are those stuffle thing you just said?

Waiting for your reply... Thanks for even replying!!! ^^


†

Aqua Edit:
No double posting within 24 hr :)

Spoiler: ShowHide
Quote from: Blizzard on February 16, 2011, 03:44:48 pmThere you go. It's the proof that SDK is crap. It's incompatible with itself.
3DS Friend Code: ShowHide
1161-0627-9890

Aqua

Make a demo of your game with no music, no extra graphics, and only map.
Zip & upload it on sendspace.com, then give me the link here.

I'll look at it when I have the time.

ShadowPierce

->I uploaded it here, please don't laugh, I'm just a noob...  :^_^': Anyway, here's the link:



Please analyze and reply when you have the time...

Please & thanks!!! ^^


†

Spoiler: ShowHide
Quote from: Blizzard on February 16, 2011, 03:44:48 pmThere you go. It's the proof that SDK is crap. It's incompatible with itself.
3DS Friend Code: ShowHide
1161-0627-9890

Aqua

Okay...First of all...
My script isn't in the demo you provided

And the problem isn't any of the scripts, it's your eventing.
You tried to equip a weapon to the actor when he doesn't have any weapons in the inventory.
You need to add the weapon to the inventory before forcing it to be equipped.

ShadowPierce

->The script wasn't there? Ooops... Very, very, very, very, very, very, very SORRY!!!!  :sorry:

So what's actually wrong is my intro event that forces the character to be equipped with a weapon? Well, I'll try it out now... Thanks for merely even replying...  :yesmaster:

BTW, (  :offtopic: ) what's your nationality?


†

Spoiler: ShowHide
Quote from: Blizzard on February 16, 2011, 03:44:48 pmThere you go. It's the proof that SDK is crap. It's incompatible with itself.
3DS Friend Code: ShowHide
1161-0627-9890

GAX

*Gives Aqua an uber-hug*

I'VE BEEN LOOKING FOR SOMETHING LIKE THIS FOR A WHILE NOW, YOU HAVE ONCE AGAIN SAVED ME!  (And G_G too, I was gonna bug him for something like this XD)

Rule 2: ShowHide
Quote from: Rule No.2Keep your signatures at reasonable size. The pictures in your signature may altogether be no more than 200kB and take up an area of 1600px2. That means 2 pictures of 400x200 are fine, one picture of 800x200 is fine and so on. Also your pictures height must not exceed 200 pixels, width can be as big as you want as long as your pictures match the other criteria. Every signature not matching this criteria is a subject of the moderator team to remove and leave this rule as message in your signature.

Aqua

Quote from: ShadowPierce on October 19, 2009, 04:56:32 am
->The script wasn't there? Ooops... Very, very, very, very, very, very, very SORRY!!!!  :sorry:

So what's actually wrong is my intro event that forces the character to be equipped with a weapon? Well, I'll try it out now... Thanks for merely even replying...  :yesmaster:

BTW, (  :offtopic: ) what's your nationality?


†

Yeah, you can't force the actor to equip a weapon when he doesn't have it in the inventory.
You need to add it first.

I'm Chinese

Quote from: GuardianAngelX72 on October 19, 2009, 05:16:57 am
*Gives Aqua an uber-hug*

I'VE BEEN LOOKING FOR SOMETHING LIKE THIS FOR A WHILE NOW, YOU HAVE ONCE AGAIN SAVED ME!  (And G_G too, I was gonna bug him for something like this XD)

*gasp*
An uber-hug?
Is that... contagious? D:

Murd

Is there any possibility to make skills that requires a shield (eg. Shield Slam, Shield Stun)? Or this script is only for weapons only..

Silentknight72

Did you know that this topic is almost a year old? Maybe you could just change the script or ask someone to do it.
Sigs: ShowHide






WhiteRose

His question was relevant and the author is still active, so his post doesn't break any rules.

As for your question, Murd, that is not possible with the script as it is now, but should be with a simple edit. Once Aqua gets back from her vacation, I'm sure she'll take a look at it for you.

Silentknight72

But he can make a new topic instead of that, right? maybe.....
Sigs: ShowHide






Lanzer

hey aqua can you remake it to work with armors D=?
kinda shield slam (requires shield) , mighty guard (requires armor) etc
thanks ;3




Wizered67

In order to do that you would have to do some editing so that it checks your shield instead of your weapon.

Lanzer

no, i tried everything it keeps me sending errors since i modded the weapons part for armor1, armor2 etc
besides the weapon database is only for weapon reading so i requested aqua to rework his addon =) to change the weapon for armor accessor




Grogy

hello, kinda retarded that this is a major necro post BUT
I've been searching for this kind of script, but that it works with armors, too (maybe by using the element defense things)
Anyway, thanks

Imanton

Seems it is does not work with "Tankentai Sideview Battle System: Actor Advanced Status" for custom slots. i would like to add separate slot for a bot but wont work, i know it works because i got it to work on a different project on the shield slot. oh, and the demo link went down.

gmaker808

This script is awesome but i wanted to know what would it take to change this so that instead of using a specific weapon can you make it so it's a specific Class
Example: Squire and Knights use swords but Squires can use First Aid and knights can use Break Helmet. you can only use the skill if you are that class.

ThallionDarkshine

Can't you set that up in the database by making a certain class learn a skill?

gmaker808

oops i forgot to say im using tons of add on - Equap SKill Script so if i put a skill on the sword any one equiping the sword can learn the skill i want to be able to specify.

ThallionDarkshine

Alright, I edited it for you. Just set the element efficiency of the class to anything other than C to allow that class to use the skill.

#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=#
# Weapon Specific Skills Script by TerreAqua
# Version: 1.1
# Type: Skill Limitation Add-on
# Key Term: Custom Skill System
# Date: 7/29/09
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=#

#===============================================================================
# Information
#-------------------------------------------------------------------------------
#
#   This script makes it so that some skills can only be used when a certain
#   weapon type is equipped.
#   For example, it shouldn't be possible to use a skill that shoots a bullet
#   when you're equipped with a sword.
#
#   Note: Should be compatible with all battle systems.
#
#   If you need to contact me about this script, please go to:
#   http://forum.chaos-project.com
#
#   You should have only gotten this script from http://chaos-project.com
#   Please let me know if you have found it somewhere else.
#===============================================================================
module Aqua
  module WeaponSpecificSkills
#:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~#
#:~:~:~:~:~:~:~:~:~:~::~:~:~: Instructions :~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~#
#:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~#
#===============================================================================
#
# Configure DUMMY_ELEMENT to include all the elements that are used for weapon
# types.
# Each weapon should have at least one of the dummy elements.
#
# Skills without a dummy element can be used with any weapon.
# Skills with 1 dummy element can only be used by that weapon type.
# Skills with multiple dummy elements can be used by multiple weapon types.
#
#===============================================================================

DUMMY_ELEMENT = [17, 18, 19, 20]

#:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~#
#:~:~:~:~:~:~:~:~:~:~:~:~  End Configure Area  :~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~#
#:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~:~#
  end
end

#===============================================================================
# Credits:
# Aqua (aka TerreAqua) for making this.
# vacancydenied for requesting it.
# Starrodkirby86 for just being him :)
#===============================================================================

#===============================================================================
#  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.
# # 
# #-----------------------------------------------------------------------------
#===============================================================================

class Game_Actor
  alias aqua_weapon_specific_skill_can_use? skill_can_use?
  def skill_can_use?(skill_id)
    for i in 0...Aqua::WeaponSpecificSkills::DUMMY_ELEMENT.size
      dummyele = Aqua::WeaponSpecificSkills::DUMMY_ELEMENT[i]
      weapon = $data_weapons[self.weapon_id]
      clss = $data_classes[self.class_id]
      if weapon == nil && $data_skills[skill_id].element_set.include?(dummyele)
        return false
      end
      if $data_skills[skill_id].element_set.include?(dummyele) &&
          weapon.element_set.include?(dummyele) && clss.element_ranks[dummyele] != 3
       return super
      end
    end
    a = Aqua::WeaponSpecificSkills::DUMMY_ELEMENT.any? {|e|
        $data_skills[skill_id].element_set.include?(e)}
    return false if a == true
    aqua_weapon_specific_skill_can_use?(skill_id)
  end
end

if $DUMMY_ELEMENTS != nil
  $DUMMY_ELEMENTS |= Aqua::WeaponSpecificSkills::DUMMY_ELEMENT
else
  $DUMMY_ELEMENTS = Aqua::WeaponSpecificSkills::DUMMY_ELEMENT.clone
end

class Game_Battler
  #--------------------------------------------------------------------------
  # * Fix Elements
  #--------------------------------------------------------------------------
  def elements_correct(elements)
    multiplier = size = 0
    elements.each {|i|
        unless $DUMMY_ELEMENTS.include?(i)
          multiplier += self.element_rate(i)
          size += 1
        end}
    return (size == 0 ? 100 : multiplier/size)
  end
 
end

Jotari

Hey, so, pretty far in the future now, not sure if you're still around, but I have a question. What about enemies? Enemies don't have weapons, so if I set a skill up to work with only certain weapons it means enemies can't use that skill. That kind of sucks because my game has enemies using all the same skills as the player for the most part. I guess I could make two copies of every skill, one for players and one for enemies, but that's very troublesome if stats needed to be altered. Is there a way to give all enemies access to all skills without this limitation?

KK20

January 23, 2024, 02:06:27 pm #49 Last Edit: January 23, 2024, 02:08:51 pm by KK20
Did you try adding the script in a project? Looking at the code, the logic is only being applied to Game Actors, not Game Enemies. Your concern shouldn't be an issue.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

Jotari

Quote from: KK20 on January 23, 2024, 02:06:27 pmDid you try adding the script in a project? Looking at the code, the logic is only being applied to Game Actors, not Game Enemies. Your concern shouldn't be an issue.
Yes, I tested it. Made a skill need an element and then gave an enemy only that skill and the enemy's turn just kept ending with nothing happening.

KK20

Worked for me on a new project.

You sure the enemy can naturally use the skill (e.g. has enough SP to satisfy the SP cost)? Remove the script from your project and confirm the enemy is still unable to use the skill.

Otherwise, will need your project files to investigate it further. Highly doubt it's a script compatibility issue; I think it's more of a database configuration issue.

Other Projects
RPG Maker XP Ace  Upgrade RMXP to RMVXA performance!
XPA Tilemap  Tilemap rewrite with many features, including custom resolution!

Nintendo Switch Friend Code: 8310-1917-5318
Discord: KK20 Tyler#8901

Join the CP Discord Server!

Jotari

Opps. Yeah, the issue was just that the enemy I was testing with didn't have enough SP to use the skill in question. Sorry about that. Obvious in retrospect.