Noticias:

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

Menú Principal

Mensajes recientes

#1
Implementaciones / Re:Sonidos Counter Strike al m...
Último mensaje por Swarlog - Sep 18, 2024, 01:19 PM
Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectatelink off

Update!

Gracias por avisar  ;)
#2
Implementaciones / Re:Sonidos Counter Strike al m...
Último mensaje por dwight - Sep 18, 2024, 06:11 AM
link off
#3
Datapacks / Re:Datapack High Five Full Cus...
Último mensaje por Swarlog - Ago 23, 2024, 12:34 AM
Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate
Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate
Debes de estar registrado para poder ver el contenido indicado. Registrate o ConectateSe podrán resubir los files a mega u otra plataforma? Me figura como no disponible el link de descarga

Lo reviso y te digo, gracias por avisar.
Cierto la descarga ya no está activa, cuando tengas un seg para subirla se agradece, y felicidades por el trabajaso


Despues de mirar horas en mi pc, he revisado el primer post y aparece el datapack para descargar pero abajo del todo, en adjuntos.   ;D  ;D  ;D

Pueden descargar ese, es el mismo. Aqui siempre adjuntamos para que si se pierde un link, no perdamos el archivo.

De igual modo, gracias por avisar.
#4
Implementaciones / Re:Buff in Event TVT - CTF & D...
Último mensaje por Swarlog - Ago 23, 2024, 12:31 AM
Gracias por el aporte, saludos  ;)
#5
Implementaciones / Buff in Event TVT - CTF & DM
Último mensaje por DiornanR - Ago 20, 2024, 07:56 PM
Un Pequeño aporte un Mod que cumple la funcion que al entrar a los eventos de TVT, DM y CTF automaticamente te da buff dependiendo la Clases Mage o fighter espero que lo disfruten


### Eclipse Workspace Patch 1.0
Index: head-src/com/l2jfrozen/Config.java
===================================================================
--- head-src/com/l2jfrozen/Config.java   (revision 43)
+++ head-src/com/l2jfrozen/Config.java   (working copy)

public static boolean TVT_STATS_LOGGER;
public static boolean TVT_REMOVE_BUFFS_ON_DIE;
public static boolean TVT_ALLOW_HEALER_CLASSES;
public static String DISABLE_ID_CLASSES_STRING;
public static FastList<Integer> DISABLE_ID_CLASSES = new FastList<>();
+ /* TVT BUFF CONFIG */
+       public static List<int[]> CUSTOM_BUFFS_MTVT = new ArrayList<>();    
+       public static List<int[]> CUSTOM_BUFFS_FTVT = new ArrayList<>();
+/* ============================================================================ */
public static boolean CTF_AURA;
public static boolean CTF_STATS_LOGGER;
public static int CTF_SPAWN_OFFSET;
public static boolean CTF_REMOVE_BUFFS_ON_DIE;
+ /* CTF BUFF CONFIG */
+       public static List<int[]> CUSTOM_BUFFS_MCTF = new ArrayList<>();    
+       public static List<int[]> CUSTOM_BUFFS_FCTF = new ArrayList<>();
+/* ============================================================================ */
public static boolean DM_STATS_LOGGER;
public static boolean DM_ALLOW_HEALER_CLASSES;
public static boolean DM_REMOVE_BUFFS_ON_DIE;
+ /* DM BUFF CONFIG */
+       public static List<int[]> CUSTOM_BUFFS_MDM = new ArrayList<>();    
+       public static List<int[]> CUSTOM_BUFFS_FDM = new ArrayList<>();
+/* ============================================================================ */

