Jump to content
  • 0

Oly Anti-Feed Protection


Question

Recommended Posts

  • 0
Posted

you cant do nothing.. even to hide names etc.. i have 3  solutions for you

 

1)ban

2)remove points to 0

3)ignore them

 

tested by me :D :D :rage: :rage:

  • 0
Posted

you cant do nothing.. even to hide names etc.. i have 3  solutions for you

 

1)ban

2)remove points to 0

3)ignore them

 

tested by me :D :D :rage: :rage:

  :alone:  :alone:

wtf? mm

  • 0
Posted

There is only 1 thing that it can stop feed.

 

Class based

it's the same thing, the only difference will be that they will get less points from "bots" cause they won't 1231 same classes on the same clan for example in order to feed so they will use bots.

it's hard to find a solution for anti-feed, for example if you add same ip protection cmn who's gonna use 2 windows to feed? 1 maybe 2 max. you can't add protection for same clan cause the fact that some clans feeds their mates doesn't means that everyone is doing the same thing so you can't "restrict" everyone for same clan fights but even if you do this they can always create bots and feed.

The only way to avoid feed is to get an active team and spectate every single match.

  • 0
Posted (edited)

it's the same thing, the only difference will be that they will get less points from "bots" cause they won't 1231 same classes on the same clan for example in order to feed so they will use bots.

it's hard to find a solution for anti-feed, for example if you add same ip protection cmn who's gonna use 2 windows to feed? 1 maybe 2 max. you can't add protection for same clan cause the fact that some clans feeds their mates doesn't means that everyone is doing the same thing so you can't "restrict" everyone for same clan fights but even if you do this they can always create bots and feed.

The only way to avoid feed is to get an active team and spectate every single match.

Ported with teams of 5 - Class based.

 

Bring whole server to feed ur sh1t.At least,i never lost to feed in class based since i started playing oly in l2.

 

U need 2-3 + ur main chars with the best oly gear u can get / being the best in ur class / having bots.

Imo,its really easy ,dunno... The secret on that is,its not necessary to play vs him with ur main char.Thats what the rest of the people try to do and they mess up.U have to start sign up with ur main + ur bots,and after a while,messing with his own ports (adding ur full item chars /low points into his).

Since he is "afraid",he will make less games.Its hard to explain,u need experience on that (doing the calls when /which char)

 

I had only 100-120 bots.I let them know that they cant avoid me and being able to make more points than me ,so they prefered to play with 2-3 bots and a main char (5-6 enemies).So ,i always beat them w/o using more than 20 bots.

Ofc,since i had the bot-advantage,i was doing RR ,ported fast back again,and i was checking for how many people actually singed.

When i was ported it,i signed 1-2 low points,and a full item char.

 

Its easy,if u know what u are doing

 

Anyway,u cant ban people who give points.If i want to lose the game,its my own choice (stop hitting etc).U cant stop clan helping people...

Class based and avoiding RR is enough.U cannot stop feeding with any system.Thats what u say its right,but people can do if they git gud and play properly

Edited by bravetobe
  • 0
Posted

Ported with teams of 5 - Class based.

 

Bring whole server to feed ur sh1t.At least,i never lost to feed in class based since i started playing oly in l2.

 

U need 2-3 + ur main chars with the best oly gear u can get / being the best in ur class / having bots.

Imo,its really easy ,dunno... The secret on that is,its not necessary to play vs him with ur main char.Thats what the rest of the people try to do and they mess up.U have to start sign up with ur main + ur bots,and after a while,messing with his own ports (adding ur full item chars /low points into his).

Since he is "afraid",he will make less games.Its hard to explain,u need experience on that (doing the calls when /which char)

 

I had only 100-120 bots.I let them know that they cant avoid me and being able to make more points than me ,so they prefered to play with 2-3 bots and a main char (5-6 enemies).So ,i always beat them w/o using more than 20 bots.

Ofc,since i had the bot-advantage,i was doing RR ,ported fast back again,and i was checking for how many people actually singed.

When i was ported it,i signed 1-2 low points,and a full item char.

 

Its easy,if u know what u are doing

 

Anyway,u cant ban people who give points.If i want to lose the game,its my own choice (stop hitting etc).U cant stop clan helping people...

Class based and avoiding RR is enough.U cannot stop feeding with any system.Thats what u say its right,but people can do if they git gud and play properly

Well it's not just "you can't ban a player for losing a game cause it's his own choice" at least from my pov, feed in any way and any kind of feed is not allowed, if you do not want to win a match or w/e don't join olympiad and about the clan thing, it's the same thing.. It's not that they want to play olympiad and they just feed only when they're vs their clan mates, this is not allowed and as i mentioned before if you do not want to win vs your clan mate, your friend or w/e just don't play. if i get you feed i'll warn you first and if you do it again i'll ban you or jail w/e admins want to do.

Rules are rules and you have to accept them, but you have to inform players about that, you can't say feed is not allowed while you don't say anywhere anything about that and if they say "sorry i didn't knew that" (which is stupid but still) he's right if you don't post your rules somewhere that will be public and players will see them.

 

