Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

SubClass Acumulativa

Iniciado por Swarlog, Ago 19, 2022, 12:37 AM

Tema anterior - Siguiente tema

Swarlog

Index: /Trunk/L2_GameServer/java/config/intrepid.properties
===================================================================
--- /Trunk/L2_GameServer/java/config/intrepid.properties (revision 30)
+++ /Trunk/L2_GameServer/java/config/intrepid.properties (revision 49)
@@ -30,2 +30,5 @@
 #---------------------------------------------
 AllowedNPCTypes = L2Boss,L2Chest,L2FestivalMonster,L2Minion,L2Monster,L2Pet,L2RaidBoss,L2SiegeGuard,L2SiegeNpc,L2ControlTower,L2GrandBoss,L2Artefact,L2FortManager,L2FortSiegeNpc,L2FortSiegeGuard,L2FortCommander,L2FortBallista
+
+# Sub stuck
+SubStucking = False
Index: /Trunk/L2_GameServer/java/net/sf/l2j/Config.java
===================================================================
--- /Trunk/L2_GameServer/java/net/sf/l2j/Config.java (revision 30)
+++ /Trunk/L2_GameServer/java/net/sf/l2j/Config.java (revision 49)
@@ -652,4 +652,6 @@
     /** List of NPC types that won't allow casting */
     public static FastList<String> LIST_ALLOWED_NPC_TYPES = new FastList<String>();
+    /** stuck sub **/
+    public static boolean ACUMULATIVE_SUBCLASS_SKILLS;
     
     /** ************************************************** **/
@@ -1552,4 +1554,5 @@
                                LIST_ALLOWED_NPC_TYPES.add(npc_type);
                        }
+                       ACUMULATIVE_SUBCLASS_SKILLS = Boolean.parseBoolean(intrepidSettings.getProperty("SubStucking", "False"));
                    }
                    catch (Exception e)
Index: /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2VillageMasterInstance.java
===================================================================
--- /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2VillageMasterInstance.java (revision 8)
+++ /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2VillageMasterInstance.java (revision 49)
@@ -816,6 +816,6 @@
         
 
-        final Race npcRace = getVillageMasterRace();
-        final ClassType npcTeachType = getVillageMasterTeachType();
+        getVillageMasterRace();
+        getVillageMasterTeachType();
 
         PlayerClass currClass = PlayerClass.values()[charClassId];
@@ -862,22 +862,4 @@
                         availSubs.remove(availSub);                       
                 }
-
-                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);
-                }
             }
         }
Index: /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 48)
+++ /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 49)
@@ -231,4 +231,5 @@
     // Character Skill SQL String Definitions:
        private static final String RESTORE_SKILLS_FOR_CHAR = "SELECT skill_id,skill_level FROM character_skills WHERE charId=? AND class_index=?";
+       private static final String ACUMULATE_SKILLS_FOR_CHAR_SUB = "SELECT skill_id,skill_level FROM character_skills WHERE charId=? ORDER BY skill_id , skill_level ASC";
        private static final String ADD_NEW_SKILL = "INSERT INTO character_skills (charId,skill_id,skill_level,skill_name,class_index) VALUES (?,?,?,?,?)";
        private static final String UPDATE_CHARACTER_SKILL_LEVEL = "UPDATE character_skills SET skill_level=? WHERE skill_id=? AND charId=? AND class_index=?";