TVT_STATS_LOGGER = p.getProperty("TvTStatsLogger", true);
TVT_REMOVE_BUFFS_ON_DIE = p.getProperty("TvTRemoveBuffsOnPlayerDie", false);
TVT_ALLOW_HEALER_CLASSES = p.getProperty("TvTAllowedHealerClasses", true);
DISABLE_ID_CLASSES_STRING = p.getProperty("DisableIdForClasses", "");
+ /*==============================================================================================================================================*/
+ /* TVT BUFF CONFIG */
+ String[] propertySplit = p.getProperty("TvTBuffsMage", "1204,2").split(";");
+ CUSTOM_BUFFS_MTVT.clear();
+ for (String buff : propertySplit)
+      {
+        String[] buffSplit = buff.split(",");
+         if (buffSplit.length != 2)
+            LOGGER.warn("TvTBuffsMage[Config.load()]: invalid config property -> TvTBuffsMage \"" + buff + "\"");
+         else
+         {
+         try
+             {
+             CUSTOM_BUFFS_MTVT.add(new int[]{Integer.parseInt(buffSplit[0]), Integer.parseInt(buffSplit[1])});
+             }
+                 catch (NumberFormatException nfe)
+             {
+                if(Config.ENABLE_ALL_EXCEPTIONS)
+                  nfe.printStackTrace();
+                if (!buff.isEmpty())
+                  LOGGER.warn("TvTBuffsMage[Config.load()]: invalid config property -> TvTBuffsMage \"" + buff + "\"");
+             }
+             }
+          }
+
+         propertySplit = p.getProperty("TvTBuffsFighter", "1204,2").split(";");
+         CUSTOM_BUFFS_FTVT.clear();
+           for (String buff : propertySplit)
+               {
+                String[] buffSplit = buff.split(",");
+                 if (buffSplit.length != 2)
+                     LOGGER.warn("TvTBuffsFighter[Config.load()]: invalid config property -> TvTBuffsFighter \"" + buff + "\"");
+                 else
+                    {
+                 try
+                     {
+                       CUSTOM_BUFFS_FTVT.add(new int[]{Integer.parseInt(buffSplit[0]), Integer.parseInt(buffSplit[1])});
+                     }
+                       catch (NumberFormatException nfe)
+                          {
+                             if(Config.ENABLE_ALL_EXCEPTIONS)
+                                nfe.printStackTrace();
+                                                     
+                             if (!buff.isEmpty())
+                                 LOGGER.warn("TvTBuffsFighter[Config.load()]: invalid config property -> TvTBuffsFighter \"" + buff + "\"");
+                           }
+                       }
+                      }
+ /*==============================================================================================================================================*/
CTF_STATS_LOGGER = p.getProperty("CTFStatsLogger", true);
CTF_SPAWN_OFFSET = Integer.parseInt(p.getProperty("CTFSpawnOffset", "100"));
CTF_REMOVE_BUFFS_ON_DIE = p.getProperty("CTFRemoveBuffsOnPlayerDie", false);
+ /*==============================================================================================================================================*/
+ /* CTF BUFF CONFIG */
+ String[] propertySplit2 = p.getProperty("CTFBuffsMage", "1204,2").split(";");
+ CUSTOM_BUFFS_MCTF.clear();
+ for (String buff : propertySplit2)
+      {
+        String[] buffSplit = buff.split(",");
+         if (buffSplit.length != 2)
+            LOGGER.warn("CTFBuffsMage[Config.load()]: invalid config property -> CTFBuffsMage \"" + buff + "\"");
+         else
+         {
+         try
+             {
+             CUSTOM_BUFFS_MCTF.add(new int[]{Integer.parseInt(buffSplit[0]), Integer.parseInt(buffSplit[1])});
+             }
+                 catch (NumberFormatException nfe)
+             {
+                if(Config.ENABLE_ALL_EXCEPTIONS)
+                  nfe.printStackTrace();
+                if (!buff.isEmpty())
+                  LOGGER.warn("CTFBuffsMage[Config.load()]: invalid config property -> CTFBuffsMage \"" + buff + "\"");
+             }
+             }
+          }
+
+         propertySplit2 = p.getProperty("CTFBuffsFighter", "1204,2").split(";");
+         CUSTOM_BUFFS_FCTF.clear();
+           for (String buff : propertySplit2)
+               {
+                String[] buffSplit = buff.split(",");
+                 if (buffSplit.length != 2)
+                     LOGGER.warn("CTFBuffsFighter[Config.load()]: invalid config property -> CTFBuffsFighter \"" + buff + "\"");
+                 else
+                    {
+                 try
+                     {
+                       CUSTOM_BUFFS_FCTF.add(new int[]{Integer.parseInt(buffSplit[0]), Integer.parseInt(buffSplit[1])});
+                     }
+                       catch (NumberFormatException nfe)
+                          {
+                             if(Config.ENABLE_ALL_EXCEPTIONS)
+                                nfe.printStackTrace();
+                                                     
+                             if (!buff.isEmpty())
+                                 LOGGER.warn("CTFBuffsFighter[Config.load()]: invalid config property -> CTFBuffsFighter \"" + buff + "\"");
+                           }
+                       }
+                      }
+ /*==============================================================================================================================================*/
DM_SPAWN_OFFSET = Integer.parseInt(p.getProperty("DMSpawnOffset", "100"));
DM_STATS_LOGGER = p.getProperty("DMStatsLogger", true);
DM_ALLOW_HEALER_CLASSES = p.getProperty("DMAllowedHealerClasses", true);
DM_REMOVE_BUFFS_ON_DIE = p.getProperty("DMRemoveBuffsOnPlayerDie", false);
+ /*==============================================================================================================================================*/
+ /* DM BUFF CONFIG */
+ String[] propertySplit3 = p.getProperty("DMBuffsMage", "1204,2").split(";");
+ CUSTOM_BUFFS_MDM.clear();
+ for (String buff : propertySplit33)
+      {
+        String[] buffSplit = buff.split(",");
+         if (buffSplit.length != 2)
+            LOGGER.warn("DMBuffsMage[Config.load()]: invalid config property -> DMBuffsMage \"" + buff + "\"");
+         else
+         {
+         try
+             {
+             CUSTOM_BUFFS_MDM.add(new int[]{Integer.parseInt(buffSplit[0]), Integer.parseInt(buffSplit[1])});
+             }
+                 catch (NumberFormatException nfe)
+             {
+                if(Config.ENABLE_ALL_EXCEPTIONS)
+                  nfe.printStackTrace();
+                if (!buff.isEmpty())
+                  LOGGER.warn("DMBuffsMage[Config.load()]: invalid config property -> DMBuffsMage \"" + buff + "\"");
+             }
+             }
+          }
+
+         propertySplit3 = p.getProperty("DMBuffsFighter", "1204,2").split(";");
+         CUSTOM_BUFFS_FDM.clear();
+           for (String buff : propertySplit3)
+               {
+                String[] buffSplit = buff.split(",");
+                 if (buffSplit.length != 2)
+                     LOGGER.warn("DMBuffsFighter[Config.load()]: invalid config property -> DMBuffsFighter \"" + buff + "\"");
+                 else
+                    {
+                 try
+                     {
+                       CUSTOM_BUFFS_FDM.add(new int[]{Integer.parseInt(buffSplit[0]), Integer.parseInt(buffSplit[1])});
+                     }
+                       catch (NumberFormatException nfe)
+                          {
+                             if(Config.ENABLE_ALL_EXCEPTIONS)
+                                nfe.printStackTrace();
+                                                     
+                             if (!buff.isEmpty())
+                                 LOGGER.warn("DMBuffsFighter[Config.load()]: invalid config property -> DMBuffsFighter \"" + buff + "\"");
+                           }
+                       }
+                      }
+ /*==============================================================================================================================================*/