p.s. sorry for my bad language/statements (if you didn't get something) i'm 3 days in row w/o sleep :P

  • 0
Posted (edited)

Well it's not just "you can't ban a player for losing a game cause it's his own choice" at least from my pov, feed in any way and any kind of feed is not allowed, if you do not want to win a match or w/e don't join olympiad and about the clan thing, it's the same thing.. It's not that they want to play olympiad and they just feed only when they're vs their clan mates, this is not allowed and as i mentioned before if you do not want to win vs your clan mate, your friend or w/e just don't play. if i get you feed i'll warn you first and if you do it again i'll ban you or jail w/e admins want to do.

Rules are rules and you have to accept them, but you have to inform players about that, you can't say feed is not allowed while you don't say anywhere anything about that and if they say "sorry i didn't knew that" (which is stupid but still) he's right if you don't post your rules somewhere that will be public and players will see them.

 

p.s. sorry for my bad language/statements (if you didn't get something) i'm 3 days in row w/o sleep :P

So,u will punish a full gear player who beats others but gives the match intentionally just because he is same clan with the other dude?

 

1)Thats at least stupid imo

2)How u will recognize that char if its same clan or not (obviously its non crest)?

 

Thats not gonna happen,and people will leave server .Just saying

I m not gonna mention the decades of pms about "this guy (W/o crest) is same clan with XXXX and he just gave a match".

The snitching in its finnest.U will put urself in a positition like people will demand for punishment into the "feeder" else they leave and if u do,the punished guy with his clan will leave.

 

Less rules = More fun + Same rules for everyone

(Thats what i mean with the second part is that everyone can create bots/buy gear or enchant etc.If u cant beat someone,just do what he does.If u cant beat him again,u are just bad)

Edited by bravetobe
  • 0
Posted

So,u will punish a full gear player who beats others but gives the match intentionally just because he is same clan with the other dude?

 

1)Thats at least stupid imo

2)How u will recognize that char if its same clan or not (obviously its non crest)?

 

Thats not gonna happen,and people will leave server .Just saying

I m not gonna mention the decades of pms about "this guy (W/o crest) is same clan with XXXX and he just gave a match".

The snitching in its finnest.U will put urself in a positition like people will demand for punishment into the "feeder" else they leave and if u do,the punished guy with his clan will leave.

 

Less rules = More fun + Same rules for everyone

(Thats what i mean with the second part is that everyone can create bots/buy gear or enchant etc.If u cant beat someone,just do what he does.If u cant beat him again,u are just bad)

first of all with admin you can easy find if they are same clan or not with server ways.

secondly imagine that you're a solo player and you "rule" in oly with your class you're almost unbeatable, is it legit for you to lose the hero status cause a populated clan for example will feed their leader/member/or w/e cause you're solo player?

the truth is that yeap if you punish someone for feed you will probably lose him and if he got a clan his clan as well (maybe and if not all members some of them but still it's a part of your community and you don't want this) but if you do not punish these guys for example some solo players will leave as well cause they can't win in oly with this way and "let free bots in oly" for example isn't a solution at all, you don't have 100% change to fight with your bot, you will probably feed someone else and also a player with clan will get more feed than you cause he will got bots + clan members to feed him so you will still won't get the hero status even if you're way better than others.

It's something like "i'm gonna keep clans cause they are much more players than solo, but i will still lose solo players which is bad in any way and if you punish a clan which feed you will lose players as well.. so what is the best idea here? you lose players in both ways, and in both ways players don't have the same advantages each other one by one..

  • 0
Posted

How to prevent Oly feed? Dont make noblesse so fucking easy to get. Its all your fault that you allow ppl to get noble within 5min. Period.

 

When you get it, you are free to do whatever you want.

  • 0
Posted

How to prevent Oly feed? Dont make noblesse so fucking easy to get. Its all your fault that you allow ppl to get noble within 5min. Period.

 

When you get it, you are free to do whatever you want.

Well, yeap indeed!

It's the best solution

  • 0
Posted (edited)

first of all with admin you can easy find if they are same clan or not with server ways.

secondly imagine that you're a solo player and you "rule" in oly with your class you're almost unbeatable, is it legit for you to lose the hero status cause a populated clan for example will feed their leader/member/or w/e cause you're solo player?

the truth is that yeap if you punish someone for feed you will probably lose him and if he got a clan his clan as well (maybe and if not all members some of them but still it's a part of your community and you don't want this) but if you do not punish these guys for example some solo players will leave as well cause they can't win in oly with this way and "let free bots in oly" for example isn't a solution at all, you don't have 100% change to fight with your bot, you will probably feed someone else and also a player with clan will get more feed than you cause he will got bots + clan members to feed him so you will still won't get the hero status even if you're way better than others.

It's something like "i'm gonna keep clans cause they are much more players than solo, but i will still lose solo players which is bad in any way and if you punish a clan which feed you will lose players as well.. so what is the best idea here? you lose players in both ways, and in both ways players don't have the same advantages each other one by one..

If u make a research about a specific char,yea obviously u can find out who is ig (main).

