Jump to content

Recommended Posts

Posted

As you may have noticed, this bug works in almost every pack and the only way to avoid it is to add this code in your server's source. I've seen characters having 100.000 HP using this bug, because they can do it over and over again.

 

Index: /java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- /java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(revision 1434)
+++ /java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(working copy)
@@ -9680,6 +9680,90 @@

public boolean setActiveClass(int classIndex)
    {
+	      L2ItemInstance rhand = getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
+	      if (rhand != null)
+	      {
+	         
+	            L2ItemInstance[] unequipped = getInventory().unEquipItemInBodySlotAndRecord(rhand.getItem().getBodyPart());
+	            InventoryUpdate iu = new InventoryUpdate();
+	            for (L2ItemInstance element : unequipped)
+	               iu.addModifiedItem(element);
+	            sendPacket(iu);
+	         
+	      }
+	      
+	      L2ItemInstance lhand = getInventory().getPaperdollItem(Inventory.PAPERDOLL_LHAND);
+	      if (lhand != null)
+	      {
+	         
+	            L2ItemInstance[] unequipped = getInventory().unEquipItemInBodySlotAndRecord(lhand.getItem().getBodyPart());
+	            InventoryUpdate iu = new InventoryUpdate();
+	            for (L2ItemInstance element : unequipped)
+	               iu.addModifiedItem(element);
+	            sendPacket(iu);
+	         
+	      }
        /*
         * 1. Call store() before modifying _classIndex to avoid skill effects rollover.
         * 2. Register the correct _classId against applied 'classIndex'.
         */
        store();

 

After you add this code, compile your pack and the bug will be fixed.

Once this code is added in your source, a character's weapon or shield is automatically unequipped while changing or canceling a sub-class, before the passive ability is stacked.

 

Credits To: Kazeno

Posted

man i want to ask something cause i don't know many things about compile or java

everytime that i use a code i have to compile my pack again? i am asking cause u saying:

After you add this code, compile your pack and the bug will be fixed.

 

Posted

Better => http://www.maxcheaters.com/forum/index.php?topic=41734.0

 

Or Even Better >

 

Index: /java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java

===================================================================

--- /java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 2789)

+++ /java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy)

@@ -9680,6 +9680,90 @@

      */

    public boolean setActiveClass(int classIndex)

    {

+       L2ItemInstance chest = getInventory().getPaperdollItem(Inventory.PAPERDOLL_CHEST);

+       if (chest != null)

+       {

+        

+             L2ItemInstance[] unequipped = getInventory().unEquipItemInBodySlotAndRecord(chest.getItem().getBodyPart());

+             InventoryUpdate iu = new InventoryUpdate();

+             for (L2ItemInstance element : unequipped)

+               iu.addModifiedItem(element);

+             sendPacket(iu);

+        

+       }

+      

+       L2ItemInstance head = getInventory().getPaperdollItem(Inventory.PAPERDOLL_HEAD);

+       if (head != null)

+       {

+        

+             L2ItemInstance[] unequipped = getInventory().unEquipItemInBodySlotAndRecord(head.getItem().getBodyPart());

+             InventoryUpdate iu = new InventoryUpdate();

+             for (L2ItemInstance element : unequipped)

+               iu.addModifiedItem(element);

+             sendPacket(iu);

+        

+       }

+      

+       L2ItemInstance gloves = getInventory().getPaperdollItem(Inventory.PAPERDOLL_GLOVES);

+       if (gloves != null)

+       {

+        

+             L2ItemInstance[] unequipped = getInventory().unEquipItemInBodySlotAndRecord(gloves.getItem().getBodyPart());

+             InventoryUpdate iu = new InventoryUpdate();

+             for (L2ItemInstance element : unequipped)

+               iu.addModifiedItem(element);

+             sendPacket(iu);

+        

+       }

+      

+       L2ItemInstance feet = getInventory().getPaperdollItem(Inventory.PAPERDOLL_FEET);

+       if (feet != null)

+       {

+        

+             L2ItemInstance[] unequipped = getInventory().unEquipItemInBodySlotAndRecord(feet.getItem().getBodyPart());

+             InventoryUpdate iu = new InventoryUpdate();

+             for (L2ItemInstance element : unequipped)

+               iu.addModifiedItem(element);

+             sendPacket(iu);

+        

+       }

+      

+       L2ItemInstance legs = getInventory().getPaperdollItem(Inventory.PAPERDOLL_LEGS);

+       if (legs != null)

+       {

+        

+             L2ItemInstance[] unequipped = getInventory().unEquipItemInBodySlotAndRecord(legs.getItem().getBodyPart());

+             InventoryUpdate iu = new InventoryUpdate();

+             for (L2ItemInstance element : unequipped)

+               iu.addModifiedItem(element);

+             sendPacket(iu);

+        

+       }

+      

+       L2ItemInstance rhand = getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);