Index: head-src/com/l2jfrozen/gameserver/model/entity/event/TVT.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/model/entity/event/TVT.java   (revision 43)
+++ head-src/com/l2jfrozen/gameserver/model/entity/event/TVT.java   (working copy)

+import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
+import com.l2jfrozen.gameserver.network.SystemMessageId;
+import com.l2jfrozen.gameserver.model.L2Skill;

if (Config.TVT_ON_START_REMOVE_ALL_EFFECTS)
{
player.stopAllEffects();
}

+ //TVTBuff
+ L2Skill skill;
+       SystemMessage sm;
+ if(!player.isMageClass())
+           {
+                for (int[] buff : Config.CUSTOM_BUFFS_FTVT) //Custom buffs for fighters
+                    {
+                        skill = SkillTable.getInstance().getInfo(buff[0], buff[1]);
+                        skill.getEffects(player, player,false,false,false);
+                       sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+                        sm.addSkillName(buff[0]);
+                        player.sendPacket(sm);
+                    }
+            }
+ else
+ {
+ for (int[] buff : Config.CUSTOM_BUFFS_MTVT) //Custom buffs for mystics
+ {
+ skill = SkillTable.getInstance().getInfo(buff[0], buff[1]);
+ skill.getEffects(player, player,false,false,false);
+ sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+ sm.addSkillName(buff[0]);
+ player.sendPacket(sm);
+ }
+ }
+ //-------------------------

