Jump to content
  • 0

[Help]Anti PvP Npc


Question

Posted

hello guys i added this code in my pack it is an npc, when someone flags another player on it's radius he sleep him and broadcasts a message i have zero errors i made an npc with l2Protector instance but it doesn't work!

 


	package com.l2jrox.gameserver.model.actor.instance;

	import java.util.concurrent.ScheduledFuture;

	import com.l2jrox.Config;
	import com.l2jrox.gameserver.ThreadPoolManager;
	import com.l2jrox.gameserver.datatables.SkillTable;
	import com.l2jrox.gameserver.model.L2Character;
	import com.l2jrox.gameserver.model.L2Object;
	import com.l2jrox.gameserver.model.L2Skill;
import com.l2jrox.gameserver.network.serverpackets.CreatureSay;
	import com.l2jrox.gameserver.network.serverpackets.MagicSkillUse;
import com.l2jrox.gameserver.templates.L2NpcTemplate;


	public class L2ProtectorInstance extends L2NpcInstance
	{
	    private ScheduledFuture<?> _aiTask;

	    private class ProtectorAI implements Runnable
	    {
	        private L2ProtectorInstance _caster;

	        protected ProtectorAI(L2ProtectorInstance caster)
	        {
	            _caster = caster;
        }

	        public void run()
	        {
                /**
             * For each known player in range, cast sleep if pvpFlag != 0 or Karma >0
             * Skill use is just for buff animation
             */
                for (L2PcInstance player : getKnownList().getKnownPlayers().values())

	                {
	                        if ((player.getKarma() > 0 && Config.PROTECTOR_PLAYER_PK) || (player.getPvpFlag() != 0 && Config.PROTECTOR_PLAYER_PVP))
	                        {
	                                handleCast(player, Config.PROTECTOR_SKILLID, Config.PROTECTOR_SKILLLEVEL);
	                        }
                }
        }

        private boolean handleCast(L2PcInstance player, int skillId, int skillLevel)
        {
                if (player.isGM() || player.isDead() || !player.isVisible() || !isInsideRadius(player, getDistanceToWatchObject(player), false, false))
                        return false;

	                L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);

            if (player.getFirstEffect(skill) == null)
            {
	                int objId = _caster.getObjectId();
                                skill.getEffects(_caster, player);
	                                broadcastPacket(new MagicSkillUse(_caster, player, skillId, skillLevel, Config.PROTECTOR_SKILLTIME, 0));
	                                broadcastPacket(new CreatureSay(objId,0,String.valueOf(getName()),Config.PROTECTOR_MESSAGE));

	                        return true;
	            }

	            return false;
	        }
	    }


    public L2ProtectorInstance(int objectId, L2NpcTemplate template)
    {
        super(objectId, template);

        if (_aiTask != null)
	                _aiTask.cancel(true);

	        _aiTask = ThreadPoolManager.getInstance().scheduleAiAtFixedRate(new ProtectorAI(this), 3000, 3000);
	    }

	    @Override
	        public void deleteMe()
	    {
	        if (_aiTask != null)
	        {
	                _aiTask.cancel(true);
	                _aiTask = null;
	        }

	        super.deleteMe();
	    }

	    @Override
	        public int getDistanceToWatchObject(L2Object object)
	    {
	        return Config.PROTECTOR_RADIUS_ACTION;
	    }

	    @Override
	        public boolean isAutoAttackable(L2Character attacker)
	    {
	        return false;
	    }
	}

4 answers to this question

Recommended Posts

  • 0
Posted

Okay, if it compiles and does not throw any runtime errors, there should be a problem in the "logic" somewhere. You need to find which part does not act like it is intended do. One of the simplest ways to do that is printing out a message to the logs on almost each step. Something like this:

Found a player near me (nickname)

Checking if he has a pvp flag set.

Pvp flag found for player (nickname), starting handleCast()

Player is not gm, is not dead and is in range

...and so on...

It should be all daisies and rainbows after you find the "broken" part

  • 0
Posted

Okay, if it compiles and does not throw any runtime errors, there should be a problem in the "logic" somewhere. You need to find which part does not act like it is intended do. One of the simplest ways to do that is printing out a message to the logs on almost each step. Something like this:It should be all daisies and rainbows after you find the "broken" part

 

the npc is clearly not working at all not event start checking for inbound players nothing...0 clues here...

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

    • LF the following chars / items on chronos   Elf - with class Aeore's Shillen Saint - this is possible if you had done a class change with a ticket in the past. Dwarf - with class Mystic Muse - same as above   Any greater jewels / Radiant Circle Grace or Foresight +5 and above Cloak      
    • First, you need to understand what you're doing and what you want to achieve. You have to choose a server core. After that, decide what you want your server to include, code it, modify the client to fit your server, go public, and drink champagne.   If you know how to code, creating a server is relatively easy — a few months of work and you can make it happen. Modifying the client is a completely different story. There’s a lack of tutorials, tools, and source materials. I’m currently working on the client myself, and I’ve already spent over three weeks just trying to get started due to the lack of information. If you don’t have the knowledge and experience, you’ll need a team and a bag of money — but realistically, it just won’t succeed.
    • The server has been online and stable for over 2 months now, and we’re still going strong! No wipes, no shortcuts ~ just continuous work, daily fixes, events, and improvements to ensure the best possible experience.   Great News! 🔥 CHAPTER II IS COMING — GRACIA FINAL 🔥 On February 16, L2Elixir enters a new era. The server will be officially updated to Gracia Final, opening Chapter II of our journey. Expect new content, improvements, and surprises that will refresh the gameplay while keeping the classic Gracia Final spirit alive.   More challenges, more competition, and more reasons to log in.   📅 Update Date: February 16 ⚔️ Chapter II: Gracia Final This is not a reset. This is evolution.   Prepare yourselves — Chapter II begins soon.   Website: https://l2elixir.org/ Discord: https://discord.gg/5ydPHvhbxs    
    • Server owners, Top.MaxCheaters.com is now live and accepting Lineage 2 server listings. There is no voting, no rankings manipulation, and no paid advantages. Visibility is clean and equal, and early listings naturally appear at the top while the platform grows. If your server is active, it should already be listed. Submit here 👉https://Top.MaxCheaters.com This platform is part of the MaxCheaters.com network and is being built as a long-term reference point for the Lineage 2 community. — MaxCheaters.com Team
  • 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..