+       if (rhand != null)

+       {

+        

+             L2ItemInstance[] unequipped = getInventory().unEquipItemInBodySlotAndRecord(rhand.getItem().getBodyPart());

+             InventoryUpdate iu = new InventoryUpdate();

+             for (L2ItemInstance element : unequipped)

+               iu.addModifiedItem(element);

+             sendPacket(iu);

+        

+       }

+      

+       L2ItemInstance lhand = getInventory().getPaperdollItem(Inventory.PAPERDOLL_LHAND);

+       if (lhand != null)

+       {

+        

+             L2ItemInstance[] unequipped = getInventory().unEquipItemInBodySlotAndRecord(lhand.getItem().getBodyPart());

+             InventoryUpdate iu = new InventoryUpdate();

+             for (L2ItemInstance element : unequipped)

+               iu.addModifiedItem(element);

+             sendPacket(iu);

+        

+       }

+

        //  Cannot switch or change subclasses while transformed

        if (isTransformed())

            return false;

 

:)

  • 1 month later...
Posted

Is not the same? O.O

 

Kazeno Code;

 

 

Index: /java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- /java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(revision 1434)
+++ /java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(working copy)
@@ -9680,6 +9680,90 @@

public boolean setActiveClass(int classIndex)
    {
+	      L2ItemInstance rhand = getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
+	      if (rhand != null)
+	      {
+	         
+	            L2ItemInstance[] unequipped = getInventory().unEquipItemInBodySlotAndRecord(rhand.getItem().getBodyPart());
+	            InventoryUpdate iu = new InventoryUpdate();
+	            for (L2ItemInstance element : unequipped)
+	               iu.addModifiedItem(element);
+	            sendPacket(iu);
+	         
+	      }
+	      
+	      L2ItemInstance lhand = getInventory().getPaperdollItem(Inventory.PAPERDOLL_LHAND);
+	      if (lhand != null)
+	      {
+	         
+	            L2ItemInstance[] unequipped = getInventory().unEquipItemInBodySlotAndRecord(lhand.getItem().getBodyPart());
+	            InventoryUpdate iu = new InventoryUpdate();
+	            for (L2ItemInstance element : unequipped)
+	               iu.addModifiedItem(element);
+	            sendPacket(iu);
+	         
+	      }
        /*
         * 1. Call store() before modifying _classIndex to avoid skill effects rollover.
         * 2. Register the correct _classId against applied 'classIndex'.
         */
        store();

 

RizeL Code;

 

/**
    * Changes the character's class based on the given class index.
    * <BR><BR>
    * An index of zero specifies the character's original (base) class,
    * while indexes 1-3 specifies the character's sub-classes respectively.
    * 
    * @param classIndex
    */
   public boolean setActiveClass(int classIndex)
   {
+      L2ItemInstance chest = getInventory().getPaperdollItem(Inventory.PAPERDOLL_CHEST);
+      if (chest != null)
+      {
+         
+            L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(chest.getItem().getBodyPart());
+            InventoryUpdate iu = new InventoryUpdate();
+            for (L2ItemInstance element : unequipped)
+               iu.addModifiedItem(element);
+            sendPacket(iu);
+         
+      }
+      
+      L2ItemInstance head = getInventory().getPaperdollItem(Inventory.PAPERDOLL_HEAD);
+      if (head != null)
+      {
+         
+            L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(head.getItem().getBodyPart());
+            InventoryUpdate iu = new InventoryUpdate();
+            for (L2ItemInstance element : unequipped)
+               iu.addModifiedItem(element);
+            sendPacket(iu);
+         
+      }
+      
+      L2ItemInstance gloves = getInventory().getPaperdollItem(Inventory.PAPERDOLL_GLOVES);
+      if (gloves != null)
+      {
+         
+            L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(gloves.getItem().getBodyPart());
+            InventoryUpdate iu = new InventoryUpdate();
+            for (L2ItemInstance element : unequipped)
+               iu.addModifiedItem(element);
+            sendPacket(iu);
+         
+      }
+      
+      L2ItemInstance feet = getInventory().getPaperdollItem(Inventory.PAPERDOLL_FEET);
+      if (feet != null)
+      {
+         
+            L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(feet.getItem().getBodyPart());
+            InventoryUpdate iu = new InventoryUpdate();
+            for (L2ItemInstance element : unequipped)
+               iu.addModifiedItem(element);
+            sendPacket(iu);
+         
+      }
+      
+      L2ItemInstance legs = getInventory().getPaperdollItem(Inventory.PAPERDOLL_LEGS);
+      if (legs != null)
+      {
+         
+            L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(legs.getItem().getBodyPart());
+            InventoryUpdate iu = new InventoryUpdate();
+            for (L2ItemInstance element : unequipped)
+               iu.addModifiedItem(element);
+            sendPacket(iu);
+         
+      }
+      
+      L2ItemInstance rhand = getInventory().getPaperdollItem(Inventory.PAPERDOLL_RHAND);
+      if (rhand != null)
+      {
+         
+            L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(rhand.getItem().getBodyPart());
+            InventoryUpdate iu = new InventoryUpdate();
+            for (L2ItemInstance element : unequipped)
+               iu.addModifiedItem(element);
+            sendPacket(iu);
+         
+      }
+      
+      L2ItemInstance lhand = getInventory().getPaperdollItem(Inventory.PAPERDOLL_LHAND);
+      if (lhand != null)
+      {
+         
+            L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(lhand.getItem().getBodyPart());
+            InventoryUpdate iu = new InventoryUpdate();
+            for (L2ItemInstance element : unequipped)
+               iu.addModifiedItem(element);
+            sendPacket(iu);
+         
+      }
+      L2ItemInstance lear = getInventory().getPaperdollItem(Inventory.PAPERDOLL_LEAR);
+      if (lhand != null)
+      {
+         
+            L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(lear.getItem().getBodyPart());
+            InventoryUpdate iu = new InventoryUpdate();
+            for (L2ItemInstance element : unequipped)
+               iu.addModifiedItem(element);
+            sendPacket(iu);
+         
+      }
+      L2ItemInstance rear = getInventory().getPaperdollItem(Inventory.PAPERDOLL_REAR);
+      if (lhand != null)
+      {
+         
+            L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(rear.getItem().getBodyPart());
+            InventoryUpdate iu = new InventoryUpdate();
+            for (L2ItemInstance element : unequipped)
+               iu.addModifiedItem(element);
+            sendPacket(iu);
+         
+      }
+      L2ItemInstance neck = getInventory().getPaperdollItem(Inventory.PAPERDOLL_NECK);
+      if (lhand != null)
+      {
+         
+            L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(neck.getItem().getBodyPart());
+            InventoryUpdate iu = new InventoryUpdate();
+            for (L2ItemInstance element : unequipped)
+               iu.addModifiedItem(element);
+            sendPacket(iu);
+         
+      }
+      L2ItemInstance lfinger = getInventory().getPaperdollItem(Inventory.PAPERDOLL_LFINGER);
+      if (lhand != null)
+      {
+         
+            L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(lfinger.getItem().getBodyPart());
+            InventoryUpdate iu = new InventoryUpdate();
+            for (L2ItemInstance element : unequipped)
+               iu.addModifiedItem(element);
+            sendPacket(iu);
+         
+      }
+      L2ItemInstance rfinger = getInventory().getPaperdollItem(Inventory.PAPERDOLL_RFINGER);
+      if (lhand != null)
+      {
+         
+            L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(rfinger.getItem().getBodyPart());
+            InventoryUpdate iu = new InventoryUpdate();
+            for (L2ItemInstance element : unequipped)
+               iu.addModifiedItem(element);
+            sendPacket(iu);
+         
+      }
+      L2ItemInstance under = getInventory().getPaperdollItem(Inventory.PAPERDOLL_UNDER);
+      if (lhand != null)
+      {
+         
+            L2ItemInstance[] unequipped = +getInventory().unEquipItemInBodySlotAndRecord(under.getItem().getBodyPart());
+            InventoryUpdate iu = new InventoryUpdate();
+            for (L2ItemInstance element : unequipped)
+               iu.addModifiedItem(element);
+            sendPacket(iu);
+         
+      }

 

 

Rizel code is more complete at Kazeno only The weapon And Shield Remove wen the character Change subclass... !

Posted

Title of Rizel's Share: Forbid to equip some kind of items

 

That's what his code doing! Kazeno's is unequiping weapon before changing sub.

 

Posted

Title of Rizel's Share: Forbid to equip some kind of items

 

That's what his code doing! Kazeno's is unequiping weapon before changing sub.

 

 

Are you telling me what code of kazeno and rizel are? rofl!

 

Inside of post of rizel if you watch the code carefully  you will see from where the code start;

 

Kazeno Code;

 

 

[code]Index: /java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- /java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(revision 1434)
+++ /java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(working copy)
@@ -9680,6 +9680,90 @@

public boolean setActiveClass(int classIndex)
    {

 

 

Rizel Code

 

/**
    * Changes the character's class based on the given class index.
    * <BR><BR>
    * An index of zero specifies the character's original (base) class,
    * while indexes 1-3 specifies the character's sub-classes respectively.
    * 
    * @param classIndex
    */
   public boolean setActiveClass(int classIndex)
   {

If those line are not the same maybe my eyes lie me!

 

//end lmao!

[/code]

Posted

Thats a reshare with another description...first Rizel share it as a fix for his item restriction share to dont cheat with the armors weapons Kazeno only take a part of the code and post it with another description as a "bug fix to subclass SA stuck bug" so credits to kazeno?...i dont think so...credits goes to Leeching...Fakoykas that share and rizels share is the same Kazeno take a part of rizels code and he share it nothing more Rizels share solve this SA stuck bug too so i dont see any reason why credits to Kazeno he only c/p a part from Rizels code...

Guest
This topic is now closed to further replies.


  • Posts

    • Update M54: Global HP/MP/CP consumable handling expanded beyond combat-only usage. Offensive mage idle recovery with learned skill Battle Heal. Spellhowler/Storm Screamer prioritizes Hurricane, using Vampiric Claw mostly below 90% HP. Major structural refactor initialized: Added category/class organization such as Archer, Dagger, Tank, Mage, Healer, Support and Specialized class files. Further structural cleanup. Extracted combat memory/state and more class-policy logic from the main controller. Added global stuck/inactivity watchdog for bots blocked by terrain/geodata. Added unreachable dropped ground-item timeout/temporary blacklist. Reworked Necromancer/Soultaker PvP: Dominator level 78+ maintains learned Arcane Power toggle on. Overlord/Dominator level 44+ maintains learned Soul Guard toggle automatically. Stability/scalability update: Bot controller ticks staggered instead of all starting in the same phase: Same 350 ms update rate retained Reduces simultaneous AI workload bursts. Removed the old manual aggressive-monster EVT_AGGRESSION bridge. Phantoms now use native Lucera setActive() behavior so monsters aggro them naturally. Reduced unnecessary NPC scans and native AI event pressure. Added saved-bot equipment overrides using a separate database table:         lucera_autobots_items Existing lucera_autobots remains the main saved-bot identity/state table. Equipment rows are linked to saved bots through bot_id. Added optional convenience view to show bot name together with equipment overrides:         lucera_autobots_items_view Added editable equipment slots in columns: Weapon Shield Helmet Chest Legs Gloves Boots Necklace Left/Right Earrings Left/Right Rings Equipment override values: 0 = use normal class/level profile item -1 = force slot empty >0 = equip that Item ID Custom equipment works only for saved database bots. Default class/level equipment profiles remain unchanged. Supports custom equipment from No Grade to S Grade, regardless of the bot's current level. Added validation for invalid item IDs and incompatible equipment slots. Added handling for: Two-handed weapons vs shields Full-body armor vs separate leggings Added all-grade Soulshots and Spiritshots to bot inventory/replenishment so custom lower-grade weapons still use the correct shots. Mage profiles that already use Blessed Spiritshots keep that behavior with all relevant grades available. First save the bot normally so it exists in table:         lucera_autobots Then open:         lucera_autobots_items Find the row with the same bot_id and edit only the equipment slots you want. Example: weapon_id = 6608 shield_id = -1 helmet_id = 0 chest_id = 0 legs_id = 0 gloves_id = 0 boots_id = 0 This means: weapon_id 6608 → custom weapon shield_id -1 → no shield all 0 values → keep normal default profile equipment After editing the DB, despawn and respawn the saved bot so M54 reloads its equipment overrides. Do not edit bot_id. Use it only to identify which saved bot the equipment row belongs to.   DOWNLOAD
    • It will be multi client so it will detect the client from the files and adapt the packets and asset loading. I am aiming for C4 and H5 after IL
    • this is just to simplify your life, time, and can be done for free by yourself just watch some tutorials, in case you don't wanna waste time check it out!   https://l2getwork.art   https://l2getwork.art/showcase.html  
    • Good job! Any chance for it to be downgradeable or at least compatible with older chronicles?
    • Fermata now runs in a web browser too. Try it here: https://web.fermata.gg/    
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..