Index: head-src/com/l2jfrozen/gameserver/model/entity/event/CTF.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/model/entity/event/CTF.java   (revision 43)
+++ head-src/com/l2jfrozen/gameserver/model/entity/event/CTF.java   (working copy)

+import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
+import com.l2jfrozen.gameserver.network.SystemMessageId;
+import com.l2jfrozen.gameserver.model.L2Skill;

if (Config.CTF_ON_START_REMOVE_ALL_EFFECTS)
{
for (final L2Effect e : player.getAllEffects())
{
if (e != null)
e.exit(true);
}
}

+ //CTFBuff
+ L2Skill skill;
+        SystemMessage sm;
+ if(!player.isMageClass())
+            {
+                for (int[] buff : Config.CUSTOM_BUFFS_FCTF) //Custom buffs for fighters
+                    {
+                        skill = SkillTable.getInstance().getInfo(buff[0], buff[1]);
+                        skill.getEffects(player, player,false,false,false);
+                        sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+                        sm.addSkillName(buff[0]);
+                        player.sendPacket(sm);
+                    }
+            }
+ else
+ {
+ for (int[] buff : Config.CUSTOM_BUFFS_MCTF) //Custom buffs for mystics
+ {
+ skill = SkillTable.getInstance().getInfo(buff[0], buff[1]);
+ skill.getEffects(player, player,false,false,false);
+ sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+ sm.addSkillName(buff[0]);
+ player.sendPacket(sm);
+ }
+ }
+ //-------------------------



Index: head-src/com/l2jfrozen/gameserver/model/entity/event/DM.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/model/entity/event/DM.java   (revision 43)
+++ head-src/com/l2jfrozen/gameserver/model/entity/event/DM.java   (working copy)

+import com.l2jfrozen.gameserver.network.serverpackets.SystemMessage;
+import com.l2jfrozen.gameserver.network.SystemMessageId;
+import com.l2jfrozen.gameserver.model.L2Skill;

if (Config.DM_ON_START_REMOVE_ALL_EFFECTS)
{
player.stopAllEffects();
}

+ //DMBuff
+ L2Skill skill;
+        SystemMessage sm;
+ if(!player.isMageClass())
+            {
+                for (int[] buff : Config.CUSTOM_BUFFS_FDM) //Custom buffs for fighters
+                    {
+                        skill = SkillTable.getInstance().getInfo(buff[0], buff[1]);
+                        skill.getEffects(player, player,false,false,false);
+                        sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+                        sm.addSkillName(buff[0]);
+                        player.sendPacket(sm);
+                    }
+            }
+ else
+ {
+ for (int[] buff : Config.CUSTOM_BUFFS_MDM) //Custom buffs for mystics
+ {
+ skill = SkillTable.getInstance().getInfo(buff[0], buff[1]);
+ skill.getEffects(player, player,false,false,false);
+ sm = new SystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT);
+ sm.addSkillName(buff[0]);
+ player.sendPacket(sm);
+ }
+ }
+ //-------------------------
+











GameServer/Config/Function/eventmanager.ini

