Jump to content

[Guide]edit the subclass system


Intrepid

Recommended Posts

well here's my guide for edit the subclasses.

 

1st how to list subclasses in 1 npc:

go to L2VillageMasterInstance.java located in gameserver.model.actor.instance

search for this:

       

/**
         * If the race of your main class is Elf or Dark Elf,
         * you may not select each class as a subclass to the other class,
         * and you may not select Overlord and Warsmith class as a subclass.
         *
         * You may not select a similar class as the subclass.
         * The occupations classified as similar classes are as follows:
         *
         * Treasure Hunter, Plainswalker and Abyss Walker
         * Hawkeye, Silver Ranger and Phantom Ranger
         * Paladin, Dark Avenger, Temple Knight and Shillien Knight
         * Warlocks, Elemental Summoner and Phantom Summoner
         * Elder and Shillien Elder
         * Swordsinger and Bladedancer
         * Sorcerer, Spellsinger and Spellhowler
         *
         */

in l2jfree pack(i compile it now so the last rev of gracia) is in the 739.line

under this you see that:

           

    if (npcRace == Race.Human || npcRace == Race.Elf)
                {
                    // If the master is human or light elf, ensure that fighter-type
                    // masters only teach fighter classes, and priest-type masters
                    // only teach priest classes etc.
                    if (!availSub.isOfType(npcTeachType)) availSubs.remove(availSub);

                    // Remove any non-human or light elf classes.
                    else if (!availSub.isOfRace(Race.Human)
                        && !availSub.isOfRace(Race.Elf)) availSubs.remove(availSub);
                }
                else
                {
                    // If the master is not human and not light elf,
                    // then remove any classes not of the same race as the master.
                    if (!availSub.isOfRace(npcRace)) availSubs.remove(availSub);
                }

what was that mean:

                   

if (!availSub.isOfType(npcTeachType)) availSubs.remove(availSub);

this means fighter class npc teach only fighter class subclasses and mage type npc teach only mage classes if you dont want that just delete just delete it.

 

                    // Remove any non-human or light elf classes.
                    else if (!availSub.isOfRace(Race.Human)
                        && !availSub.isOfRace(Race.Elf)) availSubs.remove(availSub);

this means the npc dont list you for subclass the orc dwarf and dark elf if the master npc(priest)is elf or human.if you dont need this delete it.

 

                {
                    // If the master is not human and not light elf,
                    // then remove any classes not of the same race as the master.
                    if (!availSub.isOfRace(npcRace)) availSubs.remove(availSub);
                }

this means if the master npc is not human or elf the npc dont list subclasses from other classes only from the master npc's class.if you dont want it just delete.

 

you need to see this if you want to list all class at 1 npc:

       

Set<PlayerClass> availSubs = currClass.getAvailableSubclasses();

        if (availSubs != null)
        {
            for (PlayerClass availSub : availSubs)
            {
                for (Iterator<SubClass> subList = iterSubClasses(player); subList.hasNext();)
                {
                    SubClass prevSubClass = subList.next();
                    int subClassId = prevSubClass.getClassId();
                    if (subClassId >= 88) subClassId = ClassId.values()[subClassId].getParent().getId();

                    if (availSub.ordinal() == subClassId
                        || availSub.ordinal() == player.getBaseClass())
                        availSubs.remove(PlayerClass.values()[availSub.ordinal()]);
                }
            }
        }

        return availSubs;

 

2nd how to edit the subclass limitations beetwen classes:

go to PlayerClass.java located in gameserver.model.base

here you see a list with all classes go down until you see the enumsets:

	
        private static final Set<PlayerClass> subclasseSet1 = EnumSet.of(DarkAvenger, Paladin, TempleKnight, ShillienKnight);
private static final Set<PlayerClass> subclasseSet2 = EnumSet.of(TreasureHunter, AbyssWalker, Plainswalker);
private static final Set<PlayerClass> subclasseSet3 = EnumSet.of(Hawkeye, SilverRanger, PhantomRanger);
private static final Set<PlayerClass> subclasseSet4 = EnumSet.of(Warlock, ElementalSummoner, PhantomSummoner);
private static final Set<PlayerClass> subclasseSet5 = EnumSet.of(Sorceror, Spellsinger, Spellhowler);

 

you see the never subclassed enumset with overlord and warsmith if you want to allow them just delete these lines:

	private static final Set<PlayerClass> neverSubclassed = EnumSet.of(Overlord, Warsmith);
subclasses.removeAll(neverSubclassed);

 

in the other 5 set you see the subclass limits beetwen classes with type you know dagger class cant sub to other dagger summoner cant sub to other cummoner class and so on...

if you want to allow these you need to delete 4 lines for each subclass set

