Jump to content
  • 0

[Qestion]StuckSubs


Question

7 answers to this question

Recommended Posts

  • 0
Posted

Thats the base code:

 

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));
			}
		}

 

And add that too to avoid the mastery duplicates:

 

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();

 

  • 0
Posted

intrepid.properties doesnt exist at l2j final pack, can u make it work please? tnx ^^

 

Pff, think a bit, it was just an example..

 

You can put it for example in l2jmods.properties

 

Check out this Thread - there is explanation about Config.

 

And next time do not bump old threads, locked.

Guest
This topic is now closed to further replies.


×
×
  • Create New...