+# ----------------------------------------
+# Custom TVT buffs
+#------------------------------------------
+#Buffs for mage classes:
+#Retail: Wind Walk(lvl 2) and Acumen(lvl 1)
+TvTBuffsMage = 1204,2;1040,3;1035,4;1045,6;1048,6;1036,2;1303,2;1085,3;1059,3;1078,6;1062,2;1397,3;264,1;267,1;268,1;304,1;349,1;364,1;273,1;276,1;365,1;1413,1;1391,3;4703,1;
+
+#Buffs for fighter classes:
+#Retail: Wind Walk(lvl 2) and Haste(lvl 1)
+TvTBuffsFighter = 1204,2;1068,3;1040,3;1035,4;1036,2;1045,6;1086,2;1077,3;1240,3;1242,3;264,1;267,1;268,1;269,1;304,1;349,1;364,1;271,1;274,1;275,1;1363,1;1391,3;4699,1;4703,1;
+
+# ----------------------------------------
+# Custom CTF buffs
+#------------------------------------------
+#Buffs for mage classes:
+#Retail: Wind Walk(lvl 2) and Acumen(lvl 1)
+CTFBuffsMage = 1204,2;1040,3;1035,4;1045,6;1048,6;1036,2;1303,2;1085,3;1059,3;1078,6;1062,2;1397,3;264,1;267,1;268,1;304,1;349,1;364,1;273,1;276,1;365,1;1413,1;1391,3;4703,1;
+
+#Buffs for fighter classes:
+#Retail: Wind Walk(lvl 2) and Haste(lvl 1)
+CTFBuffsFighter = 1204,2;1068,3;1040,3;1035,4;1036,2;1045,6;1086,2;1077,3;1240,3;1242,3;264,1;267,1;268,1;269,1;304,1;349,1;364,1;271,1;274,1;275,1;1363,1;1391,3;4699,1;4703,1;
+
+
+# ----------------------------------------
+# Custom DM buffs
+#------------------------------------------
+#Buffs for mage classes:
+#Retail: Wind Walk(lvl 2) and Acumen(lvl 1)
+DMBuffsMage = 1204,2;1040,3;1035,4;1045,6;1048,6;1036,2;1303,2;1085,3;1059,3;1078,6;1062,2;1397,3;264,1;267,1;268,1;304,1;349,1;364,1;273,1;276,1;365,1;1413,1;1391,3;4703,1;
+
+#Buffs for fighter classes:
+#Retail: Wind Walk(lvl 2) and Haste(lvl 1)
+DMBuffsFighter = 1204,2;1068,3;1040,3;1035,4;1036,2;1045,6;1086,2;1077,3;1240,3;1242,3;264,1;267,1;268,1;269,1;304,1;349,1;364,1;271,1;274,1;275,1;1363,1;1391,3;4699,1;4703,1;

#6
Eventos / Re:Evento Hidden Bastard
Último mensaje por DiornanR - Ago 20, 2024, 05:10 AM
Codigo Faltante
Config.java

//HiddenBastard
public static boolean ENABLE_HIDDENBASTARD_EVENT;
public static String[] HIDDENBASTARD_INTERVAL;
public static int HIDDENBASTARD_EVENT_REWARD_ID;
public static int HIDDENBASTARD_EVENT_REWARD_AMOUNT;

//HiddenBastard
ENABLE_HIDDENBASTARD_EVENT = p.getProperty("HBEnableEvent", false);
HIDDENBASTARD_INTERVAL = p.getProperty("HBInterval", "20:00").split(",");
HIDDENBASTARD_EVENT_REWARD_ID = Integer.parseInt(p.getProperty("HBRewardId", "6392"));
HIDDENBASTARD_EVENT_REWARD_AMOUNT = Integer.parseInt(p.getProperty("HBRewardAmount", "1"));


L2PcInstance.java

//HiddenBastard
  private boolean isBastard;

     public void setIsBastard(boolean isBastard) {
         this.isBastard = isBastard;
     }

     public boolean getIsBastard() {
         return isBastard;
     }