@@ -7557,10 +7558,14 @@
                try
                {
+                       // L2 Emu Addon
+                       boolean isAcumulative = Config.ACUMULATIVE_SUBCLASS_SKILLS;
+                       
                        // Retrieve all skills of this L2PcInstance from the database
                        con = L2DatabaseFactory.getInstance().getConnection();
-                       PreparedStatement statement = con.prepareStatement(RESTORE_SKILLS_FOR_CHAR);
-                       
+                       PreparedStatement statement = con.prepareStatement(isAcumulative ? ACUMULATE_SKILLS_FOR_CHAR_SUB : RESTORE_SKILLS_FOR_CHAR);
                        statement.setInt(1, getObjectId());
-                       statement.setInt(2, getClassIndex());
+                       if (!isAcumulative)
+                               // L2 Emu Addon
+                               statement.setInt(2, getClassIndex());
                        ResultSet rset = statement.executeQuery();
 
Index: /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/base/PlayerClass.java
===================================================================
--- /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/base/PlayerClass.java (revision 6)
+++ /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/base/PlayerClass.java (revision 49)
@@ -209,5 +209,4 @@
       
        private static final Set<PlayerClass> mainSubclassSet;
-       private static final Set<PlayerClass> neverSubclassed = EnumSet.of(Overlord, Warsmith);
       
        private static final Set<PlayerClass> subclasseSet1 = EnumSet.of(DarkAvenger, Paladin, TempleKnight, ShillienKnight);
@@ -222,5 +221,4 @@
        {
                Set<PlayerClass> subclasses = getSet(null, Third);
-               subclasses.removeAll(neverSubclassed);
               
                mainSubclassSet = subclasses;
@@ -269,9 +267,38 @@
                                switch (_race)
                                {
+                                       case Human:
+                                               subclasses.removeAll(getSet(DarkElf, Third));
+                                               subclasses.removeAll(getSet(Elf, Third));
+                                               subclasses.removeAll(getSet(Orc, Third));
+                                               subclasses.removeAll(getSet(Dwarf, Third));
+                                               subclasses.removeAll(getSet(Kamael, Third));
+                                               break;
+                                       case DarkElf:
+                                               subclasses.removeAll(getSet(Human, Third));
+                                               subclasses.removeAll(getSet(Elf, Third));
+                                               subclasses.removeAll(getSet(Orc, Third));
+                                               subclasses.removeAll(getSet(Dwarf, Third));
+                                               subclasses.removeAll(getSet(Kamael, Third));
+                                               break;
                                        case Elf:
+                                               subclasses.removeAll(getSet(Human, Third));
                                                subclasses.removeAll(getSet(DarkElf, Third));
-                                               break;
-                                       case DarkElf:
+                                               subclasses.removeAll(getSet(Orc, Third));
+                                               subclasses.removeAll(getSet(Dwarf, Third));
+                                               subclasses.removeAll(getSet(Kamael, Third));
+                                               break;
+                                       case Orc:
+                                               subclasses.removeAll(getSet(Human, Third));
+                                               subclasses.removeAll(getSet(DarkElf, Third));
                                                subclasses.removeAll(getSet(Elf, Third));
+                                               subclasses.removeAll(getSet(Dwarf, Third));
+                                               subclasses.removeAll(getSet(Kamael, Third));
+                                               break;
+                                       case Dwarf:
+                                               subclasses.removeAll(getSet(Human, Third));
+                                               subclasses.removeAll(getSet(DarkElf, Third));
+                                               subclasses.removeAll(getSet(Orc, Third));
+                                               subclasses.removeAll(getSet(Elf, Third));
+                                               subclasses.removeAll(getSet(Kamael, Third));
                                                break;
                                }
@@ -294,6 +321,4 @@
                                else
                                        subclasses.removeAll(EnumSet.of(femaleSoulbreaker));
-                               if (player.getTotalSubClasses() < 2)
-                                       subclasses.removeAll(EnumSet.of(inspector));
                        }
                }
Index: /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 49)
+++ /Trunk/L2_GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 50)
@@ -7575,12 +7575,20 @@
                                int id = rset.getInt("skill_id");
                                int level = rset.getInt("skill_level");
+                               int chclass = rset.getInt("class_index");
 
                                if (id > 9000 && id < 9007)
                                        continue; // fake skills for base stats
-
+                               if(chclass != getClassIndex())
+
+                               {
+                                       // Remove armor mastery from other classes
+                                       if(id == 118 || id == 163 || id == 236 || id == 249 || id == 252 || id == 253 || id == 258 || id == 259) continue;
+                               }
+                                       
                                // Create a L2Skill object for each record
                                L2Skill skill = SkillTable.getInstance().getInfo(id, level);
-
-                               // Add the L2Skill object to the L2Character _skills and its Func objects to the calculator set of the L2Character
+                                       
+                               // Add the L2Skill object to the L2Character _skills and its
+                               // Func objects to the calculator set of the L2Character
                                super.addSkill(skill);
                                if (Config.CHECK_SKILLS && Config.CHECK_SKILLS_ACCESS_LEVEL_LIST.contains(getAccessLevel().getLevel()))
@@ -7594,5 +7602,5 @@
                                                removeSkill(skill);
                                        }
-                       }
+                               }
 
                        rset.close();