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.


  • Posts

    • sell adena l2rebon signature x1 - 1kk = 1 dollars l2reborn x10 - 500kk = 4.7 dollars E-Global x Lu4 - 1kk = 2.7 dollars BOHPTS - x20-x500 TOP PRICE DISCORD - GODDARDSHOP TELEGRAM - MMOPROMO
    • Hello send me on discord to receive the files source packages you order fron team, thanks you.
    • 亲爱的 SocNet 用户! 我们想向您介绍我们平台当前的促销和特惠活动列表: 1. 在 9 月使用优惠码 SEPTEMBER2025(9 折优惠)即可在我们的商店(网站、机器人)购物!您还可以在首次购买时使用优惠码:SOCNET(85 折优惠) 2. 获得 $1 商店余额或 10-20% 折扣,只需在我们网站注册后按照以下模板填写您的用户名: "SEND ME BONUS, MY USERNAME IS..." ——需要在我们的论坛主题帖中发布! 3. 获得 $1 用于首次试用 SMM 面板:只需在我们网站(支持中心)提交一个主题为 “Get Trial Bonus” 的工单。 4. 我们的 Telegram 频道和机器人中每周都会赠送 Telegram Stars! 当前链接: 数字商品商店(网站):前往 购买 Telegram Stars 的 Telegram 机器人:前往 SMM 面板:前往 – 推广您的社交媒体账号。 商店 Telegram 机器人:前往 新闻资源: Telegram 频道: https://t.me/accsforyou_shop WhatsApp 频道: https://whatsapp.com/channel/0029Vau0CMX002TGkD4uHa2n Discord 服务器: https://discord.gg/y9AStFFsrh 我们正在积极寻找以下商品类别的供应商: — Snapchat 新旧账号 | 带积分 (snapscores) | 地区: 欧洲/美国 | 邮箱/手机号完全访问权限 — Reddit 老账号(暴力破解或被盗来源,自注册)| 帖子和评论业力值 100 至 100,000+ | 含邮箱完全访问权限 — LinkedIn 老账号 | 拥有真实连接 (connections) | 地区: 欧洲/美国 | 邮箱完全访问权限 + 活跃的 2FA 密码 — Instagram 老账号 (2010-2023 年) | 邮箱完全访问权限(可能包含活跃的 2FA 密码) — Facebook 老账号 (2010-2023 年) | 邮箱完全访问权限(可能包含活跃的 2FA 密码)| 有好友或无好友 | 地区: 欧洲/美国/亚洲 — Threads 账号 | 邮箱完全访问权限(可能包含活跃的 2FA 密码) — TikTok/Facebook/Google ADS 代理广告账号 请通过以下联系方式联系我们 —— 我们来讨论合作条件! 我们也随时欢迎其他合作机会。 联系方式和支持: Telegram: https://t.me/socnet_support WhatsApp: https://wa.me/79051904467 Discord: socnet_support 邮箱: solomonbog@socnet.store 通过这些联系方式您还可以: — 咨询批量采购 — 建立合作伙伴关系(现有合作伙伴: https://socnet.bgng.io/partners ) — 成为我们的供应商
    • 亲爱的 SocNet 用户! 我们想向您介绍我们平台当前的促销和特惠活动列表: 1. 在 9 月使用优惠码 SEPTEMBER2025(9 折优惠)即可在我们的商店(网站、机器人)购物!您还可以在首次购买时使用优惠码:SOCNET(85 折优惠) 2. 获得 $1 商店余额或 10-20% 折扣,只需在我们网站注册后按照以下模板填写您的用户名: "SEND ME BONUS, MY USERNAME IS..." ——需要在我们的论坛主题帖中发布! 3. 获得 $1 用于首次试用 SMM 面板:只需在我们网站(支持中心)提交一个主题为 “Get Trial Bonus” 的工单。 4. 我们的 Telegram 频道和机器人中每周都会赠送 Telegram Stars! 当前链接: 数字商品商店(网站):前往 购买 Telegram Stars 的 Telegram 机器人:前往 SMM 面板:前往 – 推广您的社交媒体账号。 商店 Telegram 机器人:前往 新闻资源: Telegram 频道: https://t.me/accsforyou_shop WhatsApp 频道: https://whatsapp.com/channel/0029Vau0CMX002TGkD4uHa2n Discord 服务器: https://discord.gg/y9AStFFsrh 我们正在积极寻找以下商品类别的供应商: — Snapchat 新旧账号 | 带积分 (snapscores) | 地区: 欧洲/美国 | 邮箱/手机号完全访问权限 — Reddit 老账号(暴力破解或被盗来源,自注册)| 帖子和评论业力值 100 至 100,000+ | 含邮箱完全访问权限 — LinkedIn 老账号 | 拥有真实连接 (connections) | 地区: 欧洲/美国 | 邮箱完全访问权限 + 活跃的 2FA 密码 — Instagram 老账号 (2010-2023 年) | 邮箱完全访问权限(可能包含活跃的 2FA 密码) — Facebook 老账号 (2010-2023 年) | 邮箱完全访问权限(可能包含活跃的 2FA 密码)| 有好友或无好友 | 地区: 欧洲/美国/亚洲 — Threads 账号 | 邮箱完全访问权限(可能包含活跃的 2FA 密码) — TikTok/Facebook/Google ADS 代理广告账号 请通过以下联系方式联系我们 —— 我们来讨论合作条件! 我们也随时欢迎其他合作机会。 联系方式和支持: Telegram: https://t.me/socnet_support WhatsApp: https://wa.me/79051904467 Discord: socnet_support 邮箱: solomonbog@socnet.store 通过这些联系方式您还可以: — 咨询批量采购 — 建立合作伙伴关系(现有合作伙伴: https://socnet.bgng.io/partners ) — 成为我们的供应商
    • 亲爱的 SocNet 用户! 我们想向您介绍我们平台当前的促销和特惠活动列表: 1. 在 9 月使用优惠码 SEPTEMBER2025(9 折优惠)即可在我们的商店(网站、机器人)购物!您还可以在首次购买时使用优惠码:SOCNET(85 折优惠) 2. 获得 $1 商店余额或 10-20% 折扣,只需在我们网站注册后按照以下模板填写您的用户名: "SEND ME BONUS, MY USERNAME IS..." ——需要在我们的论坛主题帖中发布! 3. 获得 $1 用于首次试用 SMM 面板:只需在我们网站(支持中心)提交一个主题为 “Get Trial Bonus” 的工单。 4. 我们的 Telegram 频道和机器人中每周都会赠送 Telegram Stars! 当前链接: 数字商品商店(网站):前往 购买 Telegram Stars 的 Telegram 机器人:前往 SMM 面板:前往 – 推广您的社交媒体账号。 商店 Telegram 机器人:前往 新闻资源: Telegram 频道: https://t.me/accsforyou_shop WhatsApp 频道: https://whatsapp.com/channel/0029Vau0CMX002TGkD4uHa2n Discord 服务器: https://discord.gg/y9AStFFsrh 我们正在积极寻找以下商品类别的供应商: — Snapchat 新旧账号 | 带积分 (snapscores) | 地区: 欧洲/美国 | 邮箱/手机号完全访问权限 — Reddit 老账号(暴力破解或被盗来源,自注册)| 帖子和评论业力值 100 至 100,000+ | 含邮箱完全访问权限 — LinkedIn 老账号 | 拥有真实连接 (connections) | 地区: 欧洲/美国 | 邮箱完全访问权限 + 活跃的 2FA 密码 — Instagram 老账号 (2010-2023 年) | 邮箱完全访问权限(可能包含活跃的 2FA 密码) — Facebook 老账号 (2010-2023 年) | 邮箱完全访问权限(可能包含活跃的 2FA 密码)| 有好友或无好友 | 地区: 欧洲/美国/亚洲 — Threads 账号 | 邮箱完全访问权限(可能包含活跃的 2FA 密码) — TikTok/Facebook/Google ADS 代理广告账号 请通过以下联系方式联系我们 —— 我们来讨论合作条件! 我们也随时欢迎其他合作机会。 联系方式和支持: Telegram: https://t.me/socnet_support WhatsApp: https://wa.me/79051904467 Discord: socnet_support 邮箱: solomonbog@socnet.store 通过这些联系方式您还可以: — 咨询批量采购 — 建立合作伙伴关系(现有合作伙伴: https://socnet.bgng.io/partners ) — 成为我们的供应商
  • Topics

×
×
  • 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