En el DataPack en la siguiente direccion: GameServer/Config/eventmanager.ini

#============================================================#
#                        Hidden Bastard                      #
#============================================================#

HBEnableEvent = True
HBInterval = 23:00
HBRewardId = 9252
HBRewardAmount = 1
#7
Datapacks / Re:Datapack High Five Full Cus...
Último mensaje por yelopy - Ago 10, 2024, 12:43 AM
Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate
Debes de estar registrado para poder ver el contenido indicado. Registrate o ConectateSe podrán resubir los files a mega u otra plataforma? Me figura como no disponible el link de descarga

Lo reviso y te digo, gracias por avisar.
Cierto la descarga ya no está activa, cuando tengas un seg para subirla se agradece, y felicidades por el trabajaso
#8
Datapacks / Re:Datapack High Five Full Cus...
Último mensaje por Swarlog - Ago 07, 2024, 03:52 AM
Debes de estar registrado para poder ver el contenido indicado. Registrate o ConectateSe podrán resubir los files a mega u otra plataforma? Me figura como no disponible el link de descarga

Lo reviso y te digo, gracias por avisar.
#9
Implementaciones / Re:SubClass Acumulativa
Último mensaje por Swarlog - Ago 07, 2024, 03:51 AM
Debes de estar registrado para poder ver el contenido indicado. Registrate o ConectateCODIGO Adaptado para L2JFrozen y Corregido
/* CODIGO DE SUBACUMULATIVA */
public synchronized void restoreSkills() {
    boolean isAcumulative = Config.ACUMULATIVE_SUBCLASS_SKILLS;
    try (Connection con = L2DatabaseFactory.getInstance().getConnection(false)) {
        // Eliminar habilidades específicas 146 y 147 antes de restaurar
     // try (PreparedStatement deleteStatement = con.prepareStatement("DELETE FROM character_skills WHERE char_obj_id = ? AND skill_id IN (146, 147, 141, 249, 250)")) {
        try (PreparedStatement deleteStatement = con.prepareStatement("DELETE FROM character_skills WHERE char_obj_id = ? AND skill_id IN (146, 147, 141, 249, 250, 227, 233, 236, 252, 258, 234, 235, 251, 231, 232, 253, 259)")) {
            deleteStatement.setInt(1, getObjectId());
            deleteStatement.executeUpdate();
        }

        PreparedStatement statement;
        if (Config.KEEP_SUBCLASS_SKILLS) {
            statement = con.prepareStatement(RESTORE_SKILLS_FOR_CHAR_ALT_SUBCLASS);
            statement.setInt(1, getObjectId());
        } else {
            statement = con.prepareStatement(isAcumulative ? ACUMULATE_SKILLS_FOR_CHAR_SUB : RESTORE_SKILLS_FOR_CHAR);
            statement.setInt(1, getObjectId());
            if (!isAcumulative) {
                statement.setInt(2, getClassIndex());
            }
        }

        // Usamos un conjunto para almacenar los skills que ya han sido agregados
        Set<Integer> addedSkills = new HashSet<>();

        try (ResultSet rset = statement.executeQuery()) {
            while (rset.next()) {
                int id = rset.getInt("skill_id");
                int level = rset.getInt("skill_level");

             // if (id > 9000 || id == 146 || id == 147 || id == 141 || id == 249 || id == 250) {
                if (id > 9000 || id == 146 || id == 147 || id == 141 || id == 249 || id == 250 || id == 227 || id == 233  || id == 236 || id == 252 || id == 258  || id == 234 || id == 235 || id == 251 || id == 231 || id == 232 || id == 253 || id == 259) {
                    // Fake skills for base stats or excluded skills, skipping
                    continue;
                }

                // Verifica si la habilidad ya ha sido añadida para evitar duplicados
                if (addedSkills.contains(id)) {
                    continue;
                }

                // Omite habilidades específicas de otras clases si no se deben conservar las habilidades de subclase
                if (!Config.KEEP_SUBCLASS_SKILLS && rset.getInt("class_index") != getClassIndex()) {
                    continue; // Solo continuar si no es la clase actual y no estamos manteniendo las habilidades de subclase
                }

                // Añade la habilidad y registra su ID para evitar duplicados
                L2Skill skill = SkillTable.getInstance().getInfo(id, level);
                addSkill(skill);
                addedSkills.add(id);
            }
        }
    } catch (Exception e) {
        if (Config.ENABLE_ALL_EXCEPTIONS) {
            e.printStackTrace();
        }

        LOGGER.warn("Could not restore character skills: " + e);
    }
}
[/b]

Gracias por el aporte  ;)
#10
Implementaciones / Re:SubClass Acumulativa
Último mensaje por DiornanR - Ago 02, 2024, 05:53 PM
CODIGO Adaptado para L2JFrozen y Corregido
/* CODIGO DE SUBACUMULATIVA */
public synchronized void restoreSkills() {
    boolean isAcumulative = Config.ACUMULATIVE_SUBCLASS_SKILLS;
    try (Connection con = L2DatabaseFactory.getInstance().getConnection(false)) {
        // Eliminar habilidades específicas 146 y 147 antes de restaurar
     // try (PreparedStatement deleteStatement = con.prepareStatement("DELETE FROM character_skills WHERE char_obj_id = ? AND skill_id IN (146, 147, 141, 249, 250)")) {
        try (PreparedStatement deleteStatement = con.prepareStatement("DELETE FROM character_skills WHERE char_obj_id = ? AND skill_id IN (146, 147, 141, 249, 250, 227, 233, 236, 252, 258, 234, 235, 251, 231, 232, 253, 259)")) {
            deleteStatement.setInt(1, getObjectId());
            deleteStatement.executeUpdate();
        }

        PreparedStatement statement;
        if (Config.KEEP_SUBCLASS_SKILLS) {
            statement = con.prepareStatement(RESTORE_SKILLS_FOR_CHAR_ALT_SUBCLASS);
            statement.setInt(1, getObjectId());
        } else {
            statement = con.prepareStatement(isAcumulative ? ACUMULATE_SKILLS_FOR_CHAR_SUB : RESTORE_SKILLS_FOR_CHAR);
            statement.setInt(1, getObjectId());
            if (!isAcumulative) {
                statement.setInt(2, getClassIndex());
            }
        }

        // Usamos un conjunto para almacenar los skills que ya han sido agregados
        Set<Integer> addedSkills = new HashSet<>();

        try (ResultSet rset = statement.executeQuery()) {
            while (rset.next()) {
                int id = rset.getInt("skill_id");
                int level = rset.getInt("skill_level");

             // if (id > 9000 || id == 146 || id == 147 || id == 141 || id == 249 || id == 250) {
                if (id > 9000 || id == 146 || id == 147 || id == 141 || id == 249 || id == 250 || id == 227 || id == 233  || id == 236 || id == 252 || id == 258  || id == 234 || id == 235 || id == 251 || id == 231 || id == 232 || id == 253 || id == 259) {
                    // Fake skills for base stats or excluded skills, skipping
                    continue;
                }

                // Verifica si la habilidad ya ha sido añadida para evitar duplicados
                if (addedSkills.contains(id)) {
                    continue;
                }

                // Omite habilidades específicas de otras clases si no se deben conservar las habilidades de subclase
                if (!Config.KEEP_SUBCLASS_SKILLS && rset.getInt("class_index") != getClassIndex()) {
                    continue; // Solo continuar si no es la clase actual y no estamos manteniendo las habilidades de subclase
                }

                // Añade la habilidad y registra su ID para evitar duplicados
                L2Skill skill = SkillTable.getInstance().getInfo(id, level);
                addSkill(skill);
                addedSkills.add(id);
            }
        }
    } catch (Exception e) {
        if (Config.ENABLE_ALL_EXCEPTIONS) {
            e.printStackTrace();
        }

        LOGGER.warn("Could not restore character skills: " + e);
    }
}
[/b]