N0K3 Posted September 26, 2018 Posted September 26, 2018 Would anyone have an Anti AFK mod on TvT for L2Jacis or L2jfrozen? If anyone has and can share, I will be grateful.
0 Kara Posted September 26, 2018 Posted September 26, 2018 (edited) Index: java/com/l2jserver/gameserver/model/actor/L2Character.java =================================================================== --- java/com/l2jserver/gameserver/model/actor/L2Character.java (revision 2) +++ java/com/l2jserver/gameserver/model/actor/L2Character.java (working copy) /** * Mother class of all character objects of the world (PC, NPC...)<br> * L2Character:<br> @@ -4420,6 +4420,11 @@ final int curY = super.getY(); final int curZ = super.getZ(); + if (isPlayer()) + { + getActingPlayer().setLastXY(curX, curY); + } + // Calculate distance (dx,dy) between current position and destination // TODO: improve Z axis move/follow support when dx,dy are small compared to dz double dx = (x - curX); Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 2) +++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (working copy) @@ -14483,4 +14514,47 @@ return _hasCharmOfCourage; } + + final int[] _lastXY = new int[2]; + + public void setLastXY(int x, int y) + { + _lastXY[0] = x; + _lastXY[1] = y; + } + + public boolean isAfk() + { + return (getX() == _lastXY[0]) && (getY() == _lastXY[1]); + } + + /** Methods to put inside your event when it start and it stop */ + + Future<?> _task; + + public void stopAfk() + { + if (_task != null) + { + _task.cancel(true); + _task = null; + } + } + + public void startAfk() + { + stopAfk(); + + _task = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(() -> + { + L2World.getInstance().getPlayers().stream().filter(p -> p.isAfk()).forEach(p -> + { + p.sendMessage("You have been detected as afk."); + // Tasks here. + }); + + }, 60000, 60000); + } } \ No newline at end of file I made you a short code that you can use. *Note: Make sure to put your boolean method or what you have that checks if player is inside event. Ex. p -> p.isAfk() && p.isInEvent() Edited September 26, 2018 by Kara`
0 N0K3 Posted September 26, 2018 Author Posted September 26, 2018 1 hour ago, Kara` said: Index: java/com/l2jserver/gameserver/model/actor/L2Character.java =================================================================== --- java/com/l2jserver/gameserver/model/actor/L2Character.java (revision 2) +++ java/com/l2jserver/gameserver/model/actor/L2Character.java (working copy) /** * Mother class of all character objects of the world (PC, NPC...)<br> * L2Character:<br> @@ -4420,6 +4420,11 @@ final int curY = super.getY(); final int curZ = super.getZ(); + if (isPlayer()) + { + getActingPlayer().setLastXY(curX, curY); + } + // Calculate distance (dx,dy) between current position and destination // TODO: improve Z axis move/follow support when dx,dy are small compared to dz double dx = (x - curX); Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 2) +++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (working copy) @@ -14483,4 +14514,47 @@ return _hasCharmOfCourage; } + + final int[] _lastXY = new int[2]; + + public void setLastXY(int x, int y) + { + _lastXY[0] = x; + _lastXY[1] = y; + } + + public boolean isAfk() + { + return (getX() == _lastXY[0]) && (getY() == _lastXY[1]); + } + + /** Methods to put inside your event when it start and it stop */ + + Future<?> _task; + + public void stopAfk() + { + if (_task != null) + { + _task.cancel(true); + _task = null; + } + } + + public void startAfk() + { + stopAfk(); + + _task = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(() -> + { + L2World.getInstance().getPlayers().stream().filter(p -> p.isAfk()).forEach(p -> + { + p.sendMessage("You have been detected as afk."); + // Tasks here. + }); + + }, 60000, 60000); + } } \ No newline at end of file I made you a short code that you can use. *Note: Make sure to put your boolean method or what you have that checks if player is inside event. Ex. p -> p.isAfk() && p.isInEvent() I'm extremely grateful Kara, just get me a single question, I'm using Acis 374, it has no PcInstance.java I believe I have been replaced by Player.java and also does not have ThreadPoolManager.java only ThreadPool.java and also does not have L2Character .java, I believe it has been replaced by Creature.java, if I am wrong could you give me a light? because that slows me down when adding the mod. I tried putting on the cited files and had errors on the ThreadPool.getInstance (). Follow the images below; ThreadPool.java : https://imgur.com/r7Kcl9a Player.java : https://imgur.com/mptTG0A Creature.java : https://imgur.com/96gP8ao
0 SweeTs Posted September 26, 2018 Posted September 26, 2018 ThreadPool is not using getInstance() anymore - remove it. Simple search over eclipse with ThreadPool would give you an solution.
0 N0K3 Posted September 26, 2018 Author Posted September 26, 2018 Thanks for helping, I was able to use Anti AFK - TVT, very grateful !!
0 melron Posted September 26, 2018 Posted September 26, 2018 if you store somewhere all the players that are in the tvt , instead of World.getInstance().... use the tvt collection about this loop. as main anti-afk this code is good. You can add more conditions and not only checking the location to be more secure
0 Zake Posted March 2, 2022 Posted March 2, 2022 On 2/28/2022 at 12:31 AM, Kusaty said: Is work on L2JFROZEN? Adaption won't be hard for any pack. Also, please consider not to undig old topics. Feel free to create a new one if you struggle.
Question
N0K3
Would anyone have an Anti AFK mod on TvT for L2Jacis or L2jfrozen?
If anyone has and can share, I will be grateful.
7 answers to this question
Recommended Posts