these lines:

 

	private static final Set<PlayerClass> subclasseSet1 = EnumSet.of(DarkAvenger, Paladin, TempleKnight, ShillienKnight);

	subclassSetMap.put(DarkAvenger, subclasseSet1);
	subclassSetMap.put(Paladin, subclasseSet1);
	subclassSetMap.put(TempleKnight, subclasseSet1);
	subclassSetMap.put(ShillienKnight, subclasseSet1);

 

and so on for each set you want allow for subclass.

 

now allow elf class to sub for dark elf:

search for this:

				switch (_race)
			{
				case Elf:
					subclasses.removeAll(getSet(DarkElf, Third));
					break;
				case DarkElf:
					subclasses.removeAll(getSet(Elf, Third));
					break;
			}

here you see case Elf.case elf means the npc remove all delf class from master npc if you are elf and in case DarkElf the master npc remove all class from elf race if you are dark elf the only thing you need to do is delete these things if you want to allow them.

 

now let see the kamael.For kamael i dont want to allow all class to sub to that shitty race because of the wing...if a warlord for example sub to kamael he cant use kamael skills because of they are wing reletad and it's make errors in gs consol...

so i show 2 things you can edit with kamael classes.

1st thing subclass beetwen male and female classes:

				subclasses = getSet(Kamael, Third);
			subclasses.remove(this);
			//Check sex, male can't subclass female and vice versa
			if (player.getAppearance().getSex())
				subclasses.removeAll(EnumSet.of(maleSoulbreaker));
			else
				subclasses.removeAll(EnumSet.of(femaleSoulbreaker));

search for this here you can see male cant sub to female and female cant sub to male.delete it if you want to allow.

2nd the inspector class:

				if (player.getTotalSubClasses() < 2)
				subclasses.removeAll(EnumSet.of(inspector));

here you can edit how many completed subclass needed to be an inspector.you need to edit number in player.getTotalSubClasses.

 

i think it's done now.The kamael section is totally untested!(because i hate them too much:D)

If you have problem post it.

credits to me.

Link to comment
Share on other sites

  • 1 month later...

ummm i have l2jfree and i dont have model in my gameserver folder... where is it located?

 

Its in the java not directly in your downloaded gs folder.

 

L2VillageMasterInstance.java located in gameserver.model.actor.instance

Link to comment
Share on other sites

Its in the java not directly in your downloaded gs folder.

 

L2VillageMasterInstance.java located in gameserver.model.actor.instance

 

ummm what where is gameserver.model.actor.instance located? lol... i only see like data, sql, etc...

Link to comment
Share on other sites

ummm what where is gameserver.model.actor.instance located? lol... i only see like data, sql, etc...

 

if you dont know java you cant make it...thats how it looks..if you want to learn it...

http://www.maxcheaters.com/forum/index.php?topic=44325.0

Link to comment
Share on other sites

  • 4 weeks later...

Id like to add the fallowing

 

With this you can set form what race a main's subclass can be. Something like non-mutant substuck servers.

You can set orcs subclass only from orcs , orc subclass from dark elven and human etc...As you wish...

 

Go to net/sf/l2j/gameserver/model/base/PlayerClass.java

 

and you got this code

	public final Set<PlayerClass> getAvailableSubclasses(L2PcInstance player)
{
	Set<PlayerClass> subclasses = null;

	if (_level == Third)
	{
		if (player.getRace() != Kamael)
		{
			subclasses = EnumSet.copyOf(mainSubclassSet);

			subclasses.remove(this);

			switch (_race)
			{
				case Elf:
					subclasses.removeAll(getSet(DarkElf, Third));
					break;
				case DarkElf:
					subclasses.removeAll(getSet(Elf, Third));
					break;
			}

			subclasses.removeAll(getSet(Kamael, Third));

			Set<PlayerClass> unavailableClasses = subclassSetMap.get(this);

			if (unavailableClasses != null)
				subclasses.removeAll(unavailableClasses);

		}

 

 

You probably noticed already the code

case Elf:

subclasses.removeAll(getSet(DarkElf, Third));

break;

case DarkElf:

subclasses.removeAll(getSet(Elf, Third));

break;

 

That code means that the elf classes are deleted from a dark elf's character menu when he talks to a subclass manager and vice-versa.

 

For example you want an orc to be able to subclass only from its own race...Youre gonna use this

 

case Elf:

subclasses.removeAll(getSet(DarkElf, Third));

break;

case DarkElf:

subclasses.removeAll(getSet(Elf, Third));

break;

+case Orc:

+subclasses.removeAll(getSet(Elf, Third));

+subclasses.removeAll(getSet(DarkElf, Third));

+subclasses.removeAll(getSet(Human, Third));

+subclasses.removeAll(getSet(Dwarf, Third));

+subclasses.removeAll(getSet(Kamael, Third));

+break;

 

The point is that for every race that you wanna change, you delete the other races.

Link to comment
Share on other sites

  • 4 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock