Jump to content
  • 0

Stuck After Attacking The Npc


Question

Posted

Hello,

 

I have problem, when attacking NPC (not mob) with skill for example gatekeeper in random zone, character gets stuck. You cant move, use skills, use /unstuck command or escape scrolls you have to reconnect. Pack is L2jAcis.

 

Please, help me to sort out this problem, thank you ;)

Recommended Posts

  • 0
Posted

1. Make npcs not attackable  :happyforever:

2. Was it inside L2Attackable or L2Npc? Who knows..  :forever alone like a boss:

3. CTRL + H  :okey:

  • 0
Posted

NPCs are non attackable, but when you try to attack, then you get stuck.

Then take a look in your console maybe some errors are appearing.

Or take a look inside your L2Character maybe it's there, dunno how aCis work but I guess...

  • 0
Posted

Yep, there is an error:

Client: [Character: Test - Account: zuper - IP: 178.16.42.147] - Failed reading: [C] RequestMagicSkillUse ; null
null

 

  • 0
Posted

I'm blind shooting but i guess it's inside L2Character, somewhere when it's trying to get the info of the Target... you must add a condition to handle that exception... like adding && !target.instanceof L2Npc or whatever...

  • 0
Posted

add nullchecks, focus on the costum codes you've added on RequestMagicSkillUse.java @ gameserver/network/clientpackets

  • 0
Posted

I'm blind shooting but i guess it's inside L2Character, somewhere when it's trying to get the info of the Target... you must add a condition to handle that exception... like adding && !target.instanceof L2Npc or whatever...

 

L2Npc is abstract class and I don't think that the developers left such hole on L2Character, it just comes from some badcoded costum code

  • 0
Posted (edited)

add nullchecks, focus on the costum codes you've added on RequestMagicSkillUse.java @ gameserver/network/clientpackets

who adds custom codes there  :y u no?:  xd

 

L2Npc is abstract class and I don't think that the developers left such hole on L2Character, it just comes from some badcoded costum code

Just guessing it can be inside L2Character coz always custom shiats modify things there, dunno if in aCis not but whatever, so long since i dont open eclipse Edited by ^Wyatt
  • 0
Posted
/*
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.
 */
package net.sf.l2j.gameserver.network.clientpackets;

import net.sf.l2j.Config;
import net.sf.l2j.gameserver.datatables.SkillTable;
import net.sf.l2j.gameserver.model.L2Skill;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
import net.sf.l2j.gameserver.templates.skills.L2SkillType;

public final class RequestMagicSkillUse extends L2GameClientPacket
{
    private int _magicId;
    private boolean _ctrlPressed;
    private boolean _shiftPressed;
    
    @Override
    protected void readImpl()
    {
        _magicId = readD(); // Identifier of the used skill
        _ctrlPressed = readD() != 0; // True if it's a ForceAttack : Ctrl pressed
        _shiftPressed = readC() != 0; // True if Shift pressed
    }
    
    @Override
    protected void runImpl()
    {
        // Get the current L2PcInstance of the player
        final L2PcInstance activeChar = getClient().getActiveChar();
        if (activeChar == null)
            return;
        
        if (activeChar.isOutOfControl())
        {
            activeChar.sendPacket(ActionFailed.STATIC_PACKET);
            return;
        }
        
        // Get the level of the used skill
        final int level = activeChar.getSkillLevel(_magicId);
        if (level <= 0)
        {
            activeChar.sendPacket(ActionFailed.STATIC_PACKET);
            return;
        }
        
        // Get the L2Skill template corresponding to the skillID received from the client
        final L2Skill skill = SkillTable.getInstance().getInfo(_magicId, level);
        if (skill != null)
        {
            // If Alternate rule Karma punishment is set to true, forbid skill Return to player with Karma
            if (skill.getSkillType() == L2SkillType.RECALL && !Config.KARMA_PLAYER_CAN_TELEPORT && activeChar.getKarma() > 0)
                return;
            
            // players mounted on pets cannot use any toggle skills
            if (skill.isToggle() && activeChar.isMounted())
                return;
            
            activeChar.useMagic(skill, _ctrlPressed, _shiftPressed);
        }
        else
        {
            activeChar.sendPacket(ActionFailed.STATIC_PACKET);
            _log.warning("No skill found with id " + _magicId + " and level " + level + ".");
        }
    }
}

Here is that code.

  • 0
Posted
/*
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.
 */
package net.sf.l2j.gameserver.network.clientpackets;

import net.sf.l2j.Config;
import net.sf.l2j.gameserver.datatables.SkillTable;
import net.sf.l2j.gameserver.model.L2Skill;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
import net.sf.l2j.gameserver.templates.skills.L2SkillType;

public final class RequestMagicSkillUse extends L2GameClientPacket
{
    private int _magicId;
    private boolean _ctrlPressed;
    private boolean _shiftPressed;
    
    @Override
    protected void readImpl()
    {
        _magicId = readD(); // Identifier of the used skill
        _ctrlPressed = readD() != 0; // True if it's a ForceAttack : Ctrl pressed
        _shiftPressed = readC() != 0; // True if Shift pressed
    }
    
    @Override
    protected void runImpl()
    {
        // Get the current L2PcInstance of the player
        final L2PcInstance activeChar = getClient().getActiveChar();
        if (activeChar == null)
            return;
        
        if (activeChar.isOutOfControl())
        {
            activeChar.sendPacket(ActionFailed.STATIC_PACKET);
            return;
        }
        
        // Get the level of the used skill
        final int level = activeChar.getSkillLevel(_magicId);
        if (level <= 0)
        {
            activeChar.sendPacket(ActionFailed.STATIC_PACKET);
            return;
        }
        
        // Get the L2Skill template corresponding to the skillID received from the client
        final L2Skill skill = SkillTable.getInstance().getInfo(_magicId, level);
        if (skill != null)
        {
            // If Alternate rule Karma punishment is set to true, forbid skill Return to player with Karma
            if (skill.getSkillType() == L2SkillType.RECALL && !Config.KARMA_PLAYER_CAN_TELEPORT && activeChar.getKarma() > 0)
                return;
            
            // players mounted on pets cannot use any toggle skills
            if (skill.isToggle() && activeChar.isMounted())
                return;
            
            activeChar.useMagic(skill, _ctrlPressed, _shiftPressed);
        }
        else
        {
            activeChar.sendPacket(ActionFailed.STATIC_PACKET);
            _log.warning("No skill found with id " + _magicId + " and level " + level + ".");
        }
    }
}

Here is that code.

 

 

this is okay, then the problem is at useMagic or some method from L2PcInstance trying to get something from null reference, such npes are hard to find so you have to recall what things you edited recentrly

 

 

who adds custom codes there  :y u no?:  xd

 

Just guessing it can be inside L2Character coz always custom shiats modify things there, dunno if in aCis not but whatever, so long since i dont open eclipse

 

 

I do, and alot

  • 0
Posted

I still place my bet to L2Character  :happyforever:

 

L2PcInstance's useMagic calls L2Character's beginCast so i stick to what I said before, its all related with some custom shit he added

  • 0
Posted (edited)

Simple suggestion, make NPC's to can't be attackable with skills also and problem will not exist anymore.

Edited by Stewie

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • Hi everyone,   I’m currently playing Lineage 2 on the L2Damage server and I’d like to know the current status of botting tools there. With all the server updates and protections, many tools stop working or get detected pretty fast, so I wanted to ask the community:   Is anyone currently using any bot on L2Damage that still works reliably? Have you had any success with tools like Adrenaline, L2Walker, L2Tower, or similar? Any general experience or feedback about what’s still usable on this server?   I know every server has different protections, so any up-to-date info or personal experience would be appreciated.   Thanks in advance.
    • Hey Dexters! Https://lineage2dex.com SKADI server starting TODAY! ✅ On 18:00 (UTC +2) We allow you to login for create character! To restrict your name and transfer ToDs/Starter packs in game. Make it before start! On start, we can have problems with WEB! It is IMPORTANT to prepare everything for starting the game RIGHT NOW, do not postpone for later, during the opening there may be problems with the web part of the project and you simply can not register. ## [ - REGISTRATION AND FILES](https://lineage2dex.com/en/start) ✨ Get a +15% bonus on all TOD orders! The bonus is active until February 1st, 23:00 and also applies to UNION. ✅ What you need to know at the start: ➡️ All Epic Raid Bosses dead on start. Re-spawn time you can check in game ALT+B Raid tab ➡️ All other RBs (for difficult 1 location) alive on server start (including Sub and Nobl RB) ➡️ Max enchant for items +10, this limits will be change with server time ➡️ Difficulty 1 locations are available ➡️ Locations drop Basic and Advanced tier resources, allowing you to craft B and A grade equivalent gear ➡️ School of Dark Arts — PvP zone with x5 drop. Its intance Zone, to enter it you need make TP from GateKeeper. If you will teleport on it by map, you will go on regular zone, not pvp ➡️ Only B-grade equivalent equipment is available for purchase (common, its dont have durability) ➡️ Tier 1 talents are available to learn ➡️ Talent Point Shop is available [ - Roadmap](https://wiki.lineage2dex.com/road-map/en) [ - Basic server description](https://wiki.lineage2dex.com/general-description-skadi-x100/en) Thank you for participating in the beta! All players who spent more than 1 hour on the beta server will receive useful items for autofarming and equipment repair. The rewards will be granted to the first character on the same account that participated in the beta. All items will be placed in the Quest Inventory. Good luck everyone! And have a fun on new Skadi server!
    • ## [1.5.1] - 2026-01-30   ### 🐛 Bug Fixes - **Top Voters**: Top voters list now loads correctly for inactive servers (previously showed "Server not found"). - **View Counter**: Server info page view count now records correctly for inactive servers.   ### 🔄 Improvements - **My Servers – Hide/Active**: The hide/active toggle now works correctly and is only shown when the server is approved (active) by an admin. Owner hide/show is separate from admin status. Toggling no longer causes a full page refresh. - **Accessibility**: Form fields across the site now have proper labels and IDs for screen readers and autofill — server info edit form, add server form, My Servers edit, Admin Panel (Email, Vote System, pricing, filters, logs), and related inputs.
  • 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..