Can u imagine how many people use non main chars to have fun in oly ?Do u really have time to make a research for those (decades)?

 

I was a solo player (3 people -> 9 boxes).I was feeding 2 classes at the same time (using 3 pc).

Sometimes , i had to play with 2 full gear chars at the same moment vs enemies (That was laughable! I miss those days)

Thats what u need its 2-3 people /gears/some bots.If u are the best,u cant lose.

I wish i had people logging me bots... But they never did.People who fed their ass off in oly,they wish they had someone to log bots.The reason?U just said it.He gives high points,and there is a chance to sign with enemy's main char.He doesnt have unlimited bots.

 

He has 2 options:1)Sign with u with low points and beat u 2)Avoid and sign with low points to tp u inside,and he goes with high points after u. (Only class based)

If he does the first,its OK.

If he does the 2nd,u start signing with ur bots.Since u can beat him "anyway",u will fight him with ur 2nd char or 3rd.

 

 

 

Everything i said until now,its about 2-3 people.If solo players join class based,there is NO way to get it without fighting them.So its all about activitybeing the best,and later on bots/gear.

 

I guess u never tried to feed hard.If the game is bot vs bot,u can try to beat him if u have high points.If u dont,u dont care.After several games,u know which bots are the high points and which are the low points.So,watching when they click on NPC,having 1-2 singed low points and having ready full gear chars after u to sign up,there is no way he avoids.

Let me mention again,EVERYTHING i said includes just 2-3 people.U cannot avoid more than 5-6 random people

 

 

I will totaly agree with u,when it comes to Non Class or Both.Solo players have no chance when it comes to feed.

(If u want to have chances,u have to play other classes instead of main and get points/having people who wont smash ur ass if they find u in non class etc or just Oly team)

Edited by bravetobe
  • 0
Posted

If u make a research about a specific char,yea obviously u can find out who is ig (main).

Can u imagine how many people use non main chars to have fun in oly ?Do u really have time to make a research for those (decades)?

that's not hard at all, you just get the name of the feeder and it's just one button to find dualboxes and find every single char of him and even if he's not online with his main with a little search on db it's still easy to get him.

 

I was a solo player (3 people -> 9 boxes).I was feeding 2 classes at the same time (using 3 pc).

Sometimes , i had to play with 2 full gear chars at the same moment vs enemies (That was laughable! I miss those days)

Thats what u need its 2-3 people /gears/some bots.If u are the best,u cant lose.

I wish i had people logging me bots... But they never did.People who fed their ass off in oly,they wish they had someone to log bots.The reason?U just said it.He gives high points,and there is a chance to sign with enemy's main char.He doesnt have unlimited bots.

 

He has 2 options:1)Sign with u with low points and beat u 2)Avoid and sign with low points to tp u inside,and he goes with high points after u. (Only class based)

If he does the first,its OK.

If he does the 2nd,u start signing with ur bots.Since u can beat him "anyway",u will fight him with ur 2nd char or 3rd.

this would be fun, indeed ;p

well if you're the best even if you don't lose in oly there will be always some times which you will get a defeat (and if you got a lot of points you will lose a lot of them) i don't think that with 300,400 people in oly for example you will be the only good one and unbeatable, there will be another good players as well so if someone is feeding you can still lose the hero.

 

Everything i said until now,its about 2-3 people.If solo players join class based,there is NO way to get it without fighting them.So its all about activitybeing the best,and later on bots/gear.

 

I guess u never tried to feed hard.If the game is bot vs bot,u can try to beat him if u have high points.If u dont,u dont care.After several games,u know which bots are the high points and which are the low points.So,watching when they click on NPC,having 1-2 singed low points and having ready full gear chars after u to sign up,there is no way he avoids.

Let me mention again,EVERYTHING i said includes just 2-3 people.U cannot avoid more than 5-6 random people

 

 

I will totaly agree with u,when it comes to Non Class or Both.Solo players have no chance when it comes to feed.

(If u want to have chances,u have to play other classes instead of main and get points/having people who wont smash ur ass if they find u in non class etc or just Oly team)

i never liked oly at all, cause i never tried to feed and i was always losing hero with 200+ matches per circle cause of the points from feeders and i found pointless to join oly if there is no change to get hero w/o feeding. i remember some years ago on a server my clan had the most heroes and the server had about 350,400 players online and then a big ally joined (about 55,60 players) on the server and they started to feed their asses to get the heroes, the only class i was losing these days was domi and not everytime but guess what, i didn't get the hero this time cause what they did was joining oly geting points from other players and when they were with their leaders/sub leaders and most skilled players on their ally they lose the fights to give the points and they get points from then + bots so it was very hard to get the hero and admin didn't ban any of them cause they were a lot of players on this ally and they told him that they will all leave if any of them gets banned.

  • 0
Posted

You can easily get another IP on your dualbox, so.. :p

 

There is no legit way to prevent feeding. Deal with it :D

  • 0
Posted (edited)

that's not hard at all, you just get the name of the feeder and it's just one button to find dualboxes and find every single char of him and even if he's not online with his main with a little search on db it's still easy to get him.

 

