[XP] Legacy Class Change

Started by legacyblade, August 26, 2008, 06:23:45 pm

Previous topic - Next topic

legacyblade

August 26, 2008, 06:23:45 pm Last Edit: April 26, 2010, 09:34:26 pm by legacyblade
Legacy Class Change
Authors: legacyblade
Version: 1.68
Type: Class Change Script
Key Term: Misc System



Introduction

After awhile of searching through script databases, I was unsuccessful at finding a class changing script that did what I wanted it to do. I found one that was sort of close, but didn't work with BlizzABS, or any other ABS for that matter, and that just didn't work for me. So, I decided to make one, and I think it turned out quite well. The system is reminiscent of Final Fantasy Tactics Advanced.


Features


  • Actor Specific Classes
    Define Special Classes that are unlocked for an actor only by a script call (in case the player needs to pay for special training to unlock said class)


  • Class Level Requirements
    Define how many times an actor must level up while using a certain class/classes to unlock another class. (you can make the "Alchemist" class require 3 levels as a mage, and 3 levels as a cleric). The system is so versatile, that you can even require levels in Special Classes!


  • Multiline class descriptions
    Define descriptions for each class that will be displayed in the class change window. (supports multiple lines of description!)


  • Class Specific Skills
    Class Specific Skills. This allows you to set skills as class specific. Class specific skills are only availible when an actor is a class that the skill is specific to. You can even set a skill specific to multiple classes (so the Paladin can use heal if he learned it as a cleric, so the Gladiator can use "tackle" if he learned it as a lancer, etc.)


  • Linked Actor System
    Linked Actor system. This allows you to define actors that, when they change their class, change the class of actors that are "linked" to them.


  • Class Graphic system
    You have the ability to cause both an actor's charset AND their battler to change based on their current class. (compatible with ALL battle systems)


  • Simple configuration


  • Completely Lag-free!


  • Compatible with any CMS (provided, of course, you do a one line edit of that CMS so that it has an option for "Class Change"






Screenshots(outdated)

 
Spoiler: ShowHide

If you enable it in the config, the actor's graphic will change when their class does.







Demo
http://legacyblade.com/downloads/scripts/LSC/LegacyClassChangev1_68.zip


Script
In the Demo


Instructions

Instructions are in the script



Compatibility

100% compatible with the SDK (or so it seems)

100% compatible with Ccoa's UMS

100% compatible with the BlizzABS

Should be 100% compatible with most scripts.


Credits and Thanks


  • Blizzard for all his help. Without him, I couldn't have made it. Not
    only did he help me fix the errors, he also gave me lectures on various
    aspects of programming. This caused me to make LESS errors, and grow
    in my programming skill. Thanks blizz, this script wouldn't be here
    today if you hadn't been there in that MIRC room, XD

  • GubiD for when blizzard wasn't around in MIRC to answer my questions.
    he helped me with a few errors that I had no idea how to fix (many of
    them were some of the most n00bish errors too -_-). Thanks GubiD
    couldn't have done it without ya!

  • Sephirothtds for making TDS Class Change System incompatible with the Blizz-ABS. If it'd been compatible, I would have gone with your script, and never figured out how to make one myself . Your script's incompatibility with Blizz-ABS sparked my urge to learn to script.Thanks!

  • Juan, who offered a few pointers.

  • To all those who put up with me in the CP chat room when I'm ranting
    about my newest error.

  • To all the members of eminweb.com for nagging me enough to do my
    administrative duty, which eventually cured me of my infamous laziness

  • StarrodKirby86 for requesting the class graphic system, it made this
    script have a feature not many class changing systems have.

  • To the members of Chaos Project who offered feedback, and requested features. Without your ideas, this would be a much simpler, more boring system.






Author's Notes

I'm working on adding a few more features. Please give me some suggestions!

Starrodkirby86

What!? You posted it even though the script still contains the scrolling error!? You're a madman! A MADMAN! Anyway, I'm really appreciative of this, and I love how the Credits mention my name. :3

Good job with having the Type and Key Term, but it seems very unprofessional...*Cough* *cough*

QuoteType: Type: class change script


:P

What's osu!? It's a rhythm game. Thought I should have a signature with a working rank. ;P It's now clickable!
Still Aqua's biggest fan (Or am I?).




DeathLock

Quote from: legacybladeTo all the members of eminweb.com for nagging me enough to do my
administrative duty, which eventually cured me of my infamous laziness

:^_^':


legacyblade

August 26, 2008, 06:54:03 pm #3 Last Edit: August 26, 2008, 07:02:45 pm by legacyblade
I'm glad you guys like it. And btw, I was incorrect about that blizzABS incompatibility, ignore that, XD

and kirby, lol, I'll fix that now.

@deathlock, yes, your nagging is appreciated XD

Valcos

Nice work LB :haha:. This actually gave me an idea for something else :???: Which really doesnt have anything to do with class change. But thank you for the help :o.
"We are all in the gutter, but some of us are looking at the stars."
-Oscar De La Hoya

Blizzard

WHY IS THIS NOT IN DATABASE?! >8U I'm gone for a week and everything gets messed up. xD *moves*
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

shdwlink1993

Quote from: Blizzard on August 31, 2008, 06:36:20 pm
WHY IS THIS NOT IN DATABASE?! >8U I'm gone for a week and everything gets messed up. xD *moves*

That's my way of telling you not to leave! xD

No, it's not that. I'm just never 100% sure what justifies a script being "Databased" as opposed to being not, so I lean naturally on the "not databased" side of things.
Stuff I've made:




"Never think you're perfect or else you'll stop improving yourself."

"Some people say the glass is half full... some half empty... I just wanna know who's been drinking my beer."

Blizzard

1. Follows the template.
2. Useful script.
3. Finished script, not stuff like v0.4 or beta 3 or stuff like that.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

legacyblade

Whooo, I'm in the database. Now i just need to wait for blizz to be in the chat so I can ask a question!

legacyblade

new version. all the old bugs are fixed, and now it gives skills based on your class level, rather than the actor's overall level.

Diokatsu

Wow LB! this is really neat! I love it and it seems so efficient at that!

Punn

November 28, 2008, 08:55:55 am #11 Last Edit: November 28, 2008, 09:02:19 am by Punn
Me has question.
I tried the demo, and I want to know how to make a conditional and requirements, and make it NOT GO BACK to the previous class.
The requirement I mean is like a switch or a variable to be active or off. And possibly an item.

EDIT: And is it possible that if one actor is effected, the other one is effect also? Like if one turns into Warrior, the other actor will also be a warrior?

legacyblade

@punn, so you want a certain class to only be active when a specified switch is active? that should be an easy feature to add. and do you want the item to be in the inventory, and be consumed? It sounds like a good feature, but could you describe it more in depth? and with that last bit, u want two actors classes to be linked? Is there some valid use for this, or you just think it'd be cool?

@Dio, thanks dio. It is my first script too ^_^

Punn

If you look at the Warzone Battlercry topic, you can play as the robot or the Pilot or 'Runner' (Majority will be the robot) so the class will show the rank. I want those both the robot and the runner to link their classes together.

And um... I'm trying to explain this more in depth. But like, if you get a quest, you have to do something, like maybe collect a special item, like in RO, but this can be done in conditional branch. But the thing I want is, when you a rookie and become a private, you cannot go back to rookie anymore, you can keep everything your currently equipping and skills, but you be level 1 again, so you need to raise your level again to raise up to another rank. I think the switch feature is better ^_^;;

legacyblade

Oh ok. that makes sense. and the functionality sounds useful too. I'll include something along those lines in the next version. let me see if I have it straight.

1. Ability to link actor's classes (if one actor becomes a warrior, all actors linked to said actor will become a warrior as well)
2. The ability to set up class hierarchy with the inability to degrade classes (if warlord is upgraded warrior, you can't change from warlord to warrior)
3. Classes can be granted with variables. (you can unlock a class based on a variable)

Anything else?

Punn

Possible to leave the skillset the same instead of starting from scratch?

legacyblade

leave the skillset the same? You mean keep your skills? It's always done that.

Punn

December 02, 2008, 03:33:40 pm #17 Last Edit: December 02, 2008, 03:34:42 pm by Punn
*uses the atomic bomb on rmxp.org*
I talked to this idiot back then in the old rmxp.org before something crazy went up, told me it might be impossible, fucking twats with their pea-sized heads.


Anyways, that's about it.

Colinoliver

Awesome script. I'm totally using it for my game. Credits to you galore!
BUT unfortunately I may have found an incompatibility error with Blizzard's Tons of Add-ons script.
Here is what happens: Upon reaching level up durring a battle the game crashes with this error message:

Script "Tons of add-ons part 2" line 2647 NoMethodError occured.
undefined method `+' for nil:NilClass

Here is line 2647 of Add-ons part 2:
      @skills.each {|id| result += BlizzCFG.passkl_database(id)[0]}
    end

This error only occurs if the character reaches level up durring battle. Out of battle and level is increased there is no problem. It seems it has to do with the passive skills add-on portion. I have a few passive skills but even with the function disabled I still get the error. I've tried moving your script before and after Tons of add-ons but still the same result. Obviously it works without Legacy Class change that's how I found what script was incompatible. But your class change is too perfect to just remove! ;)
For now I have deleted the Passive skill portion of the script and it works fine. Class changing is more important than the few passive skills I have. But someone else might absolutely need both.
Anything that can be altered to make them compatible?

legacyblade

You know, I think just about everyone who has used this script has gotten that error. However, it is not a script error, it's just an error in your configuration. I should probably add a note in the script's comments, as well as in the post. You will get that error due to a mistake you made in configuring the class requirement section.
You see, how the configuration works is this.
when CLASS_ID then return [0,1,2,3,4,5,6,7,8...]
Each entry in that array corresponds to how many levels a specified class in the database needs (except the first one, which is a dummy element that the script needs). So, if you have [0,0,0,0,0,0,5] in the array, then you would need 5 level ups with class number 6. In the script's default configuration, there are a total of 19 classes. But a default RMXP project only has 8 classes. Due to how the script checks class levels, you will get an error if there are more entries in the array than you have classes. So, to avoid this error, just make sure you have the configuration set right. You need one more element in the array than you have total number of classes. The first element in the array is a dummy 0, but everything after that corresponds to the class in the database (the 2nd entry is ID number 1, which is fighter in the default configuration, 3rd entry is ID number 2, which is the lance, etc.)

Sorry for the inconvenience, I should probably mention this in the script's configuration section. (sorry if this was confusing)

I'm glad you like the script, BTW.

Colinoliver

Sorry for the late reply. Busy, busy, busy.

Thanks for the info! Made perfect sense. In actuality I did add the dummy class for each class in the game what I didn't do however was configure the return portion. Forgot to add the dummy class there. Works perfectly now.
Thanks alot!

Oh one more thing to think about. Would you think it would be possible to restrict an actors access to certain classes. Therefor allowing for unique classes for actors?
Just a thought.

Thanks again for the help :)

Hellfire Dragon

I have a question!

When you're writing the description, if it's long it gets all squashed up when you read it in game, and there;'s plently of space on the next line in the message box, so is there a way to put the text on the next line if it gets to long?

legacyblade

It's planned for the next release, actually. I ran into an error when I tried implementing it along with some bugfixes, so i just gave the bugfixes and put the multiline thing to this release (when I finish it)

Hellfire Dragon

Okay. I was wondering, how would I exclude some classes? I'm using the Blizz ABS and I don't want the player being able to be a class I have set for summons or pets. Any way to do it, or does some of the script need to be changed?

Jackolas

January 10, 2009, 10:24:28 am #24 Last Edit: January 10, 2009, 10:45:09 am by Jackolas
Really great script. I think its 1 of the best class change scripts out there.
only ran into 1 problem

Fixed... the stats will go to 0 if u don't equip anything.... stupid mistake :S

Aqua


Jackolas

... how could I be so stupid :S

thanks for the info :S


legacyblade

lol, I did the same thing with bABS. It was giving me an error about skills. I was freaking out, then I noticed that an enemy I had on a map was using a skill I'd deleted from the database (aka it was trying to use skill 20, when there were only 5 skills in the database).

And I have some free time this weekend, I might get some updates done!

Jackolas

would love to see a option that you remove the skills if you change class

think its kinda strange if you change from a cleric to a fighter while keeping your healing skills. could make a fire throwing holy dude with tank ability's :P

legacyblade

Ok, I'll add that one. I personally would be angry at the game if it took away my skills every time I switched classes. It will be difficult to implement well, but I'll try.

Jackolas

yeah... I already tried to edit it but with no success. (i could remove all skills.. but you would not be able to gain new 1 :S)

and ofc not remove all the skills...

for example if are a warrior of lvl 10. and you change to a mage lvl 10.
you will lose all your warrior skills.. but you gain all the mage skills (well those of lvl 1-10)

legacyblade

You want the player to regain their warrior skills, if they switch back to being a warrior, right?

Jackolas


legacyblade

kk. I'll have to add also an array for "non-class specific skills" so that if an actor has a special skill (such as a skill from a quest reward) it won't be bound to a particular class.

Jackolas


winkio

Here's a different approach that you could do: assign each skill to a class or classes in a config section and then modify skill_can_use? so that it will only return true if the classes match.  that way, you keep the skills, you just can't use them...  Just a thought.

legacyblade

January 11, 2009, 07:25:40 pm #36 Last Edit: January 11, 2009, 07:38:12 pm by legacyblade
I think I like the skills being removed from the list idea, as it adds less clutter, and makes it so I have to modify less of RMXP's classes. Though your idea is a good one Punn winko, I might add an option for skills to be disabled, rather than removed, upon class change. I personally would like them removed, as it makes my skill list less cluttered, but that's just a matter of taste.

winkio

Yes, I could see it going either way.  And since when am I Punn? :O.o:

legacyblade

Not sure why I typed Punn  :^_^': I meant winko, XD And yah, I should probably log off, and actually get to work  <_<

legacyblade

*ddddouble post!!!*

MASSIVE update. All requested features have been added, including...

  • Actor Specific Classes
    Define Special Classes that are unlocked for an actor only by a script call (in case the player needs to pay for special training to unlock said class)

(requested by Hellfire Dragon and Colinoliver, as far as I can tell)

  • Multiline class descriptions
    Define descriptions for each class that will be displayed in the class change window. (supports multiple lines of description!)

(technically, it was requested by Hellfire Dragon, but I was going to add it anyways)

  • Class Specific Skills
    Class Specific Skills. This allows you to set skills as class specific. Class specific skills are only availible when an actor is a class that the skill is specific to. You can even set a skill specific to multiple classes (so the Paladin can use heal if he learned it as a cleric, so the Gladiator can use "tackle" if he learned it as a lancer, etc.)

(requested by Jackolas)

  • Linked Actor System
    Linked Actor system. This allows you to define actors that, when they change their class, change the class of actors that are "linked" to them.

(requested by Punn)

I also did some misc bug fixing, cleaned up the code, and almost finished a new feature! (I just have to debug it, should be up tomorrow or monday).

Sorry that I went inactive on this topic. Last night, I realized I hadn't updated it, so I updated today on my spare time ^_^ I love the array.each command, XD makes everything easy.

Hope you all like the updated version! Once I add the next update (that nearly finished feature I mentioned a few lines ago), I think this will actually be a COOL script, rather than just a good one.

Calintz

This script is badass, but could be advanced aesthetically by a long shot.

** I recommend taking a page out of Tactics again for this. I say make a panorama, and create a handler for the character sprite.. .. ..you know the way that other scripters do it? It looks something like this...

If your character's name is Blake, then you would have a character set for every class and name it accordingly. "Blake_cleric," "Blake_gunner," "Blake_knight." Just like that.

**You could use angle and rotation like Blizz does in his battle actor command window to choose your class. XD

Just like on the real tactics. This would be a great enhancement.

Blizzard

Quote from: legacyblade on March 06, 2009, 10:14:10 pm
Hope you all like the updated version! Once I add the next update (that nearly finished feature I mentioned a few lines ago), I think this will actually be a COOL script, rather than just a good one.


"will be"? You must be meaning "already is". <3 *powers up*
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

legacyblade

@blizz, thanks for the power up ^_^. To me, it'll only be a cool script then, since it'll have all the features I wanted for it.

@calnitz, those are good suggestions, I'll probobly use them. Though it already does have sprite handling, XD (exactly as you described it, but CUSTOMIZABLE!!)

X-Law

Nice script
But i got a strange "prob" is not a prob at all, cuz it doesn't make any error, but when create a character and give him a class, and the you start playing, it doesn´t search for the right charset/battler. You must enter to class select menu, and the reselect your class to put the correct charse/battler

AlbatrosStorm is on sale now!

legacyblade

Yes, that is correct. An actor's graphic does not change to their class' graphic unless you change their class. Not only does this prevent lag, but it also makes eventing much easier (you can make them change into a certain graphic during a cutscene without worry about script interference). What I suggest is making the actor's default graphic (the graphic without a class name appended to it) look exactly like the graphic you give their initial class.

X-Law

Yeah, thx. That's what i've done already, but just to inform ^^

AlbatrosStorm is on sale now!

Shining Riku

I just wanted to compliment you on an excellent script, Legacyblade! I'm currently using it on my Final Fantasy project,
and combined with Blizz's RO job/skill system, I can change graphics and have their stats change too. Huzzah for compatibility!

Um, this is just a suggestion but you know how a message box pops up when somebody levels up and learns a skill? It's a neat feature but is there a way for me to turn it off, by any chance? :^_^':

Oh yeah, by the way... *Powers up!* You earned it! :)

legacyblade

April 20, 2009, 11:37:53 am #47 Last Edit: April 20, 2009, 11:43:05 am by legacyblade
@Shining Riku, Thanks, I'm glad it works well for your Final Fantasy game. I based it on the FFTA class system, because I originally planned to use it in my own game. And I had no idea that you could use it in a combination with the RO Job/skill system. That's cool that they work together. Huzzah for aliasing.

and as for that message box...that was there for debug purposes, I can't believe I forgot to take it out. Thanks for pointing that out, lemme tell you how to fix that, give me just a second.

-edit, it looks like it's fixed in the latest version. (at least the posted version of the script, I don't have RMXP on this comp right now). Try updating script versions, and see if the message box still pops up. If so, that means I don't have the same version of the script in the demo that I have posted on the topic. If that's the case, I'll hunt down a computer with RMXP (my regular comp is elsewhere) and find the line that causes that little message box to pop up. Sorry for the inconvenience, I can't believe I didn't take out the debug line.

Shining Riku

Wow, it was a debug thingy? I had a feeling that was the case but i'm glad it's probably fixed.

Well, I hope ya get your computer back soon! (It stinks if it's in the shop, I just got mine back after it nearly died of viruses. O_O)

I did look at your script and I found the section that causes the message. I could remove it myself, so I'll look into it. I just hope I don't break something, lol! Thanks again for such an awesome script.
(Well, what do you know? I'm planning an FFTA game myself but that won't go under construction for a while. I have enough projects as it is.)

And don't worry about inconveiniences! If there are any existing ones, they are far outweighed by pure awesomeness. Besides, I can be a patient guy. (Most of the time. Some stuff is just intolerable, ya know)

See you next time, and keep up the good work!

legacyblade

Yah, I hate waiting for my comp. I'll have it in a couple days. I'm sorta in a rush, so I can't say much, but thanks for all your comments, I really appreciate them. I'm working on implimenting a few new features (one of them would be much easier if RGSS supported recursion), so stay tuned.

To remove those little message boxes that pop up look for a line like the following


p something


When there's a single p, followed by a space, it'll make a message box of some kind. It'll be near the top, after the configuration section, if I'm correct.

Shining Riku

All I did was remove those p's you told me about and TADA! No messages.
Thanks for the help Legacyblade!  ;) You keep up the good work, and I hope your computer gets fixed.

legacyblade

glad it worked. And I can't wait for my computer to be fixed x_x If you have any other problems or questions, just ask.

Mightylink

You know I would of loved to try this but isnt all this easily done through events? and skills are already class based arnt they? I mean, they are in the class tab after all and not in the actor tab.

I do have plans to change classes in my game: http://zvcstudios.site88.net/myneria/class.html

My game does need a system like this but I don't think I need it when I can do all this through events.

legacyblade

I'm pretty sure you can't make this system via events, at least with not much ease. this isn't a script that just changes your class, it is sorta like blizz's job system, but more like the one in FFTA. You'd have to be one heck of an eventer to recreate this system with events. (try the demo, and then decide if it's doable with events)

Mightylink

I see now, this is class changing on the fly, very cool. In my game the char only chooses from 3 classes at level 10, each of those 3 get 2 choices at level 30, and each of those 6 choices are auto changed to a light or dark class afterwards, this is how I did it with events :P

legacyblade

Yah, simple class systems are doable by events. I'm glad this system can't be done by events, otherwise I'd feel really stupid, because it was the whole reason I learned scripting, XD

Mightylink

Yours is really awesome, I'm thinking of using it but its not the way I wanted it to work in my game, I only wanted my main char to be able to choose and I only wanted that to happen at 3 key times in the game :P

I'm sure everyone will love your script, its bound to become highly used.

Those are also some cool tilesets, I especially love dark arshes :D

legacyblade

I can't use it in my game either, I understand. And I hope more people use it.

Glad you like the sprites, you can use any of them (even if they were thrown together last minute)

Darok

Hi! How can i make an Actor...Blockes...? For Example, In my game you can have in party the Wizard Chief, And of course, the wizard chief cant be a Warrior. How can i make that actor unchangeble...
And, With conditional branchs can i make if X actor is Rank X in X Class you can open that door.
Thats all, i Love this Script

[Srry for Bad English :shy:]

Calintz


legacyblade

As to the first question, I might try adding that as a feature, if I get the time this weekend.

For your second question...

To check the level of a certain actor's class by overall ID (their database ID), use the following in the script field of a conditional branch

$game_actors[ACTOR_ID].class_levels[CLASS_ID] == CLASS_LEVEL


Where ACTOR_ID is the ID of the actor, CLASS_ID is the database ID of the class you want to check, and CLASS_LEVEL is the required level for the branch to execute (if you want them to have to have 2 class levels, CLASS_LEVEL would be 2

If you want to check the class level of a certain person based on their position in the party (is the current player a level 5 cleric, for example), use the following

$game_party.actors[POSITION].class_levels[CLASS_ID] == CLASS_LEVEL


Where Position is the position in the party (the one you're controlling is 0, and it just goes up from there), CLASS_ID is the database ID of the class you want to check, and CLASS_LEVEL is the required level for the branch to execute (if you want them to have to have 2 class levels, CLASS_LEVEL would be 2

Hope that made sense!

TheGreyFox

I get "Script 'Legacy Class Change' line 251: SyntaxError occurred" o.o I just pasted the script in

legacyblade

you need to set up configuration to not get a syntax error. I suggest using the project from the demo as a base for your game, since it already has some classes and configuration set up.

Arkaea Halfdemon

This looks excellent... just what I need, actually, and I hadn't even thought about it. My main character is the only character you get to play as, in the game. He, however, can transform into two other unique characters (using the Chaos Limit sys. Ano no, they are not transforms. They are actual characters.), so you can actually use three characters... just not at once.

Using this, I can make the main character as versatile as he should be... Thanks a bunch  :haha:

TheGreyFox

uhh...how do I disable the graphic change in the class changing menu?

fugibo

Two steps:

1) Hit Control-F and search for "CLASS_GRAPHIC_CHANGE"
2) When you find the line with an "= true" on it, replace "true" with "false"

When you're done, it should look like this:

  CLASS_GRAPHIC_CHANGE = false

Kirye

Hey, i'm new here, and i'm not sure if this has been answered somewhere. I've been using your script for the past few weeks, amazing script by the way, and I just one small question. ><

Is it possible to make classes level up at a different ratio than characters?

Spoiler: ShowHide

legacyblade

I don't quite understand what you're asking. Could you give me more information on what you're trying to do?

Kirye

July 01, 2009, 08:27:35 pm #68 Last Edit: July 01, 2009, 09:54:55 pm by Kirye
Sorry for not being clear. >< Here's what I mean.

Main character is level 4 and is a Level 1 Healer. When he goes to level 5, Healer class becomes level 2. But unless I did something wrong, or that's how the script is written as, the main character could be level 50 and the class he's using wouldn't level up at all until he becomes level 51.

I was wondering if there was a way to level up classes without the character having to level up? Or am I doing something wrong? XD

Spoiler: ShowHide

legacyblade

Oh, crap, I thought I responded to this already. Sorry for the delay.

That is actually the design of the system. Think about it. If you had been studying as say...a Fighter all your life (the "I like swords" people), and suddenly you decide "You know what, I wanna be a mage", would it make ANY sense for combat training to directly translate into mage training? You'd have to start as a beginner mage, makes sense right?

However, if you want to give a class level up, use this code

$game_actors[1].
class_levels[$game_actors[
1].class_id] += 1


that would give actor 1 a level up in whatever class he is currently using.

I hope that helped. Needless to say, I will not add the feature you're looking for, as it makes no logical sense whatsoever. I could help you edit the script if you want that though, as it just requires removing some lines of code.

Kirye

I still don't think you know what I mean, but that script for class level ups does help. XD

What I meant was that at Base Level 30, it would take the same amount of time to level up Mage 1 to Mage 2 as it would to level up your Base Level to 31.

At Baselvl 1, it takes 20 exp to reach level 2. Fighter lv 1 will also take 20 exp to reach level 2.
At Baselvl 30, it takes 1327 exp to reach level 31. Mage lv 1 will also take 1327 exp to reach level 2.

And if you're level 99, you cannot level up any classes further.

Regardless, I edited the game to work with your script's current programming, so it doesn't matter now. XD

Spoiler: ShowHide

legacyblade

OH!! That makes sense. Thanks for the idea, I'd never even thought of doing that. I'll try and add that option to do that into my script. What a great idea. Thanks Kirye.

Kirye

Awesome. =o I was hoping for an FFT style of class leveling, where the classes leveled up differently than the main character, but finding a script like that is hard. I thought about doing something of my own with events, but it would have taken too long and not have been as effective. ><

Anywho, thanks for taking the time to respond, and again I love the script. Very useful.

Spoiler: ShowHide

sournote103

Is there a way to change an actor's class via event? (I.E. When Actor 1 talks to Event 1, Actor 1 changes class to Class 2.)
If anyone can help me, that would be very helpful.

legacyblade

Yes. Use the  "Change Actor Class" event command (it's on the tab 3)

sournote103

Quote from: legacyblade on October 20, 2009, 09:02:02 pm
Yes. Use the  "Change Actor Class" event command (it's on the tab 3)

Right! Forgot about that little button. I wasn't entirely sure it would work completely with the script, as well.

legacyblade

No problem. And all events work just the same way they always have, with this script. I designed it to work with 99% of scripts too. If you ever find a problem that it causes, though, it'd be great if you could report them here :D

sournote103

So, I'm using a system to where the player's level doesn't matter. Is there a way to display the player's Job Level on the menu, rather than their actual level?

legacyblade

Oh, sorry, I missed that. Just add the following script right below the class change script

Spoiler: ShowHide

class Window_Base < Window

 def draw_actor_level(actor, x, y)
   self.contents.font.color = system_color
   self.contents.draw_text(x, y, 32, 32, "Lv")
   self.contents.font.color = normal_color
   self.contents.draw_text(x + 32, y, 24, 32, actor.class_levels[actor.class_id].to_s, 2)
 end

end

class Window_Actor_List < Window_Selectable

 def refresh
   self.contents.clear
   @item_max = $game_party.actors.size
   for i in 0...$game_party.actors.size
     x = 64
     y = i * 80
     actor = $game_party.actors[i]
     draw_actor_graphic(actor, x - 40, y + 55)
     draw_actor_name(actor, x, y)
     self.contents.draw_text(x, y + 32, width - 32, 32, ($data_classes[$game_party.actors[i].class_id].name + ' rank: ' + $game_party.actors[i].class_levels[$game_party.actors[i].class_id].to_s))
   end
 end
end


That'll display your class level in the main menu, as well as remove the display of your overall level from the class change window (it'll only show your class level)


--edit--

by the way, the demo link has been fixed. Sorry for the inconvenience, my hosting on that server somehow got canceled. (no, I didn't miss the payment like ole blizzy :P)

CursedSoldier

Not sure how old this is but i just jioned and i found your script its awesome but i keep getting Syntax Errors on this portion of the script. Specifically the first end

  def self.class_spells(class_id)
    case class_id
       
      end
     
    return []
  end

legacyblade

You have to set up some configurations in there :P Download and look through the demo's script, or read the script comments, to figure out how. I can't really explain it any better than I did in my demo, but if you still have questions after playing it and looking through my configuration, just ask and I'll clarify.

CursedSoldier

 :( Every time i try to open the demo link it gives me the 404

legacyblade

March 27, 2010, 10:53:01 pm #82 Last Edit: March 27, 2010, 10:54:18 pm by Professor Legacyblade
Oh. I could have sworn I fixed that link. Let me fix it, sorry for the inconvenience.

--
fixed, you can download the demo now. Sorry about that.

CursedSoldier


Sacred Nym

First, aboslutely awesome script. Reminds me of FF5.


Now, while this script is so great, the fact that Classes level up directly with the Actor, is an issue, as already previously stated. The main reason for this being that changing class at any point in the game other than right at the start becomes far more trouble than it's worth. The simplest solution would be to give classes their own experience scale. I'd help with this, but I know far too little about RGSS to be of any use.


While I think that should take priority, the other thing I wanted to bring up was a feature request. I was wondering if it would be possible to add a "skill unlock" type feature.

For example: A cleric becomes able to use Heal at class level 5, but only as a cleric. When said cleric reaches class level 10, he/she becomes able to use the same Heal spell, but now as any class. Would that be possible?
Quote昨日の自分に「さようなら」
Say "Goodbye" to who you were yesterday.

legacyblade

I disagree on the leveling up thing. Maybe it's just because I'm a big D&D fan  (in D&D no matter what your class level is, you level up according to your overall level). Most RPGs that allow class changing that I've ever played do this, so I am going to leave it the same way I want. I'm going to change how stats increase though. (rather than following the actor's curve, I'll have a curve for each class. So you'll get more strength per level as a fighter than as a cleric)

About the unlocking skills, it'd take a bit of effort, but I'll try implementing it. It sounds like a good feature, though I'll have to make it optional as it wouldn't mesh well with any AP system.

Thanks for the suggestions, I really appreciate it.

Sacred Nym

Quote from: legacyblade on April 17, 2010, 10:39:03 pm
I disagree on the leveling up thing. Maybe it's just because I'm a big D&D fan  (in D&D no matter what your class level is, you level up according to your overall level).

Ah, D&D. I forgot about that one. I remember playing around with the system (or a variation of it) in Neverwinter Nights. The main part that worries me about the system is that it makes it really easy for the player to royally screw themselves. I lost count of how many times I had to enter debug mode and retake my levels because one experiment in leveling made the next part of the game nearly impossible, on EASY mode. I can see this working in the tabletop game since balancing can be done and redone as you progress, but it's not that simple in a video game.

That said, it may have just been poor experience due to that being my first WRPG since... I can't remember. :V

QuoteMost RPGs that allow class changing that I've ever played do this

Not arguing, but can you give some examples, if only to sate my curiosity? :P

QuoteI'm going to change how stats increase though. (rather than following the actor's curve, I'll have a curve for each class. So you'll get more strength per level as a fighter than as a cleric)

Ah. Good. That was another complaint I had, but it's also rather easily fixed with outside systems.

QuoteAbout the unlocking skills, it'd take a bit of effort, but I'll try implementing it. It sounds like a good feature, though I'll have to make it optional as it wouldn't mesh well with any AP system.

Oh of course it should be optional. Versatility is never a bad thing.
Quote昨日の自分に「さようなら」
Say "Goodbye" to who you were yesterday.

legacyblade

Quote from: Sacred Nym on April 18, 2010, 01:47:46 pm
Ah, D&D. I forgot about that one. I remember playing around with the system (or a variation of it) in Neverwinter Nights. The main part that worries me about the system is that it makes it really easy for the player to royally screw themselves. I lost count of how many times I had to enter debug mode and retake my levels because one experiment in leveling made the next part of the game nearly impossible, on EASY mode. I can see this working in the tabletop game since balancing can be done and redone as you progress, but it's not that simple in a video game.


That's part of the fun, the game doesn't "talk down to you". If you want to take 1 level in every class in the game at a time (by the time you're level twenty, you only have level 2 abilities in 10 different classes or something) you can do it. That being said, I've never actually seen a player who's that stupid. I mean, no one complains that you can replace all your pokemon's moves with crappy ones.

That said, it may have just been poor experience due to that being my first WRPG since... I can't remember. :V

Quote from: Sacred Nym on April 18, 2010, 01:47:46 pm
QuoteMost RPGs that allow class changing that I've ever played do this

Not arguing, but can you give some examples, if only to sate my curiosity? :P


Off the top of my head, Final Fantasy Tactics Advanced (1 and 2), Star Wars Knights of the Old Republic (though sorta a bad example for my point, seeing as how most abilities are tied to your overal, rather than your class, level, and you only change your class once), Dokapon Kingdom (mario party meets final fantasy), and every tabletop RPG I've ever played with classes and levels. That goes for games based on the tabletop RPGs. I know there are more, I'm just having trouble thinking of examples.

QuoteOh of course it should be optional. Versatility is never a bad thing.


Glad we agree on that. I am a firm believer in making everything optional in my scripts (within reason).

Lakieth

April 25, 2010, 11:25:41 pm #88 Last Edit: April 25, 2010, 11:35:10 pm by Lakieth
I cant find out how to post a pic and i keep getting this error when i try to switch classes i can bring up my class change menu and every ting but cant switch classes
Spoiler: ShowHide

legacyblade

That means you've set up your config improperly. Please post your configuration.

Lakieth

April 26, 2010, 03:38:30 pm #90 Last Edit: April 26, 2010, 04:17:51 pm by Lakieth
KK i changed my config but still get same error

Heres descript
Spoiler: ShowHide

#Description for Swordsmen
      when 1 then return ['Swordsmen wield swords, and some even use axes']
       
      #Description for Apprentice
      when 2 then return ['These are the children of magic']
     
      #Description for pick pocket
      when 3 then return ['low cheap these are the words that describe them.']
       
      #Description for Alcolyte
      when 4 then return ['pupile of the holy gods']
       
          #Description for Ranger
      when 5 then return ['Rangers are archers and gunners.']
     
        #Description for Knight
      when 6 then return ['Very precise Warrior with much defense']
       
      #Description for Warrior
      when 7 then return ['A brute with no skill all strength']
       
      #Description for monk
      when 8 then return ['Basic martial artists.']
     
      #Description for Mage
      when 9 then return ['Awesome person of death with all elements']
       
      #Description for Summoner
      when 10 then return ['These people summon Demons to their service']
     
      #Description for Assasin
      when 11 then return ['Assasins, the true bad*** (it\'s even part of their name!)']
     
      #Description for Thief 
      when 12 then return ['The thief, they burn your town AND steal your stuff.','Actually sounds kinda fun!']
     
      #Description for Sniper 
      when 13 then return ['Snipers are SO annoying in first person shooters!','thought they can\'t hit you if you\'re hyped up on caffine!']
       
      #Description for Paladin
      when 14 then return ['Oh holy knight, your sword is brightly shining!']
     
      #Description for Sniper
      when 15 then return ['Snipers are SO annoying in first person shooters! thought they cant hit you if youre hyped up on caffine!']
             
      #Description for Hunter 
      when 16 then return ['Archerers duh']
     
     
      end

Herers config
Spoiler: ShowHide

      # if you want a default class description for those not defined, replace the
      # below array with a description like those above.
    return ['']
  end

# This is where you set the requirement for each class. Use the following format
#
# when class_id then return [0,class1's required level,class2's required level,...]
#
# where class_id is the ID of the class that you want to have a requirement,
# 0 is a dummy entry, and"class1's required level, etc. are how many levels needed
# in that class to unlock the class
#
# REMEMBER TO SET THIS UP FOR YOUR OWN PROJECT! IF YOU HAVE MORE ENTRIES IN THE
# ARRAY THAN CLASSES IN THE DATABASE (and the dummy 0 at the beginning, of course)\
# YOU WILL GET AN ERROR!

  def self.class_requirements(class_id)
    case class_id
       
      #to make a class have no requirements (unlocked by default), just don't
      #define requirements for it.
       when 1 then return  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
     
      when 2 then return  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] 
     
      when 3 then return  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
     
      when 4 then return  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
     
      when 5 then return  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
      #Requirement for Knight: 10 Swordsmen
      when 6 then return  [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
     
      #Requirement for Warrior
      when 7 then return [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
     
      #Requirement for Monk
      when 8 then return [10,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0]
     
      #Requirement for Mage
      when 9 then return [0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
     
      #Requirement for Summoner
      when 10 then return [0,10,0,5,0,0,0,0,0,0,0,0,0,0,0,0]

      #Requirement for Assassin
      when 11 then return [0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0]
       
      #Requirement for Thief 
      when 12 then return [0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0]
     
      #Requirement for Cleric
      when 13 then return [0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0]
       
      #Requirement for Paladin
      when 14 then return [7,0,0,8,0,0,0,0,0,0,0,0,0,0,0,0]

      #Requirement for Sniper
      when 15 then return [0,0,8,0,7,0,0,0,0,0,0,0,0,0,0,0]
     
      #Requirement for Hunter
      when 16 then return [0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0]
       
      end
     
    return


  •   end

legacyblade

Did you make all those classes in your database? If that's not it, I can see right off the bat what your problem is.

when 6 then return  [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]



I really need to change the config works. Now that I have a little more knowledge of scripting, it'd be just a couple lines that I'd need to change. But what you need is this


when 6 then return  [0,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]


I mentioned in the script that there needs to be a dummy 0 element at the beginning. Currently, it's saying you need 10 levels in the class with the ID of 0. But the classes in the database start at 1. So it's looking for something that doesn't exist, thus the nil error. Adding a 0, to the begining of all those configs should fix your problem. I'll change that in the next version.

legacyblade

April 26, 2010, 09:05:18 pm #92 Last Edit: April 26, 2010, 09:35:28 pm by legacyblade
Wow, that was even easier than I thought it'd be. Let me update the demo and upload it. You'll have to change the way you configure the classes slightly

what once was

when 6 then return  [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]


will become

when 6 then result =  [10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]


and it'll work :D

-edit

version 1.68 is out. Note the change in the configuration as noted above.

Lakieth

Hey im getting the same error i think ill post a pic in a sec but when i put my config in your demo i dont get error is that weird?? :???: :???: :plz: Help me

Lakieth

Here is the pic its a different error and only happens when i change your descript to mine wich is the same as my last post to the dot cause of copy and pasteing Also the line that its talking bout is the very lastone


Spoiler: ShowHide

legacyblade

Post your configuration. I'll check it out. I'm not getting that error on my end.

Lakieth

Its something with my description i think cause if i have your descriptions in mine then its fine but if have my description then i get the error so ill post that too



Spoiler: ShowHide
#Description for Swordsmen
      when 1 then return ['Swordsmen wield swords, and some even use axes']
       
      #Description for Apprentice
      when 2 then return ['These are the children of magic']
     
      #Description for pick pocket
      when 3 then return ['low cheap these are the words that describe them.']
       
      #Description for Alcolyte
      when 4 then return ['pupile of the holy gods']
       
          #Description for Ranger
      when 5 then return ['Rangers are archers and gunners.']
     
        #Description for Knight
      when 6 then return ['Very precise Warrior with much defense']
       
      #Description for Warrior
      when 7 then return ['A brute with no skill all strength']
       
      #Description for monk
      when 8 then return ['Basic martial artists.']
     
      #Description for Mage
      when 9 then return ['Awesome person of death with all elements']
       
      #Description for Summoner
      when 10 then return ['These people summon Demons to their service']
     
      #Description for Assasin
      when 11 then return ['Assasins, the true bad*** (it\'s even part of their name!)']
     
      #Description for Thief 
      when 12 then return ['The thief, they burn your town AND steal your stuff.','Actually sounds kinda fun!']
     
      #Description for Sniper 
      when 13 then return ['Snipers are SO annoying in first person shooters!','thought they can\'t hit you if you\'re hyped up on caffine!']
       
      #Description for Paladin
      when 14 then return ['Oh holy knight, your sword is brightly shining!']
     
      #Description for Sniper
      when 15 then return ['Snipers are SO annoying in first person shooters! thought they cant hit you if youre hyped up on caffine!']
             
      #Description for Hunter 
      when 16 then return ['Archerers duh'
]


Spoiler: ShowHide




  #Requirement for Knight     
      when 6 then result =  [15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
     
      #Requirement for Warrior
      when 7 then result = [15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
     
      #Requirement for Monk
      when 8 then result = [5,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0]
       
      #Requirement for Mage
      when 9 then result = [0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
     
      #Requirement for Summoner
      when 10 then result = [0,7,0,8,0,0,0,0,0,0,0,0,0,0,0,0]

      #Requirement for Assassin
      when 11 then result = [0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0]
       
      #Requirement for Thief 
      when 12 then result = [0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0]
     
      #Requirement for Cleric
      when 13 then result = [0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0]
       
      #Requirement for Paladin
      when 14 then result = [10,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0]

      #Requirement for Sniper
      when 15 then result = [0,0,9,0,6,0,0,0,0,0,0,0,0,0,0,0,]
     
      #Requirement for Hunter
      when 16 then result = [0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0]

legacyblade

#Requirement for Sniper
      when 15 then result = [0,0,9,0,6,0,0,0,0,0,0,0,0,0,0,0,]


You have an extra comma at the end. It should be

#Requirement for Sniper
      when 15 then result = [0,0,9,0,6,0,0,0,0,0,0,0,0,0,0,0]


(that's nothing to do with my script, that's just how Ruby works)

Lakieth

Im really sorry but i changed that and still got wrong error like i said before it works when i put my config in yours but if i put my descriptions then it fails

legacyblade

   #Description for Hunter  
      when 16 then return ['Archerers duh'
]


should be


   #Description for Hunter 
      when 16 then return ['Archerers duh']


If you're only getting the error when you have your configuration, that means it's something wrong with your config, not the script :P

Lakieth

i know its my config but my description  was fine i think i copied and pasted weird or sumthing  its fine i checked that one and other descriptions but  if you dont mind i would love for you to check my whole script plz ill post it and check anything i didnt edit i dont think except the true/ false on actor change but just in case here it is if not that cool too :(

Spoiler: ShowHide
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
# Legacy Class Change by Legacyblade
# Version: 1.68
# Type: Class Changing Script
# Date 3-06-2009
#
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#   
#  This work is protected by the following license:
# #----------------------------------------------------------------------------
# # 
# #  Creative Commons - Attribution-Share Alike 3.0 Unported
# #  ( http://creativecommons.org/licenses/by-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).
# # 
# # 
# #  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.
# # 
# #----------------------------------------------------------------------------
#
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#
#
# Compatibility:
#
# The script was coded to be 100% compatible with most, if not all scripts. I
# can't think of ANY script that wouldn't be compatible, but I will list those
# that I tested for compatibility.
#
# Blizz ABS is 100% compatible, and all other ABS scripts should be as well, due to how
# the class rank is added.
#
# CCoa's UMS is 100% compatible.
#
# The SDK 2.3 seemed to be compatible. Everything worked fine even with the SDK
# in the project.
#
# I'll keep testing scripts, and adding to this list.
#
# Incompatibility:
#
# No known incompatibility (if you run into an incompatibility, please tell me,
# so I can make a patch)
#
# Known Issues:
#
# none ^_^
#
# Features:
#
#   -> Define Special Classes that are unlocked for an actor only by a script
#      call (in case the player needs to pay for special training to unlock said
#      class).
#
#   -> Define how many times an actor must level up while using a certain
#      class/classes to unlock another class. (you can make the "Alchemist"
#      class require 3 levels as a mage, and 3 levels as a cleric). The system
#      is so versatile, that you can even require levels in Special Classes!
#
#   -> Define descriptions for each class that will be displayed in the class
#      change window. (supports multiple lines of description!)
#
#   -> Class Specific Skills. This allows you to set skills as class specific.
#      Class specific skills are only availible when an actor is a class that
#      the skill is specific to. You can even set a skill specific to multiple
#      classes (so the Paladin can use heal if he learned it as a cleric, so the
#      Gladiater can use "tackle" if he learned it as a lancer, etc.)
#
#   -> Linked Actor system. This allows you to define actors that, when they
#      change their class, change the class of actors that are "linked" to them.
#
#   -> Class Graphic system. You have the ability to cause both an actor's
#      charset AND their battler to change based on their current class.
#
#   -> Easily configurable settings that can affect every aspect of the system.
#
#   -> Completely lagfree!
#
#   -> Compatible with ANY CMS (provided you make a slight modification to
#      integrate the class change. This amounts to one line of code)
#
#
# Version History:
#
# For every minor update or bugfix, I will increase the version by .01
# For every new feature, I will increase the version be .1
# For every 10 feature updates, I will update the version by 1
#
# v1.00b:
#   -> Legacy Class Change released!
#
# v1.01b:
#   -> Fixed a bug in class selection, that would set the actor's class_id to the
#      index of the cursor, rather than the actual selected class_id.
#
# v1.02b:
#   -> Fixed a few miscellaneous lines of code that could, under certain circumstances, cause errors
#
# v1.10b:
#   -> Added the option to change an actor's graphic when the class changes.
#
# v1.11b:
#   -> Fixed a bug that kept the class list from scrolling
#
# v.1.20:
#   -> Left the beta stage.
#   -> Enhanced the level handeling. Now the skills are assigned based on class
#      level, rather than the actor's overall level.
#
# v.1.67:
#   -> Added the option to make multi-line descriptions! (no more trying to cram
#      the description into a single line!
#   -> Added the "linked actor" feature.
#   -> Added the "special classes" feature.
#   -> Added the Class Specific Skills feature.
#   -> Recoded the scene slightly to support any party size.
#   -> Changed when the Class List updates, for graphical nicety.
#   -> Increased compatibility with StormTronics CMS (by Blizzard). Now it only
#      takes a small edit to StorTronics to seamlessly integrate the Class Change
#      system. (I reworked the code so that there is an "on_cancel" method).
#   -> Optimized code
#   -> Fixed a slight bug with class descriptions.
#   -> Fixed a typo that would cause a player to level up when they're supposed
#      to level down.
#   -> Rewrote comments, and reordered code for readability.
#
# v.1.68:
#   -> Improved the way class level requirements are configured. It's easier now.
#
# Planned Features:
#   
#  -> Add the option to display classes that other members of the party have
#     learned, but the current actor has not. These locked, yet visible classes
#     would also show the required level of each class needed to unlock the class
#     rather than a class description. (almost finished, just needs some debugging)
#
# Useless facts:
#
# This was the first time I've ever successfully made a script. I learned a lot
# about everything I worked with, and can't wait to learn more about RGSS and
# programming in general. I hope you enjoy this, because it took a lot of effort
#
# Special Thanks:
#
#       - Blizzard for all his help. Without him, I couldn't have made it. Not
#         only did he help me fix the errors, he also gave me lectures on various
#         aspects of programming. This caused me to make LESS errors, and grow
#         in my programming skill. Thanks Blizz, this script wouldn't be here
#         today if you hadn't been there in that MIRC room, XD
#
#       - GubiD for when blizzard wasn't around in MIRC to answer my questions.
#         he helped me with a few errors that I had no idea how to fix (many of
#         them were some of the most n00bish errors too -_-). Thanks GubiD
#         couldn't have done it without ya!
#
#      - Sephirothtds for making TDS Class Change System incompatible with
#        the Blizz-ABS. If you'd made it compatible, I would have gone with your
#        script, and never figured out how to make one myself . Your script's
#        incompatibility with Blizz-ABS sparked my urge to learn to scrip. Thanks.
#
#       - Juan, who offered a few pointers.
#
#       - To all those who put up with me in the CP chat room when I'm ranting
#         about my newest error.
#
#       - To all the members of eminweb.com for nagging me enough to do my
#         administrative duty, which eventually cured me of my infamous laziness
#
#       - StarrodKirby86 for requesting the class graphic system, it made this
#         script have a feature not many class changing systems have.
#
#       - To the members of Chaos Project who offered feedback, and requested
#         features. Without your ideas, this would be a much simpler, more boring
#         system.
#
# Author Notes:
# PLEASE, make sure you've configured the script correctly before you report
# whatever error you're running into. IN PARTICULAR, check your class_requirements
# configuration. EVERYONE who's used the script reports an error that comes from
# an improper configuration of class_requirements.
#
# BUT, if you DO (or at least think you do) have correct configuration, and you
# run into a bug, PLEASE report it to me. Also, if you want a feature added,
# request it (preferably in the Legacy Class Change thread on eminweb.com),
# and I'll try to add it.
#
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=


#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#                           START CONFIGURATION
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=

module LBConf
# If this is set to true, then changing an actor's class will also change its
# graphic.
  CLASS_GRAPHIC_CHANGE = false

# Put the ID of classes you want as "Special Classes" in this array(seperate
# entries with a comma). Special Classes will be unselectable unless an actor
# "learns" the class. (this is done by executing the following script call)
#
#    $game_actors[actor_id].learn_special_class(class_id)
#                       or
#    $game_party.actors[position].learn_special_class(class_id)
#
# "position" refers to the position an actor is in the party. 0 is the first
# party member (the one you see walking around the map), 1 is the seccond, and
# so on.
  SPECIAL_CLASS = [20]
 
# If an actor has a class specific skill, they will forget it when they change
# to a class that the skill is not specific to. They will, however, relearn the
# skill when they switch back to a class that the skill IS specific to.
#
# If you want to use class specific skills, you'll need to define which skills
# are specific to a certain class. Use the following format
#
#    when X then return[a,b,c...]
#
# where X is a class ID, and a,b,c (and whatever else you put in that array) are
# the IDs of skills you want to be specific to that class (remember to seperate
# them with commas). You can have skills specific to multiple classes (both the
# cleric, and the paladin can use "heal" if they've learned it.)
#
# If you don't want to use the class specific skill system, don't define any class
# specific skills.

  def self.class_spells(class_id)
    case class_id
   
      # I really don't feel like coming up with class specific skills for all the
      # classes. You have an example on how to set up the system, so do it
      # yourself.
     
      when 7 then return [1]
      when 15 then return[1]
      when 16 then return[1]
     
      # what do you know, both the cleric and the paladin can use "heal" :P
       
      end
     
    return []
  end

# If you have CLASS_GRAPHIC_CHANGE set to true, you'll need to setup what graphic
# each class will need. use the following format
#
# when class_id then return 'text you want appended'
#
# an example (in this situation) is simpler than an explanation, so here you go
#
#    when 1 then return '_fighter'
#
# If the actor's charset is named "arshes" and battler is called "ArshesBattler",
# then when the actor is using class 1 (fighter by default), the charset will be
# named "arshes_fighter" and the battler will be named "ArshesBattler_fighter".
# if you don't want a class to have it's own graphic (or haven't made one yet),
# just don't define it below.

  def self.class_graphic(class_id)
    case class_id
     
      #Alright, this is where we tell the script that when the actor chooses the
      #fighter class, that it needs to look for the actor's default sprite with
      # _fighter appended to the end of it.
      when 1 then return '_fighter'
   
      #graphic suffix for lancer class
      when 2 then return '_lancer'
   
      #This is what I do when I don't have a graphic ready yet, just comment
      #the line where you define the class graphic
      #when 3 then return '_warrior'
     
      #graphic suffix for cleric class
      when 7 then return '_cleric'
   
      #graphic suffix for mage class
      when 8 then return '_mage'
     
      #You'll notice that NONE of the other classes have any configuration data
      #this will cause using those classes to switch to the actor's default
      #graphic.
       
      end
    return ''
   
  end

 
# This next section is where you define the description for each class.
# use the following template for each class
#
#    when class_id then return ['line1','line2','line3]
#
# Although you won't get an error if you have more than three lines of
# description, the window is only big enough to fit three lines. Also, if you
# can't think up a description for a class, don't define one, and the script
# will assign it the default class description. (a blank line by default)
#
# To change the default description (for whatever reason) look for return ['']
# near the bottom of this section.
  def self.class_descriptions(class_id)
    case class_id
   
     #Description for Swordsmen
      when 1 then return ['Swordsmen wield swords and some even use axes']
       
      #Description for Apprentice
      when 2 then return ['These are the children of magic']
     
      #Description for pick pocket
      when 3 then return ['low cheap these are the words that describe them']
       
      #Description for Alcolyte
      when 4 then return ['pupile of the holy gods']
       
          #Description for Ranger
      when 5 then return ['Rangers are archers and gunners']
     
        #Description for Knight
      when 6 then return ['Very precise Warrior with much defense']
       
      #Description for Warrior
      when 7 then return ['A brute with no skill all strength']
       
      #Description for monk
      when 8 then return ['Basic martial artists']
     
      #Description for Mage
      when 9 then return ['Awesome person of death with all elements']
       
      #Description for Summoner
      when 10 then return ['These people summon Demons to their service']
     
      #Description for Assasin
      when 11 then return ['Assasins, the true bad*** (it\'s even part of their name!)']
     
      #Description for Thief 
      when 12 then return ['The thief, they burn your town AND steal your stuff.','Actually sounds kinda fun!']
     
      #Description for cleric 
      when 13 then return ['Everyone need a cleical freind']
       
      #Description for Paladin
      when 14 then return ['Oh holy knight, your sword is brightly shining!']
     
      #Description for Sniper
      when 15 then return ['Snipers are SO annoying in first person shooters! thought they cant hit you if youre hyped up on caffine!']
             
      #Description for Hunter 
      when 16 then return ['Archerers duh']
      # if you want a default class description for those not defined, replace the
      # below array with a description like those above.
    return ['']
  end

# This is where you set the requirement for each class. Use the following format
#
# when class_id then result = [class1's required level,class2's required level,...]
#
# where class_id is the ID of the class that you want to have a requirement,
#  and"class1's required level, etc. are how many levels needed
# in that class to unlock the class
#
# REMEMBER TO SET THIS UP FOR YOUR OWN PROJECT! IF YOU HAVE MORE ENTRIES IN THE
# ARRAY THAN CLASSES IN THE DATABASE YOU WILL GET AN ERROR!

  def self.class_requirements(class_id)
    result = []   
    case class_id
       
      #to make a class have no requirements (unlocked by default), just don't
      #define requirements for it.
           
      #Requirement for Knight     
      when 6 then result =  [15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
     
      #Requirement for Warrior
      when 7 then result = [15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
     
      #Requirement for Monk
      when 8 then result = [5,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0]
       
      #Requirement for Mage
      when 9 then result = [0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
     
      #Requirement for Summoner
      when 10 then result = [0,7,0,8,0,0,0,0,0,0,0,0,0,0,0,0]

      #Requirement for Assassin
      when 11 then result = [0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0]
       
      #Requirement for Thief 
      when 12 then result = [0,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0]
     
      #Requirement for Cleric
      when 13 then result = [0,0,0,15,0,0,0,0,0,0,0,0,0,0,0,0]
       
      #Requirement for Paladin
      when 14 then result = [10,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0]

      #Requirement for Sniper
      when 15 then result = [0,0,9,0,6,0,0,0,0,0,0,0,0,0,0,0]
     
      #Requirement for Hunter
      when 16 then result = [0,0,0,0,15,0,0,0,0,0,0,0,0,0,0,0]




      end
     
    return result.unshift(0)

  end
 
# here is where you set up which actors are "linked". When an actor is "linked"
# to another actor, whenever the actor changes their class, the other's class
# will change to match it. Set it up in the following format.
#
# when X then return[a,b,c...]
#
# where X is the ID of the actor in question, and "a,b,c..." are the ID's
# of the actors linked to this actor, and are separated by commas. With this setup
# when actor X changes his class, it will also change actor a, b, and c's class.
# To make it so actor a changes the classes of the other actors, you'll have to
# set the link up for each actor involved. (if you want Arshes to be "linked" to
# his dark form, you'd do this.
#
# when 1 then return[2]
# when 2 then return[1]
#
# where 1 is the ID of Arshes, and 2 is the ID of Arshes' dark form.

    def self.linked_actors(actor_id)
      case actor_id
        when 1 then return [2]
        when 2 then return [1]
        end
       
      return []
   
    end
end


#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=
#                             END CONFIGURATION
#:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=:=

class Game_Actor < Game_Battler
  attr_accessor :class_levels
  attr_accessor :unlocked_class
  attr_accessor :unlocked_specials
  #attr_accessor :locked_class
  attr_accessor :learned_class_skills
  attr_accessor :character_name
  attr_accessor :default_charset_name
  attr_accessor :battler_name
  attr_accessor :default_battler_name
 
# modify the actor setup for Legacy Class Change
  alias class_rank_level_LB setup 
  def setup(actor_id)
    class_rank_level_LB(actor_id)

# set up the initial default graphics (used by the graphic change system)
    @default_charset_name = @character_name
    @default_battler_name = @battler_name

# set up the class arrays used by the class changing system.
    @unlocked_class = []
    @unlocked_specials = []
   
# initialize the array that holds the class specific skills an actor has learned
    @learned_class_skills = []
   
# set up the class_levels
    @class_levels = Array.new($data_classes.size)   
   
    @class_levels.each_index {|i|
    if i == $data_actors[actor_id].class_id
      @class_levels = 1
    else
      @class_levels = 0
    end}

# initialize unlocked classes.
    (1...$data_classes.size).each{|class_id|
    unlock_class(class_id)}

  end
 
# method used to check if an actor meets the requirements for a class, and if he
# does, it will unlock the class for that actor
  def unlock_class(class_id)
    if !@unlocked_class.include?(class_id)
      if !LBConf::SPECIAL_CLASS.include?(class_id)
        requirement = LBConf.class_requirements(class_id)
        result = true
        requirement.each_index {|i|
        if @class_levels < requirement
          result = false
          break
        end}
      else
        result = false
        if unlocked_specials.include?(class_id)
          result = true
        end
      end
      if result
        @unlocked_class.push(class_id)
        @unlocked_class.sort!
      end
    end
  end

 
# method used to unlock a special class for an actor.
  def learn_special_class(class_id)
    if !@unlocked_specials.include?(class_id)
      @unlocked_specials.push(class_id)
      @unlocked_specials.sort!
     end
   end
   
# method used to lock a special class for an actor.   
   def forget_special_class(class_id)
     @unlocked_specials.delete(class_id)
     @unlocked_class.delete(class_id)
     @unlocked_specials.sort!
     @unlocked_class.sort!
  end

# modifies how levelups are assigned, so as to add to a class' level upon level
# up.
  def exp=(exp)
    @exp = [[exp, 9999999].min, 0].max
    # Level up
    while @exp >= @exp_list[@level+1] && @exp_list[@level+1] > 0
      @level += 1
      @class_levels[class_id] += 1
       
    # modifies how skills are assigned, so that it's based on class level, rather
    # than overall level.
      $data_classes[@class_id].learnings.each {|j|
        if j.level == @class_levels[@class_id]
          learn_skill(j.skill_id)
          if LBConf.class_spells(@class_id).include?(j.skill_id)
            @learned_class_skills.push(j.skill_id)
            @learned_class_skills.sort!
          end
           
        end
      }
    end
    # Level down
    while @exp < @exp_list[@level]
      @level -= 1
    end
    # Correction if exceeding current max HP and max SP
    @hp = [@hp, self.maxhp].min
    @sp = [@sp, self.maxsp].min
  end
end

#==============================================================================
# ** Class_Change_Scene
#------------------------------------------------------------------------------
#  Here's where the actual Class Changing Scene code starts!
#  Without this, you would just have some useless additions to the default
#  system!!! That wouldn't be much of a script, would it?
#==============================================================================

class Class_Change_Scene
 
  def initialize
 
# update the unlocked_level array for each actor
    $game_party.actors.each{|actor|
    (1...$data_classes.size).each{|class_id|
    actor.unlock_class(class_id)}}

#create the windows
    @actor_list = Window_Actor_List.new   
    @class_list = Window_Class_List.new
    @class_description = Window_Class_Description.new
   
#set window focus to the actor list
    @actor_list.last_index = 0
    @actor_list.index = 0
    @actor_list.active = true
   
    @last_class = 0
   
  end
 
  def main
       
    #enter the scene's loop
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
   
    # dispose of the windows created in the scene
    Graphics.freeze
    @actor_list.dispose
    @class_list.dispose
    @class_description.dispose
  end
   
  def update
    @actor_list.update
    @class_list.update
    @class_description.update
     
    # if focus is on the actor list, run the actor list's update method
    if @actor_list.active
       update_actor_list
      return
    end
   
    # if focus is on the class list, run the actor list's update method
    if @class_list.active
      update_class_list
      return
    end
  end
 
# This is the update method that will run when the actor list is the active window
  def update_actor_list
   
    # When the player moves the cursor over a new actor in the party, change the
    # text in the class list to whatever classes the highlighted actor has
    # unlocked.
    if @actor_list.index != @actor_list.last_index
      @class_list.class_list = $game_party.actors[@actor_list.index].unlocked_class
      @class_list.actor = $game_party.actors[@actor_list.index].id
      @class_list.refresh 
      @actor_list.last_index = @actor_list.index
    end
   
    # When the user presses the Cancel button, exit the entire menu
    if Input.trigger?(Input::B)
      on_cancel
    end
   
    # When the user presses the action button, activate the class list!
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)

      #switch window focus to the class list
      @actor_list.active = false
      @class_list.index = 0
      @class_list.active = true
     
      #set the current class description, and draw the class description.
      @class_list.actor = $game_party.actors[@actor_list.index].id
      @class_description.actor = $game_party.actors[@actor_list.index].id
      @class_description.current_class = (@class_list.index + 1)
      @class_description.refresh
    return
    end
  end
 
 
# This is the update method that will run when the class list is the active window
  def update_class_list
   
    # When the player moves the cursor over a new class in the list, change the
    # text in the description window to the description of whatever class is
    # highlighted.
    if @class_list.current_class != @last_class
      @last_class = @class_list.current_class
      @class_description.current_class = (@class_list.current_class)
      @class_description.refresh
    end
   
    # When the user presses the Cancel button, return focus to the actor list
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
     
      @class_description.current_class = 0
      @class_description.refresh
      @class_list.index = 0
      @class_list.index = -1
      @class_list.active = false
      @actor_list.active = true
      return
    end
   
    # When the user presses the action button, change the actor's class and
    # and graphic, then return focus to the actor list.
    if Input.trigger?(Input::C)
      $game_system.se_play($data_system.decision_se)
           
      #change the actor's class
      actor_class_change(@class_list.actor, @class_list.current_class)
     
      #refresh, and return focus to the actor list
      @class_description.current_class = 0
      @class_description.refresh
      @actor_list.refresh
      @class_list.index = -1
      @class_list.active = false
      @actor_list.active = true 
      return
    end
  end
 
#--------------------------------------------------------------------------
# * Change graphic
# method used to change the actor's graphics due to a class change.
#--------------------------------------------------------------------------
  def actor_graphics_change(actor_id)
   
    #change the actor's charset
    $game_actors[actor_id].character_name = ($game_actors[actor_id].default_charset_name +
    LBConf.class_graphic($game_actors[actor_id].class_id))

    #change the actor's battler
    $game_actors[actor_id].battler_name = ($game_actors[actor_id].default_battler_name +
    LBConf.class_graphic($game_actors[actor_id].class_id))

  end
 
#--------------------------------------------------------------------------
# * Change class
# method used to change the actor's class, and the class of those linked
# to the actor.
#--------------------------------------------------------------------------
  def actor_class_change(actor_id, class_id)
   
    #setup which actors' class needs to be changed.
    changed_actors = LBConf.linked_actors(actor_id)
    changed_actors.push actor_id
   
    #memorize which class specific skills the actor has learned for the current
    #class, then make the actor forget them
    LBConf.class_spells($game_actors[actor_id].class_id).each{|skill_id|
    $game_actors[actor_id].forget_skill(skill_id)}
   
    #change the actor(s) class.
    changed_actors.each{|actorz|
    $game_actors[actorz].class_id = class_id
   
    #remember any class specific spells the actor has forgotten forthe class
    #they're changing to.
    $game_actors[actorz].learned_class_skills.each{|skill_id|
    if LBConf.class_spells($game_actors[actorz].class_id).include?(skill_id)
      $game_actors[actorz].learn_skill(skill_id)
    end}
   
    #if graphic changing is enabled, change the actor's graphic.
    if LBConf::CLASS_GRAPHIC_CHANGE == true
      actor_graphics_change(actorz)
    end}
   
  end

# this is the method that is called to exit the menu. I did it this way for
# improved compatibility with StormTronics CMS (by Blizzard)
  def on_cancel
    $game_system.se_play($data_system.cancel_se)
    $game_player.refresh
    $scene = Scene_Map.new
    return
  end
end

class Window_Actor_List < Window_Selectable
 
  attr_accessor :last_index
 
  def initialize
    super(160, 0, 480, 352)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
    self.active = false
    @last_index = -1
    self.index = -1
  end
 
  def top_row
    # Divide y-coordinate of window contents transfer origin by 1 row
    # height of 80
    return self.oy / 80
  end
 
  def top_row=(row)
    # Multiply 1 corrected row height by 80 for y-coordinate of window contents
    # transfer origin
    self.oy = [[row, 0].max, row_max - 1].min * 80
  end
 
  def page_row_max
    # Subtract a frame height of 32 from the window height, and divide it by
    # 1 row height of 80
    return (self.height - 32) / 80
  end

  def refresh
    self.contents.clear
    @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
      x = 64
      y = i * 80
      actor = $game_party.actors
      draw_actor_graphic(actor, x - 40, y + 55)
      draw_actor_name(actor, x, y)
      draw_actor_level(actor, x + 144, y)
      self.contents.draw_text(x, y + 32, width - 32, 32, ($data_classes[$game_party.actors.class_id].name + ' rank: ' + $game_party.actors.class_levels[$game_party.actors.class_id].to_s))
    end
  end
  def update_cursor_rect
    # If cursor position is less than 0
    if @index < 0
      self.cursor_rect.empty
      return
    end
    # Get current row
    row = @index / @column_max
    # If current row is before top row
    if row < self.top_row
      # Scroll so that current row becomes top row
      self.top_row = row
    end
    # If current row is more to back than back row
    if row > self.top_row + (self.page_row_max - 1)
      # Scroll so that current row becomes back row
      self.top_row = row - (self.page_row_max - 1)
    end
    # Calculate cursor width
    cursor_width = self.width / @column_max - 32
    # Calculate cursor coordinates
    x = @index % @column_max * (cursor_width + 32)
    y = @index / @column_max * 80 - self.oy
    # Update cursor rectangle
    self.cursor_rect.set(x, y, cursor_width, 80)
  end
end

class Window_Class_List < Window_Selectable
 
  attr_accessor :actor
  attr_accessor :class_list
  attr_accessor :item_max
  attr_reader   :current_class
 
  def initialize
    super(0, 0, 160, 352)
    @actor = 1
    @class_list = $game_actors[@actor].unlocked_class
    @item_max = @class_list.length
    self.contents = Bitmap.new(width - 32, @item_max * 32)
    refresh
    @index = -1
    @active = false
    @current_class = 1
  end
 
  def refresh
    self.contents.clear
    @item_max = @class_list.size
    self.contents = Bitmap.new(width - 32, @item_max * 32)
    i = 0
    @class_list.each{|class_id|
    self.contents.draw_text(10, i, width - 32, 32, $data_classes[class_id].name)
    i += 32 }
  end
 
alias update_cursor_LB update_cursor_rect
  def update_cursor_rect
    update_cursor_LB
    if @index >= 0
      @current_class = @class_list[@index]
    end
  end
end

class Window_Class_Description < Window_Base

  attr_accessor :current_class
  attr_accessor :actor
  def initialize
    super(0, 352, 640, 128)
    @current_class = 0
    @actor = 0
    self.contents = Bitmap.new(width - 32, height - 32)
  end
 
  def refresh
    self.contents.clear
    draw_description(@current_class)
  end
 
 
  def draw_description(class_id)
    offset = 0
    description = LBConf.class_descriptions(class_id)
    description.each_index{|class_descrip|
    self.contents.draw_text(0, (0 + offset *32), width - 32, 32, description[class_descrip])
    offset = offset + 1}
  end
end

legacyblade

It'll be easier if you make a demo of your problem. Use the same script config you have, and include your database of classes (I don't want to have to figure out all the classes in your database :P)

Lakieth

May sound stupid but i am a noob so how do you make demo

legacyblade

Make an RPG Maker XP project with this script (and any others you're using), as well as any custom graphics and stuff from the database needed to reproduce the error while allowing it to function. (in this case, put your scripts, as well as your custom classes into a separate project). Then upload that to sendspace. It needs to be unencrypted.


legacyblade


Lakieth

Oh very sorry as i am for this in convenience here you go
i put it in zip is that ok??


legacyblade

You ended up deleting an end during your configuration.


 when 16 then return ['Archerers duh']


make a new line below that, and put the following code in.

      end


That fixes the problem.

BlueFalkon

Sorry if this is a necropost but I need some help on this.

I'm having a situation with the rank leveling as mentioned above by someone else. When the actor reaches level 99, he/she cannot level any ranks further. If I do a poor way of fixing that by utilizing a break level cap script and decreasing level back to 99 when reaching level 100, the ranks for classes can go over level 99. Furthermore, it is very annoying that the EXP required for rank leveling is based on your actor's current level. If you're a 30 soldier or something and want to switch to a 1 sorcerer and level that up, EXP is based on the 30-31 tier and not 1-2.

Is there a way you can implement the following:

-Gain class EXP even when level 99.
-Make sure class levels do not exceed level 99.
-Make level EXP requirements dependent on class level and not actor level.

Thanks.

legacyblade

While I personally don't think the EXP should be based on class level, enough people are requesting it that I'll add that in as an option. And that level cap/class level cap, that sounds easy to pull off. Expect it soon.

Spoofus

i have found a problem with the version of this script i have
say a character is a  priest and has the heal spell (duh)at class lvl 1 and you change the from priest to fighter and the character unlearns heal from the class change
and when you go back to priest it doesnt relearn heal at all
it  may be cause im extremely unlucky or im a tard lol...probably a mix of both

but all in all id hump your leg anytime over this script...(can i say stuff like that? :haha:)



My Blog site I am working on: http://spoofus.weebly.com/

legacyblade

O.o that's really weird. Can you send me a demo reproducing this bug. I can't seem to get it to occur.

WhiteRose

Quote from: Spoofus on August 09, 2010, 09:08:24 am
i have found a problem with the version of this script i have
say a character is a  priest and has the heal spell (duh)at class lvl 1 and you change the from priest to fighter and the character unlearns heal from the class change
and when you go back to priest it doesnt relearn heal at all
it  may be cause im extremely unlucky or im a tard lol...probably a mix of both

but all in all id hump your leg anytime over this script...(can i say stuff like that? :haha:)




I also vaguely remember having an issue like this while working on Doodle Quest. I don't remember if I solved it, but I don't think it has occurred since, so either the problem resolved itself, or I just haven't noticed it.

legacyblade

I'll try and reproduce it, but I've never run into that bug x.x If anyone can give me a demo where it occurs, that'd be really helpful.

Holyrapid

Hi, i get this error when testing this. It seems to only happen when you choose to become the chosen one, and then try to access the class change. It however happens only if you haven't leveled anyone...
Here's the error.
stack level too deep: ShowHide

legacyblade

O.o now that's a weird bug. I'll have to figure that one out. Not sure what's causing it, but I shall find out >}

Holyrapid


Griver03

May 24, 2011, 11:46:49 am #117 Last Edit: May 30, 2011, 12:43:49 pm by Griver03
hey there very good script !

edit: i removed my questions and the request to trobleshooting...
My most wanted games...



DreamCatcher

Very nice script.
However, i would have a rather similar request to BlueFlakon ones. (Even if almost 2 years are past now)
For me it would be great to level in class independent from the actor level.
Short example:
Actor X need 2000 exp to get from level 1 to 8. He is a lancer level 1. He now get 2000 exp and levels up from 1 to 8 in both level and class-level.
Now he is level 20 and just started to become a hunter. When he now gets 2000 exp his level migth increase to 21 but most importantly, as it was at level 1, his class level should increase to 8.

Imagine, your character is level 90, super-pro fighter, full of life experience and he wants to learn a new class. He would need ages to increase a single class-level and would probably never learn any good spells.
Additionally, this would overcome the lvl 100 cap so that it is not necessary to decrease the level when it reaches the cap (which is good for my game, as my characters gain status-points with every level to increase their stats). Of course, one could simply multiply the class-level-increase ==> e.g. actor level 90 -> 91 increases class_level by 10. But to have seperate class-exp would be much fancier!

Greetings