this would be fun, indeed ;p

well if you're the best even if you don't lose in oly there will be always some times which you will get a defeat (and if you got a lot of points you will lose a lot of them) i don't think that with 300,400 people in oly for example you will be the only good one and unbeatable, there will be another good players as well so if someone is feeding you can still lose the hero.

 

i never liked oly at all, cause i never tried to feed and i was always losing hero with 200+ matches per circle cause of the points from feeders and i found pointless to join oly if there is no change to get hero w/o feeding. i remember some years ago on a server my clan had the most heroes and the server had about 350,400 players online and then a big ally joined (about 55,60 players) on the server and they started to feed their asses to get the heroes, the only class i was losing these days was domi and not everytime but guess what, i didn't get the hero this time cause what they did was joining oly geting points from other players and when they were with their leaders/sub leaders and most skilled players on their ally they lose the fights to give the points and they get points from then + bots so it was very hard to get the hero and admin didn't ban any of them cause they were a lot of players on this ally and they told him that they will all leave if any of them gets banned.

Noone said that u have to stay with 0 defeats.U have to manage to be in winning spree tho....

Just saw a few old pics.vs 6 enemies i got 30 games 24 wins 6 loses 234 points.The rest of the people had <40 points.In an other pic,i got 56~ games 850 points in one day

Also i have a few photos with +0 b grade winning +15 a grade etc (A grade oly).

 

If u are good,u will always end up having more points than the others and if u are just unlucky,there is always "next week".

Edited by bravetobe

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Posts

    • y girate unos archivitos del powerclass dale..... sin encrypt
    • [Release] Solo PvP Zone System 🔹 Compatible with: aCis 401+ 📜 Features: ✅ Automatic Exit on Restart: Players are removed from the zone if a restart occurs or logout. ✅ Custom Exit Command: Players can exit the Solo Zone with the voice command .exit. ✅ Teleport NPC Command: new bypass solopvp for gatekeeper. ✅ Random Name Generator: Generates random names. ✅ PvP Flag: The players are flagged within this zone.   xml preview & java code backup code -> https://pastebin.com/974V2p2p   SoloZone.xml <?xml version="1.0" encoding="UTF-8"?> <list> <zone shape="NPoly" minZ="-5200" maxZ="-4680"><!-- Frintezza Solo Zone --> <stat name="name" val="Solo PvP Zone" /> <stat name="locs" val="174244,-89089,-5112;174260,-86881,-5112;173184,-88090,-5112;175309,-88018,-5112;174231,-88019,-5112;175136,-88828,-5104;174962,-87025,-5104;173149,-87142,-5104;173470,-88908,-5112" /> <stat name="restrictedClasses" val="15,16,97" /> <node x="172031" y="-90127"/> <node x="176428" y="-90089"/> <node x="176428" y="-74051"/> <node x="172057" y="-74108"/> </zone> </list> SoloZone Code: diff --git a/java/net/sf/l2j/gameserver/taskmanager/SoloZoneTaskManager.java b/java/net/sf/l2j/gameserver/taskmanager/SoloZoneTaskManager.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/taskmanager/SoloZoneTaskManager.java @@ -0,0 +1,98 @@ +package net.sf.l2j.gameserver.taskmanager; + +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.logging.Logger; + +import net.sf.l2j.commons.random.Rnd; + +import net.sf.l2j.gameserver.data.manager.ZoneManager; +import net.sf.l2j.gameserver.enums.ZoneId; +import net.sf.l2j.gameserver.handler.voicecommandhandlers.VoiceExitSoloZone; +import net.sf.l2j.gameserver.model.World; +import net.sf.l2j.gameserver.model.actor.Player; +import net.sf.l2j.gameserver.model.location.Location; +import net.sf.l2j.gameserver.model.zone.type.SoloZone; + + +/** + * @author MarGaZeaS + */ +public class SoloZoneTaskManager implements Runnable { + + private static final Location EXIT_LOCATION = VoiceExitSoloZone.getExitLocation(); // Λαμβάνουμε την έξοδο από το VoiceExitSoloZone + + @Override + public void run() + { + // Διασχίζουμε όλους τους παίκτες του κόσμου + for (Player player : World.getInstance().getPlayers()) + { + // Ελέγχουμε αν ο παίκτης είναι στο SoloZone + if (player.isInsideZone(ZoneId.SOLO)) + { + // Μεταφέρουμε τον παίκτη στην έξοδο + player.teleportTo(EXIT_LOCATION.getX(), EXIT_LOCATION.getY(), EXIT_LOCATION.getZ(), 0); + player.sendMessage("The server is restarting, you have been moved out of the Solo Zone."); + } + } + } + + private int _id; + + private static final Logger _log = Logger.getLogger(SoloZoneTaskManager.class.getName()); + private static final ArrayList<String> _rndNames = new ArrayList<>(); + private static final int RANDOM_NAMES = 500; + private static final String CHARS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + private int _playersInSoloZone = 0; + + public int getPlayersInside() { + return _playersInSoloZone; + } + + public void setPlayersInside(int val) { + _playersInSoloZone = val; + } + + public SoloZoneTaskManager() { + _log.info("Solo Zone System: Loading..."); + for (int i = 0; i < RANDOM_NAMES; i++) { + String name = generateName(); + _rndNames.add(name); + _log.info("Generated name: " + name); + } + _log.info("Solo Zone System: Loaded " + _rndNames.size() + " names."); + } + + public String getAName() { + if (_rndNames.isEmpty()) { + _log.warning("SoloZoneManager: No random names available."); + return "Unknown"; + } + return _rndNames.get(Rnd.get(5, RANDOM_NAMES - 5)); + } + + private static String generateName() { + SecureRandom rnd = new SecureRandom(); + StringBuilder sb = new StringBuilder(15); + for (int i = 0; i < 15; i++) { + sb.append(CHARS.charAt(rnd.nextInt(CHARS.length()))); + } + return sb.toString(); + } + + public int getZoneId() + { + return _id; + } + + public final static SoloZone getCurrentZone() { + return ZoneManager.getInstance().getAllZones(SoloZone.class) + .stream() + .findFirst() // Επιστρέφει την πρώτη SoloZone (αν υπάρχει μόνο μία) + .orElse(null); + } + + public static SoloZoneTaskManager getInstance() { + return SingletonHolder._instance; + } + + private static class SingletonHolder { + private static final SoloZoneTaskManager _instance = new SoloZoneTaskManager(); + } +} diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java b/aCis_gameserver/java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java index a707ce5..d247e2e 100644 --- a/aCis_gameserver/java/net/sf/l2j/gameserver/taskmanager/PvpFlagTaskManager.java final Player player = entry.getKey(); final long timeLeft = entry.getValue(); + if(player.isInsideZone(ZoneId.SOLO)) + continue; if(player.isInsideZone(ZoneId.BOSS)) continue; // Time is running out, clear PvP flag and remove from list. if (currentTime > timeLeft) diff --git a/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/RequestCharacterCreate.java b/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/RequestCharacterCreate.java index a707ce5..d247e2e 100644 +++ b/aCis_gameserver/java/net/sf/l2j/gameserver/network/clientpackets/RequestCharacterCreate.java if (Config.ALLOW_FISH_CHAMPIONSHIP) FishingChampionshipManager.getInstance(); + if (Config.ENABLE_STARTUP) + StartupManager.getInstance(); diff --git a/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminMaintenance.java b/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminMaintenance.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminMaintenance.java if (!st.hasMoreTokens()) { sendHtmlForm(player); return; } try { switch (st.nextToken()) { case "shutdown": + SoloZoneTaskManager exitTask = new SoloZoneTaskManager(); + ThreadPool.schedule(exitTask, 0); Shutdown.getInstance().startShutdown(player, null, Integer.parseInt(st.nextToken()), false); break; case "restart": + exitTask = new SoloZoneTaskManager(); + ThreadPool.schedule(exitTask, 0); Shutdown.getInstance().startShutdown(player, null, Integer.parseInt(st.nextToken()), true); break; case "abort": Shutdown.getInstance().abort(player); break; diff --git a/java/net/sf/l2j/gameserver/handler/voicecommandhandlers/VoiceExitSoloZone.java b/java/net/sf/l2j/gameserver/handler/voicecommandhandlers/VoiceExitSoloZone.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/handler/voicecommandhandlers/VoiceExitSoloZone.java +package net.sf.l2j.gameserver.handler.voicecommandhandlers; + +import net.sf.l2j.commons.pool.ThreadPool; + +import net.sf.l2j.gameserver.enums.ZoneId; +import net.sf.l2j.gameserver.handler.IVoiceCommandHandler; +import net.sf.l2j.gameserver.model.actor.Player; +import net.sf.l2j.gameserver.model.location.Location; +import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse; + +/** + * Handles the voice command for exiting the Solo Zone with delay and effects. + * + * @author MarGaZeaS + */ +public class VoiceExitSoloZone implements IVoiceCommandHandler +{ + private static final String[] VOICE_COMMANDS = + { + "exit" + }; + + // Default location to teleport players when exiting the Solo Zone + private static final Location EXIT_LOCATION = new Location(81318, 148064, -3464); // Replace with your desired coordinates + + // Προσθήκη της μεθόδου για να πάρουμε την τοποθεσία εξόδου + public static Location getExitLocation() { + return EXIT_LOCATION; + } + + @Override + public void useVoiceCommand(Player player, String command) + { + if (command.equalsIgnoreCase("exit")) + { + if (!player.isInsideZone(ZoneId.SOLO)) + { + player.sendMessage("You are not inside the Solo Zone."); + return; + } + + // Notify the player about the delay + player.sendMessage("You will be teleported out of the Solo Zone in 2 seconds."); + + // Cast skill effect (Skill ID: 2100, Level: 1) + player.broadcastPacket(new MagicSkillUse(player, player, 2100, 1, 2000, 0)); + + // Schedule the teleportation after a 2-second delay + ThreadPool.schedule(() -> { + // Teleport the player to the designated exit location + player.teleportTo(EXIT_LOCATION.getX(), EXIT_LOCATION.getY(), EXIT_LOCATION.getZ(), 0); + + // Inform the player + player.sendMessage("You have exited the Solo Zone."); + }, 2000); // Delay in milliseconds (2000ms = 2 seconds) + } + } + + @Override + public String[] getVoiceCommandList() + { + return VOICE_COMMANDS; + } +} diff --git a/java/net/sf/l2j/gameserver/handler/VoiceCommandHandler.java b/java/net/sf/l2j/gameserver/handler/VoiceCommandHandler.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/handler/VoiceCommandHandler.java public class VoiceCommandHandler { private final Map<String, IVoiceCommandHandler> _entries = new HashMap<>(); protected VoiceCommandHandler() { ............ ............ + registerHandler(new VoiceExitSoloZone()); } public void registerHandler(IVoiceCommandHandler handler) { for (String command : handler.getVoiceCommandList()) _entries.put(command, handler); } diff --git a/java/net/sf/l2j/gameserver/model/actor/Npc.java b/java/net/sf/l2j/gameserver/model/actor/Npc.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/model/actor/Npc.java else if (command.startsWith("Chat")) { int val = 0; try { val = Integer.parseInt(command.substring(5)); } catch (final IndexOutOfBoundsException ioobe) { } catch (final NumberFormatException nfe) { } showChatWindow(player, val); + ) + else if (command.startsWith("solopvp")) + { + SoloZoneTaskManager.getInstance(); + player.teleportTo(SoloZoneTaskManager.getCurrentZone().getLoc(), 25); + } else if (command.startsWith("Link")) { final String path = command.substring(5).trim(); if (path.indexOf("..") != -1) return; final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); html.setFile("data/html/" + path); html.replace("%objectId%", getObjectId()); player.sendPacket(html); } diff --git a/java/net/sf/l2j/gameserver/network/clientpackets/RequestRestartPoint.java b/java/net/sf/l2j/gameserver/network/clientpackets/RequestRestartPoint.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/network/clientpackets/RequestRestartPoint.java // Fixed. - else if (_requestType == 4) - { - if (!player.isGM() && !player.isFestivalParticipant()) - return; - - loc = player.getPosition(); - } + if (_requestType == 4) + { + // Έλεγχος αν ο παίκτης δεν είναι GM, δεν είναι μέρος του φεστιβάλ και δεν είναι στην Solo Zone + if (!player.isGM() && !player.isFestivalParticipant() && !player.isInsideZone(ZoneId.SOLO)) + { + return; + } + + SoloZoneTaskManager.getInstance(); + SoloZone currentZone = SoloZoneTaskManager.getCurrentZone(); + if (currentZone != null && currentZone.getLoc() != null) + { + // Αν υπάρχει ζώνη και οι τοποθεσίες δεν είναι κενές, χρησιμοποιούμε τυχαία τοποθεσία από την ζώνη + loc = currentZone.getLoc(); + } else + { + // Διαφορετικά, κάνουμε respawn στην τρέχουσα θέση του παίκτη + loc = player.getPosition(); + } + } diff --git a/java/net/sf/l2j/gameserver/network/clientpackets/RequestRestart.java b/java/net/sf/l2j/gameserver/network/clientpackets/RequestRestart.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/network/clientpackets/RequestRestart.java if (player.isFestivalParticipant() && FestivalOfDarknessManager.getInstance().isFestivalInitialized()) { player.sendPacket(SystemMessageId.NO_RESTART_HERE); sendPacket(RestartResponse.valueOf(false)); return; } + if (player.isInsideZone(ZoneId.SOLO)) + { + player.sendMessage("You cannot restart your character while in Solo Zone. Use .exit to leave"); + player.setFakeName(null); + sendPacket(RestartResponse.valueOf(false)); + return; + } player.removeFromBossZone(); diff --git a/java/net/sf/l2j/gameserver/network/clientpackets/Logout.java b/java/net/sf/l2j/gameserver/network/clientpackets/Logout.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/network/clientpackets/Logout.java player.removeFromBossZone(); player.logout(true); } } + + if (player.isInsideZone(ZoneId.SOLO)) + { + player.sendMessage("You cannot logout or restart your character while in Solo Zone. Use .exit to leave"); + player.setFakeName(null); + player.sendPacket(ActionFailed.STATIC_PACKET); + return; + } + player.removeFromBossZone(); player.logout(true); } } diff --git a/java/net/sf/l2j/gameserver/model/zone/type/SoloZone.java b/java/net/sf/l2j/gameserver/model/zone/type/SoloZone.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/model/zone/type/SoloZone.java +package net.sf.l2j.gameserver.model.zone.type; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +import net.sf.l2j.commons.random.Rnd; + +import net.sf.l2j.Config; +import net.sf.l2j.gameserver.enums.MessageType; +import net.sf.l2j.gameserver.enums.ZoneId; +import net.sf.l2j.gameserver.handler.voicecommandhandlers.VoiceExitSoloZone; +import net.sf.l2j.gameserver.model.World; +import net.sf.l2j.gameserver.model.actor.Creature; +import net.sf.l2j.gameserver.model.actor.Player; +import net.sf.l2j.gameserver.model.location.Location; +import net.sf.l2j.gameserver.model.zone.type.subtype.ZoneType; +import net.sf.l2j.gameserver.network.SystemMessageId; +import net.sf.l2j.gameserver.network.serverpackets.EtcStatusUpdate; +import net.sf.l2j.gameserver.taskmanager.PvpFlagTaskManager; +import net.sf.l2j.gameserver.taskmanager.SoloZoneTaskManager; + +/** + * @author MarGaZeaS + * + */ +public class SoloZone extends ZoneType +{ + private String _name; + private List<Location> _locations = new ArrayList<>(); + + public SoloZone(int id) + { + super(id); + } + + @Override + public void setParameter(String name, String value) + { + if (name.equals("name")) + _name = value; + else if (name.equals("locs")) + { + for (String locs : value.split(";")) + { + String[] coordinates = locs.split(","); + if (coordinates.length == 3) + { + int x = Integer.parseInt(coordinates[0]); + int y = Integer.parseInt(coordinates[1]); + int z = Integer.parseInt(coordinates[2]); + _locations.add(new Location(x, y, z)); + } + else + { + LOGGER.warn("Invalid location format: " + locs); + } + } + } + } + + + @Override + protected void onEnter(Creature character) + { + if (character instanceof Player) + { + final Player player = (Player) character; + + if ((player.getClassId().getId() == 15 || player.getClassId().getId() == 16 || player.getClassId().getId() == 97)) + { + Location respawnLocation = VoiceExitSoloZone.getExitLocation(); + player.instantTeleportTo(respawnLocation, 20); + player.sendMessage("Your class is not allowed in this zone."); + return; + } + + String randomName = SoloZoneTaskManager.getInstance().getAName(); + if (randomName == null || randomName.isEmpty() || !isValidName(randomName)) + { + randomName = generateRandomName(); + } + if (isNameAlreadyTaken(randomName)) + { + randomName = generateRandomName(); + } + player.setFakeName(randomName); + player.sendMessage("Welcome to the Solo Zone, your random name is: " + randomName); + player.sendPacket(SystemMessageId.ENTERED_COMBAT_ZONE); + character.setInsideZone(ZoneId.SOLO, true); + character.setInsideZone(ZoneId.NO_STORE, true); + character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, true); + + if (player.getParty() != null) + { + player.getParty().removePartyMember(player, MessageType.DISCONNECTED); + } + + if (player.getPvpFlag() > 0) + PvpFlagTaskManager.getInstance().remove(player, true); + + player.updatePvPStatus(); + player.broadcastUserInfo(); + } + } + + private static boolean isValidName(String name) { + return name.matches("[a-zA-Z0-9_]+"); + } + + private static String generateRandomName() { + Random rand = new Random(); + int nameLength = rand.nextInt(12) + 4; + StringBuilder nameBuilder = new StringBuilder(); + + for (int i = 0; i < nameLength; i++) { + char randomChar = (char) (rand.nextInt(26) + 'a'); + nameBuilder.append(randomChar); + } + + return nameBuilder.toString(); + } + + private static boolean isNameAlreadyTaken(String name) { + return World.getInstance().getPlayers().stream().anyMatch(player -> player.getFakeName().equals(name)); + } + + @Override + protected void onExit(Creature character) + { + character.setInsideZone(ZoneId.SOLO, false); // Solo zone + character.setInsideZone(ZoneId.NO_STORE, false); // Allow making a store + character.setInsideZone(ZoneId.NO_SUMMON_FRIEND, false); // Allow summon + + if (character instanceof Player) + { + final Player player = (Player) character; + + if (player.getFakeName() != null) + { + player.setFakeName(null); + } + + player.sendPacket(SystemMessageId.LEFT_COMBAT_ZONE); + { + if(!player.isInObserverMode() && player.getPvpFlag() > 0) + PvpFlagTaskManager.getInstance().add(player, Config.PVP_NORMAL_TIME); + + player.sendPacket(new EtcStatusUpdate(player)); + player.broadcastUserInfo(); + } + } + } + + public String getName() + { + return _name; + } + + public Location getLoc() + { + if (_locations.isEmpty()) + { + return null; // Αν η λίστα είναι κενή, επιστρέφουμε null + } + return _locations.get(Rnd.get(0, _locations.size() - 1)); // Επιλέγουμε τυχαία τοποθεσία + } +} diff --git a/java/net/sf/l2j/gameserver/GameServer.java b/java/net/sf/l2j/gameserver/GameServer.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/GameServer.java if (Config.ALLOW_FISH_CHAMPIONSHIP) FishingChampionshipManager.getInstance(); + StringUtil.printSection("Custom Features"); + SoloZoneTaskManager.getInstance(); StringUtil.printSection("Handlers"); LOGGER.info("Loaded {} admin command handlers.", AdminCommandHandler.getInstance().size()); diff --git a/java/net/sf/l2j/gameserver/GameServer.java b/java/net/sf/l2j/gameserver/Shutdown.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/Shutdown.java // disconnect players try { disconnectAllPlayers(); LOGGER.info("All players have been disconnected."); } catch (Exception e) { // Silent catch. } + // Restore real names for players in SoloZone + restoreRealNamesInSoloZone(); // stop all threadpolls ThreadPool.shutdown(); try { LoginServerThread.getInstance().interrupt(); } catch (Exception e) { // Silent catch. } // avoids new players from logging in if (_secondsShut <= 60 && LoginServerThread.getInstance().getServerType() != ServerType.DOWN) LoginServerThread.getInstance().setServerType(ServerType.DOWN); _secondsShut--; Thread.sleep(1000); } } catch (InterruptedException e) { } } + // This method restores the real names of players in SoloZone + private static void restoreRealNamesInSoloZone() + { + for (Player player : World.getInstance().getPlayers()) + { + // Check if player is inside the SoloZone + if (player.isInsideZone(ZoneId.SOLO)) + { + // Restore the real name by removing the fake name + if (player.getFakeName() != null) + { + player.setFakeName(null); // Restore the real name + LOGGER.info("Player {}'s fake name has been removed and real name restored.", player.getName()); + } + } + } + } private static void sendServerQuit(int seconds) { World.toAllOnlinePlayers(SystemMessage.getSystemMessage(SystemMessageId.THE_SERVER_WILL_BE_COMING_DOWN_IN_S1_SECONDS).addNumber(seconds)); } diff --git a/java/net/sf/l2j/gameserver/enums/ZoneId.java b/java/net/sf/l2j/gameserver/enums/ZoneId.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/enums/ZoneId.java public enum ZoneId { PVP(0), PEACE(1), SIEGE(2), MOTHER_TREE(3), CLAN_HALL(4), NO_LANDING(5), WATER(6), JAIL(7), MONSTER_TRACK(8), CASTLE(9), SWAMP(10), NO_SUMMON_FRIEND(11), NO_STORE(12), TOWN(13), HQ(14), DANGER_AREA(15), CAST_ON_ARTIFACT(16), NO_RESTART(17), SCRIPT(18), - BOSS(19), + BOSS(19), + SOLO(20); private final int _id; private ZoneId(int id) { _id = id; } diff --git a/java/net/sf/l2j/gameserver/network/serverpackets/Die.java b/java/net/sf/l2j/gameserver/network/serverpackets/Die.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/network/serverpackets/Die.java if (creature instanceof Player) { Player player = (Player) creature; - _allowFixedRes = player.getAccessLevel().allowFixedRes(); + _allowFixedRes = player.getAccessLevel().allowFixedRes() || player.isInsideZone(ZoneId.SOLO); _clan = player.getClan(); } diff --git a/java/net/sf/l2j/gameserver/model/actor/Player.java b/java/net/sf/l2j/gameserver//model/actor/Player.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java // Attacker or spectator logging into a siege zone will be ported at town. if (player.isInsideZone(ZoneId.SIEGE) && player.getSiegeState() < 2) player.teleportTo(TeleportType.TOWN); + if (player.isInsideZone(ZoneId.SOLO)) + { + ThreadPool.schedule(() -> { + Location exitLocation = VoiceExitSoloZone.getExitLocation(); + + if (exitLocation != null) + { + player.teleportTo(exitLocation.getX(), exitLocation.getY(), exitLocation.getZ(), 0); + player.sendMessage("You have been moved to the exit of the SoloZone."); + } + }, 5000); // 5000 milliseconds (5sec) + } diff --git a/java/net/sf/l2j/gameserver/model/actor/Player.java b/java/net/sf/l2j/gameserver/model/actor/Player.java new file mode 100644 index 0000000..6b7ef6f --- /dev/null +++ a/java/net/sf/l2j/gameserver/model/actor/Player.java @Override public void doRevive() { super.doRevive(); stopEffects(EffectType.CHARM_OF_COURAGE); sendPacket(new EtcStatusUpdate(this)); getStatus().setCpHpMp(getStatus().getMaxCp(), getStatus().getMaxHp(), getStatus().getMaxMp()); _reviveRequested = 0; _revivePower = 0; if (isMounted()) startFeed(_mountNpcId); + if (isInsideZone(ZoneId.SOLO)) + { + // Give Nobless (1323 ID) + L2Skill no = SkillTable.getInstance().getInfo(1323, 1); + no.getEffects(this, this); + sendMessage("You have received the Nobless status in the Solo Zone."); + } + }   If anyone thinks the code is wrong, please make an update and upload it here so I can update the post. A part was edited with chatgpt
    • Always remember, when you buy files, just compare with my files that I publish for free. and you will know that you are being ripped off. Greetings to all community!!! 🙂
    • Thank you for sharing. You are a capable and skilled person. Thank you again for your selfless dedication, Guytis🫡
    • he kept his promise! i think it's a good idea to unban his old account. he shares files with the community and could help both new and veteran l2off users! good job, Guytis!
  • Topics

×
×
  • Create New...